diff --git a/Sevomin.Models/Helpers/ScheduledTasks/NewApplication.cs b/Sevomin.Models/Helpers/ScheduledTasks/NewApplication.cs index 90e776d..9228852 100644 --- a/Sevomin.Models/Helpers/ScheduledTasks/NewApplication.cs +++ b/Sevomin.Models/Helpers/ScheduledTasks/NewApplication.cs @@ -11,15 +11,28 @@ namespace Sevomin.Models.Helpers.ScheduledTasks { public async void Execute() { - var avalins = SevominDbContext.Current.DovominJobs.Where(dj => dj.ApplyDate.Date == DateTime.Now.AddDays(-2).Date).Select(a => a.Job.Avalin); + var avalins = SevominDbContext.Current.DovominJobs.Where(dj => dj.ApplyDate.Date >= DateTime.Now.AddDays(-2).Date).Select(a => a.Job.Avalin); foreach (var avalin in avalins.Distinct()) { - SevominEmailer emailer = new SevominEmailer(); - emailer.EmailType = EmailType.NewApplication; - emailer.Parameters.Add("", ""); + var applies = SevominDbContext.Current.DovominJobs.Where(dj => dj.Job.AvalinId == avalin.Id && dj.ApplyDate.Date == DateTime.Now.AddDays(-2).Date); - await emailer.SendAsync(avalin.Email, "", true); + foreach (var apply in applies) + { + SevominEmailer emailer = new SevominEmailer(); + emailer.EmailType = EmailType.NewApplication; + emailer.Parameters.Add("avalin-name", avalin.DisplayName); + emailer.Parameters.Add("avalin-contact", string.IsNullOrWhiteSpace(apply.Job.ContactPersonName) ? "" : apply.Job.ContactPersonName); + emailer.Parameters.Add("dovomin-name", apply.Dovomin.DisplayName); + + if (string.IsNullOrWhiteSpace(apply.Job.ContactPersonEMail)) + await emailer.SendAsync(avalin.Email, "اعلام آمادگی جدید برای فرصت شغلی اعلام شده در سومین", true); + else + { + await emailer.SendAsync(avalin.Email, "اعلام آمادگی جدید برای فرصت شغلی اعلام شده در سومین", true); + await emailer.SendAsync(apply.Job.ContactPersonEMail, "اعلام آمادگی جدید برای فرصت شغلی اعلام شده در سومین", true); + } + } } } } diff --git a/Sevomin.Models/Helpers/ScheduledTasks/NewJob.cs b/Sevomin.Models/Helpers/ScheduledTasks/NewJob.cs index f95cee8..7c5f126 100644 --- a/Sevomin.Models/Helpers/ScheduledTasks/NewJob.cs +++ b/Sevomin.Models/Helpers/ScheduledTasks/NewJob.cs @@ -12,16 +12,16 @@ namespace Sevomin.Models.Helpers.ScheduledTasks { public async void Execute() { - var newJobs = JobRepository.Current.ListAll().Where(j => j.CreateDate.Date == DateTime.Now.AddDays(-1).Date).ToList(); + var newJobs = JobRepository.Current.ListAll().Where(j => j.CreateDate.Date >= DateTime.Now.AddDays(-1).Date).ToList(); if (newJobs.Count > 0) { foreach (var dovomin in UserRepository.Current.ListAll().Where(u => u is Dovomin && u.EmailConfirmed)) { SevominEmailer emailer = new SevominEmailer(); - emailer.EmailType = EmailType.NewJob; - emailer.Parameters.Add("", ""); + emailer.EmailType = EmailType.NewJob; + emailer.Parameters.Add("display-name", dovomin.DisplayName); - await emailer.SendAsync(dovomin.Email, "", true); + await emailer.SendAsync(dovomin.Email, "آگهی استخدام جدید در سومین", true); } } } diff --git a/Sevomin.Models/Helpers/SevominRegistry.cs b/Sevomin.Models/Helpers/SevominRegistry.cs index 335724c..efac088 100644 --- a/Sevomin.Models/Helpers/SevominRegistry.cs +++ b/Sevomin.Models/Helpers/SevominRegistry.cs @@ -14,7 +14,7 @@ namespace Sevomin.Models.Helpers { Schedule().ToRunEvery(2).Days().At(8, 0); Schedule().ToRunEvery(1).Days().At(8, 10); - Schedule().ToRunEvery(2).Days().At(8, 20); + Schedule().ToRunEvery(1).Days().At(8, 20); } } } diff --git a/Sevomin.Models/JobApplicationViewModel.cs b/Sevomin.Models/JobApplicationViewModel.cs index 5ade70b..6fbc50b 100644 --- a/Sevomin.Models/JobApplicationViewModel.cs +++ b/Sevomin.Models/JobApplicationViewModel.cs @@ -29,13 +29,10 @@ namespace Sevomin.Models this.CoverLetter = dj.CoverLetter; this.Affinity = (float)(dj.Affinity * 100); this.MinimumRequirement = dj.MinimumRequirement; + + var jmvm = new JobMiniViewModel(dj.Job, 2); - StringBuilder sb = new StringBuilder("کارشناس برنامه ریزی و کنترل پروژه "); - var jmvm = new JobMiniViewModel(dj.Job, 2); - foreach (var param in jmvm.Parameters) - sb.Append(string.Format(param.Item1 + " ", param.Item2)); - - this.JobSummary = sb.ToString(); + this.JobSummary = jmvm.JobSummary; } } } diff --git a/Sevomin.Models/JobMiniViewModel.cs b/Sevomin.Models/JobMiniViewModel.cs index 7d4f000..7fa297e 100644 --- a/Sevomin.Models/JobMiniViewModel.cs +++ b/Sevomin.Models/JobMiniViewModel.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.Linq; +using System.Text; //استخدام نیروی «کنترل پروژه» با ×× سال سابقه ×× دارای ×مدرک× ×× برای کار در ×کشور×شهر× namespace Sevomin.Models @@ -48,6 +49,8 @@ namespace Sevomin.Models public string CompanyName { get; set; } public string CompanyLogo { get; set; } + public string JobSummary { private set; get; } + public IList> Parameters; public JobMiniViewModel(Job job, int maxNumberOfMiniParams = 6) @@ -84,6 +87,11 @@ namespace Sevomin.Models } Parameters.Add(new Tuple(format, value)); } + + StringBuilder sb = new StringBuilder("کارشناس برنامه ریزی و کنترل پروژه "); + foreach (var param in Parameters) + sb.Append(string.Format(param.Item1 + " ", param.Item2)); + this.JobSummary = sb.ToString(); } } } diff --git a/Sevomin.WebFrontend.Controllers/JobController.cs b/Sevomin.WebFrontend.Controllers/JobController.cs index 6f1c5b3..b03cee2 100644 --- a/Sevomin.WebFrontend.Controllers/JobController.cs +++ b/Sevomin.WebFrontend.Controllers/JobController.cs @@ -184,12 +184,9 @@ namespace Sevomin.WebFrontend.Controllers 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)); + JobMiniViewModel jvm = new JobMiniViewModel(job, 3); - ViewBag.ShortJobDescription = sb.ToString(); + ViewBag.ShortJobDescription = jvm.JobSummary; if (Request.IsAuthenticated && User.IsInRole("Dovomin")) { Dovomin user = await UserManager.FindByNameAsync(User.Identity.Name) as Dovomin; @@ -292,12 +289,9 @@ namespace Sevomin.WebFrontend.Controllers private void PrepareJobApplication(Dovomin user, Job job, bool alreadyApplied = true) { - JobMiniViewModel jvm = new JobMiniViewModel(job, 3); - StringBuilder sb = new StringBuilder("کارشناس برنامه ریزی و کنترل پروژه "); - foreach (var param in jvm.Parameters) - sb.Append(string.Format(param.Item1 + " ", param.Item2)); + JobMiniViewModel jvm = new JobMiniViewModel(job, 3); - ViewBag.ShortJobDescription = sb.ToString(); + ViewBag.ShortJobDescription = jvm.JobSummary; ViewBag.Job = new JobViewModel(job); ViewBag.AlreadyApplied = alreadyApplied; } diff --git a/Sevomin.WebFrontend/Global.asax.cs b/Sevomin.WebFrontend/Global.asax.cs index c1dd61e..6dd4c2e 100644 --- a/Sevomin.WebFrontend/Global.asax.cs +++ b/Sevomin.WebFrontend/Global.asax.cs @@ -18,9 +18,13 @@ namespace Sevomin.WebFrontend AreaRegistration.RegisterAllAreas(); RouteConfig.RegisterRoutes(RouteTable.Routes); - //TaskManager.Initialize(new SevominRegistry()); +#if !DEBUG + TaskManager.Initialize(new SevominRegistry()); +#endif } + + void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e) { if ((e.Exception.GetBaseException() is HttpException diff --git a/Sevomin.WebFrontend/Views/God/Index.cshtml b/Sevomin.WebFrontend/Views/God/Index.cshtml index 5a391ca..cc8dcfe 100644 --- a/Sevomin.WebFrontend/Views/God/Index.cshtml +++ b/Sevomin.WebFrontend/Views/God/Index.cshtml @@ -11,13 +11,13 @@ - +

