// #pragma once #ifndef TARIFF_UTILS_H_INCLUDED #define TARIFF_UTILS_H_INCLUDED #include "tariff_day_of_week.h" #include "tariff_cfg.h" #include "tariff_time_range.h" #include "active_time_range.h" #include <stdio.h> #include <cstring> #include <ctime> #include <stddef.h> #include <locale.h> #include <iostream> #include <math.h> /// <summary> /// Definition of TariffUtilities class /// </summary> class TariffUtils { public: /// <summary> /// Validate parking ticket /// </summary> /// <param name="initial"></param> /// <param name="durationMin"></param> /// <param name="time_range"></param> /// <param name="isSpecialDay"></param> /// <param name="spec_day_id"></param> /// <returns></returns> static bool ValidateParkingTicket(TariffConfiguration const *tariff_cfg, time_t initial, int durationMin, double price, TariffTimeRange time_range, bool isSpecialDay, int spec_day_id); /// <summary> /// Check if time is in range between start and end of active payment hours /// </summary> /// <param name="tariff_cfg">Tariff configuration</param> /// <param name="datetimeStr">Current datetime string</param> /// <param name="isSpecialDay">Special day flag</param> /// <param name="spec_day_id">Special day ID</param> /// <returns>Returns if parking time range is active</returns> static ActiveTimeRange isParkingTimeRangeActive(TariffConfiguration *tariff_cfg, std::string datetimeStr, bool isSpecialDay, int spec_day_id); /// <summary> /// Get day of week from current date (Zeller's Algorithm), /// starting day is Sunday /// </summary> /// <param name="date"></param> /// <returns></returns> static DayOfWeek GetDayOfWeek(struct tm const *t); /// <summary> /// Identifies special day (e.g. Christmas) /// </summary> /// <param name="tariff_cfg">Pointer to tariff configuration data</param> /// <param name="date">Date to be validated</param> /// <param name="date">Reference to special day ID</param> /// <returns>Returns if the date is a special day</returns> static bool IsSpecialDay(TariffConfiguration const *tariff_cfg, const char *dateTimeStr, int& specialDayId); static bool PriceForSpecialDay(TariffConfiguration const* tariff_cfg, int specialDayId, double *price); /// <summary> /// Date and time parse helper function /// </summary> /// <returns>Returns time (tm) structure</returns> static bool DateTimeToStructTm(const char* dateTimeStr, struct tm *t); /// <summary> /// Date parse helper function /// </summary> /// <returns>Returns time (tm) structure</returns> static bool DateToStructTm(char const* dateStr, struct tm *t); /// <summary> /// Time parse helper function /// </summary> /// <returns>Returns time (tm) structure</returns> static bool TimeToStructTm(const char* timeStr, struct tm *t); /// <summary> /// Get current local time /// </summary> /// <returns>Returns time_t structure</returns> static time_t GetCurrentLocalTime(); }; #endif // TARIFF_UTILS_H_INCLUDED