示例#1
0
        /// <summary>
        /// Returns a list of scans which current scan could contribute to completing
        /// </summary>
        /// <param name="sc"></param>
        /// <param name="setID"></param>
        /// <returns></returns>
        public List <VTMagazyn> GetBelowDeclaredMatches(ScannedCode sc, int setID, List <VTMagazyn> listOfVT, List <VTMagazyn> scansForDay, List <Dostawa> listOfDeliveries)
        {
            int declared = GetPossibleDeclaredValue(sc, listOfVT, listOfDeliveries, setID);

            return(listOfVT.Where(c => c.SztukiZeskanowane + sc.sztukiSkanowane < declared &&
                                  c.autocompleteEnabled == true && c.NumerKompletu == setID).OrderByDescending(c => c.SztukiZeskanowane).ToList());
        }
示例#2
0
        /// <summary>
        /// Returns a scan which current scan would complete perfectly
        /// </summary>
        /// <param name="sc"></param>
        /// <param name="setID"></param>
        /// <returns></returns>
        public VTMagazyn GetPerfectMatchVT(ScannedCode sc, int setID, List <VTMagazyn> listOfVT, List <VTMagazyn> scansForDay, List <Dostawa> listOfDeliveries)
        {
            int declared = GetPossibleDeclaredValue(sc, scansForDay, listOfDeliveries, setID);

            return(listOfVT.FirstOrDefault(c => c.SztukiZeskanowane + sc.sztukiSkanowane == declared &&
                                           c.autocompleteEnabled == true && c.NumerKompletu == setID));
        }
示例#3
0
        public int GetScannedForDay(ScannedCode sc, List <VTMagazyn> vtScans)
        {
            int forToday = vtScans.Where(c => c.KodCiety == sc.kodCiety && c.DataDostawy.Date == sc.dataDostawyOld.Date).Select(c => c.SztukiZeskanowane).Sum();
            int daysBack = _db.VTMagazyn.Where(c => c.KodCiety == sc.kodCiety && c.DataDopisu != null && ((DateTime)c.DataDopisu).Date == sc.dataDostawyOld.Date).Select(c => c.DopisanaIlosc).Sum();

            return(forToday + daysBack);
        }
示例#4
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(CustomPacket response, Technical techEntry, ScannedCode sc, Dostawa dostawaEntry)
 {
     if (!SearchBack(techEntry, sc, dostawaEntry))
     {
         return(AddOrCreateNewSet(response, techEntry, sc, dostawaEntry));
     }
     return(true);
 }
        private void AppServer_NewRequestReceived(AppSession session, StringRequestInfo requestInfo)
        {
            //DeviceName = requestInfo.Key;
            var code = new BaseCode(requestInfo.Key, requestInfo.Body);

            new Thread(delegate()
            {
                ThreadPool.QueueUserWorkItem(delegate
                {
                    System.Threading.SynchronizationContext.SetSynchronizationContext(new System.Windows.Threading.DispatcherSynchronizationContext(System.Windows.Application.Current.Dispatcher));
                    System.Threading.SynchronizationContext.Current.Send(pl =>
                    {
                        //执行相关任务.....
                        ScannedCode.Insert(0, code);

                        var fileInfo = new FileInfo(FilePath);
                        if (!fileInfo.Directory.Exists)
                        {
                            try
                            {
                                fileInfo.Directory.Create();
                            }
                            catch (DirectoryNotFoundException)
                            {
                                MessageBox.Show(Owner, "路径无效,无法创建相关文件!");
                                return;
                            }
                        }

                        //写入本地
                        try
                        {
                            using (var writer = new StreamWriter(FilePath))
                            {
                                using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
                                {
                                    csv.WriteRecords(ScannedCode);
                                }
                            }
                        }
                        catch (UnauthorizedAccessException)
                        {
                            MessageBox.Show(Owner, "无权限写入文件,请以管理员权限运行!");
                        }
                        catch (System.IO.IOException)
                        {
                            MessageBox.Show(Owner, "文件被占用,无法写入!");
                        }
                    }, null);
                });
            }).Start();

            session.Send("OK\r\n");
            Console.WriteLine($"收到{session.RemoteEndPoint.ToString()}: {requestInfo.Key} {requestInfo.Body}");
        }
示例#6
0
 public List <int> GetSetIDsForBundle(ScannedCode scanned)
 {
     try
     {
         return(_db.VTMagazyn.AsNoTracking().Where(c => c.Wiazka == scanned.Wiazka && c.DataDostawy.Date == scanned.dataDostawyOld.Date).Select(c => c.NumerKompletu).Distinct().ToList());
     }
     catch (Exception ex)
     {
         return(new List <int>());
     }
 }
示例#7
0
 /// <summary>
 /// Get set ids for current cable id
 /// </summary>
 /// <param name="scanned"></param>
 /// <returns></returns>
 public List <int> GetCompleteID(ScannedCode scanned)
 {
     try
     {
         return(_db.VTMagazyn.AsNoTracking().Where(c => c.KodCiety == scanned.kodCiety && c.DataDostawy.Date == scanned.dataDostawyOld.Date).Select(c => c.NumerKompletu).ToList());
     }
     catch (Exception ex)
     {
         return(new List <int>());
     }
 }
示例#8
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(CustomPacket 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);
        }
