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

11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
  1. using Microsoft.AspNet.Identity.EntityFramework;
  2. using Sevomin.Models;
  3. using Sevomin.Models.Enums;
  4. using Sevomin.Models.Helpers;
  5. using Sevomin.Models.Repositories;
  6. using System;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Web;
  11. using System.Web.Mvc;
  12. namespace Sevomin.WebFrontend.Controllers
  13. {
  14. public class JobController : AuthorizedController
  15. {
  16. IJobRepository _JobRepository;
  17. private HttpContextBase _httpContext;
  18. public JobController()
  19. : this(JobRepository.Current,
  20. new SevominUserManager(new UserStore<User>(SevominDbContext.Current)), null)
  21. {
  22. }
  23. protected override void Initialize(System.Web.Routing.RequestContext requestContext)
  24. {
  25. base.Initialize(requestContext);
  26. _httpContext = requestContext.HttpContext;
  27. }
  28. public JobController(IJobRepository jobRepository, SevominUserManager userManager, HttpContextBase httpContext) : base(userManager)
  29. {
  30. _JobRepository = jobRepository;
  31. _httpContext = httpContext;
  32. }
  33. private async Task<Job> GetEmptyJob()
  34. {
  35. User u = await UserManager.FindByNameAsync(User.Identity.Name);
  36. if (u == null)
  37. throw new InvalidOperationException("شما خیلی هنرمندی! به ما هم بگو چجوری!");
  38. Avalin avalin = u as Avalin;
  39. if (avalin == null)
  40. throw new InvalidOperationException("جای شما که اینجا نیست!");
  41. Job job = _JobRepository.GetEmptyJobFor(avalin);
  42. return job;
  43. }
  44. public async Task<ActionResult> NewJob()
  45. {
  46. Job job = await GetEmptyJob();
  47. JobViewModel jvm = new JobViewModel(job);
  48. return View(jvm);
  49. }
  50. [HttpPost]
  51. public async Task<ActionResult> NewJob(string JalaliExpireDate, string ContactPersonName,
  52. string ContactPersonPhone, string ContactPersonEMail, bool IsFullTime,
  53. bool ShowCompanyName, string Description, bool ShowCompanyLogo, ResumeTypes ResumeType, FormCollection form)
  54. {
  55. Job job = await GetEmptyJob();
  56. try
  57. {
  58. UpdateFields(JalaliExpireDate, ContactPersonName, ContactPersonPhone,
  59. ContactPersonEMail, IsFullTime, ShowCompanyName,
  60. Description, ShowCompanyLogo, ResumeType, form, job);
  61. JobRepository.Current.Save();
  62. ViewBag.Result = new PostResultViewModel(true, "آگهی شما با موفقیت منتشر شد.");
  63. return RedirectToAction("SingleJob", new { jobId = job.Id });
  64. }
  65. catch (Exception)
  66. {
  67. ViewBag.Result = new PostResultViewModel(true, "در انتشار آگهی خطایی پیش آمده.");
  68. return View(new JobViewModel(job));
  69. }
  70. }
  71. private async Task<Job> FetchJob(long id)
  72. {
  73. User u = await UserManager.FindByNameAsync(User.Identity.Name);
  74. if (u == null)
  75. throw new InvalidOperationException("شما خیلی هنرمندی! به ما هم بگو چجوری!");
  76. Avalin avalin = (Avalin)u;
  77. Job job = _JobRepository.Find(id);
  78. if (job == null || job.AvalinId != avalin.Id)
  79. throw new InvalidOperationException("شماره آگهی استخدام مورد نظر معتبر نیست");
  80. return job;
  81. }
  82. public async Task<ActionResult> Edit(long id)
  83. {
  84. Job job = await FetchJob(id);
  85. JobViewModel jvm = new JobViewModel(job);
  86. return View(jvm);
  87. }
  88. [HttpPost]
  89. public async Task<ActionResult> Edit(long id, string JalaliExpireDate, string ContactPersonName,
  90. string ContactPersonPhone, string ContactPersonEMail, bool IsFullTime,
  91. bool ShowCompanyName, string Description, bool ShowCompanyLogo, ResumeTypes ResumeType, FormCollection form)
  92. {
  93. Job job = await FetchJob(id);
  94. try
  95. {
  96. UpdateFields(JalaliExpireDate, ContactPersonName, ContactPersonPhone,
  97. ContactPersonEMail, IsFullTime, ShowCompanyName,
  98. Description, ShowCompanyLogo, ResumeType, form, job);
  99. JobRepository.Current.Save();
  100. ViewBag.Result = new PostResultViewModel(true, "آگهی شما با موفقیت به روز رسانی شد.");
  101. return View(new JobViewModel(job));
  102. }
  103. catch (Exception)
  104. {
  105. ViewBag.Result = new PostResultViewModel(false, "در به روز رسانی آگهی خطایی پیش آمد.");
  106. return View(new JobViewModel(job));
  107. }
  108. }
  109. public PartialViewResult LatestJobList(int count)
  110. {
  111. return PartialView("JobList", JobRepository.Current.ListAll()
  112. .Where(d => d.ExpireDate >= DateTime.Now)
  113. .OrderBy(d => d.ExpireDate)
  114. .Take(count)
  115. .ToList()
  116. .Select(j => new JobMiniViewModel(j)).ToList());
  117. }
  118. public ActionResult SingleJob(long jobId)
  119. {
  120. Job job = _JobRepository.Find(jobId);
  121. if (job == null)
  122. return HttpNotFound();
  123. JobViewModel viewModel = new JobViewModel(job);
  124. JobMiniViewModel jvm = new JobMiniViewModel(job, 3);
  125. StringBuilder sb = new StringBuilder("کارشناس برنامه ریزی و کنترل پروژه ");
  126. foreach (var param in jvm.Parameters)
  127. sb.Append(string.Format(param.Item1 + " ", param.Item2));
  128. ViewBag.ShortJobDescription = sb.ToString();
  129. return View(viewModel);
  130. }
  131. [Authorize(Roles = "Dovomin")]
  132. public async Task<ActionResult> Apply(long jobId)
  133. {
  134. Dovomin user = (await UserManager.FindByNameAsync(User.Identity.Name)) as Dovomin;
  135. Job job = _JobRepository.Find(jobId);
  136. if (user == null || job == null)
  137. return HttpNotFound();
  138. DovominJob dj = new DovominJob(user, job);
  139. JobMiniViewModel jvm = new JobMiniViewModel(job, 3);
  140. StringBuilder sb = new StringBuilder("کارشناس برنامه ریزی و کنترل پروژه ");
  141. foreach (var param in jvm.Parameters)
  142. sb.Append(string.Format(param.Item1 + " ", param.Item2));
  143. ViewBag.ShortJobDescription = sb.ToString();
  144. ViewBag.Job = new JobViewModel(job);
  145. return View(new DovominJobViewModel(dj));
  146. }
  147. [Authorize(Roles = "Dovomin")]
  148. [HttpPost]
  149. [ValidateAntiForgeryToken]
  150. public async Task<ActionResult> Apply(long jobId, string CoverLetter)
  151. {
  152. Dovomin user = (await UserManager.FindByNameAsync(User.Identity.Name)) as Dovomin;
  153. Job job = _JobRepository.Find(jobId);
  154. if (user == null || job == null)
  155. return HttpNotFound();
  156. _JobRepository.Apply(user, job, CoverLetter);
  157. JobMiniViewModel jvm = new JobMiniViewModel(job, 3);
  158. StringBuilder sb = new StringBuilder("کارشناس برنامه ریزی و کنترل پروژه ");
  159. foreach (var param in jvm.Parameters)
  160. sb.Append(string.Format(param.Item1 + " ", param.Item2));
  161. ViewBag.ShortJobDescription = sb.ToString();
  162. ViewBag.Job = new JobViewModel(job);
  163. ViewBag.Result = new PostResultViewModel(true, "اعلام آمادگی شما برای این فرصت شغلی ثبت شد.");
  164. return View();
  165. }
  166. 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)
  167. {
  168. job.ExpireDate = DateAssist.ToMiladi(JalaliExpireDate);
  169. job.ContactPersonEMail = ContactPersonEMail;
  170. job.ContactPersonName = ContactPersonName;
  171. job.ContactPersonPhone = ContactPersonPhone;
  172. job.Description = Description;
  173. job.IsFullTime = IsFullTime;
  174. job.ShowCompanyLogo = ShowCompanyLogo;
  175. job.ShowCompanyName = ShowCompanyName;
  176. job.ResumeType = (byte)ResumeType;
  177. foreach (var jp in job.JobParameters)
  178. {
  179. string value = form[string.Format("value-{0}", jp.Parameter.Id)];
  180. byte moscow = 0;
  181. byte.TryParse(form[string.Format("moscow-{0}", jp.Parameter.Id)], out moscow);
  182. jp.SetValue(value);
  183. if (jp.Parameter.Moscow)
  184. {
  185. if (string.IsNullOrWhiteSpace(jp.StringValue))
  186. jp.Moscow = 0;
  187. else
  188. jp.Moscow = moscow;
  189. }
  190. else
  191. {
  192. jp.Moscow = 4;
  193. }
  194. }
  195. }
  196. }
  197. }