Compare commits

...

32 Commits

Author SHA1 Message Date
cc702a413e Minor: add compile switches -g -O 2024-01-18 15:05:15 +01:00
51a58bfa15 Minor: Add VERSION variable 2024-01-18 15:03:24 +01:00
ff314c810f Add TimeBase to configuration object. 2024-01-18 15:00:42 +01:00
80fa2fe0e2 Extend computation of time steps in GetTimeSteps() for the case
of dynamic time steps (e.g. for Neuhauser, Galtuer (745)).
2024-01-18 14:57:04 +01:00
89e0f2137b Add handling of pun_duration_min and pun_duration_max 2024-01-18 14:56:20 +01:00
f68d8816c0 Add handling of pop_carry_over_time_range_id and pop_time_step_config. 2024-01-18 14:55:16 +01:00
7ce93ddd7a Extend handling of TimeRangeType. 2024-01-18 14:53:57 +01:00
7f8ed9165d Add handling for TimeStepConfig. 2024-01-18 14:53:01 +01:00
0b901954aa Add members m_start and m_timeStepCompensation (used for Neuhauser, Galtuer (745) at the moment).
Add several setters/getters.
2024-01-18 14:49:56 +01:00
9f4b10bb9a Add and fill
multimap<int, ATBTimeRange> TimeRange;
multimap<int, ATBTimeStepConfig> TimeStepConfig;
when parsing json-file.
2024-01-18 14:43:08 +01:00
2f939d607d Add
include/mobilisis/tariff_timebase.h
include/mobilisis/tariff_timestep_config.h
2024-01-18 14:41:54 +01:00
283e970be4 Add pun_duration_min and pun_duration_max 2024-01-18 14:41:12 +01:00
e14edea07f Add TimeRangeType and TimeStepConfigType. 2024-01-18 14:39:57 +01:00
e520965c6b Add pop_carry_over_time_range_id and pop_time_step_config 2024-01-18 14:38:13 +01:00
6a781f0d3b Minor: add debug output 2024-01-18 14:37:13 +01:00
c357cbbbe0 Add descrption file for tariff time step config 2024-01-18 14:36:28 +01:00
b4940e98fe Add test for NEUHAUSER_BILEXA_GALTUER 2024-01-18 14:34:57 +01:00
b8a5803613 Add tariff-file for galtuer. 2024-01-18 14:33:44 +01:00
6a79c6c463 Adapt TimeBase description. 2024-01-18 14:32:32 +01:00
528b3882a0 renamed 2024-01-17 08:23:19 +01:00
7d274f807e delete useless files 2024-01-17 08:21:08 +01:00
e977665649 delete useless files 2024-01-17 08:19:37 +01:00
44a94b7007 Minor: add comment 2024-01-16 11:56:54 +01:00
7c13d8b88c Added pun_duration_min and pun_duration_max in case we dont have to pay for a full time range 2024-01-16 11:56:12 +01:00
64bc639eaa delete (useless) 2024-01-07 16:09:16 +01:00
f0312bc8fb another books 2023-12-22 13:19:06 +01:00
37052e97fc Add some vue books/docs. 2023-12-21 15:49:35 +01:00
8cf816c158 Add testcases for naz 2023-12-15 13:28:58 +01:00
f1f5ac8900 Add operator << for printing 2023-12-15 13:28:34 +01:00
ddded411aa Add operator << for printing 2023-12-15 13:28:19 +01:00
96587229e2 Add operator << for printing 2023-12-15 13:28:04 +01:00
3d3794ea4e Add multimap for dailly ticket.w 2023-12-15 13:27:02 +01:00
22 changed files with 559 additions and 49 deletions

View File

