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; } } }