start repository for mobilisis tariff-calculation
This commit is contained in:
		
							
								
								
									
										1
									
								
								library/include/mobilisis/.gdb_history
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								library/include/mobilisis/.gdb_history
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| p 500.0/600*45 | ||||
							
								
								
									
										1
									
								
								library/include/mobilisis/Header.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								library/include/mobilisis/Header.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| #pragma once | ||||
							
								
								
									
										9
									
								
								library/include/mobilisis/active_time_range.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								library/include/mobilisis/active_time_range.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| #pragma once | ||||
| #include "tariff_time_range.h" | ||||
|  | ||||
| struct ActiveTimeRange { | ||||
| 	bool isActive; | ||||
|     TariffTimeRange timeRange; | ||||
|     ActiveTimeRange() : isActive(false) { | ||||
|     } | ||||
| }; | ||||
							
								
								
									
										35
									
								
								library/include/mobilisis/calculate_price.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								library/include/mobilisis/calculate_price.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | ||||
| #ifndef CALCULATE_PRICE_H | ||||
| #define CALCULATE_PRICE_H | ||||
|  | ||||
| #include <time.h> | ||||
| #include <inttypes.h> | ||||
|  | ||||
| class Configuration; | ||||
|  | ||||
| typedef Configuration parking_tariff_t; | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| struct price_t { | ||||
|     uint32_t units; | ||||
|     double netto; | ||||
|     double brutto; | ||||
|     double vat_percentage; | ||||
|     double vat; | ||||
| }; | ||||
|  | ||||
| bool init_tariff(parking_tariff_t **tariff, char const *config_file); | ||||
| void free_tariff(parking_tariff_t *tariff); | ||||
| int get_zone_nr(); | ||||
|  | ||||
| bool compute_price_for_parking_ticket(parking_tariff_t *tariff, | ||||
|                                       time_t start_parking_time, | ||||
|                                       time_t end_parking_time, | ||||
|                                       struct price_t *price); | ||||
| #ifdef __cplusplus | ||||
| } // extern "C" | ||||
| #endif | ||||
|  | ||||
| #endif // CALCULATE_PRICE_H | ||||
							
								
								
									
										29
									
								
								library/include/mobilisis/calculator_functions.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								library/include/mobilisis/calculator_functions.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| #pragma once | ||||
| #include <iostream> | ||||
| #include "configuration.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| class Calculator | ||||
| { | ||||
| public: | ||||
| 	/// <summary> | ||||
| 	/// Gets duration in seconds from cost | ||||
| 	/// </summary> | ||||
| 	/// <param name="tariff_cfg">Pointer to configuration</param> | ||||
| 	/// <param name="vehicle_type">Type of vehicle</param> | ||||
| 	/// <param name="start_datetime">Date/time of payment to be conducted in ISO8601 format (e.g. 2022-12-25T08:00:00Z)</param> | ||||
| 	/// <param name="price"></param> | ||||
| 	/// <returns>Returns duration in seconds (data type: double)</returns> | ||||
| 	std::string GetDurationFromCost(Configuration* cfg, uint8_t vehicle_type, char const* start_datetime, double price, bool nextDay = false, bool prepaid = false); | ||||
|  | ||||
| 	/// <summary> | ||||
| 	///  Gets cost from duration in seconds | ||||
| 	/// </summary> | ||||
| 	/// <param name="tariff_cfg">Pointer to configuration</param> | ||||
| 	/// <param name="vehicle_type">Type of vehicle</param> | ||||
| 	/// <param name="start_datetime">Date/time of payment to be conducted in ISO8601 format (e.g. 2022-12-25T08:00:00Z) </param> | ||||
| 	/// <param name="durationMin">Duration of parking in minutes</param> | ||||
| 	/// <returns>Returns cost (data type: double)</returns> | ||||
| 	double GetCostFromDuration(Configuration* cfg, uint8_t vehicle_type, char const* start_datetime, double durationMin, bool nextDay = false, bool prepaid = false); | ||||
| }; | ||||
							
								
								
									
										58
									
								
								library/include/mobilisis/configuration.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								library/include/mobilisis/configuration.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,58 @@ | ||||
