|
|
- using Microsoft.AspNet.Identity;
- using Microsoft.AspNet.Identity.EntityFramework;
- using Microsoft.Owin.Security;
- using Sevomin.Models;
- using Sevomin.Models.Enums;
- using Sevomin.Models.Helpers;
- using Sevomin.Models.Repositories;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Web;
- using System.Web.Mvc;
-
- namespace Sevomin.WebFrontend.Controllers
- {
- public class JobController : AuthorizedController
- {
- IJobRepository _jobRepository;
- private HttpContextBase _httpContext;
-
- public JobController()
- : this(JobRepository.Current,
- new SevominUserManager(new UserStore<User>(SevominDbContext.Current)), null)
- {
- }
-
- protected override void Initialize(System.Web.Routing.RequestContext requestContext)
- {
- base.Initialize(requestContext);
- _httpContext = requestContext.HttpContext;
- }
-
- public JobController(IJobRepository jobRepository, SevominUserManager userManager, HttpContextBase httpContext) : base(userManager)
- {
- _jobRepository = jobRepository;
- _httpContext = httpContext;
- }
-
- private async Task<Job> GetEmptyJob()
- {
- User u = await UserManager.FindByNameAsync(User.Identity.Name);
- if (u == null)
- throw new InvalidOperationException("شما خیلی هنرمندی! به ما هم بگو چجوری!");
- Avalin avalin = u as Avalin;
- if (avalin == null)
- throw new InvalidOperationException("جای شما که اینجا نیست!");
- Job job = _jobRepository.GetEmptyJobFor(avalin);
- return job;
- }
-
- [Authorize(Roles = "Avalin")]
- public async Task<ActionResult> NewJob()
- {
- Avalin u = await UserManager.FindByNameAsync(User.Identity.Name) as Avalin;
- Job job = await GetEmptyJob();
- JobViewModel jvm = new JobViewModel(job);
-
- if (u == null)
- throw new InvalidOperationException();
- if (!u.EmailConfirmed)
- {
- ViewBag.Result = new PostResultViewModel(false, "ایمیل شما در سایت تایید نشده است. لطفا پس از تایید ایمیل برای تعریف این فرصت شغلی اقدام نمایید.");
- return View(jvm);
- }
-
- return View(jvm);
- }
-
- [Authorize(Roles = "Avalin")]
- [HttpPost]
- public async Task<ActionResult> NewJob(string JalaliExpireDate, string ContactPersonName,
- string ContactPersonPhone, string ContactPersonEMail, bool IsFullTime,
- bool ShowCompanyName, string Description, bool ShowCompanyLogo, ResumeTypes ResumeType, FormCollection form)
- {
- Avalin u = await UserManager.FindByNameAsync(User.Identity.Name) as Avalin;
- Job job = await GetEmptyJob();
- if (u == null)
- throw new InvalidOperationException();
- if (!u.EmailConfirmed)
- {
- ViewBag.Result = new PostResultViewModel(false, "ایمیل شما در سایت تایید نشده است. لطفا پس از تایید ایمیل برای تعریف این فرصت شغلی اقدام نمایید.");
- return View(new JobViewModel(job));
- }
-
- try
- {
- UpdateFields(JalaliExpireDate, ContactPersonName, ContactPersonPhone,
- ContactPersonEMail, IsFullTime, ShowCompanyName,
- Description, ShowCompanyLogo, ResumeType, form, job);
- JobRepository.Current.Save();
-
- ViewBag.Result = new PostResultViewModel(true, "آگهی شما با موفقیت منتشر شد.");
-
- return RedirectToAction("SingleJob", new { jobId = job.Id });
- }
- catch (Exception)
- {
- ViewBag.Result = new PostResultViewModel(true, "در انتشار آگهی خطایی پیش آمده.");
- return View(new JobViewModel(job));
- }
- }
-
- private async Task<Job> FetchJob(long id)
- {
- User u = await UserManager.FindByNameAsync(User.Identity.Name);
- if (u == null)
- throw new InvalidOperationException("شما خیلی هنرمندی! به ما هم بگو چجوری!");
- Avalin avalin = (Avalin)u;
- Job job = _jobRepository.Find(id);
- if (job == null || job.AvalinId != avalin.Id)
- throw new InvalidOperationException("شماره آگهی استخدام مورد نظر معتبر نیست");
- return job;
- }
-
- [Authorize(Roles= "Avalin")]
- public async Task<ActionResult> Edit(long id)
- {
- Job job = await FetchJob(id);
-
- if (job.AvalinId != (await UserManager.FindByNameAsync(User.Identity.Name)).Id)
- return HttpNotFound();
-
- JobViewModel jvm = new JobViewModel(job);
- return View(jvm);
- }
-
- [HttpPost]
- public async Task<ActionResult> Edit(long id, string JalaliExpireDate, string ContactPersonName,
- string ContactPersonPhone, string ContactPersonEMail, bool IsFullTime,
- bool ShowCompanyName, string Description, bool ShowCompanyLogo, ResumeTypes ResumeType, FormCollection form)
- {
- Job job = await FetchJob(id);
-
- if (job.AvalinId != (await UserManager.FindByNameAsync(User.Identity.Name)).Id)
- return HttpNotFound();
-
- try
- {
- UpdateFields(JalaliExpireDate, ContactPersonName, ContactPersonPhone,
- ContactPersonEMail, IsFullTime, ShowCompanyName,
- Description, ShowCompanyLogo, ResumeType, form, job);
- JobRepository.Current.Save();
-
- ViewBag.Result = new PostResultViewModel(true, "آگهی شما با موفقیت به روز رسانی شد.");
-
- return View(new JobViewModel(job));
- }
- catch (Exception)
- {
- ViewBag.Result = new PostResultViewModel(false, "در به روز رسانی آگهی خطایی پیش آمد.");
-
- return View(new JobViewModel(job));
- }
- }
-
- [AllowAnonymous]
- public ActionResult RecentJobs()
- {
- return View(_jobRepository.ListAll()
- .Where(d => d.ExpireDate >= DateTime.Now)
- .OrderByDescending(d => d.ExpireDate)
- .ToList()
- .Select(j => new JobMiniViewModel(j)).ToList());
- }
-
- [AllowAnonymous]
- public PartialViewResult LatestJobList(int count)
- {
- return PartialView("JobList", _jobRepository.ListAll()
- .Where(d => d.ExpireDate >= DateTime.Now)
- .OrderByDescending(d => d.CreateDate)
- .Take(count)
- .ToList()
- .Select(j => new JobMiniViewModel(j)).ToList());
- }
-
- [AllowAnonymous]
- public async Task<ActionResult> SingleJob(long jobId)
- {
- Job job = _jobRepository.Find(jobId);
- if (job == null)
- return HttpNotFound();
-
- JobViewModel viewModel = new JobViewModel(job);
- JobMiniViewModel jvm = new JobMiniViewModel(job, 3);
-
- ViewBag.ShortJobDescription = jvm.JobSummary;
- if (Request.IsAuthenticated && User.IsInRole("Dovomin"))
- {
- Dovomin user = await UserManager.FindByNameAsync(User.Identity.Name) as Dovomin;
- DovominJobViewModel djvm = new DovominJobViewModel(new DovominJob(user, job));
- ViewBag.MinimumRequirement = djvm.MinimumRequirement;
- ViewBag.Affinity = djvm.Affinity.ToString();
- }
-
- return View(viewModel);
- }
-
- [Authorize(Roles = "Dovomin")]
- public async Task<ActionResult> Apply(long jobId)
- {
- Dovomin user = (await UserManager.FindByNameAsync(User.Identity.Name)) as Dovomin;
- Job job = _jobRepository.Find(jobId);
- if (user == null || job == null)
- return HttpNotFound();
-
- bool alreadyApplied = job.Applications.Any(a => a.DovominId == user.Id);
- DovominJob dj = alreadyApplied ? job.Applications.First(a => a.DovominId == user.Id) : new DovominJob(user, job);
- dj.CalculateAffinity();
-
- PrepareJobApplication(user, job, alreadyApplied);
-
- return View(new DovominJobViewModel(dj));
- }
-
- [Authorize(Roles = "Dovomin")]
- [HttpPost]
- [ValidateAntiForgeryToken]
- public async Task<ActionResult> Apply(long jobId, string CoverLetter)
- {
- Dovomin user = (await UserManager.FindByNameAsync(User.Identity.Name)) as Dovomin;
- Job job = _jobRepository.Find(jobId);
- if (user == null || job == null)
- return HttpNotFound();
-
- bool alreadyApplied = job.Applications.Any(a => a.DovominId == user.Id);
- PrepareJobApplication(user, job, alreadyApplied);
- DovominJob dj = alreadyApplied ? job.Applications.First(a => a.DovominId == user.Id) : new DovominJob(user, job);
- dj.CalculateAffinity();
-
- if (alreadyApplied)
- {
- ViewBag.Result = new PostResultViewModel(false, "اعلام آمادگی شما برای این فرصت شغلی قبلا ثبت شده است.");
- return View(new DovominJobViewModel(dj));
- }
- else if (!user.EmailConfirmed)
- {
- ViewBag.Result = new PostResultViewModel(false, "ایمیل شما در سایت تایید نشده است. لطفا پس از تایید ایمیل خود، مجددا برای این فرصت شغلی اعلام آمادگی نمایید.");
- return View(new DovominJobViewModel(dj));
- }
-
- dj = _jobRepository.Apply(user, job, CoverLetter);
- ViewBag.Result = new PostResultViewModel(true, "اعلام آمادگی شما برای این فرصت شغلی ثبت شد.");
- return View(new DovominJobViewModel(dj));
- }
-
- public ActionResult MyJobs(int? count)
- {
- User user = UserManager.FindByName(User.Identity.Name);
-
- List<JobMiniViewModel> retList = new List<JobMiniViewModel>();
-
- if (user is Avalin)
- retList = _jobRepository.ListAll()
- .Where(j => j.AvalinId == user.Id)
- .OrderByDescending(j => j.CreateDate)
- .ToList()
- .Select(j => new JobMiniViewModel(j))
- .ToList();
- else
- retList = _jobRepository.ListAll()
- .Where(j => j.Applications.Any(a => a.DovominId == user.Id))
- .OrderByDescending(j => j.CreateDate)
- .ToList()
- .Select(j => new JobMiniViewModel(j))
- .ToList();
-
- return PartialView("JobList", retList);
- }
-
- [Authorize(Roles = "Avalin")]
- public ActionResult JobRequests()
- {
- Avalin user = UserManager.FindByName(User.Identity.Name) as Avalin;
-
- if (user == null)
- return HttpNotFound();
-
- var applications = SevominDbContext.Current.DovominJobs
- .Where(a => a.Job.AvalinId == user.Id)
- .OrderByDescending(a => a.ApplyDate)
- .ToList()
- .Select(a => new JobApplicationViewModel(a));
-
- return PartialView(applications);
- }
-
- private void PrepareJobApplication(Dovomin user, Job job, bool alreadyApplied = true)
- {
- JobMiniViewModel jvm = new JobMiniViewModel(job, 3);
-
- ViewBag.ShortJobDescription = jvm.JobSummary;
- ViewBag.Job = new JobViewModel(job);
- ViewBag.AlreadyApplied = alreadyApplied;
- }
-
- private static void UpdateFields(string JalaliExpireDate, string ContactPersonName, string ContactPersonPhone, string ContactPersonEMail, bool IsFullTime, bool ShowCompanyName, string Description, bool ShowCompanyLogo, ResumeTypes ResumeType, FormCollection form, Job job)
- {
- job.ExpireDate = DateAssist.ToMiladi(JalaliExpireDate);
- job.ContactPersonEMail = ContactPersonEMail;
- job.ContactPersonName = ContactPersonName;
- job.ContactPersonPhone = ContactPersonPhone;
- job.Description = Description;
- job.IsFullTime = IsFullTime;
- job.ShowCompanyLogo = ShowCompanyLogo;
- job.ShowCompanyName = ShowCompanyName;
- job.ResumeType = (byte)ResumeType;
- foreach (var jp in job.JobParameters)
- {
- string value = form[string.Format("value-{0}", jp.Parameter.Id)];
- byte moscow = 0;
- byte.TryParse(form[string.Format("moscow-{0}", jp.Parameter.Id)], out moscow);
- jp.SetValue(value);
- if (jp.Parameter.Moscow)
- {
- if (string.IsNullOrWhiteSpace(jp.StringValue))
- jp.Moscow = 0;
- else
- jp.Moscow = moscow;
- }
- else
- {
- jp.Moscow = 4;
- }
- }
- }
- }
- }
|