using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.Mvc; using Sevomin.Models; using Sevomin.Models.Repositories; using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.EntityFramework; using Sevomin.Models.Helpers; using System.Web; namespace Sevomin.WebFrontend.Controllers { public class JobController : AuthorizedController { IJobRepository _JobRepository; public SevominUserManager UserManager { get; private set; } private HttpContextBase _httpContext; public JobController() : this(JobRepository.Current, new SevominUserManager(new UserStore(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) { _JobRepository = jobRepository; UserManager = userManager; _httpContext = httpContext; } private async Task GetEmptyJob() { User u = await UserManager.FindByNameAsync(User.Identity.Name); if (u == null) throw new InvalidOperationException("شما خیلی هنرمندی! به ما هم بگو چجوری!"); Avalin avalin = (Avalin)u; Job job = _JobRepository.GetEmptyJobFor(avalin); return job; } public async Task NewJob() { Job job = await GetEmptyJob(); JobViewModel jvm = new JobViewModel(job); return View(jvm); } [HttpPost] public async Task NewJob(string JalaliExpireDate, string ContactPersonName, string ContactPersonPhone, string ContactPersonEMail, bool IsFullTime, bool ShowCompanyName, string Description, bool ShowCompanyLogo, FormCollection form) { Job job = await GetEmptyJob(); try { UpdateFields(JalaliExpireDate, ContactPersonName, ContactPersonPhone, ContactPersonEMail, IsFullTime, ShowCompanyName, Description, ShowCompanyLogo, form, job); JobRepository.Current.Save(); } catch (Exception) { JobViewModel jvm = new JobViewModel(job); return View(jvm); } return Content("boogh: " + job.Id.ToString()); } private async Task 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 Edit(long id) { Job job = await FetchJob(id); JobViewModel jvm = new JobViewModel(job); return View(jvm); } [HttpPost] public async Task Edit(long id, string JalaliExpireDate, string ContactPersonName, string ContactPersonPhone, string ContactPersonEMail, bool IsFullTime, bool ShowCompanyName, string Description, bool ShowCompanyLogo, FormCollection form) { Job job = await FetchJob(id); try { UpdateFields(JalaliExpireDate, ContactPersonName, ContactPersonPhone, ContactPersonEMail, IsFullTime, ShowCompanyName, Description, ShowCompanyLogo, form, job); JobRepository.Current.Save(); } catch (Exception) { JobViewModel jvm = new JobViewModel(job); return View(jvm); } return Content("boogh: " + job.Id.ToString()); } private static void UpdateFields(string JalaliExpireDate, string ContactPersonName, string ContactPersonPhone, string ContactPersonEMail, bool IsFullTime, bool ShowCompanyName, string Description, bool ShowCompanyLogo, 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; 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); jp.Moscow = moscow; } } } }