public async Task UpdateExpenseAsync(Guid settlementId, Expense expense)
        {
            var settlement = await Settlements.AsQueryable().FirstOrDefaultAsync(x => x.Id == settlementId);

            settlement.UpdateExpense(expense);
            await Settlements.ReplaceOneAsync(x => x.Id == settlement.Id, settlement);
        }
예제 #2
0
        public async Task <IActionResult> PutSettlements([FromRoute] int id, [FromBody] Settlements settlements)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != settlements.Id)
            {
                return(BadRequest());
            }

            _context.Entry(settlements).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!SettlementsExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
예제 #3
0
        public async Task <Settlements> GetSettlementsWithTotals(Dictionary <string, object> _filterParams)
        {
            Answer      answer      = new Answer();
            Settlements settlements = new Settlements();
            Dictionary <string, object> _tmpFilter = new Dictionary <string, object>();

            try
            {
                if (_filterParams != null)
                {
                    _tmpFilter = _filterParams.ToDictionary(entry => entry.Key, entry => entry.Value);
                    if (_tmpFilter.TryGetValue("filters[date_from]", out object dt) && dt is DateTime)
                    {
                        _tmpFilter["filters[date_from]"] = string.Format("{0:yyyy-MM-dd}", dt);
                    }
                    if (_tmpFilter.TryGetValue("filters[date_to]", out object dt_to) && dt_to is DateTime)
                    {
                        _tmpFilter["filters[date_to]"] = string.Format("{0:yyyy-MM-dd}", dt_to);
                    }
                }
                answer = await networkservice.NetworkRequest(NetworkService.TaskType.Settlements, authmanager.GetAuthData(), _tmpFilter);

                if (answer != null && answer.ResData is JObject jData)
                {
                    settlements = JsonConvert.DeserializeObject <Settlements>(jData.ToString());
                }
            } catch (Exception e)
            {
                System.Diagnostics.Debug.WriteLine(e);
            }
            return(settlements);
        }
예제 #4
0
        public int AddSettlement(Settlement settlement)
        {
            Settlements.Add(settlement);
            settlement.Claim(Settlements.Count);

            return(Settlements.Count);
        }
        public async Task <IActionResult> PutSettlements([FromRoute] int id, [FromBody] Settlements settlements)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != settlements.Id)
            {
                return(BadRequest());
            }

            _settlementsRepository.UpdateSettlement(settlements);

            try
            {
                await _settlementsRepository.Save();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!SettlementsExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
예제 #6
0
        static void Main(string[] args)
        {
            Player  player  = new Player();
            Adapter adapter = new Adapter();

            player.Move(adapter);

            Board board = new ClasicBoard();

            board = new BlueandWhite(board);
            board = new BeautySymbols(board);
            Console.WriteLine("Name: {0}", board.Name);
            Console.WriteLine("Price: {0}", board.GetCost());

            IComponent map1   = new Map("Global Map");
            IComponent map2   = new Map("Belarus Map");
            IComponent settl1 = new Settlements("Mogilev");
            IComponent settl2 = new Settlements("Minsk");
            IComponent settl3 = new Settlements("Molodechno");

            ((Map)map1).Add(map2);
            ((Map)map1).Add(settl1);
            ((Map)map2).Add(settl2);
            ((Map)map2).Add(settl3);

            Console.WriteLine("Trace of Found:");
            Console.WriteLine(map1.Find("Minsk"));
            Console.WriteLine("Trace of Found:");
            Console.WriteLine(map1.Find("Mogilev"));
            Console.Read();
        }
        public async Task <IActionResult> Edit(int id, [Bind("Id,ClinicId,DoctorId,Amount,PayedAt")] Settlements settlements)
        {
            if (id != settlements.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(settlements);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!SettlementsExists(settlements.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            ViewData["ClinicId"] = new SelectList(_context.Clinics, "Id", "Address", settlements.ClinicId);
            ViewData["DoctorId"] = new SelectList(_context.Doctors, "Id", "Phone", settlements.DoctorId);
            return(View(settlements));
        }
예제 #8
0
        public async Task <IActionResult> Edit(int id, [Bind("SettlementId,Iddistrict,Name,Type,Population")] Settlements settlements)
        {
            if (id != settlements.SettlementId)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(settlements);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!SettlementsExists(settlements.SettlementId))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction("Index", "Settlements", new { i = settlements.Iddistrict }));
            }
            ViewData["IdSelectedDistrict"] = settlements.Iddistrict;
            return(View(settlements));
        }