示例#9
0
        /// <summary>
        /// Automates the process of completing bundle sets and setting proper values for amount of cables scanned per bundle
        /// </summary>
        /// <param name="sc"></param>
        /// <param name="numToComplete">Amount of cables scanned counting towards completion of a bundle</param>
        /// <param name="numScanned">Amount of cables scanned overall for this bundle</param>
        /// <param name="numScannedToComplete">Amount of cables going into that bundle</param>
        /// <returns></returns>
        public bool checkComplete(ScannedCode sc, out int numToComplete, out int numScanned, out int numScannedToComplete)
        {
            int completeID = sc.NumerKompletu;

            List <VTMagazyn> Scanned = _db.VTMagazyn.Where(
                c => c.Wiazka == sc.Wiazka &&
                c.NumerKompletu == completeID &&
                c.DataDostawy.Date == sc.dataDostawyOld.Date).ToList();

            int possibleDeclared = GetPossibleDeclaredValue(sc
                                                            , Scanned,
                                                            _db.Dostawa.AsNoTracking().Include(c => c.Technical)
                                                            .Where(c => c.Technical.Wiazka == sc.Wiazka && c.Data.Date == sc.dataDostawyOld.Date).ToList(),
                                                            completeID);

            numToComplete = _db.Technical.AsNoTracking().Where(c => c.Wiazka == sc.Wiazka && c.KanBan == false).Count();

            numScanned           = Scanned.Count();
            numScannedToComplete = Scanned.Where(c => possibleDeclared <= c.SztukiZeskanowane &&
                                                 c.autocompleteEnabled == true).Count();


            // Update values depending on scans
            foreach (var scan in Scanned)
            {
                if (scan.autocompleteEnabled == true)
                {
                    if (numToComplete == numScannedToComplete)
                    {
                        scan.Komplet = true;
                    }
                    if (!scan.wymuszonaIlosc)
                    {
                        scan.SztukiDeklarowane = possibleDeclared;
                    }

                    scan.ZeskanowanychNaKomplet = numScannedToComplete;
                    scan.NaKomplet = numToComplete;
                }
            }

            _db.UpdateRange(Scanned);
            _db.SaveChanges();

            // decide whether bundle have been completed
            if (numToComplete == numScannedToComplete)
            {
                return(true);
            }
            return(false);
        }
示例#10
0
        //todo try to optimize the setID == 0 route
        /// <summary>
        /// Function tries to guess what's the declared value for a choosen set
        /// </summary>
        /// <param name="scanned"></param>
        /// <param name="setID">ID of a set to get declared ammount for</param>
        /// <returns></returns>
        public int GetPossibleDeclaredValue(ScannedCode scanned, List <VTMagazyn> VTScans, List <Dostawa> Deliveries, int setID = 0)
        {
            List <VTMagazyn> pastScans     = new List <VTMagazyn>();
            List <Dostawa>   declaredScans = new List <Dostawa>();

            // For first set try to guess based off of delivery file
            if (setID == 0)
            {
                pastScans = VTScans.Where(c =>
                                          c.Wiazka == scanned.Wiazka &&
                                          c.DataDostawy.Date == scanned.dataDostawyOld.Date &&
                                          c.autocompleteEnabled == true &&
                                          c.NumerKompletu == setID).ToList();

                if (pastScans.Count > 0 && pastScans[0].wymuszonaIlosc)
                {
                    return(pastScans[0].SztukiDeklarowane);
                }

                declaredScans = Deliveries.Where(c => c.Data.Date == scanned.dataDostawyOld.Date && c.Technical.KanBan == false).ToList();
            }
            // For any subsequent set guess based off of current scans
            else
            {
                pastScans = VTScans.Where(c =>
                                          c.DataDostawy.Date == scanned.dataDostawyOld.Date &&
                                          c.autocompleteEnabled == true &&
                                          c.NumerKompletu == setID).ToList();
            }

            // If declared value have been forced by manager use it
            if (pastScans.Count > 0 && pastScans[0].wymuszonaIlosc)
            {
                return(pastScans[0].SztukiDeklarowane);
            }

            if (declaredScans.Count > 0)
            {
                return(declaredScans.OrderByDescending(c => c.Ilosc).GroupBy(c => c.Ilosc).OrderByDescending(c => c.Count()).Select(c => c.Key).First());
            }
            else if (pastScans.Count > 0)
            {
                return(pastScans.OrderByDescending(c => c.SztukiZeskanowane).GroupBy(i => i.SztukiZeskanowane).OrderByDescending(grp => grp.Count()).Select(grp => grp.Key).First());
            }
            else
            {
                return(0);
            }
        }
示例#11
0
        public bool shouldPrintSpecial(ScannedCode sc)
        {
            var scan = _db.VTMagazyn.Include(c => c.Technical).Where(
                c => c.DataDostawy == sc.dataDostawyOld &&
                c.Wiazka == sc.Wiazka &&
                c.Technical.BIN == sc.BIN &&
                c.NumerKompletu == sc.NumerKompletu &&
                c.KodCiety != sc.kodCiety).FirstOrDefault();

            var technical = _db.Technical.AsNoTracking().Where(c => c.Wiazka == sc.Wiazka).Select(c => c.BIN).Distinct();

            if (scan != null || technical.Count() == 1)
            {
                return(false);
            }

            return(true);
        }
