Ejemplo n.º 1
0
        private void ImportLoadCarrierToStorageLocation_Execute(object sender, SimpleActionExecuteEventArgs e)
        {
            IList listSlocation = View.ObjectSpace.GetObjects(typeof(StorageLocation));

            SplashScreenManager.ShowForm(typeof(Splash));
            SplashScreenManager.Default.SendCommand(Splash.SplashScreenCommand.SetProcessText, "Tárhelyek feltöltése üres ládákkal");

            int maxSize = 100;
            int counter = listSlocation.Count;

            for (int i = 0; i < counter; i++)
            {
                int szazalek = Convert.ToInt32((i + 1) / counter * 100);

                StorageLocation sloc = (StorageLocation)listSlocation[i];

                CriteriaOperator cop = new BinaryOperator("Oid", i + 1);
                LoadCarrier      lc  = (LoadCarrier)View.ObjectSpace.FindObject(typeof(LoadCarrier), cop);

                sloc.StatusCode  = 1;
                sloc.LoadCarrier = lc;
                sloc.LcIsEmpty   = true;
                SplashScreenManager.Default.SendCommand(Splash.SplashScreenCommand.SetProgress, Math.Min(maxSize, szazalek));
            }

            ObjectSpace.CommitChanges();
            SplashScreenManager.CloseForm(false);
            MessageBox.Show("Táblázatok importálása megtörtént!");
        }
        public void SendLoadCarrierBack(int ctrH, int ctrD, int lc, int IocpId, int weight)
        {
            IObjectSpace os = null;

            try
            {
                os = GetNewObjectSpace();

                LoadCarrier     lca            = os.FindObject <LoadCarrier>(new BinaryOperator("Oid", lc));
                StorageLocation targetLocation = FindEmptyLocation(lca);

                if (targetLocation != null)
                {
                    CreateTransportOrder(1, ctrH, ctrD, lca.Oid, IocpId, weight, null, targetLocation);
                }
                else
                {
                    throw new Exception("Nem talált tárolóhelyet");
                }
            }
            catch
            {
                log.Error("ObjectSpace not found");
            }
            finally
            {
                DisposeObjectSpace(os);
            }
        }
Ejemplo n.º 3
0
        public void CreateTransportOrder(int type, int ctrH, int ctrD, LoadCarrier lc, int IocpId, int weight, StorageLocation sourceLocation, StorageLocation targetLocation)
        {
            //Csinálunk egy sessiont
            Session workSession = new Session();

            //Megkeressük az erőforrásokat
            CommonTrHeader ctrHeader = workSession.FindObject <CommonTrHeader>(new BinaryOperator("Oid", ctrH));
            CommonTrDetail cdetail   = workSession.FindObject <CommonTrDetail>(new BinaryOperator("Oid", ctrD));
            Iocp           iocp      = workSession.FindObject <Iocp>(new BinaryOperator("Oid", IocpId));

            //Osztumk egy új sorszámot
            ushort UjTransportID = GetNewSorszam("TPO");

            //Létrehozzuk az új transzportot az adatbázisban
            TransportOrder transportOrder = new TransportOrder(workSession);

            transportOrder.Iocp = iocp;
            transportOrder.TpId = UjTransportID;
            transportOrder.LC   = lc;

            transportOrder.CommonTrHeader = ctrHeader;
            transportOrder.CommonDetail   = cdetail;
            transportOrder.Type           = type;
            transportOrder.TargetTag      = iocp.TargetTag;
            transportOrder.SourceLocation = sourceLocation;
            transportOrder.TargetLocation = targetLocation;
            transportOrder.Weight         = weight;
            transportOrder.Save();


            // Hozzáadjuk a megfelelő iocp zsák queue-hoz
            this.opcClient.addJob(transportOrder);
        }
