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

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 System;
  2. using System.ComponentModel.DataAnnotations;
  3. using System.ComponentModel.DataAnnotations.Schema;
  4. using System.Linq;
  5. namespace Sevomin.Models
  6. {
  7. public class DovominJob
  8. {
  9. [Key]
  10. public long Id { get; set; }
  11. [Index("IX_DovominJobUniqueIndex", Order = 1, IsUnique = true)]
  12. [Required]
  13. [StringLength(128)]
  14. public string DovominId { get; set; }
  15. [Index]
  16. [Index("IX_DovominJobUniqueIndex", Order = 2, IsUnique = true)]
  17. [Required]
  18. public long JobId { get; set; }
  19. [Required]
  20. public DateTime ApplyDate { get; set; }
  21. public string CoverLetter { get; set; }
  22. public decimal Affinity { get; set; }
  23. public bool MinimumRequirement { get; set; }
  24. public DateTime? AvalinSeen { get; set; }
  25. public string AvalinComment { get; set; }
  26. public bool AvalinDelete { get; set; }
  27. public virtual Dovomin Dovomin { get; set; }
  28. public virtual Job Job { get; set; }
  29. public DovominJob(Dovomin dovomin, Job job)
  30. {
  31. this.Dovomin = dovomin;
  32. this.Job = job;
  33. CalculateAffinity();
  34. }
  35. public DovominJob()
  36. {
  37. }
  38. public void CalculateAffinity()
  39. {
  40. if (Dovomin == null || Job == null)
  41. return;
  42. MinimumRequirement = true;
  43. decimal sum = 0;
  44. decimal count = 0;
  45. Affinity = 0;
  46. foreach (var jp in
  47. Job.JobParameters.Where(x=>x.Moscow != 0 && !string.IsNullOrWhiteSpace(x.StringValue) ))
  48. {
  49. count++;
  50. DovominParameter dp = Dovomin.DovominParameters.SingleOrDefault(x=>x.ParameterId == jp.ParameterId);
  51. if (dp == null)
  52. continue;
  53. if (jp.Moscow == 4)
  54. {
  55. if ((jp.StringValue != dp.StringValue && jp.NumericValue == 0)
  56. || (jp.NumericValue > 0 && jp.NumericValue > dp.NumericValue))
  57. {
  58. MinimumRequirement = false;
  59. }
  60. }
  61. decimal? dpv = dp.NumericValue;
  62. decimal? jpv = jp.NumericValue;
  63. decimal m = jp.Moscow / 4;
  64. if (jpv == null)
  65. {
  66. if (jp.StringValue == dp.StringValue)
  67. sum += m;
  68. continue;
  69. }
  70. if (dpv == null)
  71. continue;
  72. if (jpv <= dpv)
  73. sum += m;
  74. else
  75. sum += m * ((jpv.Value - dpv.Value) / jpv.Value);
  76. }
  77. this.Affinity = sum / count;
  78. }
  79. }
  80. }