示例#12
0
        public async Task <ActionResult <ScannedResponse> > GetTech(
            string sessionGUID,
            string kodWiazkiTextbox,
            int forcedQuantity,
            bool isLookingBack,
            int dostDay, int dostMonth, int dostYear,
            string dokDostawy,
            bool isForcedQuantity,
            bool isForcedOverLimit,
            bool isForcedBackAck,
            bool isForcedBack,
            bool isForcedInsert,
            bool isForcedUndeclared,
            bool isForcedOverDeclared,
            string User
            )
        {
            // STO72301  210793
            var scan = _db.ScanCache.Find(Guid.Parse(sessionGUID));

            if (scan == null)
            {
                await _db.ScanCache.AddAsync(new ScanCache { ScanCacheId = Guid.Parse(sessionGUID) });

                await _db.SaveChangesAsync();

                scan = _db.ScanCache.Find(Guid.Parse(sessionGUID));
            }

            VTInsertFunctions VTFuncs  = new VTInsertFunctions(_db, scan);
            ScannedResponse   response = new ScannedResponse();
            ScannedCode       sc       = new ScannedCode();

            sc.kodCietyFull = kodWiazkiTextbox.ToUpper().Replace("PLC", "").Trim().Substring(0, 8);
            if (forcedQuantity == 0)
            {
                sc.sztukiSkanowane = int.Parse(kodWiazkiTextbox.ToUpper().Replace("PLC", "").Trim().Substring(8));
            }
            else
            {
                sc.sztukiSkanowane = forcedQuantity;
            }
            sc.kodCiety = sc.kodCietyFull.TrimStart('0');

            sc.isLookingBack        = isLookingBack;
            sc.dataDostawy          = new DateTime(dostYear, dostMonth, dostDay);
            sc.DokDostawy           = dokDostawy;
            sc.isForcedQuantity     = isForcedQuantity;
            sc.isForcedOverLimit    = isForcedOverLimit;
            sc.isForcedBackAck      = isForcedBackAck;
            sc.isForcedBack         = isForcedBack;
            sc.isForcedInsert       = isForcedInsert;
            sc.isForcedUndeclared   = isForcedUndeclared;
            sc.isForcedOverDeclared = isForcedOverDeclared;
            sc.User                  = User;
            sc.Declared              = false;
            sc.complete              = false;
            sc.isFullSet             = false;
            sc.addedBefore           = false;
            sc.dataDostawyOld        = DateTime.MinValue;
            sc.dataDoskanowania      = DateTime.Now;
            sc.dataUtworzenia        = DateTime.Now;
            response.Args            = new List <string>();
            response.sztukiSkanowane = sc.sztukiSkanowane;

            var techEntry = _db.Technical.IgnoreQueryFilters().FirstOrDefault(c => c.PrzewodCiety == sc.kodCiety);

            if (techEntry == null)
            {
                if (_db.MissingFromTech.Find(sc.kodCiety) == null)
                {
                    _db.MissingFromTech.Add(new MissingFromTech {
                        DataDodania = sc.dataDoskanowania, Kod = sc.kodCiety, User = sc.User
                    });
                    _db.SaveChanges();
                }
                response.Header = HeaderTypes.error;
                response.Flag   = FlagType.notInTech;
                return(response);
            }
            else if (techEntry.Deleted == true)
            {
                response.Header = HeaderTypes.error;
                response.Flag   = FlagType.isDeleted;
                return(response);
            }
            else if (techEntry.KanBan == true)
            {
                if (_db.ScannedKanbans.FirstOrDefault(c => c.Kod == sc.kodCiety && c.Wiazka == techEntry.Wiazka) == null)
                {
                    _db.ScannedKanbans.Add(new ScannedKanban {
                        DataDodania = sc.dataDoskanowania, Kod = sc.kodCiety, Wiazka = techEntry.Wiazka, User = sc.User
                    });
                    _db.SaveChanges();
                }
                response.Header = HeaderTypes.error;
                response.Flag   = FlagType.isKanban;
                return(response);
            }

            sc.Wiazka  = techEntry.Wiazka;
            sc.Rodzina = techEntry.Rodzina;
            sc.BIN     = techEntry.BIN;

            response.PrzewodCiety  = techEntry.PrzewodCiety;
            response.BIN           = techEntry.BIN;
            response.KodWiazki     = techEntry.KodWiazki;
            response.LiteraRodziny = techEntry.LiterRodziny;
            response.IlePrzewodow  = techEntry.IlePrzewodow;

            var dostawaEntry = _db.Dostawa.FirstOrDefault(c => c.Data.Date == sc.dataDostawy.Date && c.Kod == "PLC" + sc.kodCietyFull);

            if (dostawaEntry != null)
            {
                sc.dataDostawy    = dostawaEntry.Data;
                sc.dataDostawyOld = dostawaEntry.Data;
                //sc.isFullSet = VTFuncs.CheckIfFullSetOfSupply(sc);
                sc.sztukiDeklarowane = dostawaEntry.Ilosc;
                sc.Declared          = true;

                // if codes to complete set are missing check back
                if (sc.sztukiSkanowane == sc.sztukiDeklarowane)
                {
                    var sets       = _db.VTMagazyn.Where(c => c.Wiazka == sc.Wiazka && c.DataDostawy.Date == sc.dataDostawyOld.Date).ToList();
                    var deliveries = _db.Dostawa.Include(c => c.Technical).Where(c => c.Technical.Wiazka == sc.Wiazka && c.Data.Date == sc.dataDostawyOld.Date).ToList();
                    int declared   = VTFuncs.GetPossibleDeclaredValue(sc, sets, deliveries, sc.NumerKompletu);

                    if (sc.sztukiSkanowane != declared && !sc.isForcedOverDeclared)
                    {
                        response.Header = HeaderTypes.error;
                        response.Flag   = FlagType.quantityOverDeclated;
                        response.Args.Add(sc.sztukiDeklarowane.ToString());
                        response.Args.Add(VTFuncs.GetScannedForDay(sc, sets).ToString());
                        response.Args.Add(declared.ToString());
                        response.Args.Add($"{declared - sc.sztukiSkanowane}");

                        return(response);
                    }
                    else
                    {
                        if (!VTFuncs.CheckBackOrAdd(response, techEntry, sc, dostawaEntry))
                        {
                            return(response);
                        }
                    }
                }
                else if (sc.sztukiSkanowane != sc.sztukiDeklarowane)
                {
                    if (!sc.isForcedQuantity)
                    {
                        response.Header = HeaderTypes.error;
                        response.Flag   = FlagType.quantityIncorrect;
                        response.Args.Add(sc.sztukiDeklarowane.ToString());
                        var sets       = _db.VTMagazyn.Where(c => c.Wiazka == sc.Wiazka && c.DataDostawy.Date == sc.dataDostawyOld.Date).ToList();
                        var deliveries = _db.Dostawa.Include(c => c.Technical).Where(c => c.Technical.Wiazka == sc.Wiazka && c.Data.Date == sc.dataDostawyOld.Date).ToList();
                        int declared   = VTFuncs.GetPossibleDeclaredValue(sc, sets, deliveries, sc.NumerKompletu);
                        response.Args.Add(VTFuncs.GetScannedForDay(sc, sets).ToString());

                        response.Args.Add(declared.ToString());
                        response.Args.Add($"{declared - sc.sztukiSkanowane}");

                        return(response);
                    }
                    else
                    {
                        if (!VTFuncs.CheckBackOrAddQuantityIncorrect(response, techEntry, sc, dostawaEntry))
                        {
                            return(response);
                        }
                    }
                }
            }
            else
            {
                sc.dataDostawy    = sc.dataDostawy.Date;
                sc.dataDostawyOld = sc.dataDostawy.Date;

                if (!sc.isForcedUndeclared)
                {
                    response.Header = HeaderTypes.error;
                    response.Flag   = FlagType.notInDeclared;
                    return(response);
                }
                else
                {
                    if (!sc.isForcedQuantity)
                    {
                        response.Header = HeaderTypes.error;
                        response.Flag   = FlagType.quantityIncorrect;
                        response.Args.Add("0");
                        var sets       = _db.VTMagazyn.Where(c => c.Wiazka == sc.Wiazka && c.DataDostawy.Date == sc.dataDostawyOld.Date).ToList();
                        var deliveries = _db.Dostawa.Include(c => c.Technical).Where(c => c.Technical.Wiazka == sc.Wiazka && c.Data.Date == sc.dataDostawyOld.Date).ToList();
                        int declared   = VTFuncs.GetPossibleDeclaredValue(sc, sets, deliveries, sc.NumerKompletu);
                        response.Args.Add(VTFuncs.GetScannedForDay(sc, sets).ToString());

                        response.Args.Add(declared.ToString());
                        response.Args.Add($"{declared - sc.sztukiSkanowane}");

                        return(response);
                    }
                    else
                    {
                        if (!VTFuncs.CheckBackOrAddQuantityIncorrect(response, techEntry, sc, dostawaEntry))
                        {
                            return(response);
                        }
                    }
                }
            }
            _db.SaveChanges();

            bool isComplete = VTFuncs.checkComplete(sc, out int numToComplete, out int numScanned, out int numScannedToComplete);

            response.DataDostawy          = sc.dataDostawy;
            response.DataDostawyOld       = sc.dataDostawyOld;
            response.numToComplete        = numToComplete;
            response.numScanned           = numScanned;
            response.numScannedToComplete = numScannedToComplete;
            response.isComplete           = isComplete;
            response.sztukiDeklatowane    = sc.sztukiDeklarowane;
            response.numerKompletu        = sc.NumerKompletu;
            response.Wiazka          = sc.Wiazka;
            response.Rodzina         = sc.Rodzina;
            response.sztukiSkanowane = sc.sztukiSkanowane;

            if (numScanned == 1)
            {
                response.print          = true;
                response.isSpecialColor = false;
            }
            if (VTFuncs.shouldPrintSpecial(sc))
            {
                response.print          = true;
                response.isSpecialColor = true;
            }

            return(response);
        }
