using System;
|
|
using System.ComponentModel.DataAnnotations;
|
|
using System.ComponentModel.DataAnnotations.Schema;
|
|
using System.Linq;
|
|
|
|
namespace Sevomin.Models
|
|
{
|
|
public class DovominJob
|
|
{
|
|
[Key]
|
|
public long Id { get; set; }
|
|
|
|
[Index("IX_DovominJobUniqueIndex", Order = 1, IsUnique = true)]
|
|
[Required]
|
|
[StringLength(128)]
|
|
public string DovominId { get; set; }
|
|
|
|
[Index]
|
|
[Index("IX_DovominJobUniqueIndex", Order = 2, IsUnique = true)]
|
|
[Required]
|
|
public long JobId { get; set; }
|
|
|
|
[Required]
|
|
public DateTime ApplyDate { get; set; }
|
|
|
|
public string CoverLetter { get; set; }
|
|
|
|
public decimal Affinity { get; set; }
|
|
|
|
public bool MinimumRequirement { get; set; }
|
|
|
|
public DateTime? AvalinSeen { get; set; }
|
|
|
|
public string AvalinComment { get; set; }
|
|
|
|
public bool AvalinDelete { get; set; }
|
|
|
|
public virtual Dovomin Dovomin { get; set; }
|
|
public virtual Job Job { get; set; }
|
|
|
|
public DovominJob(Dovomin dovomin, Job job)
|
|
{
|
|
this.Dovomin = dovomin;
|
|
this.Job = job;
|
|
CalculateAffinity();
|
|
}
|
|
|
|
public DovominJob()
|
|
{
|
|
}
|
|
|
|
public void CalculateAffinity()
|
|
{
|
|
if (Dovomin == null || Job == null)
|
|
return;
|
|
|
|
MinimumRequirement = true;
|
|
decimal sum = 0;
|
|
decimal count = 0;
|
|
decimal maxPoint = 0;
|
|
Affinity = 0;
|
|
foreach (var jp in
|
|
Job.JobParameters.Where(x=>x.Moscow != 0 && !string.IsNullOrWhiteSpace(x.StringValue) ))
|
|
{
|
|
count++;
|
|
decimal m = jp.Moscow - 1 ;
|
|
maxPoint += jp.Parameter.BasePoint * m;
|
|
DovominParameter dp = Dovomin.DovominParameters.SingleOrDefault(x=>x.ParameterId == jp.ParameterId);
|
|
if (dp == null)
|
|
continue;
|
|
if (jp.Moscow == 4)
|
|
{
|
|
if ((jp.StringValue != dp.StringValue && jp.NumericValue == 0)
|
|
|| (jp.NumericValue > 0 && jp.NumericValue > dp.NumericValue))
|
|
{
|
|
MinimumRequirement = false;
|
|
}
|
|
}
|
|
|
|
decimal? dpv = dp.NumericValue;
|
|
decimal? jpv = jp.NumericValue;
|
|
if (jpv == null)
|
|
{
|
|
if (jp.StringValue == dp.StringValue)
|
|
sum += m * jp.Parameter.BasePoint;
|
|
continue;
|
|
}
|
|
if (dpv == null)
|
|
continue;
|
|
|
|
if (jpv <= dpv)
|
|
sum += m * jp.Parameter.BasePoint;
|
|
|
|
//v2
|
|
//if (jpv <= dpv)
|
|
// sum += m;
|
|
//else
|
|
// sum += m * ((jpv.Value - dpv.Value) / (jpv.Value == 0 ? (decimal)0.000001 : jpv.Value));
|
|
}
|
|
if (maxPoint == 0)
|
|
this.Affinity = 100;
|
|
|
|
this.Affinity = Math.Round( sum / maxPoint, 2, MidpointRounding.ToEven) * 100;
|
|
}
|
|
}
|
|
}
|