Esempio n. 1
0
        private int ThemMoi(BOXuLyKho item, List<BOXuLyKhoChiTiet> lsArray, Transit mTransit)
        {
            if (lsArray != null)
            {
                List<Data.TONKHOTONG> lsTonKhoTong = new List<TONKHOTONG>();
                List<Data.TONKHO> lsTonKho = new List<TONKHO>();
                foreach (BOXuLyKhoChiTiet line in lsArray)
                {
                    IQueryable<Data.TONKHO> lsArrayLine = null;
                    switch (item.XuLyKho.LoaiID)
                    {
                        case 1:
                            lsArrayLine = frmTonKho.Query().Where(s => s.DonViID == line.TonKho.DonViID && s.MonID == line.TonKho.MonID && s.KhoID == item.XuLyKho.KhoID && s.SoLuongTon > 0).OrderBy(s => s.NgayHetHan).ThenBy(s => s.TonKhoID);
                            if (lsArrayLine.Count() > 0 && line.TonKho.SoLuongNhap < lsArrayLine.Sum(s => s.SoLuongTon) && line.TonKho.SoLuongNhap > 0)
                            {
                                foreach (var l in lsArrayLine)
                                {
                                    if (line.TonKho.SoLuongNhap > 0)
                                    {
                                        Data.TONKHOTONG tonkhotong = null;
                                        if (lsTonKhoTong.Exists(s => s.KhoID == item.XuLyKho.KhoID && s.MonID == line.TonKho.MonID && s.DonViID == line.TonKho.DonViID))
                                        {
                                            tonkhotong = lsTonKhoTong.Find(s => s.KhoID == item.XuLyKho.KhoID && s.MonID == line.TonKho.MonID && s.DonViID == line.TonKho.DonViID);
                                        }
                                        else
                                        {
                                            tonkhotong = KiemTraTonKhoTong(frmTonKhoTong, (int)item.XuLyKho.KhoID, (int)line.TonKho.MonID, (int)line.TonKho.DonViID);
                                            lsTonKhoTong.Add(tonkhotong);
                                        }
                                        tonkhotong.SoLuongTon += line.TonKho.SoLuongNhap;
                                        tonkhotong.SoLuongDieuChinh += line.TonKho.SoLuongNhap;
                                        Data.TONKHO tonkho = null;
                                        if (lsTonKho.Exists(s => s.TonKhoID == l.TonKhoID))
                                        {
                                            tonkho = lsTonKho.Find(s => s.TonKhoID == l.TonKhoID);
                                        }
                                        else
                                        {
                                            tonkho = l;
                                            lsTonKho.Add(tonkho);
                                        }
                                        line.XuLyKhoChiTiet.TONKHO = new TONKHO();
                                        line.XuLyKhoChiTiet.TONKHO.PhatSinhTuTonKhoID = tonkho.TonKhoID;
                                        line.XuLyKhoChiTiet.TONKHO.LoaiPhatSinhID = (int)item.XuLyKho.LoaiID;
                                        CopyTonKho(line.XuLyKhoChiTiet.TONKHO, tonkho);

                                        if (tonkho.SoLuongTon > line.TonKho.SoLuongNhap)
                                        {
                                            line.XuLyKhoChiTiet.TONKHO.SoLuongPhatSinh = tonkho.SoLuongTon - line.TonKho.SoLuongNhap;
                                            tonkho.SoLuongTon += line.TonKho.SoLuongNhap;
                                            line.TonKho.SoLuongNhap = 0;
                                        }
                                        else
                                        {
                                            line.XuLyKhoChiTiet.TONKHO.SoLuongPhatSinh = line.TonKho.SoLuongNhap - tonkho.SoLuongTon;
                                            line.TonKho.SoLuongNhap += tonkho.SoLuongTon;
                                            tonkho.SoLuongTon = 0;
                                        }
                                    }
                                }
                            }
                            break;
                        case 2:
                        case 3:
                            lsArrayLine = frmTonKho.Query().Where(s => s.DonViID == line.TonKho.DonViID && s.MonID == line.TonKho.MonID && s.KhoID == item.XuLyKho.KhoID && s.SoLuongTon > 0).OrderBy(s => s.NgayHetHan).ThenBy(s => s.TonKhoID);
                            if (lsArrayLine.Count() > 0 && line.TonKho.SoLuongNhap < lsArrayLine.Sum(s => s.SoLuongTon) && line.TonKho.SoLuongNhap > 0)
                            {
                                foreach (var l in lsArrayLine)
                                {
                                    if (line.TonKho.SoLuongNhap > 0)
                                    {
                                        Data.TONKHOTONG tonkhotong = null;
                                        if (lsTonKhoTong.Exists(s => s.KhoID == item.XuLyKho.KhoID && s.MonID == line.TonKho.MonID && s.DonViID == line.TonKho.DonViID))
                                        {
                                            tonkhotong = lsTonKhoTong.Find(s => s.KhoID == item.XuLyKho.KhoID && s.MonID == line.TonKho.MonID && s.DonViID == line.TonKho.DonViID);
                                        }
                                        else
                                        {
                                            tonkhotong = KiemTraTonKhoTong(frmTonKhoTong, (int)item.XuLyKho.KhoID, (int)line.TonKho.MonID, (int)line.TonKho.DonViID);
                                            lsTonKhoTong.Add(tonkhotong);
                                        }
                                        tonkhotong.SoLuongTon -= line.TonKho.SoLuongNhap;
                                        if (item.XuLyKho.LoaiID == 2)
                                        {
                                            tonkhotong.SoLuongMat += line.TonKho.SoLuongNhap;
                                        }
                                        if (item.XuLyKho.LoaiID == 3)
                                        {
                                            tonkhotong.SoLuongHu += line.TonKho.SoLuongNhap;
                                        }

                                        Data.TONKHO tonkho = null;
                                        if (lsTonKho.Exists(s => s.TonKhoID == l.TonKhoID))
                                        {
                                            tonkho = lsTonKho.Find(s => s.TonKhoID == l.TonKhoID);
                                        }
                                        else
                                        {
                                            tonkho = l;
                                            lsTonKho.Add(tonkho);
                                        }
                                        line.XuLyKhoChiTiet.TONKHO = new TONKHO();
                                        line.XuLyKhoChiTiet.TONKHO.PhatSinhTuTonKhoID = tonkho.TonKhoID;
                                        line.XuLyKhoChiTiet.TONKHO.LoaiPhatSinhID = (int)item.XuLyKho.LoaiID;
                                        CopyTonKho(line.XuLyKhoChiTiet.TONKHO, tonkho);

                                        if (tonkho.SoLuongTon > line.TonKho.SoLuongNhap)
                                        {
                                            line.XuLyKhoChiTiet.TONKHO.SoLuongPhatSinh = tonkho.SoLuongTon - line.TonKho.SoLuongNhap;
                                            tonkho.SoLuongTon -= line.TonKho.SoLuongNhap;
                                            line.TonKho.SoLuongNhap = 0;
                                        }
                                        else
                                        {
                                            line.XuLyKhoChiTiet.TONKHO.SoLuongPhatSinh = line.TonKho.SoLuongNhap - tonkho.SoLuongTon;
                                            line.TonKho.SoLuongNhap -= tonkho.SoLuongTon;
                                            tonkho.SoLuongTon = 0;
                                        }
                                    }
                                }
                            }
                            break;
                        default:
                            break;
                    }

                    line.XuLyKho = new XULYKHO();
                    line.XuLyKho.KhoID = item.XuLyKho.KhoID;
                    item.XuLyKho.XULYKHOCHITIETs.Add(line.XuLyKhoChiTiet);
                }
                item.XuLyKho.TongTien = lsArray.Sum(s => s.TonKho.SoLuongNhap * s.TonKho.GiaBan);
                foreach (TONKHO i in lsTonKho)
                {
                    frmTonKho.Update(i);
                }
                foreach (TONKHOTONG i in lsTonKhoTong)
                {
                    frmTonKhoTong.Update(i);
                }
                frmTonKho.Commit();
                frmTonKhoTong.Commit();
            }
            return item.XuLyKho.ChinhKhoID;
        }
