You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

230 lines
8.2 KiB

using Microsoft.AspNet.Identity.EntityFramework;
using Sevomin.Models;
using Sevomin.Models.Enums;
using Sevomin.Models.Helpers;
using Sevomin.Models.Repositories;
using System;
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;
}
public async Task<ActionResult> NewJob()
{
Job job = await GetEmptyJob();
JobViewModel jvm = new JobViewModel(job);
return View(jvm);
}
[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)
{
Job job = await GetEmptyJob();
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;
}
public async Task<ActionResult> Edit(long id)
{
Job job = await FetchJob(id);
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);
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));
}
}
public PartialViewResult LatestJobList(int count)
{
return PartialView("JobList", JobRepository.Current.ListAll()
.Where(d => d.ExpireDate >= DateTime.Now)
.OrderBy(d => d.ExpireDate)
.Take(count)
.ToList()
.Select(j => new JobMiniViewModel(j)).ToList());
}
public 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);
StringBuilder sb = new StringBuilder("کارشناس برنامه ریزی و کنترل پروژه ");
foreach (var param in jvm.Parameters)
sb.Append(string.Format(param.Item1 + " ", param.Item2));
ViewBag.ShortJobDescription = sb.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();
DovominJob dj = new DovominJob(user, job);
JobMiniViewModel jvm = new JobMiniViewModel(job, 3);
StringBuilder sb = new StringBuilder("کارشناس برنامه ریزی و کنترل پروژه ");
foreach (var param in jvm.Parameters)
sb.Append(string.Format(param.Item1 + " ", param.Item2));
ViewBag.ShortJobDescription = sb.ToString();
ViewBag.Job = new JobViewModel(job);
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();
_JobRepository.Apply(user, job, CoverLetter);
JobMiniViewModel jvm = new JobMiniViewModel(job, 3);
StringBuilder sb = new StringBuilder("کارشناس برنامه ریزی و کنترل پروژه ");
foreach (var param in jvm.Parameters)
sb.Append(string.Format(param.Item1 + " ", param.Item2));
ViewBag.ShortJobDescription = sb.ToString();
ViewBag.Job = new JobViewModel(job);
ViewBag.Result = new PostResultViewModel(true, "اعلام آمادگی شما برای این فرصت شغلی ثبت شد.");
return View();
}
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;
}
}
}
}
}