public ActionResult CompanyTrainingMajors_Destroy([DataSourceRequest] DataSourceRequest request,
                                                          CompanyTrainingMajor companyTrainingMajor)
        {
            if (ModelState.IsValid)
            {
                _companyTrainingMajorService.Delete(companyTrainingMajor);
            }

            return(Json(new[] { companyTrainingMajor }.ToDataSourceResult(request, ModelState)));
        }
        public void AssignInternship()
        {
            var lateRegisteredInternships          = new List <Internship>();
            List <CompanyTrainingMajor> leftMajors =
                UnitOfWork.Repository <CompanyTrainingMajor>().TableNoTracking.ToList();

            foreach (Internship item in GetByLatestSemester().OrderByDescending(i => i.RegistrationDate).ToList())
            {
                if (item.Major.AvailableTraineeCount > 0)
                {
                    item.Status = InternshipStatus.Success;
                    item.Major.AvailableTraineeCount--;
                    UnitOfWork.Repository <Internship>().Update(item);
                }
                else
                {
                    lateRegisteredInternships.Add(item);
                    leftMajors.Remove(item.Major);
                }
            }

            foreach (Internship item in lateRegisteredInternships)
            {
                CompanyTrainingMajor major = leftMajors.FirstOrDefault(m => m.TrainingMajorId == item.TrainingMajorId);
                if (major != null)
                {
                    item.TrainingMajorId = major.TrainingMajorId;
                    item.CompanyId       = major.CompanyId;
                    item.Status          = InternshipStatus.Success;
                    major.AvailableTraineeCount--;
                    if (major.AvailableTraineeCount == 0)
                    {
                        leftMajors.Remove(major);
                    }

                    UnitOfWork.Repository <Internship>().Update(item);
                    lateRegisteredInternships.Remove(item);
                }
                else
                {
                    CompanyTrainingMajor randomMajor =
                        leftMajors.FirstOrDefault(m => m.TrainingMajor.SubjectId == item.Class.SubjectId);
                    if (randomMajor != null)
                    {
                        item.TrainingMajorId = randomMajor.TrainingMajorId;
                        item.CompanyId       = randomMajor.CompanyId;
                        item.Status          = InternshipStatus.Success;
                        randomMajor.AvailableTraineeCount--;
                        if (randomMajor.AvailableTraineeCount == 0)
                        {
                            leftMajors.Remove(randomMajor);
                        }

                        UnitOfWork.Repository <Internship>().Update(item);
                        lateRegisteredInternships.Remove(item);
                    }
                }
            }

            foreach (Internship item in lateRegisteredInternships)
            {
                item.Status = InternshipStatus.Failed;
                UnitOfWork.Repository <Internship>().Update(item);
            }
        }