Esempio n. 2
0
        /*__________________________________________________________________________________________*/
        private bool GroupTypes(string group)
        {
            //GROUPS
            //TODO change this to some other logic
            List<Types> groupTypes = new List<Types>();
            groupTypes.Add(new Types { Key = "SUPPLIER"       , boolValue  = false});
            groupTypes.Add(new Types { Key = "FRANCHESEE"  , boolValue =  false });
            groupTypes.Add(new Types { Key = "EMPLOYEE"      , boolValue =  true });
            groupTypes.Add(new Types { Key = "CLIENT"          , boolValue =  true });
            groupTypes.Add(new Types { Key = "CUSTOMER"      , boolValue = true });
            groupTypes.Add(new Types { Key = "VISITOR"         , boolValue =  true });
            groupTypes.Add(new Types { Key = "BUYER"            , boolValue = true });
            groupTypes.Add(new Types { Key = "OWNER"         , boolValue =   true });

            var type = groupTypes.Find(keyItem => keyItem.Key == group);
            //PairType<string, bool> AddAddressToNames = new List<PairType<string, bool>>();
            //groupTypes.Add((new PairType<string, bool>("SUPPLIER", false)));
            //AddAddressToNames.Add("SUPPLIER",false);
            //AddAddressToNames.Add("FRANCHESEE",    false);
            //AddAddressToNames.Add("EMPLOYEE" ,      true  );
            ////AddAddressToNames.Add("CLIENT"   ,        true  );
            //AddAddressToNames.Add("CUSTOMER"  ,   true   );
            //AddAddressToNames.Add("VISITOR" ,         true );
            //AddAddressToNames.Add("BUYER"   ,        true  ) ;
            //AddAddressToNames.Add("OWNER" ,          true );

            return type.boolValue;
        }
