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.
 
 
 
 

96 lines
2.8 KiB

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;
Affinity = 0;
foreach (var jp in
Job.JobParameters.Where(x=>x.Moscow != 0 && !string.IsNullOrWhiteSpace(x.StringValue) ))
{
count++;
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;
decimal m = jp.Moscow / 4;
if (jpv == null)
{
if (jp.StringValue == dp.StringValue)
sum += m;
continue;
}
if (dpv == null)
continue;
if (jpv <= dpv)
sum += m;
else
sum += m * ((jpv.Value - dpv.Value) / jpv.Value);
}
this.Affinity = sum / count;
}
}
}