| #pragma once | ||||
| #include <map> | ||||
| #include <variant> | ||||
| #include <cstddef> | ||||
| #include <stdio.h> | ||||
| #include <algorithm> | ||||
| #include <rapidjson/rapidjson.h> | ||||
| #include <rapidjson/document.h> | ||||
| #include <rapidjson/error/en.h> | ||||
| #include "member_type.h" | ||||
| #include "currency.h" | ||||
| #include "duration.h" | ||||
| #include "payment_mtd.h" | ||||
| #include "payment_opt.h" | ||||
| #include "spec_days.h" | ||||
| #include "payment_opt.h" | ||||
| #include "weekdays.h" | ||||
| #include "weekdays_worktime.h" | ||||
| #include "spec_days_worktime.h" | ||||
| #include "member_type.h" | ||||
| #include "period_year.h" | ||||
| #include "payment_rate.h" | ||||
|  | ||||
| using namespace std; | ||||
| using namespace rapidjson; | ||||
|  | ||||
| class Configuration | ||||
| { | ||||
| public: | ||||
|  | ||||
| 	ATBCurrency Currency; | ||||
| 	ATBDuration duration; | ||||
|  | ||||
| 	multimap<int, ATBDuration> Duration; | ||||
| 	multimap<int, ATBPaymentMethod> PaymentMethod; | ||||
| 	multimap<int, ATBPaymentRate> PaymentRate; | ||||
| 	multimap<int, ATBSpecialDaysWorktime> SpecialDaysWorktime; | ||||
| 	multimap<int, ATBSpecialDays> SpecialDays; | ||||
| 	multimap<int, ATBWeekDays> WeekDays; | ||||
| 	multimap<int, ATBPeriodYear> YearPeriod; | ||||
| 	multimap<int, ATBWeekDaysWorktime> WeekDaysWorktime; | ||||
| 	multimap<int, ATBPaymentOption> PaymentOption; | ||||
|  | ||||
| 	/// <summary> | ||||
| 	/// Parse JSON string | ||||
| 	/// </summary> | ||||
| 	/// <param name="json"></param> | ||||
| 	/// <returns>Returns operation status bool (OK | FAIL) </returns> | ||||
| 	bool ParseJson(Configuration* cfg, const char* json); | ||||
|  | ||||
| private: | ||||
| 	/// <summary> | ||||
| 	/// Identify type of JSON member | ||||
| 	/// </summary> | ||||
| 	/// <param name="member_name"></param> | ||||
| 	/// <returns></returns> | ||||
| 	MemberType IdentifyJsonMember(const char* member_name); | ||||
| }; | ||||
							
								
								
									
										12
									
								
								library/include/mobilisis/currency.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								library/include/mobilisis/currency.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| #pragma once | ||||
| #include <string> | ||||
|  | ||||
| class ATBCurrency | ||||
| { | ||||
| public: | ||||
| 	int pcu_id; | ||||
| 	std::string pcu_sign; | ||||
| 	std::string pcu_major; | ||||
| 	std::string pcu_minor; | ||||
| 	bool pcu_active; | ||||
| }; | ||||
							
								
								
									
										13
									
								
								library/include/mobilisis/day_of_week.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								library/include/mobilisis/day_of_week.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| #pragma once | ||||
|  | ||||
| enum DayOfWeek | ||||
| { | ||||
| 	Saturday = 0x06, | ||||
| 	Sunday = 0x01, | ||||
| 	Monday = 0x02, | ||||
| 	Tuesday = 0x02, | ||||
| 	Wednesday = 0x03, | ||||
| 	Thursday = 0x04, | ||||
| 	Friday = 0x05, | ||||
| 	UndefinedDay = 0xFF | ||||
| }; | ||||
							
								
								
									
										10
									
								
								library/include/mobilisis/duration.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								library/include/mobilisis/duration.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| #pragma once | ||||
| #include <string> | ||||
|  | ||||
| class ATBDuration | ||||
| { | ||||
| public: | ||||
| 	int pun_id; | ||||
| 	std::string pun_label; | ||||
| 	int pun_duration; | ||||
| }; | ||||
							
								
								
									
										0
									
								
								library/include/mobilisis/log.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								library/include/mobilisis/log.h
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										16
									
								
								library/include/mobilisis/member_type.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								library/include/mobilisis/member_type.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| #pragma once | ||||
|  | ||||
| enum MemberType | ||||
| { | ||||
| 	UnknownType = 0xFF, | ||||
| 	CurrencyType = 0x00, | ||||
| 	PaymentMethodType = 0x01, | ||||
| 	PaymentRateType = 0x20, | ||||
| 	PaymentOptionType = 0x03, | ||||
| 	DurationType = 0x04, | ||||
| 	WeekDaysType = 0x05, | ||||
| 	WeekDaysWorkTimeType = 0x06, | ||||
| 	SpecialDaysWorktimeType = 0x07, | ||||
| 	SpecialDaysType = 0x08, | ||||
| 	PeriodYearType = 0x09 | ||||
| }; | ||||
							
								
								
									
										10
									
								
								library/include/mobilisis/payment_method.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								library/include/mobilisis/payment_method.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| #pragma once | ||||