示例#13
0
        public void UpdateForm()
        {
            ScannedCode sc = new ScannedCode();

            string code = kodWiazkiTextbox.Text.ToUpper().Replace("PLC", "").Trim();

            if (code.Length <= 8)
            {
                MessageBox.Show($"Podany kod jest za krótki ({code.Length} znaków), powinien składać się z przynajmniej 9 znaków wykluczjąc przedrostek PLC", "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            string cutcode = code.Substring(0, 8);

            int.TryParse(code.Substring(8), out int quantity);
            if (quantity == 0)
            {
                MessageBox.Show("Podana ilość kabli nie jest wartością liczbową.", "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            sc.SessionGUID          = Guid.NewGuid();
            sc.isLookingBack        = lookBackCheckbox.Checked;
            sc.kodCiety             = cutcode.TrimStart('0');
            sc.kodCietyFull         = cutcode;
            sc.sztukiSkanowane      = quantity;
            sc.dataDostawy          = dataSkanowaniaDateTime.Value;
            sc.DokDostawy           = dokumentDostawyTextbox.Text;
            sc.isForcedQuantity     = false;
            sc.isForcedOverLimit    = false;
            sc.isForcedBackAck      = false;
            sc.isForcedBack         = false;
            sc.isForcedInsert       = false;
            sc.isForcedUndeclared   = false;
            sc.isForcedOverDeclared = false;
            sc.User           = userIdTextBox.Text;
            sc.missingEntries = new List <MissingBackwards>();

            CustomPacket cp       = new CustomPacket(FlagType.basic, HeaderTypes.basic, "scan", null, sc);
            CustomPacket response = _client.SendReceiveMessage(cp);

            bool shouldExit = false;

            while (response.Header == HeaderTypes.error)
            {
                if (response.Flag == FlagType.notInTech)
                {
                    MyMessageBox.CreateDialog("Kod nie znaleziony w bazie technicznych", MessageBoxButtons.OK).ShowDialog();
                    shouldExit = true;
                }
                else if (response.Flag == FlagType.quantityIncorrect)
                {
                    Form    form  = MyMessageBox.CreateDialog($"Deklarowana ilość ({response.Args[0]}) nie zgadza się ze zeskanowaną {quantity} (aktualnie zeskanowanych: {response.Args[1]}), komplet na dziś {response.Args[2]}, różnica: {response.Args[3]}, zatwierdź, zmień lub kliknij \"Nie\" by anulować.", MessageBoxButtons.YesNo);
                    TextBox txBox = new TextBox();
                    txBox.Location = new Point(10, 220);
                    txBox.Font     = new Font(FontFamily.GenericSansSerif, 16);
                    txBox.Size     = new Size(form.Size.Width, 50);
                    txBox.Text     = quantity.ToString();
                    txBox.Name     = "quantitytextbox";
                    form.Controls.Add(txBox);

                    if (form.ShowDialog() == DialogResult.Yes)
                    {
                        sc.sztukiSkanowane      = int.Parse((((TextBox)form.Controls.Find("quantitytextbox", false).First()).Text));
                        sc.isForcedQuantity     = true;
                        sc.isForcedOverDeclared = true;
                        response = _client.SendReceiveMessage(cp);
                    }
                    else
                    {
                        shouldExit = true;
                    }
                }
                else if (response.Flag == FlagType.quantityOverDeclated)
                {
                    Form    form  = MyMessageBox.CreateDialog($"Deklarowana ilość ({response.Args[0]}) zgadza się ze zeskanowaną {quantity} (aktualnie zeskanowanych: {response.Args[1]}), ale nie z kompletem na dziś ({response.Args[2]}), różnica: {response.Args[3]}, zatwierdź, zmień lub kliknij \"Nie\" by anulować.", MessageBoxButtons.YesNo);
                    TextBox txBox = new TextBox();
                    txBox.Location = new Point(10, 220);
                    txBox.Font     = new Font(FontFamily.GenericSansSerif, 16);
                    txBox.Size     = new Size(form.Size.Width, 50);
                    txBox.Text     = quantity.ToString();
                    txBox.Name     = "quantitytextbox";
                    form.Controls.Add(txBox);

                    if (form.ShowDialog() == DialogResult.Yes)
                    {
                        sc.sztukiSkanowane      = int.Parse((((TextBox)form.Controls.Find("quantitytextbox", false).First()).Text));
                        sc.isForcedOverDeclared = true;
                        sc.isForcedQuantity     = true;
                        response = _client.SendReceiveMessage(cp);
                    }
                    else
                    {
                        shouldExit = true;
                    }
                }
                else if (response.Flag == FlagType.quantityOverLimit)
                {
                    if (MyMessageBox.CreateDialog($"Po dodaniu rekordu ilość przewodów przekroczy deklarowaną ilość ({response.Args[1]}) do ({response.Args[0]}), kontynuować?", MessageBoxButtons.YesNo).ShowDialog() == DialogResult.Yes)
                    {
                        sc.isForcedOverLimit = true;
                        response             = _client.SendReceiveMessage(cp);
                    }
                    else
                    {
                        shouldExit = true;
                    }
                }
                else if (response.Flag == FlagType.codeFitsBack)
                {
                    ((ScannedCode)cp.Payload).missingEntries = ((ScannedResponse)response.Payload).missingEntries;
                    AcceptChanges AC = new AcceptChanges(((ScannedCode)cp.Payload).missingEntries);
                    AC.ShowDialog();
                    response = _client.SendReceiveMessage(cp);
                }
                else if (response.Flag == FlagType.codeExists)
                {
                    if (MyMessageBox.CreateDialog("Kod został dziś zeskanowany, upewnij się że zeskanowałeś poprawny kod, dodać do bazy?", MessageBoxButtons.YesNo).ShowDialog() == DialogResult.Yes)
                    {
                        sc.isForcedInsert = true;
                        response          = _client.SendReceiveMessage(cp);
                    }
                    else
                    {
                        shouldExit = true;
                    }
                }
                else if (response.Flag == FlagType.codeExistsBack)
                {
                    if (MyMessageBox.CreateDialog("Kod został dziś zeskanowany i dodany wstecz, upewnij się że zeskanowałeś poprawny kod, dodać do bazy?", MessageBoxButtons.YesNo).ShowDialog() == DialogResult.Yes)
                    {
                        sc.isForcedInsert = true;
                        response          = _client.SendReceiveMessage(cp);
                    }
                    else
                    {
                        shouldExit = true;
                    }
                }
                else if (response.Flag == FlagType.notInDeclared)
                {
                    if (MyMessageBox.CreateDialog("Kod nie znaleziony w dokumencie dostawy, dodać mimo to?", MessageBoxButtons.YesNo).ShowDialog() == DialogResult.Yes)
                    {
                        sc.isForcedUndeclared = true;
                        response = _client.SendReceiveMessage(cp);
                    }
                    else
                    {
                        shouldExit = true;
                    }
                }
                else if (response.Flag == FlagType.isKanban)
                {
                    MyMessageBox.CreateDialog("Zeskanowany kod należy do przewodu KanBan.", MessageBoxButtons.OK).ShowDialog();
                    shouldExit = true;
                }
                else if (response.Flag == FlagType.isDeleted)
                {
                    MyMessageBox.CreateDialog("Zeskanowany kod nie powinien być już skanowany, został on usunięty z bazy technicznych.", MessageBoxButtons.OK).ShowDialog();
                    shouldExit = true;
                }
                if (shouldExit)
                {
                    break;
                }
            }

            kodWiazkiTextbox.SelectAll();
            kodWiazkiTextbox.Text = "";
            kodWiazkiTextbox.Focus();



            ScannedResponse sr = (ScannedResponse)response.Payload;

            ciety_label.Text       = sr.PrzewodCiety;
            bin_label.Text         = sr.BIN;
            kodwiazki_label.Text   = sr.KodWiazki;
            litera_label.Text      = sr.LiteraRodziny;
            zeskanowane_label.Text = $"{sr.numScannedToComplete}/{sr.numToComplete}";
            ilosc_label.Text       = $"{sr.sztukiSkanowane}/{sr.sztukiDeklatowane}";
            nrKompletuLabel.Text   = sr.numerKompletu.ToString();

            if (sr.isComplete == true)
            {
                komplet_label.Text      = "Komplet: Tak";
                komplet_label.ForeColor = Color.Green;
                panel1.BackColor        = Color.FromArgb(192, 255, 192);
            }
            else
            {
                panel1.BackColor        = Color.FromArgb(255, 192, 192);
                komplet_label.Text      = "Komplet: Nie";
                komplet_label.ForeColor = Color.Red;
            }

            if (sr.isSpecialColor)
            {
                panel1.BackColor = Color.FromArgb(117, 220, 255);
            }


            datadostawystara_label.Text = sr.DataDostawy.ToShortDateString();
            datadostawynowa_label.Text  = sr.DataDostawyOld.ToShortDateString();

            if (sr.DataDostawyOld.Date < sr.DataDostawy.Date)
            {
                zalegle_label.Visible = true;
            }
            else
            {
                zalegle_label.Visible = false;
            }

            _ = _client.SendReceiveMessage(new CustomPacket(FlagType.basic, HeaderTypes.basic, "disposeCache", null, sc.SessionGUID));

            if (sr.Print)
            {
                Etykieta etykieta = new Etykieta(
                    sr.Rodzina,
                    sr.LiteraRodziny,
                    sr.KodWiazki,
                    sr.numToComplete,
                    sr.numerKompletu,
                    sr.Wiazka,
                    sr.BIN,
                    sr.DataDostawyOld,
                    sr.sztukiDeklatowane);
                etykieta.Show();
                etykieta.Print(printersComboBox.Text, paperSizeComboBox.SelectedIndex);
            }
        }
示例#14
0
        protected CustomPacket Scan(CustomPacket packet)
        {
            using (var _db = new ZEMDBContext())
            {
                ScannedCode sc = (ScannedCode)packet.Payload;
                var scan = _db.ScanCache.Find(sc.SessionGUID);
                if (scan == null)
                {
                    _db.ScanCache.Add(new ScanCache { ScanCacheId = sc.SessionGUID });
                    _db.SaveChanges();
                    scan = _db.ScanCache.Find(sc.SessionGUID);
                }
                VTInsertFunctions VTFuncs = new VTInsertFunctions(_db, _log, scan);
                ScannedResponse sr = new ScannedResponse();
                CustomPacket response = new CustomPacket(FlagType.basic, HeaderTypes.basic, "scan", new List<string>(), sr);
                // 23102720A

                sc.Declared = false;
                sc.complete = false;
                sc.isFullSet = false;
                sc.addedBefore = false;
                sc.dataDostawyOld = DateTime.MinValue;
                sc.dataDoskanowania = DateTime.Now;
                sc.dataUtworzenia = DateTime.Now;

                sr.missingEntries = new List<MissingBackwards>();
                var techEntry = _db.Technical.IgnoreQueryFilters().FirstOrDefault(c => c.PrzewodCiety == sc.kodCiety);
                if (techEntry == null)
                {
                    if (_db.MissingFromTech.Find(sc.kodCiety) == null)
                    {
                        _db.MissingFromTech.Add(new MissingFromTech { DataDodania = sc.dataDoskanowania, Kod = sc.kodCiety, User = sc.User });
                        _db.SaveChanges();
                    }
                    response.Header = HeaderTypes.error;
                    response.Flag = FlagType.notInTech;
                    return response;
                }
                else if (techEntry.Deleted == true)
                {
                    response.Header = HeaderTypes.error;
                    response.Flag = FlagType.isDeleted;
                    return response;

                }
                else if (techEntry.KanBan == true)
                {
                    if (_db.ScannedKanbans.FirstOrDefault(c => c.Kod == sc.kodCiety && c.Wiazka == techEntry.Wiazka) == null)
                    {
                        _db.ScannedKanbans.Add(new ScannedKanban { DataDodania = sc.dataDoskanowania, Kod = sc.kodCiety, Wiazka = techEntry.Wiazka, User = sc.User });
                        _db.SaveChanges();
                    }
                    response.Header = HeaderTypes.error;
                    response.Flag = FlagType.isKanban;
                    return response;
                }

                sc.Wiazka = techEntry.Wiazka;
                sc.Rodzina = techEntry.Rodzina;
                sc.BIN = techEntry.BIN;

                sr.PrzewodCiety = techEntry.PrzewodCiety;
                sr.BIN = techEntry.BIN;
                sr.KodWiazki = techEntry.KodWiazki;
                sr.LiteraRodziny = techEntry.LiterRodziny;
                sr.IlePrzewodow = techEntry.IlePrzewodow;


                var dostawaEntry = _db.Dostawa.FirstOrDefault(c => c.Data.Date == sc.dataDostawy.Date && c.Kod == "PLC" + sc.kodCietyFull);
                if (dostawaEntry != null)
                {
                    sc.dataDostawy = dostawaEntry.Data;
                    sc.dataDostawyOld = dostawaEntry.Data;
                    sc.sztukiDeklarowane = dostawaEntry.Ilosc;
                    sc.Declared = true;

                    if (sc.sztukiSkanowane == sc.sztukiDeklarowane)
                    {
                        var sets = _db.VTMagazyn.Where(c => c.Wiazka == sc.Wiazka && c.DataDostawy.Date == sc.dataDostawyOld.Date).ToList();
                        var deliveries = _db.Dostawa.Include(c => c.Technical).Where(c => c.Technical.Wiazka == sc.Wiazka && c.Data.Date == sc.dataDostawyOld.Date).ToList();
                        int declared = VTFuncs.GetPossibleDeclaredValue(sc, sets, deliveries, sc.NumerKompletu);

                        if (sc.sztukiSkanowane != declared && !sc.isForcedOverDeclared)
                        {
                            response.Header = HeaderTypes.error;
                            response.Flag = FlagType.quantityOverDeclated;
                            response.Args.Add(sc.sztukiDeklarowane.ToString());
                            response.Args.Add(VTFuncs.GetScannedForDay(sc, sets).ToString());
                            response.Args.Add(declared.ToString());
                            response.Args.Add($"{declared - sc.sztukiSkanowane}");

                            return response;
                        }
                        else
                        {
                            if (!VTFuncs.CheckBackOrAdd(response, techEntry, sc, dostawaEntry))
                                return response;
                        }
                    }
                    else if (sc.sztukiSkanowane != sc.sztukiDeklarowane)
                    {
                        if (!sc.isForcedQuantity)
                        {
                            response.Header = HeaderTypes.error;
                            response.Flag = FlagType.quantityIncorrect;
                            response.Args.Add(sc.sztukiDeklarowane.ToString());
                            var sets = _db.VTMagazyn.Where(c => c.Wiazka == sc.Wiazka && c.DataDostawy.Date == sc.dataDostawyOld.Date).ToList();
                            var deliveries = _db.Dostawa.Include(c => c.Technical).Where(c => c.Technical.Wiazka == sc.Wiazka && c.Data.Date == sc.dataDostawyOld.Date).ToList();
                            int declared = VTFuncs.GetPossibleDeclaredValue(sc, sets, deliveries, sc.NumerKompletu);
                            response.Args.Add(VTFuncs.GetScannedForDay(sc, sets).ToString());

                            response.Args.Add(declared.ToString());
                            response.Args.Add($"{declared - sc.sztukiSkanowane}");

                            return response;
                        }
                        else
                        {
                            if (!VTFuncs.CheckBackOrAddQuantityIncorrect(response, techEntry, sc, dostawaEntry))
                                return response;
                        }
                    }
                }
                else
                {
                    sc.dataDostawy = sc.dataDostawy.Date;
                    sc.dataDostawyOld = sc.dataDostawy.Date;

                    if (!sc.isForcedUndeclared)
                    {
                        response.Header = HeaderTypes.error;
                        response.Flag = FlagType.notInDeclared;
                        return response;
                    }
                    else
                    {
                        if (!sc.isForcedQuantity)
                        {
                            response.Header = HeaderTypes.error;
                            response.Flag = FlagType.quantityIncorrect;
                            response.Args.Add("0");
                            var sets = _db.VTMagazyn.Where(c => c.Wiazka == sc.Wiazka && c.DataDostawy.Date == sc.dataDostawyOld.Date).ToList();
                            var deliveries = _db.Dostawa.Include(c => c.Technical).Where(c => c.Technical.Wiazka == sc.Wiazka && c.Data.Date == sc.dataDostawyOld.Date).ToList();
                            int declared = VTFuncs.GetPossibleDeclaredValue(sc, sets, deliveries, sc.NumerKompletu);
                            response.Args.Add(VTFuncs.GetScannedForDay(sc, sets).ToString());

                            response.Args.Add(declared.ToString());
                            response.Args.Add($"{declared - sc.sztukiSkanowane}");

                            return response;
                        }
                        else
                        {
                            if (!VTFuncs.CheckBackOrAddQuantityIncorrect(response, techEntry, sc, dostawaEntry))
                                return response;
                        }
                    }
                }
                _db.SaveChanges();

                bool isComplete = VTFuncs.checkComplete(sc, out int numToComplete, out int numScanned, out int numScannedToComplete);

                sr.DataDostawy = sc.dataDostawy;
                sr.DataDostawyOld = sc.dataDostawyOld;
                sr.numToComplete = numToComplete;
                sr.numScanned = numScanned;
                sr.numScannedToComplete = numScannedToComplete;
                sr.isComplete = isComplete;
                sr.sztukiDeklatowane = sc.sztukiDeklarowane;
                sr.numerKompletu = sc.NumerKompletu;
                sr.Wiazka = sc.Wiazka;
                sr.Rodzina = sc.Rodzina;
                sr.sztukiSkanowane = sc.sztukiSkanowane;

                if (numScanned == 1)
                {
                    sr.Print = true;
                    sr.isSpecialColor = false;
                }
                if (VTFuncs.shouldPrintSpecial(sc))
                {
                    sr.Print = true;
                    sr.isSpecialColor = true;
                }

                _log.Information("Scan details: {@sc}", sc);
                _log.Information("Response details: {@sr}", sr);

                return response;
            }
        }
示例#15
0
 /// <summary>
 /// Returns previous scan if it exists
 /// </summary>
 /// <param name="sc"></param>
 /// <returns></returns>
 public VTMagazyn ExistsInVT(ScannedCode sc)
 {
     return(_db.VTMagazyn.FirstOrDefault(c =>
                                         c.KodCiety == sc.kodCiety &&
                                         c.DataDostawy.Date == sc.dataDostawyOld.Date));
 }
示例#16
0
 public bool CanEexecuteSendCommand()
 {
     return(!(string.IsNullOrEmpty(ScannedCode) && ScannedCode.Equals(AppConstants.ERROR)));
 }
示例#17
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, CustomPacket 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);
        }
示例#18
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(CustomPacket 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);
 }
示例#19
0
        /// <summary>
        /// Browse old scans in hope to find somewhere to add current scan to
        /// </summary>
        /// <param name="technical"></param>
        /// <param name="scanned"></param>
        /// <param name="dostawa"></param>
        /// <returns></returns>
        public bool SearchBack(Technical technical, ScannedCode scanned, Dostawa dostawa)
        {
            if (!scanned.isLookingBack || _scanCache.LookedBack == true)
            {
                return(false);
            }

            // Find all scans between dates
            var pastScans = _db.VTMagazyn.Include(c => c.Dostawy).Where(c =>
                                                                        c.Wiazka == scanned.Wiazka &&
                                                                        c.DataDostawy.Date < scanned.dataDostawy.Date &&
                                                                        c.autocompleteEnabled == true &&
                                                                        c.DataDostawy.Date >= scanned.dataDostawy.Date.AddDays(-7))
                            .OrderBy(c => c.DataDostawy).ToList().GroupBy(c => c.DataDostawy).Select(g => g.ToList()).ToList();

            var pastDeliveries = _db.Dostawa.AsNoTracking().Include(c => c.Technical)
                                 .Where(c => c.Technical.Wiazka == scanned.Wiazka &&
                                        c.Data.Date <scanned.dataDostawy.Date &&
                                                     c.Data.Date> scanned.dataDostawy.Date.AddDays(-7)).ToList();

            foreach (var scanPerDate in pastScans)
            {
                // Look if there are any duplicate scans (multiple sets)
                var duplicateScans    = scanPerDate.Where(c => c.KodCiety == scanned.kodCiety).OrderBy(c => c.NumerKompletu).ToList();
                int mostFrequentCount = 0;

                if (duplicateScans.Count > 0)
                {
                    foreach (var scan in duplicateScans)
                    {
                        mostFrequentCount = GetPossibleDeclaredValue(new ScannedCode {
                            Wiazka = scan.Wiazka, dataDostawyOld = scan.DataDostawy
                        }, scanPerDate, pastDeliveries, scan.NumerKompletu);

                        // If this scan have already been added set flags and notify user
                        if (scan.DataDopisu != null &&
                            ((DateTime)scan.DataDopisu).Date == scanned.dataDostawy.Date &&
                            !scanned.isForcedInsert)
                        {
                            scanned.addedBefore = true;
                            return(false);
                        }

                        // Check if we can add current scan to previous one
                        if (scan.SztukiZeskanowane + scanned.sztukiSkanowane == mostFrequentCount &&
                            scan.SztukiZeskanowane != mostFrequentCount)
                        {
                            scan.SztukiZeskanowane += scanned.sztukiSkanowane;
                            scan.DataDopisu         = scanned.dataDostawy;
                            scan.DopisanaIlosc      = scanned.sztukiSkanowane;
                            scan.DostawaDopis       = scanned.DokDostawy;
                            scanned.dataDostawyOld  = scan.DataDostawy;
                            if (dostawa != null)
                            {
                                UpdateVT(dostawa, scan);
                            }
                            _db.Update(scan);
                            _db.SaveChanges();

                            return(true);
                        }
                    }

                    // Check if any set is missing current scan
                    int[] setIDs = scanPerDate.Where(c => c.Komplet == false).Select(c => c.NumerKompletu).Distinct().ToArray();
                    foreach (int setID in setIDs)
                    {
                        mostFrequentCount = GetPossibleDeclaredValue(new ScannedCode {
                            Wiazka = scanned.Wiazka, dataDostawyOld = scanPerDate[0].DataDostawy
                        }, scanPerDate, pastDeliveries, setID);
                        // Only add on the previous date if "declared" value is the same as scanned
                        if (scanned.sztukiSkanowane == mostFrequentCount && duplicateScans.Where(c => c.NumerKompletu == setID).Select(c => c.KodCiety).FirstOrDefault() != scanned.kodCiety)
                        {
                            scanned.DataDopisu     = scanned.dataDostawy;
                            scanned.DopisanaIlosc  = scanned.sztukiSkanowane;
                            scanned.dataDostawyOld = scanPerDate[0].DataDostawy;
                            scanned.DostawaDopis   = scanned.DokDostawy;
                            AddToVT(technical, scanned, dostawa, true);
                            return(true);
                        }
                    }
                }
                else
                {
                    mostFrequentCount = GetPossibleDeclaredValue(new ScannedCode {
                        Wiazka = scanned.Wiazka, dataDostawyOld = scanPerDate[0].DataDostawy
                    }, scanPerDate, pastDeliveries, 0);
                    // Only add on the previous date if "declared" value is the same as scanned
                    if (scanned.sztukiSkanowane == mostFrequentCount)
                    {
                        scanned.DataDopisu     = scanned.dataDostawy;
                        scanned.DopisanaIlosc  = scanned.sztukiSkanowane;
                        scanned.dataDostawyOld = scanPerDate[0].DataDostawy;
                        scanned.DostawaDopis   = scanned.DokDostawy;
                        AddToVT(technical, scanned, dostawa);
                        return(true);
                    }
                }
            }

            _scanCache.LookedBack = true;
            _db.Update(_scanCache);
            _db.SaveChanges();
            return(false);
        }
示例#20
0
 /// <summary>
 /// Returns a list of incomplete records of code in VT for a date
 /// </summary>
 /// <param name="sc"></param>
 /// <returns></returns>
 public List <VTMagazyn> ExistInVTList(ScannedCode sc)
 {
     return(_db.VTMagazyn.Where(c => c.KodCiety == sc.kodCiety &&
                                c.DataDostawy.Date == sc.dataDostawyOld.Date)
            .Include(c => c.Dostawy).OrderBy(c => c.NumerKompletu).ThenBy(c => c.SztukiZeskanowane).ToList());
 }
示例#21
0
        /// <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);
        }