DayPilot SQL - копирование встреч, у которых нет даты

В настоящее время у меня есть мастер-рота, которая хранит встречи вместе с ВРЕМЯ и ДЕНЬ, но не ДАТА. База данных SQL Server выглядит так, как показано ниже для основных встреч. Она создается с помощью календарного элемента управления DAYPILOT.

введите описание изображения здесь

введите описание изображения здесь Как вы можете видеть, хранится время, но не дата, а день. EG День 0 - воскресенье, День 1 - понедельник и т. Д.

Я хотел бы добавить кнопку в пользовательский интерфейс, которая будет копировать встречи из главной роты в прямую роту с учетом ДАТА

Например, назначение из основного ротации в День 1 (понедельник) должно быть вставлено в таблицу ротации LIVE, но при добавлении в ДАТУ текущей недели из календарного элемента управления Daypilot, например, начало Назначения в таблице LIVE ROTA будет 2016-01-16 09:30. Это должно было бы проверить текущую дату недели в календаре дневного пилота и затем вставить в таблицу LIVE.

Это возможно? Как я могу проверить текущую ДАТУ и убедиться, что ДАТА соответствует правильному дню, используя поле дня из БД? EG День 0, День 1 и т.д..?

Текущий SQL для создания главной роты

public void CreateAssignment(DateTime start, DateTime end, int location, int     week, string person, string note, DayOfWeek day)
    {
        using (DbConnection con = CreateConnection())
        {
            con.Open();
            //string id = "";

            var cmd = CreateCommand("insert into [master_rota] ([AssignmentStart], [AssignmentEnd], [LocationId], [PersonId], [AssignmentNote], week, day) values (@start, @end, @location, @person, @note, @Week, @day)", con);
            AddParameterWithValue(cmd, "start", start.TimeOfDay);
            AddParameterWithValue(cmd, "end", end.TimeOfDay);
            AddParameterWithValue(cmd, "location", location);
            AddParameterWithValue(cmd, "week", week);
            AddParameterWithValue(cmd, "person", person);
            AddParameterWithValue(cmd, "note", note);
            if (day == DayOfWeek.Saturday)
            {
                AddParameterWithValue(cmd, "day", day - 6);
            }
            else
            AddParameterWithValue(cmd, "day", day + 1);

            cmd.ExecuteScalar();

        }
    }

1 ответ

Решение

Вот только SQL-решение для получения начальной и конечной даты / времени для указанного дня недели в текущей неделе:

SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) + day 
       - DATEPART(dw, GETDATE()) + [AssignmentStart] AS [StartInCurrentWeek],
       DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) + day
       - DATEPART(dw, GETDATE()) + [AssignmentEnd] AS [EndInCurrentWeek]
FROM [master_rota];

Демо здесь: http://rextester.com/URJP8148

(Не уверен, что это именно то, что вы хотите, но это начало, пожалуйста, дайте мне знать, если оно не соответствует требованиям...)

Другие вопросы по тегам