|  | ||||
| enum PaymentMethod | ||||
| { | ||||
| 	Undefined = 0xFF, | ||||
| 	Progressive = 0x01, | ||||
| 	Degressive = 0x02, | ||||
| 	Linear = 0x03, | ||||
| 	Steps = 0x04 | ||||
| }; | ||||
							
								
								
									
										9
									
								
								library/include/mobilisis/payment_mtd.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								library/include/mobilisis/payment_mtd.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| #pragma once | ||||
| #include <string> | ||||
|  | ||||
| class ATBPaymentMethod | ||||
| { | ||||
| public: | ||||
| 	int pme_id; | ||||
| 	std::string pme_label; | ||||
| }; | ||||
							
								
								
									
										17
									
								
								library/include/mobilisis/payment_opt.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								library/include/mobilisis/payment_opt.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| #pragma once | ||||
| #include <string> | ||||
|  | ||||
| class ATBPaymentOption | ||||
| { | ||||
| public: | ||||
| 	int pop_id; | ||||
| 	std::string pop_label; | ||||
| 	int pop_payment_method_id; | ||||
| 	std::string pop_day_end_time; | ||||
| 	std::string pop_day_night_end_time; | ||||
| 	double pop_price_night; | ||||
| 	double pop_min_time; | ||||
| 	double pop_max_time; | ||||
| 	double pop_min_price; | ||||
| 	int pop_carry_over; | ||||
| }; | ||||
							
								
								
									
										9
									
								
								library/include/mobilisis/payment_option.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								library/include/mobilisis/payment_option.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| #pragma once | ||||
|  | ||||
| // Payment option is related to payment_method_id (e.g. option 1 = linear) | ||||
| enum PaymentOption | ||||
| { | ||||
| 	Option1 = 0x03, | ||||
| 	Option2 = 0x02, | ||||
| 	Option3 = 0x01 | ||||
| }; | ||||
							
								
								
									
										9
									
								
								library/include/mobilisis/payment_rate.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								library/include/mobilisis/payment_rate.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| #pragma once | ||||
|  | ||||
| class ATBPaymentRate | ||||
| { | ||||
| public: | ||||
| 	int pra_payment_option_id; | ||||
| 	int pra_payment_unit_id; | ||||
| 	double pra_price; | ||||
| }; | ||||
							
								
								
									
										13
									
								
								library/include/mobilisis/period_year.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								library/include/mobilisis/period_year.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| #pragma once | ||||
| #include <string> | ||||
|  | ||||
| class ATBPeriodYear | ||||
| { | ||||
| public: | ||||
| 	int pye_id; | ||||
| 	std::string pye_label; | ||||
| 	int pye_start_month; | ||||
| 	int pye_start_day; | ||||
| 	int pye_end_month; | ||||
| 	int pye_end_day; | ||||
| }; | ||||
							
								
								
									
										13
									
								
								library/include/mobilisis/spec_days.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								library/include/mobilisis/spec_days.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| #pragma once | ||||
| #include <string> | ||||
|  | ||||
| class ATBSpecialDays | ||||
| { | ||||
| public: | ||||
| 	int ped_id; | ||||
| 	std::string ped_label; | ||||
| 	std::string ped_date_start; | ||||
| 	std::string ped_date_end; | ||||
| 	int ped_period_special_day_id; | ||||
| 	int ped_year; | ||||
| }; | ||||
							
								
								
									
										12
									
								
								library/include/mobilisis/spec_days_worktime.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								library/include/mobilisis/spec_days_worktime.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| #pragma once | ||||
| #include <string> | ||||
|  | ||||
| class ATBSpecialDaysWorktime | ||||
| { | ||||
| public: | ||||
| 	int pedwt_id; | ||||
| 	int pedwt_period_exc_day_id; | ||||
| 	std::string pedwt_time_from; | ||||
| 	std::string pedwt_time_to; | ||||
| 	double pedwt_price; | ||||
| }; | ||||
							
								
								
									
										34
									
								
								library/include/mobilisis/tariff_calc.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								library/include/mobilisis/tariff_calc.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| #pragma once | ||||