Ejemplo n.º 4
0
        public StorageLocation FindEmptyLocation(LoadCarrier loadCarrier)
        {
            lock (findLocationLock)
            {
                /*
                 * Üres tárolóhelyet úgy kell megtalálni, hogy meg kell próbálni azokon a folyosókon ahol a termék tárolható egyenlő mértékben elosztani.
                 * Ez azt jelenti, hogy meg kell nézni hogy eddig melyik folyosón mennyit tároltunk és növekvő sorrendben megpróbálni kiszolgálni.
                 * A kiválasztást a láda mérete és a termék ABC besorolása is befolyásolja.
                 * Üres láda beküldésénél ezeket csak részben kell figyelembe venni.
                 */
                StorageLocation sl = null;

                bool          talalt         = false;
                List <int>    meretek        = null;
                List <Aisle>  folyosok       = null;
                List <string> abcBesorolasok = null;

                if (loadCarrier.Stocks.Count == 0)
                {
                    // Folyosók default listája, inicialitzáláskor feltöltődik
                    meretek        = GetStorageHeightListByLc(loadCarrier.LcType.Height);
                    folyosok       = aisleList;
                    abcBesorolasok = abcTypeList;
                }
                else
                {
                    //Ez azért kell, mert ha a ládában több termék van, akkor is csak 1 termék adataiból indulunk ki, mégpedig a legelső termék adataiból
                    for (int i = 0; i < 1; i++)
                    {
                        Product pr = loadCarrier.Stocks[i].Product;
                        meretek        = GetStorageHeightListByLc(loadCarrier.LcType.Height);
                        folyosok       = GetProductAisleByStock(pr);
                        abcBesorolasok = GetAbcListByProduct(pr.AbcClass.Code);
                    }
                }


                for (int i = 0; i < meretek.Count || !talalt; i++)
                {
                    for (int j = 0; j < folyosok.Count || !talalt; j++)
                    {
                        for (int k = 0; k < abcBesorolasok.Count || !talalt; k++)
                        {
                            sl = AdottTarolohelykeresesFolyoson(meretek[i], folyosok[j], abcBesorolasok[k], 0);
                            if (sl != null)
                            {
                                ChangeLocationStatus(sl, 3);
                                talalt = true;
                            }
                        }
                    }
                }
                return(sl);
            }
        }
        private void LogX_TarhelyGeneralas_Execute(object sender, SimpleActionExecuteEventArgs e)
        {
            numberOfAisle  = 2;
            numberOfColumn = 50;
            numberOFRow    = 10;
            abcType        = View.ObjectSpace.FindObject <AbcType>(new BinaryOperator("Code", "A"));
            LcT            = View.ObjectSpace.FindObject <LoadCarrierType>(new BinaryOperator("Name", "MAGAS"));


            for (int i = 0; i < numberOfAisle; i++)
            {
                CriteriaOperator criteria = CriteriaOperator.Parse("Oid = ?", i + 1);
                Aisle            aisle    = View.ObjectSpace.FindObject <Aisle>(criteria);

                for (int j = 0; j < numberOfLine; j++)
                {
                    tomb++;

                    for (int k = 0; k < numberOfColumn; k++)
                    {
                        for (int l = 0; l < numberOFRow; l++)
                        {
                            //Láda létrehozása
                            loadCarriers = View.ObjectSpace.CreateObject <LoadCarrier>();
                            barCode++;
                            loadCarriers.BarCode = barCode;
                            loadCarriers.RFID1   = Convert.ToString(1000 + barCode);
                            loadCarriers.RFID2   = Convert.ToString(2000 + barCode);
                            loadCarriers.LcType  = LcT;

                            //Tárolóhely létrehozása
                            storageLocation             = View.ObjectSpace.CreateObject <StorageLocation>();
                            storageLocation.Aisle       = aisle;
                            storageLocation.Block       = tomb;
                            storageLocation.Column      = Convert.ToUInt16(k + 1);
                            storageLocation.Row         = Convert.ToByte(l + 1);
                            storageLocation.Name        = storageLocation.Aisle.Name + "_" + storageLocation.Block + "_" + storageLocation.Column + "_" + storageLocation.Row;
                            storageLocation.AbcClass    = abcType;;
                            storageLocation.LHU1X       = 10;
                            storageLocation.LHU1Y       = 10;
                            storageLocation.LHU2X       = 10;
                            storageLocation.LHU2Y       = 10;
                            storageLocation.LoadCarrier = loadCarriers;
                            storageLocation.LcIsEmpty   = true;
                        }
                    }
                }
            }
            //View.ObjectSpace.CommitChanges();
            MessageBox.Show("Finished!" + ciklus.ToString());
        }
