Beispiel #1
0
        public CheckoutCommandResult BlockSeat(List <SeatDetail> seatData, TransactionDetail transactionDetail, FIL.Contracts.DataModels.EventTicketAttribute eventTicketAttribute, EventTicketDetail eventTicketDetail, Guid userAltId, Channels channelId)
        {
            try
            {
                CheckoutCommandResult checkoutCommandResult       = new CheckoutCommandResult();
                FIL.Contracts.DataModels.EventDetail eventDetails = _eventDetailRepository.Get(eventTicketDetail.EventDetailId);
                var BarcodeNumber = "";
                int seatCounter   = 0;
                if (eventTicketDetail.InventoryTypeId == InventoryType.Seated || eventTicketDetail.InventoryTypeId == InventoryType.SeatedWithSeatSelection)
                {
                    if (seatData != null)
                    {
                        foreach (var seat in seatData)
                        {
                            FIL.Contracts.DataModels.MatchLayoutSectionSeat matchLayoutSectionSeats = _matchLayoutSectionSeatRepository.Get(seat.MatchLayoutSectionSeatId);
                            if (matchLayoutSectionSeats != null && matchLayoutSectionSeats.SeatStatusId != SeatStatus.Sold)
                            {
                                Random rd = new Random();
                                BarcodeNumber = eventDetails.StartDateTime.ToString("ddMM");
                                int    uniqueIdLength = 4;
                                string uniqueIdChars  = "1234567890";
                                char[] uniqueIdChar   = new char[uniqueIdLength];
                                for (int j = 0; j < uniqueIdLength; j++)
                                {
                                    uniqueIdChar[j] = uniqueIdChars[rd.Next(0, uniqueIdChars.Length)];
                                }
                                string uniqueId = new string(uniqueIdChar);
                                matchLayoutSectionSeats.Id           = matchLayoutSectionSeats.Id;
                                matchLayoutSectionSeats.SeatStatusId = channelId == Channels.Corporate ? SeatStatus.BlockedforSponsor : SeatStatus.BlockedByCustomer;
                                matchLayoutSectionSeats.UpdatedUtc   = DateTime.UtcNow;
                                matchLayoutSectionSeats.UpdatedBy    = userAltId;
                                _matchLayoutSectionSeatRepository.Save(matchLayoutSectionSeats);

                                _matchSeatTicketDetailRepository.Save(new MatchSeatTicketDetail
                                {
                                    AltId = Guid.NewGuid(),
                                    EventTicketDetailId      = eventTicketDetail.Id,
                                    MatchLayoutSectionSeatId = matchLayoutSectionSeats.Id,
                                    BarcodeNumber            = BarcodeNumber + "0" + (short)channelId + matchLayoutSectionSeats.Id + uniqueId,
                                    Price             = transactionDetail.PricePerTicket,
                                    TransactionId     = transactionDetail.TransactionId,
                                    ModifiedBy        = userAltId,
                                    TicketTypeId      = (TicketType)transactionDetail.TicketTypeId,
                                    SeatStatusId      = SeatStatus.Sold,
                                    PrintStatusId     = PrintStatus.NotPrinted,
                                    IsEnabled         = true,
                                    EntryCountAllowed = 1,
                                    ChannelId         = channelId,
                                });

                                seatCounter++;
                            }
                        }
                        if (seatData.Count == seatCounter)
                        {
                            checkoutCommandResult.Success       = true;
                            checkoutCommandResult.IsSeatSoldOut = false;
                        }
                        else
                        {
                            checkoutCommandResult.Success       = false;
                            checkoutCommandResult.IsSeatSoldOut = true;
                        }
                    }
                    else
                    {
                        List <FIL.Contracts.DataModels.MatchLayoutSectionSeat> matchLayoutSectionSeats = AutoMapper.Mapper.Map <List <FIL.Contracts.DataModels.MatchLayoutSectionSeat> >(_matchLayoutSectionSeatRepository.GetByEventTicketDetails(eventTicketDetail.Id, transactionDetail.TotalTickets));
                        if (matchLayoutSectionSeats.Count == transactionDetail.TotalTickets)
                        {
                            foreach (var seatItem in matchLayoutSectionSeats)
                            {
                                Random rd = new Random();
                                BarcodeNumber = eventDetails.StartDateTime.ToString("ddMM");
                                int    uniqueIdLength = 4;
                                string uniqueIdChars  = "1234567890";
                                char[] uniqueIdChar   = new char[uniqueIdLength];
                                for (int j = 0; j < uniqueIdLength; j++)
                                {
                                    uniqueIdChar[j] = uniqueIdChars[rd.Next(0, uniqueIdChars.Length)];
                                }
                                string uniqueId = new string(uniqueIdChar);

                                if (seatItem.SeatStatusId == SeatStatus.UnSold && (seatItem.SeatTypeId == SeatType.Available || seatItem.SeatTypeId == SeatType.WheelChair))
                                {
                                    if (seatItem.SeatTypeId == SeatType.WheelChair)
                                    {
                                        var wheelChairSeat = _masterLayoutCompanionSeatMappingRepository.GetByWheelChairSeatId(seatItem.Id);
                                        if (wheelChairSeat != null)
                                        {
                                            seatItem.Id           = wheelChairSeat.CompanionSeatId;
                                            seatItem.SeatStatusId = channelId == Channels.Corporate ? SeatStatus.BlockedforSponsor : SeatStatus.BlockedByCustomer;
                                            seatItem.ModifiedBy   = userAltId;
                                            _matchLayoutSectionSeatRepository.Save(seatItem);

                                            _matchSeatTicketDetailRepository.Save(new MatchSeatTicketDetail
                                            {
                                                AltId = Guid.NewGuid(),
                                                EventTicketDetailId      = eventTicketDetail.Id,
                                                MatchLayoutSectionSeatId = wheelChairSeat.CompanionSeatId,
                                                BarcodeNumber            = BarcodeNumber + "0" + (short)channelId + wheelChairSeat.CompanionSeatId + uniqueId,
                                                Price             = transactionDetail.PricePerTicket,
                                                TransactionId     = transactionDetail.TransactionId,
                                                ModifiedBy        = userAltId,
                                                TicketTypeId      = (TicketType)transactionDetail.TicketTypeId,
                                                SeatStatusId      = SeatStatus.Sold,
                                                PrintStatusId     = PrintStatus.NotPrinted,
                                                IsEnabled         = true,
                                                EntryCountAllowed = 1,
                                                ChannelId         = channelId,
                                            });
                                        }

                                        seatItem.Id           = seatItem.Id;
                                        seatItem.SeatStatusId = channelId == Channels.Corporate ? SeatStatus.BlockedforSponsor : SeatStatus.BlockedByCustomer;
                                        seatItem.ModifiedBy   = userAltId;
                                        _matchLayoutSectionSeatRepository.Save(seatItem);

                                        _matchSeatTicketDetailRepository.Save(new MatchSeatTicketDetail
                                        {
                                            AltId = Guid.NewGuid(),
                                            EventTicketDetailId      = eventTicketDetail.Id,
                                            MatchLayoutSectionSeatId = seatItem.Id,
                                            BarcodeNumber            = BarcodeNumber + "0" + (short)channelId + seatItem.Id + uniqueId,
                                            Price             = transactionDetail.PricePerTicket,
                                            TransactionId     = transactionDetail.TransactionId,
                                            ModifiedBy        = userAltId,
                                            TicketTypeId      = (TicketType)transactionDetail.TicketTypeId,
                                            SeatStatusId      = SeatStatus.Sold,
                                            PrintStatusId     = PrintStatus.NotPrinted,
                                            IsEnabled         = true,
                                            EntryCountAllowed = 1,
                                            ChannelId         = channelId,
                                        });
                                    }
                                    else
                                    {
                                        seatItem.Id           = seatItem.Id;
                                        seatItem.SeatStatusId = channelId == Channels.Corporate ? SeatStatus.BlockedforSponsor : SeatStatus.BlockedByCustomer;
                                        seatItem.ModifiedBy   = userAltId;
                                        _matchLayoutSectionSeatRepository.Save(seatItem);

                                        _matchSeatTicketDetailRepository.Save(new MatchSeatTicketDetail
                                        {
                                            AltId = Guid.NewGuid(),
                                            EventTicketDetailId      = eventTicketDetail.Id,
                                            MatchLayoutSectionSeatId = seatItem.Id,
                                            BarcodeNumber            = BarcodeNumber + "0" + (short)channelId + seatItem.Id + uniqueId,
                                            Price             = transactionDetail.PricePerTicket,
                                            TransactionId     = transactionDetail.TransactionId,
                                            ModifiedBy        = userAltId,
                                            TicketTypeId      = (TicketType)transactionDetail.TicketTypeId,
                                            SeatStatusId      = SeatStatus.Sold,
                                            PrintStatusId     = PrintStatus.NotPrinted,
                                            IsEnabled         = true,
                                            EntryCountAllowed = 1,
                                            ChannelId         = channelId,
                                        });
                                    }
                                    seatCounter++;
                                }
                            }
                            if (seatCounter == transactionDetail.TotalTickets)
                            {
                                checkoutCommandResult.Success       = true;
                                checkoutCommandResult.IsSeatSoldOut = false;
                            }
                            else
                            {
                                checkoutCommandResult.Success       = false;
                                checkoutCommandResult.IsSeatSoldOut = true;
                            }
                        }
                        else
                        {
                            checkoutCommandResult.Success       = false;
                            checkoutCommandResult.IsSeatSoldOut = true;
                        }
                    }
                }
                else
                {
                    for (int i = 1; i <= transactionDetail.TotalTickets * 1; i++)
                    {
                        Random rd = new Random();
                        BarcodeNumber = eventDetails.StartDateTime.ToString("ddMM");

                        int    uniqueIdLength = 14;
                        string uniqueIdChars  = "abcdefghijklmnopqrstuvwxyz1234567890";
                        char[] uniqueIdChar   = new char[uniqueIdLength];
                        for (int j = 0; j < uniqueIdLength; j++)
                        {
                            uniqueIdChar[j] = uniqueIdChars[rd.Next(0, uniqueIdChars.Length)];
                        }
                        string uniqueId = new string(uniqueIdChar);

                        _matchSeatTicketDetailRepository.Save(new MatchSeatTicketDetail
                        {
                            AltId = Guid.NewGuid(),
                            EventTicketDetailId = eventTicketDetail.Id,
                            BarcodeNumber       = BarcodeNumber + "0" + (short)channelId + uniqueId,
                            Price             = transactionDetail.PricePerTicket,
                            TransactionId     = transactionDetail.TransactionId,
                            ModifiedBy        = userAltId,
                            TicketTypeId      = (TicketType)transactionDetail.TicketTypeId,
                            SeatStatusId      = SeatStatus.Sold,
                            PrintStatusId     = PrintStatus.NotPrinted,
                            IsEnabled         = true,
                            EntryCountAllowed = 1,
                            ChannelId         = channelId,
                        });
                        seatCounter++;
                    }
                    if (seatCounter == transactionDetail.TotalTickets)
                    {
                        checkoutCommandResult.Success       = true;
                        checkoutCommandResult.IsSeatSoldOut = false;
                    }
                    else
                    {
                        checkoutCommandResult.Success       = false;
                        checkoutCommandResult.IsSeatSoldOut = true;
                    }
                }
                return(checkoutCommandResult);
            }
            catch (Exception e)
            {
                _logger.Log(Logging.Enums.LogCategory.Error, e);
                return(new CheckoutCommandResult
                {
                    Success = false,
                    IsSeatSoldOut = true
                });
            }
        }