Ejemplo n.º 1
0
 public static ShortApplicationViewModel ApplicationToShortViewModel(ExpertApplication application, Subject subject) =>
 new ShortApplicationViewModel
 {
     Status          = application.Status.ToString(),
     DateTimeCreated = application.DateTimeCreated,
     SubjectName     = subject.SubjectName
 };
Ejemplo n.º 2
0
 public static ExpertApplicationResponse Create(ExpertApplication application, User applicant, Country country)
 {
     return(new ExpertApplicationResponse
     {
         Id = application.Id,
         Address = applicant.Address,
         DocumentType = application.DocumentType.FromDomain(),
         Sex = application.Sex,
         Areas = application.ExpertApplicationAreas.Select(s => (int)s.AreaId).ToArray(),
         Why = application.Why,
         LastName = application.LastName,
         LinkedInLink = application.LinkedInLink,
         BitcointalkLink = application.BitcointalkLink,
         City = application.City,
         FirstName = application.FirstName,
         DocumentNumber = application.DocumentNumber,
         BirthDate = application.BirthDate,
         FacebookLink = application.FacebookLink,
         Description = application.Description,
         CvUrl = application.CvUrl,
         PhotoUrl = application.PhotoUrl,
         ScanUrl = application.ScanUrl,
         CountryIsoCode = country.Code
     });
 }
Ejemplo n.º 3
0
 public static PendingExpertApplicationsResponse Create(ExpertApplication expertApplication)
 {
     return(new PendingExpertApplicationsResponse
     {
         Id = expertApplication.Id,
         ApplyDate = expertApplication.ApplyDate,
         FirstName = expertApplication.FirstName,
         LastName = expertApplication.LastName
     });
 }
Ejemplo n.º 4
0
 public static ApplicationViewModel ApplicationToViewModel(ExpertApplication application, Subject subject, ApplicationUser user) =>
 new ApplicationViewModel
 {
     ApplicationId   = application.ID,
     Status          = application.Status,
     Motivation      = application.Motivation,
     DateTimeCreated = application.DateTimeCreated,
     SubjectName     = subject.SubjectName,
     UserId          = user.Id,
     UserName        = user.UserName
 };
Ejemplo n.º 5
0
        public async Task CreateApplicationAsync(CreateExpertApplicationRequest request, long userId, AzureFile cv, AzureFile scan, AzureFile photo)
        {
            var country = await GetCountryAsync(request.CountryIsoCode);

            var expertApplication = new ExpertApplication
            {
                FirstName       = request.FirstName,
                LastName        = request.LastName,
                Sex             = request.Sex,
                ApplicantId     = userId,
                BirthDate       = request.BirthDate,
                CountryId       = country.Id,
                City            = request.City,
                Description     = request.Description,
                Why             = request.Why,
                FacebookLink    = request.FacebookLink,
                LinkedInLink    = request.LinkedInLink,
                BitcointalkLink = request.BitcointalkLink,
                DocumentNumber  = request.DocumentNumber,
                DocumentType    = request.DocumentType.ToDomain(),
                ApplyDate       = _clock.UtcNow
            };

            expertApplication.SetAreas(request.Areas);

            _expertApplicationRepository.Add(expertApplication);

            await _expertApplicationRepository.SaveChangesAsync();

            var applicationId = expertApplication.Id.ToString();

            var scanName  = $"application-{applicationId}/scan-{Guid.NewGuid()}{scan.Extension}";
            var photoName = $"application-{applicationId}/photo-{Guid.NewGuid()}{photo.Extension}";
            var cvName    = $"application-{applicationId}/cv-{Guid.NewGuid()}{cv.Extension}";

            var links = await Task.WhenAll(_expertApplicationsStorageProvider.UploadAndGetUriAsync(scanName, scan),
                                           _expertApplicationsStorageProvider.UploadAndGetUriAsync(cvName, cv),
                                           _expertApplicationsStorageProvider.UploadAndGetUriAsync(photoName, photo));

            expertApplication.ScanUrl  = links[0];
            expertApplication.CvUrl    = links[1];
            expertApplication.PhotoUrl = links[2];

            await _expertApplicationRepository.SaveChangesAsync();
        }
 public void Add(ExpertApplication expertApplication)
 => _editContext.ExpertApplications.Add(expertApplication);
        public async Task <ActionResult <ApplicationViewModel> > PostApplication(ApplicationViewModel applicationViewModel)
        {
            var user = await _userManager.FindByNameAsync(User.Identity.Name);

            if (user == null)
            {
                return(NotFound());
            }

            var subject = await _context.Subjects.Where(x => x.SubjectName == applicationViewModel.SubjectName).FirstOrDefaultAsync();

            if (subject == null)
            {
                return(NotFound("Subject not found"));
            }

            var application = new ExpertApplication
            {
                Motivation      = applicationViewModel.Motivation,
                DateTimeCreated = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd HH:mm")),
                SubjectId       = subject.ID,
                UserId          = user.Id,
            };

            //Checks if the user has an pending application for the subject he is applying in

            List <ExpertApplication> expertApplications = await _context.ExpertApplications.Where(x => x.UserId == user.Id).ToListAsync();

            if (expertApplications.Count != 0)
            {
                foreach (var userApplication in expertApplications)
                {
                    if (userApplication.SubjectId == application.SubjectId && userApplication.Status == ApplicationStatus.Pending)
                    {
                        return(StatusCode(400, "You already have an active request for this subject!"));
                    }
                    if (userApplication.SubjectId == application.SubjectId && userApplication.ReviewedBy != null)
                    {
                        int  value      = DateTime.Compare(userApplication.ReviewedOn.AddMinutes(2), DateTime.Now);
                        bool TimePassed = value != 1;
                        if (TimePassed == false)
                        {
                            return(StatusCode(400, "Your last request was to recent. you can apply 2 minutes after your last request has been denied."));
                        }

                        if (TimePassed && userApplication.SubjectId == application.SubjectId && userApplication.Status == ApplicationStatus.Denied)
                        {
                            userApplication.Status     = ApplicationStatus.Pending;
                            userApplication.ReviewedBy = null;
                            await _context.SaveChangesAsync();

                            return(StatusCode(200, "Your application for " + applicationViewModel.SubjectName + " has been set to Pending"));
                        }
                        return(StatusCode(400, "You have applied for this subject already or have been approved!"));
                    }
                }
            }

            _context.ExpertApplications.Add(application);
            await _context.SaveChangesAsync();

            return(StatusCode(200, "Your application for " + applicationViewModel.SubjectName + " has been submitted"));
        }