Ejemplo n.º 6
0
        public void SendLoadCarrierBack(int ctrH, int ctrD, int lc, int IocpId, int weight)
        {
            Session     workSession = new Session();
            LoadCarrier lca         = workSession.FindObject <LoadCarrier>(new BinaryOperator("Oid", lc));

            StorageLocation targetLocation = FindEmptyLocation(lca);

            if (targetLocation != null)
            {
                CreateTransportOrder(1, ctrH, ctrD, lca, IocpId, weight, null, targetLocation);
            }
            else
            {
                throw new Exception("Nem talált tárolóhelyet");
            }
        }
Ejemplo n.º 7
0
        private void LogX_LcIsHere(string newLcRfid1)
        {
            LoadCarrier      lc = null;
            CriteriaOperator c  = new BinaryOperator("RFID1", newLcRfid1);

            lc = View.ObjectSpace.FindObject <LoadCarrier>(c);


            //if (lc != null)
            //{
            //    TransportOrder tpo = (TransportOrder)tpoList[0];
            //    iocp.ActiveLc = lc;
            //    iocp.ActiveCtrD = tpo.CommonDetail;
            //    iocp.ActiveProduct = tpo.CommonDetail.Product;
            //    StorageLocation sl = tpo.SourceLocation;


            //    CriteriaOperator copQtyE = new GroupOperator(GroupOperatorType.And, new BinaryOperator("In", true), new BinaryOperator("Product", iocp.ActiveProduct));
            //    QtyExchange qtye = View.ObjectSpace.FindObject<QtyExchange>(copQtyE);

            //    iocp.Qexchange = qtye;
            //    iocp.StoredUnit = qtye.SourceQty;
            //    double recentQty = iocp.ActiveCtrD.GetRecentQuantity();

            //    iocp.StoredQty = Math.Min(qtye.SourceQty * qtye.TargetQty, recentQty);
            //    LokacioFelszabadítas(sl);

            //    iocp.LcCallingOK = true;
            //    //myOpcClient.DeleteTransport(ObjectSpace,tpo.TpId);
            //    DeleteTransport(tpo.Oid);


            //    foreach (Stock stock in iocp.ActiveLc.Stocks)
            //    {
            //        stock.StorageLocation = null;
            //    }
            //}
            //else
            //{
            //    MessageBox.Show("Nincs több láda!");
            //}
            //View.ObjectSpace.CommitChanges();
            //View.Refresh();
        }
        private void ResetStorageLocation()
        {
            //CriteriaOperator cSto = new BinaryOperator("Aisle", 1);
            IList listSlocation = View.ObjectSpace.GetObjects(typeof(StorageLocation));

            int counter = listSlocation.Count;

            for (int i = 0; i < counter; i++)
            {
                StorageLocation sloc = (StorageLocation)listSlocation[i];

                CriteriaOperator cop = new BinaryOperator("Oid", sloc.Oid);
                LoadCarrier      lc  = (LoadCarrier)View.ObjectSpace.FindObject(typeof(LoadCarrier), cop);

                sloc.StatusCode  = 1;
                sloc.LoadCarrier = lc;
                sloc.LcIsEmpty   = true;
            }

            //View.ObjectSpace.CommitChanges();
        }
Ejemplo n.º 9
0
        private void Import_LoadCarrier()
        {
            int rekord = 0;

            using (var fileStream = new FileStream(@"C:\Users\Halász Alexandra\OneDrive\LogX\halaszalexandra\LOGX\Imports\LogX_LoadCarrier.csv", FileMode.Open, FileAccess.Read))
            {
                StreamReader reader = new StreamReader(fileStream);

                while (!reader.EndOfStream)
                {
                    string line   = reader.ReadLine();
                    var    values = line.Split(';');

                    if (rekord > 0)
                    {
                        CriteriaOperator criteriaLctType = new BinaryOperator("Types", values[1]);
                        LoadCarrierType  lct             = (LoadCarrierType)View.ObjectSpace.FindObject(typeof(LoadCarrierType), criteriaLctType, true);


                        if (values[0] != "")
                        {
                            LoadCarrier lc = View.ObjectSpace.CreateObject <LoadCarrier>();
                            lc.BarCode    = Convert.ToDecimal(values[0]);
                            lc.LcType     = lct;
                            lc.RFID1      = Convert.ToString(values[2]);
                            lc.RFID2      = Convert.ToString(values[3]);
                            lc.StatusCode = 0;
                            lc.isEmpty    = true;


                            lc.Save();
                        }
                    }
                    rekord++;
                }
                View.ObjectSpace.CommitChanges();
            }
        }