| #include <cstdint> | ||||
| #include "tariff_cfg.h" | ||||
| #include "tariff_utils.h" | ||||
| #include "tariff_payment_method.h" | ||||
| #include "tariff_vehicle_types.h" | ||||
| #include "tariff_time_range.h" | ||||
|  | ||||
| /// <summary> | ||||
| /// Definition of TariffCalculator class | ||||
| /// </summary> | ||||
| class TariffCalculator | ||||
| { | ||||
| public: | ||||
| 	/// <summary> | ||||
| 	/// Gets duration in seconds from cost | ||||
| 	/// </summary> | ||||
| 	/// <param name="tariff_cfg">Pointer to configuration</param> | ||||
| 	/// <param name="vehicle_type">Type of vehicle</param> | ||||
| 	/// <param name="start_datetime">Date/time of payment to be conducted in ISO8601 format (e.g. 2022-12-25T08:00:00Z)</param> | ||||
| 	/// <param name="price"></param> | ||||
| 	/// <returns>Returns duration in seconds (data type: double)</returns> | ||||
|     double GetDurationFromCost(TariffConfiguration* tariff_cfg, uint8_t vehicle_type, char const *start_datetime, double price); | ||||
|  | ||||
| 	/// <summary> | ||||
| 	///  Gets cost from duration in seconds | ||||
| 	/// </summary> | ||||
| 	/// <param name="tariff_cfg">Pointer to configuration</param> | ||||
| 	/// <param name="vehicle_type">Type of vehicle</param> | ||||
| 	/// <param name="start_datetime">Date/time of payment to be conducted in ISO8601 format (e.g. 2022-12-25T08:00:00Z) </param> | ||||
| 	/// <param name="durationMin">Duration of parking in minutes</param> | ||||
| 	/// <returns>Returns cost (data type: double)</returns> | ||||
|     double GetCostFromDuration(TariffConfiguration* tariff_cfg, uint8_t vehicle_type, char const *start_datetime, double durationMin); | ||||
| }; | ||||
							
								
								
									
										58
									
								
								library/include/mobilisis/tariff_cfg.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								library/include/mobilisis/tariff_cfg.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,58 @@ | ||||
| #pragma once | ||||
| #include <variant> | ||||
| #include <cstddef> | ||||
| #include <stdio.h> | ||||
| #include <unordered_map> | ||||
| #include <rapidjson/rapidjson.h> | ||||
| #include <rapidjson/document.h> | ||||
| #include <rapidjson/error/en.h> | ||||
| #include <algorithm> | ||||
| #include "tariff_currency.h" | ||||
| #include "tariff_duration.h" | ||||
| #include "tariff_payment_mtd.h" | ||||
| #include "tariff_payment_opt.h" | ||||
| #include "tariff_spec_days.h" | ||||
| #include "tariff_payment_opt.h" | ||||
| #include "tariff_weekdays.h" | ||||
| #include "tariff_weekdays_worktime.h" | ||||
| #include "tariff_spec_days_worktime.h" | ||||
| #include "tariff_member_type.h" | ||||
| #include "tariff_period_year.h" | ||||
| #include "tariff_payment_rate.h" | ||||
| #include <vector> | ||||
|  | ||||
| using namespace std; | ||||
| using namespace rapidjson; | ||||
|  | ||||
| /// <summary> | ||||
| /// Tariff configuration class | ||||
| /// </summary> | ||||
| class TariffConfiguration | ||||
| { | ||||
| public: | ||||
| 	vector<TariffCurrency> Currency; | ||||
| 	vector<TariffDuration> Duration; | ||||
| 	vector<TariffPaymentMethod> PaymentMethod; | ||||
| 	vector<TariffPaymentRate> PaymentRate; | ||||
| 	vector<TariffSpecialDaysWorktime> SpecialDaysWorktime; | ||||
| 	vector<TariffSpecialDays> SpecialDays; | ||||
| 	vector<TariffWeekDays> WeekDays; | ||||
| 	vector<TariffPeriodYear> YearPeriod; | ||||
| 	vector<TariffWeekDaysWorktime> WeekDaysWorktime; | ||||
| 	vector<TariffPaymentOption> PaymentOption; | ||||
|  | ||||
| 	/// <summary> | ||||
| 	/// Parse JSON string | ||||
| 	/// </summary> | ||||
| 	/// <param name="json"></param> | ||||
| 	/// <returns>Returns operation status bool (OK | FAIL) </returns> | ||||
| 	bool ParseJson(TariffConfiguration* tariff_cfg, const char* json); | ||||
|  | ||||
| private: | ||||
| 	/// <summary> | ||||
| 	/// Identify type of JSON member | ||||
| 	/// </summary> | ||||
| 	/// <param name="member_name"></param> | ||||
| 	/// <returns></returns> | ||||
| 	MemberType IdentifyJsonMember(const char* member_name); | ||||
| }; | ||||
							
								
								
									
										18
									
								
								library/include/mobilisis/tariff_currency.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								library/include/mobilisis/tariff_currency.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| // #pragma once | ||||
