public ActionResult Delete(int id, Models.Seat seat)
        {
            var seatDelete = seatRepository.FindById(id);

            seatDelete.InjectFrom(seat);
            seatService.DeleteSeat(seatDelete);
            TempData["message"] = string.Format("{0} has been saved", seat.SeatNo);
            return(RedirectToAction("Index"));
        }
示例#2
0
        public async Task <IActionResult> Delete([FromRoute] int seatId)
        {
            var deleted = await _seatService.DeleteSeat(seatId);

            if (deleted)
            {
                return(Ok("Succesfuly deleted"));
            }

            return(NotFound());
        }
        public async Task <AuditoriumDomainModel> UpdateAuditorium(AuditoriumDomainModel updatedAuditorium, int numberOfRows, int numberOfColumns)

        {
            var originalAuditoriumSeats = await _seatService.GetSeatsByAuditoriumId(updatedAuditorium.Id);

            if (originalAuditoriumSeats == null)
            {
                return(null);
            }

            // Proveravanje trenutnog stanja auditorijuma
            int maxRow    = 1;
            int maxColumn = 1;

            void setMax(IEnumerable <SeatDomainModel> audit)
            {
                foreach (SeatDomainModel seat in audit)
                {
                    if (seat.Row > maxRow)
                    {
                        maxRow = seat.Row;
                    }
                    if (seat.Number > maxColumn)
                    {
                        maxColumn = seat.Number;
                    }
                }
            }

            void setMaxRow(IEnumerable <SeatDomainModel> audit)
            {
                foreach (SeatDomainModel seat in audit)
                {
                    maxRow = 1;
                    if (seat.Row > maxRow)
                    {
                        maxRow = seat.Row;
                    }
                }
            }

            setMax(originalAuditoriumSeats);

            // Uspostavljanje parametara za izmenu stanja sedista
            updatedAuditorium.SeatsList = originalAuditoriumSeats.ToList();

            int rowDelta    = numberOfRows - maxRow;       // parametar koji definise kako se menja broj kolona moze biti pozitivan i negativan
            int columnDelta = numberOfColumns - maxColumn; // parametar koji definise kako se menja broj redova moze biti pozitivan i negativan


            if (rowDelta != 0 || columnDelta != 0)
            {
                int i = 0, j = 0; // brojaci
                // ako treba da se dodaju redovi
                if (rowDelta > 0)
                {
                    for (i = maxRow + 1; i <= maxRow + rowDelta; i++)
                    {
                        for (j = 1; j <= maxColumn; j++)
                        {
                            SeatDomainModel newSeat = new SeatDomainModel()
                            {
                                AuditoriumId = updatedAuditorium.Id,
                                Row          = i,
                                Number       = j
                            };

                            // sedista se dodaju u objekat koji ce se updejtovati
                            updatedAuditorium.SeatsList.Add(newSeat);
                        }
                    }
                    setMaxRow(updatedAuditorium.SeatsList);
                }
                // ako treba da se izbrisu redovi
                else if (rowDelta < 0)
                {
                    for (i = maxRow; i > maxRow + rowDelta; i--)
                    {
                        for (j = 1; j <= maxColumn; j++)
                        {
                            // sedista se brisu iz baze
                            var seatToDelete = await _seatService.GetSeatByAuditoriumIdRowSeatnum(updatedAuditorium.Id, i, j);

                            if (seatToDelete == null)
                            {
                                continue;
                            }
                            // ovo je neophodno jer navodno ne moze da se radi .remove preko kopije objekta nego mora da bude 'isti tip objekta'
                            var seatListObjectToRemove = updatedAuditorium.SeatsList.Where(x => x.Id == seatToDelete.Id).FirstOrDefault();
                            updatedAuditorium.SeatsList.Remove(seatListObjectToRemove);

                            var result = await _seatService.DeleteSeat(seatToDelete.Id);

                            if (result == null)
                            {
                                return(null);
                            }
                        }
                    }

                    setMaxRow(updatedAuditorium.SeatsList);
                }


                if (columnDelta > 0)
                {
                    for (i = 1; i <= maxRow; i++)
                    {
                        for (j = maxColumn + 1; j <= maxColumn + columnDelta; j++)
                        {
                            SeatDomainModel newSeat = new SeatDomainModel()
                            {
                                AuditoriumId = updatedAuditorium.Id,
                                Row          = i,
                                Number       = j
                            };

                            // sedista se dodaju u objekat koji ce se updejtovati
                            updatedAuditorium.SeatsList.Add(newSeat);
                        }
                    }
                }
                else if (columnDelta < 0)
                {
                    for (i = 1; i <= maxRow; i++)
                    {
                        for (j = maxColumn; j > maxColumn + columnDelta; j--)
                        {
                            // ovde skidanje sa liste ide prvo jer sedista koja su samo dodata na listu a nisu u bazu takodje treba da se obrisu
                            var seatListObjectToRemove = updatedAuditorium.SeatsList.Where(x => x.AuditoriumId == updatedAuditorium.Id && x.Row == i && x.Number == j).FirstOrDefault();
                            updatedAuditorium.SeatsList.Remove(seatListObjectToRemove);

                            // sedista se brisu iz baze
                            var seatToDelete = await _seatService.GetSeatByAuditoriumIdRowSeatnum(updatedAuditorium.Id, i, j);

                            if (seatToDelete == null)
                            {
                                continue;
                            }

                            var result = _seatService.DeleteSeat(seatToDelete.Id);
                            if (result == null)
                            {
                                return(null);
                            }
                        }
                    }

                    foreach (SeatDomainModel seat in updatedAuditorium.SeatsList)
                    {
                        if (seat.Row > maxRow)
                        {
                            maxRow = seat.Row;
                        }
                    }
                    ;
                }
            }


            // SeatDomainModel se prevode u SeatList da bi se Auditorium objekat uneo u bazu
            List <Seat> auditoriumSeatList = new List <Seat>();

            foreach (SeatDomainModel domainModel in updatedAuditorium.SeatsList)
            {
                Seat seat = new Seat()
                {
                    Id           = domainModel.Id,
                    AuditoriumId = domainModel.AuditoriumId,
                    Row          = domainModel.Row,
                    Number       = domainModel.Number
                };
                auditoriumSeatList.Add(seat);
            }


            // Kreira se updejtovani objekat za unos u bazu
            Auditorium auditorium = new Auditorium()
            {
                CinemaId = updatedAuditorium.CinemaId,
                Id       = updatedAuditorium.Id,
                Name     = updatedAuditorium.Name,
                Seats    = auditoriumSeatList
            };

            // Updejtovani auditorijum se vraca u bazu
            var data = _auditoriumsRepository.Update(auditorium);

            if (data == null)
            {
                return(null);
            }
            _auditoriumsRepository.Save();


            // Prevodjenje vracenog Auditorijuma u AuditoriumDomainModel i return
            List <SeatDomainModel> resultSeatList = new List <SeatDomainModel>();

            foreach (Seat seat in data.Seats)
            {
                SeatDomainModel seatDomainModel = new SeatDomainModel()
                {
                    Id           = seat.Id,
                    AuditoriumId = seat.AuditoriumId,
                    Row          = seat.Row,
                    Number       = seat.Number
                };
                resultSeatList.Add(seatDomainModel);
            }

            AuditoriumDomainModel returnResult = new AuditoriumDomainModel()
            {
                Id        = data.Id,
                CinemaId  = data.CinemaId,
                Name      = data.Name,
                SeatsList = resultSeatList
            };

            return(returnResult);
        }