Compare commits
233 Commits
moransBran
...
neuhauser-
Author | SHA1 | Date | |
---|---|---|---|
631378deeb | |||
9d713c894d | |||
38eca50d83 | |||
f7af631de6 | |||
15006e8e22 | |||
87c0f4397b | |||
24c6788427 | |||
f848baec83 | |||
1467a69487 | |||
0b779b7846 | |||
25a39fdc61 | |||
9438a535ea | |||
f87399ed44 | |||
868df3dd32 | |||
d2a85532ce | |||
e6399d477b | |||
f450d85bff | |||
f46adac56d | |||
c799c24658 | |||
dbcd27b377 | |||
c2a8f0b00b | |||
088453c179 | |||
8077167498 | |||
5deaa48f8e | |||
3a6a47725f | |||
17968082f1 | |||
7dcd7a624b | |||
5464054f65 | |||
e1ab060dc3 | |||
8aa9aa497a | |||
4c1cd45866 | |||
6bf3960349 | |||
9899fe76fe | |||
7bb2cbf01e | |||
689bf9b3ba | |||
4c07d9fdb9 | |||
1e866c74e2 | |||
c39b3527e1 | |||
f8dc59532c | |||
1ea42f88ba | |||
0af858daea | |||
3311537fee | |||
5b8ac6cc59 | |||
809df53658 | |||
ea5ca54c4c | |||
b347b6e50e | |||
124fd60c41 | |||
f40ae7200b | |||
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
|
@@ -3,6 +3,7 @@
|
||||
|
||||
#include <time.h>
|
||||
#include <inttypes.h>
|
||||
#include "tariff_time_range.h"
|
||||
|
||||
#include <QString>
|
||||
#include <QDateTime>
|
||||
@@ -31,6 +32,22 @@ struct CALCULATE_LIBRARY_API price_t {
|
||||
double brutto;
|
||||
double vat_percentage;
|
||||
double vat;
|
||||
|
||||
explicit price_t() {
|
||||
units = 0;
|
||||
netto = brutto = vat_percentage = vat = 0.0;
|
||||
}
|
||||
};
|
||||
|
||||
enum class PERMIT_TYPE : quint8 {
|
||||
SHORT_TERM_PARKING,
|
||||
DAY_TICKET,
|
||||
SZEGED_START,
|
||||
SZEGED_STOP,
|
||||
DAY_TICKET_ADULT,
|
||||
DAY_TICKET_TEEN,
|
||||
DAY_TICKET_CHILD,
|
||||
INVALID
|
||||
};
|
||||
|
||||
struct CALCULATE_LIBRARY_API CalcState {
|
||||
@@ -46,13 +63,31 @@ struct CALCULATE_LIBRARY_API CalcState {
|
||||
ABOVE_MAX_PARKING_TIME,
|
||||
BELOW_MIN_PARKING_TIME,
|
||||
BELOW_MIN_PARKING_PRICE,
|
||||
OVERPAID
|
||||
OVERPAID,
|
||||
OUTSIDE_ALLOWED_PARKING_TIME
|
||||
};
|
||||
|
||||
State m_status;
|
||||
QString m_desc;
|
||||
TariffTimeRange m_allowedTimeRange;
|
||||
|
||||
explicit CalcState() : m_status(State::SUCCESS), m_desc("") {}
|
||||
explicit CalcState()
|
||||
: m_status(State::SUCCESS)
|
||||
, m_desc("") {
|
||||
}
|
||||
|
||||
explicit CalcState(State state, QString desc = "")
|
||||
: m_status(state)
|
||||
, m_desc(desc) {
|
||||
}
|
||||
|
||||
explicit CalcState(State state, QString desc = "",
|
||||
QTime const &from = QTime(),
|
||||
QTime const &until = QTime())
|
||||
: m_status(state)
|
||||
, m_desc(desc)
|
||||
, m_allowedTimeRange(from, until) {
|
||||
}
|
||||
|
||||
explicit operator bool() const noexcept {
|
||||
return (m_status == State::SUCCESS);
|
||||
@@ -75,7 +110,7 @@ struct CALCULATE_LIBRARY_API CalcState {
|
||||
break;
|
||||
case State::NEGATIVE_PARING_TIME:
|
||||
s = "NEGATIVE_PARKING_TIME";
|
||||
break;
|
||||
break;
|
||||
case State::ABOVE_MAX_PARKING_TIME:
|
||||
s = "ABOVE_MAX_PARKING_TIME";
|
||||
break;
|
||||
@@ -96,12 +131,23 @@ struct CALCULATE_LIBRARY_API CalcState {
|
||||
break;
|
||||
case State::WRONG_ISO_TIME_FORMAT:
|
||||
s = "WRONG_ISO_TIME_FORMAT";
|
||||
break;
|
||||
case State::OUTSIDE_ALLOWED_PARKING_TIME:
|
||||
s = "OUTSIDE_ALLOWED_PARKING_TIME";
|
||||
}
|
||||
return s + ":" + m_desc;
|
||||
}
|
||||
|
||||
CalcState &set(State s) { m_status = s; return *this; }
|
||||
CalcState &setDesc(QString s) { m_desc = s; return *this; }
|
||||
|
||||
void setAllowedTimeRange(QTime const &from, QTime const &until) {
|
||||
m_allowedTimeRange.setTimeRange(from, until);
|
||||
}
|
||||
|
||||
TariffTimeRange getAllowedTimeRange() {
|
||||
return m_allowedTimeRange;
|
||||
}
|
||||
};
|
||||
|
||||
CalcState CALCULATE_LIBRARY_API init_tariff(parking_tariff_t **tariff,
|
||||
@@ -109,7 +155,15 @@ 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, PERMIT_TYPE permitType = PERMIT_TYPE::SHORT_TERM_PARKING);
|
||||
int CALCULATE_LIBRARY_API get_maximal_parkingtime(Configuration *cfg, PERMIT_TYPE permitType = PERMIT_TYPE::SHORT_TERM_PARKING);
|
||||
int CALCULATE_LIBRARY_API get_minimal_parkingprice(Configuration *cfg, PERMIT_TYPE permitType = PERMIT_TYPE::SHORT_TERM_PARKING);
|
||||
int CALCULATE_LIBRARY_API get_maximal_parkingprice(Configuration *cfg, PERMIT_TYPE permitType = PERMIT_TYPE::SHORT_TERM_PARKING);
|
||||
|
||||
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 +172,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 +186,19 @@ 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);
|
||||
|
||||
CalcState CALCULATE_LIBRARY_API compute_price_for_daily_ticket(
|
||||
parking_tariff_t *tariff,
|
||||
QDateTime const &start_parking_time,
|
||||
QDateTime &ticketEndTime,
|
||||
PERMIT_TYPE permitType,
|
||||
struct price_t *price);
|
||||
//#ifdef __cplusplus
|
||||
//} // extern "C"
|
||||
//#endif
|
||||
|
@@ -1,12 +1,42 @@
|
||||
#pragma once
|
||||
#ifndef CALCULATOR_FUNCTIONS_H_INCLUDED
|
||||
#define CALCULATOR_FUNCTIONS_H_INCLUDED
|
||||
|
||||
#include <iostream>
|
||||
#include <optional>
|
||||
|
||||
#include "configuration.h"
|
||||
#include "calculate_price.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;
|
||||
mutable QList<int> m_priceSteps;
|
||||
|
||||
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; }
|
||||
|
||||
void ResetPriceSteps() { m_priceSteps.clear(); }
|
||||
QList<int> priceSteps() const { return m_priceSteps; }
|
||||
|
||||
CalcState isParkingAllowed(Configuration const *cfg, QDateTime const &start);
|
||||
|
||||
/// <summary>
|
||||
/// Gets duration in seconds from cost
|
||||
/// </summary>
|
||||
@@ -23,10 +53,72 @@ 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);
|
||||
std::optional<struct price_t> GetDailyTicketPrice(Configuration* cfg, QDateTime const &startDatetime, QDateTime &endTime, PERMIT_TYPE permitType);
|
||||
|
||||
//
|
||||
// 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); }
|
||||
|
||||
QList<int> GetPriceSteps(Configuration *cfg) const;
|
||||
|
||||
// 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:
|
||||
// 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;
|
||||
|
||||
private:
|
||||
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,23 @@
|
||||
#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>
|
||||
#include <optional>
|
||||
|
||||
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 +48,11 @@ 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;
|
||||
multimap<int, ATBCustomer> Customer;
|
||||
|
||||
/// <summary>
|
||||
/// Parse JSON string
|
||||
@@ -48,6 +61,17 @@ public:
|
||||
/// <returns>Returns operation status bool (OK | FAIL) </returns>
|
||||
bool ParseJson(Configuration* cfg, const char* json);
|
||||
|
||||
ATBPaymentOption &getPaymentOptions();
|
||||
ATBPaymentOption const &getPaymentOptions() const;
|
||||
QVector<ATBPaymentOption> &getAllPaymentOptions();
|
||||
QVector<ATBPaymentOption> const &getAllPaymentOptions() const;
|
||||
std::optional<QVector<ATBPaymentRate>> getPaymentRateForAllKeys() const;
|
||||
std::optional<QVector<ATBPaymentRate>> getPaymentRateForKey(int key) const;
|
||||
std::optional<QVector<ATBDailyTicket>> getDailyTicketsForAllKeys() const;
|
||||
std::optional<QVector<ATBDailyTicket>> getDailyTicketsForKey(int key) const;
|
||||
std::optional<ATBCustomer> getCustomerForType(ATBCustomer::CustomerType customerType);
|
||||
std::optional<ATBWeekDaysWorktime> getWeekDayWorkTime(QTime const &time, Qt::DayOfWeek dayOfWeek);
|
||||
|
||||
private:
|
||||
/// <summary>
|
||||
/// Identify type of JSON member
|
||||
@@ -55,4 +79,6 @@ private:
|
||||
/// <param name="member_name"></param>
|
||||
/// <returns></returns>
|
||||
MemberType IdentifyJsonMember(const char* member_name);
|
||||
|
||||
QVector<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,37 @@
|
||||
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;
|
||||
|
||||
void reset() {
|
||||
pop_id = 0;
|
||||
pop_label = "";
|
||||
pop_payment_method_id = 0;
|
||||
pop_day_end_time = "";
|
||||
pop_day_night_end_time = "";
|
||||
pop_price_night = 0;
|
||||
pop_min_time = 0;
|
||||
pop_max_time = 0;
|
||||
pop_min_price = 0;
|
||||
pop_carry_over = -1;
|
||||
pop_carry_over_time_range_id = -1;
|
||||
pop_daily_card_price = -1;
|
||||
pop_business_hours = -1;
|
||||
pop_time_step_config = -1;
|
||||
}
|
||||
|
||||
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;
|
||||
};
|
||||
|
22
library/include/mobilisis/tariff_business_hours.h
Normal file
22
library/include/mobilisis/tariff_business_hours.h
Normal file
@@ -0,0 +1,22 @@
|
||||
#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
|
||||
AllDaysWithRestrictedHours = 128, // every day, restricted to some time range
|
||||
NoBusinessHoursDefined = 255
|
||||
};
|
||||
|
||||
#endif // TARIFF_BUSINESS_HOURS_H_INCLUDED
|
47
library/include/mobilisis/tariff_customer.h
Normal file
47
library/include/mobilisis/tariff_customer.h
Normal file
@@ -0,0 +1,47 @@
|
||||
#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;
|
||||
|
||||
int cust_id;
|
||||
CustomerType cust_type;
|
||||
QString cust_label;
|
||||
|
||||
friend QDebug operator<<(QDebug debug, ATBCustomer const &customer) {
|
||||
QDebugStateSaver saver(debug);
|
||||
|
||||
debug.nospace() << "CUSTOMER" << "\n";
|
||||
|
||||
switch(customer.cust_type) {
|
||||
case ATBCustomer::CustomerType::ADULT:
|
||||
debug.nospace()
|
||||
<< " cust_id: " << customer.cust_id << "\n"
|
||||
<< " cust_type: " << "CustomerType::ADULT" << "\n"
|
||||
<< "cust_label: " << customer.cust_label << "\n";
|
||||
break;
|
||||
case ATBCustomer::CustomerType::CHILD:
|
||||
debug.nospace()
|
||||
<< " cust_id: " << customer.cust_id << "\n"
|
||||
<< " cust_type: " << "CustomerType::CHILD" << "\n"
|
||||
<< "cust_label: " << customer.cust_label << "\n";
|
||||
break;
|
||||
case ATBCustomer::CustomerType::TEEN:
|
||||
debug.nospace()
|
||||
<< " cust_id: " << customer.cust_id << "\n"
|
||||
<< " cust_type: " << "CustomerType::TEEN" << "\n"
|
||||
<< "cust_label: " << customer.cust_label << "\n";
|
||||
break;
|
||||
}
|
||||
|
||||
return debug;
|
||||
}
|
||||
};
|
||||
|
||||
#endif // TARIFF_CUSTOMER_H_INCLUDED
|
67
library/include/mobilisis/tariff_daily_ticket.h
Normal file
67
library/include/mobilisis/tariff_daily_ticket.h
Normal file
@@ -0,0 +1,67 @@
|
||||
#ifndef TARIFF_DAILY_TICKET_H_INCLUDED
|
||||
#define TARIFF_DAILY_TICKET_H_INCLUDED
|
||||
|
||||
#include <QString>
|
||||
#include <QDateTime>
|
||||
#include <QDebug>
|
||||
#include <QVector>
|
||||
#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_id;
|
||||
int daily_ticket_price_id;
|
||||
|
||||
int daily_ticket_tb_id;
|
||||
// time base setting for ticket:
|
||||
// absolute: using time stamps
|
||||
// relative: use offsets from
|
||||
// some reference time point,
|
||||
// typically "start time".
|
||||
|
||||
QVector<int> daily_ticket_clearance_customer_ids;
|
||||
// who is allowed to buy the ticket:
|
||||
// list of customer types
|
||||
|
||||
QTime daily_ticket_from_min; // absolute time base
|
||||
QTime daily_ticket_to_max;
|
||||
int daily_ticket_from_offset_min; // relative time base
|
||||
int daily_ticket_to_offset_max;
|
||||
|
||||
void reset() {
|
||||
daily_ticket_payment_option_id = 0;
|
||||
daily_ticket_id = 0;
|
||||
daily_ticket_price_id = 0;
|
||||
daily_ticket_tb_id = 0;
|
||||
daily_ticket_clearance_customer_ids.clear();
|
||||
daily_ticket_from_min = QTime();
|
||||
daily_ticket_to_max = QTime();
|
||||
daily_ticket_from_offset_min = 0;
|
||||
daily_ticket_to_offset_max = 0;
|
||||
}
|
||||
|
||||
friend QDebug operator<<(QDebug debug, ATBDailyTicket const &ticket) {
|
||||
QDebugStateSaver saver(debug);
|
||||
|
||||
debug.nospace()
|
||||
<< "DAILY TICKET " << "\n"
|
||||
<< " daily_ticket_id: " << ticket.daily_ticket_id << "\n"
|
||||
<< " daily_ticket_payment_option_id: " << ticket.daily_ticket_payment_option_id << "\n"
|
||||
<< " daily_ticket_tbase_id: " << ticket.daily_ticket_tb_id << "\n"
|
||||
<< " daily_ticket_price_id: " << ticket.daily_ticket_price_id << "\n"
|
||||
<< "daily_ticket_clearance_customer_ids: " << ticket.daily_ticket_clearance_customer_ids << "\n"
|
||||
<< " daily_ticket_from_min: " << ticket.daily_ticket_from_min.toString(Qt::ISODate) << "\n"
|
||||
<< " daily_ticket_to_min: " << ticket.daily_ticket_to_max.toString(Qt::ISODate) << "\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
|
||||
|
44
library/include/mobilisis/tariff_timebase.h
Normal file
44
library/include/mobilisis/tariff_timebase.h
Normal file
@@ -0,0 +1,44 @@
|
||||
#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);
|
||||
|
||||
debug.nospace() << "TIMEBASE" << "\n";
|
||||
|
||||
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,107 @@
|
||||
#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, PERMIT_TYPE permitType) {
|
||||
int minTime = 0;
|
||||
|
||||
switch(permitType) {
|
||||
case PERMIT_TYPE::SHORT_TERM_PARKING: { // e.g. szeged (customer_281)
|
||||
minTime = cfg->getPaymentOptions().pop_min_time;
|
||||
} break;
|
||||
case PERMIT_TYPE::DAY_TICKET_ADULT: {
|
||||
} break;
|
||||
case PERMIT_TYPE::DAY_TICKET_TEEN: {
|
||||
} break;
|
||||
case PERMIT_TYPE::DAY_TICKET_CHILD: {
|
||||
} break;
|
||||
default:
|
||||
// for each new sell-procedure, recomute the timesteps. implicitly, set
|
||||
// the minimal parking time.
|
||||
Calculator::GetInstance().ResetTimeSteps();
|
||||
Calculator::GetInstance().GetTimeSteps(cfg);
|
||||
minTime = qRound(cfg->getPaymentOptions().pop_min_time);
|
||||
}
|
||||
|
||||
return minTime;
|
||||
}
|
||||
|
||||
int CALCULATE_LIBRARY_API get_maximal_parkingtime(Configuration *cfg, PERMIT_TYPE permitType) {
|
||||
int maxTime = 0;
|
||||
|
||||
switch(permitType) {
|
||||
case PERMIT_TYPE::SHORT_TERM_PARKING: { // e.g. szeged (customer_281)
|
||||
maxTime = cfg->getPaymentOptions().pop_max_time;
|
||||
} break;
|
||||
case PERMIT_TYPE::DAY_TICKET_ADULT: {
|
||||
} break;
|
||||
case PERMIT_TYPE::DAY_TICKET_TEEN: {
|
||||
} break;
|
||||
case PERMIT_TYPE::DAY_TICKET_CHILD: {
|
||||
} break;
|
||||
default: ;
|
||||
}
|
||||
|
||||
return maxTime;
|
||||
}
|
||||
|
||||
int CALCULATE_LIBRARY_API get_minimal_parkingprice(Configuration *cfg, PERMIT_TYPE permitType) {
|
||||
int minPrice = -1;
|
||||
|
||||
switch(permitType) {
|
||||
case PERMIT_TYPE::SHORT_TERM_PARKING: { // e.g. szeged (customer_281)
|
||||
minPrice = cfg->getPaymentOptions().pop_min_price;
|
||||
} break;
|
||||
case PERMIT_TYPE::DAY_TICKET_ADULT: {
|
||||
} break;
|
||||
case PERMIT_TYPE::DAY_TICKET_TEEN: {
|
||||
} break;
|
||||
case PERMIT_TYPE::DAY_TICKET_CHILD: {
|
||||
} break;
|
||||
default: ;
|
||||
}
|
||||
|
||||
return minPrice;
|
||||
}
|
||||
|
||||
int CALCULATE_LIBRARY_API get_maximal_parkingprice(Configuration *cfg, PERMIT_TYPE permitType) {
|
||||
int maxPrice = -1;
|
||||
|
||||
switch(permitType) {
|
||||
case PERMIT_TYPE::SHORT_TERM_PARKING: { // e.g. szeged (customer_281)
|
||||
int const key = cfg->getPaymentOptions().pop_id;
|
||||
int const maxTime = cfg->getPaymentOptions().pop_max_time; // maxTime is given in minutes
|
||||
std::optional<QVector<ATBPaymentRate>> const &pv = cfg->getPaymentRateForKey(key);
|
||||
if (pv) {
|
||||
QVector<ATBPaymentRate> const &paymentRate = pv.value();
|
||||
if (paymentRate.size() > 0) {
|
||||
int const price = paymentRate.at(0).pra_price; // price is given per hour
|
||||
maxPrice = qRound((maxTime * price) / 60.0f);
|
||||
}
|
||||
}
|
||||
} break;
|
||||
case PERMIT_TYPE::DAY_TICKET_ADULT:
|
||||
break;
|
||||
case PERMIT_TYPE::DAY_TICKET_TEEN:
|
||||
break;
|
||||
case PERMIT_TYPE::DAY_TICKET_CHILD:
|
||||
break;
|
||||
default: ;
|
||||
}
|
||||
|
||||
return maxPrice;
|
||||
}
|
||||
|
||||
int CALCULATE_LIBRARY_API get_zone_nr(int zone)
|
||||
{
|
||||
@@ -92,14 +186,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));
|
||||
@@ -121,7 +311,6 @@ CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket(
|
||||
return calcState.set(CalcState::State::BELOW_MIN_PARKING_TIME);
|
||||
}
|
||||
if (duration == 0) {
|
||||
memset(price, 0x00, sizeof(*price));
|
||||
return calcState.set(CalcState::State::SUCCESS);
|
||||
}
|
||||
|
||||
@@ -129,13 +318,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 +343,49 @@ 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) {
|
||||
memset(price, 0x00, sizeof(*price));
|
||||
if (netto_parking_time == 0) {
|
||||
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 +421,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 +441,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,12 +469,53 @@ 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);
|
||||
}
|
||||
|
||||
|
||||
CalcState CALCULATE_LIBRARY_API compute_price_for_daily_ticket(
|
||||
parking_tariff_t *tariff,
|
||||
QDateTime const &startDatetime,
|
||||
QDateTime &endDatetime,
|
||||
PERMIT_TYPE permitType,
|
||||
struct price_t *price) {// return value
|
||||
CalcState calcState;
|
||||
|
||||
|
||||
if (startDatetime.isValid()) {
|
||||
if (std::optional<struct price_t> p =
|
||||
Calculator::GetInstance().GetDailyTicketPrice(tariff,
|
||||
startDatetime,
|
||||
endDatetime,
|
||||
permitType)) {
|
||||
*price = p.value();
|
||||
}
|
||||
} 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;
|
||||
ATBPeriodYear YearPeriod;
|
||||
ATBDailyTicket DailyTicket;
|
||||
ATBTimeBase TimeBase;
|
||||
ATBCustomer Customer;
|
||||
ATBTimeRange TimeRange;
|
||||
ATBTimeStepConfig TimeStepConfig;
|
||||
|
||||
MemberType mb_type = MemberType::UnknownType;
|
||||
this->currentPaymentOptions.clear();
|
||||
|
||||
// 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,157 @@ 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_id")) {
|
||||
if (k->value.IsInt()) {
|
||||
DailyTicket.daily_ticket_id = k->value.GetInt();
|
||||
}
|
||||
} else
|
||||
if (QString(inner_obj_name) == QString("daily_ticket_price_id")) {
|
||||
if (k->value.IsInt()) {
|
||||
DailyTicket.daily_ticket_price_id = k->value.GetInt();
|
||||
}
|
||||
} else
|
||||
if (QString(inner_obj_name) == QString("daily_ticket_tb_id")) {
|
||||
if (k->value.IsInt()) {
|
||||
DailyTicket.daily_ticket_tb_id = k->value.GetInt();
|
||||
}
|
||||
} else
|
||||
if (QString(inner_obj_name) == QString("daily_ticket_clearance_customer_ids")) {
|
||||
if (k->value.IsArray()) {
|
||||
auto customerIds = k->value.GetArray();
|
||||
for (rapidjson::SizeType i=0; i < customerIds.Size(); ++i) {
|
||||
if (customerIds[i].IsInt()) {
|
||||
DailyTicket.daily_ticket_clearance_customer_ids.append(customerIds[i].GetInt());
|
||||
}
|
||||
}
|
||||
}
|
||||
} else
|
||||
if (QString(inner_obj_name) == QString("daily_ticket_from_min")) {
|
||||
if (k->value.IsString()) {
|
||||
std::string const from_min = k->value.GetString();
|
||||
char const *from_min_c_str = from_min.c_str(); // for debugging
|
||||
DailyTicket.daily_ticket_from_min = QTime::fromString(from_min_c_str, Qt::ISODate);
|
||||
}
|
||||
} else
|
||||
if (QString(inner_obj_name) == QString("daily_ticket_to_max")) {
|
||||
if (k->value.IsString()) {
|
||||
std::string const to_max = k->value.GetString();
|
||||
char const *to_max_c_str = to_max.c_str();
|
||||
DailyTicket.daily_ticket_to_max = QTime::fromString(to_max_c_str, Qt::ISODate);
|
||||
}
|
||||
} else
|
||||
if (QString(inner_obj_name) == QString("daily_ticket_from_offset_min")) {
|
||||
if (k->value.IsInt()) {
|
||||
int const from_offset_min = k->value.GetInt();
|
||||
DailyTicket.daily_ticket_from_offset_min = from_offset_min;
|
||||
}
|
||||
} else
|
||||
if (QString(inner_obj_name) == QString("daily_ticket_to_offset_max")) {
|
||||
if (k->value.IsInt()) {
|
||||
int to_offset_max = k->value.GetInt();
|
||||
DailyTicket.daily_ticket_to_offset_max = to_offset_max;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case MemberType::CustomerType:
|
||||
if (QString(inner_obj_name) == QString("cust_id")) {
|
||||
if (k->value.IsInt()) {
|
||||
Customer.cust_id = k->value.GetInt();
|
||||
}
|
||||
} else
|
||||
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();
|
||||
@@ -144,23 +320,45 @@ bool Configuration::ParseJson(Configuration* cfg, const char* json)
|
||||
else if (strcmp(inner_obj_name, "pra_price") == 0) PaymentRate.pra_price = k->value.GetDouble();
|
||||
break;
|
||||
case MemberType::PaymentOptionType:
|
||||
if (strcmp(inner_obj_name, "pop_id") == 0) PaymentOption.pop_id = k->value.GetInt();
|
||||
else if (strcmp(inner_obj_name, "pop_label") == 0) PaymentOption.pop_label = k->value.GetString();
|
||||
else if (strcmp(inner_obj_name, "pop_payment_method_id") == 0) PaymentOption.pop_payment_method_id = k->value.GetInt();
|
||||
else if (strcmp(inner_obj_name, "pop_day_end_time") == 0) PaymentOption.pop_day_end_time = k->value.GetString();
|
||||
else if (strcmp(inner_obj_name, "pop_day_night_end_time") == 0) PaymentOption.pop_day_night_end_time = k->value.GetString();
|
||||
else if (strcmp(inner_obj_name, "pop_price_night") == 0) PaymentOption.pop_price_night = k->value.GetDouble();
|
||||
else if (strcmp(inner_obj_name, "pop_min_time") == 0) PaymentOption.pop_min_time = k->value.GetDouble();
|
||||
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_daily_card_price") == 0) PaymentOption.pop_daily_card_price = k->value.GetInt();
|
||||
break;
|
||||
if (strcmp(inner_obj_name, "pop_id") == 0) {
|
||||
this->currentPaymentOptions.append(ATBPaymentOption());
|
||||
this->currentPaymentOptions.last().reset();
|
||||
this->currentPaymentOptions.last().pop_id = k->value.GetInt();
|
||||
} else if (strcmp(inner_obj_name, "pop_label") == 0) {
|
||||
this->currentPaymentOptions.last().pop_label = k->value.GetString();
|
||||
} else if (strcmp(inner_obj_name, "pop_payment_method_id") == 0) {
|
||||
this->currentPaymentOptions.last().pop_payment_method_id = k->value.GetInt();
|
||||
} else if (strcmp(inner_obj_name, "pop_day_end_time") == 0) {
|
||||
this->currentPaymentOptions.last().pop_day_end_time = k->value.GetString();
|
||||
} else if (strcmp(inner_obj_name, "pop_day_night_end_time") == 0) {
|
||||
this->currentPaymentOptions.last().pop_day_night_end_time = k->value.GetString();
|
||||
} else if (strcmp(inner_obj_name, "pop_price_night") == 0) {
|
||||
this->currentPaymentOptions.last().pop_price_night = k->value.GetDouble();
|
||||
} else if (strcmp(inner_obj_name, "pop_min_time") == 0) {
|
||||
this->currentPaymentOptions.last().pop_min_time = k->value.GetDouble();
|
||||
} else if (strcmp(inner_obj_name, "pop_max_time") == 0) {
|
||||
this->currentPaymentOptions.last().pop_max_time = k->value.GetDouble();
|
||||
} else if (strcmp(inner_obj_name, "pop_min_price") == 0) {
|
||||
this->currentPaymentOptions.last().pop_min_price = k->value.GetDouble();
|
||||
} else if (strcmp(inner_obj_name, "pop_carry_over") == 0) {
|
||||
this->currentPaymentOptions.last().pop_carry_over = k->value.GetInt();
|
||||
} else if (strcmp(inner_obj_name, "pop_carry_over_time_range_id") == 0) {
|
||||
this->currentPaymentOptions.last().pop_carry_over_time_range_id = k->value.GetInt();
|
||||
} else if (strcmp(inner_obj_name, "pop_daily_card_price") == 0) {
|
||||
this->currentPaymentOptions.last().pop_daily_card_price = k->value.GetInt();
|
||||
} else if (strcmp(inner_obj_name, "pop_business_hours") == 0) {
|
||||
this->currentPaymentOptions.last().pop_business_hours = k->value.GetInt();
|
||||
} else if (strcmp(inner_obj_name, "pop_time_step_config") == 0) {
|
||||
this->currentPaymentOptions.last().pop_time_step_config = k->value.GetInt();
|
||||
}
|
||||
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 +376,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();
|
||||
@@ -209,12 +408,16 @@ bool Configuration::ParseJson(Configuration* cfg, const char* json)
|
||||
case MemberType::PaymentMethodType:
|
||||
cfg->PaymentMethod.insert(pair<int, ATBPaymentMethod>(PaymentMethod.pme_id, PaymentMethod));
|
||||
break;
|
||||
case MemberType::PaymentRateType:
|
||||
case MemberType::PaymentRateType:
|
||||
// qCritical() << "PaymentRate" << PaymentRate;
|
||||
cfg->PaymentRate.insert(pair<int, ATBPaymentRate>(PaymentRate.pra_payment_option_id, PaymentRate));
|
||||
break;
|
||||
case MemberType::PaymentOptionType:
|
||||
cfg->PaymentOption.insert(pair<int, ATBPaymentOption>(PaymentOption.pop_payment_method_id, PaymentOption));
|
||||
break;
|
||||
case MemberType::PaymentOptionType: {
|
||||
if (!this->currentPaymentOptions.isEmpty()) {
|
||||
ATBPaymentOption const &PaymentOption = this->currentPaymentOptions.last();
|
||||
cfg->PaymentOption.insert(pair<int, ATBPaymentOption>(PaymentOption.pop_payment_method_id, PaymentOption));
|
||||
}
|
||||
} break;
|
||||
case MemberType::DurationType:
|
||||
cfg->Duration.insert(pair<int, ATBDuration>(Duration.pun_id, Duration));
|
||||
break;
|
||||
@@ -233,7 +436,28 @@ 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:
|
||||
cfg->DailyTicket.insert(pair<int, ATBDailyTicket>(DailyTicket.daily_ticket_id, DailyTicket));
|
||||
qCritical() << DailyTicket;
|
||||
DailyTicket.reset();
|
||||
break;
|
||||
case MemberType::CustomerType:
|
||||
cfg->Customer.insert(pair<int, ATBCustomer>(Customer.cust_id, Customer));
|
||||
qCritical() << Customer;
|
||||
break;
|
||||
case MemberType::TimeBaseType:
|
||||
cfg->TimeBase.insert(pair<int, ATBTimeBase>(TimeBase.tbase_id, TimeBase));
|
||||
qCritical() << TimeBase;
|
||||
break;
|
||||
case MemberType::TimeRangeType:
|
||||
cfg->TimeRange.insert(pair<int, ATBTimeRange>(TimeRange.time_range_id, TimeRange));
|
||||
// qCritical() << TimeRange;
|
||||
break;
|
||||
case MemberType::TimeStepConfigType:
|
||||
cfg->TimeStepConfig.insert(pair<int, ATBTimeStepConfig>(TimeStepConfig.tsconfig_id, TimeStepConfig));
|
||||
// qCritical() << TimeStepConfig;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -245,3 +469,124 @@ bool Configuration::ParseJson(Configuration* cfg, const char* json)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
ATBPaymentOption const &Configuration::getPaymentOptions() const {
|
||||
Q_ASSERT(!this->currentPaymentOptions.isEmpty());
|
||||
return this->currentPaymentOptions.at(0);
|
||||
}
|
||||
|
||||
ATBPaymentOption &Configuration::getPaymentOptions() {
|
||||
Q_ASSERT(!this->currentPaymentOptions.isEmpty());
|
||||
return this->currentPaymentOptions[0];
|
||||
}
|
||||
|
||||
QVector<ATBPaymentOption> const &Configuration::getAllPaymentOptions() const {
|
||||
return this->currentPaymentOptions;
|
||||
}
|
||||
|
||||
QVector<ATBPaymentOption> &Configuration::getAllPaymentOptions() {
|
||||
return this->currentPaymentOptions;
|
||||
}
|
||||
|
||||
std::optional<QVector<ATBDailyTicket>>
|
||||
Configuration::getDailyTicketsForAllKeys() const {
|
||||
QVector<ATBDailyTicket> tickets;
|
||||
std::optional<QVector<ATBDailyTicket>> value;
|
||||
|
||||
for (std::multimap<int, ATBDailyTicket>::const_iterator it = this->DailyTicket.cbegin();
|
||||
it != this->DailyTicket.cend(); ++it) {
|
||||
tickets.append(it->second);
|
||||
}
|
||||
|
||||
if (tickets.size() > 0) {
|
||||
value = value.value_or(tickets);
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
std::optional<QVector<ATBDailyTicket>>
|
||||
Configuration::getDailyTicketsForKey(int key) const {
|
||||
QVector<ATBDailyTicket> tickets;
|
||||
std::optional<QVector<ATBDailyTicket>> value;
|
||||
|
||||
tickets.clear();
|
||||
|
||||
for (auto[it, rangeEnd] = this->DailyTicket.equal_range(key); it != rangeEnd; ++it) {
|
||||
tickets.append(it->second);
|
||||
}
|
||||
|
||||
if (tickets.size() > 0) {
|
||||
value = value.value_or(tickets);
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
std::optional<QVector<ATBPaymentRate>>
|
||||
Configuration::getPaymentRateForAllKeys() const {
|
||||
QVector<ATBPaymentRate> paymentRates;
|
||||
std::optional<QVector<ATBPaymentRate>> value;
|
||||
|
||||
for (std::multimap<int, ATBPaymentRate>::const_iterator it = this->PaymentRate.cbegin();
|
||||
it != this->PaymentRate.cend(); ++it) {
|
||||
paymentRates.append(it->second);
|
||||
}
|
||||
|
||||
if (paymentRates.size() > 0) {
|
||||
value = value.value_or(paymentRates);
|
||||
}
|
||||
|
||||
return value;
|
||||
|
||||
}
|
||||
|
||||
std::optional<QVector<ATBPaymentRate>>
|
||||
Configuration::getPaymentRateForKey(int key) const {
|
||||
QVector<ATBPaymentRate> paymentRate;
|
||||
std::optional<QVector<ATBPaymentRate>> value;
|
||||
|
||||
paymentRate.clear();
|
||||
|
||||
for (auto[it, rangeEnd] = this->PaymentRate.equal_range(key); it != rangeEnd; ++it) {
|
||||
paymentRate.append(it->second);
|
||||
}
|
||||
|
||||
if (paymentRate.size() > 0) {
|
||||
value = value.value_or(paymentRate);
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
std::optional<ATBCustomer>
|
||||
Configuration::getCustomerForType(ATBCustomer::CustomerType customerType) {
|
||||
for (std::multimap<int, ATBCustomer>::const_iterator it = this->Customer.cbegin();
|
||||
it != this->Customer.cend(); ++it) {
|
||||
ATBCustomer const &customer = it->second;
|
||||
if (customer.cust_type == customerType) {
|
||||
return customer;
|
||||
}
|
||||
}
|
||||
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
std::optional<ATBWeekDaysWorktime>
|
||||
Configuration::getWeekDayWorkTime(QTime const &time, Qt::DayOfWeek dayOfWeek) {
|
||||
ATBWeekDaysWorktime worktime;
|
||||
std::optional<ATBWeekDaysWorktime> value;
|
||||
|
||||
std::multimap<int, ATBWeekDaysWorktime>::const_iterator it = this->WeekDaysWorktime.find((int)dayOfWeek);
|
||||
if (it != this->WeekDaysWorktime.cend()) {
|
||||
|
||||
ATBWeekDaysWorktime const &wt = it->second;
|
||||
|
||||
if (time >= QTime::fromString(wt.pwd_time_from.c_str(), Qt::ISODate)
|
||||
&& time < QTime::fromString(wt.pwd_time_to.c_str(), Qt::ISODate)) {
|
||||
value = value.value_or(wt);
|
||||
}
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
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,435 @@
|
||||
#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() == 0) {
|
||||
return PaymentMethod::Undefined;
|
||||
}
|
||||
|
||||
std::multimap<int, ATBPaymentOption>::const_iterator it =
|
||||
cfg->PaymentOption.cbegin();
|
||||
|
||||
if (it != cfg->PaymentOption.cend()) {
|
||||
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;
|
||||
|
||||
qCritical() << __func__ << ":" << __LINE__ << businessHours;
|
||||
|
||||
switch (businessHours) {
|
||||
case NoRestriction_24_7: return BusinessHours::NoRestriction_24_7;
|
||||
case OnlyWorkingDays: return BusinessHours::OnlyWorkingDays;
|
||||
case OnlyWeekDays: return BusinessHours::OnlyWeekDays;
|
||||
case OnlyWeekEnd: return BusinessHours::OnlyWeekEnd;
|
||||
case OnlyOfficialHolidays: return BusinessHours::OnlyOfficialHolidays;
|
||||
case OnlySpecialDays: return BusinessHours::OnlySpecialDays;
|
||||
case OnlySchoolHolidays: return BusinessHours::OnlySchoolHolidays;
|
||||
case SpecialAndSchoolHolidays: return BusinessHours::SpecialAndSchoolHolidays;
|
||||
case OnlyOpenForBusinessDays: return BusinessHours::OnlyOpenForBusinessDays;
|
||||
case AllDaysWithRestrictedHours: return BusinessHours::AllDaysWithRestrictedHours;
|
||||
}
|
||||
return BusinessHours::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);
|
||||
}
|
||||
|
410
main/main.cpp
410
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
|
||||
}
|
||||
]
|
||||
}
|
217
tariffs/tariff_naz.json
Normal file
217
tariffs/tariff_naz.json
Normal file
@@ -0,0 +1,217 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
],
|
||||
"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>"
|
||||
}
|
||||
],
|
||||
"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"
|
||||
}
|
||||
],
|
||||
"Customer": [
|
||||
{
|
||||
"cust_id": 1,
|
||||
"cust_type": 1000,
|
||||
"cust_label": "Adult"
|
||||
},
|
||||
{
|
||||
"cust_id": 2,
|
||||
"cust_type": 1001,
|
||||
"cust_label": "Child"
|
||||
},
|
||||
{
|
||||
"cust_id": 3,
|
||||
"cust_type": 1002,
|
||||
"cust_label": "Teen"
|
||||
}
|
||||
],
|
||||
"PaymentOption": [
|
||||
{
|
||||
"pop_id": 1049,
|
||||
"pop_label": "Zone 1",
|
||||
"pop_payment_method_id": 4,
|
||||
"pop_day_end_time": "08:00:00",
|
||||
"pop_day_night_end_time": "20:00:00",
|
||||
"pop_price_night": 0,
|
||||
"pop_min_time": 1,
|
||||
"pop_max_time": 720,
|
||||
"pop_min_price": 400,
|
||||
"pop_carry_over": 0,
|
||||
"pop_daily_card_price": 0,
|
||||
"pop_business_hours": 128
|
||||
},
|
||||
{
|
||||
"pop_id": 1050,
|
||||
"pop_label": "Zone 1",
|
||||
"pop_payment_method_id": 4,
|
||||
"pop_day_end_time": "08:00:00",
|
||||
"pop_day_night_end_time": "20:00:00",
|
||||
"pop_price_night": 0,
|
||||
"pop_min_time": 1,
|
||||
"pop_max_time": 720,
|
||||
"pop_min_price": 800,
|
||||
"pop_carry_over": 0,
|
||||
"pop_daily_card_price": 0,
|
||||
"pop_business_hours": 128
|
||||
}
|
||||
],
|
||||
"PaymentRate": [
|
||||
{
|
||||
"pra_payment_option_id": 1049,
|
||||
"pra_payment_unit_id": 1,
|
||||
"pra_price": 400
|
||||
},
|
||||
{
|
||||
"pra_payment_option_id": 1050,
|
||||
"pra_payment_unit_id": 2,
|
||||
"pra_price": 800
|
||||
}
|
||||
],
|
||||
"DailyTicket": [
|
||||
{
|
||||
"daily_ticket_payment_option_id": 1049,
|
||||
"daily_ticket_id": 1,
|
||||
"daily_ticket_price_id": 1,
|
||||
"daily_ticket_tb_id": 1,
|
||||
"daily_ticket_clearance_customer_ids": [3],
|
||||
"daily_ticket_from_min": "08:00:00",
|
||||
"daily_ticket_to_max": "20:00:00",
|
||||
"daily_ticket_from_offset_min": 0,
|
||||
"daily_ticket_to_offset_max": 0
|
||||
},
|
||||
{
|
||||
"daily_ticket_payment_option_id": 1050,
|
||||
"daily_ticket_id": 2,
|
||||
"daily_ticket_price_id": 2,
|
||||
"daily_ticket_tb_id": 1,
|
||||
"daily_ticket_clearance_customer_ids": [1],
|
||||
"daily_ticket_from_min": "08:00:00",
|
||||
"daily_ticket_to_max": "20:00:00",
|
||||
"daily_ticket_from_offset_min": 0,
|
||||
"daily_ticket_to_offset_max": 0
|
||||
}
|
||||
],
|
||||
"Duration": [
|
||||
{
|
||||
"pun_id": 1,
|
||||
"pun_label": "Tagesticket",
|
||||
"pun_duration": 720
|
||||
}
|
||||
],
|
||||
"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": 7,
|
||||
"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