M module-apps/application-calendar/data/dateCommon.hpp => module-apps/application-calendar/data/dateCommon.hpp +23 -5
@@ 133,15 133,14 @@ inline uint32_t TimePointToMinutes(const calendar::TimePoint &tp)
inline calendar::TimePoint getFirstWeekDay(const calendar::TimePoint &tp)
{
- date::year_month_day yearMonthDay = date::year_month_day{date::floor<date::days>(tp)};
- auto hourV = TimePointToHour24H(tp);
- auto minuteV = TimePointToMinutes(tp);
+ auto time_of_day = TimePointToHourMinSec(tp);
+ auto yearMonthDay = date::year_month_day{date::floor<date::days>(tp)};
while (date::weekday{yearMonthDay} != date::mon) {
auto decrementedDay = --yearMonthDay.day();
yearMonthDay = yearMonthDay.year() / yearMonthDay.month() / decrementedDay;
}
auto finalDate = date::sys_days{yearMonthDay.year() / yearMonthDay.month() / yearMonthDay.day()};
- auto finalDateTime = finalDate + std::chrono::hours(hourV) + std::chrono::minutes(minuteV);
+ auto finalDateTime = finalDate + time_of_day.hours() + time_of_day.minutes();
return finalDateTime;
}
@@ 173,7 172,26 @@ inline std::string TimePointToString(const calendar::TimePoint &tp, date::months
timePoint = date::sys_days{yearMonthDay.year() / yearMonthDay.month() / yearMonthDay.day()};
}
}
- return date::format("%F %T", std::chrono::time_point_cast<std::chrono::seconds>(timePoint));
+
+ auto time_of_day = TimePointToHourMinSec(tp);
+ return date::format(
+ "%F %T",
+ std::chrono::time_point_cast<std::chrono::seconds>(timePoint + time_of_day.hours() + time_of_day.minutes()));
+}
+
+inline std::string TimePointToString(const calendar::TimePoint &tp, date::years years)
+{
+ auto yearMonthDay = date::year_month_day{date::floor<date::days>(tp)};
+ auto yearMonthDayLast = (yearMonthDay.year() + date::years(years)) / yearMonthDay.month() / date::last;
+
+ calendar::TimePoint timePoint =
+ date::sys_days{yearMonthDayLast.year() / yearMonthDayLast.month() /
+ ((yearMonthDayLast.day() == yearMonthDay.day()) ? yearMonthDayLast.day() : yearMonthDay.day())};
+
+ auto time_of_day = TimePointToHourMinSec(tp);
+ return date::format(
+ "%F %T",
+ std::chrono::time_point_cast<std::chrono::seconds>(timePoint + time_of_day.hours() + time_of_day.minutes()));
}
inline std::string TimePointToLocalizedDateString(const calendar::TimePoint &tp, const std::string format = "")
M module-db/Tables/EventsTable.cpp => module-db/Tables/EventsTable.cpp +8 -8
@@ 422,8 422,8 @@ bool EventsTable::addYear(EventsTableRow entry)
entry.provider_iCalUid.c_str(),
entry.UID.c_str(),
entry.title.c_str(),
- TimePointToString(entry.date_from + date::years{1}).c_str(),
- TimePointToString(entry.date_till + date::years{1}).c_str(),
+ TimePointToString(entry.date_from, date::years{1}).c_str(),
+ TimePointToString(entry.date_till, date::years{1}).c_str(),
entry.reminder,
entry.repeat,
TimePointToString(entry.reminder_fired).c_str(),
@@ 432,8 432,8 @@ bool EventsTable::addYear(EventsTableRow entry)
entry.provider_iCalUid.c_str(),
entry.UID.c_str(),
entry.title.c_str(),
- TimePointToString(entry.date_from + date::years{2}).c_str(),
- TimePointToString(entry.date_till + date::years{2}).c_str(),
+ TimePointToString(entry.date_from, date::years{2}).c_str(),
+ TimePointToString(entry.date_till, date::years{2}).c_str(),
entry.reminder,
entry.repeat,
TimePointToString(entry.reminder_fired).c_str(),
@@ 442,8 442,8 @@ bool EventsTable::addYear(EventsTableRow entry)
entry.provider_iCalUid.c_str(),
entry.UID.c_str(),
entry.title.c_str(),
- TimePointToString(entry.date_from + date::years{3}).c_str(),
- TimePointToString(entry.date_till + date::years{3}).c_str(),
+ TimePointToString(entry.date_from, date::years{3}).c_str(),
+ TimePointToString(entry.date_till, date::years{3}).c_str(),
entry.reminder,
entry.repeat,
TimePointToString(entry.reminder_fired).c_str(),
@@ 452,8 452,8 @@ bool EventsTable::addYear(EventsTableRow entry)
entry.provider_iCalUid.c_str(),
entry.UID.c_str(),
entry.title.c_str(),
- TimePointToString(entry.date_from + date::years{4}).c_str(),
- TimePointToString(entry.date_till + date::years{4}).c_str(),
+ TimePointToString(entry.date_from, date::years{4}).c_str(),
+ TimePointToString(entry.date_till, date::years{4}).c_str(),
entry.reminder,
entry.repeat,
TimePointToString(entry.reminder_fired).c_str(),
M module-db/tests/EventsTable_tests.cpp => module-db/tests/EventsTable_tests.cpp +21 -21
@@ 165,11 165,11 @@ TEST_CASE("Events Table tests")
}
CHECK(eventsTbl.count() == 0);
- uint32_t numberOfEvents = 7;
+ uint32_t numberOfEvents = 7;
calendar::TimePoint startDate = TimePointFromString("2019-10-20 14:30:00");
calendar::TimePoint endDate = TimePointFromString("2019-10-20 15:30:00");
- testRow1.date_from = startDate;
- testRow1.date_till = endDate;
+ testRow1.date_from = startDate;
+ testRow1.date_till = endDate;
CHECK(eventsTbl.addDaily(testRow1));
CHECK(eventsTbl.count() == numberOfEvents);
@@ 200,11 200,11 @@ TEST_CASE("Events Table tests")
}
CHECK(eventsTbl.count() == 0);
- uint32_t numberOfEvents = 4;
+ uint32_t numberOfEvents = 4;
calendar::TimePoint startDate = TimePointFromString("2019-10-20 14:30:00");
calendar::TimePoint endDate = TimePointFromString("2019-10-20 15:30:00");
- testRow1.date_from = startDate;
- testRow1.date_till = endDate;
+ testRow1.date_from = startDate;
+ testRow1.date_till = endDate;
CHECK(eventsTbl.addWeekly(testRow1));
CHECK(eventsTbl.count() == numberOfEvents);
@@ 235,11 235,11 @@ TEST_CASE("Events Table tests")
}
CHECK(eventsTbl.count() == 0);
- uint32_t numberOfEvents = 4;
+ uint32_t numberOfEvents = 4;
calendar::TimePoint startDate = TimePointFromString("2019-10-20 14:30:00");
calendar::TimePoint endDate = TimePointFromString("2019-10-20 15:30:00");
- testRow1.date_from = startDate;
- testRow1.date_till = endDate;
+ testRow1.date_from = startDate;
+ testRow1.date_till = endDate;
CHECK(eventsTbl.addTwoWeeks(testRow1));
CHECK(eventsTbl.count() == numberOfEvents);
@@ 438,7 438,7 @@ TEST_CASE("Events Table tests")
{
uint32_t customRepeatOption =
static_cast<uint32_t>(weekDayOption::monday) + static_cast<uint32_t>(weekDayOption::wednesday);
- uint32_t numberOfEvents = 9;
+ uint32_t numberOfEvents = 9;
calendar::TimePoint originalStartDate = TimePointFromString("2020-12-10 14:30:00"); // thursday
calendar::TimePoint originalEndDate = TimePointFromString("2020-12-10 15:30:00"); // thursday
@@ 450,7 450,7 @@ TEST_CASE("Events Table tests")
uint32_t customRepeatOption =
static_cast<uint32_t>(weekDayOption::monday) + static_cast<uint32_t>(weekDayOption::wednesday) +
static_cast<uint32_t>(weekDayOption::tuesday) + static_cast<uint32_t>(weekDayOption::sunday);
- uint32_t numberOfEvents = 17;
+ uint32_t numberOfEvents = 17;
calendar::TimePoint originalStartDate = TimePointFromString("2020-12-10 14:30:00"); // thursday
calendar::TimePoint originalEndDate = TimePointFromString("2020-12-10 15:30:00"); // thursday
@@ 459,8 459,8 @@ TEST_CASE("Events Table tests")
SECTION("Repeat Saturdays (original thursday)")
{
- uint32_t customRepeatOption = static_cast<uint32_t>(weekDayOption::saturday);
- uint32_t numberOfEvents = 5;
+ uint32_t customRepeatOption = static_cast<uint32_t>(weekDayOption::saturday);
+ uint32_t numberOfEvents = 5;
calendar::TimePoint originalStartDate = TimePointFromString("2020-12-10 14:30:00"); // thursday
calendar::TimePoint originalEndDate = TimePointFromString("2020-12-10 15:30:00"); // thursday
@@ 518,8 518,8 @@ TEST_CASE("Events Table tests")
std::string newTitle = "Updated Title", newProviderID = "PurePhoneUpdated";
calendar::TimePoint newDateFrom = TimePointFromString("2020-10-20 15:00:00"),
newDateTill = TimePointFromString("2020-10-20 16:00:00");
- uint32_t newReminder = static_cast<uint32_t>(Reminder::one_week_before);
- uint32_t newRepeatOption = static_cast<uint32_t>(Repeat::biweekly);
+ uint32_t newReminder = static_cast<uint32_t>(Reminder::one_week_before);
+ uint32_t newRepeatOption = static_cast<uint32_t>(Repeat::biweekly);
/// check title and provider id update
auto entryToUpdate = eventsTbl.getById(testRow6.ID);
@@ 571,11 571,11 @@ TEST_CASE("Events Table tests")
CHECK(eventsTbl.count() == 6);
std::string newTitle = "Updated Title", newProviderType = "PurePhoneUpdate", newProviderID = "newID",
- newProvideriCalUid = "new iCalUid";
+ newProvideriCalUid = "new iCalUid";
calendar::TimePoint newDateFrom = TimePointFromString("2020-10-20 15:00:00"),
newDateTill = TimePointFromString("2020-10-20 16:00:00");
- uint32_t newReminder = static_cast<uint32_t>(Reminder::one_week_before);
- uint32_t newRepeatOption = static_cast<uint32_t>(Repeat::biweekly);
+ uint32_t newReminder = static_cast<uint32_t>(Reminder::one_week_before);
+ uint32_t newRepeatOption = static_cast<uint32_t>(Repeat::biweekly);
/// check title and provider id update
auto entryToUpdate = eventsTbl.getById(testRow6.ID);
@@ 629,11 629,11 @@ TEST_CASE("Events Table tests")
CHECK(eventsTbl.count() == 6);
std::string newTitle = "Updated Title", newProviderType = "PurePhoneUpdate", newProviderID = "newID",
- newProvideriCalUid = "new iCalUid";
+ newProvideriCalUid = "new iCalUid";
calendar::TimePoint newDateFrom = TimePointFromString("2020-10-20 15:00:00"),
newDateTill = TimePointFromString("2020-10-20 16:00:00");
- uint32_t newReminder = static_cast<uint32_t>(Reminder::one_week_before);
- uint32_t newRepeatOption = static_cast<uint32_t>(Repeat::biweekly);
+ uint32_t newReminder = static_cast<uint32_t>(Reminder::one_week_before);
+ uint32_t newRepeatOption = static_cast<uint32_t>(Repeat::biweekly);
/// check title and provider id update
auto entryToUpdate = eventsTbl.getByUID(testRow6.UID);