سلام!

-

یک سری اطلاعات کلی درباره وب سایت سومین در این محل قابل ارائه می باشد.

+

یک سری اطلاعات کلی درباره وب سایت سومین در این محل قابل ارائه می باشد.

@@ -46,59 +46,70 @@
-
+

اعلام آمادگی های فرصت های شغلی

- @foreach (Sevomin.Models.Avalin avalin in Sevomin.Models.SevominDbContext.Current.Users.OfType().ToList()) - { - if (avalin.Jobs.Count == 0) - { continue; } -

@avalin.DisplayName

- foreach (var job in avalin.Jobs) +
+ @foreach (Sevomin.Models.Avalin avalin in Sevomin.Models.SevominDbContext.Current.Users.OfType().ToList()) { - if (job.Applications.Count == 0) + if (avalin.Jobs.Count == 0) { continue; } - - foreach (var application in job.Applications) - { - Sevomin.Models.JobApplicationViewModel apply = new Sevomin.Models.JobApplicationViewModel(application); - -
-
- از طرف @apply.DovominDisplayName - (@(string.IsNullOrWhiteSpace(job.ContactPersonName) ? "نام وارد نشده" : job.ContactPersonName) - @((string.IsNullOrWhiteSpace(job.ContactPersonEMail) ? "ایمیل وارد نشده" : job.ContactPersonEMail)) - @((string.IsNullOrWhiteSpace(job.ContactPersonPhone) ? "تلفن وارد نشده" : job.ContactPersonPhone))) - -

@apply.JobSummary

- @if (!string.IsNullOrWhiteSpace(apply.CoverLetter)) - { -
پیغام متخصص:
-
@apply.CoverLetter
- } - @if (apply.MinimumRequirement) - { -

این متخصص تمامی مهارت های الزامی برای این فرصت شغلی را دارد. همچنین میزان مطابقت ایشان با این فرصت شغلی، @apply.Affinity درصد است.

- } - else - { -

این متخصص برخی مهارت های الزامی برای این فرصت شغلی را ندارد. همچنین میزان مطابقت ایشان با این فرصت شغلی، @apply.Affinity درصد است.

+
+ + @foreach (var job in avalin.Jobs) + { + if (job.Applications.Count == 0) + { continue; } +
+
+

@((new Sevomin.Models.JobMiniViewModel(job)).JobSummary) @Html.ActionLink("مشاهده آگهی", "SingleJob", "Job", new { jobId = job.Id })

+
اطلاعات فرد پاسخگو به این آگهی: (@(string.IsNullOrWhiteSpace(job.ContactPersonName) ? "نام وارد نشده" : job.ContactPersonName) + @((string.IsNullOrWhiteSpace(job.ContactPersonEMail) ? "ایمیل وارد نشده" : job.ContactPersonEMail)) + @((string.IsNullOrWhiteSpace(job.ContactPersonPhone) ? "تلفن وارد نشده" : job.ContactPersonPhone)))
+
+ @foreach (var application in job.Applications.OrderByDescending(a => a.ApplyDate)) + { + Sevomin.Models.JobApplicationViewModel apply = new Sevomin.Models.JobApplicationViewModel(application); +
+ از طرف @apply.DovominDisplayName + @if (!string.IsNullOrWhiteSpace(apply.CoverLetter)) + { +
پیغام متخصص:
+
@apply.CoverLetter
+ } + @if (apply.MinimumRequirement) + { +

این متخصص تمامی مهارت های الزامی برای این فرصت شغلی را دارد. همچنین میزان مطابقت ایشان با این فرصت شغلی، @apply.Affinity درصد است.

+ } + else + { +

این متخصص برخی مهارت های الزامی برای این فرصت شغلی را ندارد. همچنین میزان مطابقت ایشان با این فرصت شغلی، @apply.Affinity درصد است.

+ } +
+ } +
} -
-
- } - } - } +
+ } +
- - + - + - - + + diff --git a/Sevomin.WebFrontend/Views/Shared/Navbar.cshtml b/Sevomin.WebFrontend/Views/Shared/Navbar.cshtml index 098f594..ea82f42 100644 --- a/Sevomin.WebFrontend/Views/Shared/Navbar.cshtml +++ b/Sevomin.WebFrontend/Views/Shared/Navbar.cshtml @@ -17,7 +17,7 @@
  • @(User.IsInRole("Dovomin") ? "آگهی های استخدام" : "خانه")
  • @if (!Request.IsAuthenticated) { -
  • آگهی‌های استخدام
  • +
  • آگهی‌های استخدام
  • ورود به سایت
  • } else diff --git a/Sevomin.WebFrontend/Views/Shared/SocialMetaTags.cshtml b/Sevomin.WebFrontend/Views/Shared/SocialMetaTags.cshtml index 0428348..df653f0 100644 --- a/Sevomin.WebFrontend/Views/Shared/SocialMetaTags.cshtml +++ b/Sevomin.WebFrontend/Views/Shared/SocialMetaTags.cshtml @@ -1,14 +1,14 @@  - + - + @* @@ -26,8 +26,8 @@ - - + + @* diff --git a/Sevomin.WebFrontend/Web.config b/Sevomin.WebFrontend/Web.config index e80de08..781808e 100644 --- a/Sevomin.WebFrontend/Web.config +++ b/Sevomin.WebFrontend/Web.config @@ -15,7 +15,7 @@ - +