Compare commits
185 Commits
moransBran
...
neuhauser-
Author | SHA1 | Date | |
---|---|---|---|
1173732172 | |||
1b933c05a6 | |||
ac45ebb926 | |||
9af39fa83f | |||
17ae11212a | |||
89b7589600 | |||
179d3348b9 | |||
b43fa274bd | |||
0ce630dfa3 | |||
0671a6dde6 | |||
d7757773bd | |||
99a3c34d53 | |||
6ce8a86c5f | |||
bcd5aaf932 | |||
acb88efc5a | |||
e9b10166d2 | |||
33731faba9 | |||
15700a363d | |||
506a665592 | |||
7679eb9481
|
|||
a8de97a528 | |||
ed6592c273 | |||
cc702a413e | |||
51a58bfa15 | |||
ff314c810f | |||
80fa2fe0e2 | |||
89e0f2137b | |||
f68d8816c0 | |||
7ce93ddd7a | |||
7f8ed9165d | |||
0b901954aa | |||
9f4b10bb9a | |||
2f939d607d | |||
283e970be4 | |||
e14edea07f | |||
e520965c6b | |||
6a781f0d3b | |||
c357cbbbe0 | |||
b4940e98fe | |||
b8a5803613 | |||
6a79c6c463 | |||
528b3882a0 | |||
7d274f807e | |||
e977665649 | |||
44a94b7007 | |||
7c13d8b88c | |||
64bc639eaa | |||
f0312bc8fb | |||
37052e97fc | |||
8cf816c158 | |||
f1f5ac8900 | |||
ddded411aa | |||
96587229e2 | |||
3d3794ea4e | |||
bb83ae3074 | |||
c598014dd0 | |||
ad534eef09 | |||
5ee73bf804 | |||
ef7fff79c9 | |||
ea2dfa144f | |||
f56979a61a | |||
cc07b8f20e | |||
81459f7ab4 | |||
db7fe35095 | |||
08e89df5a5 | |||
d6324f03a8 | |||
2b3ee3f384 | |||
08f8f3a9fd | |||
a80bc7294a | |||
3a0baf266b | |||
31193336cf | |||
4fbc2c502b | |||
8d7d175b51 | |||
ebb5bad7c5 | |||
b122206a94 | |||
83807a0f99 | |||
d0e0699906 | |||
3006e64b37 | |||
c8218bd7af | |||
ba3dfcd3d6 | |||
c51d350618 | |||
a95a39a557 | |||
67b12f4b33 | |||
60002404da | |||
d4e03a51dd | |||
723b3530cc | |||
63f508fb95 | |||
6e0a74c8cc | |||
d11cffb8bd | |||
15f552a973 | |||
52ad1c3ba8 | |||
43b8a8d3bf | |||
ceef73195d | |||
282a412ef5 | |||
9dcf7a8f30 | |||
4187598edf | |||
88e92dddb9 | |||
0f05a1a784 | |||
2d696941a5 | |||
5598b02816 | |||
548447af1f | |||
b9a7c04db9 | |||
5b8d9c62cc | |||
56e2843ddb | |||
6b76c4c2dd | |||
54e9a0f86d | |||
d7beb3b41b | |||
9d220df52e | |||
de7a63bc2a | |||
73b1c1459e | |||
a599e47a47 | |||
e97ad17b09 | |||
19428ce46c | |||
4c268e6693 | |||
cc5c52c1a0 | |||
602ff5f94e | |||
b8720bac6c | |||
64c005cd70 | |||
9abc165a7c | |||
57ec82a2fc | |||
a49236c1de | |||
9a19320ee5 | |||
9e8833f362 | |||
7a5d797ae0 | |||
215667af61 | |||
2b6d116200 | |||
2d9ed3c1c8 | |||
9ca45e613f | |||
6a3d183129 | |||
684de4acd1 | |||
e9047f995a | |||
20cdb8b07f | |||
b84970fd12 | |||
7ac033720e | |||
c749de2bf9 | |||
c4cec1c04b | |||
a53cb37291 | |||
b1a98a20c5 | |||
d765997ca5 | |||
d2664fdb95 | |||
36478e111e | |||
8f2609c4ae
|
|||
453ca266a5
|
|||
0217bb8918 | |||
4b35b1ffb7 | |||
80e228b498 | |||
574161ff76 | |||
b80cd5e6ef | |||
ccbf07a654
|
|||
3a2e521345
|
|||
cd77e380ef
|
|||
aaa4348a9a
|
|||
17c4aac452
|
|||
68c438bfe0
|
|||
509bc29d7e
|
|||
f7e462188f
|
|||
d15c9dad29
|
|||
cb8cd5dead
|
|||
9d64350e4f
|
|||
1a71edc274 | |||
51d8beda2a | |||
7bab9d6ba2 | |||
8b4d64bd0c | |||
eefdde4693 | |||
6157861d62 | |||
23748966de
|
|||
268d43cdea
|
|||
a453886f0a
|
|||
eef94a3fb3
|
|||
88a0b6ebe2
|
|||
3097819c01
|
|||
acf799da7e
|
|||
3bf71f84d5
|
|||
73f5eca656
|
|||
b8753cc2ed
|
|||
29986e0451
|
|||
1146db743c
|
|||
c6302edec5
|
|||
90eae152bf
|
|||
6d001f1501
|
|||
de32022b89
|
|||
1e2f1589ac
|
|||
ee1f7eca44
|
|||
1069c5ad90
|
|||
46bffc250d
|
13
library/include/mobilisis/atb_project.h
Normal file
13
library/include/mobilisis/atb_project.h
Normal file
@@ -0,0 +1,13 @@
|
||||
#ifndef ATB_PROJECT_H_INCLUDED
|
||||
#define ATB_PROJECT_H_INCLUDED
|
||||
|
||||
#include <QString>
|
||||
|
||||
class ATBProject {
|
||||
public:
|
||||
QString project;
|
||||
QString version;
|
||||
QString info;
|
||||
};
|
||||
|
||||
#endif // ATB_PROJECT_H_INCLUDED
|
@@ -109,7 +109,12 @@ CalcState CALCULATE_LIBRARY_API init_tariff(parking_tariff_t **tariff,
|
||||
void CALCULATE_LIBRARY_API free_tariff(parking_tariff_t *tariff);
|
||||
int CALCULATE_LIBRARY_API get_zone_nr(int zone = -1);
|
||||
|
||||
CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket(
|
||||
int CALCULATE_LIBRARY_API compute_next_timestep(parking_tariff_t *tariff, int currentTimeMinutes, int UpDown);
|
||||
|
||||
QList<int> CALCULATE_LIBRARY_API get_time_steps(Configuration *cfg);
|
||||
int CALCULATE_LIBRARY_API get_minimal_parkingtime(Configuration *cfg);
|
||||
|
||||
CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket( // deprecated
|
||||
parking_tariff_t *tariff,
|
||||
time_t start_parking_time,
|
||||
time_t end_parking_time,
|
||||
@@ -118,10 +123,11 @@ CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket(
|
||||
CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket(
|
||||
parking_tariff_t *tariff,
|
||||
QDateTime const &start_parking_time,
|
||||
QDateTime const &end_parking_time,
|
||||
struct price_t *price);
|
||||
int netto_parking_time,
|
||||
QDateTime &end_parking_time, // return value
|
||||
struct price_t *price); // return value
|
||||
|
||||
CalcState CALCULATE_LIBRARY_API compute_duration_for_parking_ticket(
|
||||
CalcState CALCULATE_LIBRARY_API compute_duration_for_parking_ticket( // deprecated
|
||||
parking_tariff_t *tariff,
|
||||
time_t start_parking_time,
|
||||
double cost,
|
||||
@@ -131,12 +137,12 @@ CalcState CALCULATE_LIBRARY_API compute_duration_for_parking_ticket(
|
||||
parking_tariff_t *tariff,
|
||||
QDateTime const &start_parking_time,
|
||||
double cost,
|
||||
QDateTime &ticketEndTime);
|
||||
QDateTime &ticketEndTime); // return value
|
||||
|
||||
CalcState CALCULATE_LIBRARY_API compute_duration_for_daily_ticket(
|
||||
parking_tariff_t *tariff,
|
||||
QString const &start_parking_time,
|
||||
uint8_t paymentMethod);
|
||||
QDateTime const &start_parking_time,
|
||||
QDateTime &ticketEndTime);
|
||||
//#ifdef __cplusplus
|
||||
//} // extern "C"
|
||||
//#endif
|
||||
|
@@ -1,12 +1,35 @@
|
||||
#pragma once
|
||||
#ifndef CALCULATOR_FUNCTIONS_H_INCLUDED
|
||||
#define CALCULATOR_FUNCTIONS_H_INCLUDED
|
||||
|
||||
#include <iostream>
|
||||
#include <optional>
|
||||
|
||||
#include "configuration.h"
|
||||
#include "payment_method.h"
|
||||
#include "ticket.h"
|
||||
#include "tariff_time_range.h"
|
||||
|
||||
#include <QDateTime>
|
||||
using namespace std;
|
||||
|
||||
class Calculator
|
||||
{
|
||||
class Calculator {
|
||||
mutable QList<int> m_timeSteps;
|
||||
|
||||
protected:
|
||||
explicit Calculator() = default;
|
||||
|
||||
public:
|
||||
Calculator(Calculator const &other) = delete;
|
||||
void operator=(Calculator const &) = delete;
|
||||
|
||||
static Calculator &GetInstance() {
|
||||
static Calculator c;
|
||||
return c;
|
||||
}
|
||||
|
||||
void ResetTimeSteps() { m_timeSteps.clear(); }
|
||||
QList<int> timeSteps() const { return m_timeSteps; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets duration in seconds from cost
|
||||
/// </summary>
|
||||
@@ -23,10 +46,69 @@ public:
|
||||
/// <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="end_datetime">Date/time of park end 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);
|
||||
double GetCostFromDuration(Configuration* cfg, uint8_t vehicle_type, const QDateTime start_datetime, QDateTime & end_datetime, int durationMin, bool nextDay = false, bool prepaid = false);
|
||||
|
||||
// Daily ticket
|
||||
QString GetDailyTicketDuration(Configuration* cfg, QString start_datetime, uint8_t payment_option, bool carry_over);
|
||||
QDateTime GetDailyTicketDuration(Configuration* cfg, const QDateTime start_datetime, uint8_t payment_option, bool carry_over);
|
||||
|
||||
//
|
||||
// helper function to find time steps for a tariff with PaymentMethod::Steps
|
||||
// (e.g. Schoenau/Koenigsee)
|
||||
//
|
||||
QList<int> GetTimeSteps(Configuration *cfg) const;
|
||||
QList<int> GetSteps(Configuration *cfg) const { return GetTimeSteps(cfg); }
|
||||
|
||||
// additional helper functions
|
||||
bool noSpecialDays(Configuration const *cfg) const {
|
||||
return (cfg->SpecialDays.size() == 0) && (cfg->SpecialDaysWorktime.size() == 0);
|
||||
}
|
||||
bool specialDays(Configuration const *cfg) const {
|
||||
return !noSpecialDays(cfg);
|
||||
}
|
||||
bool tariffIs24_7(Configuration const *cfg) const {
|
||||
return (cfg->YearPeriod.size() == 0 &&
|
||||
cfg->SpecialDays.size() == 0 &&
|
||||
cfg->SpecialDaysWorktime.size() == 0);
|
||||
}
|
||||
|
||||
// testing public:
|
||||
private:
|
||||
// Introduced for PaymentMethod::Steps (e.g. Schoenau)
|
||||
// For tariff of following structure: only steps, no special days, nonstop.
|
||||
uint32_t GetCostFromDuration(Configuration *cfg, QDateTime const &start, quint64 durationMinutes) const;
|
||||
uint32_t GetCostFromDuration(Configuration *cfg, QDateTime const &start, QDateTime const &end) const;
|
||||
|
||||
Ticket private_GetCostFromDuration(Configuration const* cfg,
|
||||
QDateTime const &start,
|
||||
int durationMinutes,
|
||||
bool prepaid = false);
|
||||
Ticket private_GetDurationFromCost(Configuration *cfg,
|
||||
QDateTime const &start,
|
||||
uint32_t price,
|
||||
bool prepaid = false);
|
||||
|
||||
bool checkDurationMinutes(int minParkingTime, int maxParkingTime,
|
||||
int durationMinutes);
|
||||
|
||||
//
|
||||
uint32_t GetPriceForTimeStep(Configuration *cfg, int timeStep) const;
|
||||
uint32_t GetPriceForStep(Configuration *cfg, int step) const {
|
||||
return GetPriceForTimeStep(cfg, step);
|
||||
}
|
||||
uint32_t GetDurationForPrice(Configuration *cfg, int price) const;
|
||||
uint32_t GetStepForPrice(Configuration *cfg, int price) const {
|
||||
return GetDurationForPrice(cfg, price);
|
||||
}
|
||||
|
||||
int findWorkTimeRange(QDateTime const &dt,
|
||||
QScopedArrayPointer<TariffTimeRange> const &worktime,
|
||||
size_t size);
|
||||
int findNextWorkTimeRange(QDateTime const &dt,
|
||||
QScopedArrayPointer<TariffTimeRange> const &worktime,
|
||||
size_t size);
|
||||
};
|
||||
|
||||
#endif // CALCULATOR_FUNCTIONS_H_INCLUDED
|
||||
|
@@ -20,15 +20,22 @@
|
||||
#include "member_type.h"
|
||||
#include "period_year.h"
|
||||
#include "payment_rate.h"
|
||||
#include "atb_project.h"
|
||||
#include "tariff_daily_ticket.h"
|
||||
#include "time_range_header.h"
|
||||
#include "tariff_timestep_config.h"
|
||||
|
||||
#include <QVector>
|
||||
|
||||
using namespace std;
|
||||
using namespace rapidjson;
|
||||
|
||||
class Calculator;
|
||||
class Configuration
|
||||
{
|
||||
public:
|
||||
|
||||
ATBCurrency Currency;
|
||||
ATBProject project;
|
||||
ATBCurrency Currency;
|
||||
ATBDuration duration;
|
||||
|
||||
multimap<int, ATBDuration> Duration;
|
||||
@@ -40,6 +47,10 @@ public:
|
||||
multimap<int, ATBPeriodYear> YearPeriod;
|
||||
multimap<int, ATBWeekDaysWorktime> WeekDaysWorktime;
|
||||
multimap<int, ATBPaymentOption> PaymentOption;
|
||||
multimap<int, ATBDailyTicket> DailyTicket;
|
||||
multimap<int, ATBTimeRange> TimeRange;
|
||||
multimap<int, ATBTimeStepConfig> TimeStepConfig;
|
||||
multimap<int, ATBTimeBase> TimeBase;
|
||||
|
||||
/// <summary>
|
||||
/// Parse JSON string
|
||||
@@ -48,6 +59,10 @@ public:
|
||||
/// <returns>Returns operation status bool (OK | FAIL) </returns>
|
||||
bool ParseJson(Configuration* cfg, const char* json);
|
||||
|
||||
ATBPaymentOption &getPaymentOptions();
|
||||
ATBPaymentOption const &getPaymentOptions() const;
|
||||
QVector<ATBDailyTicket> const &getDailyTickets() const;
|
||||
|
||||
private:
|
||||
/// <summary>
|
||||
/// Identify type of JSON member
|
||||
@@ -55,4 +70,6 @@ private:
|
||||
/// <param name="member_name"></param>
|
||||
/// <returns></returns>
|
||||
MemberType IdentifyJsonMember(const char* member_name);
|
||||
|
||||
ATBPaymentOption currentPaymentOptions;
|
||||
};
|
||||
|
@@ -2,12 +2,12 @@
|
||||
|
||||
enum DayOfWeek
|
||||
{
|
||||
Saturday = 0x06,
|
||||
Sunday = 0x01,
|
||||
Monday = 0x02,
|
||||
Tuesday = 0x02,
|
||||
Wednesday = 0x03,
|
||||
Thursday = 0x04,
|
||||
Friday = 0x05,
|
||||
UndefinedDay = 0xFF
|
||||
};
|
||||
Monday = 0x01,
|
||||
Tuesday = 0x02,
|
||||
Wednesday = 0x03,
|
||||
Thursday = 0x04,
|
||||
Friday = 0x05,
|
||||
Saturday = 0x06,
|
||||
Sunday = 0x07,
|
||||
UndefinedDay = 0xFF
|
||||
};
|
||||
|
@@ -1,4 +1,3 @@
|
||||
#pragma once
|
||||
#include <string>
|
||||
|
||||
class ATBDuration
|
||||
@@ -7,4 +6,6 @@ public:
|
||||
int pun_id;
|
||||
std::string pun_label;
|
||||
int pun_duration;
|
||||
};
|
||||
int pun_duration_min;
|
||||
int pun_duration_max;
|
||||
};
|
||||
|
@@ -1,4 +1,5 @@
|
||||
#pragma once
|
||||
#ifndef MEMBER_TYPE_H_INCLUDED
|
||||
#define MEMBER_TYPE_H_INCLUDED
|
||||
|
||||
enum MemberType
|
||||
{
|
||||
@@ -12,5 +13,12 @@ enum MemberType
|
||||
WeekDaysWorkTimeType = 0x06,
|
||||
SpecialDaysWorktimeType = 0x07,
|
||||
SpecialDaysType = 0x08,
|
||||
PeriodYearType = 0x09
|
||||
};
|
||||
PeriodYearType = 0x09,
|
||||
DailyTicketType = 0x0A,
|
||||
CustomerType = 0x0B,
|
||||
TimeBaseType = 0x0C,
|
||||
TimeRangeType = 0x0D,
|
||||
TimeStepConfigType = 0x0E
|
||||
};
|
||||
|
||||
#endif // MEMBER_TYPE_H_INCLUDED
|
||||
|
@@ -1,10 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
enum PaymentMethod
|
||||
{
|
||||
Undefined = 0xFF,
|
||||
Progressive = 0x01,
|
||||
Degressive = 0x02,
|
||||
Linear = 0x03,
|
||||
Steps = 0x04
|
||||
};
|
||||
#ifndef PAYMENT_METHOD_H_INCLUDED
|
||||
#define PAYMENT_METHOD_H_INCLUDED
|
||||
|
||||
enum PaymentMethod {
|
||||
Undefined = 0xFF,
|
||||
Progressive = 0x01,
|
||||
Degressive = 0x02,
|
||||
Linear = 0x03,
|
||||
Steps = 0x04
|
||||
};
|
||||
|
||||
#endif // PAYMENT_METHOD_H_INCLUDED
|
||||
|
@@ -4,15 +4,20 @@
|
||||
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;
|
||||
ATBPaymentOption() = default;
|
||||
|
||||
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;
|
||||
int pop_carry_over_time_range_id;
|
||||
int pop_daily_card_price;
|
||||
int pop_business_hours;
|
||||
int pop_time_step_config;
|
||||
};
|
||||
|
21
library/include/mobilisis/tariff_business_hours.h
Normal file
21
library/include/mobilisis/tariff_business_hours.h
Normal file
@@ -0,0 +1,21 @@
|
||||
#ifndef TARIFF_BUSINESS_HOURS_H_INCLUDED
|
||||
#define TARIFF_BUSINESS_HOURS_H_INCLUDED
|
||||
|
||||
/// <summary>
|
||||
/// Business hours (byte represents payment option id)
|
||||
/// </summary>
|
||||
enum BusinessHours
|
||||
{
|
||||
NoRestriction_24_7 = 0,
|
||||
OnlyWorkingDays = 1, // [Monday-Friday]
|
||||
OnlyWeekDays = 2, // [Monday-Saturday]
|
||||
OnlyWeekEnd = 4, // [Saturday+Sunday]
|
||||
OnlyOfficialHolidays = 8,
|
||||
OnlySpecialDays = 16,
|
||||
OnlySchoolHolidays = 32,
|
||||
SpecialAndSchoolHolidays = 48,
|
||||
OnlyOpenForBusinessDays = 64, // verkaufsoffen
|
||||
NoBusinessHoursDefined = 255
|
||||
};
|
||||
|
||||
#endif // TARIFF_BUSINESS_HOURS_H_INCLUDED
|
41
library/include/mobilisis/tariff_customer.h
Normal file
41
library/include/mobilisis/tariff_customer.h
Normal file
@@ -0,0 +1,41 @@
|
||||
#ifndef TARIFF_CUSTOMER_H_INCLUDED
|
||||
#define TARIFF_CUSTOMER_H_INCLUDED
|
||||
|
||||
#include <QString>
|
||||
#include <QDebug>
|
||||
#include <QDebugStateSaver>
|
||||
|
||||
struct ATBCustomer {
|
||||
enum class CustomerType {ADULT=1000, CHILD, TEEN};
|
||||
|
||||
ATBCustomer() = default;
|
||||
|
||||
CustomerType cust_type;
|
||||
QString cust_label;
|
||||
|
||||
friend QDebug operator<<(QDebug debug, ATBCustomer const &customer) {
|
||||
QDebugStateSaver saver(debug);
|
||||
|
||||
switch(customer.cust_type) {
|
||||
case ATBCustomer::CustomerType::ADULT:
|
||||
debug.nospace()
|
||||
<< " cust_type: " << "CustomerType::ADULT" << "\n"
|
||||
<< "cust_label: " << customer.cust_label << "\n";
|
||||
break;
|
||||
case ATBCustomer::CustomerType::CHILD:
|
||||
debug.nospace()
|
||||
<< " cust_type: " << "CustomerType::CHILD" << "\n"
|
||||
<< "cust_label: " << customer.cust_label << "\n";
|
||||
break;
|
||||
case ATBCustomer::CustomerType::TEEN:
|
||||
debug.nospace()
|
||||
<< " cust_type: " << "CustomerType::TEEN" << "\n"
|
||||
<< "cust_label: " << customer.cust_label << "\n";
|
||||
break;
|
||||
}
|
||||
|
||||
return debug;
|
||||
}
|
||||
};
|
||||
|
||||
#endif // TARIFF_CUSTOMER_H_INCLUDED
|
82
library/include/mobilisis/tariff_daily_ticket.h
Normal file
82
library/include/mobilisis/tariff_daily_ticket.h
Normal file
@@ -0,0 +1,82 @@
|
||||
#ifndef TARIFF_DAILY_TICKET_H_INCLUDED
|
||||
#define TARIFF_DAILY_TICKET_H_INCLUDED
|
||||
|
||||
#include <QString>
|
||||
#include <QDateTime>
|
||||
#include <QDebug>
|
||||
#include <QDebugStateSaver>
|
||||
|
||||
|
||||
#include "tariff_customer.h"
|
||||
#include "tariff_time_range.h"
|
||||
#include "tariff_timebase.h"
|
||||
|
||||
struct ATBDailyTicket {
|
||||
ATBDailyTicket() = default;
|
||||
|
||||
int daily_ticket_payment_option_id;
|
||||
int daily_ticket_unit_id;
|
||||
double daily_ticket_price;
|
||||
|
||||
ATBTimeBase::TimeBaseType daily_ticket_tbase_type;
|
||||
// time base setting for ticket:
|
||||
// absolute: using time stamps
|
||||
// relative: use offsets from
|
||||
// some reference time point,
|
||||
// typically "start time".
|
||||
|
||||
ATBCustomer::CustomerType daily_ticket_clearance_customer_type;
|
||||
// who is allowed to buy the ticket:
|
||||
// list of customer types
|
||||
|
||||
int daily_ticket_weekday_range; // [mon-sun]
|
||||
int daily_ticket_special_day_range;
|
||||
|
||||
|
||||
friend QDebug operator<<(QDebug debug, ATBDailyTicket const &ticket) {
|
||||
QDebugStateSaver saver(debug);
|
||||
|
||||
debug.nospace()
|
||||
<< " daily_ticket_payment_option_id: " << ticket.daily_ticket_payment_option_id << "\n"
|
||||
<< " daily_ticket_unit_id: " << ticket.daily_ticket_unit_id << "\n"
|
||||
<< " daily_ticket_price: " << ticket.daily_ticket_price << "\n";
|
||||
|
||||
switch(ticket.daily_ticket_tbase_type) {
|
||||
case ATBTimeBase::TimeBaseType::ABSOLUTE:
|
||||
debug.nospace()
|
||||
<< " daily_ticket_tbase_type: " << "TimeBaseType::ABSOLUTE" << "\n";
|
||||
break;
|
||||
case ATBTimeBase::TimeBaseType::RELATIVE:
|
||||
debug.nospace()
|
||||
<< " daily_ticket_tbase_type: " << "TimeBaseType::RELATIVE" << "\n";
|
||||
break;
|
||||
}
|
||||
|
||||
switch(ticket.daily_ticket_clearance_customer_type) {
|
||||
case ATBCustomer::CustomerType::ADULT:
|
||||
debug.nospace()
|
||||
<< "daily_ticket_clearance_customer_type: " << "CustomerType::ADULT" << "\n";
|
||||
break;
|
||||
case ATBCustomer::CustomerType::CHILD:
|
||||
debug.nospace()
|
||||
<< "daily_ticket_clearance_customer_type: " << "CustomerType::CHILD" << "\n";
|
||||
break;
|
||||
case ATBCustomer::CustomerType::TEEN:
|
||||
debug.nospace()
|
||||
<< "daily_ticket_clearance_customer_type: " << "CustomerType::TEEN" << "\n";
|
||||
break;
|
||||
default:
|
||||
debug.nospace()
|
||||
<< "daily_ticket_clearance_customer_type: " << "CustomerType::???" << "\n";
|
||||
break;
|
||||
}
|
||||
|
||||
debug.nospace()
|
||||
<< " daily_ticket_weekday_range: " << ticket.daily_ticket_weekday_range << "\n"
|
||||
<< " daily_ticket_special_day_range: " << ticket.daily_ticket_special_day_range << "\n";
|
||||
|
||||
return debug;
|
||||
}
|
||||
};
|
||||
|
||||
#endif // TARIFF_DAILY_TICKET_H_INCLUDED
|
@@ -1,4 +1,3 @@
|
||||
// #pragma once
|
||||
|
||||
/// <summary>
|
||||
/// Duration data
|
||||
@@ -6,7 +5,9 @@
|
||||
class TariffDuration
|
||||
{
|
||||
public:
|
||||
int pun_id;
|
||||
std::string pun_label;
|
||||
int pun_duration;
|
||||
int pun_id;
|
||||
std::string pun_label;
|
||||
int pun_duration;
|
||||
int pun_duration_min;
|
||||
int pun_duration_max;
|
||||
};
|
||||
|
@@ -1,17 +1,34 @@
|
||||
// #pragma once
|
||||
#ifndef TARIFF_TIME_RANGE_H_INCLUDED
|
||||
#define TARIFF_TIME_RANGE_H_INCLUDED
|
||||
|
||||
#include <ctime>
|
||||
#include <QTime>
|
||||
|
||||
/// <summary>
|
||||
/// Time range definition
|
||||
/// </summary>
|
||||
class TariffTimeRange {
|
||||
QTime m_time_from; // if m_time_from == m_time_until, then the time range
|
||||
QTime m_time_until; // actually is the time point m_time_from
|
||||
|
||||
public:
|
||||
time_t time_from;
|
||||
time_t time_to;
|
||||
TariffTimeRange() : time_from(0), time_to(0) {}
|
||||
|
||||
TariffTimeRange()
|
||||
: m_time_from(QTime())
|
||||
, m_time_until(QTime()) {}
|
||||
|
||||
TariffTimeRange(QTime const& from, QTime const &until)
|
||||
: m_time_from(from)
|
||||
, m_time_until(until) {
|
||||
|
||||
}
|
||||
|
||||
void setTimeRange(QTime const& from, QTime const &until) {
|
||||
m_time_from = from;
|
||||
m_time_until = until;
|
||||
}
|
||||
|
||||
QTime const &getTimeFrom() const { return m_time_from; }
|
||||
QTime const &getTimeUntil() const { return m_time_until; }
|
||||
};
|
||||
|
||||
#endif // TARIFF_TIME_RANGE_H_INCLUDED
|
||||
|
42
library/include/mobilisis/tariff_timebase.h
Normal file
42
library/include/mobilisis/tariff_timebase.h
Normal file
@@ -0,0 +1,42 @@
|
||||
#ifndef TARIFF_TIME_BASE_H_INCLUDED
|
||||
#define TARIFF_TIME_BASE_H_INCLUDED
|
||||
|
||||
#include <QString>
|
||||
#include <QDebug>
|
||||
#include <QDebugStateSaver>
|
||||
|
||||
struct ATBTimeBase {
|
||||
enum class TimeBaseType {ABSOLUTE=0, RELATIVE=1};
|
||||
|
||||
ATBTimeBase() = default;
|
||||
int tbase_id;
|
||||
TimeBaseType tbase_type;
|
||||
QString tbase_label;
|
||||
|
||||
friend QDebug operator<<(QDebug debug, ATBTimeBase const &timeBase) {
|
||||
QDebugStateSaver saver(debug);
|
||||
|
||||
switch(timeBase.tbase_type) {
|
||||
case ATBTimeBase::TimeBaseType::ABSOLUTE:
|
||||
debug.nospace()
|
||||
<< " tbase_id: " << timeBase.tbase_id << "\n"
|
||||
<< " tbase_type: " << "TimeBaseType::ABSOLUTE" << "\n"
|
||||
<< "tbase_label: " << timeBase.tbase_label << "\n";
|
||||
break;
|
||||
case ATBTimeBase::TimeBaseType::RELATIVE:
|
||||
debug.nospace()
|
||||
<< " tbase_type: " << "TimeBaseType::RELATIVE" << "\n"
|
||||
<< "tbase_label: " << timeBase.tbase_label << "\n";
|
||||
break;
|
||||
default:
|
||||
debug.nospace()
|
||||
<< " tbase_type: " << "TimeBaseType::???" << "\n";
|
||||
break;
|
||||
}
|
||||
|
||||
return debug;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
#endif // TARIFF_TIME_BASE_H_INCLUDED
|
26
library/include/mobilisis/tariff_timestep_config.h
Normal file
26
library/include/mobilisis/tariff_timestep_config.h
Normal file
@@ -0,0 +1,26 @@
|
||||
#ifndef TARIFF_TIMESTEP_CONFIG_H_INCLUDED
|
||||
#define TARIFF_TIMESTEP_CONFIG_H_INCLUDED
|
||||
|
||||
#include <QString>
|
||||
#include <QDebug>
|
||||
#include <QDebugStateSaver>
|
||||
|
||||
struct ATBTimeStepConfig {
|
||||
enum class TimeStepConfig {STATIC=1, DYNAMIC=2};
|
||||
|
||||
ATBTimeStepConfig() = default;
|
||||
int tsconfig_id;
|
||||
QString tsconfig_label;
|
||||
|
||||
friend QDebug operator<<(QDebug debug, ATBTimeStepConfig const &tsConfig) {
|
||||
QDebugStateSaver saver(debug);
|
||||
|
||||
debug.nospace()
|
||||
<< " tsconfig_id: " << tsConfig.tsconfig_id << "\n"
|
||||
<< "tsconfig_label: " << tsConfig.tsconfig_label << "\n";
|
||||
|
||||
return debug;
|
||||
}
|
||||
};
|
||||
|
||||
#endif // TARIFF_TIMESTEP_CONFIG_H_INCLUDED
|
66
library/include/mobilisis/ticket.h
Normal file
66
library/include/mobilisis/ticket.h
Normal file
@@ -0,0 +1,66 @@
|
||||
#ifndef TICKET_H_INCLUDED
|
||||
#define TICKET_H_INCLUDED
|
||||
|
||||
#include <tuple>
|
||||
#include <vector>
|
||||
|
||||
#include <QDebug>
|
||||
#include <QDebugStateSaver>
|
||||
#include <QStringList>
|
||||
#include <QDateTime>
|
||||
|
||||
#define NOT_INITIALIZED (0)
|
||||
#define VALID (1)
|
||||
#define INVALID_FROM_DATETIME (2)
|
||||
#define INVALID_UNTIL_DATETIME (3)
|
||||
#define INVALID_PRICE (4)
|
||||
#define STATUS_END (5)
|
||||
|
||||
class Ticket {
|
||||
enum {CODE=0, CODE_STR=1, CODE_DESC=3};
|
||||
public:
|
||||
using Status = std::tuple<int, char const*, char const*>;
|
||||
|
||||
explicit Ticket();
|
||||
explicit Ticket(QDateTime const &s, QDateTime const &e,
|
||||
int durationMinutesNetto, int durationMinutesBrutto,
|
||||
uint32_t price, Status status);
|
||||
|
||||
explicit operator bool() { return std::get<CODE>(m_status) == VALID; }
|
||||
operator QString();
|
||||
|
||||
Status getStatus() const;
|
||||
QDateTime getValidFrom() const;
|
||||
QDateTime getValidUntil() const;
|
||||
uint32_t getPrice() const;
|
||||
|
||||
Status setStatus(Status status);
|
||||
void setValidFrom(QDateTime const &validFrom);
|
||||
void setValidUntil(QDateTime const &validUnil);
|
||||
void setPrice(uint32_t price);
|
||||
|
||||
bool isValid() { return operator bool(); }
|
||||
|
||||
static constexpr const Status s[STATUS_END] = {
|
||||
{NOT_INITIALIZED , "NOT_INITIALIZED" , "Ticket not initialized" },
|
||||
{VALID , "VALID" , "Ticket is valid" },
|
||||
{INVALID_FROM_DATETIME , "INVALID_FROM_DATETIME" , "Ticket has invalid start datetime"},
|
||||
{INVALID_UNTIL_DATETIME, "INVALID_UNTIL_DATETIME", "Ticket has invalid end datetime" },
|
||||
{INVALID_PRICE , "INVALID_PRICE" , "PARKING NOT ALLOWED: Ticket has invalid price" }
|
||||
};
|
||||
|
||||
private:
|
||||
Status m_status;
|
||||
|
||||
QDateTime m_validFrom;
|
||||
QDateTime m_validUntil;
|
||||
|
||||
int m_durationMinutesNetto;
|
||||
int m_durationMinutesBrutto;
|
||||
|
||||
uint32_t m_price;
|
||||
};
|
||||
|
||||
QDebug operator<<(QDebug debug, Ticket::Status const &status);
|
||||
|
||||
#endif // TICKET_H_INCLUDED
|
@@ -1,8 +1,12 @@
|
||||
#pragma once
|
||||
#ifndef TIME_RANGE_H_INCLUDED
|
||||
#define TIME_RANGE_H_INCLUDED
|
||||
|
||||
#include "time_range_header.h"
|
||||
|
||||
struct TimeRange {
|
||||
public:
|
||||
bool IsActive;
|
||||
ATBTimeRange TimeRangeStructure;
|
||||
};
|
||||
};
|
||||
|
||||
#endif // TIME_RANGE_H_INCLUDED
|
||||
|
@@ -1,8 +1,27 @@
|
||||
#pragma once
|
||||
#include <ctime>
|
||||
#ifndef TIME_RANGE_HEADER_H_INCLUDED
|
||||
#define TIME_RANGE_HEADER_H_INCLUDED
|
||||
|
||||
class ATBTimeRange {
|
||||
public:
|
||||
time_t time_from;
|
||||
time_t time_to;
|
||||
};
|
||||
#include <QString>
|
||||
#include <QDateTime>
|
||||
#include <QDebug>
|
||||
#include <QDebugStateSaver>
|
||||
|
||||
struct ATBTimeRange {
|
||||
int time_range_id;
|
||||
QTime time_range_from;
|
||||
QTime time_range_to;
|
||||
|
||||
|
||||
friend QDebug operator<<(QDebug debug, ATBTimeRange const &timeRange) {
|
||||
QDebugStateSaver saver(debug);
|
||||
|
||||
debug.nospace()
|
||||
<< " time_range_id: " << timeRange.time_range_id << "\n"
|
||||
<< "time_range_from: " << timeRange.time_range_from.toString(Qt::ISODate) << "\n"
|
||||
<< " time_range_to: " << timeRange.time_range_to.toString(Qt::ISODate) << "\n";
|
||||
|
||||
return debug;
|
||||
}
|
||||
};
|
||||
|
||||
#endif // TIME_RANGE_HEADER_H_INCLUDED
|
||||
|
@@ -1,73 +1,93 @@
|
||||
#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, double durationUnit = -1);
|
||||
|
||||
};
|
||||
#pragma once
|
||||
#include <cstring>
|
||||
#include <ctime>
|
||||
#include <iostream>
|
||||
#include <cmath>
|
||||
|
||||
#include "day_of_week.h"
|
||||
#include "configuration.h"
|
||||
#include "time_range.h"
|
||||
#include "payment_method.h"
|
||||
#include "tariff_business_hours.h"
|
||||
|
||||
#include <QDateTime>
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace Utilities {
|
||||
/// <summary>
|
||||
/// Get day of week from current date (Zeller's Algorithm), starting day is Sunday
|
||||
/// </summary>
|
||||
/// <param name="date"></param>
|
||||
/// <returns></returns>
|
||||
DayOfWeek GetDayOfWeek(struct tm* tm);
|
||||
|
||||
/// <summary>
|
||||
/// Date and time parse helper function
|
||||
/// </summary>
|
||||
/// <returns>Returns time (tm) structure</returns>
|
||||
struct tm DateTimeToStructTm(const char* dateTimeStr);
|
||||
|
||||
/// <summary>
|
||||
/// Date parse helper function
|
||||
/// </summary>
|
||||
/// <returns>Returns time (tm) structure</returns>
|
||||
struct tm DateToStructTm(const char* dateStr);
|
||||
|
||||
/// <summary>
|
||||
/// Time parse helper function
|
||||
/// </summary>
|
||||
/// <returns>Returns time (tm) structure</returns>
|
||||
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>
|
||||
time_t GetCurrentLocalTime();
|
||||
|
||||
/// <summary>
|
||||
/// Zeller's algorithm for determining day of week
|
||||
/// </summary>
|
||||
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>
|
||||
bool IsYearPeriodActive(Configuration* cfg, struct tm* currentDateTime);
|
||||
bool IsYearPeriodActive(Configuration const *cfg, QDateTime const ¤tDateTime);
|
||||
|
||||
/// <summary>
|
||||
/// Check permissions
|
||||
/// </summary>
|
||||
bool CheckSpecialDay(Configuration* cfg, const char* currentDateTimeStr, int* specialDayId, double* specialDayPrice);
|
||||
bool CheckSpecialDay(Configuration const *cfg,
|
||||
QDateTime const ¤tDateTimeS,
|
||||
int* specialDayId, uint32_t *specialDayPrice);
|
||||
|
||||
/// <summary>
|
||||
/// Calculates price per unit
|
||||
/// </summary>
|
||||
/// <param name="pra_price"></param>
|
||||
/// <returns></returns>
|
||||
double CalculatePricePerUnit(double pra_price, double durationUnit = -1);
|
||||
|
||||
QTime SpecialDaysWorkTimeFrom(Configuration const *cfg, int specialDayId);
|
||||
QTime SpecialDaysWorkTimeUntil(Configuration const *cfg, int specialDayId);
|
||||
QTime WeekDaysWorkTimeFrom(std::multimap<int, ATBWeekDaysWorktime>::const_iterator itr);
|
||||
QTime WeekDaysWorkTimeUntil(std::multimap<int, ATBWeekDaysWorktime>::const_iterator itr);
|
||||
bool isCarryOverSet(Configuration const *cfg, PaymentMethod paymentMethodId);
|
||||
bool isCarryOverNotSet(Configuration const *cfg, PaymentMethod paymentMethodId);
|
||||
PaymentMethod getPaymentMethodId(Configuration const *cfg);
|
||||
|
||||
int getMinimalParkingTime(Configuration const *cfg, PaymentMethod methodId);
|
||||
int getMaximalParkingTime(Configuration const *cfg, PaymentMethod methodId);
|
||||
uint32_t getMinimalParkingPrice(Configuration const *cfg, PaymentMethod methodId);
|
||||
uint32_t getFirstDurationStep(Configuration const *cfg, PaymentMethod methodId);
|
||||
BusinessHours getBusinessHours(Configuration const *cfg, PaymentMethod methodId);
|
||||
uint32_t computeWeekDaysPrice(Configuration const *cfg, PaymentMethod id);
|
||||
double computeWeekDaysDurationUnit(Configuration const *cfg, PaymentMethod id);
|
||||
}
|
||||
|
@@ -2,12 +2,16 @@ TEMPLATE = lib
|
||||
TARGET = mobilisis_calc
|
||||
#CONFIG += staticlib
|
||||
|
||||
QMAKE_CXXFLAGS += -std=c++17 -g -O0
|
||||
QMAKE_CXXFLAGS += -std=c++17 -g -O
|
||||
|
||||
INCLUDEPATH += $$_PRO_FILE_PWD_/include
|
||||
INCLUDEPATH += $$_PRO_FILE_PWD_/include/mobilisis
|
||||
INCLUDEPATH += $$_PRO_FILE_PWD_/include/rapidjson
|
||||
|
||||
#start version with project neuhauser/galtuer
|
||||
#Version is set in yocto recipe with "EXTRA_QMAKEVARS_PRE"
|
||||
#VERSION=1.0.0
|
||||
|
||||
CONFIG(debug, debug|release) {
|
||||
win32 {
|
||||
QMAKE_CXXFLAGS += -DCALCULATE_LIBRARY_EXPORTS
|
||||
@@ -25,7 +29,8 @@ SOURCES += \
|
||||
src/utilities.cpp \
|
||||
src/configuration.cpp \
|
||||
src/tariff_log.cpp \
|
||||
src/calculate_price.cpp
|
||||
src/calculate_price.cpp \
|
||||
src/ticket.cpp
|
||||
|
||||
HEADERS += \
|
||||
include/mobilisis/calculator_functions.h \
|
||||
@@ -65,9 +70,19 @@ HEADERS += \
|
||||
include/mobilisis/tariff_period_year.h \
|
||||
include/mobilisis/tariff_payment_rate.h \
|
||||
include/mobilisis/tariff_log.h \
|
||||
include/mobilisis/calculate_price.h
|
||||
include/mobilisis/calculate_price.h \
|
||||
include/mobilisis/atb_project.h \
|
||||
include/mobilisis/ticket.h \
|
||||
include/mobilisis/tariff_business_hours.h \
|
||||
include/mobilisis/tariff_daily_ticket.h \
|
||||
include/mobilisis/tariff_customer.h \
|
||||
include/mobilisis/tariff_timebase.h \
|
||||
include/mobilisis/tariff_timestep_config.h
|
||||
|
||||
OTHER_FILES += src/main.cpp
|
||||
OTHER_FILES += src/main.cpp \
|
||||
../tariffs/tariff_korneuburg.json \
|
||||
../tariffs/tariff_linsinger_maschinenbau.json \
|
||||
../tariffs/tariff_naz.json
|
||||
|
||||
# Default rules for deployment.
|
||||
qnx: target.path = /tmp/$${TARGET}/bin
|
||||
|
@@ -2,13 +2,25 @@
|
||||
#include "configuration.h"
|
||||
#include "calculator_functions.h"
|
||||
#include "payment_option.h"
|
||||
#include "utilities.h"
|
||||
|
||||
#include <QFile>
|
||||
#include <QFileInfo>
|
||||
#include <QDateTime>
|
||||
#include <QDebug>
|
||||
#include <QList>
|
||||
|
||||
static Calculator calculator;
|
||||
QList<int> CALCULATE_LIBRARY_API get_time_steps(Configuration *cfg) {
|
||||
return Calculator::GetInstance().GetTimeSteps(cfg);
|
||||
}
|
||||
|
||||
int CALCULATE_LIBRARY_API get_minimal_parkingtime(Configuration *cfg) {
|
||||
// for each new sell-procedure, recomute the timesteps. implicitly, set
|
||||
// the minimal parking time.
|
||||
Calculator::GetInstance().ResetTimeSteps();
|
||||
Calculator::GetInstance().GetTimeSteps(cfg);
|
||||
return qRound(cfg->getPaymentOptions().pop_min_time);
|
||||
}
|
||||
|
||||
int CALCULATE_LIBRARY_API get_zone_nr(int zone)
|
||||
{
|
||||
@@ -92,14 +104,110 @@ void CALCULATE_LIBRARY_API free_tariff(parking_tariff_t *tariff) {
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// UpDown 1 -> up; 0 -> down
|
||||
int CALCULATE_LIBRARY_API compute_next_timestep(parking_tariff_t *tariff, int currentTimeMinutes, int UpDown)
|
||||
{
|
||||
qCritical() << " compute_next_timestep() currentTimeMinutes: " << currentTimeMinutes;
|
||||
qCritical() << " compute_next_timestep() up/down (1=up, 0=down): " << UpDown;
|
||||
|
||||
Configuration const *cfg = tariff;
|
||||
|
||||
// compute payment method id (e.g. Linear=3, Steps=4)
|
||||
PaymentMethod const paymentMethodId = Utilities::getPaymentMethodId(cfg);
|
||||
switch (paymentMethodId) {
|
||||
case PaymentMethod::Progressive:
|
||||
qCritical() << " compute_next_timestep() paymentMethodId: Progressive";
|
||||
break;
|
||||
case PaymentMethod::Degressive:
|
||||
qCritical() << " compute_next_timestep() paymentMethodId: Degressive";
|
||||
break;
|
||||
case PaymentMethod::Linear:
|
||||
qCritical() << " compute_next_timestep() paymentMethodId: Linear";
|
||||
break;
|
||||
case PaymentMethod::Steps:
|
||||
qCritical() << " compute_next_timestep() paymentMethodId: Steps";
|
||||
break;
|
||||
case PaymentMethod::Undefined:
|
||||
qCritical() << " compute_next_timestep() paymentMethodId: Undefined";
|
||||
break;
|
||||
}
|
||||
|
||||
// use tariff with structure as for instance Schnau, Koenigsee:
|
||||
// without given YearPeriod, SpecialDays and SpecialDaysWorktime
|
||||
if (paymentMethodId == PaymentMethod::Steps)
|
||||
{
|
||||
const QList<int> stepList = Calculator::GetInstance().GetTimeSteps(tariff);
|
||||
qCritical() << " compute_next_timestep() timeSteps:" << stepList;
|
||||
|
||||
int currentStepIndex = stepList.indexOf(currentTimeMinutes);
|
||||
|
||||
if (currentStepIndex == -1) {
|
||||
qCritical() << "compute_next_timestep() *NO STEP* for currentTimeMinutes (" << currentTimeMinutes << ")";
|
||||
return currentTimeMinutes;
|
||||
}
|
||||
|
||||
if (UpDown == 1) { // UP
|
||||
if (stepList[currentStepIndex] == stepList.last()) {
|
||||
qCritical() << "compute_next_timestep() *NO NEXT STEP* for currentTimeMinutes (" << currentTimeMinutes << ")";
|
||||
return currentTimeMinutes;
|
||||
}
|
||||
else {
|
||||
return stepList[currentStepIndex + 1];
|
||||
}
|
||||
}
|
||||
if (UpDown == 0) { // DOWN
|
||||
if (stepList[currentStepIndex] == stepList.first()) {
|
||||
qCritical() << "compute_next_timestep() *NO PREVIOUS STEP* for currentTimeMinutes (" << currentTimeMinutes << ")";
|
||||
return currentTimeMinutes;
|
||||
}
|
||||
else {
|
||||
return stepList[currentStepIndex - 1];
|
||||
}
|
||||
}
|
||||
} else
|
||||
if (paymentMethodId == PaymentMethod::Linear) {
|
||||
|
||||
// currentTimeMinutes is the number of minutes actually used. This
|
||||
// value is an offset from the start time and cannot be used as a
|
||||
// QDateTime.
|
||||
|
||||
qCritical() << "compute_next_timestep() up/down (1=up, 0=down):" << UpDown;
|
||||
|
||||
// get minimal and maximal parking times
|
||||
int const minParkingTime = Utilities::getMinimalParkingTime(cfg, paymentMethodId);
|
||||
int const maxParkingTime = Utilities::getMaximalParkingTime(cfg, paymentMethodId);
|
||||
|
||||
qCritical() << " compute_next_timestep() maxParkingTime:" << maxParkingTime;
|
||||
qCritical() << " compute_next_timestep() minParkingTime:" << minParkingTime;
|
||||
|
||||
// use the first (i.e. main duration step contained in the tariff json-file)
|
||||
int firstDurationStep = Utilities::getFirstDurationStep(cfg, paymentMethodId);
|
||||
firstDurationStep = ((UpDown == 1) ? firstDurationStep : -firstDurationStep);
|
||||
|
||||
qCritical() << " compute_next_timestep() firstDurationStep:" << firstDurationStep;
|
||||
|
||||
int const nextTimeStep = currentTimeMinutes + firstDurationStep;
|
||||
|
||||
if (nextTimeStep >= minParkingTime && nextTimeStep <= maxParkingTime) {
|
||||
qCritical() << " compute_next_timestep() nextTimeStep:" << nextTimeStep;
|
||||
return nextTimeStep;
|
||||
}
|
||||
}
|
||||
|
||||
qCritical() << "compute_next_timestep() *CAN NOT COMPUTE* for currentTimeMinutes (" << currentTimeMinutes << ")";
|
||||
return currentTimeMinutes;
|
||||
}
|
||||
|
||||
// this is currently not used
|
||||
CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket(
|
||||
parking_tariff_t *tariff,
|
||||
time_t start_parking_time, // in minutes
|
||||
time_t end_parking_time, // in minutes
|
||||
time_t end_parking_time, // netto time in minutes
|
||||
struct price_t *price) {
|
||||
CalcState calcState;
|
||||
double minMin = tariff->PaymentOption.find(PaymentOption::Option1)->second.pop_min_time;
|
||||
double maxMin = tariff->PaymentOption.find(PaymentOption::Option1)->second.pop_max_time;
|
||||
double minMin = tariff->PaymentOption.find(tariff->getPaymentOptions().pop_payment_method_id)->second.pop_min_time;
|
||||
double maxMin = tariff->PaymentOption.find(tariff->getPaymentOptions().pop_payment_method_id)->second.pop_max_time;
|
||||
|
||||
if (minMin < 0 || maxMin < 0 || maxMin < minMin) {
|
||||
calcState.setDesc(QString("minMin=%1, maxMin=%2").arg(minMin).arg(maxMin));
|
||||
@@ -129,13 +237,15 @@ CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket(
|
||||
QTime const t(0, 0, 0);
|
||||
QDateTime start(d, t, Qt::UTC);
|
||||
start = start.toLocalTime().addSecs(start_parking_time * 60);
|
||||
QDateTime end(start);
|
||||
if (start.isValid()) {
|
||||
QString cs = start.toString(Qt::ISODate);
|
||||
double cost = calculator.GetCostFromDuration(
|
||||
tariff, PaymentOption::Option1,
|
||||
cs.toLocal8Bit().constData(),
|
||||
double cost = Calculator::GetInstance().GetCostFromDuration(
|
||||
tariff,
|
||||
tariff->getPaymentOptions().pop_payment_method_id,
|
||||
start,
|
||||
end,
|
||||
duration, false, true);
|
||||
double minCost = tariff->PaymentOption.find(PaymentOption::Option1)->second.pop_min_price;
|
||||
double minCost = tariff->PaymentOption.find(tariff->getPaymentOptions().pop_payment_method_id)->second.pop_min_price;
|
||||
if (cost < minCost) {
|
||||
calcState.setDesc(QString("minCost=%1, cost=%2").arg(minCost).arg(cost));
|
||||
return calcState.set(CalcState::State::BELOW_MIN_PARKING_PRICE);
|
||||
@@ -152,49 +262,50 @@ CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket(
|
||||
CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket(
|
||||
parking_tariff_t *tariff,
|
||||
QDateTime const &start_parking_time,
|
||||
QDateTime const &end_parking_time,
|
||||
struct price_t *price) {
|
||||
int netto_parking_time,
|
||||
QDateTime &end_parking_time,
|
||||
struct price_t *price)
|
||||
{
|
||||
CalcState calcState;
|
||||
double minMin = tariff->PaymentOption.find(PaymentOption::Option1)->second.pop_min_time;
|
||||
double maxMin = tariff->PaymentOption.find(PaymentOption::Option1)->second.pop_max_time;
|
||||
double minMin = tariff->getPaymentOptions().pop_min_time;
|
||||
double maxMin = tariff->getPaymentOptions().pop_max_time;
|
||||
|
||||
// DEBUG
|
||||
qCritical() << "compute_price_for_parking_ticket() " << endl
|
||||
<< " start_parking_time: " << start_parking_time << endl
|
||||
<< " end_parking_time: " << end_parking_time << endl
|
||||
<< " netto_parking_time: " << netto_parking_time << endl
|
||||
<< " minMin: " << minMin << endl
|
||||
<< " maxMin: " << maxMin;
|
||||
|
||||
|
||||
int const duration = (end_parking_time.toSecsSinceEpoch() -
|
||||
start_parking_time.toSecsSinceEpoch()) / 60;
|
||||
|
||||
if (duration < 0) {
|
||||
if (netto_parking_time < 0) {
|
||||
calcState.setDesc(QString("end=%1, start=%2")
|
||||
.arg(end_parking_time.toString(Qt::ISODate),
|
||||
start_parking_time.toString(Qt::ISODate)));
|
||||
return calcState.set(CalcState::State::NEGATIVE_PARING_TIME);
|
||||
}
|
||||
if (duration > maxMin) {
|
||||
calcState.setDesc(QString("duration=%1, maxMin=%2").arg(duration, maxMin));
|
||||
if (netto_parking_time > maxMin) {
|
||||
calcState.setDesc(QString("duration=%1, maxMin=%2").arg(netto_parking_time).arg(maxMin));
|
||||
return calcState.set(CalcState::State::ABOVE_MAX_PARKING_TIME);
|
||||
}
|
||||
if (duration < minMin) {
|
||||
calcState.setDesc(QString("duration=%1, minMin=%2").arg(duration, minMin));
|
||||
if (netto_parking_time < minMin) {
|
||||
calcState.setDesc(QString("duration=%1, minMin=%2").arg(netto_parking_time).arg(minMin));
|
||||
return calcState.set(CalcState::State::BELOW_MIN_PARKING_TIME);
|
||||
}
|
||||
if (duration == 0) {
|
||||
if (netto_parking_time == 0) {
|
||||
memset(price, 0x00, sizeof(*price));
|
||||
return calcState.set(CalcState::State::SUCCESS);
|
||||
}
|
||||
|
||||
if (start_parking_time.isValid()) {
|
||||
QString cs = start_parking_time.toString(Qt::ISODate);
|
||||
double cost = calculator.GetCostFromDuration(
|
||||
tariff, PaymentOption::Option1,
|
||||
cs.toLocal8Bit().constData(),
|
||||
duration, false, true);
|
||||
double minCost = tariff->PaymentOption.find(PaymentOption::Option1)->second.pop_min_price;
|
||||
double cost = Calculator::GetInstance().GetCostFromDuration(
|
||||
tariff,
|
||||
tariff->getPaymentOptions().pop_payment_method_id,
|
||||
start_parking_time, // starting time
|
||||
end_parking_time, // return value: end time
|
||||
netto_parking_time, // minutes, netto
|
||||
false, true);
|
||||
double minCost = tariff->getPaymentOptions().pop_min_price;
|
||||
if (cost < minCost) {
|
||||
calcState.setDesc(QString("minCost=%1, cost=%2").arg(minCost, cost));
|
||||
return calcState.set(CalcState::State::BELOW_MIN_PARKING_PRICE);
|
||||
@@ -230,10 +341,11 @@ CalcState CALCULATE_LIBRARY_API compute_duration_for_parking_ticket(
|
||||
qCritical() << " start (cs): " << cs;
|
||||
qCritical() << " price: " << price;
|
||||
|
||||
duration = calculator.GetDurationFromCost(tariff, PaymentOption::Option1,
|
||||
duration = Calculator::GetInstance().GetDurationFromCost(tariff,
|
||||
tariff->getPaymentOptions().pop_payment_method_id,
|
||||
cs.toLocal8Bit().constData(),
|
||||
price, false, true).c_str();
|
||||
QDateTime d = QDateTime::fromString(duration);
|
||||
QDateTime d = QDateTime::fromString(duration, Qt::ISODate);
|
||||
if (!d.isValid()) {
|
||||
calcState.setDesc(QString("ticketEndTime=%1").arg(duration));
|
||||
return calcState.set(CalcState::State::WRONG_ISO_TIME_FORMAT);
|
||||
@@ -249,12 +361,14 @@ CalcState CALCULATE_LIBRARY_API compute_duration_for_parking_ticket(
|
||||
parking_tariff_t *tariff,
|
||||
QDateTime const &start_parking_time,
|
||||
double price,
|
||||
QDateTime &ticketEndTime) {
|
||||
QDateTime &ticketEndTime)
|
||||
{
|
||||
CalcState calcState;
|
||||
if (start_parking_time.isValid()) {
|
||||
QString cs = start_parking_time.toString(Qt::ISODate);
|
||||
QString endTime = calculator.GetDurationFromCost(
|
||||
tariff, PaymentOption::Option1,
|
||||
QString endTime = Calculator::GetInstance().GetDurationFromCost(
|
||||
tariff,
|
||||
tariff->getPaymentOptions().pop_payment_method_id,
|
||||
cs.toLocal8Bit().constData(),
|
||||
price, false, true).c_str();
|
||||
ticketEndTime = QDateTime::fromString(endTime,Qt::ISODate);
|
||||
@@ -275,11 +389,28 @@ CalcState CALCULATE_LIBRARY_API compute_duration_for_parking_ticket(
|
||||
return calcState.set(CalcState::State::SUCCESS);
|
||||
}
|
||||
|
||||
CalcState CALCULATE_LIBRARY_API compute_duration_for_daily_ticket(parking_tariff_t *tariff, QString const &start_parking_time,uint8_t paymentMethod)
|
||||
CalcState CALCULATE_LIBRARY_API compute_duration_for_daily_ticket(parking_tariff_t *tariff, QDateTime const &start_parking_time, QDateTime &ticketEndTime)
|
||||
{
|
||||
CalcState calcState;
|
||||
QString result = calculator.GetDailyTicketDuration(tariff, start_parking_time, PaymentOption::Option1,false);
|
||||
qDebug() << "DailyTicket() => " + result;
|
||||
if (start_parking_time.isValid()) {
|
||||
|
||||
ticketEndTime = Calculator::GetInstance().GetDailyTicketDuration(tariff,
|
||||
start_parking_time,
|
||||
tariff->getPaymentOptions().pop_payment_method_id,
|
||||
false); // carry over
|
||||
|
||||
// DEBUG
|
||||
qCritical() << "compute_duration_for_daily_ticket(): ";
|
||||
qCritical() << " ticketEndTime: " << ticketEndTime;
|
||||
|
||||
if (!ticketEndTime.isValid()) {
|
||||
calcState.setDesc(QString("ticketEndTime=%1").arg(ticketEndTime.toString(Qt::ISODate)));
|
||||
return calcState.set(CalcState::State::WRONG_ISO_TIME_FORMAT);
|
||||
}
|
||||
|
||||
} else {
|
||||
return calcState.set(CalcState::State::INVALID_START_DATE);
|
||||
}
|
||||
|
||||
return calcState.set(CalcState::State::SUCCESS);
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,10 @@
|
||||
#include "configuration.h"
|
||||
#include "tariff_timebase.h"
|
||||
#include "time_range_header.h"
|
||||
#include "tariff_timestep_config.h"
|
||||
|
||||
#include <QString>
|
||||
#include <QDebug>
|
||||
|
||||
/// <inheritdoc/>
|
||||
MemberType Configuration::IdentifyJsonMember(const char* member_name)
|
||||
@@ -13,7 +19,12 @@ MemberType Configuration::IdentifyJsonMember(const char* member_name)
|
||||
if (strcmp(member_name, "SpecialDaysWorktime") == 0) return MemberType::SpecialDaysWorktimeType;
|
||||
if (strcmp(member_name, "SpecialDays") == 0) return MemberType::SpecialDaysType;
|
||||
if (strcmp(member_name, "PeriodYear") == 0) return MemberType::PeriodYearType;
|
||||
else return MemberType::UnknownType;
|
||||
if (strcmp(member_name, "DailyTicket") == 0) return MemberType::DailyTicketType;
|
||||
if (strcmp(member_name, "TimeBase") == 0) return MemberType::TimeBaseType;
|
||||
if (strcmp(member_name, "Customer") == 0) return MemberType::CustomerType;
|
||||
if (strcmp(member_name, "TimeRange") == 0) return MemberType::TimeRangeType;
|
||||
if (strcmp(member_name, "TimeStepConfig") == 0) return MemberType::TimeStepConfigType;
|
||||
else return MemberType::UnknownType;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
@@ -59,25 +70,32 @@ bool Configuration::ParseJson(Configuration* cfg, const char* json)
|
||||
|| !document.HasMember("PaymentRate")
|
||||
|| !document.HasMember("Duration")
|
||||
//|| !document.HasMember("WeekDays")
|
||||
|| !document.HasMember("SpecialDaysWorktime")
|
||||
|| !document.HasMember("SpecialDays"))
|
||||
//|| !document.HasMember("SpecialDaysWorktime")
|
||||
//|| !document.HasMember("SpecialDays")
|
||||
)
|
||||
{
|
||||
printf("%s", "Error: not a valid configuration JSON\n");
|
||||
return false;
|
||||
}
|
||||
printf("%s", "Valid JSON configuration identified\n");
|
||||
|
||||
ATBCurrency Currency;
|
||||
ATBDuration Duration;
|
||||
ATBPaymentMethod PaymentMethod;
|
||||
ATBPaymentRate PaymentRate;
|
||||
ATBSpecialDaysWorktime SpecialDaysWorktime;
|
||||
ATBSpecialDays SpecialDays;
|
||||
ATBWeekDays WeekDays;
|
||||
ATBWeekDaysWorktime WeekDaysWorktime;
|
||||
ATBPaymentOption PaymentOption;
|
||||
ATBPeriodYear YearPeriod;
|
||||
MemberType mb_type;
|
||||
ATBCurrency Currency;
|
||||
ATBDuration Duration;
|
||||
ATBPaymentMethod PaymentMethod;
|
||||
ATBPaymentRate PaymentRate;
|
||||
ATBSpecialDaysWorktime SpecialDaysWorktime;
|
||||
ATBSpecialDays SpecialDays;
|
||||
ATBWeekDays WeekDays;
|
||||
ATBWeekDaysWorktime WeekDaysWorktime;
|
||||
ATBPaymentOption PaymentOption;
|
||||
ATBPeriodYear YearPeriod;
|
||||
ATBDailyTicket DailyTicket;
|
||||
ATBTimeBase TimeBase;
|
||||
ATBCustomer Customer;
|
||||
ATBTimeRange TimeRange;
|
||||
ATBTimeStepConfig TimeStepConfig;
|
||||
|
||||
MemberType mb_type = MemberType::UnknownType;
|
||||
|
||||
// Get all JSON object members
|
||||
// This code should run only once (to load JSON variables into memory)
|
||||
@@ -87,22 +105,35 @@ bool Configuration::ParseJson(Configuration* cfg, const char* json)
|
||||
const char* mb_name = i->name.GetString();
|
||||
if (mb_name == NULL) continue;
|
||||
|
||||
// if (!document[mb_name].IsArray()) {
|
||||
std::string const _mb_name(mb_name);
|
||||
if (_mb_name == "version" || _mb_name == "project" ||
|
||||
_mb_name == "zone" || _mb_name == "info") {
|
||||
if (document[mb_name].IsString()) {
|
||||
QString const _mb_name(mb_name);
|
||||
if (_mb_name.startsWith("Project", Qt::CaseInsensitive)) {
|
||||
cfg->project.project = document[mb_name].GetString();
|
||||
continue;
|
||||
}
|
||||
if (_mb_name.startsWith("Version", Qt::CaseInsensitive)) {
|
||||
cfg->project.version = document[mb_name].GetString();
|
||||
continue;
|
||||
}
|
||||
// }
|
||||
if (_mb_name.startsWith("Info", Qt::CaseInsensitive)) {
|
||||
cfg->project.info = document[mb_name].GetString();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
//printf(" -%s\n", mb_name);
|
||||
// ... everything else should be an array
|
||||
if (!document[mb_name].IsArray()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
printf(" -%s\n", mb_name);
|
||||
|
||||
// Get array for each JSON object member
|
||||
auto mb_array = document[mb_name].GetArray();
|
||||
if (mb_array.Size() <= 0) break;
|
||||
|
||||
//Iterate over provided array
|
||||
for (auto j = 0; j < mb_array.Size(); j++)
|
||||
for (rapidjson::SizeType j = 0; j < mb_array.Size(); j++)
|
||||
{
|
||||
// Get all inner objects, don't print name if NULL
|
||||
auto inner_obj = mb_array[j].GetObject();
|
||||
@@ -122,12 +153,150 @@ bool Configuration::ParseJson(Configuration* cfg, const char* json)
|
||||
// Identify member type
|
||||
mb_type = IdentifyJsonMember(mb_name);
|
||||
|
||||
//#pragma region Get_values
|
||||
switch (mb_type)
|
||||
{
|
||||
case MemberType::UnknownType:
|
||||
break;
|
||||
case MemberType::CurrencyType:
|
||||
case MemberType::TimeRangeType:
|
||||
if (QString(inner_obj_name) == QString("time_range_id")) {
|
||||
if (k->value.IsInt()) {
|
||||
TimeRange.time_range_id = k->value.GetInt();
|
||||
}
|
||||
} else
|
||||
if (QString(inner_obj_name) == QString("time_range_from")) {
|
||||
if (k->value.IsString()) {
|
||||
QTime timeRangeFrom = QTime::fromString(QString::fromStdString(k->value.GetString()), Qt::ISODate);
|
||||
TimeRange.time_range_from = timeRangeFrom;
|
||||
}
|
||||
} else
|
||||
if (QString(inner_obj_name) == QString("time_range_to")) {
|
||||
if (k->value.IsString()) {
|
||||
QTime timeRangeTo = QTime::fromString(QString::fromStdString(k->value.GetString()), Qt::ISODate);
|
||||
TimeRange.time_range_to = timeRangeTo;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case MemberType::TimeBaseType:
|
||||
if (QString(inner_obj_name) == QString("tbase_id")) {
|
||||
if (k->value.IsInt()) {
|
||||
TimeBase.tbase_id = k->value.GetInt();
|
||||
}
|
||||
} else
|
||||
if (QString(inner_obj_name) == QString("tbase_type")) {
|
||||
if (k->value.IsInt()) {
|
||||
int timeBase = k->value.GetInt();
|
||||
switch (timeBase) {
|
||||
case (int)ATBTimeBase::TimeBaseType::ABSOLUTE:
|
||||
TimeBase.tbase_type = ATBTimeBase::TimeBaseType::ABSOLUTE;
|
||||
break;
|
||||
case (int)ATBTimeBase::TimeBaseType::RELATIVE:
|
||||
TimeBase.tbase_type = ATBTimeBase::TimeBaseType::RELATIVE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case MemberType::TimeStepConfigType:
|
||||
if (QString(inner_obj_name) == QString("tsconfig_id")) {
|
||||
if (k->value.IsInt()) {
|
||||
TimeStepConfig.tsconfig_id = k->value.GetInt();
|
||||
}
|
||||
} else
|
||||
if (QString(inner_obj_name) == QString("tsconfig_label")) {
|
||||
if (k->value.IsString()) {
|
||||
TimeStepConfig.tsconfig_label = QString::fromStdString(k->value.GetString());
|
||||
}
|
||||
}
|
||||
break;
|
||||
case MemberType::DailyTicketType:
|
||||
if (QString(inner_obj_name) == QString("daily_ticket_payment_option_id")) {
|
||||
if (k->value.IsInt()) {
|
||||
DailyTicket.daily_ticket_payment_option_id = k->value.GetInt();
|
||||
}
|
||||
} else
|
||||
if (QString(inner_obj_name) == QString("daily_ticket_unit_id")) {
|
||||
if (k->value.IsInt()) {
|
||||
DailyTicket.daily_ticket_unit_id = k->value.GetInt();
|
||||
}
|
||||
} else
|
||||
if (QString(inner_obj_name) == QString("daily_ticket_price")) {
|
||||
if (k->value.IsInt()) {
|
||||
DailyTicket.daily_ticket_price = k->value.GetInt();
|
||||
}
|
||||
} else
|
||||
if (QString(inner_obj_name) == QString("daily_ticket_tbase_type")) {
|
||||
if (k->value.IsInt()) {
|
||||
int baseType = k->value.GetInt();
|
||||
switch(baseType) {
|
||||
case (int)ATBTimeBase::TimeBaseType::ABSOLUTE:
|
||||
DailyTicket.daily_ticket_tbase_type = ATBTimeBase::TimeBaseType::ABSOLUTE;
|
||||
break;
|
||||
case (int)ATBTimeBase::TimeBaseType::RELATIVE:
|
||||
DailyTicket.daily_ticket_tbase_type = ATBTimeBase::TimeBaseType::RELATIVE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else
|
||||
if (QString(inner_obj_name) == QString("daily_ticket_clearance_customer_type")) {
|
||||
if (k->value.IsInt()) {
|
||||
int CustomerType = k->value.GetInt();
|
||||
switch (CustomerType) {
|
||||
case (int)ATBCustomer::CustomerType::ADULT:
|
||||
DailyTicket.daily_ticket_clearance_customer_type = ATBCustomer::CustomerType::ADULT;
|
||||
break;
|
||||
case (int)ATBCustomer::CustomerType::CHILD:
|
||||
DailyTicket.daily_ticket_clearance_customer_type = ATBCustomer::CustomerType::CHILD;
|
||||
break;
|
||||
case (int)ATBCustomer::CustomerType::TEEN:
|
||||
DailyTicket.daily_ticket_clearance_customer_type = ATBCustomer::CustomerType::TEEN;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else
|
||||
if (QString(inner_obj_name) == QString("daily_ticket_weekday_range")) {
|
||||
if (k->value.IsInt()) {
|
||||
DailyTicket.daily_ticket_weekday_range = k->value.GetInt();
|
||||
}
|
||||
} else
|
||||
if (QString(inner_obj_name) == QString("daily_ticket_special_day_range")) {
|
||||
if (k->value.IsInt()) {
|
||||
DailyTicket.daily_ticket_special_day_range = k->value.GetInt();
|
||||
}
|
||||
}
|
||||
break;
|
||||
case MemberType::CustomerType:
|
||||
if (QString(inner_obj_name) == QString("cust_type")) {
|
||||
if (k->value.IsInt()) {
|
||||
int cust_type = k->value.GetInt();
|
||||
switch (cust_type) {
|
||||
case (int)ATBCustomer::CustomerType::ADULT:
|
||||
Customer.cust_type = ATBCustomer::CustomerType::ADULT;
|
||||
break;
|
||||
case (int)ATBCustomer::CustomerType::CHILD:
|
||||
Customer.cust_type = ATBCustomer::CustomerType::CHILD;
|
||||
break;
|
||||
case (int)ATBCustomer::CustomerType::TEEN:
|
||||
Customer.cust_type = ATBCustomer::CustomerType::TEEN;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else
|
||||
if (QString(inner_obj_name) == QString("cust_label")) {
|
||||
if (k->value.IsString()) {
|
||||
QString label(QString::fromStdString(k->value.GetString()));
|
||||
if (label.contains("ADULT", Qt::CaseInsensitive)) {
|
||||
Customer.cust_label = label;
|
||||
} else
|
||||
if (label.contains("CHILD", Qt::CaseInsensitive)) {
|
||||
Customer.cust_label = label;
|
||||
} else
|
||||
if (label.contains("TEEN", Qt::CaseInsensitive)) {
|
||||
Customer.cust_label = label;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case MemberType::CurrencyType:
|
||||
if (strcmp(inner_obj_name, "pcu_id") == 0) Currency.pcu_id = k->value.GetInt();
|
||||
else if (strcmp(inner_obj_name, "pcu_sign") == 0) Currency.pcu_sign = k->value.GetString();
|
||||
else if (strcmp(inner_obj_name, "pcu_major") == 0) Currency.pcu_major = k->value.GetString();
|
||||
@@ -154,13 +323,19 @@ bool Configuration::ParseJson(Configuration* cfg, const char* json)
|
||||
else if (strcmp(inner_obj_name, "pop_max_time") == 0) PaymentOption.pop_max_time = k->value.GetDouble();
|
||||
else if (strcmp(inner_obj_name, "pop_min_price") == 0) PaymentOption.pop_min_price = k->value.GetDouble();
|
||||
else if (strcmp(inner_obj_name, "pop_carry_over") == 0) PaymentOption.pop_carry_over = k->value.GetInt();
|
||||
else if (strcmp(inner_obj_name, "pop_carry_over_time_range_id") == 0) PaymentOption.pop_carry_over_time_range_id = k->value.GetInt();
|
||||
else if (strcmp(inner_obj_name, "pop_daily_card_price") == 0) PaymentOption.pop_daily_card_price = k->value.GetInt();
|
||||
break;
|
||||
else if (strcmp(inner_obj_name, "pop_business_hours") == 0) PaymentOption.pop_business_hours = k->value.GetInt();
|
||||
else if (strcmp(inner_obj_name, "pop_time_step_config") == 0) PaymentOption.pop_time_step_config = k->value.GetInt();
|
||||
this->currentPaymentOptions = PaymentOption;
|
||||
break;
|
||||
case MemberType::DurationType:
|
||||
if (strcmp(inner_obj_name, "pun_id") == 0) Duration.pun_id = k->value.GetInt();
|
||||
else if (strcmp(inner_obj_name, "pun_label") == 0) Duration.pun_label = k->value.GetString();
|
||||
else if (strcmp(inner_obj_name, "pun_duration") == 0) Duration.pun_duration = k->value.GetDouble();
|
||||
break;
|
||||
else if (strcmp(inner_obj_name, "pun_duration_min") == 0) Duration.pun_duration_min = k->value.GetInt();
|
||||
else if (strcmp(inner_obj_name, "pun_duration_max") == 0) Duration.pun_duration_max = k->value.GetInt();
|
||||
break;
|
||||
case MemberType::SpecialDaysWorktimeType:
|
||||
if (strcmp(inner_obj_name, "pedwt_id") == 0) SpecialDaysWorktime.pedwt_id = k->value.GetInt();
|
||||
else if (strcmp(inner_obj_name, "pedwt_period_exc_day_id") == 0) SpecialDaysWorktime.pedwt_period_exc_day_id = k->value.GetInt();
|
||||
@@ -178,7 +353,8 @@ bool Configuration::ParseJson(Configuration* cfg, const char* json)
|
||||
else if (strcmp(inner_obj_name, "pwd_period_week_day_id") == 0) WeekDaysWorktime.pwd_period_week_day_id = k->value.GetInt();
|
||||
else if (strcmp(inner_obj_name, "pwd_period_day_in_week_id") == 0) WeekDaysWorktime.pwd_period_day_in_week_id = k->value.GetInt();
|
||||
else if (strcmp(inner_obj_name, "pwd_time_from") == 0) WeekDaysWorktime.pwd_time_from = k->value.GetString();
|
||||
else if (strcmp(inner_obj_name, "pwd_time_to") == 0) WeekDaysWorktime.pwd_time_to = k->value.GetString();
|
||||
else if (strcmp(inner_obj_name, "pwd_time_to") == 0) WeekDaysWorktime.pwd_time_to = k->value.GetString();
|
||||
break;
|
||||
case MemberType::SpecialDaysType:
|
||||
if (strcmp(inner_obj_name, "ped_id") == 0) SpecialDays.ped_id = k->value.GetInt();
|
||||
else if (strcmp(inner_obj_name, "ped_label") == 0) SpecialDays.ped_label = k->value.GetString();
|
||||
@@ -233,7 +409,25 @@ bool Configuration::ParseJson(Configuration* cfg, const char* json)
|
||||
case MemberType::PeriodYearType:
|
||||
cfg->YearPeriod.insert(pair<int, ATBPeriodYear>(YearPeriod.pye_id, YearPeriod));
|
||||
break;
|
||||
default:
|
||||
case MemberType::DailyTicketType:
|
||||
// qCritical() << DailyTicket;
|
||||
break;
|
||||
case MemberType::CustomerType:
|
||||
// qCritical() << Customer;
|
||||
break;
|
||||
case MemberType::TimeBaseType:
|
||||
qCritical() << TimeBase;
|
||||
cfg->TimeBase.insert(pair<int, ATBTimeBase>(TimeBase.tbase_id, TimeBase));
|
||||
break;
|
||||
case MemberType::TimeRangeType:
|
||||
qCritical() << TimeRange;
|
||||
cfg->TimeRange.insert(pair<int, ATBTimeRange>(TimeRange.time_range_id, TimeRange));
|
||||
break;
|
||||
case MemberType::TimeStepConfigType:
|
||||
qCritical() << TimeStepConfig;
|
||||
cfg->TimeStepConfig.insert(pair<int, ATBTimeStepConfig>(TimeStepConfig.tsconfig_id, TimeStepConfig));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -245,3 +439,13 @@ bool Configuration::ParseJson(Configuration* cfg, const char* json)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
ATBPaymentOption const &Configuration::getPaymentOptions() const {
|
||||
return this->currentPaymentOptions;
|
||||
}
|
||||
|
||||
ATBPaymentOption &Configuration::getPaymentOptions() {
|
||||
return this->currentPaymentOptions;
|
||||
}
|
||||
|
85
library/src/ticket.cpp
Normal file
85
library/src/ticket.cpp
Normal file
@@ -0,0 +1,85 @@
|
||||
#include "ticket.h"
|
||||
|
||||
Ticket::Ticket()
|
||||
: m_status(Ticket::s[NOT_INITIALIZED])
|
||||
, m_validFrom()
|
||||
, m_validUntil()
|
||||
, m_durationMinutesNetto(0)
|
||||
, m_durationMinutesBrutto(0)
|
||||
, m_price() {
|
||||
}
|
||||
|
||||
Ticket::Ticket(QDateTime const &s, QDateTime const &e,
|
||||
int durationMinutesNetto, int durationMinutesBrutto,
|
||||
uint32_t price, Ticket::Status status)
|
||||
: m_status(status)
|
||||
, m_validFrom(s)
|
||||
, m_validUntil(e)
|
||||
, m_durationMinutesNetto(durationMinutesNetto)
|
||||
, m_durationMinutesBrutto(durationMinutesBrutto)
|
||||
, m_price(price) {
|
||||
}
|
||||
|
||||
|
||||
Ticket::Status Ticket::setStatus(Status status) {
|
||||
Status old = m_status;
|
||||
m_status = status;
|
||||
return old;
|
||||
}
|
||||
|
||||
Ticket::Status Ticket::getStatus() const {
|
||||
return m_status;
|
||||
}
|
||||
|
||||
void Ticket::setValidFrom(QDateTime const &validFrom) {
|
||||
m_validFrom = validFrom;
|
||||
}
|
||||
|
||||
void Ticket::setValidUntil(QDateTime const &validUntil) {
|
||||
m_validUntil = validUntil;
|
||||
}
|
||||
|
||||
QDateTime Ticket::getValidFrom() const {
|
||||
if (std::get<CODE>(m_status) == VALID) {
|
||||
return m_validFrom;
|
||||
}
|
||||
return QDateTime();
|
||||
}
|
||||
|
||||
QDateTime Ticket::getValidUntil() const {
|
||||
if (std::get<CODE>(m_status) == VALID) {
|
||||
return m_validUntil;
|
||||
}
|
||||
return QDateTime();
|
||||
}
|
||||
|
||||
uint32_t Ticket::getPrice() const {
|
||||
return m_price;
|
||||
}
|
||||
|
||||
void Ticket::setPrice(uint32_t price) {
|
||||
m_price = price;
|
||||
}
|
||||
|
||||
Ticket::operator QString() {
|
||||
QStringList status;
|
||||
status << QString("**********************");
|
||||
status << QString("Status ............. : %1 (%2)")
|
||||
.arg(std::get<0>(m_status))
|
||||
.arg(std::get<2>(m_status));
|
||||
status << QString("Valid from ......... : %1").arg(m_validFrom.toString(Qt::ISODate));
|
||||
status << QString("Valid until ........ : %1").arg(m_validUntil.toString(Qt::ISODate));
|
||||
status << QString("Duration (netto) ... : %1").arg(m_durationMinutesNetto);
|
||||
status << QString("Duration (brutto)... : %1").arg(m_durationMinutesBrutto);
|
||||
status << QString("Price .............. : %1").arg(m_price);
|
||||
status << QString("**********************");
|
||||
|
||||
return status.join('\n');
|
||||
}
|
||||
|
||||
QDebug operator<<(QDebug debug, Ticket::Status const &status) {
|
||||
QDebugStateSaver saver(debug);
|
||||
debug << "Ticket-Status: " << std::get<1>(status)
|
||||
<< "(" << std::get<2>(status) << ")";
|
||||
return debug;
|
||||
}
|
@@ -1,273 +1,429 @@
|
||||
#include "utilities.h"
|
||||
#include "tariff_log.h"
|
||||
|
||||
static int protection_counter = 0;
|
||||
|
||||
/// <summary>
|
||||
/// Helper function
|
||||
/// </summary>
|
||||
/// <param name="pra_price"></param>
|
||||
/// <returns></returns>
|
||||
double Utilities::CalculatePricePerUnit(double pra_price, double durationUnit)
|
||||
{
|
||||
try
|
||||
{
|
||||
double price_per_unit = pra_price;
|
||||
double unit = durationUnit;
|
||||
|
||||
if(unit < 0 || unit > 65535 ) unit = 60.0f;
|
||||
price_per_unit /= unit; // Divided by 60 because price per unit is set per hour and we are using minutes
|
||||
//printf("Price per unit (min) is: %lf\n", price_per_unit);
|
||||
return price_per_unit;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
throw std::invalid_argument("An error has occurred in CalculatePricePerUnit() function\n");
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
time_t Utilities::GetCurrentLocalTime()
|
||||
{
|
||||
try
|
||||
{
|
||||
time_t curr_time = time(NULL);
|
||||
tm tm_curr_time = {};
|
||||
memset(&tm_curr_time, '\0', sizeof(struct tm));
|
||||
|
||||
tm_curr_time = *localtime(&curr_time);
|
||||
curr_time = mktime(&tm_curr_time); //- timezone;
|
||||
return curr_time;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
throw std::invalid_argument("An error has occurred in GetCurrentLocalTime() function\n");
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
int Utilities::ZellersAlgorithm(int day, int month, int year)
|
||||
{
|
||||
int mon;
|
||||
if (month > 2) mon = month; //for march to december month code is same as month
|
||||
else {
|
||||
mon = (12 + month); //for Jan and Feb, month code will be 13 and 14
|
||||
year--; //decrease year for month Jan and Feb
|
||||
}
|
||||
int y = year % 100; //last two digit
|
||||
int c = year / 100; //first two digit
|
||||
int w = (day + floor((13 * (mon + 1)) / 5) + y + floor(y / 4) + floor(c / 4) + (5 * c));
|
||||
w = ((w + 5) % 7) + 1; //w % 7;
|
||||
return w;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
struct tm Utilities::DateToStructTm(const char* dateStr)
|
||||
{
|
||||
struct tm t = {};
|
||||
memset(&t, '\0', sizeof(struct tm));
|
||||
|
||||
if (dateStr == nullptr || strlen(dateStr) <= 0) throw std::invalid_argument("DateToStructTm has failed parsing date string (null or empty)\n");
|
||||
try
|
||||
{
|
||||
int success = sscanf(dateStr, "%d-%d-%d", &t.tm_year, &t.tm_mon, &t.tm_mday);
|
||||
if (success != 3) throw std::invalid_argument("DateToStructTm() has failed parsing datetime string\n");
|
||||
|
||||
t.tm_year = t.tm_year - 1900;
|
||||
t.tm_mon = t.tm_mon - 1;
|
||||
t.tm_isdst = 0;
|
||||
return t;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
throw std::invalid_argument("An error has occurred in DateToStructTm() function\n");
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
struct tm Utilities::TimeToStructTm(const char* timeStr, int year, int mon, int mday, int wday)
|
||||
{
|
||||
struct tm t = {};
|
||||
memset(&t, '\0', sizeof(struct tm));
|
||||
|
||||
if (timeStr == nullptr || strlen(timeStr) <= 0) throw std::invalid_argument("TimeToStructTm() has failed parsing time string (null or empty)\n");
|
||||
try
|
||||
{
|
||||
int success_time = sscanf(timeStr, "%d:%d:%d", &t.tm_hour, &t.tm_min, &t.tm_sec);
|
||||
if (success_time != 3) throw std::invalid_argument("TimeToStructTm() has failed parsing time string\n");
|
||||
|
||||
struct tm tm_struct;
|
||||
t.tm_year = year;
|
||||
t.tm_mon = mon;
|
||||
t.tm_mday = mday;
|
||||
t.tm_wday = wday;
|
||||
t.tm_isdst = 0;
|
||||
return t;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
throw std::invalid_argument("An error has occurred in TimeToStructTm() function\n");
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
struct tm Utilities::DateTimeToStructTm(const char* dateTimeStr)
|
||||
{
|
||||
struct tm t = {};
|
||||
memset(&t, '\0', sizeof(struct tm));
|
||||
|
||||
if (dateTimeStr == nullptr || strlen(dateTimeStr) <= 0) throw std::invalid_argument("DateTimeToStructTm() has failed parsing date string (null or empty)");
|
||||
try
|
||||
{
|
||||
int success = sscanf(dateTimeStr, "%d-%d-%dT%d:%d:%dZ", &t.tm_year, &t.tm_mon, &t.tm_mday, &t.tm_hour, &t.tm_min, &t.tm_sec);
|
||||
if (success != 6) throw std::invalid_argument("DateTimeToStructTm() has failed parsing datetime string\n");
|
||||
|
||||
t.tm_year = t.tm_year - 1900;
|
||||
t.tm_mon = t.tm_mon - 1;
|
||||
t.tm_isdst = 0;
|
||||
return t;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
throw std::invalid_argument("An error has occurred in DateTimeToStructTm() function\n");
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
DayOfWeek Utilities::GetDayOfWeek(struct tm* t)
|
||||
{
|
||||
if (t == nullptr) throw std::invalid_argument("GetDayOfWeekFromDate() => parameter 't' is null\n");
|
||||
try
|
||||
{
|
||||
int d = t->tm_mday;
|
||||
int m = t->tm_mon + 1;
|
||||
int y = t->tm_year + 1900;
|
||||
|
||||
int wd = Utilities::ZellersAlgorithm(d, m, y);
|
||||
return static_cast<DayOfWeek>(wd);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
throw std::invalid_argument("An error has occurred in GetDayOfWeekFromDate() function\n");
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
bool Utilities::IsYearPeriodActive(Configuration* cfg, struct tm* currentDateTime_tm)
|
||||
{
|
||||
if (cfg == nullptr) throw std::invalid_argument("IsYearPeriodActive() = > Configuration not set\n");
|
||||
if (currentDateTime_tm == nullptr) throw std::invalid_argument("IsYearPeriodActive() = > Current datetime not set\n");
|
||||
|
||||
try
|
||||
{
|
||||
//// Parse input date
|
||||
int dayCurrent = currentDateTime_tm->tm_mday;
|
||||
int monthCurrent = currentDateTime_tm->tm_mon + 1;
|
||||
|
||||
// Current date time
|
||||
int cdt = (monthCurrent * 100) + dayCurrent;
|
||||
|
||||
multimap<int, ATBPeriodYear>::iterator year_period_itr;
|
||||
for (year_period_itr = cfg->YearPeriod.begin(); year_period_itr != cfg->YearPeriod.end(); ++year_period_itr)
|
||||
{
|
||||
int dStart = year_period_itr->second.pye_start_day;
|
||||
int dEnd = year_period_itr->second.pye_end_day;
|
||||
|
||||
int mStart = year_period_itr->second.pye_start_month;
|
||||
int mEnd = year_period_itr->second.pye_end_month;
|
||||
|
||||
int start = (mStart * 100) + dStart;
|
||||
int end = (mEnd * 100) + dEnd;
|
||||
|
||||
if (cdt >= start && cdt <= end)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
cout << "IsYearPeriodActive() => An exception has occurred, ignoring check, returning true" << endl;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
bool Utilities::CheckSpecialDay(Configuration* cfg, const char* currentDateTimeStr, int* specialDayId, double* specialDayPrice)
|
||||
{
|
||||
try
|
||||
{
|
||||
*specialDayId = -1;
|
||||
*specialDayPrice = 0.0f;
|
||||
|
||||
if (cfg == nullptr) throw std::invalid_argument("CheckSpecialDay() => configuration is not set\n");
|
||||
if (currentDateTimeStr == nullptr) throw std::invalid_argument("CheckSpecialDay() => invalid date/time string set\n");
|
||||
|
||||
|
||||
struct tm current_tm = Utilities::DateTimeToStructTm(currentDateTimeStr);
|
||||
//cout << "CheckSpecialDay() => Current: " << asctime(¤t_tm) << endl;
|
||||
|
||||
multimap<int, ATBSpecialDays>::iterator spec_days_itr;
|
||||
|
||||
for (spec_days_itr = cfg->SpecialDays.begin(); spec_days_itr != cfg->SpecialDays.end(); spec_days_itr++)
|
||||
{
|
||||
int repeat_every_year = 0;
|
||||
repeat_every_year = spec_days_itr->second.ped_year;
|
||||
|
||||
string start = spec_days_itr->second.ped_date_start;
|
||||
if (start.length() <= 0) continue;
|
||||
//cout << "CheckSpecialDay() => Start: " << start << endl;
|
||||
|
||||
string end = spec_days_itr->second.ped_date_end;
|
||||
if (end.length() <= 0) continue;
|
||||
//cout << "CheckSpecialDay() => End: " << end << endl;
|
||||
|
||||
struct tm start_tm = Utilities::DateToStructTm(start.c_str());
|
||||
//cout << "CheckSpecialDay() => Start: " << asctime(&start_tm) << endl;
|
||||
|
||||
struct tm end_tm = Utilities::DateToStructTm(end.c_str());
|
||||
//cout << "CheckSpecialDay() => End: " << asctime(&end_tm) << endl;
|
||||
|
||||
if (repeat_every_year <= 0)
|
||||
{
|
||||
//cout << "CheckSpecialDay() => Repeat every year is: 0" << endl;
|
||||
if ((current_tm.tm_year == start_tm.tm_year) && (current_tm.tm_year == end_tm.tm_year))
|
||||
{
|
||||
if ((current_tm.tm_mon >= start_tm.tm_mon) && (current_tm.tm_mon <= end_tm.tm_mon))
|
||||
{
|
||||
//cout << "CheckSpecialDay() => Month is in range between start and end" << endl;
|
||||
if ((current_tm.tm_mday >= start_tm.tm_mday) && (current_tm.tm_mday <= end_tm.tm_mday))
|
||||
{
|
||||
LOG_DEBUG("CheckSpecialDay() => SPECIAL DAY");
|
||||
*specialDayId = spec_days_itr->second.ped_id;
|
||||
*specialDayPrice = cfg->SpecialDaysWorktime.find(*specialDayId)->second.pedwt_price;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((current_tm.tm_mon >= start_tm.tm_mon) && (current_tm.tm_mon <= end_tm.tm_mon))
|
||||
{
|
||||
//cout << "CheckSpecialDay() => Month is in range between start and end" << endl;
|
||||
if ((current_tm.tm_mday >= start_tm.tm_mday) && (current_tm.tm_mday <= end_tm.tm_mday))
|
||||
{
|
||||
LOG_DEBUG("CheckSpecialDay() => SPECIAL DAY");
|
||||
*specialDayId = spec_days_itr->second.ped_id;
|
||||
*specialDayPrice = cfg->SpecialDaysWorktime.find(*specialDayId)->second.pedwt_price;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//cout << "CheckSpecialDay() => NOT SPECIAL DAY" << endl;
|
||||
return false;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
throw std::invalid_argument("CheckSpecialDay() => An error has occurred\n");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
#include "utilities.h"
|
||||
#include "tariff_log.h"
|
||||
|
||||
#include <QDebug>
|
||||
#include <algorithm>
|
||||
|
||||
static int protection_counter = 0;
|
||||
|
||||
/// <summary>
|
||||
/// Helper function
|
||||
/// </summary>
|
||||
/// <param name="pra_price"></param>
|
||||
/// <returns></returns>
|
||||
double Utilities::CalculatePricePerUnit(double pra_price, double durationUnit)
|
||||
{
|
||||
try
|
||||
{
|
||||
double price_per_unit = pra_price;
|
||||
double unit = durationUnit;
|
||||
|
||||
if(unit < 0 || unit > 65535 ) unit = 60.0f;
|
||||
price_per_unit /= unit; // Divided by 60 because price per unit is set per hour and we are using minutes
|
||||
//printf("Price per unit (min) is: %lf\n", price_per_unit);
|
||||
return price_per_unit;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
throw std::invalid_argument("An error has occurred in CalculatePricePerUnit() function\n");
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
time_t Utilities::GetCurrentLocalTime()
|
||||
{
|
||||
try
|
||||
{
|
||||
time_t curr_time = time(NULL);
|
||||
tm tm_curr_time = {};
|
||||
memset(&tm_curr_time, '\0', sizeof(struct tm));
|
||||
|
||||
tm_curr_time = *localtime(&curr_time);
|
||||
curr_time = mktime(&tm_curr_time); //- timezone;
|
||||
return curr_time;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
throw std::invalid_argument("An error has occurred in GetCurrentLocalTime() function\n");
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
int Utilities::ZellersAlgorithm(int day, int month, int year)
|
||||
{
|
||||
int mon;
|
||||
if (month > 2) mon = month; //for march to december month code is same as month
|
||||
else {
|
||||
mon = (12 + month); //for Jan and Feb, month code will be 13 and 14
|
||||
year--; //decrease year for month Jan and Feb
|
||||
}
|
||||
int y = year % 100; //last two digit
|
||||
int c = year / 100; //first two digit
|
||||
int w = (day + floor((13 * (mon + 1)) / 5) + y + floor(y / 4) + floor(c / 4) + (5 * c));
|
||||
w = ((w + 5) % 7) + 1; //w % 7;
|
||||
return w;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
struct tm Utilities::DateToStructTm(const char* dateStr)
|
||||
{
|
||||
struct tm t = {};
|
||||
memset(&t, '\0', sizeof(struct tm));
|
||||
|
||||
if (dateStr == nullptr || strlen(dateStr) <= 0) throw std::invalid_argument("DateToStructTm has failed parsing date string (null or empty)\n");
|
||||
try
|
||||
{
|
||||
int success = sscanf(dateStr, "%d-%d-%d", &t.tm_year, &t.tm_mon, &t.tm_mday);
|
||||
if (success != 3) throw std::invalid_argument("DateToStructTm() has failed parsing datetime string\n");
|
||||
|
||||
t.tm_year = t.tm_year - 1900;
|
||||
t.tm_mon = t.tm_mon - 1;
|
||||
t.tm_isdst = 0;
|
||||
return t;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
throw std::invalid_argument("An error has occurred in DateToStructTm() function\n");
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
struct tm Utilities::TimeToStructTm(const char* timeStr, int year, int mon, int mday, int wday)
|
||||
{
|
||||
struct tm t = {};
|
||||
memset(&t, '\0', sizeof(struct tm));
|
||||
|
||||
if (timeStr == nullptr || strlen(timeStr) <= 0) throw std::invalid_argument("TimeToStructTm() has failed parsing time string (null or empty)\n");
|
||||
try
|
||||
{
|
||||
int success_time = sscanf(timeStr, "%d:%d:%d", &t.tm_hour, &t.tm_min, &t.tm_sec);
|
||||
if (success_time != 3) throw std::invalid_argument("TimeToStructTm() has failed parsing time string\n");
|
||||
|
||||
struct tm tm_struct;
|
||||
t.tm_year = year;
|
||||
t.tm_mon = mon;
|
||||
t.tm_mday = mday;
|
||||
t.tm_wday = wday;
|
||||
t.tm_isdst = 0;
|
||||
return t;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
throw std::invalid_argument("An error has occurred in TimeToStructTm() function\n");
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
struct tm Utilities::DateTimeToStructTm(const char* dateTimeStr)
|
||||
{
|
||||
struct tm t = {};
|
||||
memset(&t, '\0', sizeof(struct tm));
|
||||
|
||||
if (dateTimeStr == nullptr || strlen(dateTimeStr) <= 0) throw std::invalid_argument("DateTimeToStructTm() has failed parsing date string (null or empty)");
|
||||
try
|
||||
{
|
||||
int success = sscanf(dateTimeStr, "%d-%d-%dT%d:%d:%dZ", &t.tm_year, &t.tm_mon, &t.tm_mday, &t.tm_hour, &t.tm_min, &t.tm_sec);
|
||||
if (success != 6) throw std::invalid_argument("DateTimeToStructTm() has failed parsing datetime string\n");
|
||||
|
||||
t.tm_year = t.tm_year - 1900;
|
||||
t.tm_mon = t.tm_mon - 1;
|
||||
t.tm_isdst = 0;
|
||||
return t;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
throw std::invalid_argument("An error has occurred in DateTimeToStructTm() function\n");
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
DayOfWeek Utilities::GetDayOfWeek(struct tm* t)
|
||||
{
|
||||
if (t == nullptr) throw std::invalid_argument("GetDayOfWeekFromDate() => parameter 't' is null\n");
|
||||
try
|
||||
{
|
||||
int d = t->tm_mday;
|
||||
int m = t->tm_mon + 1;
|
||||
int y = t->tm_year + 1900;
|
||||
|
||||
int wd = Utilities::ZellersAlgorithm(d, m, y);
|
||||
return static_cast<DayOfWeek>(wd);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
throw std::invalid_argument("An error has occurred in GetDayOfWeekFromDate() function\n");
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
bool Utilities::IsYearPeriodActive(Configuration* cfg, struct tm* currentDateTime_tm)
|
||||
{
|
||||
if (cfg == nullptr) throw std::invalid_argument("IsYearPeriodActive() = > Configuration not set\n");
|
||||
if (currentDateTime_tm == nullptr) throw std::invalid_argument("IsYearPeriodActive() = > Current datetime not set\n");
|
||||
|
||||
try
|
||||
{
|
||||
//// Parse input date
|
||||
int dayCurrent = currentDateTime_tm->tm_mday;
|
||||
int monthCurrent = currentDateTime_tm->tm_mon + 1;
|
||||
|
||||
// Current date time
|
||||
int cdt = (monthCurrent * 100) + dayCurrent;
|
||||
|
||||
multimap<int, ATBPeriodYear>::iterator year_period_itr;
|
||||
for (year_period_itr = cfg->YearPeriod.begin(); year_period_itr != cfg->YearPeriod.end(); ++year_period_itr)
|
||||
{
|
||||
int dStart = year_period_itr->second.pye_start_day;
|
||||
int dEnd = year_period_itr->second.pye_end_day;
|
||||
|
||||
int mStart = year_period_itr->second.pye_start_month;
|
||||
int mEnd = year_period_itr->second.pye_end_month;
|
||||
|
||||
int start = (mStart * 100) + dStart;
|
||||
int end = (mEnd * 100) + dEnd;
|
||||
|
||||
if (cdt >= start && cdt <= end)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
cout << "IsYearPeriodActive() => An exception has occurred, ignoring check, returning true" << endl;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
bool Utilities::IsYearPeriodActive(Configuration const *cfg, QDateTime const &dt) {
|
||||
if ((cfg->YearPeriod.size() > 0) &&
|
||||
std::none_of(cfg->YearPeriod.cbegin(),
|
||||
cfg->YearPeriod.cend(),
|
||||
[&dt](std::pair<int, ATBPeriodYear> const &year) {
|
||||
QDate const d(2004, // 2004 is a leap year
|
||||
dt.date().month(),
|
||||
dt.date().day());
|
||||
QDate const s(2004, year.second.pye_start_month, year.second.pye_start_day);
|
||||
QDate const e(2004, year.second.pye_end_month, year.second.pye_end_day);
|
||||
return (d >= s && d <= e);
|
||||
})) {
|
||||
qCritical() << "NO VALID YEAR PERIOD";
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
bool Utilities::CheckSpecialDay(Configuration* cfg, const char* currentDateTimeStr, int* specialDayId, double* specialDayPrice)
|
||||
{
|
||||
try
|
||||
{
|
||||
*specialDayId = -1;
|
||||
*specialDayPrice = 0.0f;
|
||||
|
||||
if (cfg == nullptr) throw std::invalid_argument("CheckSpecialDay() => configuration is not set\n");
|
||||
if (currentDateTimeStr == nullptr) throw std::invalid_argument("CheckSpecialDay() => invalid date/time string set\n");
|
||||
|
||||
|
||||
struct tm current_tm = Utilities::DateTimeToStructTm(currentDateTimeStr);
|
||||
//cout << "CheckSpecialDay() => Current: " << asctime(¤t_tm) << endl;
|
||||
|
||||
multimap<int, ATBSpecialDays>::iterator spec_days_itr;
|
||||
|
||||
for (spec_days_itr = cfg->SpecialDays.begin(); spec_days_itr != cfg->SpecialDays.end(); spec_days_itr++)
|
||||
{
|
||||
int repeat_every_year = 0;
|
||||
repeat_every_year = spec_days_itr->second.ped_year;
|
||||
|
||||
string start = spec_days_itr->second.ped_date_start;
|
||||
if (start.length() <= 0) continue;
|
||||
//cout << "CheckSpecialDay() => Start: " << start << endl;
|
||||
|
||||
string end = spec_days_itr->second.ped_date_end;
|
||||
if (end.length() <= 0) continue;
|
||||
//cout << "CheckSpecialDay() => End: " << end << endl;
|
||||
|
||||
struct tm start_tm = Utilities::DateToStructTm(start.c_str());
|
||||
//cout << "CheckSpecialDay() => Start: " << asctime(&start_tm) << endl;
|
||||
|
||||
struct tm end_tm = Utilities::DateToStructTm(end.c_str());
|
||||
//cout << "CheckSpecialDay() => End: " << asctime(&end_tm) << endl;
|
||||
|
||||
if (repeat_every_year <= 0)
|
||||
{
|
||||
//cout << "CheckSpecialDay() => Repeat every year is: 0" << endl;
|
||||
if ((current_tm.tm_year == start_tm.tm_year) && (current_tm.tm_year == end_tm.tm_year))
|
||||
{
|
||||
if ((current_tm.tm_mon >= start_tm.tm_mon) && (current_tm.tm_mon <= end_tm.tm_mon))
|
||||
{
|
||||
//cout << "CheckSpecialDay() => Month is in range between start and end" << endl;
|
||||
if ((current_tm.tm_mday >= start_tm.tm_mday) && (current_tm.tm_mday <= end_tm.tm_mday))
|
||||
{
|
||||
LOG_DEBUG("CheckSpecialDay() => SPECIAL DAY");
|
||||
*specialDayId = spec_days_itr->second.ped_id;
|
||||
*specialDayPrice = cfg->SpecialDaysWorktime.find(*specialDayId)->second.pedwt_price;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((current_tm.tm_mon >= start_tm.tm_mon) && (current_tm.tm_mon <= end_tm.tm_mon))
|
||||
{
|
||||
//cout << "CheckSpecialDay() => Month is in range between start and end" << endl;
|
||||
if ((current_tm.tm_mday >= start_tm.tm_mday) && (current_tm.tm_mday <= end_tm.tm_mday))
|
||||
{
|
||||
LOG_DEBUG("CheckSpecialDay() => SPECIAL DAY");
|
||||
*specialDayId = spec_days_itr->second.ped_id;
|
||||
*specialDayPrice = cfg->SpecialDaysWorktime.find(*specialDayId)->second.pedwt_price;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//cout << "CheckSpecialDay() => NOT SPECIAL DAY" << endl;
|
||||
return false;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
throw std::invalid_argument("CheckSpecialDay() => An error has occurred\n");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool Utilities::CheckSpecialDay(Configuration const *cfg,
|
||||
QDateTime const ¤tDateTime,
|
||||
int* specialDayId,
|
||||
uint32_t *specialDayPrice) {
|
||||
*specialDayId = -1;
|
||||
*specialDayPrice = 0;
|
||||
|
||||
std::multimap<int, ATBSpecialDays>::const_iterator spec_days_itr;
|
||||
|
||||
for (spec_days_itr = cfg->SpecialDays.cbegin(); spec_days_itr != cfg->SpecialDays.cend(); ++spec_days_itr) {
|
||||
int repeat_every_year = spec_days_itr->second.ped_year;
|
||||
QDate start = QDate::fromString(spec_days_itr->second.ped_date_start.c_str(), Qt::ISODate);
|
||||
QDate end = QDate::fromString(spec_days_itr->second.ped_date_end.c_str(), Qt::ISODate);
|
||||
if (start.isValid() && end.isValid()) {
|
||||
if ((currentDateTime.date().month() >= start.month()) &&
|
||||
(currentDateTime.date().month() <= end.month())) {
|
||||
if ((currentDateTime.date().day() >= start.day()) &&
|
||||
(currentDateTime.date().day() <= end.day())) {
|
||||
if (repeat_every_year <= 0) {
|
||||
if ((currentDateTime.date().year() != start.year()) ||
|
||||
(currentDateTime.date().year() != end.year())) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
qDebug() << "CheckSpecialDay() => SPECIAL DAY";
|
||||
*specialDayId = spec_days_itr->second.ped_id;
|
||||
*specialDayPrice = cfg->SpecialDaysWorktime.find(*specialDayId)->second.pedwt_price;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
QTime Utilities::SpecialDaysWorkTimeFrom(Configuration const *cfg, int specialDayId) {
|
||||
return QTime::fromString(cfg->SpecialDaysWorktime.find(specialDayId)->second.pedwt_time_from.c_str(), Qt::ISODate);
|
||||
}
|
||||
|
||||
QTime Utilities::SpecialDaysWorkTimeUntil(Configuration const *cfg, int specialDayId) {
|
||||
return QTime::fromString(cfg->SpecialDaysWorktime.find(specialDayId)->second.pedwt_time_to.c_str(), Qt::ISODate);
|
||||
}
|
||||
|
||||
QTime Utilities::WeekDaysWorkTimeFrom(std::multimap<int, ATBWeekDaysWorktime>::const_iterator itr) {
|
||||
return QTime::fromString(itr->second.pwd_time_from.c_str(), Qt::ISODate);
|
||||
}
|
||||
|
||||
QTime Utilities::WeekDaysWorkTimeUntil(std::multimap<int, ATBWeekDaysWorktime>::const_iterator itr) {
|
||||
return QTime::fromString(itr->second.pwd_time_to.c_str(), Qt::ISODate);
|
||||
}
|
||||
|
||||
bool Utilities::isCarryOverSet(Configuration const *cfg, PaymentMethod paymentMethodId) {
|
||||
return !isCarryOverNotSet(cfg, paymentMethodId);
|
||||
}
|
||||
|
||||
bool Utilities::isCarryOverNotSet(Configuration const *cfg, PaymentMethod paymentMethodId) {
|
||||
return (cfg->PaymentOption.find(paymentMethodId)->second.pop_carry_over < 1);
|
||||
}
|
||||
|
||||
PaymentMethod Utilities::getPaymentMethodId(Configuration const *cfg) {
|
||||
if (cfg->PaymentOption.size() != 1) {
|
||||
return PaymentMethod::Undefined;
|
||||
}
|
||||
|
||||
std::multimap<int, ATBPaymentOption>::const_iterator it =
|
||||
cfg->PaymentOption.cbegin();
|
||||
|
||||
switch (it->first) {
|
||||
case PaymentMethod::Linear:
|
||||
return PaymentMethod::Linear;
|
||||
case PaymentMethod::Steps:
|
||||
return PaymentMethod::Steps;
|
||||
case PaymentMethod::Degressive:
|
||||
return PaymentMethod::Degressive;
|
||||
case PaymentMethod::Progressive:
|
||||
return PaymentMethod::Progressive;
|
||||
}
|
||||
|
||||
return PaymentMethod::Undefined;
|
||||
}
|
||||
|
||||
int Utilities::getMinimalParkingTime(Configuration const *cfg, PaymentMethod methodId) {
|
||||
return std::max((int)cfg->PaymentOption.find(methodId)->second.pop_min_time, 0);
|
||||
}
|
||||
|
||||
int Utilities::getMaximalParkingTime(Configuration const *cfg, PaymentMethod methodId) {
|
||||
return std::max((int)cfg->PaymentOption.find(methodId)->second.pop_max_time, 0);
|
||||
}
|
||||
|
||||
uint32_t Utilities::getMinimalParkingPrice(Configuration const *cfg, PaymentMethod methodId) {
|
||||
return std::max((int)cfg->PaymentOption.find(methodId)->second.pop_min_price, 0);
|
||||
}
|
||||
|
||||
uint32_t Utilities::getFirstDurationStep(Configuration const *cfg, PaymentMethod methodId) {
|
||||
|
||||
int const popId = cfg->PaymentOption.find(methodId)->second.pop_id;
|
||||
int const punId = cfg->PaymentRate.find(popId)->second.pra_payment_unit_id;
|
||||
uint32_t const firstDurationStep= cfg->Duration.find(punId)->second.pun_duration;
|
||||
|
||||
qCritical() << "getFirstDurationStep() payment-method-id:" << (int)methodId;
|
||||
qCritical() << "getFirstDurationStep() pop-id:" << popId;
|
||||
qCritical() << "getFirstDurationStep() pun-id:" << punId;
|
||||
qCritical() << "getFirstDurationStep() first-step:" << firstDurationStep;
|
||||
|
||||
return firstDurationStep;
|
||||
}
|
||||
|
||||
BusinessHours Utilities::getBusinessHours(Configuration const *cfg, PaymentMethod methodId) {
|
||||
int businessHours = cfg->PaymentOption.find(methodId)->second.pop_business_hours;
|
||||
switch (businessHours) {
|
||||
case NoRestriction_24_7: return NoRestriction_24_7;
|
||||
case OnlyWorkingDays: return OnlyWorkingDays;
|
||||
case OnlyWeekDays: return OnlyWeekDays;
|
||||
case OnlyWeekEnd: return OnlyWeekEnd;
|
||||
case OnlyOfficialHolidays: return OnlyOfficialHolidays;
|
||||
case OnlySpecialDays: return OnlySpecialDays;
|
||||
case OnlySchoolHolidays: return OnlySchoolHolidays;
|
||||
case SpecialAndSchoolHolidays: return SpecialAndSchoolHolidays;
|
||||
case OnlyOpenForBusinessDays: return OnlyOpenForBusinessDays;
|
||||
}
|
||||
return NoBusinessHoursDefined;
|
||||
}
|
||||
|
||||
uint32_t Utilities::computeWeekDaysPrice(Configuration const *cfg, PaymentMethod id) {
|
||||
int pop_id = cfg->PaymentOption.find(id)->second.pop_id;
|
||||
return cfg->PaymentRate.find(pop_id)->second.pra_price;
|
||||
}
|
||||
|
||||
double Utilities::computeWeekDaysDurationUnit(Configuration const *cfg, PaymentMethod id) {
|
||||
int pop_id = cfg->PaymentOption.find(id)->second.pop_id;
|
||||
int durationId = cfg->PaymentRate.find(pop_id)->second.pra_payment_unit_id;
|
||||
return (double)(cfg->Duration.find(durationId)->second.pun_duration);
|
||||
}
|
||||
|
313
main/main.cpp
313
main/main.cpp
File diff suppressed because one or more lines are too long
@@ -3,10 +3,12 @@ TARGET = main
|
||||
|
||||
CONFIG += -std=c++11
|
||||
|
||||
QMAKE_CFLAGS = -c -pipe -std=c11 -g -O0 -Wall -Wno-attributes -W -DDEBUG -D_REENTRANT -fPIC
|
||||
QMAKE_CXX_FLAGS += -std=c11
|
||||
QMAKE_CFLAGS = -c -pipe -std=c11 -g -O -Wall -Wno-attributes -W -DDEBUG -D_REENTRANT -fPIC
|
||||
QMAKE_CXXFLAGS += -std=c++17 -g -O
|
||||
|
||||
INCLUDEPATH += $$_PRO_FILE_PWD_/../../MOBILISIS-Calculator/library/include/mobilisis/
|
||||
INCLUDEPATH += $$_PRO_FILE_PWD_/../../MOBILISIS-Calculator/library/include/rapidjson/
|
||||
INCLUDEPATH += $$_PRO_FILE_PWD_/../../MOBILISIS-Calculator/library/include/
|
||||
INCLUDEPATH += .
|
||||
|
||||
unix {
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
172
tariffs/tariff_bilexa_galtuer.json
Normal file
172
tariffs/tariff_bilexa_galtuer.json
Normal file
@@ -0,0 +1,172 @@
|
||||
{
|
||||
"Project" : "Bilexa Galtuer",
|
||||
"Version" : "1.0.0",
|
||||
"Info" : "",
|
||||
"Currency": [
|
||||
{
|
||||
"pcu_id": 1,
|
||||
"pcu_sign": "€",
|
||||
"pcu_major": "Euro",
|
||||
"pcu_minor": "Cent",
|
||||
"pcu_active": true
|
||||
}
|
||||
],
|
||||
"TimeStepConfig" : [
|
||||
{
|
||||
"tsconfig_id" : 1,
|
||||
"tsconfig_label" : "static",
|
||||
"tsconfig_comment" : "read time steps as given in jsonfiles"
|
||||
},
|
||||
{
|
||||
"tsconfig_id" : 2,
|
||||
"tsconfig_label" : "dynamic",
|
||||
"tsconfig_comment" : "determine timesteps at runtime"
|
||||
}
|
||||
],
|
||||
"PaymentMethod": [
|
||||
{
|
||||
"pme_id": 1,
|
||||
"pme_label": "progressive"
|
||||
},
|
||||
{
|
||||
"pme_id": 2,
|
||||
"pme_label": "degressive"
|
||||
},
|
||||
{
|
||||
"pme_id": 3,
|
||||
"pme_label": "linear"
|
||||
},
|
||||
{
|
||||
"pme_id": 4,
|
||||
"pme_label": "steps"
|
||||
}
|
||||
],
|
||||
"PaymentOption": [
|
||||
{
|
||||
"pop_id": 1099,
|
||||
"pop_label": "Zone 1",
|
||||
"pop_payment_method_id": 4,
|
||||
"pop_day_end_time": "00:00:00",
|
||||
"pop_day_night_end_time": "00:00:00",
|
||||
"pop_price_night": 0,
|
||||
"pop_min_time": 1,
|
||||
"pop_max_time": 10080,
|
||||
"pop_min_price": 700,
|
||||
"pop_carry_over": 1,
|
||||
"pop_carry_over_time_range_id": 1,
|
||||
"pop_daily_card_price": 0,
|
||||
"pop_business_hours": 0,
|
||||
"pop_time_step_config": 2
|
||||
}
|
||||
],
|
||||
"TimeBase": [
|
||||
{
|
||||
"tbase_id": 0,
|
||||
"tbase_type": 0,
|
||||
"tbase_type_comment": "time is given as starting from some wall-clock-time",
|
||||
"tbase_label": "absolute time"
|
||||
},
|
||||
{
|
||||
"tbase_id": 1,
|
||||
"tbase_type": 1,
|
||||
"tbase_type_comment": "time is given as starting from 0 minutes",
|
||||
"tbase_label": "relative time"
|
||||
}
|
||||
],
|
||||
"TimeRange" : [
|
||||
{
|
||||
"time_range_id": 1,
|
||||
"time_range_from": "00:00:00",
|
||||
"time_range_to": "00:01:00",
|
||||
"time_range_comment": "<from>-<to> <= 60secs -> time range is time point <from>"
|
||||
}
|
||||
],
|
||||
"PaymentRate": [
|
||||
{
|
||||
"pra_payment_option_id": 1099,
|
||||
"pra_payment_unit_id": 1,
|
||||
"pra_price": 700
|
||||
},
|
||||
{
|
||||
"pra_payment_option_id": 1099,
|
||||
"pra_payment_unit_id": 2,
|
||||
"pra_price": 1400
|
||||
},
|
||||
{
|
||||
"pra_payment_option_id": 1099,
|
||||
"pra_payment_unit_id": 3,
|
||||
"pra_price": 2100
|
||||
},
|
||||
{
|
||||
"pra_payment_option_id": 1099,
|
||||
"pra_payment_unit_id": 4,
|
||||
"pra_price": 2800
|
||||
},
|
||||
{
|
||||
"pra_payment_option_id": 1099,
|
||||
"pra_payment_unit_id": 5,
|
||||
"pra_price": 3500
|
||||
},
|
||||
{
|
||||
"pra_payment_option_id": 1099,
|
||||
"pra_payment_unit_id": 6,
|
||||
"pra_price": 4200
|
||||
},
|
||||
{
|
||||
"pra_payment_option_id": 1099,
|
||||
"pra_payment_unit_id": 7,
|
||||
"pra_price": 4900
|
||||
}
|
||||
],
|
||||
"Duration": [
|
||||
{
|
||||
"pun_id": 1,
|
||||
"pun_label": "Day 1",
|
||||
"pun_duration_min": 1,
|
||||
"pun_duration_max": 1440,
|
||||
"pun_duration": 0
|
||||
},
|
||||
{
|
||||
"pun_id": 2,
|
||||
"pun_label": "Day 2",
|
||||
"pun_duration_min": 2880,
|
||||
"pun_duration_max": 2880,
|
||||
"pun_duration": 2880
|
||||
},
|
||||
{
|
||||
"pun_id": 3,
|
||||
"pun_label": "Day 3",
|
||||
"pun_duration_min": 4320,
|
||||
"pun_duration_max": 4320,
|
||||
"pun_duration": 4320
|
||||
},
|
||||
{
|
||||
"pun_id": 4,
|
||||
"pun_label": "Day 4",
|
||||
"pun_duration_min": 5760,
|
||||
"pun_duration_max": 5760,
|
||||
"pun_duration": 5760
|
||||
},
|
||||
{
|
||||
"pun_id": 5,
|
||||
"pun_label": "Day 5",
|
||||
"pun_duration_min": 7200,
|
||||
"pun_duration_max": 7200,
|
||||
"pun_duration": 7200
|
||||
},
|
||||
{
|
||||
"pun_id": 6,
|
||||
"pun_label": "Day 6",
|
||||
"pun_duration_min": 8640,
|
||||
"pun_duration_max": 8640,
|
||||
"pun_duration": 8640
|
||||
},
|
||||
{
|
||||
"pun_id": 7,
|
||||
"pun_label": "Day 7",
|
||||
"pun_duration_min": 10080,
|
||||
"pun_duration_max": 10080,
|
||||
"pun_duration": 10080
|
||||
}
|
||||
]
|
||||
}
|
629
tariffs/tariff_korneuburg.json
Normal file
629
tariffs/tariff_korneuburg.json
Normal file
@@ -0,0 +1,629 @@
|
||||
{
|
||||
"Project" : "Korneuburg",
|
||||
"Version" : "1.0.0",
|
||||
"Info" : "",
|
||||
"Currency": [
|
||||
{
|
||||
"pcu_id": 2,
|
||||
"pcu_sign": "€",
|
||||
"pcu_major": "EUR",
|
||||
"pcu_minor": "",
|
||||
"pcu_active": true
|
||||
}
|
||||
],
|
||||
"PaymentMethod": [
|
||||
{
|
||||
"pme_id": 1,
|
||||
"pme_label": "progressive"
|
||||
},
|
||||
{
|
||||
"pme_id": 2,
|
||||
"pme_label": "degressive"
|
||||
},
|
||||
{
|
||||
"pme_id": 3,
|
||||
"pme_label": "linear"
|
||||
},
|
||||
{
|
||||
"pme_id": 4,
|
||||
"pme_label": "steps"
|
||||
}
|
||||
],
|
||||
"PaymentOption": [
|
||||
{
|
||||
"pop_id": 1049,
|
||||
"pop_label": "Zone 1",
|
||||
"pop_payment_method_id": 3,
|
||||
"pop_day_end_time": "00:00:00",
|
||||
"pop_day_night_end_time": "00:00:00",
|
||||
"pop_price_night": 0,
|
||||
"pop_min_time": 30,
|
||||
"pop_max_time": 180,
|
||||
"pop_min_price": 60,
|
||||
"pop_carry_over": 1,
|
||||
"pop_daily_card_price": 0
|
||||
}
|
||||
],
|
||||
"PaymentRate": [
|
||||
{
|
||||
"pra_payment_option_id": 1049,
|
||||
"pra_payment_unit_id": 1,
|
||||
"pra_price": 10
|
||||
}
|
||||
],
|
||||
"Duration": [
|
||||
{
|
||||
"pun_id": 1,
|
||||
"pun_label": "5 min",
|
||||
"pun_duration": 5
|
||||
},
|
||||
{
|
||||
"pun_id": 3,
|
||||
"pun_label": "15 min",
|
||||
"pun_duration": 15
|
||||
},
|
||||
{
|
||||
"pun_id": 4,
|
||||
"pun_label": "1 min",
|
||||
"pun_duration": 1
|
||||
}
|
||||
],
|
||||
"WeekDaysWorktime": [
|
||||
{
|
||||
"pwd_id": 621,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 1,
|
||||
"pwd_time_from": "08:00:00",
|
||||
"pwd_time_to": "12:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 621,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 1,
|
||||
"pwd_time_from": "14:00:00",
|
||||
"pwd_time_to": "18:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 622,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 2,
|
||||
"pwd_time_from": "08:00:00",
|
||||
"pwd_time_to": "12:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 622,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 2,
|
||||
"pwd_time_from": "14:00:00",
|
||||
"pwd_time_to": "18:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 623,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 3,
|
||||
"pwd_time_from": "08:00:00",
|
||||
"pwd_time_to": "12:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 623,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 3,
|
||||
"pwd_time_from": "14:00:00",
|
||||
"pwd_time_to": "18:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 624,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 4,
|
||||
"pwd_time_from": "08:00:00",
|
||||
"pwd_time_to": "12:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 624,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 4,
|
||||
"pwd_time_from": "14:00:00",
|
||||
"pwd_time_to": "18:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 625,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 5,
|
||||
"pwd_time_from": "08:00:00",
|
||||
"pwd_time_to": "12:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 625,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 5,
|
||||
"pwd_time_from": "14:00:00",
|
||||
"pwd_time_to": "18:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 626,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 6,
|
||||
"pwd_time_from": "08:00:00",
|
||||
"pwd_time_to": "12:00:00"
|
||||
}
|
||||
],
|
||||
"SpecialDaysWorktime": [
|
||||
{
|
||||
"pedwt_id": 2156,
|
||||
"pedwt_period_exc_day_id": 2024,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2158,
|
||||
"pedwt_period_exc_day_id": 2025,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2160,
|
||||
"pedwt_period_exc_day_id": 2026,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2162,
|
||||
"pedwt_period_exc_day_id": 2027,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2164,
|
||||
"pedwt_period_exc_day_id": 2028,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2170,
|
||||
"pedwt_period_exc_day_id": 2030,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2172,
|
||||
"pedwt_period_exc_day_id": 2032,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2174,
|
||||
"pedwt_period_exc_day_id": 11,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2175,
|
||||
"pedwt_period_exc_day_id": 13,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2178,
|
||||
"pedwt_period_exc_day_id": 2022,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2179,
|
||||
"pedwt_period_exc_day_id": 14,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2184,
|
||||
"pedwt_period_exc_day_id": 2021,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2188,
|
||||
"pedwt_period_exc_day_id": 2031,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2189,
|
||||
"pedwt_period_exc_day_id": 2029,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2194,
|
||||
"pedwt_period_exc_day_id": 2034,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2200,
|
||||
"pedwt_period_exc_day_id": 2037,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2202,
|
||||
"pedwt_period_exc_day_id": 2038,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2226,
|
||||
"pedwt_period_exc_day_id": 2016,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2245,
|
||||
"pedwt_period_exc_day_id": 2035,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2246,
|
||||
"pedwt_period_exc_day_id": 2036,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2249,
|
||||
"pedwt_period_exc_day_id": 2050,
|
||||
"pedwt_time_from": "08:00:00",
|
||||
"pedwt_time_to": "16:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2250,
|
||||
"pedwt_period_exc_day_id": 2051,
|
||||
"pedwt_time_from": "08:00:00",
|
||||
"pedwt_time_to": "16:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2251,
|
||||
"pedwt_period_exc_day_id": 2052,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2252,
|
||||
"pedwt_period_exc_day_id": 2053,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2253,
|
||||
"pedwt_period_exc_day_id": 2054,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2254,
|
||||
"pedwt_period_exc_day_id": 2055,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2255,
|
||||
"pedwt_period_exc_day_id": 2056,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2256,
|
||||
"pedwt_period_exc_day_id": 2057,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2257,
|
||||
"pedwt_period_exc_day_id": 2058,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2258,
|
||||
"pedwt_period_exc_day_id": 2059,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2259,
|
||||
"pedwt_period_exc_day_id": 2060,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
}
|
||||
],
|
||||
"SpecialDays": [
|
||||
{
|
||||
"ped_id": 11,
|
||||
"ped_label": "Mariae Empfaengnis",
|
||||
"ped_date_start": "2023-12-08",
|
||||
"ped_date_end": "2023-12-08",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 13,
|
||||
"ped_label": "Christtag",
|
||||
"ped_date_start": "2023-12-25",
|
||||
"ped_date_end": "2023-12-25",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 14,
|
||||
"ped_label": "Stefanitag",
|
||||
"ped_date_start": "2023-12-26",
|
||||
"ped_date_end": "2023-12-26",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2016,
|
||||
"ped_label": "Neujahr",
|
||||
"ped_date_start": "2024-01-01",
|
||||
"ped_date_end": "2024-01-01",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2021,
|
||||
"ped_label": "Heilig Drei Koenige",
|
||||
"ped_date_start": "2024-01-06",
|
||||
"ped_date_end": "2024-01-06",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2022,
|
||||
"ped_label": "Ostermontag",
|
||||
"ped_date_start": "2024-01-04",
|
||||
"ped_date_end": "2024-01-04",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 2024
|
||||
},
|
||||
{
|
||||
"ped_id": 2024,
|
||||
"ped_label": "Staatsfeiertag",
|
||||
"ped_date_start": "2024-05-01",
|
||||
"ped_date_end": "2024-05-01",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2025,
|
||||
"ped_label": "Christi Himmelfahrt",
|
||||
"ped_date_start": "2024-05-09",
|
||||
"ped_date_end": "2024-05-09",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 2024
|
||||
},
|
||||
{
|
||||
"ped_id": 2026,
|
||||
"ped_label": "Pfingst Montag",
|
||||
"ped_date_start": "2024-05-20",
|
||||
"ped_date_end": "2024-05-20",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 2024
|
||||
},
|
||||
{
|
||||
"ped_id": 2027,
|
||||
"ped_label": "Fronleichnam",
|
||||
"ped_date_start": "2024-05-30",
|
||||
"ped_date_end": "2024-05-30",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 2024
|
||||
},
|
||||
{
|
||||
"ped_id": 2028,
|
||||
"ped_label": "Maria Himmelfahrt",
|
||||
"ped_date_start": "2024-08-15",
|
||||
"ped_date_end": "2024-08-15",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2029,
|
||||
"ped_label": "Nationalfeiertag",
|
||||
"ped_date_start": "2024-10-26",
|
||||
"ped_date_end": "2024-10-26",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2030,
|
||||
"ped_label": "Allerheiligen",
|
||||
"ped_date_start": "2024-11-01",
|
||||
"ped_date_end": "2024-11-01",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2031,
|
||||
"ped_label": "Mariae Empfaengnis",
|
||||
"ped_date_start": "2024-08-12",
|
||||
"ped_date_end": "2024-08-12",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2032,
|
||||
"ped_label": "Christtag",
|
||||
"ped_date_start": "2024-12-25",
|
||||
"ped_date_end": "2024-12-25",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2034,
|
||||
"ped_label": "Stefanitag",
|
||||
"ped_date_start": "2024-12-26",
|
||||
"ped_date_end": "2024-12-26",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2035,
|
||||
"ped_label": "Neujahr",
|
||||
"ped_date_start": "2025-01-01",
|
||||
"ped_date_end": "2025-01-01",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2036,
|
||||
"ped_label": "Heilig Drei Koenige",
|
||||
"ped_date_start": "2025-06-01",
|
||||
"ped_date_end": "2025-06-01",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2037,
|
||||
"ped_label": "Ostermontag",
|
||||
"ped_date_start": "2025-04-21",
|
||||
"ped_date_end": "2025-04-21",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 2025
|
||||
},
|
||||
{
|
||||
"ped_id": 2038,
|
||||
"ped_label": "Staatsfeiertag",
|
||||
"ped_date_start": "2025-05-01",
|
||||
"ped_date_end": "2025-05-01",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 2025
|
||||
},
|
||||
{
|
||||
"ped_id": 2050,
|
||||
"ped_label": "Christi Himmelfahrt",
|
||||
"ped_date_start": "2025-05-29",
|
||||
"ped_date_end": "2025-05-29",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 2025
|
||||
},
|
||||
{
|
||||
"ped_id": 2051,
|
||||
"ped_label": "Pfingstmontag",
|
||||
"ped_date_start": "2025-06-09",
|
||||
"ped_date_end": "2025-06-09",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 2025
|
||||
},
|
||||
{
|
||||
"ped_id": 2052,
|
||||
"ped_label": "Fronlaeichnam",
|
||||
"ped_date_start": "2025-06-19",
|
||||
"ped_date_end": "2025-06-19",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 2025
|
||||
},
|
||||
{
|
||||
"ped_id": 2053,
|
||||
"ped_label": "Mariae Himmelfahrt",
|
||||
"ped_date_start": "2025-08-15",
|
||||
"ped_date_end": "2025-08-15",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2054,
|
||||
"ped_label": "Nationalfeiertag",
|
||||
"ped_date_start": "2025-10-26",
|
||||
"ped_date_end": "2025-10-26",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2055,
|
||||
"ped_label": "Allerheiligen",
|
||||
"ped_date_start": "2025-11-01",
|
||||
"ped_date_end": "2025-11-01",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2056,
|
||||
"ped_label": "Mariae Empfaengnis",
|
||||
"ped_date_start": "2025-12-08",
|
||||
"ped_date_end": "2025-12-08",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2057,
|
||||
"ped_label": "Christtag",
|
||||
"ped_date_start": "2025-12-25",
|
||||
"ped_date_end": "2025-12-25",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2058,
|
||||
"ped_label": "Stefanitag",
|
||||
"ped_date_start": "2025-12-26",
|
||||
"ped_date_end": "2025-12-26",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2059,
|
||||
"ped_label": "Neujahr",
|
||||
"ped_date_start": "2026-01-01",
|
||||
"ped_date_end": "2026-01-01",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2060,
|
||||
"ped_label": "Heilige Drei Koenige",
|
||||
"ped_date_start": "2026-01-06",
|
||||
"ped_date_end": "2026-01-06",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
}
|
||||
],
|
||||
"PeriodYear": [
|
||||
{
|
||||
"pye_id": 8,
|
||||
"pye_label": "Whole year",
|
||||
"pye_start_month": 1,
|
||||
"pye_start_day": 1,
|
||||
"pye_end_month": 12,
|
||||
"pye_end_day": 31
|
||||
}
|
||||
]
|
||||
}
|
598
tariffs/tariff_linsinger_maschinenbau.json
Normal file
598
tariffs/tariff_linsinger_maschinenbau.json
Normal file
@@ -0,0 +1,598 @@
|
||||
{
|
||||
"Project" : "Linsinger Maschinenbau",
|
||||
"Version" : "1.0.0",
|
||||
"Info" : "",
|
||||
"Currency": [
|
||||
{
|
||||
"pcu_id": 1,
|
||||
"pcu_sign": "€",
|
||||
"pcu_major": "EUR",
|
||||
"pcu_minor": "",
|
||||
"pcu_active": true
|
||||
}
|
||||
],
|
||||
"PaymentMethod": [
|
||||
{
|
||||
"pme_id": 1,
|
||||
"pme_label": "progressive"
|
||||
},
|
||||
{
|
||||
"pme_id": 2,
|
||||
"pme_label": "degressive"
|
||||
},
|
||||
{
|
||||
"pme_id": 3,
|
||||
"pme_label": "linear"
|
||||
},
|
||||
{
|
||||
"pme_id": 4,
|
||||
"pme_label": "steps"
|
||||
}
|
||||
],
|
||||
"PaymentOption": [
|
||||
{
|
||||
"pop_id": 1049,
|
||||
"pop_label": "Zone 1",
|
||||
"pop_payment_method_id": 4,
|
||||
"pop_day_end_time": "00:00:00",
|
||||
"pop_day_night_end_time": "00:00:00",
|
||||
"pop_price_night": 0,
|
||||
"pop_min_time": 1,
|
||||
"pop_max_time": 2,
|
||||
"pop_min_price": 900,
|
||||
"pop_carry_over": 0,
|
||||
"pop_daily_card_price": 0,
|
||||
"pop_business_hours": 2
|
||||
}
|
||||
],
|
||||
"PaymentRate": [
|
||||
{
|
||||
"pra_payment_option_id": 1049,
|
||||
"pra_payment_unit_id": 1,
|
||||
"pra_price": 900
|
||||
},
|
||||
{
|
||||
"pra_payment_option_id": 1049,
|
||||
"pra_payment_unit_id": 2,
|
||||
"pra_price": 1500
|
||||
},
|
||||
{
|
||||
"pra_payment_option_id": 1049,
|
||||
"pra_payment_unit_id": 3,
|
||||
"pra_price": 3000
|
||||
}
|
||||
],
|
||||
"Duration": [
|
||||
{
|
||||
"pun_id": 1,
|
||||
"pun_label": "3 Marken",
|
||||
"pun_duration": 180
|
||||
},
|
||||
{
|
||||
"pun_id": 2,
|
||||
"pun_label": "5 Marken",
|
||||
"pun_duration": 300
|
||||
},
|
||||
{
|
||||
"pun_id": 3,
|
||||
"pun_label": "10 Marken",
|
||||
"pun_duration": 600
|
||||
}
|
||||
],
|
||||
"WeekDaysWorktime": [
|
||||
{
|
||||
"pwd_id": 621,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 1,
|
||||
"pwd_time_from": "06:00:00",
|
||||
"pwd_time_to": "18:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 622,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 2,
|
||||
"pwd_time_from": "06:00:00",
|
||||
"pwd_time_to": "18:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 623,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 3,
|
||||
"pwd_time_from": "06:00:00",
|
||||
"pwd_time_to": "18:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 624,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 4,
|
||||
"pwd_time_from": "06:00:00",
|
||||
"pwd_time_to": "18:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 625,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 5,
|
||||
"pwd_time_from": "06:00:00",
|
||||
"pwd_time_to": "12:00:00"
|
||||
}
|
||||
],
|
||||
"SpecialDaysWorktime": [
|
||||
{
|
||||
"pedwt_id": 2156,
|
||||
"pedwt_period_exc_day_id": 2024,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2158,
|
||||
"pedwt_period_exc_day_id": 2025,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2160,
|
||||
"pedwt_period_exc_day_id": 2026,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2162,
|
||||
"pedwt_period_exc_day_id": 2027,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2164,
|
||||
"pedwt_period_exc_day_id": 2028,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2170,
|
||||
"pedwt_period_exc_day_id": 2030,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2172,
|
||||
"pedwt_period_exc_day_id": 2032,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2174,
|
||||
"pedwt_period_exc_day_id": 11,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2175,
|
||||
"pedwt_period_exc_day_id": 13,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2178,
|
||||
"pedwt_period_exc_day_id": 2022,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2179,
|
||||
"pedwt_period_exc_day_id": 14,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2184,
|
||||
"pedwt_period_exc_day_id": 2021,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2188,
|
||||
"pedwt_period_exc_day_id": 2031,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2189,
|
||||
"pedwt_period_exc_day_id": 2029,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2194,
|
||||
"pedwt_period_exc_day_id": 2034,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2200,
|
||||
"pedwt_period_exc_day_id": 2037,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2202,
|
||||
"pedwt_period_exc_day_id": 2038,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2226,
|
||||
"pedwt_period_exc_day_id": 2016,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2245,
|
||||
"pedwt_period_exc_day_id": 2035,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2246,
|
||||
"pedwt_period_exc_day_id": 2036,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2249,
|
||||
"pedwt_period_exc_day_id": 2050,
|
||||
"pedwt_time_from": "08:00:00",
|
||||
"pedwt_time_to": "16:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2250,
|
||||
"pedwt_period_exc_day_id": 2051,
|
||||
"pedwt_time_from": "08:00:00",
|
||||
"pedwt_time_to": "16:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2251,
|
||||
"pedwt_period_exc_day_id": 2052,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2252,
|
||||
"pedwt_period_exc_day_id": 2053,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2253,
|
||||
"pedwt_period_exc_day_id": 2054,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2254,
|
||||
"pedwt_period_exc_day_id": 2055,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2255,
|
||||
"pedwt_period_exc_day_id": 2056,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2256,
|
||||
"pedwt_period_exc_day_id": 2057,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2257,
|
||||
"pedwt_period_exc_day_id": 2058,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2258,
|
||||
"pedwt_period_exc_day_id": 2059,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2259,
|
||||
"pedwt_period_exc_day_id": 2060,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
}
|
||||
],
|
||||
"SpecialDays": [
|
||||
{
|
||||
"ped_id": 11,
|
||||
"ped_label": "Mariae Empfaengnis",
|
||||
"ped_date_start": "2023-12-08",
|
||||
"ped_date_end": "2023-12-08",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 13,
|
||||
"ped_label": "Christtag",
|
||||
"ped_date_start": "2023-12-25",
|
||||
"ped_date_end": "2023-12-25",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 14,
|
||||
"ped_label": "Stefanitag",
|
||||
"ped_date_start": "2023-12-26",
|
||||
"ped_date_end": "2023-12-26",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2016,
|
||||
"ped_label": "Neujahr",
|
||||
"ped_date_start": "2024-01-01",
|
||||
"ped_date_end": "2024-01-01",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2021,
|
||||
"ped_label": "Heilig Drei Koenige",
|
||||
"ped_date_start": "2024-01-06",
|
||||
"ped_date_end": "2024-01-06",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2022,
|
||||
"ped_label": "Ostermontag",
|
||||
"ped_date_start": "2024-01-04",
|
||||
"ped_date_end": "2024-01-04",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 2024
|
||||
},
|
||||
{
|
||||
"ped_id": 2024,
|
||||
"ped_label": "Staatsfeiertag",
|
||||
"ped_date_start": "2024-05-01",
|
||||
"ped_date_end": "2024-05-01",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2025,
|
||||
"ped_label": "Christi Himmelfahrt",
|
||||
"ped_date_start": "2024-05-09",
|
||||
"ped_date_end": "2024-05-09",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 2024
|
||||
},
|
||||
{
|
||||
"ped_id": 2026,
|
||||
"ped_label": "Pfingst Montag",
|
||||
"ped_date_start": "2024-05-20",
|
||||
"ped_date_end": "2024-05-20",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 2024
|
||||
},
|
||||
{
|
||||
"ped_id": 2027,
|
||||
"ped_label": "Fronleichnam",
|
||||
"ped_date_start": "2024-05-30",
|
||||
"ped_date_end": "2024-05-30",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 2024
|
||||
},
|
||||
{
|
||||
"ped_id": 2028,
|
||||
"ped_label": "Maria Himmelfahrt",
|
||||
"ped_date_start": "2024-08-15",
|
||||
"ped_date_end": "2024-08-15",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2029,
|
||||
"ped_label": "Nationalfeiertag",
|
||||
"ped_date_start": "2024-10-26",
|
||||
"ped_date_end": "2024-10-26",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2030,
|
||||
"ped_label": "Allerheiligen",
|
||||
"ped_date_start": "2024-11-01",
|
||||
"ped_date_end": "2024-11-01",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2031,
|
||||
"ped_label": "Mariae Empfaengnis",
|
||||
"ped_date_start": "2024-08-12",
|
||||
"ped_date_end": "2024-08-12",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2032,
|
||||
"ped_label": "Christtag",
|
||||
"ped_date_start": "2024-12-25",
|
||||
"ped_date_end": "2024-12-25",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2034,
|
||||
"ped_label": "Stefanitag",
|
||||
"ped_date_start": "2024-12-26",
|
||||
"ped_date_end": "2024-12-26",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2035,
|
||||
"ped_label": "Neujahr",
|
||||
"ped_date_start": "2025-01-01",
|
||||
"ped_date_end": "2025-01-01",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2036,
|
||||
"ped_label": "Heilig Drei Koenige",
|
||||
"ped_date_start": "2025-06-01",
|
||||
"ped_date_end": "2025-06-01",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2037,
|
||||
"ped_label": "Ostermontag",
|
||||
"ped_date_start": "2025-04-21",
|
||||
"ped_date_end": "2025-04-21",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 2025
|
||||
},
|
||||
{
|
||||
"ped_id": 2038,
|
||||
"ped_label": "Staatsfeiertag",
|
||||
"ped_date_start": "2025-05-01",
|
||||
"ped_date_end": "2025-05-01",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 2025
|
||||
},
|
||||
{
|
||||
"ped_id": 2050,
|
||||
"ped_label": "Christi Himmelfahrt",
|
||||
"ped_date_start": "2025-05-29",
|
||||
"ped_date_end": "2025-05-29",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 2025
|
||||
},
|
||||
{
|
||||
"ped_id": 2051,
|
||||
"ped_label": "Pfingstmontag",
|
||||
"ped_date_start": "2025-06-09",
|
||||
"ped_date_end": "2025-06-09",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 2025
|
||||
},
|
||||
{
|
||||
"ped_id": 2052,
|
||||
"ped_label": "Fronlaeichnam",
|
||||
"ped_date_start": "2025-06-19",
|
||||
"ped_date_end": "2025-06-19",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 2025
|
||||
},
|
||||
{
|
||||
"ped_id": 2053,
|
||||
"ped_label": "Mariae Himmelfahrt",
|
||||
"ped_date_start": "2025-08-15",
|
||||
"ped_date_end": "2025-08-15",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2054,
|
||||
"ped_label": "Nationalfeiertag",
|
||||
"ped_date_start": "2025-10-26",
|
||||
"ped_date_end": "2025-10-26",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2055,
|
||||
"ped_label": "Allerheiligen",
|
||||
"ped_date_start": "2025-11-01",
|
||||
"ped_date_end": "2025-11-01",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2056,
|
||||
"ped_label": "Mariae Empfaengnis",
|
||||
"ped_date_start": "2025-12-08",
|
||||
"ped_date_end": "2025-12-08",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2057,
|
||||
"ped_label": "Christtag",
|
||||
"ped_date_start": "2025-12-25",
|
||||
"ped_date_end": "2025-12-25",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2058,
|
||||
"ped_label": "Stefanitag",
|
||||
"ped_date_start": "2025-12-26",
|
||||
"ped_date_end": "2025-12-26",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2059,
|
||||
"ped_label": "Neujahr",
|
||||
"ped_date_start": "2026-01-01",
|
||||
"ped_date_end": "2026-01-01",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2060,
|
||||
"ped_label": "Heilige Drei Koenige",
|
||||
"ped_date_start": "2026-01-06",
|
||||
"ped_date_end": "2026-01-06",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
}
|
||||
],
|
||||
"PeriodYear": [
|
||||
{
|
||||
"pye_id": 8,
|
||||
"pye_label": "Whole year",
|
||||
"pye_start_month": 1,
|
||||
"pye_start_day": 1,
|
||||
"pye_end_month": 12,
|
||||
"pye_end_day": 31
|
||||
}
|
||||
]
|
||||
}
|
186
tariffs/tariff_naz.json
Normal file
186
tariffs/tariff_naz.json
Normal file
@@ -0,0 +1,186 @@
|
||||
{
|
||||
"Project" : "Nordisches Ausbildungszentrum",
|
||||
"Version" : "1.0.0",
|
||||
"Info" : "",
|
||||
"Currency": [
|
||||
{
|
||||
"pcu_id": 1,
|
||||
"pcu_sign": "€",
|
||||
"pcu_major": "EUR",
|
||||
"pcu_minor": "",
|
||||
"pcu_active": true
|
||||
}
|
||||
],
|
||||
"PaymentMethod": [
|
||||
{
|
||||
"pme_id": 1,
|
||||
"pme_label": "progressive"
|
||||
},
|
||||
{
|
||||
"pme_id": 2,
|
||||
"pme_label": "degressive"
|
||||
},
|
||||
{
|
||||
"pme_id": 3,
|
||||
"pme_label": "linear"
|
||||
},
|
||||
{
|
||||
"pme_id": 4,
|
||||
"pme_label": "steps"
|
||||
}
|
||||
],
|
||||
"TimeBase": [
|
||||
{
|
||||
"tbase_id": 0,
|
||||
"tbase_type": 0,
|
||||
"tbase_type_comment": "time is given as starting from some wall-clock-time",
|
||||
"tbase_label": "absolute time"
|
||||
},
|
||||
{
|
||||
"tbase_id": 1,
|
||||
"tbase_type": 1,
|
||||
"tbase_type_comment": "time is given as starting from 0 minutes",
|
||||
"tbase_label": "relative time"
|
||||
}
|
||||
],
|
||||
"Customer": [
|
||||
{
|
||||
"cust_type": 1000,
|
||||
"cust_label": "Adult"
|
||||
},
|
||||
{
|
||||
"cust_type": 1001,
|
||||
"cust_label": "Child"
|
||||
},
|
||||
{
|
||||
"cust_type": 1002,
|
||||
"cust_label": "Teen"
|
||||
}
|
||||
],
|
||||
"PaymentOption": [
|
||||
{
|
||||
"pop_id": 1049,
|
||||
"pop_label": "Zone 1",
|
||||
"pop_payment_method_id": 4,
|
||||
"pop_day_end_time": "00:00:00",
|
||||
"pop_day_night_end_time": "00:00:00",
|
||||
"pop_price_night": 0,
|
||||
"pop_min_time": 1,
|
||||
"pop_max_time": 2,
|
||||
"pop_min_price": 900,
|
||||
"pop_carry_over": 0,
|
||||
"pop_daily_card_price": 0,
|
||||
"pop_business_hours": 2
|
||||
}
|
||||
],
|
||||
"PaymentRate": [
|
||||
{
|
||||
"pop_comment":"Unused"
|
||||
}
|
||||
],
|
||||
"DailyTicket": [
|
||||
{
|
||||
"daily_ticket_payment_option_id": 1049,
|
||||
"daily_ticket_unit_id": 1,
|
||||
"daily_ticket_price": 400,
|
||||
|
||||
"daily_ticket_tbase_type": 0,
|
||||
"daily_ticket_tbase_type_comment": "absolute or relative to offset",
|
||||
|
||||
"daily_ticket_clearance_customer_type": 1002,
|
||||
"daily_ticket_clearance_customer_type_comment": "who is allowed to buy a ticket",
|
||||
|
||||
"daily_ticket_weekday_range" : 1,
|
||||
"daily_ticket_weekday_ranges_comment" : "ticket valid on week day id and associated time range",
|
||||
"daily_ticket_special_day_range": 0
|
||||
},
|
||||
{
|
||||
"daily_ticket_payment_option_id": 1049,
|
||||
"daily_ticket_unit_id": 2,
|
||||
"daily_ticket_price": 800,
|
||||
|
||||
"daily_ticket_tbase_type": 0,
|
||||
"daily_ticket_tbase_type_comment": "absolute or relative to offset",
|
||||
|
||||
"daily_ticket_clearance_customer_type": 1000,
|
||||
"daily_ticket_clearance_customer_type_comment": "who is allowed to buy a ticket",
|
||||
|
||||
"daily_ticket_weekday_ranges" : 1,
|
||||
"daily_ticket_weekday_ranges_comment" : "ticket valid on week day id and associated time range",
|
||||
"daily_ticket_special_day_ranges": 0
|
||||
}
|
||||
],
|
||||
"Duration": [
|
||||
{
|
||||
"pun_comment":"Unused"
|
||||
}
|
||||
],
|
||||
"TimeRange" : [
|
||||
{
|
||||
"time_range_id": 1,
|
||||
"time_range_from": "08:00:00",
|
||||
"time_range_to": "20:00:00"
|
||||
}
|
||||
],
|
||||
"WeekDaysWorktime": [
|
||||
{
|
||||
"pwd_id": 621,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 1,
|
||||
"pwd_time_from": "08:00:00",
|
||||
"pwd_time_to": "20:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 622,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 2,
|
||||
"pwd_time_from": "08:00:00",
|
||||
"pwd_time_to": "20:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 623,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 3,
|
||||
"pwd_time_from": "08:00:00",
|
||||
"pwd_time_to": "20:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 624,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 4,
|
||||
"pwd_time_from": "08:00:00",
|
||||
"pwd_time_to": "20:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 625,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 5,
|
||||
"pwd_time_from": "08:00:00",
|
||||
"pwd_time_to": "20:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 626,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 6,
|
||||
"pwd_time_from": "08:00:00",
|
||||
"pwd_time_to": "20:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 627,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 1,
|
||||
"pwd_time_from": "08:00:00",
|
||||
"pwd_time_to": "20:00:00"
|
||||
}
|
||||
],
|
||||
"PeriodYear": [
|
||||
{
|
||||
"pye_id": 8,
|
||||
"pye_label": "Whole year",
|
||||
"pye_start_month": 1,
|
||||
"pye_start_day": 1,
|
||||
"pye_end_month": 12,
|
||||
"pye_end_day": 31
|
||||
}
|
||||
]
|
||||
}
|
805
tariffs/tariff_new_01.json
Normal file
805
tariffs/tariff_new_01.json
Normal file
@@ -0,0 +1,805 @@
|
||||
{
|
||||
"Currency": [
|
||||
{
|
||||
"pcu_id": 2,
|
||||
"pcu_sign": "Ft",
|
||||
"pcu_major": "HUF",
|
||||
"pcu_minor": "",
|
||||
"pcu_active": true
|
||||
}
|
||||
],
|
||||
"PaymentMethod": [
|
||||
{
|
||||
"pme_id": 1,
|
||||
"pme_label": "progressive"
|
||||
},
|
||||
{
|
||||
"pme_id": 2,
|
||||
"pme_label": "degressive"
|
||||
},
|
||||
{
|
||||
"pme_id": 3,
|
||||
"pme_label": "linear"
|
||||
},
|
||||
{
|
||||
"pme_id": 4,
|
||||
"pme_label": "steps"
|
||||
}
|
||||
],
|
||||
"PaymentOption": [
|
||||
{
|
||||
"pop_id": 1049,
|
||||
"pop_label": "Zone Lila",
|
||||
"pop_payment_method_id": 3,
|
||||
"pop_day_end_time": "16:25:00",
|
||||
"pop_day_night_end_time": "16:25:00",
|
||||
"pop_price_night": 0,
|
||||
"pop_min_time": 15,
|
||||
"pop_max_time": 300,
|
||||
"pop_min_price": 0,
|
||||
"pop_carry_over": 1,
|
||||
"pop_daily_card_price": 900
|
||||
}
|
||||
],
|
||||
"PaymentRate": [
|
||||
{
|
||||
"pra_payment_option_id": 1049,
|
||||
"pra_payment_unit_id": 1,
|
||||
"pra_price": 150
|
||||
}
|
||||
],
|
||||
"Duration": [
|
||||
{
|
||||
"pun_id": 1,
|
||||
"pun_label": "1h",
|
||||
"pun_duration": 60
|
||||
},
|
||||
{
|
||||
"pun_id": 3,
|
||||
"pun_label": "15 min",
|
||||
"pun_duration": 15
|
||||
},
|
||||
{
|
||||
"pun_id": 4,
|
||||
"pun_label": "1 min",
|
||||
"pun_duration": 1
|
||||
}
|
||||
],
|
||||
"WeekDaysWorktime": [
|
||||
{
|
||||
"pwd_id": 621,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 1,
|
||||
"pwd_time_from": "08:00:00",
|
||||
"pwd_time_to": "18:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 622,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 2,
|
||||
"pwd_time_from": "08:00:00",
|
||||
"pwd_time_to": "18:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 623,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 3,
|
||||
"pwd_time_from": "08:00:00",
|
||||
"pwd_time_to": "18:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 624,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 4,
|
||||
"pwd_time_from": "08:00:00",
|
||||
"pwd_time_to": "18:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 625,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 5,
|
||||
"pwd_time_from": "08:00:00",
|
||||
"pwd_time_to": "18:00:00"
|
||||
}
|
||||
],
|
||||
"PeriodYear": [
|
||||
{
|
||||
"pye_id": 8,
|
||||
"pye_label": "Whole year",
|
||||
"pye_start_month": 1,
|
||||
"pye_start_day": 1,
|
||||
"pye_end_month": 12,
|
||||
"pye_end_day": 31
|
||||
},
|
||||
{
|
||||
"pye_id": 9,
|
||||
"pye_label": "Whole year",
|
||||
"pye_start_month": 1,
|
||||
"pye_start_day": 1,
|
||||
"pye_end_month": 12,
|
||||
"pye_end_day": 31
|
||||
},
|
||||
{
|
||||
"pye_id": 10,
|
||||
"pye_label": "Whole year",
|
||||
"pye_start_month": 1,
|
||||
"pye_start_day": 1,
|
||||
"pye_end_month": 12,
|
||||
"pye_end_day": 31
|
||||
},
|
||||
{
|
||||
"pye_id": 11,
|
||||
"pye_label": "Whole Year",
|
||||
"pye_start_month": 1,
|
||||
"pye_start_day": 1,
|
||||
"pye_end_month": 12,
|
||||
"pye_end_day": 31
|
||||
},
|
||||
{
|
||||
"pye_id": 12,
|
||||
"pye_label": "Whole Year",
|
||||
"pye_start_month": 1,
|
||||
"pye_start_day": 1,
|
||||
"pye_end_month": 12,
|
||||
"pye_end_day": 31
|
||||
},
|
||||
{
|
||||
"pye_id": 13,
|
||||
"pye_label": "Whole Year",
|
||||
"pye_start_month": 1,
|
||||
"pye_start_day": 1,
|
||||
"pye_end_month": 12,
|
||||
"pye_end_day": 31
|
||||
},
|
||||
{
|
||||
"pye_id": 14,
|
||||
"pye_label": "Whole Year",
|
||||
"pye_start_month": 1,
|
||||
"pye_start_day": 1,
|
||||
"pye_end_month": 12,
|
||||
"pye_end_day": 31
|
||||
},
|
||||
{
|
||||
"pye_id": 15,
|
||||
"pye_label": "Whole year",
|
||||
"pye_start_month": 1,
|
||||
"pye_start_day": 1,
|
||||
"pye_end_month": 12,
|
||||
"pye_end_day": 31
|
||||
}
|
||||
],
|
||||
"SpecialDaysWorktime": [
|
||||
{
|
||||
"pedwt_id": 2156,
|
||||
"pedwt_period_exc_day_id": 2024,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2158,
|
||||
"pedwt_period_exc_day_id": 2025,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2160,
|
||||
"pedwt_period_exc_day_id": 2026,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2162,
|
||||
"pedwt_period_exc_day_id": 2027,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2164,
|
||||
"pedwt_period_exc_day_id": 2028,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2170,
|
||||
"pedwt_period_exc_day_id": 2030,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2172,
|
||||
"pedwt_period_exc_day_id": 2032,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2174,
|
||||
"pedwt_period_exc_day_id": 11,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2175,
|
||||
"pedwt_period_exc_day_id": 13,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2178,
|
||||
"pedwt_period_exc_day_id": 2022,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2179,
|
||||
"pedwt_period_exc_day_id": 14,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2184,
|
||||
"pedwt_period_exc_day_id": 2021,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2188,
|
||||
"pedwt_period_exc_day_id": 2031,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2189,
|
||||
"pedwt_period_exc_day_id": 2029,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2194,
|
||||
"pedwt_period_exc_day_id": 2034,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2200,
|
||||
"pedwt_period_exc_day_id": 2037,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2202,
|
||||
"pedwt_period_exc_day_id": 2038,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2226,
|
||||
"pedwt_period_exc_day_id": 2016,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2245,
|
||||
"pedwt_period_exc_day_id": 2035,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2246,
|
||||
"pedwt_period_exc_day_id": 2036,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2249,
|
||||
"pedwt_period_exc_day_id": 2050,
|
||||
"pedwt_time_from": "08:00:00",
|
||||
"pedwt_time_to": "16:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2250,
|
||||
"pedwt_period_exc_day_id": 2051,
|
||||
"pedwt_time_from": "08:00:00",
|
||||
"pedwt_time_to": "16:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2251,
|
||||
"pedwt_period_exc_day_id": 2052,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2252,
|
||||
"pedwt_period_exc_day_id": 2053,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2253,
|
||||
"pedwt_period_exc_day_id": 2054,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2254,
|
||||
"pedwt_period_exc_day_id": 2055,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2255,
|
||||
"pedwt_period_exc_day_id": 2056,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2256,
|
||||
"pedwt_period_exc_day_id": 2057,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2257,
|
||||
"pedwt_period_exc_day_id": 2058,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2258,
|
||||
"pedwt_period_exc_day_id": 2059,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2259,
|
||||
"pedwt_period_exc_day_id": 2060,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2260,
|
||||
"pedwt_period_exc_day_id": 2061,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2261,
|
||||
"pedwt_period_exc_day_id": 2062,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2262,
|
||||
"pedwt_period_exc_day_id": 2063,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2263,
|
||||
"pedwt_period_exc_day_id": 2064,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2264,
|
||||
"pedwt_period_exc_day_id": 2065,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2265,
|
||||
"pedwt_period_exc_day_id": 2066,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2266,
|
||||
"pedwt_period_exc_day_id": 2067,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2267,
|
||||
"pedwt_period_exc_day_id": 2068,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2268,
|
||||
"pedwt_period_exc_day_id": 2069,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2269,
|
||||
"pedwt_period_exc_day_id": 2070,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2270,
|
||||
"pedwt_period_exc_day_id": 2071,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
}
|
||||
],
|
||||
"SpecialDays": [
|
||||
{
|
||||
"ped_id": 2016,
|
||||
"ped_label": "Christmas",
|
||||
"ped_date_start": "2023-12-24",
|
||||
"ped_date_end": "2023-12-24",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 11,
|
||||
"ped_label": "Christmas 1st day",
|
||||
"ped_date_start": "2023-12-25",
|
||||
"ped_date_end": "2023-12-25",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 13,
|
||||
"ped_label": "Christmas 2nd day",
|
||||
"ped_date_start": "2023-12-26",
|
||||
"ped_date_end": "2023-12-26",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2022,
|
||||
"ped_label": "NewYear",
|
||||
"ped_date_start": "2024-01-01",
|
||||
"ped_date_end": "2024-01-01",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 14,
|
||||
"ped_label": "1848 Revolution Memorial Day",
|
||||
"ped_date_start": "2024-03-15",
|
||||
"ped_date_end": "2024-03-15",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2024,
|
||||
"ped_label": "Good Friday",
|
||||
"ped_date_start": "2024-03-29",
|
||||
"ped_date_end": "2024-03-29",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 2024
|
||||
},
|
||||
{
|
||||
"ped_id": 2025,
|
||||
"ped_label": "Easter Sunday",
|
||||
"ped_date_start": "2024-03-31",
|
||||
"ped_date_end": "2024-03-31",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 2024
|
||||
},
|
||||
{
|
||||
"ped_id": 2026,
|
||||
"ped_label": "Easter Monday",
|
||||
"ped_date_start": "2024-04-01",
|
||||
"ped_date_end": "2024-04-01",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 2024
|
||||
},
|
||||
{
|
||||
"ped_id": 2030,
|
||||
"ped_label": "Labour Day",
|
||||
"ped_date_start": "2024-05-01",
|
||||
"ped_date_end": "2024-05-01",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2027,
|
||||
"ped_label": "Whit Sunday",
|
||||
"ped_date_start": "2024-05-19",
|
||||
"ped_date_end": "2024-05-19",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 2024
|
||||
},
|
||||
{
|
||||
"ped_id": 2028,
|
||||
"ped_label": "Whit Monday",
|
||||
"ped_date_start": "2024-05-20",
|
||||
"ped_date_end": "2024-05-20",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 2024
|
||||
},
|
||||
{
|
||||
"ped_id": 2031,
|
||||
"ped_label": "National Day",
|
||||
"ped_date_start": "2024-08-20",
|
||||
"ped_date_end": "2024-08-20",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2054,
|
||||
"ped_label": "1956 Revolution Memorial Day",
|
||||
"ped_date_start": "2024-10-23",
|
||||
"ped_date_end": "2024-10-23",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2032,
|
||||
"ped_label": "All Saints Day",
|
||||
"ped_date_start": "2024-11-01",
|
||||
"ped_date_end": "2024-11-01",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2055,
|
||||
"ped_label": "Christmas",
|
||||
"ped_date_start": "2024-12-24",
|
||||
"ped_date_end": "2024-12-24",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2052,
|
||||
"ped_label": "Christmas 1st day",
|
||||
"ped_date_start": "2024-12-25",
|
||||
"ped_date_end": "2024-12-25",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2053,
|
||||
"ped_label": "Christmas 2nd day",
|
||||
"ped_date_start": "2024-12-26",
|
||||
"ped_date_end": "2024-12-26",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2057,
|
||||
"ped_label": "NewYear",
|
||||
"ped_date_start": "2025-01-01",
|
||||
"ped_date_end": "2025-01-01",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2029,
|
||||
"ped_label": "1848 Revolution Memorial Day",
|
||||
"ped_date_start": "2025-03-15",
|
||||
"ped_date_end": "2025-03-15",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2034,
|
||||
"ped_label": "Good Friday",
|
||||
"ped_date_start": "2025-04-18",
|
||||
"ped_date_end": "2025-04-18",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 2025
|
||||
},
|
||||
{
|
||||
"ped_id": 2035,
|
||||
"ped_label": "Easter",
|
||||
"ped_date_start": "2025-04-20",
|
||||
"ped_date_end": "2025-04-20",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 2025
|
||||
},
|
||||
{
|
||||
"ped_id": 2036,
|
||||
"ped_label": "Easter Monday",
|
||||
"ped_date_start": "2025-04-21",
|
||||
"ped_date_end": "2025-04-21",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 2025
|
||||
},
|
||||
{
|
||||
"ped_id": 2064,
|
||||
"ped_label": "Labour Day",
|
||||
"ped_date_start": "2025-05-01",
|
||||
"ped_date_end": "2025-05-01",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2038,
|
||||
"ped_label": "Whit Sunday",
|
||||
"ped_date_start": "2024-06-08",
|
||||
"ped_date_end": "2024-06-08",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 2025
|
||||
},
|
||||
{
|
||||
"ped_id": 2037,
|
||||
"ped_label": "Whit Monday",
|
||||
"ped_date_start": "2025-06-09",
|
||||
"ped_date_end": "2025-06-09",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 2025
|
||||
},
|
||||
{
|
||||
"ped_id": 2065,
|
||||
"ped_label": "<<<<< Hungary National Day >>>>>",
|
||||
"ped_date_start": "2025-08-20",
|
||||
"ped_date_end": "2025-08-20",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2021,
|
||||
"ped_label": "Holiday (Hungary)",
|
||||
"ped_date_start": "2023-12-31",
|
||||
"ped_date_end": "2023-12-31",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2050,
|
||||
"ped_label": "Uskrs",
|
||||
"ped_date_start": "2023-04-16",
|
||||
"ped_date_end": "2023-04-16",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2051,
|
||||
"ped_label": "Uskrs",
|
||||
"ped_date_start": "2023-04-16",
|
||||
"ped_date_end": "2023-04-16",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2056,
|
||||
"ped_label": "Holiday (Hungary)",
|
||||
"ped_date_start": "2022-12-31",
|
||||
"ped_date_end": "2022-12-31",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2058,
|
||||
"ped_label": "Good Friday",
|
||||
"ped_date_start": "2023-04-07",
|
||||
"ped_date_end": "2023-04-07",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 2023
|
||||
},
|
||||
{
|
||||
"ped_id": 2059,
|
||||
"ped_label": "Easter Sunday",
|
||||
"ped_date_start": "2023-04-09",
|
||||
"ped_date_end": "2023-04-09",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 2023
|
||||
},
|
||||
{
|
||||
"ped_id": 2060,
|
||||
"ped_label": "Easter Monday",
|
||||
"ped_date_start": "2023-04-10",
|
||||
"ped_date_end": "2023-04-10",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 2023
|
||||
},
|
||||
{
|
||||
"ped_id": 2061,
|
||||
"ped_label": "Whit Sunday",
|
||||
"ped_date_start": "2023-05-28",
|
||||
"ped_date_end": "2023-05-28",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 2023
|
||||
},
|
||||
{
|
||||
"ped_id": 2062,
|
||||
"ped_label": "Whit Monday",
|
||||
"ped_date_start": "2023-05-29",
|
||||
"ped_date_end": "2023-05-29",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 2023
|
||||
},
|
||||
{
|
||||
"ped_id": 2063,
|
||||
"ped_label": "Revolution Day (Hungary)",
|
||||
"ped_date_start": "2023-03-15",
|
||||
"ped_date_end": "2023-03-15",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2066,
|
||||
"ped_label": "All Saints Day",
|
||||
"ped_date_start": "2025-11-01",
|
||||
"ped_date_end": "2025-11-01",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2067,
|
||||
"ped_label": "Good Friday",
|
||||
"ped_date_start": "2024-03-29",
|
||||
"ped_date_end": "2024-03-29",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 2024
|
||||
},
|
||||
{
|
||||
"ped_id": 2068,
|
||||
"ped_label": "Easter",
|
||||
"ped_date_start": "2024-03-31",
|
||||
"ped_date_end": "2024-03-31",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 2024
|
||||
},
|
||||
{
|
||||
"ped_id": 2069,
|
||||
"ped_label": "Easter Monday",
|
||||
"ped_date_start": "2024-04-01",
|
||||
"ped_date_end": "2024-04-01",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 2024
|
||||
},
|
||||
{
|
||||
"ped_id": 2070,
|
||||
"ped_label": "Whit Monday",
|
||||
"ped_date_start": "2024-05-20",
|
||||
"ped_date_end": "2024-05-20",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 2024
|
||||
},
|
||||
{
|
||||
"ped_id": 2071,
|
||||
"ped_label": "Whit Sunday",
|
||||
"ped_date_start": "2024-05-19",
|
||||
"ped_date_end": "2024-05-19",
|
||||
"ped_period_special_day_id": 2,
|
||||
"ped_year": 2024
|
||||
}
|
||||
]
|
||||
}
|
629
test-files/tariff_korneuburg.json
Normal file
629
test-files/tariff_korneuburg.json
Normal file
@@ -0,0 +1,629 @@
|
||||
{
|
||||
"Project" : "Korneuburg",
|
||||
"Version" : "1.0.0",
|
||||
"Info" : "",
|
||||
"Currency": [
|
||||
{
|
||||
"pcu_id": 2,
|
||||
"pcu_sign": "€",
|
||||
"pcu_major": "EUR",
|
||||
"pcu_minor": "",
|
||||
"pcu_active": true
|
||||
}
|
||||
],
|
||||
"PaymentMethod": [
|
||||
{
|
||||
"pme_id": 1,
|
||||
"pme_label": "progressive"
|
||||
},
|
||||
{
|
||||
"pme_id": 2,
|
||||
"pme_label": "degressive"
|
||||
},
|
||||
{
|
||||
"pme_id": 3,
|
||||
"pme_label": "linear"
|
||||
},
|
||||
{
|
||||
"pme_id": 4,
|
||||
"pme_label": "steps"
|
||||
}
|
||||
],
|
||||
"PaymentOption": [
|
||||
{
|
||||
"pop_id": 1049,
|
||||
"pop_label": "Zone 1",
|
||||
"pop_payment_method_id": 3,
|
||||
"pop_day_end_time": "00:00:00",
|
||||
"pop_day_night_end_time": "00:00:00",
|
||||
"pop_price_night": 0,
|
||||
"pop_min_time": 30,
|
||||
"pop_max_time": 180,
|
||||
"pop_min_price": 60,
|
||||
"pop_carry_over": 1,
|
||||
"pop_daily_card_price": 0
|
||||
}
|
||||
],
|
||||
"PaymentRate": [
|
||||
{
|
||||
"pra_payment_option_id": 1049,
|
||||
"pra_payment_unit_id": 1,
|
||||
"pra_price": 10
|
||||
}
|
||||
],
|
||||
"Duration": [
|
||||
{
|
||||
"pun_id": 1,
|
||||
"pun_label": "5 min",
|
||||
"pun_duration": 5
|
||||
},
|
||||
{
|
||||
"pun_id": 3,
|
||||
"pun_label": "15 min",
|
||||
"pun_duration": 15
|
||||
},
|
||||
{
|
||||
"pun_id": 4,
|
||||
"pun_label": "1 min",
|
||||
"pun_duration": 1
|
||||
}
|
||||
],
|
||||
"WeekDaysWorktime": [
|
||||
{
|
||||
"pwd_id": 621,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 1,
|
||||
"pwd_time_from": "08:00:00",
|
||||
"pwd_time_to": "12:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 621,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 1,
|
||||
"pwd_time_from": "14:00:00",
|
||||
"pwd_time_to": "18:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 622,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 2,
|
||||
"pwd_time_from": "08:00:00",
|
||||
"pwd_time_to": "12:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 622,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 2,
|
||||
"pwd_time_from": "14:00:00",
|
||||
"pwd_time_to": "18:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 623,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 3,
|
||||
"pwd_time_from": "08:00:00",
|
||||
"pwd_time_to": "12:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 623,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 3,
|
||||
"pwd_time_from": "14:00:00",
|
||||
"pwd_time_to": "18:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 624,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 4,
|
||||
"pwd_time_from": "08:00:00",
|
||||
"pwd_time_to": "12:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 624,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 4,
|
||||
"pwd_time_from": "14:00:00",
|
||||
"pwd_time_to": "18:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 625,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 5,
|
||||
"pwd_time_from": "08:00:00",
|
||||
"pwd_time_to": "12:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 625,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 5,
|
||||
"pwd_time_from": "14:00:00",
|
||||
"pwd_time_to": "18:00:00"
|
||||
},
|
||||
{
|
||||
"pwd_id": 626,
|
||||
"pwd_period_week_day_id": 36,
|
||||
"pwd_period_day_in_week_id": 6,
|
||||
"pwd_time_from": "08:00:00",
|
||||
"pwd_time_to": "12:00:00"
|
||||
}
|
||||
],
|
||||
"SpecialDaysWorktime": [
|
||||
{
|
||||
"pedwt_id": 2156,
|
||||
"pedwt_period_exc_day_id": 2024,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2158,
|
||||
"pedwt_period_exc_day_id": 2025,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2160,
|
||||
"pedwt_period_exc_day_id": 2026,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2162,
|
||||
"pedwt_period_exc_day_id": 2027,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2164,
|
||||
"pedwt_period_exc_day_id": 2028,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2170,
|
||||
"pedwt_period_exc_day_id": 2030,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2172,
|
||||
"pedwt_period_exc_day_id": 2032,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2174,
|
||||
"pedwt_period_exc_day_id": 11,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2175,
|
||||
"pedwt_period_exc_day_id": 13,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2178,
|
||||
"pedwt_period_exc_day_id": 2022,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2179,
|
||||
"pedwt_period_exc_day_id": 14,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2184,
|
||||
"pedwt_period_exc_day_id": 2021,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2188,
|
||||
"pedwt_period_exc_day_id": 2031,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2189,
|
||||
"pedwt_period_exc_day_id": 2029,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2194,
|
||||
"pedwt_period_exc_day_id": 2034,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2200,
|
||||
"pedwt_period_exc_day_id": 2037,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2202,
|
||||
"pedwt_period_exc_day_id": 2038,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2226,
|
||||
"pedwt_period_exc_day_id": 2016,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2245,
|
||||
"pedwt_period_exc_day_id": 2035,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2246,
|
||||
"pedwt_period_exc_day_id": 2036,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2249,
|
||||
"pedwt_period_exc_day_id": 2050,
|
||||
"pedwt_time_from": "08:00:00",
|
||||
"pedwt_time_to": "16:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2250,
|
||||
"pedwt_period_exc_day_id": 2051,
|
||||
"pedwt_time_from": "08:00:00",
|
||||
"pedwt_time_to": "16:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2251,
|
||||
"pedwt_period_exc_day_id": 2052,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2252,
|
||||
"pedwt_period_exc_day_id": 2053,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2253,
|
||||
"pedwt_period_exc_day_id": 2054,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2254,
|
||||
"pedwt_period_exc_day_id": 2055,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2255,
|
||||
"pedwt_period_exc_day_id": 2056,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2256,
|
||||
"pedwt_period_exc_day_id": 2057,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2257,
|
||||
"pedwt_period_exc_day_id": 2058,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2258,
|
||||
"pedwt_period_exc_day_id": 2059,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
},
|
||||
{
|
||||
"pedwt_id": 2259,
|
||||
"pedwt_period_exc_day_id": 2060,
|
||||
"pedwt_time_from": "00:00:00",
|
||||
"pedwt_time_to": "00:00:00",
|
||||
"pedwt_price": 0
|
||||
}
|
||||
],
|
||||
"SpecialDays": [
|
||||
{
|
||||
"ped_id": 11,
|
||||
"ped_label": "Mariae Empfaengnis",
|
||||
"ped_date_start": "2023-12-08",
|
||||
"ped_date_end": "2023-12-08",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 13,
|
||||
"ped_label": "Christtag",
|
||||
"ped_date_start": "2023-12-25",
|
||||
"ped_date_end": "2023-12-25",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 14,
|
||||
"ped_label": "Stefanitag",
|
||||
"ped_date_start": "2023-12-26",
|
||||
"ped_date_end": "2023-12-26",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2016,
|
||||
"ped_label": "Neujahr",
|
||||
"ped_date_start": "2024-01-01",
|
||||
"ped_date_end": "2024-01-01",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2021,
|
||||
"ped_label": "Heilig Drei Koenige",
|
||||
"ped_date_start": "2024-01-06",
|
||||
"ped_date_end": "2024-01-06",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2022,
|
||||
"ped_label": "Ostermontag",
|
||||
"ped_date_start": "2024-01-04",
|
||||
"ped_date_end": "2024-01-04",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 2024
|
||||
},
|
||||
{
|
||||
"ped_id": 2024,
|
||||
"ped_label": "Staatsfeiertag",
|
||||
"ped_date_start": "2024-05-01",
|
||||
"ped_date_end": "2024-05-01",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2025,
|
||||
"ped_label": "Christi Himmelfahrt",
|
||||
"ped_date_start": "2024-05-09",
|
||||
"ped_date_end": "2024-05-09",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 2024
|
||||
},
|
||||
{
|
||||
"ped_id": 2026,
|
||||
"ped_label": "Pfingst Montag",
|
||||
"ped_date_start": "2024-05-20",
|
||||
"ped_date_end": "2024-05-20",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 2024
|
||||
},
|
||||
{
|
||||
"ped_id": 2027,
|
||||
"ped_label": "Fronleichnam",
|
||||
"ped_date_start": "2024-05-30",
|
||||
"ped_date_end": "2024-05-30",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 2024
|
||||
},
|
||||
{
|
||||
"ped_id": 2028,
|
||||
"ped_label": "Maria Himmelfahrt",
|
||||
"ped_date_start": "2024-08-15",
|
||||
"ped_date_end": "2024-08-15",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2029,
|
||||
"ped_label": "Nationalfeiertag",
|
||||
"ped_date_start": "2024-10-26",
|
||||
"ped_date_end": "2024-10-26",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2030,
|
||||
"ped_label": "Allerheiligen",
|
||||
"ped_date_start": "2024-11-01",
|
||||
"ped_date_end": "2024-11-01",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2031,
|
||||
"ped_label": "Mariae Empfaengnis",
|
||||
"ped_date_start": "2024-08-12",
|
||||
"ped_date_end": "2024-08-12",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2032,
|
||||
"ped_label": "Christtag",
|
||||
"ped_date_start": "2024-12-25",
|
||||
"ped_date_end": "2024-12-25",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2034,
|
||||
"ped_label": "Stefanitag",
|
||||
"ped_date_start": "2024-12-26",
|
||||
"ped_date_end": "2024-12-26",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2035,
|
||||
"ped_label": "Neujahr",
|
||||
"ped_date_start": "2025-01-01",
|
||||
"ped_date_end": "2025-01-01",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2036,
|
||||
"ped_label": "Heilig Drei Koenige",
|
||||
"ped_date_start": "2025-06-01",
|
||||
"ped_date_end": "2025-06-01",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2037,
|
||||
"ped_label": "Ostermontag",
|
||||
"ped_date_start": "2025-04-21",
|
||||
"ped_date_end": "2025-04-21",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 2025
|
||||
},
|
||||
{
|
||||
"ped_id": 2038,
|
||||
"ped_label": "Staatsfeiertag",
|
||||
"ped_date_start": "2025-05-01",
|
||||
"ped_date_end": "2025-05-01",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 2025
|
||||
},
|
||||
{
|
||||
"ped_id": 2050,
|
||||
"ped_label": "Christi Himmelfahrt",
|
||||
"ped_date_start": "2025-05-29",
|
||||
"ped_date_end": "2025-05-29",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 2025
|
||||
},
|
||||
{
|
||||
"ped_id": 2051,
|
||||
"ped_label": "Pfingstmontag",
|
||||
"ped_date_start": "2025-06-09",
|
||||
"ped_date_end": "2025-06-09",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 2025
|
||||
},
|
||||
{
|
||||
"ped_id": 2052,
|
||||
"ped_label": "Fronlaeichnam",
|
||||
"ped_date_start": "2025-06-19",
|
||||
"ped_date_end": "2025-06-19",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 2025
|
||||
},
|
||||
{
|
||||
"ped_id": 2053,
|
||||
"ped_label": "Mariae Himmelfahrt",
|
||||
"ped_date_start": "2025-08-15",
|
||||
"ped_date_end": "2025-08-15",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2054,
|
||||
"ped_label": "Nationalfeiertag",
|
||||
"ped_date_start": "2025-10-26",
|
||||
"ped_date_end": "2025-10-26",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2055,
|
||||
"ped_label": "Allerheiligen",
|
||||
"ped_date_start": "2025-11-01",
|
||||
"ped_date_end": "2025-11-01",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2056,
|
||||
"ped_label": "Mariae Empfaengnis",
|
||||
"ped_date_start": "2025-12-08",
|
||||
"ped_date_end": "2025-12-08",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2057,
|
||||
"ped_label": "Christtag",
|
||||
"ped_date_start": "2025-12-25",
|
||||
"ped_date_end": "2025-12-25",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2058,
|
||||
"ped_label": "Stefanitag",
|
||||
"ped_date_start": "2025-12-26",
|
||||
"ped_date_end": "2025-12-26",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2059,
|
||||
"ped_label": "Neujahr",
|
||||
"ped_date_start": "2026-01-01",
|
||||
"ped_date_end": "2026-01-01",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
},
|
||||
{
|
||||
"ped_id": 2060,
|
||||
"ped_label": "Heilige Drei Koenige",
|
||||
"ped_date_start": "2026-01-06",
|
||||
"ped_date_end": "2026-01-06",
|
||||
"ped_period_special_day_id": 1,
|
||||
"ped_year": 0
|
||||
}
|
||||
],
|
||||
"PeriodYear": [
|
||||
{
|
||||
"pye_id": 8,
|
||||
"pye_label": "Whole year",
|
||||
"pye_start_month": 1,
|
||||
"pye_start_day": 1,
|
||||
"pye_end_month": 12,
|
||||
"pye_end_day": 31
|
||||
}
|
||||
]
|
||||
}
|
BIN
vue/become_a_ninja_with_vue_sample.pdf
Normal file
BIN
vue/become_a_ninja_with_vue_sample.pdf
Normal file
Binary file not shown.
BIN
vue/javascript-the-gefinitive-guide-6th-edition.pdf
Normal file
BIN
vue/javascript-the-gefinitive-guide-6th-edition.pdf
Normal file
Binary file not shown.
BIN
vue/vue.js-in-action.pdf
Normal file
BIN
vue/vue.js-in-action.pdf
Normal file
Binary file not shown.
Reference in New Issue
Block a user