예제 #9
0
        public async Task <IActionResult> Edit(int id, [Bind("ID,RequestDate,LastName,DownPayment,Installments,Interest,IsAccepted,SettlementTypeId")] Settlements settlements)
        {
            if (id != settlements.ID)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(settlements);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!SettlementsExists(settlements.ID))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            ViewData["SettlementTypeId"] = new SelectList(_context.Set <SettlementTypes>(), "ID", "ID", settlements.SettlementTypeId);
            return(View(settlements));
        }
예제 #10
0
        public OverlandSettlementViews(WorldView worldView, Settlements settlements, InputHandler input)
        {
            WorldView   = worldView;
            Settlements = settlements;

            OverlandSettlementView = new OverlandSettlementView(WorldView, input);

            SetupViewport(0, 0, WorldView.Camera.GetViewport.Width, WorldView.Camera.GetViewport.Height);

            Input = input;
        }
예제 #11
0
        public async Task <IActionResult> Create([Bind("ID,RequestDate,LastName,DownPayment,Installments,Interest,IsAccepted,SettlementTypeId")] Settlements settlements)
        {
            if (ModelState.IsValid)
            {
                _context.Add(settlements);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            ViewData["SettlementTypeId"] = new SelectList(_context.Set <SettlementTypes>(), "ID", "ID", settlements.SettlementTypeId);
            return(View(settlements));
        }
예제 #12
0
        public async Task <IActionResult> Create([Bind("SettlementId,Iddistrict,Name,Type,Population")] Settlements settlements)
        {
            if (ModelState.IsValid)
            {
                _context.Add(settlements);
                await _context.SaveChangesAsync();

                return(RedirectToAction("Index", "Settlements", new { i = settlements.Iddistrict }));
            }
            ViewData["IdSelectedDistrict"] = settlements.Iddistrict;
            return(View(settlements));
        }
예제 #13
0
        public void AddSettlement(Settlement s)
        {
            var idx = Settlements.AddSettlement(s);

            var t = terrain[s.Location.X, s.Location.Y];

            t.City = (byte)idx;
            terrain[s.Location.X, s.Location.Y] = t;

            Fog.MarkRangeExplored(s.Location.X, s.Location.Y, 2);
            Fog.MarkRangeVisible(s.Location.X, s.Location.Y, 2);
        }
        public async Task <IActionResult> PostSettlements([FromBody] Settlements settlements)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            _settlementsRepository.CreateSettlement(settlements);
            await _settlementsRepository.Save();

            return(CreatedAtAction("GetSettlements", new { id = settlements.Id }, settlements));
        }