Ejemplo n.º 10
0
        // A készlet napló létrehozása még nem mozgratja a termék kélszletét, csak azt jelzi, hogy a ládába bekerült vagy kikerült a termék
        // A termék készlet könyvelése a transzport sor státuszváltozása alapján történik
        private void CreateStockHistory(int direction, int LoadCarrierId, int ProductId, int ctrDId, double quantity, string section, int type)
        {
            Session workSession = new Session();
            //Láda
            LoadCarrier Lc = workSession.FindObject <LoadCarrier>(new BinaryOperator("Oid", LoadCarrierId));
            //Termék
            Product product = workSession.FindObject <Product>(new BinaryOperator("Oid", ProductId));
            //Tételsor
            CommonTrDetail ctrD = workSession.FindObject <CommonTrDetail>(new BinaryOperator("Oid", ctrDId));

            StockHistory stockhistory = new StockHistory(workSession);

            stockhistory.Product      = product;
            stockhistory.LC           = Lc;
            stockhistory.Section      = section;
            stockhistory.Quantity     = quantity;
            stockhistory.CommonDetail = ctrD;
            stockhistory.Time         = DateTime.Now;
            stockhistory.Type         = type;
            stockhistory.Direction    = direction;
            stockhistory.Processed    = false;
            stockhistory.Booked       = false;
            stockhistory.Save();
        }