Esempio n. 3
0
            //lastKier - kierunek z ktorego weszlismy 0-gora 1-prawo 2-dol 3-lewo
            private static int[] znajdzDrogePowrotnaRek(int x, int y, int lastKier, List<Wspolrzedne> before, int upCost, int limit)
            {
                if (before.Count > limit)
                {
                    int[] wczesniak = new int[2];
                    wczesniak[0] = limit * cennikSwiata.moveCost * 2;
                    wczesniak[1] = 0;
                    return wczesniak;
                }
                int firstStep = 0;
                int overalCost = limit * cennikSwiata.moveCost;
                int koszt = upCost;

                //Sprawdzenie, czy dalej mamy "po x" czy "po y".
                //if (Math.Abs(mojaPozycjaX - x) > Math.Abs(mojaPozycjaY - y))

                //Sprawdzenie, czy jestesmy u celu!
                #region jestesUCelu
                if ((mojaPozycjaX == x) && (mojaPozycjaY == y))
                {
                    switch (lastKier)
                    {
                        case 0:
                            switch (kierunek[0])
                            {
                                case 1:
                                    koszt += cennikSwiata.rotateCost;
                                    firstStep = 2;
                                    break;
                                case 0:
                                    if (kierunek[1] == 1)
                                    {
                                        firstStep = 1;
                                    }
                                    else
                                    {
                                        koszt += cennikSwiata.rotateCost * 2;
                                        firstStep = 4;
                                    }
                                    break;
                                case -1:
                                    koszt += cennikSwiata.rotateCost;
                                    firstStep = 3;
                                    break;
                            };
                            break;
                        case 1:
                            switch (kierunek[0])
                            {
                                case 1:
                                    firstStep = 1;
                                    break;
                                case 0:
                                    koszt += cennikSwiata.rotateCost;
                                    if (kierunek[1] == 1)
                                    {
                                        firstStep = 3;
                                    }
                                    else
                                    {
                                        firstStep = 2;
                                    }
                                    break;
                                case -1:
                                    koszt += cennikSwiata.rotateCost * 2;
                                    firstStep = 4;
                                    break;
                            };
                            break;
                        case 2:
                            switch (kierunek[0])
                            {
                                case 1:
                                    koszt += cennikSwiata.rotateCost;
                                    firstStep = 3;
                                    break;
                                case 0:
                                    if (kierunek[1] == 1)
                                    {
                                        koszt += cennikSwiata.rotateCost * 2;
                                        firstStep = 4;
                                    }
                                    else
                                    {
                                        firstStep = 1;
                                    }
                                    break;
                                case -1:
                                    koszt += cennikSwiata.rotateCost;
                                    firstStep = 2;
                                    break;
                            };
                            break;
                        case 3:
                            switch (kierunek[0])
                            {
                                case 1:
                                    koszt += cennikSwiata.rotateCost * 2;
                                    firstStep = 4;
                                    break;
                                case 0:
                                    koszt += cennikSwiata.rotateCost;
                                    if (kierunek[1] == 1)
                                    {
                                        firstStep = 2;
                                    }
                                    else
                                    {
                                        firstStep = 3;
                                    }
                                    break;
                                case -1:
                                    firstStep = 1;
                                    break;
                            };
                            break;
                    }
                    overalCost = koszt;
                }
                #endregion
                #region ifZachod
                //Sprawdzenie, czy idziemy na wschod czy na zachod.
                else if (mojaPozycjaX - x > 0)
                {
                    ZbadanePole nextStep = ZnanaMapa.znajdzPole(x + 1, y);
                    before.Add(new Wspolrzedne(x, y));
                    if (nextStep != null)
                        if (!((nextStep.getPrzeszkoda()) || (nextStep.getUnrechable())))
                        {
                            int nextKier = 3;
                            int[] temp = new int[2];
                            temp[0] = upCost;
                            if (!before.Exists(delegate(Wspolrzedne w)
                            {
                                if ((w.x == x + 1) && (w.y == y))
                                    return true;
                                else
                                    return false;
                            }))
                            {
                                if (before.Count > 1)
                                {
                                    ZbadanePole tuStoje = ZnanaMapa.znajdzPole(x, y);
                                    int nowaWysokosc = nextStep.getWysokosc();

                                    temp[0] += cennikSwiata.moveCost;
                                    temp[0] += Convert.ToInt32(Math.Ceiling(Convert.ToDouble
                                        (cennikSwiata.moveCost * (nowaWysokosc - tuStoje
                                        .getWysokosc())) / 100));
                                    if ((lastKier == 0) || (lastKier == 2))
                                        temp[0] += cennikSwiata.rotateCost;
                                    if (lastKier == 1)
                                        temp[0] += cennikSwiata.rotateCost * 2;
                                }
                                temp = znajdzDrogePowrotnaRek(x + 1, y, nextKier, before, temp[0], limit);

                                if (overalCost > temp[0])
                                {
                                    overalCost = temp[0];
                                    firstStep = temp[1];
                                }
                            }
                        }
                    if (mojaPozycjaY - y > 0)
                    {
                        nextStep = ZnanaMapa.znajdzPole(x, y + 1);
                        if (nextStep != null)
                            if (!((nextStep.getPrzeszkoda()) || (nextStep.getUnrechable())))
                            {
                                int nextKier = 2;
                                int[] temp = new int[2];
                                temp[0] = upCost;
                                if (!before.Exists(delegate(Wspolrzedne w)
                                {
                                    if ((w.x == x) && (w.y == y + 1))
                                        return true;
                                    else
                                        return false;
                                }))
                                {
                                    if (before.Count > 1)
                                    {
                                        ZbadanePole tuStoje = ZnanaMapa.znajdzPole(x, y);
                                        int nowaWysokosc = nextStep.getWysokosc();

                                        temp[0] += cennikSwiata.moveCost;
                                        temp[0] += Convert.ToInt32(Math.Ceiling(Convert.ToDouble
                                            (cennikSwiata.moveCost * (nowaWysokosc - tuStoje
                                            .getWysokosc())) / 100));
                                        if ((lastKier == 1) || (lastKier == 3))
                                            temp[0] += cennikSwiata.rotateCost;
                                        if (lastKier == 2)
                                            temp[0] += cennikSwiata.rotateCost * 2;
                                    }
                                    temp = znajdzDrogePowrotnaRek(x, y + 1, nextKier, before, temp[0], limit);

                                    if (overalCost > temp[0])
                                    {
                                        overalCost = temp[0];
                                        firstStep = temp[1];
                                    }
                                }
                            }
                        nextStep = ZnanaMapa.znajdzPole(x, y - 1);
                        if (nextStep != null)
                            if (!((nextStep.getPrzeszkoda()) || (nextStep.getUnrechable())))
                            {
                                int nextKier = 0;
                                int[] temp = new int[2];
                                temp[0] = upCost;
                                if (!before.Exists(delegate(Wspolrzedne w)
                                {
                                    if ((w.x == x) && (w.y == y - 1))
                                        return true;
                                    else
                                        return false;
                                }))
                                {
                                    if (before.Count > 1)
                                    {
                                        ZbadanePole tuStoje = ZnanaMapa.znajdzPole(x, y);
                                        int nowaWysokosc = nextStep.getWysokosc();

                                        temp[0] += cennikSwiata.moveCost;
                                        temp[0] += Convert.ToInt32(Math.Ceiling(Convert.ToDouble
                                            (cennikSwiata.moveCost * (nowaWysokosc - tuStoje
                                            .getWysokosc())) / 100));
                                        if ((lastKier == 1) || (lastKier == 3))
                                            temp[0] += cennikSwiata.rotateCost;
                                        if (lastKier == 0)
                                            temp[0] += cennikSwiata.rotateCost * 2;
                                    }
                                    temp = znajdzDrogePowrotnaRek(x, y - 1, nextKier, before, temp[0], limit);

                                    if (overalCost > temp[0])
                                    {
                                        overalCost = temp[0];
                                        firstStep = temp[1];
                                    }
                                }
                            }
                    }
                    else
                    {
                        nextStep = ZnanaMapa.znajdzPole(x, y - 1);
                        if (nextStep != null)
                            if (!((nextStep.getPrzeszkoda()) || (nextStep.getUnrechable())))
                            {
                                int nextKier = 0;
                                int[] temp = new int[2];
                                temp[0] = upCost;
                                if (!before.Exists(delegate(Wspolrzedne w)
                                {
                                    if ((w.x == x) && (w.y == y - 1))
                                        return true;
                                    else
                                        return false;
                                }))
                                {
                                    if (before.Count > 1)
                                    {
                                        ZbadanePole tuStoje = ZnanaMapa.znajdzPole(x, y);
                                        int nowaWysokosc = nextStep.getWysokosc();

                                        temp[0] += cennikSwiata.moveCost;
                                        temp[0] += Convert.ToInt32(Math.Ceiling(Convert.ToDouble
                                            (cennikSwiata.moveCost * (nowaWysokosc - tuStoje
                                            .getWysokosc())) / 100));
                                        if ((lastKier == 1) || (lastKier == 3))
                                            temp[0] += cennikSwiata.rotateCost;
                                        if (lastKier == 0)
                                            temp[0] += cennikSwiata.rotateCost * 2;
                                    }
                                    temp = znajdzDrogePowrotnaRek(x, y - 1, nextKier, before, temp[0], limit);

                                    if (overalCost > temp[0])
                                    {
                                        overalCost = temp[0];
                                        firstStep = temp[1];
                                    }
                                }
                            }
                        nextStep = ZnanaMapa.znajdzPole(x, y + 1);
                        if (nextStep != null)
                            if (!((nextStep.getPrzeszkoda()) || (nextStep.getUnrechable())))
                            {
                                int nextKier = 2;
                                int[] temp = new int[2];
                                temp[0] = upCost;
                                if (!before.Exists(delegate(Wspolrzedne w)
                                {
                                    if ((w.x == x) && (w.y == y + 1))
                                        return true;
                                    else
                                        return false;
                                }))
                                {
                                    if (before.Count > 1)
                                    {
                                        ZbadanePole tuStoje = ZnanaMapa.znajdzPole(x, y);
                                        int nowaWysokosc = nextStep.getWysokosc();

                                        temp[0] += cennikSwiata.moveCost;
                                        temp[0] += Convert.ToInt32(Math.Ceiling(Convert.ToDouble
                                            (cennikSwiata.moveCost * (nowaWysokosc - tuStoje
                                            .getWysokosc())) / 100));
                                        if ((lastKier == 1) || (lastKier == 3))
                                            temp[0] += cennikSwiata.rotateCost;
                                        if (lastKier == 2)
                                            temp[0] += cennikSwiata.rotateCost * 2;
                                    }
                                    temp = znajdzDrogePowrotnaRek(x, y + 1, nextKier, before, temp[0], limit);

                                    if (overalCost > temp[0])
                                    {
                                        overalCost = temp[0];
                                        firstStep = temp[1];
                                    }
                                }
                            }
                    }
                    nextStep = ZnanaMapa.znajdzPole(x - 1, y);
                    if (nextStep != null)
                        if (!((nextStep.getPrzeszkoda()) || (nextStep.getUnrechable())))
                        {
                            int nextKier = 1;
                            int[] temp = new int[2];
                            temp[0] = upCost;
                            if (!before.Exists(delegate(Wspolrzedne w)
                            {
                                if ((w.x == x - 1) && (w.y == y))
                                    return true;
                                else
                                    return false;
                            }))
                            {
                                if (before.Count > 1)
                                {
                                    ZbadanePole tuStoje = ZnanaMapa.znajdzPole(x, y);
                                    int nowaWysokosc = nextStep.getWysokosc();

                                    temp[0] += cennikSwiata.moveCost;
                                    temp[0] += Convert.ToInt32(Math.Ceiling(Convert.ToDouble
                                        (cennikSwiata.moveCost * (nowaWysokosc - tuStoje
                                        .getWysokosc())) / 100));
                                    if ((lastKier == 0) || (lastKier == 2))
                                        temp[0] += cennikSwiata.rotateCost;
                                    if (lastKier == 3)
                                        temp[0] += cennikSwiata.rotateCost * 2;
                                }
                                temp = znajdzDrogePowrotnaRek(x - 1, y, nextKier, before, temp[0], limit);

                                if (overalCost > temp[0])
                                {
                                    overalCost = temp[0];
                                    firstStep = temp[1];
                                }
                            }
                        }
                }
                #endregion
                #region elseWschod
                else //Idziemy na wschod
                {
                    ZbadanePole nextStep = ZnanaMapa.znajdzPole(x - 1, y);
                    before.Add(new Wspolrzedne(x, y));
                    if (nextStep != null)
                        if (!((nextStep.getPrzeszkoda()) || (nextStep.getUnrechable())))
                        {
                            int nextKier = 1;
                            int[] temp = new int[2];
                            temp[0] = upCost;
                            if (!before.Exists(delegate(Wspolrzedne w)
                            {
                                if ((w.x == x - 1) && (w.y == y))
                                    return true;
                                else
                                    return false;
                            }))
                            {
                                if (before.Count > 1)
                                {
                                    ZbadanePole tuStoje = ZnanaMapa.znajdzPole(x, y);
                                    int nowaWysokosc = nextStep.getWysokosc();

                                    temp[0] += cennikSwiata.moveCost;
                                    temp[0] += Convert.ToInt32(Math.Ceiling(Convert.ToDouble
                                        (cennikSwiata.moveCost * (nowaWysokosc - tuStoje
                                        .getWysokosc())) / 100));
                                    if ((lastKier == 0) || (lastKier == 2))
                                        temp[0] += cennikSwiata.rotateCost;
                                    if (lastKier == 3)
                                        temp[0] += cennikSwiata.rotateCost * 2;
                                }
                                temp = znajdzDrogePowrotnaRek(x - 1, y, nextKier, before, temp[0], limit);

                                if (overalCost > temp[0])
                                {
                                    overalCost = temp[0];
                                    firstStep = temp[1];
                                }
                            }
                        }
                    if (mojaPozycjaY - y > 0)
                    {
                        nextStep = ZnanaMapa.znajdzPole(x, y + 1);
                        if (nextStep != null)
                            if (!((nextStep.getPrzeszkoda()) || (nextStep.getUnrechable())))
                            {
                                int nextKier = 2;
                                int[] temp = new int[2];
                                temp[0] = upCost;
                                if (!before.Exists(delegate(Wspolrzedne w)
                                {
                                    if ((w.x == x) && (w.y == y + 1))
                                        return true;
                                    else
                                        return false;
                                }))
                                {
                                    if (before.Count > 1)
                                    {
                                        ZbadanePole tuStoje = ZnanaMapa.znajdzPole(x, y);
                                        int nowaWysokosc = nextStep.getWysokosc();

                                        temp[0] += cennikSwiata.moveCost;
                                        temp[0] += Convert.ToInt32(Math.Ceiling(Convert.ToDouble
                                            (cennikSwiata.moveCost * (nowaWysokosc - tuStoje
                                            .getWysokosc())) / 100));
                                        if ((lastKier == 1) || (lastKier == 3))
                                            temp[0] += cennikSwiata.rotateCost;
                                        if (lastKier == 2)
                                            temp[0] += cennikSwiata.rotateCost * 2;
                                    }
                                    temp = znajdzDrogePowrotnaRek(x, y + 1, nextKier, before, temp[0], limit);

                                    if (overalCost > temp[0])
                                    {
                                        overalCost = temp[0];
                                        firstStep = temp[1];
                                    }
                                }
                            }
                        nextStep = ZnanaMapa.znajdzPole(x, y - 1);
                        if (nextStep != null)
                            if (!((nextStep.getPrzeszkoda()) || (nextStep.getUnrechable())))
                            {
                                int nextKier = 0;
                                int[] temp = new int[2];
                                temp[0] = upCost;
                                if (!before.Exists(delegate(Wspolrzedne w)
                                {
                                    if ((w.x == x) && (w.y == y - 1))
                                        return true;
                                    else
                                        return false;
                                }))
                                {
                                    if (before.Count > 1)
                                    {
                                        ZbadanePole tuStoje = ZnanaMapa.znajdzPole(x, y);
                                        int nowaWysokosc = nextStep.getWysokosc();

                                        temp[0] += cennikSwiata.moveCost;
                                        temp[0] += Convert.ToInt32(Math.Ceiling(Convert.ToDouble
                                            (cennikSwiata.moveCost * (nowaWysokosc - tuStoje
                                            .getWysokosc())) / 100));
                                        if ((lastKier == 1) || (lastKier == 3))
                                            temp[0] += cennikSwiata.rotateCost;
                                        if (lastKier == 0)
                                            temp[0] += cennikSwiata.rotateCost * 2;
                                    }
                                    temp = znajdzDrogePowrotnaRek(x, y - 1, nextKier, before, temp[0], limit);

                                    if (overalCost > temp[0])
                                    {
                                        overalCost = temp[0];
                                        firstStep = temp[1];
                                    }
                                }
                            }
                    }
                    else
                    {
                        nextStep = ZnanaMapa.znajdzPole(x, y - 1);
                        if (nextStep != null)
                            if (!((nextStep.getPrzeszkoda()) || (nextStep.getUnrechable())))
                            {
                                int nextKier = 0;
                                int[] temp = new int[2];
                                temp[0] = upCost;
                                if (!before.Exists(delegate(Wspolrzedne w)
                                {
                                    if ((w.x == x) && (w.y == y - 1))
                                        return true;
                                    else
                                        return false;
                                }))
                                {
                                    if (before.Count > 1)
                                    {
                                        ZbadanePole tuStoje = ZnanaMapa.znajdzPole(x, y);
                                        int nowaWysokosc = nextStep.getWysokosc();

                                        temp[0] += cennikSwiata.moveCost;
                                        temp[0] += Convert.ToInt32(Math.Ceiling(Convert.ToDouble
                                            (cennikSwiata.moveCost * (nowaWysokosc - tuStoje
                                            .getWysokosc())) / 100));
                                        if ((lastKier == 1) || (lastKier == 3))
                                            temp[0] += cennikSwiata.rotateCost;
                                        if (lastKier == 0)
                                            temp[0] += cennikSwiata.rotateCost * 2;
                                    }
                                    temp = znajdzDrogePowrotnaRek(x, y - 1, nextKier, before, temp[0], limit);

                                    if (overalCost > temp[0])
                                    {
                                        overalCost = temp[0];
                                        firstStep = temp[1];
                                    }
                                }
                            }
                        nextStep = ZnanaMapa.znajdzPole(x, y + 1);
                        if (nextStep != null)
                            if (!((nextStep.getPrzeszkoda()) || (nextStep.getUnrechable())))
                            {
                                int nextKier = 2;
                                int[] temp = new int[2];
                                temp[0] = upCost;
                                if (!before.Exists(delegate(Wspolrzedne w)
                                {
                                    if ((w.x == x) && (w.y == y + 1))
                                        return true;
                                    else
                                        return false;
                                }))
                                {
                                    if (before.Count > 1)
                                    {
                                        ZbadanePole tuStoje = ZnanaMapa.znajdzPole(x, y);
                                        int nowaWysokosc = nextStep.getWysokosc();

                                        temp[0] += cennikSwiata.moveCost;
                                        temp[0] += Convert.ToInt32(Math.Ceiling(Convert.ToDouble
                                            (cennikSwiata.moveCost * (nowaWysokosc - tuStoje
                                            .getWysokosc())) / 100));
                                        if ((lastKier == 1) || (lastKier == 3))
                                            temp[0] += cennikSwiata.rotateCost;
                                        if (lastKier == 2)
                                            temp[0] += cennikSwiata.rotateCost * 2;
                                    }
                                    temp = znajdzDrogePowrotnaRek(x, y + 1, nextKier, before, temp[0], limit);

                                    if (overalCost > temp[0])
                                    {
                                        overalCost = temp[0];
                                        firstStep = temp[1];
                                    }
                                }
                            }
                    }
                    nextStep = ZnanaMapa.znajdzPole(x + 1, y);
                    if (nextStep != null)
                        if (!((nextStep.getPrzeszkoda()) || (nextStep.getUnrechable())))
                        {
                            int nextKier = 3;
                            int[] temp = new int[2];
                            temp[0] = upCost;
                            if (!before.Exists(delegate(Wspolrzedne w)
                            {
                                if ((w.x == x + 1) && (w.y == y))
                                    return true;
                                else
                                    return false;
                            }))
                            {
                                if (before.Count > 1)
                                {
                                    ZbadanePole tuStoje = ZnanaMapa.znajdzPole(x, y);
                                    int nowaWysokosc = nextStep.getWysokosc();

                                    temp[0] += cennikSwiata.moveCost;
                                    temp[0] += Convert.ToInt32(Math.Ceiling(Convert.ToDouble
                                        (cennikSwiata.moveCost * (nowaWysokosc - tuStoje
                                        .getWysokosc())) / 100));
                                    if ((lastKier == 0) || (lastKier == 2))
                                        temp[0] += cennikSwiata.rotateCost;
                                    if (lastKier == 1)
                                        temp[0] += cennikSwiata.rotateCost * 2;
                                }
                                temp = znajdzDrogePowrotnaRek(x + 1, y, nextKier, before, temp[0], limit);

                                if (overalCost > temp[0])
                                {
                                    overalCost = temp[0];
                                    firstStep = temp[1];
                                }
                            }
                        }
                }
                #endregion
                before.Remove(
                    before.Find(delegate(Wspolrzedne w)
                    {
                        if ((w.x == x) && (w.y == y))
                            return true;
                        else
                            return false;
                    })
                );
                int[] zwrot = new int[2];
                zwrot[0] = overalCost;
                zwrot[1] = firstStep;
                return zwrot;
            }