Бизнес-логика ASP.NET MVC Custom Validation - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь реализовать некоторую пользовательскую проверку, но я борюсь с некоторой логикой.

Правило валидации - просто сотрудник с employeeID Не может запрашивать более одного отпуска в конкретном диапазоне дат.

Так, например, если у сотрудника с employeeID есть запрос на отпуск для StartDate '01 / 01/2019 'и FinsihDate '05 / 01/2019'

Тогдаони запрашивают еще один запрос для StartDate '03 / 01/2019 'и FinsihDate '04 / 01/2019'.

Тогда проверка справится с этим.

Я просто не уверен, как реализовать это с логической стороны, поскольку я не слишком знаком с c #

 using System;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
 using System.Linq;
 using System.Web;

namespace HolidayTracker.Models
{
public class ValidSimilarRequests : ValidationAttribute
{
    private LotusWorksEntities db = new LotusWorksEntities();
    protected override ValidationResult
            IsValid(object value, ValidationContext validationContext)
    {




        var model = (Models.HolidayRequestForm)validationContext.ObjectInstance;

        int empID = Convert.ToInt32(model.EmployeeID);

        DateTime _startdate = Convert.ToDateTime(model.StartDate);
        DateTime _finishdate = Convert.ToDateTime(model.FinishDate);

        var holidayexist = db.HolidayRequestForms.Any()

        if (holidayexist)
        {
            return new ValidationResult
                ("A holiday Request for this date range has already been requested");
        }


        else
        {
            return ValidationResult.Success;
        }


    }
}

}

Модель:

{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

public partial class HolidayRequestForm
{
    public int RequestID { get; set; }

    [ValidSimilarRequests(ErrorMessage =
        "A holiday Request for this date range has already been requested")]
    public int EmployeeID { get; set; }

     [ValidSameWeek(ErrorMessage =
        "Holiday Request Must be made on a weekly Period")]
    [DisplayFormat(DataFormatString = "{0:dd/MMM/yy}", ApplyFormatInEditMode = true)]
    public System.DateTime StartDate { get; set; }

    [ValidStartFinishDate(ErrorMessage =
        "Finish Date can not be Greater than Start date.")]
    [DisplayFormat(DataFormatString = "{0:dd/MMM/yy}", ApplyFormatInEditMode = true)]
    public System.DateTime FinishDate { get; set; }

    [Range(0.0001, int.MaxValue, ErrorMessage = "Hours Requested must be greater than zero. ")]
    public decimal HoursTaken { get; set; }
    public string Comments { get; set; }
    public int YearCreated { get; set; }
    public int MonthCreated { get; set; }
    public int DayCreated { get; set; }
    public Nullable<int> YearOfHoliday { get; set; }
    public Nullable<bool> Approved { get; set; }
    public string SubmittedBy { get; set; }
    public string ApprovedBy { get; set; }

    public virtual Employee Employee { get; set; }
}
}

1 Ответ

0 голосов
/ 01 марта 2019

Вы можете вставить его в свой Any.Примерно так:

var holidayexist = db.HolidayRequestForms.Any(x=>x.EmpID==empID && x.Startdate>_startdate && x.Enddate < _enddate));

Конечно, я не знаю точно, как создается ваш объект HolidayRequestForm, надеюсь, вы понимаете, о чем я.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...