Ejemplo n.º 11
0
        // Bejővő paraméterek (Ügylet száma, Komissiózó pont azonosítója, Komissiózó pont plc azonosítója)
        public void CallLoadCarriers(int ctrH, string commonType, int iocp, int weight, int lcTypeHeight)
        {
            // Megkeressük a bizonylat  tételsorait
            Session session = new Session();
            XPQuery <CommonTrDetail>    details = session.Query <CommonTrDetail>();
            IQueryable <CommonTrDetail> list    = (from c in details
                                                   where (c.CommonTrHeader.Oid == ctrH)
                                                   select c);


            //Végigmegyünk minden tételsoron
            foreach (CommonTrDetail ctrD in list)
            {
                //Ládákat keresünk az ügylettípus szerint:
                //BETÁROLÁS
                //1 Betárolásnál annyi ÜRES!!! ládát kell hívnunk amennyit előkalkuláltunk
                if (commonType == "BETAR")
                {
                    for (int i = 0; i < ctrD.CalcLcNumber; i++)
                    {
                        // Keresünk egy üres ládát lehetőleg onnan ahová vissza is akarjuk küldeni és le is foglaljuk az erőforrást.
                        StorageLocation sourceLocation = FindEmptyLoadcarrier(ctrD.Product, lcTypeHeight);

                        if (sourceLocation != null)
                        {
                            CreateTransportOrder(2, ctrH, ctrD.Oid, sourceLocation.LoadCarrier, iocp, weight, sourceLocation, null);
                        }
                        else
                        {
                            throw new Exception("Hiba - Nem talált kihívható ládát!");
                        }
                    }
                }

                //KITÁROLÁS ÉS KOMISSIÓ
                // 2 Kitárolásnál  és Komissiónál Allokálnunk kell és FIFO szerint kihívni a terméket tartalmazó ládákat
                if (commonType == "KITAR" || commonType == "KOMISSIO")
                {
                    double szuksegesMennyiseg = ctrD.Quantity - ctrD.PerformedQty;
                    double maradekMennyiseg   = szuksegesMennyiseg;
                    double allokaltMennyiseg  = 0;

                    if (szuksegesMennyiseg > 0)
                    {
                        foreach (Stock stock in ctrD.Product.Stocks)
                        {
                            if (stock.StorageLocation != null && stock.StorageLocation.StatusCode == 1)
                            {
                                allokaltMennyiseg = Math.Min(stock.NormalQty, maradekMennyiseg);
                                if (allokaltMennyiseg > 0)
                                {
                                    LoadCarrier lc = stock.LC;
                                    stock.StorageLocation.StatusCode = 2;
                                    maradekMennyiseg -= allokaltMennyiseg;

                                    CreateTransportOrder(2, ctrH, ctrD.Oid, lc, iocp, weight, stock.StorageLocation, null);
                                    ctrD.CalcLcNumber++;
                                }
                            }
                        }
                    }
                }

                //LELTÁR
                // 2 Kitárolásnál  és Komissiónál Allokálnunk kell és FIFO szerint kihívni a terméket tartalmazó ládákat
                if (commonType == "LELTAR")
                {
                    foreach (Stock stock in ctrD.Product.Stocks)
                    {
                        if (stock.StorageLocation != null && stock.StorageLocation.StatusCode == 1)
                        {
                            ChangeLocationStatus(stock.StorageLocation, 3);
                            CreateTransportOrder(2, ctrH, ctrD.Oid, stock.LC, iocp, weight, stock.StorageLocation, null);
                            ctrD.CalcLcNumber++;
                        }
                    }
                }
            }
        }
        // Bejővő paraméterek (Ügylet száma, Komissiózó pont azonosítója, Komissiózó pont plc azonosítója)
        public void CallLoadCarriers(int ctrH, string commonType, int iocp, int weight)
        {
            IObjectSpace os = null;

            try
            {
                os = GetNewObjectSpace();
                //Megkeressük a bizonylat tételsorait

                IQueryable <CommonTrDetail> details = os.GetObjectsQuery <CommonTrDetail>();
                var list = (from c in details
                            where (c.CommonTrHeader.Oid == ctrH)
                            orderby c.ItemNum ascending
                            select c);

                //Végigmegyünk minden tételsoron és ládákat keresünk az ügylettípus szerint:
                foreach (CommonTrDetail ctrD in list)
                {
                    //BETÁROLÁS - annyi ÜRES!!! ládát kell hívnunk amennyit előkalkuláltunk
                    if (commonType == "BETAR")
                    {
                        for (int i = 0; i < ctrD.CalcLcNumber; i++)
                        {
                            // Keresünk egy üres ládát lehetőleg onnan ahová vissza is akarjuk küldeni és le is foglaljuk az erőforrást.
                            StorageLocation sourceLocation = FindEmptyLoadcarrier(ctrD.Product);

                            if (sourceLocation != null)
                            {
                                CreateTransportOrder(2, ctrH, ctrD.Oid, sourceLocation.LoadCarrier.Oid, iocp, weight, sourceLocation, null);
                            }
                            else
                            {
                                throw new Exception("Hiba - Nem talált kihívható ládát!");
                            }
                        }
                    }

                    //KITÁROLÁS ÉS KOMISSIÓ - Allokálnunk kell és FIFO szerint kihívni a terméket tartalmazó ládákat
                    if (commonType == "KITAR" || commonType == "KOMISSIO")
                    {
                        double szuksegesMennyiseg = ctrD.Quantity - ctrD.PerformedQty;
                        double maradekMennyiseg   = szuksegesMennyiseg;
                        double allokaltMennyiseg  = 0;

                        if (szuksegesMennyiseg > 0)
                        {
                            foreach (Stock stock in ctrD.Product.Stocks)
                            {
                                if (stock.StorageLocation != null && stock.StorageLocation.StatusCode == 1)
                                {
                                    allokaltMennyiseg = Math.Min(stock.NormalQty, maradekMennyiseg);
                                    if (allokaltMennyiseg > 0)
                                    {
                                        LoadCarrier lc = stock.LC;
                                        stock.StorageLocation.StatusCode = 2;
                                        maradekMennyiseg -= allokaltMennyiseg;

                                        CreateTransportOrder(2, ctrH, ctrD.Oid, lc.Oid, iocp, weight, stock.StorageLocation, null);
                                        ctrD.CalcLcNumber++;
                                    }
                                }
                            }
                        }
                    }

                    //LELTÁR minden ládát kihozunk amia terméket tartalmazza
                    if (commonType == "LELTAR")
                    {
                        foreach (Stock stock in ctrD.Product.Stocks)
                        {
                            if (stock.StorageLocation != null && stock.StorageLocation.StatusCode == 1)
                            {
                                ChangeLocationStatus(stock.StorageLocation, 3);
                                CreateTransportOrder(2, ctrH, ctrD.Oid, stock.LC.Oid, iocp, weight, stock.StorageLocation, null);
                                ctrD.CalcLcNumber++;
                            }
                        }
                    }
                }
            }
            catch
            {
                log.Error("hiba");
            }
            finally
            {
                DisposeObjectSpace(os);
            }
        }