| #ifndef TARIFF_CURRENCY_H_INCLUDED | ||||
| #define TARIFF_CURRENCY_H_INCLUDED | ||||
|  | ||||
| /// <summary> | ||||
| /// Currency data | ||||
| /// </summary> | ||||
| class TariffCurrency | ||||
| { | ||||
| public: | ||||
| 	int pcu_id; | ||||
| 	std::string pcu_sign; | ||||
| 	std::string pcu_major; | ||||
| 	std::string pcu_minor; | ||||
| 	bool pcu_active; | ||||
| }; | ||||
|  | ||||
| #endif // TARIFF_CURRENCY_H_INCLUDED | ||||
							
								
								
									
										19
									
								
								library/include/mobilisis/tariff_day_of_week.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								library/include/mobilisis/tariff_day_of_week.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| // #pragma once | ||||
| #ifndef TARIFF_DAY_OF_WEEK_H_INCLUDED | ||||
| #define TARIFF_DAY_OF_WEEK_H_INCLUDED | ||||
|  | ||||
| /// <summary> | ||||
| /// Day of week enumeration | ||||
|  | ||||
| enum DayOfWeek | ||||
| { | ||||
| 	Saturday = 0x00, | ||||
| 	Sunday = 0x01, | ||||
| 	Monday = 0x02, | ||||
| 	Tuesday = 0x03, | ||||
| 	Wednesday = 0x04, | ||||
| 	Thursday = 0x05, | ||||
| 	Friday = 0x06 | ||||
| }; | ||||
|  | ||||
| #endif // TARIFF_DAY_OF_WEEK_H_INCLUDED | ||||
							
								
								
									
										12
									
								
								library/include/mobilisis/tariff_duration.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								library/include/mobilisis/tariff_duration.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| // #pragma once | ||||
|  | ||||
| /// <summary> | ||||
| /// Duration data | ||||
| /// </summary> | ||||
| class TariffDuration | ||||
| { | ||||
| public: | ||||
| 	int pun_id; | ||||
| 	std::string pun_label; | ||||
| 	int pun_duration; | ||||
| }; | ||||
							
								
								
									
										78
									
								
								library/include/mobilisis/tariff_log.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								library/include/mobilisis/tariff_log.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,78 @@ | ||||
| #ifndef TARIFF_LOG_INCLUDED_H | ||||
| #define TARIFF_LOG_INCLUDED_H | ||||
|  | ||||
| #include <string> | ||||
| #include <iostream> | ||||
|  | ||||
| #define DBG_LEVEL_DEBUG     0 | ||||
| #define DBG_LEVEL_INFO      1 | ||||
| #define DBG_LEVEL_WARN      2 | ||||
| #define DBG_LEVEL_CRITICAL  3 | ||||
| #define DBG_LEVEL_ERROR     4 | ||||
| #define DBG_LEVEL_FATAL     5 | ||||
|  | ||||
| void setDebugLevel(int level); | ||||
| int getDebugLevel(); | ||||
|  | ||||
| static void print() { | ||||
|     std::cerr << "\n"; | ||||
|     if (getDebugLevel() == DBG_LEVEL_FATAL) { | ||||
|         exit(-1); | ||||
|     } | ||||
| } // termination version | ||||
|  | ||||
| template<typename Arg1, typename... Args> | ||||
| static void print(const Arg1& arg1, Args&&... args) { | ||||
|     std::cerr << arg1; | ||||
|     print(args...); | ||||
| } | ||||
|  | ||||
| template<typename Arg1, typename... Args> | ||||
| static void LOG_DEBUG(const Arg1& arg1, Args&&... args) { | ||||
|     if (getDebugLevel() <= DBG_LEVEL_DEBUG) { | ||||
|         std::cerr << "DEBUG " << arg1; | ||||
|         print(args...); | ||||
|     } | ||||
| } | ||||
|  | ||||
| template<typename Arg1, typename... Args> | ||||
| static void LOG_INFO(const Arg1& arg1, Args&&... args) { | ||||
|     if (getDebugLevel() <= DBG_LEVEL_INFO) { | ||||
|         std::cerr << "INFO " << arg1; | ||||
|         print(args...); | ||||
|     } | ||||
| } | ||||
|  | ||||
| template<typename Arg1, typename... Args> | ||||
| static void LOG_WARNING(const Arg1& arg1, const Args&&... args) { | ||||
|     if (getDebugLevel() <= DBG_LEVEL_WARN) { | ||||
|         std::cerr << "WARNING " << arg1; | ||||
|         print(args...); | ||||
|     } | ||||
| } | ||||
|  | ||||
| template<typename Arg1, typename... Args> | ||||
| static void LOG_CRITICAL(const Arg1& arg1, const Args&&... args) { | ||||
|     if (getDebugLevel() <= DBG_LEVEL_CRITICAL) { | ||||
|         std::cerr << "CRITICAL " << arg1; | ||||
|         print(args...); | ||||
|     } | ||||
| } | ||||
|  | ||||
| template<typename Arg1, typename... Args> | ||||
| static void LOG_ERROR(const Arg1& arg1, const Args&&... args) { | ||||
|     if (getDebugLevel() <= DBG_LEVEL_ERROR) { | ||||
|         std::cerr << "ERROR " << arg1; | ||||
|         print(args...); | ||||
|     } | ||||
| } | ||||
|  | ||||
| template<typename Arg1, typename... Args> | ||||
| static void LOG_FATAL(const Arg1& arg1, const Args&&... args) { | ||||
|     if (getDebugLevel() <= DBG_LEVEL_FATAL) { | ||||
|         std::cerr << "FATAL " << arg1; | ||||
|         print(args...); | ||||
|     } | ||||
| } | ||||
|  | ||||
| #endif //  TARIFF_LOG_INCLUDED_H | ||||
							
								
								
									
										19
									
								
								library/include/mobilisis/tariff_member_type.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								library/include/mobilisis/tariff_member_type.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| // #pragma once | ||||