예제 #15
0
        public async Task <IActionResult> PostSettlements([FromBody] Settlements settlements)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            _context.Settlements.Add(settlements);
            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetSettlements", new { id = settlements.Id }, settlements));
        }
        public async Task <IActionResult> Create([Bind("Id,ClinicId,DoctorId,Amount,PayedAt")] Settlements settlements)
        {
            if (ModelState.IsValid)
            {
                _context.Add(settlements);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            ViewData["ClinicId"] = new SelectList(_context.Clinics, "Id", "Address", settlements.ClinicId);
            ViewData["DoctorId"] = new SelectList(_context.Doctors, "Id", "Phone", settlements.DoctorId);
            return(View(settlements));
        }
예제 #17
0
        public async Task <IActionResult> Submit(SubmitSelected model)
        {
            //checked if data have changed
            SettlementTypes CurSettl = _context.SettlementTypes
                                       .Where(c => c.ID.Equals(model.SettlementType))
                                       .SingleOrDefault();

            if (CurSettl == null)
            {
                return(NotFound(HttpStatusCode.NoContent + "\nΣφάλμα\nΔεν έχετε επιλέξει υπαρκτό τύπο διακανονισμού!"));
            }

            if (model.MaxNoOfInstallments == 0 || model.MaxNoOfInstallments > CurSettl.MaxNoInstallments)
            {
                return(NotFound(HttpStatusCode.NoContent + "\nΣφάλμα!\nΟ αριθμός δόσεων δεν συνάδει με αυτόν που προβλέπει ο διακανονισμός !"));
            }

            Settlements NewSettlement = new Settlements();

            NewSettlement.RequestDate      = DateTime.Now;
            NewSettlement.AnswerDate       = DateTime.ParseExact("19000101", "yyyyMMdd", CultureInfo.InvariantCulture);
            NewSettlement.DownPayment      = CurSettl.DownPaymentPercentage;
            NewSettlement.Installments     = model.MaxNoOfInstallments;
            NewSettlement.Interest         = CurSettl.Interest;
            NewSettlement.IsAccepted       = 0;
            NewSettlement.SettlementTypeId = model.SettlementType;
            _context.Settlements.Add(NewSettlement);
            await _context.SaveChangesAsync();

            int NewSettlementId = NewSettlement.ID;

            string[] BillIds;
            BillIds = model.BillsStr.Split(',');


            for (var i = 0; i < BillIds.Length - 1; i++)
            {
                var cols = _context.Bills
                           .Where(w => w.ID == Int32.Parse(BillIds[i]));

                foreach (var b in cols)
                {
                    b.Status       = 2;
                    b.SettlementId = NewSettlementId;
                }
                await _context.SaveChangesAsync();
            }
            return(DDAjaxBack(model));
        }
예제 #18
0
        public bool BuyBuilding(int settlementId, IBuilding building, int count = 1)
        {
            var cost = building.GetCost().ToDictionary(p => p.Key, p => p.Value * count);

            if (settlementId < Settlements.Count && HasEnoughResources(cost))
            {
                Settlement settlement = Settlements.Find(s => s.Id == settlementId);

                settlement.AddBuilding(building, count);
                Resources.Subtract(cost);

                return(true);
            }
            return(false);
        }
예제 #19
0
        public async Task <IActionResult> OnPostAsync(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            Settlements = await _context.Settlements.FindAsync(id);

            if (Settlements != null)
            {
                _context.Settlements.Remove(Settlements);
                await _context.SaveChangesAsync();
            }

            return(RedirectToPage("./Index"));
        }
예제 #20
0
        public async Task <IActionResult> OnGetAsync(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            Settlements = await _context.Settlements
                          .Include(s => s.Clinic)
                          .Include(s => s.Doctor).FirstOrDefaultAsync(m => m.Id == id);

            if (Settlements == null)
            {
                return(NotFound());
            }
            return(Page());
        }
예제 #21
0
        public void Reset()
        {
            _islands                    = new Dictionary <Island, int>();
            Score                       = 0;
            KnightsPlayed               = 0;
            LongestRoad                 = 0;
            TimesTargeted               = 0;
            NoResourceCount             = 0;
            RollsWithResource           = 0;
            MaxNoResourceRolls          = 0;
            GoodRoll                    = false;
            CardsLost                   = 0;
            CardsLostToBaron            = 0;
            CardsLostToSeven            = 0;
            CardsLostToMonopoly         = 0;
            ResourcesAcquired           = 0;
            LargestArmy                 = false;
            HasLongestRoad              = false;
            RoadsPlayed                 = 0;
            ShipsPlayed                 = 0;
            CitiesPlayed                = 0;
            SettlementsPlayed           = 0;
            IslandsPlayed               = 0;
            TotalTime                   = TimeSpan.FromSeconds(0);
            MovedBaronAfterRollingSeven = null;
            PlayedKnightThisTurn        = false;
            Roads.Clear();
            Settlements.Clear();
            Cities.Clear();
            Ships.Clear();
            IsCurrentPlayer = false;
            MaxShips        = 0;
            MaxRoads        = 0;
            MaxSettlements  = 0;
            MaxCities       = 0;
            PlayerTurnResourceCount.OnPlayerResourceUpdate -= OnGameModelResourceUpdate;
            PlayerTurnResourceCount.GameReset();
            Pips       = 0;
            _GoldRolls = new List <List <int> >();

            for (int i = 0; i < _RoadTie.Count(); i++)
            {
                _RoadTie[i] = false;
            }
        }
예제 #22
0
        public async Task <IActionResult> OnGetAsync(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            Settlements = await _context.Settlements
                          .Include(s => s.Clinic)
                          .Include(s => s.Doctor).FirstOrDefaultAsync(m => m.Id == id);

            if (Settlements == null)
            {
                return(NotFound());
            }
            ViewData["ClinicId"] = new SelectList(_context.Clinics, "Id", "Address");
            ViewData["DoctorId"] = new SelectList(_context.Doctors, "Id", "Phone");
            return(Page());
        }
예제 #23
0
    // Use this for initialization
    void Start()
    {
        oldPlayerPosition = Vector3.zero;                   //Player starts here all the timed when the game is run

        float newTileIndex = Time.realtimeSinceStartup;     //Gives each piece of terrain its own unique identifier

        townRandomPlacementX = Random.Range((-player.transform.position.x - 150f), (player.transform.position.x + 150f));
        townRandomPlacementZ = Random.Range((-player.transform.position.z - 150f), (player.transform.position.z + 150f));


        //Random placement of the settlements
        for (int i = 0; i < 5; i++)
        {
            Vector3 pos = new Vector3(i + Random.Range(-100, 100), 2, i + Random.Range(-100, 100));

            GameObject poi = Instantiate(settlements, pos, Quaternion.identity);

            string newName = "Settlement " + ((int)(pos.x)).ToString() + " , " + ((int)(pos.z)).ToString();
            poi.name = newName;
            Settlements s = new Settlements(poi, newTileIndex, transform);
            newSettle.Add(newName, s);
        }

        towns.transform.position = new Vector3(townRandomPlacementX, 2, townRandomPlacementZ);

        // Draw the starting terrain
        for (int i = -mapLength; i < mapLength; i++)
        {
            for (int j = -mapLength; j < mapLength; j++)
            {
                Vector3 newPosition = new Vector3((i * planeSize + nextPlane.x), 0, (j * planeSize + nextPlane.z));

                GameObject newPlane = Instantiate(prefabTerrain, newPosition, Quaternion.identity);

                string terrainTileIndex = "Index at (" + ((int)(newPosition.x)).ToString() + " , " + ((int)(newPosition.z)).ToString() + ")";
                newPlane.name = terrainTileIndex;
                TerrainTile tilePlane = new TerrainTile(newPlane, newTileIndex, transform);
                terrain.Add(terrainTileIndex, tilePlane);   //add each piece to the hastable
            }
        }
    }
예제 #24
0
        public void AddSettlement(string?paymentFrom, decimal paidAmount, DateTime paymentDate, string?txReference = null, string?description = null)
        {
            if (string.IsNullOrEmpty(paymentFrom))
            {
                throw new PayerDetailRequiredException(OrderNumber);
            }

            if (paidAmount <= 0)
            {
                throw new AmountLessThanOrEqualToZeroException("paidAmount", OrderNumber);
            }

            Settlements.Add(new Settlement()
            {
                PaymentFrom = paymentFrom,
                PaidAmount  = paidAmount,
                PaymentDate = paymentDate,
                TxReference = txReference,
                Description = description,
                Created     = DateTime.UtcNow,
                OrderId     = OrderId
            });

            var totalPaidAmount = Settlements.Sum(x => x.PaidAmount);

            OrderStatus = (totalPaidAmount > OrderAmount) ? OrderStatus.Overpaid : (totalPaidAmount < OrderAmount) ? OrderStatus.PartiallyPaid : OrderStatus.Paid;

            if (OrderStatus == OrderStatus.Overpaid || OrderStatus == OrderStatus.Paid)
            {
                Receipt = new Receipt()
                {
                    ReceiptDate = DateTime.UtcNow,
                    Signature   = Guid.NewGuid().ToString(),
                    Created     = DateTime.UtcNow,
                    OrderId     = OrderId
                };
            }
        }
예제 #25
0
 public void UpdateSettlement(Settlements Settlement)
 {
     context.Entry(Settlement);
 }
예제 #26
0
 internal void RemoveSettlement(SettlementCtrl settlement)
 {
     Settlements.Remove(settlement);
 }
예제 #27
0
 internal void AddSettlement(SettlementCtrl settlement)
 {
     Settlements.Add(settlement);
 }
        public async Task <bool> SettleUpAsync(TransactionResponse transaction)
        {
            Transaction transactions = new Transaction();

            if (transaction.groupId != 0)
            {
                transactions.groupId = transaction.groupId;
            }
            transactions.paid_amount = transaction.paid_amount;
            transactions.payeeId     = transaction.payeeId;
            transactions.payerId     = transaction.payerId;
            transactions.paid_on     = transaction.paid_on;
            _Context.transactions.Add(transactions);
            //await _Context.SaveChangesAsync();

            var settle = await _Context.settlements.FirstOrDefaultAsync(c =>
                                                                        c.payeeId == transactions.payeeId && c.payerId == transactions.payerId &&
                                                                        c.groupId == transactions.groupId);

            if (settle != null)
            {
                settle.amount = settle.amount - transactions.paid_amount;
                _Context.settlements.Attach(settle);
            }
            else
            {
                if (transaction.groupId != 0)
                {
                    Settlements settlements = new Settlements();
                    settlements.payerId = transactions.payeeId;
                    settlements.payeeId = transactions.payerId;
                    settlements.amount  = transactions.paid_amount;
                    settlements.groupId = transactions.groupId;

                    var settle1 = await _Context.settlements.FirstOrDefaultAsync(c =>
                                                                                 c.payeeId == settlements.payeeId && c.payerId == settlements.payerId);

                    if (settle1 != null)
                    {
                        settle1.amount = settle1.amount + transactions.paid_amount;
                        _Context.settlements.Attach(settle1);
                    }
                    else
                    {
                        _Context.settlements.Add(settlements);
                    }
                }
                else
                {
                    Settlements settlements = new Settlements();
                    settlements.payerId = transactions.payeeId;
                    settlements.payeeId = transactions.payerId;
                    settlements.amount  = transactions.paid_amount;

                    var settle1 = await _Context.settlements.FirstOrDefaultAsync(c =>
                                                                                 c.payeeId == settlements.payeeId && c.payerId == settlements.payerId);

                    if (settle1 != null)
                    {
                        settle1.amount = settle1.amount + transactions.paid_amount;
                        _Context.settlements.Attach(settle1);
                    }
                    else
                    {
                        _Context.settlements.Add(settlements);
                    }
                }
            }
            try
            {
                return(await _Context.SaveChangesAsync() > 0 ? true : false);
            }
            catch (Exception exp)
            {
                _Logger.LogError($"Error in {nameof(SettleUpAsync)}: " + exp.Message);
            }
            return(false);
        }
예제 #29
0
 public void CreateSettlement(Settlements Settlement)
 {
     dataRepository.Add(Settlement);
 }
예제 #30
0
    private void Update()
    {
        // calculate how far the player is in relation to his last position when the terrain generated
        int generateX = (int)(player.transform.position.x - oldPlayerPosition.x);
        int generateY = (int)(player.transform.position.z - oldPlayerPosition.z);

        //if the moves moves a certain distance away...
        if (Mathf.Abs(generateX) > maxTilesSeen || Mathf.Abs(generateY) > maxTilesSeen)
        {
            float newTileIndex = Time.realtimeSinceStartup;

            // ... then spawn random settlements
            for (int i = 0; i < 5; i++)
            {
                int generateDistanceX = (int)(player.position.x - settlements.transform.position.x);
                int generateDistanceZ = (int)(player.position.z - settlements.transform.position.z);

                Vector3 pos = new Vector3(i + Random.Range(-100, 100) + player.transform.position.x, 2, i + Random.Range(-100, 100) + player.transform.position.z);

                string newName = "Settlement " + ((int)(pos.x)).ToString() + " , " + ((int)(pos.z)).ToString();

                // if a settlement does not exists in the hashatble then add it
                if (!newSettle.ContainsKey(newName))
                {
                    GameObject poi = Instantiate(settlements, pos, Quaternion.identity);
                    poi.name = newName;
                    Settlements s = new Settlements(poi, newTileIndex, transform);
                    newSettle.Add(newName, s);
                }
                else
                {
                    // if a settlement already exists in the hashatble then update its index
                    (newSettle[newName] as Settlements).index = newTileIndex;
                }
            }

            // round down the x and z positions to the nearest integer
            int planeX = (int)Mathf.Floor(player.transform.position.x / planeSize) * planeSize;
            int planeZ = (int)Mathf.Floor(player.transform.position.z / planeSize) * planeSize;

            for (int x = -mapLength; x < mapLength; x++)
            {
                for (int y = -mapLength; y < mapLength; y++)
                {
                    // move the piece one plane size in a given direction
                    Vector3 newPosition = new Vector3((x * planeSize + planeX), 0, (y * planeSize + planeZ));

                    string terrainTileIndex = "Index at (" + ((int)(newPosition.x)).ToString() + " , " + ((int)(newPosition.z)).ToString() + ")";

                    // if the piece does not exist then spawn it and add it to the hashtable
                    // if it does then keep it where it is and update its index
                    if (!terrain.ContainsKey(terrainTileIndex))
                    {
                        GameObject newPlane = Instantiate(prefabTerrain, newPosition, Quaternion.identity);
                        newPlane.name = terrainTileIndex;
                        TerrainTile infiniteTileMember = new TerrainTile(newPlane, newTileIndex, transform);
                        terrain.Add(terrainTileIndex, infiniteTileMember);
                    }
                    else
                    {
                        (terrain[terrainTileIndex] as TerrainTile).tileIndex = newTileIndex;
                    }
                }
            }

            // if a piece is too far away the destroy it, if not then add it to the temp hashtable
            Hashtable infiniteTerrain = new Hashtable();
            foreach (TerrainTile tt in terrain.Values)
            {
                if (tt.tileIndex != newTileIndex)
                {
                    Destroy(tt.newTile);
                }
                else
                {
                    infiniteTerrain.Add(tt.newTile.name, tt);
                }
            }

            Hashtable infiniteSettlements = new Hashtable();
            foreach (Settlements ss in newSettle.Values)
            {
                if (ss.index != newTileIndex)
                {
                    Destroy(ss.settlements);
                }
                else
                {
                    infiniteSettlements.Add(ss.settlements.name, ss);
                }
            }
            // combine the temp hashtable to the original one
            newSettle         = infiniteSettlements;
            terrain           = infiniteTerrain;
            oldPlayerPosition = player.transform.position;
        }
    }