public IEnumerable <Ones> GetOnesForMasterScenario(OnesForMasterScenarioFilter onesFilter)
        {
            var ones = GetCollectionAsQueryable(o => o.ScenarioId == onesFilter.ShowOnesScenarioId &&
                                                o.ShowId == onesFilter.ShowId &&
                                                o.DisciplineId > 0 &&
                                                o.ExtractDataType.Contains(OnesConstants.ShowOnesExtractDataType) &&
                                                !OnesConstants.IgnoredOnesTypes.Contains(o.OnesTypeId) &&
                                                !OnesConstants.IgnoreOnesStatuses.Contains(o.StatusId) &&
                                                onesFilter.BuIds.Contains(o.BuId) &&
                                                onesFilter.SiteIds.Contains(o.SiteEntityId) &&
                                                onesFilter.DisciplineIds.Contains(o.DisciplineId.Value))
                       .Include(o => o.Artist)
                       .Where(o => onesFilter.ArtistLevelIds.Contains(o.Artist.LevelId.Value))
                       .ToList();

            return(ones);
        }
Esempio n. 2
0
        private static void Main(string[] args)
        {
            //Console.WriteLine("Warning. All records in quota tables will be deleted.");
            //_context.Database.ExecuteSqlCommand(CommonConstants.ClearAllQuotaTablesScriptText);

            while (true)
            {
                Console.WriteLine("Business units:");
                foreach (var businessUnit in CommonConstants.BusinessUnits)
                {
                    Console.WriteLine($"{businessUnit.Value,-30}{businessUnit.Key,5}");
                }

                Console.WriteLine("\nWrite the business unit id and press enter:");
                int buId;

                while (!int.TryParse(Console.ReadLine(), out buId) || !CommonConstants.BusinessUnits.ContainsKey(buId))
                {
                    Console.Write("This is not valid input. Please enter business unit id:\n");
                }

                _quotaScenarioRepository.DeleteQuotaScenariosForBusinessUnit(buId);

                Console.WriteLine("\nGetting shows");
                var shows = _showRepository.GetShowsByBuId(buId);

                Console.WriteLine("Getting disciplines");
                var disciplines = GetDisciplinesForBusinessUnitIncludingTps(buId);

                Console.WriteLine("Getting artist levels\n");
                var artistLevelIds = _artistLevelRepository.GetArtistLevels().Select(l => l.Id).ToList();

                var buIds = _entityTpsRelationRepository.GetEntityTpsRelations(buId).Select(x => x.TpsEntityId).ToList();
                buIds.Add(buId);

                var userId = _userProfileRepository
                             .GetItemAsQueryable(u =>
                                                 !u.Deleted && u.Active && u.BuId == buId && u.UserTypeId == CommonConstants.GlobalResourceManagerUserTypeId)
                             .Select(u => u.UserId)
                             .First();

                var showsCount = shows.Count;
                var i          = 1;

                foreach (var show in shows)
                {
                    try
                    {
                        var showFacilities  = _showFacilityRepository.GetShowFacilities(show.ShowId).ToList();
                        var showFacilityIds = showFacilities.Select(x => x.EntityId).ToList();
                        var disciplineIds   = disciplines.Select(x => x.Id).ToList();

                        if (show.ProducerUserId.HasValue)
                        {
                            userId = show.ProducerUserId.Value;
                        }

                        var filter = new OnesForMasterScenarioFilter
                        {
                            ShowOnesScenarioId = CommonConstants.ShowOnesMasterScenarioId,
                            ShowId             = show.ShowId,
                            BuIds          = buIds,
                            ArtistLevelIds = artistLevelIds,
                            SiteIds        = showFacilityIds,
                            DisciplineIds  = disciplineIds
                        };

                        var ones = _onesRepository.GetOnesForMasterScenario(filter).ToList();

                        using (var transaction = _context.Database.BeginTransaction())
                        {
                            try
                            {
                                var quotaScenario = new ShowOnesQuotaScenario
                                {
                                    ShowId             = show.ShowId,
                                    UserId             = userId,
                                    Name               = CommonConstants.MasterScenarioName,
                                    CreatedDateTimeUtc = DateTime.UtcNow,
                                    IsMaster           = true
                                };

                                var dbQuotaScenarioId = _quotaScenarioRepository.Save(quotaScenario);

                                var uniqueFilters = CreateUniqueFilters(dbQuotaScenarioId, disciplines, showFacilities);
                                _context.BulkInsert(uniqueFilters);

                                var isEpisodicShow = show.ShowCategoryId == CommonConstants.EpisodicShowCategoryId;
                                List <ShowOnesQuota> levelQuotas;

                                if (isEpisodicShow)
                                {
                                    levelQuotas = CreateLevelQuotasFromDailyUnassignedOnes(ones, uniqueFilters, dbQuotaScenarioId);
                                }
                                else
                                {
                                    levelQuotas = CreateLevelQuotasFromWeeklyUnassignedOnes(ones, uniqueFilters, dbQuotaScenarioId);
                                }

                                _context.BulkInsert(levelQuotas);

                                var siteQuotas = CreateSiteQuotas(levelQuotas);
                                _context.BulkInsert(siteQuotas);

                                transaction.Commit();
                                //transaction.Rollback();
                            }
                            catch (Exception ex)
                            {
                                transaction.Rollback();
                                Console.WriteLine($"Show code:{show.ShowCode}\n" +
                                                  $"Error message: {ex.Message}\n" +
                                                  $"Inner exception: {ex.InnerException}");
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine($"Show code:{show.ShowCode}\n" +
                                          $"Error message: {ex.Message}\n" +
                                          $"Inner exception: {ex.InnerException}");
                    }

                    var progressValue    = (double)i / showsCount * 100;
                    var completedPercent = Math.Round(progressValue, 1, MidpointRounding.AwayFromZero);
                    Console.WriteLine($"Convert completed on: {completedPercent}%");

                    i++;
                }

                Console.WriteLine($"Finish converting for {CommonConstants.BusinessUnits.First(bu => bu.Key == buId).Value}\n");
            }
        }