@@ -12,9 +12,37 @@
#include <QDateTime>
using namespace std;
class Calculator
{
class Calculator {
QDateTime m_start;
mutable uint16_t m_timeStepCompensation = 0;
public:
explicit Calculator() = default;
explicit Calculator(QDateTime const start) : m_start(start) {
m_start.setTime(QTime(start.time().hour(), start.time().minute(), 0));
qCritical() << "init m_start time:" << m_start.toString(Qt::ISODate);
}
void setStartDateTime(QDateTime const &start) {
m_start = start;
m_start.setTime(QTime(start.time().hour(), start.time().minute(), 0));
qCritical() << "set m_start time:" << m_start.toString(Qt::ISODate);
}
QDateTime const &getStartDateTime() const {
return m_start;
}
QDateTime &getStartDateTime() {
return m_start;
}
void setTimeStepCompensation(uint16_t timeStepCompensation) {
m_timeStepCompensation = timeStepCompensation;
}
uint16_t getTimeStepCompensation() const {
return m_timeStepCompensation;
}
/// <summary>
/// Gets duration in seconds from cost
@@ -60,6 +88,7 @@ public:
cfg->SpecialDaysWorktime.size() == 0);
}
// testing public:
private:
// Introduced for PaymentMethod::Steps (e.g. Schoenau)
// For tariff of following structure: only steps, no special days, nonstop.

View File

@@ -21,6 +21,11 @@
#include "period_year.h"
#include "payment_rate.h"
#include "atb_project.h"
#include "tariff_daily_ticket.h"
#include "time_range_header.h"
#include "tariff_timestep_config.h"
#include <QVector>
using namespace std;
using namespace rapidjson;
@@ -41,6 +46,9 @@ 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;
/// <summary>
/// Parse JSON string
@@ -49,7 +57,8 @@ public:
/// <returns>Returns operation status bool (OK | FAIL) </returns>
bool ParseJson(Configuration* cfg, const char* json);
ATBPaymentOption const & getPaymentOptions();
ATBPaymentOption const &getPaymentOptions();
QVector<ATBDailyTicket> const &getDailyTickets() const;
private:
/// <summary>

View File

@@ -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;
};

View File

@@ -17,7 +17,8 @@ enum MemberType
DailyTicketType = 0x0A,
CustomerType = 0x0B,
TimeBaseType = 0x0C,
TimeRangeType = 0x0D
TimeRangeType = 0x0D,
TimeStepConfigType = 0x0E
};
#endif // MEMBER_TYPE_H_INCLUDED

View File

@@ -16,6 +16,8 @@ public:
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;
};

View File