|  | ||||
| /// <summary> | ||||
| /// JSON configuration member type enumeration | ||||
| /// </summary> | ||||
| enum MemberType | ||||
| { | ||||
| 	Unknown = 0xFF, | ||||
| 	Currency = 0x00, | ||||
| 	PaymentMethod = 0x01, | ||||
| 	PaymentRate = 0x20, | ||||
| 	PaymentOption = 0x03, | ||||
| 	Duration = 0x04, | ||||
| 	WeekDays = 0x05, | ||||
| 	WeekDaysWorkTime = 0x06, | ||||
| 	SpecialDaysWorktime = 0x07, | ||||
| 	SpecialDays = 0x08, | ||||
| 	PeriodYear = 0x09 | ||||
| }; | ||||
							
								
								
									
										13
									
								
								library/include/mobilisis/tariff_payment_method.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								library/include/mobilisis/tariff_payment_method.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| // #pragma once | ||||
|  | ||||
| /// <summary> | ||||
| /// Payment method (byte represents payment option id) | ||||
| /// </summary> | ||||
| enum PaymentMethod | ||||
| { | ||||
| 	Undefined = 0xFF, | ||||
| 	Progressive = 0x01, | ||||
| 	Degressive = 0x02, | ||||
| 	Linear = 0x03, | ||||
| 	Steps = 0x04 | ||||
| }; | ||||
							
								
								
									
										15
									
								
								library/include/mobilisis/tariff_payment_mtd.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								library/include/mobilisis/tariff_payment_mtd.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| // #pragma once | ||||
| #ifndef TARIFF_PAYMENT_MTH_H_INCLUDED | ||||
| #define TARIFF_PAYMENT_MTH_H_INCLUDED | ||||
|  | ||||
| /// <summary> | ||||
| /// Payment method data | ||||
| /// </summary> | ||||
| class TariffPaymentMethod | ||||
| { | ||||
| public: | ||||
| 	int pme_id; | ||||
| 	std::string pme_label; | ||||
| }; | ||||
|  | ||||
| #endif // TARIFF_PAYMENT_MTH_H_INCLUDED | ||||
							
								
								
									
										21
									
								
								library/include/mobilisis/tariff_payment_opt.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								library/include/mobilisis/tariff_payment_opt.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| //#pragma once | ||||
| #ifndef TARIFF_PAYMENT_OPT_H_INCLUDED | ||||
| #define TARIFF_PAYMENT_OPT_H_INCLUDED | ||||
|  | ||||
| #include <string> | ||||
|  | ||||
| /// <summary> | ||||
| /// Vehicly type data | ||||
| /// </summary> | ||||
| class TariffPaymentOption | ||||
| { | ||||
| public: | ||||
| 	int pop_id; | ||||
| 	std::string pop_label; | ||||
| 	int pop_payment_method_id; | ||||
| 	std::string pop_day_end_time; | ||||
| 	std::string pop_day_night_end_time; | ||||
| 	double pop_price_night; | ||||
| }; | ||||
|  | ||||
| #endif // TARIFF_PAYMENT_OPT_H_INCLUDED | ||||
							
								
								
									
										17
									
								
								library/include/mobilisis/tariff_payment_rate.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								library/include/mobilisis/tariff_payment_rate.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| // #pragma once | ||||
| #ifndef TARIFF_PAYMENT_RATE_H_INCLUDED | ||||
| #define TARIFF_PAYMENT_RATE_H_INCLUDED | ||||
|  | ||||
| /// <summary> | ||||
| /// Payment option data | ||||
| /// </summary> | ||||
| // class TariffPaymentRate | ||||
| struct TariffPaymentRate | ||||
| { | ||||
| // public: | ||||
| 	int pra_payment_option_id; | ||||
| 	int pra_payment_unit_id; | ||||
| 	double pra_price; | ||||
| }; | ||||
|  | ||||
| #endif // TARIFF_PAYMENT_RATE_H_INCLUDED | ||||
							
								
								
									
										15
									
								
								library/include/mobilisis/tariff_period_year.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								library/include/mobilisis/tariff_period_year.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| // #pragma once | ||||