@@ -2,6 +2,8 @@
#define TARIFF_CUSTOMER_H_INCLUDED
#include <QString>
#include <QDebug>
#include <QDebugStateSaver>
struct ATBCustomer {
enum class CustomerType {ADULT=1000, CHILD, TEEN};
@@ -10,6 +12,30 @@ struct ATBCustomer {
CustomerType cust_type;
QString cust_label;
friend QDebug operator<<(QDebug debug, ATBCustomer const &customer) {
QDebugStateSaver saver(debug);
switch(customer.cust_type) {
case ATBCustomer::CustomerType::ADULT:
debug.nospace()
<< " cust_type: " << "CustomerType::ADULT" << "\n"
<< "cust_label: " << customer.cust_label << "\n";
break;
case ATBCustomer::CustomerType::CHILD:
debug.nospace()
<< " cust_type: " << "CustomerType::CHILD" << "\n"
<< "cust_label: " << customer.cust_label << "\n";
break;
case ATBCustomer::CustomerType::TEEN:
debug.nospace()
<< " cust_type: " << "CustomerType::TEEN" << "\n"
<< "cust_label: " << customer.cust_label << "\n";
break;
}
return debug;
}
};
#endif // TARIFF_CUSTOMER_H_INCLUDED

View File

@@ -3,29 +3,80 @@
#include <QString>
#include <QDateTime>
#include <QVector>
#include <QDebug>
#include <QDebugStateSaver>
struct DailyTicket {
DailyTicket() = default;
#include "tariff_customer.h"
#include "tariff_time_range.h"
#include "tariff_timebase.h"
struct ATBDailyTicket {
ATBDailyTicket() = default;
int daily_ticket_payment_option_id;
int daily_ticket_unit_id;
double daily_ticket_price;
int daily_ticket_tbase_id; // time base setting for ticket:
// 1: absolute: using time stamps
// 2: relative: use offsets from
// some reference time point,
// typically "start time".
ATBTimeBase::TimeBaseType daily_ticket_tbase_type;
// time base setting for ticket:
// absolute: using time stamps
// relative: use offsets from
// some reference time point,
// typically "start time".
QVector<int> daily_ticket_clearance_type; // who is allowed to buy the ticket:
// list of customer types
ATBCustomer::CustomerType daily_ticket_clearance_customer_type;
// who is allowed to buy the ticket:
// list of customer types
QTime daily_ticket_from_min; // used in case time base == 1
QTime daily_ticket_to_max;
int daily_ticket_weekday_range; // [mon-sun]
int daily_ticket_special_day_range;
int daily_ticket_from_offset_min; // used in case time base == 2
int daily_ticket_to_offset_max;
friend QDebug operator<<(QDebug debug, ATBDailyTicket const &ticket) {
QDebugStateSaver saver(debug);
debug.nospace()
<< " daily_ticket_payment_option_id: " << ticket.daily_ticket_payment_option_id << "\n"
<< " daily_ticket_unit_id: " << ticket.daily_ticket_unit_id << "\n"
<< " daily_ticket_price: " << ticket.daily_ticket_price << "\n";
switch(ticket.daily_ticket_tbase_type) {
case ATBTimeBase::TimeBaseType::ABSOLUTE:
debug.nospace()
<< " daily_ticket_tbase_type: " << "TimeBaseType::ABSOLUTE" << "\n";
break;
case ATBTimeBase::TimeBaseType::RELATIVE:
debug.nospace()
<< " daily_ticket_tbase_type: " << "TimeBaseType::RELATIVE" << "\n";
break;
}
switch(ticket.daily_ticket_clearance_customer_type) {
case ATBCustomer::CustomerType::ADULT:
debug.nospace()
<< "daily_ticket_clearance_customer_type: " << "CustomerType::ADULT" << "\n";
break;
case ATBCustomer::CustomerType::CHILD:
debug.nospace()
<< "daily_ticket_clearance_customer_type: " << "CustomerType::CHILD" << "\n";
break;
case ATBCustomer::CustomerType::TEEN:
debug.nospace()
<< "daily_ticket_clearance_customer_type: " << "CustomerType::TEEN" << "\n";
break;
default:
debug.nospace()
<< "daily_ticket_clearance_customer_type: " << "CustomerType::???" << "\n";
break;
}
debug.nospace()
<< " daily_ticket_weekday_range: " << ticket.daily_ticket_weekday_range << "\n"
<< " daily_ticket_special_day_range: " << ticket.daily_ticket_special_day_range << "\n";
return debug;
}
};
#endif // TARIFF_DAILY_TICKET_H_INCLUDED

View File

@@ -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;
};

View File

@@ -7,8 +7,8 @@
/// Time range definition
/// </summary>
class TariffTimeRange {
QTime m_time_from;
QTime m_time_until;
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:

View File

@@ -2,13 +2,41 @@
#define TARIFF_TIME_BASE_H_INCLUDED
#include <QString>
#include <QDebug>
#include <QDebugStateSaver>
struct ATBTimeBase {
enum class TimeBaseType {ABSOLUTE=0, RELATIVE=1};
ATBTimeBase() = default;
int tbase_id;
TimeBaseType tbase_type;
QString tbase_label;
friend QDebug operator<<(QDebug debug, ATBTimeBase const &timeBase) {
QDebugStateSaver saver(debug);
switch(timeBase.tbase_type) {
case ATBTimeBase::TimeBaseType::ABSOLUTE:
debug.nospace()
<< " tbase_id: " << timeBase.tbase_id << "\n"
<< " tbase_type: " << "TimeBaseType::ABSOLUTE" << "\n"
<< "tbase_label: " << timeBase.tbase_label << "\n";
break;
case ATBTimeBase::TimeBaseType::RELATIVE:
debug.nospace()
<< " tbase_type: " << "TimeBaseType::RELATIVE" << "\n"
<< "tbase_label: " << timeBase.tbase_label << "\n";
break;
default:
debug.nospace()
<< " tbase_type: " << "TimeBaseType::???" << "\n";
break;
}
return debug;
}
};
#endif // TARIFF_TIME_BASE_H_INCLUDED

View 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

View File

@@ -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

View File

@@ -8,6 +8,9 @@ INCLUDEPATH += $$_PRO_FILE_PWD_/include
INCLUDEPATH += $$_PRO_FILE_PWD_/include/mobilisis
INCLUDEPATH += $$_PRO_FILE_PWD_/include/rapidjson
#start version with project neuhauser/galtuer
VERSION=1.0.0
CONFIG(debug, debug|release) {
win32 {
QMAKE_CXXFLAGS += -DCALCULATE_LIBRARY_EXPORTS
@@ -72,7 +75,8 @@ HEADERS += \
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_timebase.h \
include/mobilisis/tariff_timestep_config.h
OTHER_FILES += src/main.cpp \
../tariffs/tariff_korneuburg.json \

View File

@@ -699,12 +699,69 @@ QList<int> Calculator::GetTimeSteps(Configuration *cfg) const {
QList<int> timeSteps;
int const pop_id = cfg->getPaymentOptions().pop_id;
int const pop_carry_over = cfg->getPaymentOptions().pop_carry_over;
int const pop_time_step_config = cfg->getPaymentOptions().pop_time_step_config;
for (auto[itr, rangeEnd] = cfg->PaymentRate.equal_range(pop_id); itr != rangeEnd; ++itr)
{
int const durationId = itr->second.pra_payment_unit_id;
int const durationUnit = cfg->Duration.find(durationId)->second.pun_duration;
timeSteps << durationUnit;
if (pop_time_step_config == (int)ATBTimeStepConfig::TimeStepConfig::DYNAMIC) {
if (pop_carry_over) {
int const pop_carry_over_time_range_id = cfg->getPaymentOptions().pop_carry_over_time_range_id;
QTime const carryOverTimeRangeFrom = cfg->TimeRange.find(pop_carry_over_time_range_id)->second.time_range_from;
QTime const carryOverTimeRangeTo = cfg->TimeRange.find(pop_carry_over_time_range_id)->second.time_range_to;
if (carryOverTimeRangeFrom.secsTo(carryOverTimeRangeTo) <= 60) { // carry over time point, usually 00:00:00
if (carryOverTimeRangeFrom == QTime(0, 0, 0)) {
for (auto[itr, rangeEnd] = cfg->PaymentRate.equal_range(pop_id); itr != rangeEnd; ++itr) {
int const durationId = itr->second.pra_payment_unit_id;
auto search = cfg->Duration.find(durationId);
if (search != cfg->Duration.end()) {
ATBDuration duration = search->second;
if (durationId == 1) {
//duration.pun_duration_min = search->second.pun_duration_min;
//duration.pun_duration_max = search->second.pun_duration_max;
QDateTime carryOver = m_start;
carryOver = carryOver.addDays(1);
carryOver.setTime(QTime(0, 0, 0));
int const timeStep = std::ceil(m_start.secsTo(carryOver) / 60.0);
if (timeStep < duration.pun_duration_min || timeStep > duration.pun_duration_max) {
qCritical()
<< QString("ERROR timeStep (%1) < durationMin (%2) || timeStep (%3)) > durationMax (%4)")
.arg(timeStep).arg(duration.pun_duration_min)
.arg(timeStep).arg(duration.pun_duration_max);
break;
}
duration.pun_duration = timeStep;
m_timeStepCompensation = duration.pun_duration_max - duration.pun_duration;
timeSteps << duration.pun_duration;
} else {
duration.pun_duration = duration.pun_duration_max - m_timeStepCompensation;
timeSteps << duration.pun_duration;;
}
cfg->Duration.erase(search);
cfg->Duration.insert(pair<int, ATBDuration>(duration.pun_id, duration));
} else { // if (search != cfg->Duration.end()) {
// TODO
}
}
} else { // if (carryOverTimeRangeFrom == QTime(0, 0, 0)) {
// TODO
}
} else { // if (carryOverTimeRangeFrom == carryOverTimeRangeTo) {
// TODO
}
} else { // if (pop_carry_over) {
// TODO
}
} else {
for (auto[itr, rangeEnd] = cfg->PaymentRate.equal_range(pop_id); itr != rangeEnd; ++itr)
{
int const durationId = itr->second.pra_payment_unit_id;
int const durationUnit = cfg->Duration.find(durationId)->second.pun_duration;
timeSteps << durationUnit;
}
}
return timeSteps;

View File

@@ -1,6 +1,7 @@
#include "configuration.h"
#include "tariff_timebase.h"
#include "time_range_header.h"
#include "tariff_timestep_config.h"
#include <QString>
#include <QDebug>
@@ -22,6 +23,7 @@ MemberType Configuration::IdentifyJsonMember(const char* member_name)
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;
}
@@ -91,6 +93,7 @@ bool Configuration::ParseJson(Configuration* cfg, const char* json)
ATBTimeBase TimeBase;
ATBCustomer Customer;
ATBTimeRange TimeRange;
ATBTimeStepConfig TimeStepConfig;
MemberType mb_type = MemberType::UnknownType;
@@ -174,6 +177,11 @@ bool Configuration::ParseJson(Configuration* cfg, const char* json)
}
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();
@@ -188,6 +196,18 @@ bool Configuration::ParseJson(Configuration* cfg, const char* json)
}
}
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()) {
@@ -303,15 +323,19 @@ bool Configuration::ParseJson(Configuration* cfg, const char* json)
else if (strcmp(inner_obj_name, "pop_max_time") == 0) PaymentOption.pop_max_time = k->value.GetDouble();
else if (strcmp(inner_obj_name, "pop_min_price") == 0) PaymentOption.pop_min_price = k->value.GetDouble();
else if (strcmp(inner_obj_name, "pop_carry_over") == 0) PaymentOption.pop_carry_over = k->value.GetInt();
else if (strcmp(inner_obj_name, "pop_carry_over_time_range_id") == 0) PaymentOption.pop_carry_over_time_range_id = k->value.GetInt();
else if (strcmp(inner_obj_name, "pop_daily_card_price") == 0) PaymentOption.pop_daily_card_price = k->value.GetInt();
else if (strcmp(inner_obj_name, "pop_business_hours") == 0) PaymentOption.pop_business_hours = k->value.GetInt();
else if (strcmp(inner_obj_name, "pop_time_step_config") == 0) PaymentOption.pop_time_step_config = k->value.GetInt();
this->currentPaymentOptions = PaymentOption;
break;
case MemberType::DurationType:
if (strcmp(inner_obj_name, "pun_id") == 0) Duration.pun_id = k->value.GetInt();
else if (strcmp(inner_obj_name, "pun_label") == 0) Duration.pun_label = k->value.GetString();
else if (strcmp(inner_obj_name, "pun_duration") == 0) Duration.pun_duration = k->value.GetDouble();
break;
else if (strcmp(inner_obj_name, "pun_duration_min") == 0) Duration.pun_duration_min = k->value.GetInt();
else if (strcmp(inner_obj_name, "pun_duration_max") == 0) Duration.pun_duration_max = k->value.GetInt();
break;
case MemberType::SpecialDaysWorktimeType:
if (strcmp(inner_obj_name, "pedwt_id") == 0) SpecialDaysWorktime.pedwt_id = k->value.GetInt();
else if (strcmp(inner_obj_name, "pedwt_period_exc_day_id") == 0) SpecialDaysWorktime.pedwt_period_exc_day_id = k->value.GetInt();
@@ -386,16 +410,22 @@ bool Configuration::ParseJson(Configuration* cfg, const char* json)
cfg->YearPeriod.insert(pair<int, ATBPeriodYear>(YearPeriod.pye_id, YearPeriod));
break;
case MemberType::DailyTicketType:
qCritical() << DailyTicket;
// qCritical() << DailyTicket;
break;
case MemberType::CustomerType:
qCritical() << Customer;
// qCritical() << Customer;
break;
case MemberType::TimeBaseType:
qCritical() << TimeBase;
// qCritical() << TimeBase;
cfg->TimeBase.insert(pair<int, ATBTimeRange>(TimeBase.tbase_id, TimeBase));
break;
case MemberType::TimeRangeType:
qCritical() << TimeRange;
// qCritical() << TimeRange;
cfg->TimeRange.insert(pair<int, ATBTimeRange>(TimeRange.time_range_id, TimeRange));
break;
case MemberType::TimeStepConfigType:
// qCritical() << TimeStepConfig;
cfg->TimeStepConfig.insert(pair<int, ATBTimeStepConfig>(TimeStepConfig.tsconfig_id, TimeStepConfig));
break;
default:
break;

View File

@@ -33,12 +33,62 @@ extern "C" char* strptime(const char* s,
#include "calculator_functions.h"
#include <calculate_price.h>
#define SZEGED (0)
#define NEUHAUSER_KORNEUBURG (0)
#define NEUHAUSER_LINSINGER_MASCHINENBAU (1)
#define SZEGED (0)
#define NEUHAUSER_KORNEUBURG (0)
#define NEUHAUSER_LINSINGER_MASCHINENBAU (0)
#define NEUHAUSER_NORDISCHES_AUSBILDUNGSZENTRUM (0)
#define NEUHAUSER_BILEXA_GALTUER (1)
int main() {
#if NEUHAUSER_BILEXA_GALTUER==1
std::ifstream input("/opt/ptu5/opt/customer_745/etc/psa_tariff/tariff01.json");
std::stringstream sstr;
while(input >> sstr.rdbuf());
std::string json(sstr.str());
Configuration cfg;
bool isParsed = cfg.ParseJson(&cfg, json.c_str());
cout << endl;
if (isParsed) {
QDateTime start = QDateTime::currentDateTime();
start.setTime(QTime(start.time().hour(), start.time().minute(), 0));
Calculator calculator(start);
QList<int> timeSteps = calculator.GetTimeSteps(&cfg);
qCritical() << timeSteps;
for (int i=0; i<timeSteps.size(); ++i) {
uint32_t price = calculator.GetPriceForTimeStep(&cfg, timeSteps.at(i));
uint32_t duration = calculator.GetDurationForPrice(&cfg, price);
qCritical() << "nextTimeStep relative to start:"
<< duration << start.addSecs(duration * 60)
<< "(price so far:" << price << ")";
}
}
#endif
#if NEUHAUSER_NORDISCHES_AUSBILDUNGSZENTRUM==1
std::ifstream input("/tmp/tariff_naz.json");
std::stringstream sstr;
while(input >> sstr.rdbuf());
std::string json(sstr.str());
Configuration cfg;
bool isParsed = cfg.ParseJson(&cfg, json.c_str());
cout << endl;
if (isParsed) {
// Calculator calculator;
}
#endif
#if NEUHAUSER_LINSINGER_MASCHINENBAU==1
std::ifstream input("/tmp/tariff_linsinger_maschinenbau.json");

View File

@@ -3,8 +3,8 @@ 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/

View 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
}
]
}

View File

@@ -31,11 +31,15 @@
],
"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"
}
],

Binary file not shown.

Binary file not shown.

BIN
vue/vue.js-in-action.pdf Normal file

Binary file not shown.