|  | ||||
| /// <summary> | ||||
| /// Year period definition | ||||
| /// </summary> | ||||
| class TariffPeriodYear | ||||
| { | ||||
| public: | ||||
| 	int pye_id; | ||||
| 	std::string pye_label; | ||||
| 	int pye_start_month; | ||||
| 	int pye_start_day; | ||||
| 	int pye_end_month; | ||||
| 	int pye_end_day; | ||||
| }; | ||||
							
								
								
									
										14
									
								
								library/include/mobilisis/tariff_spec_days.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								library/include/mobilisis/tariff_spec_days.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| // #pragma once | ||||
|  | ||||
| /// <summary> | ||||
| /// Special days data | ||||
| /// </summary> | ||||
| class TariffSpecialDays | ||||
| { | ||||
| public: | ||||
| 	int ped_id; | ||||
| 	std::string ped_label; | ||||
| 	std::string ped_date_start; | ||||
| 	std::string ped_date_end; | ||||
| 	int ped_period_special_day_id; | ||||
| }; | ||||
							
								
								
									
										14
									
								
								library/include/mobilisis/tariff_spec_days_worktime.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								library/include/mobilisis/tariff_spec_days_worktime.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| // #pragma once | ||||
|  | ||||
| /// <summary> | ||||
| /// Range data | ||||
| /// </summary> | ||||
| class TariffSpecialDaysWorktime | ||||
| { | ||||
| public: | ||||
| 	int pedwt_id; | ||||
| 	int pedwt_period_exc_day_id; | ||||
| 	std::string pedwt_time_from; | ||||
| 	std::string pedwt_time_to; | ||||
| 	double pedwt_price; | ||||
| }; | ||||
							
								
								
									
										17
									
								
								library/include/mobilisis/tariff_time_range.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								library/include/mobilisis/tariff_time_range.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| // #pragma once | ||||
| #ifndef TARIFF_TIME_RANGE_H_INCLUDED | ||||
| #define TARIFF_TIME_RANGE_H_INCLUDED | ||||
|  | ||||
| #include <ctime> | ||||
|  | ||||
| /// <summary> | ||||
| /// Time range definition | ||||
| /// </summary> | ||||
| class TariffTimeRange { | ||||
| public: | ||||
| 	time_t time_from; | ||||
|     time_t time_to; | ||||
|     TariffTimeRange() : time_from(0), time_to(0) {} | ||||
| }; | ||||
|  | ||||
| #endif // TARIFF_TIME_RANGE_H_INCLUDED | ||||
							
								
								
									
										95
									
								
								library/include/mobilisis/tariff_utils.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								library/include/mobilisis/tariff_utils.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,95 @@ | ||||
| // #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 | ||||
							
								
								
									
										11
									
								
								library/include/mobilisis/tariff_vehicle_types.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								library/include/mobilisis/tariff_vehicle_types.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| // #pragma once | ||||
|  | ||||
| /// <summary> | ||||
| /// Vehicle type enumeration (byte represents payment method id) | ||||
| /// </summary> | ||||
| enum PaymentOption | ||||
| { | ||||
| 	Car = 0x03, | ||||
| 	HeavyVehicle = 0x02, | ||||
| 	Daily = 0x01 | ||||
| }; | ||||
							
								
								
									
										12
									
								
								library/include/mobilisis/tariff_weekdays.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								library/include/mobilisis/tariff_weekdays.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| // #pragma once | ||||
|  | ||||
| /// <summary> | ||||
| /// Weekdays data | ||||
| /// </summary> | ||||
| class TariffWeekDays | ||||
| { | ||||
| public: | ||||
| 	int pdiw_id; | ||||
| 	std::string pdiw_label; | ||||
| 	int pdiw_index; | ||||
| }; | ||||
							
								
								
									
										14
									
								
								library/include/mobilisis/tariff_weekdays_worktime.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								library/include/mobilisis/tariff_weekdays_worktime.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| // #pragma once | ||||
|  | ||||
| /// <summary> | ||||
| /// Weekdays worktime data | ||||
| /// </summary> | ||||
| class TariffWeekDaysWorktime | ||||
| { | ||||
| public: | ||||
| 	int pwd_id; | ||||
| 	int pwd_period_week_day_id; | ||||
| 	int pwd_period_day_in_week_id; | ||||
| 	std::string pwd_time_from; | ||||
| 	std::string pwd_time_to; | ||||
| }; | ||||
							
								
								
									
										8
									
								
								library/include/mobilisis/time_range.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								library/include/mobilisis/time_range.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| #pragma once | ||||
| #include "time_range_header.h" | ||||
|  | ||||
| struct TimeRange { | ||||
| public: | ||||
| 	bool IsActive; | ||||
| 	ATBTimeRange TimeRangeStructure; | ||||
| }; | ||||
							
								
								
									
										8
									
								
								library/include/mobilisis/time_range_header.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								library/include/mobilisis/time_range_header.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| #pragma once | ||||
| #include <ctime> | ||||
|  | ||||
| class ATBTimeRange { | ||||
| public: | ||||
| 	time_t time_from; | ||||
| 	time_t time_to; | ||||
| }; | ||||
							
								
								
									
										72
									
								
								library/include/mobilisis/utilities.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								library/include/mobilisis/utilities.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,72 @@ | ||||
| #pragma once | ||||
| #include <cstring> | ||||
| #include <string.h> | ||||
| #include <ctime> | ||||
| #include <iostream> | ||||
| #include <cmath> | ||||
|  | ||||
| #include "day_of_week.h" | ||||
| #include "configuration.h" | ||||
| #include "time_range.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| class Utilities { | ||||
| public: | ||||
|  | ||||
| 	/// <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* tm); | ||||
|  | ||||
| 	/// <summary> | ||||
| 	/// Date and time parse helper function | ||||
| 	/// </summary> | ||||
| 	/// <returns>Returns time (tm) structure</returns> | ||||
| 	static struct tm DateTimeToStructTm(const char* dateTimeStr); | ||||
|  | ||||
| 	/// <summary> | ||||
| 	/// Date parse helper function | ||||
| 	/// </summary> | ||||
| 	/// <returns>Returns time (tm) structure</returns> | ||||
| 	static struct tm DateToStructTm(const char* dateStr); | ||||
|  | ||||
| 	/// <summary> | ||||
| 	/// Time parse helper function | ||||
| 	/// </summary> | ||||
| 	/// <returns>Returns time (tm) structure</returns> | ||||
| 	static struct tm TimeToStructTm(const char* timeStr, int year, int mon, int mday, int wday); | ||||
|  | ||||
| 	/// <summary> | ||||
| 	/// Get current local time | ||||
| 	/// </summary> | ||||
| 	/// <returns>Returns time_t structure</returns> | ||||
| 	static time_t GetCurrentLocalTime(); | ||||
|  | ||||
| 	/// <summary> | ||||
| 	/// Zeller's algorithm for determining day of week | ||||
| 	/// </summary> | ||||
| 	static int ZellersAlgorithm(int day, int month, int year); | ||||
|  | ||||
| 	/// <summary> | ||||
| 	///  Checks if current datetime is in range between start and end month of parking worktime | ||||
| 	/// </summary> | ||||
| 	/// <param name="tariff_cfg"></param> | ||||
| 	/// <param name="currentDateTime"></param> | ||||
| 	/// <returns></returns> | ||||
| 	static bool IsYearPeriodActive(Configuration* cfg, struct tm* currentDateTime); | ||||
|  | ||||
| 	/// <summary> | ||||
| 	/// Check permissions | ||||
| 	/// </summary> | ||||
| 	static bool CheckSpecialDay(Configuration* cfg, const char* currentDateTimeStr, int* specialDayId, double* specialDayPrice); | ||||
|  | ||||
| 	/// <summary> | ||||
| 	/// Calculates price per unit | ||||
| 	/// </summary> | ||||
| 	/// <param name="pra_price"></param> | ||||
| 	/// <returns></returns> | ||||
| 	static double CalculatePricePerUnit(double pra_price); | ||||
| }; | ||||
							
								
								
									
										10
									
								
								library/include/mobilisis/weekdays.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								library/include/mobilisis/weekdays.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| #pragma once | ||||
| #include <string> | ||||
|  | ||||
| class ATBWeekDays | ||||
| { | ||||
| public: | ||||
| 	int pdiw_id; | ||||
| 	std::string pdiw_label; | ||||
| 	int pdiw_index; | ||||
| }; | ||||
							
								
								
									
										12
									
								
								library/include/mobilisis/weekdays_worktime.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								library/include/mobilisis/weekdays_worktime.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| #pragma once | ||||
| #include <string> | ||||
|  | ||||
| class ATBWeekDaysWorktime | ||||
| { | ||||
| public: | ||||
| 	int pwd_id; | ||||
| 	int pwd_period_week_day_id; | ||||
| 	int pwd_period_day_in_week_id; | ||||
| 	std::string pwd_time_from; | ||||
| 	std::string pwd_time_to; | ||||
| }; | ||||
		Reference in New Issue
	
	Block a user