Compare commits

..

14 Commits

7 changed files with 224 additions and 86 deletions

View File

@@ -3,6 +3,7 @@
#include <time.h> #include <time.h>
#include <inttypes.h> #include <inttypes.h>
#include "tariff_time_range.h"
#include <QString> #include <QString>
#include <QDateTime> #include <QDateTime>
@@ -31,6 +32,11 @@ struct CALCULATE_LIBRARY_API price_t {
double brutto; double brutto;
double vat_percentage; double vat_percentage;
double vat; double vat;
explicit price_t() {
units = 0;
netto = brutto = vat_percentage = vat = 0.0;
}
}; };
enum class PERMIT_TYPE : quint8 { enum class PERMIT_TYPE : quint8 {
@@ -57,13 +63,31 @@ struct CALCULATE_LIBRARY_API CalcState {
ABOVE_MAX_PARKING_TIME, ABOVE_MAX_PARKING_TIME,
BELOW_MIN_PARKING_TIME, BELOW_MIN_PARKING_TIME,
BELOW_MIN_PARKING_PRICE, BELOW_MIN_PARKING_PRICE,
OVERPAID OVERPAID,
OUTSIDE_ALLOWED_PARKING_TIME
}; };
State m_status; State m_status;
QString m_desc; 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 { explicit operator bool() const noexcept {
return (m_status == State::SUCCESS); return (m_status == State::SUCCESS);
@@ -107,12 +131,23 @@ struct CALCULATE_LIBRARY_API CalcState {
break; break;
case State::WRONG_ISO_TIME_FORMAT: case State::WRONG_ISO_TIME_FORMAT:
s = "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; return s + ":" + m_desc;
} }
CalcState &set(State s) { m_status = s; return *this; } CalcState &set(State s) { m_status = s; return *this; }
CalcState &setDesc(QString s) { m_desc = 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, CalcState CALCULATE_LIBRARY_API init_tariff(parking_tariff_t **tariff,

View File

@@ -35,6 +35,8 @@ public:
void ResetPriceSteps() { m_priceSteps.clear(); } void ResetPriceSteps() { m_priceSteps.clear(); }
QList<int> priceSteps() const { return m_priceSteps; } QList<int> priceSteps() const { return m_priceSteps; }
CalcState isParkingAllowed(Configuration const *cfg, QDateTime const &start);
/// <summary> /// <summary>
/// Gets duration in seconds from cost /// Gets duration in seconds from cost
/// </summary> /// </summary>

View File

@@ -311,7 +311,6 @@ CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket(
return calcState.set(CalcState::State::BELOW_MIN_PARKING_TIME); return calcState.set(CalcState::State::BELOW_MIN_PARKING_TIME);
} }
if (duration == 0) { if (duration == 0) {
memset(price, 0x00, sizeof(*price));
return calcState.set(CalcState::State::SUCCESS); return calcState.set(CalcState::State::SUCCESS);
} }
@@ -375,7 +374,6 @@ CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket(
return calcState.set(CalcState::State::BELOW_MIN_PARKING_TIME); return calcState.set(CalcState::State::BELOW_MIN_PARKING_TIME);
} }
if (netto_parking_time == 0) { if (netto_parking_time == 0) {
memset(price, 0x00, sizeof(*price));
return calcState.set(CalcState::State::SUCCESS); return calcState.set(CalcState::State::SUCCESS);
} }

View File

@@ -134,30 +134,17 @@ std::string Calculator::GetDurationFromCost(Configuration* cfg,
inputDate = inputDate.addSecs(GetDurationForPrice(cfg, price) * 60); inputDate = inputDate.addSecs(GetDurationForPrice(cfg, price) * 60);
return inputDate.toString(Qt::ISODate).toStdString(); return inputDate.toString(Qt::ISODate).toStdString();
} else { } else {
QDateTime const &start = QDateTime::fromString(start_datetime, Qt::ISODate); if (Utilities::IsYearPeriodActive(cfg, inputDate)) {
if (Utilities::IsYearPeriodActive(cfg, start)) {
if (!prepaid) { if (!prepaid) {
BusinessHours businessHours = Utilities::getBusinessHours(cfg, paymentMethodId); CalcState cs = isParkingAllowed(cfg, inputDate);
if (businessHours == BusinessHours::OnlyWeekDays) { if (cs) {
int const weekdayId = start.date().dayOfWeek(); inputDate.setTime(cs.getAllowedTimeRange().getTimeUntil());
return inputDate.toString(Qt::ISODate).toStdString();
using WTIterator = std::multimap<int, ATBWeekDaysWorktime>::const_iterator;
std::pair<WTIterator, WTIterator> p = cfg->WeekDaysWorktime.equal_range(weekdayId);
for (WTIterator itr = p.first; itr != p.second; ++itr) {
QTime const &from = Utilities::WeekDaysWorkTimeFrom(itr);
QTime const &until = Utilities::WeekDaysWorkTimeUntil(itr);
QTime const& startTime = start.time();
if (from <= startTime && startTime <= until) {
return inputDate.addSecs(GetDurationForPrice(cfg, price) * 60).toString(Qt::ISODate).toStdString();
}
}
} }
} }
qCritical() << __PRETTY_FUNCTION__ << "NOT YET IMPLEMENTED"; qCritical() << __func__ << ":" << __LINE__ << "NOT YET IMPLEMENTED";
return 0; return "";
} }
} }
} }
@@ -200,6 +187,67 @@ uint32_t Calculator::GetCostFromDuration(Configuration * cfg,
} }
CalcState Calculator::isParkingAllowed(Configuration const *cfg, QDateTime const &start) {
static const PaymentMethod paymentMethodId = Utilities::getPaymentMethodId(cfg);
if (paymentMethodId == PaymentMethod::Steps) {
int const weekdayId = start.date().dayOfWeek();
BusinessHours businessHours = Utilities::getBusinessHours(cfg, paymentMethodId);
if (businessHours == BusinessHours::OnlyWeekDays) {
if (weekdayId != (int)Qt::Saturday && weekdayId != (int)Qt::Sunday) { // e.g. Neuhauser, Linsinger Maschinenbau (741)
if (cfg->WeekDaysWorktime.count(weekdayId) > 0) {
using WTIterator = std::multimap<int, ATBWeekDaysWorktime>::const_iterator;
std::pair<WTIterator, WTIterator> p = cfg->WeekDaysWorktime.equal_range(weekdayId);
for (WTIterator itr = p.first; itr != p.second; ++itr) {
QTime const &from = Utilities::WeekDaysWorkTimeFrom(itr);
QTime const &until = Utilities::WeekDaysWorkTimeUntil(itr);
QTime const &startTime = start.time();
if (from > startTime) {
return CalcState(CalcState::State::OUTSIDE_ALLOWED_PARKING_TIME,
QString("%1 < %2").arg(from.toString(Qt::ISODate))
.arg(startTime.toString(Qt::ISODate)), from, until);
} else
if (startTime >= until) {
return CalcState(CalcState::State::OUTSIDE_ALLOWED_PARKING_TIME,
QString("%1 >= %2").arg(startTime.toString(Qt::ISODate))
.arg(until.toString(Qt::ISODate)), from, until);
}
return CalcState(CalcState::State::SUCCESS,
"PARKING ALLOWED", from, until);
}
}
}
} else
if (businessHours == BusinessHours::AllDaysWithRestrictedHours) { // e.g. for Neuhauser, NAZ (744)
if (cfg->WeekDaysWorktime.count(weekdayId) > 0) {
using WTIterator = std::multimap<int, ATBWeekDaysWorktime>::const_iterator;
std::pair<WTIterator, WTIterator> p = cfg->WeekDaysWorktime.equal_range(weekdayId);
for (WTIterator itr = p.first; itr != p.second; ++itr) {
QTime const &from = Utilities::WeekDaysWorkTimeFrom(itr);
QTime const &until = Utilities::WeekDaysWorkTimeUntil(itr);
QTime const &startTime = start.time();
if (from > startTime) {
return CalcState(CalcState::State::OUTSIDE_ALLOWED_PARKING_TIME,
QString("%1 < %2").arg(from.toString(Qt::ISODate))
.arg(startTime.toString(Qt::ISODate)), from, until);
} else
if (startTime >= until) {
return CalcState(CalcState::State::OUTSIDE_ALLOWED_PARKING_TIME,
QString("%1 >= %2").arg(startTime.toString(Qt::ISODate))
.arg(until.toString(Qt::ISODate)), from, until);
}
return CalcState(CalcState::State::SUCCESS,
"PARKING ALLOWED", from, until);
}
}
}
}
return CalcState(CalcState::State::OUTSIDE_ALLOWED_PARKING_TIME, "UNKNOWN ERROR",
QTime(), QTime());
}
/////////////////////////////////////// ///////////////////////////////////////
@@ -223,23 +271,13 @@ double Calculator::GetCostFromDuration(Configuration* cfg,
} else { } else {
if (Utilities::IsYearPeriodActive(cfg, start_datetime)) { if (Utilities::IsYearPeriodActive(cfg, start_datetime)) {
if (!prepaid) { if (!prepaid) {
BusinessHours businessHours = Utilities::getBusinessHours(cfg, paymentMethodId); CalcState cs = isParkingAllowed(cfg, start_datetime);
if (businessHours == BusinessHours::OnlyWeekDays) { if (cs) {
int const weekdayId = start_datetime.date().dayOfWeek();
using WTIterator = std::multimap<int, ATBWeekDaysWorktime>::const_iterator;
std::pair<WTIterator, WTIterator> p = cfg->WeekDaysWorktime.equal_range(weekdayId);
for (WTIterator itr = p.first; itr != p.second; ++itr) {
QTime const &from = Utilities::WeekDaysWorkTimeFrom(itr);
QTime const &until = Utilities::WeekDaysWorkTimeUntil(itr);
QTime const &startTime = start_datetime.time();
if (from <= startTime && startTime <= until) {
end_datetime = start_datetime.addSecs(durationMinutes*60); end_datetime = start_datetime.addSecs(durationMinutes*60);
return GetCostFromDuration(cfg, start_datetime, end_datetime); double cost = GetCostFromDuration(cfg, start_datetime, end_datetime);
} end_datetime = start_datetime;
} end_datetime.setTime(cs.getAllowedTimeRange().getTimeUntil());
return cost;
} }
} }
@@ -712,9 +750,9 @@ QList<int> Calculator::GetTimeSteps(Configuration *cfg) const {
int const pop_carry_over = cfg->getPaymentOptions().pop_carry_over; int const pop_carry_over = cfg->getPaymentOptions().pop_carry_over;
int const pop_time_step_config = cfg->getPaymentOptions().pop_time_step_config; int const pop_time_step_config = cfg->getPaymentOptions().pop_time_step_config;
qCritical() << __PRETTY_FUNCTION__ << " start parking time:" << start.toString(Qt::ISODate); qCritical() << __func__ << ":" << __LINE__ << " start parking time:" << start.toString(Qt::ISODate);
qCritical() << __PRETTY_FUNCTION__ << " payment option id:" << pop_id; qCritical() << __func__ << ":" << __LINE__ << " payment option id:" << pop_id;
qCritical() << __PRETTY_FUNCTION__ << " payment option carry over:" << pop_carry_over; qCritical() << __func__ << ":" << __LINE__ << "payment option carry over:" << pop_carry_over;
if (pop_time_step_config == (int)ATBTimeStepConfig::TimeStepConfig::DYNAMIC) { if (pop_time_step_config == (int)ATBTimeStepConfig::TimeStepConfig::DYNAMIC) {
//qCritical() << __PRETTY_FUNCTION__ << "payment option time step config:" << "TimeStepConfig::DYNAMIC"; //qCritical() << __PRETTY_FUNCTION__ << "payment option time step config:" << "TimeStepConfig::DYNAMIC";
@@ -852,11 +890,9 @@ Calculator::GetDailyTicketPrice(Configuration* cfg,
ATBWeekDaysWorktime const &wt = workTime.value(); ATBWeekDaysWorktime const &wt = workTime.value();
endTime = startDatetime; endTime = startDatetime;
endTime.setTime(QTime::fromString(wt.pwd_time_to.c_str(), Qt::ISODate)); endTime.setTime(QTime::fromString(wt.pwd_time_to.c_str(), Qt::ISODate));
std::optional<QVector<ATBDailyTicket>> dailyTickets = cfg->getDailyTicketsForAllKeys(); std::optional<QVector<ATBDailyTicket>> dailyTickets = cfg->getDailyTicketsForAllKeys();
if (dailyTickets) { if (dailyTickets) {
QVector<ATBDailyTicket> const tickets = dailyTickets.value(); QVector<ATBDailyTicket> const tickets = dailyTickets.value();
switch (permitType) { switch (permitType) {
case PERMIT_TYPE::DAY_TICKET_ADULT: { case PERMIT_TYPE::DAY_TICKET_ADULT: {
std::optional<ATBCustomer> c = cfg->getCustomerForType(ATBCustomer::CustomerType::ADULT); std::optional<ATBCustomer> c = cfg->getCustomerForType(ATBCustomer::CustomerType::ADULT);
@@ -864,12 +900,20 @@ Calculator::GetDailyTicketPrice(Configuration* cfg,
for (QVector<ATBDailyTicket>::size_type i=0; i<tickets.size(); ++i) { for (QVector<ATBDailyTicket>::size_type i=0; i<tickets.size(); ++i) {
if (tickets[i].daily_ticket_clearance_customer_ids.contains(c.value().cust_id)) { if (tickets[i].daily_ticket_clearance_customer_ids.contains(c.value().cust_id)) {
int priceId = tickets[i].daily_ticket_price_id; int priceId = tickets[i].daily_ticket_price_id;
std::optional<QVector<ATBPaymentRate>> const &paymentRates = cfg->getPaymentRateForKey(priceId); QVector<ATBPaymentOption> const &paymentOptions = cfg->getAllPaymentOptions();
for (QVector<ATBPaymentOption>::size_type j=0; j < paymentOptions.size(); ++j) {
int const pop_id = paymentOptions.at(j).pop_id;
std::optional<QVector<ATBPaymentRate>> const &paymentRates = cfg->getPaymentRateForKey(pop_id);
if (paymentRates) { if (paymentRates) {
QVector<ATBPaymentRate> const &pr = paymentRates.value(); QVector<ATBPaymentRate> const &pr = paymentRates.value();
if (pr.size() > 0) { for (QVector<ATBPaymentRate>::size_type k=0; k < pr.size(); ++k) {
price.netto = pr.at(0).pra_price; if (pr.at(k).pra_payment_option_id == pop_id) {
value.value_or(price); if (priceId == pr.at(k).pra_payment_unit_id) {
price.netto = pr.at(k).pra_price;
value = value.value_or(price);
}
}
}
} }
} }
} }
@@ -882,12 +926,20 @@ Calculator::GetDailyTicketPrice(Configuration* cfg,
for (QVector<ATBDailyTicket>::size_type i=0; i<tickets.size(); ++i) { for (QVector<ATBDailyTicket>::size_type i=0; i<tickets.size(); ++i) {
if (tickets[i].daily_ticket_clearance_customer_ids.contains(c.value().cust_id)) { if (tickets[i].daily_ticket_clearance_customer_ids.contains(c.value().cust_id)) {
int priceId = tickets[i].daily_ticket_price_id; int priceId = tickets[i].daily_ticket_price_id;
std::optional<QVector<ATBPaymentRate>> const &paymentRates = cfg->getPaymentRateForKey(priceId); QVector<ATBPaymentOption> const &paymentOptions = cfg->getAllPaymentOptions();
for (QVector<ATBPaymentOption>::size_type j=0; j < paymentOptions.size(); ++j) {
int const pop_id = paymentOptions.at(j).pop_id;
std::optional<QVector<ATBPaymentRate>> const &paymentRates = cfg->getPaymentRateForKey(pop_id);
if (paymentRates) { if (paymentRates) {
QVector<ATBPaymentRate> const &pr = paymentRates.value(); QVector<ATBPaymentRate> const &pr = paymentRates.value();
if (pr.size() > 0) { for (QVector<ATBPaymentRate>::size_type k=0; k < pr.size(); ++k) {
price.netto = pr.at(0).pra_price; if (pr.at(k).pra_payment_option_id == pop_id) {
value.value_or(price); if (priceId == pr.at(k).pra_payment_unit_id) {
price.netto = pr.at(k).pra_price;
value = value.value_or(price);
}
}
}
} }
} }
} }
@@ -895,6 +947,30 @@ Calculator::GetDailyTicketPrice(Configuration* cfg,
} }
} break; } break;
case PERMIT_TYPE::DAY_TICKET_CHILD: { case PERMIT_TYPE::DAY_TICKET_CHILD: {
std::optional<ATBCustomer> c = cfg->getCustomerForType(ATBCustomer::CustomerType::CHILD);
if (c) {
for (QVector<ATBDailyTicket>::size_type i=0; i<tickets.size(); ++i) {
if (tickets[i].daily_ticket_clearance_customer_ids.contains(c.value().cust_id)) {
int priceId = tickets[i].daily_ticket_price_id;
QVector<ATBPaymentOption> const &paymentOptions = cfg->getAllPaymentOptions();
for (QVector<ATBPaymentOption>::size_type j=0; j < paymentOptions.size(); ++j) {
int const pop_id = paymentOptions.at(j).pop_id;
std::optional<QVector<ATBPaymentRate>> const &paymentRates = cfg->getPaymentRateForKey(pop_id);
if (paymentRates) {
QVector<ATBPaymentRate> const &pr = paymentRates.value();
for (QVector<ATBPaymentRate>::size_type k=0; k < pr.size(); ++k) {
if (pr.at(k).pra_payment_option_id == pop_id) {
if (priceId == pr.at(k).pra_payment_unit_id) {
price.netto = pr.at(k).pra_price;
value = value.value_or(price);
}
}
}
}
}
}
}
}
} }
// [[fallthrough]]; // [[fallthrough]];
case PERMIT_TYPE::SHORT_TERM_PARKING: { case PERMIT_TYPE::SHORT_TERM_PARKING: {

View File

@@ -579,9 +579,11 @@ Configuration::getWeekDayWorkTime(QTime const &time, Qt::DayOfWeek dayOfWeek) {
std::multimap<int, ATBWeekDaysWorktime>::const_iterator it = this->WeekDaysWorktime.find((int)dayOfWeek); std::multimap<int, ATBWeekDaysWorktime>::const_iterator it = this->WeekDaysWorktime.find((int)dayOfWeek);
if (it != this->WeekDaysWorktime.cend()) { if (it != this->WeekDaysWorktime.cend()) {
ATBWeekDaysWorktime const &wt = it->second; ATBWeekDaysWorktime const &wt = it->second;
if (QTime::fromString(wt.pwd_time_from.c_str(), Qt::ISODate) >= time
&& QTime::fromString(wt.pwd_time_to.c_str(), Qt::ISODate) < time) { 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); value = value.value_or(wt);
} }
} }

View File

@@ -354,13 +354,14 @@ bool Utilities::isCarryOverNotSet(Configuration const *cfg, PaymentMethod paymen
} }
PaymentMethod Utilities::getPaymentMethodId(Configuration const *cfg) { PaymentMethod Utilities::getPaymentMethodId(Configuration const *cfg) {
if (cfg->PaymentOption.size() != 1) { if (cfg->PaymentOption.size() == 0) {
return PaymentMethod::Undefined; return PaymentMethod::Undefined;
} }
std::multimap<int, ATBPaymentOption>::const_iterator it = std::multimap<int, ATBPaymentOption>::const_iterator it =
cfg->PaymentOption.cbegin(); cfg->PaymentOption.cbegin();
if (it != cfg->PaymentOption.cend()) {
switch (it->first) { switch (it->first) {
case PaymentMethod::Linear: case PaymentMethod::Linear:
return PaymentMethod::Linear; return PaymentMethod::Linear;
@@ -371,6 +372,7 @@ PaymentMethod Utilities::getPaymentMethodId(Configuration const *cfg) {
case PaymentMethod::Progressive: case PaymentMethod::Progressive:
return PaymentMethod::Progressive; return PaymentMethod::Progressive;
} }
}
return PaymentMethod::Undefined; return PaymentMethod::Undefined;
} }
@@ -403,18 +405,22 @@ uint32_t Utilities::getFirstDurationStep(Configuration const *cfg, PaymentMethod
BusinessHours Utilities::getBusinessHours(Configuration const *cfg, PaymentMethod methodId) { BusinessHours Utilities::getBusinessHours(Configuration const *cfg, PaymentMethod methodId) {
int businessHours = cfg->PaymentOption.find(methodId)->second.pop_business_hours; int businessHours = cfg->PaymentOption.find(methodId)->second.pop_business_hours;
qCritical() << __func__ << ":" << __LINE__ << businessHours;
switch (businessHours) { switch (businessHours) {
case NoRestriction_24_7: return NoRestriction_24_7; case NoRestriction_24_7: return BusinessHours::NoRestriction_24_7;
case OnlyWorkingDays: return OnlyWorkingDays; case OnlyWorkingDays: return BusinessHours::OnlyWorkingDays;
case OnlyWeekDays: return OnlyWeekDays; case OnlyWeekDays: return BusinessHours::OnlyWeekDays;
case OnlyWeekEnd: return OnlyWeekEnd; case OnlyWeekEnd: return BusinessHours::OnlyWeekEnd;
case OnlyOfficialHolidays: return OnlyOfficialHolidays; case OnlyOfficialHolidays: return BusinessHours::OnlyOfficialHolidays;
case OnlySpecialDays: return OnlySpecialDays; case OnlySpecialDays: return BusinessHours::OnlySpecialDays;
case OnlySchoolHolidays: return OnlySchoolHolidays; case OnlySchoolHolidays: return BusinessHours::OnlySchoolHolidays;
case SpecialAndSchoolHolidays: return SpecialAndSchoolHolidays; case SpecialAndSchoolHolidays: return BusinessHours::SpecialAndSchoolHolidays;
case OnlyOpenForBusinessDays: return OnlyOpenForBusinessDays; case OnlyOpenForBusinessDays: return BusinessHours::OnlyOpenForBusinessDays;
case AllDaysWithRestrictedHours: return BusinessHours::AllDaysWithRestrictedHours;
} }
return NoBusinessHoursDefined; return BusinessHours::NoBusinessHoursDefined;
} }
uint32_t Utilities::computeWeekDaysPrice(Configuration const *cfg, PaymentMethod id) { uint32_t Utilities::computeWeekDaysPrice(Configuration const *cfg, PaymentMethod id) {

View File

@@ -33,11 +33,11 @@ extern "C" char* strptime(const char* s,
#include "calculator_functions.h" #include "calculator_functions.h"
#include "calculate_price.h" #include "calculate_price.h"
#define SZEGED (1) #define SZEGED (0)
#define SCHOENAU_KOENIGSEE (0) #define SCHOENAU_KOENIGSEE (0)
#define NEUHAUSER_KORNEUBURG (0) #define NEUHAUSER_KORNEUBURG (0)
#define NEUHAUSER_LINSINGER_MASCHINENBAU (0) #define NEUHAUSER_LINSINGER_MASCHINENBAU (0)
#define NEUHAUSER_NORDISCHES_AUSBILDUNGSZENTRUM (0) #define NEUHAUSER_NORDISCHES_AUSBILDUNGSZENTRUM (1)
#define NEUHAUSER_BILEXA_GALTUER (0) #define NEUHAUSER_BILEXA_GALTUER (0)
@@ -133,18 +133,37 @@ int main() {
cout << endl; cout << endl;
if (isParsed) { if (isParsed) {
QDateTime s(QDate(2023, 11, 30), QTime());
QDateTime end;
struct price_t price;
for (int offset = 480; offset < 1080; ++offset) {
QDateTime start = s.addSecs(offset * 60);
// qCritical() << QString(Calculator::GetInstance().isParkingAllowed(&cfg, start));
CalcState cs = compute_price_for_daily_ticket(&cfg, start, end,
PERMIT_TYPE::DAY_TICKET_ADULT, &price);
qCritical() << "start=" << start.toString(Qt::ISODate)
<< "end" << end.toString(Qt::ISODate) << "price" << price.netto;
}
for (int offset = 480; offset < 1080; ++offset) {
QDateTime start = s.addSecs(offset * 60);
CalcState cs = compute_price_for_daily_ticket(&cfg, start, end,
PERMIT_TYPE::DAY_TICKET_TEEN, &price);
qCritical() << "start=" << start.toString(Qt::ISODate)
<< "end" << end.toString(Qt::ISODate) << "price" << price.netto;
}
} }
#endif #endif
#if NEUHAUSER_LINSINGER_MASCHINENBAU==1 #if NEUHAUSER_LINSINGER_MASCHINENBAU==1
std::ifstream input("/tmp/tariff_linsinger_maschinenbau.json"); std::ifstream input("/opt/ptu5/opt/customer_741/etc/psa_tariff/tariff01.json");
std::stringstream sstr; std::stringstream sstr;
while(input >> sstr.rdbuf()); while(input >> sstr.rdbuf());
std::string json(sstr.str()); std::string json(sstr.str());
Calculator calculator;
Configuration cfg; Configuration cfg;
bool isParsed = cfg.ParseJson(&cfg, json.c_str()); bool isParsed = cfg.ParseJson(&cfg, json.c_str());
@@ -163,14 +182,14 @@ int main() {
QDateTime start = s.addSecs(offset * 60); QDateTime start = s.addSecs(offset * 60);
//qCritical() << "start" << start.toString(Qt::ISODate); //qCritical() << "start" << start.toString(Qt::ISODate);
double cost = calculator.GetCostFromDuration(&cfg, 4, start, end, marken[duration], nextDay, prePaid); double cost = Calculator::GetInstance().GetCostFromDuration(&cfg, 4, start, end, marken[duration], nextDay, prePaid);
//qCritical() << ""; //qCritical() << "";
//qCritical() << "start" << start.toString(Qt::ISODate) //qCritical() << "start" << start.toString(Qt::ISODate)
// << "end" << end.toString(Qt::ISODate) // << "end" << end.toString(Qt::ISODate)
// << "duration" << marken[duration] // << "duration" << marken[duration]
// << "cost" << cost; // << "cost" << cost;
std::string d = calculator.GetDurationFromCost(&cfg, 4, start.toString(Qt::ISODate).toStdString().c_str(), cost); std::string d = Calculator::GetInstance().GetDurationFromCost(&cfg, 4, start.toString(Qt::ISODate).toStdString().c_str(), cost);
qCritical() << "start" << start.toString(Qt::ISODate) qCritical() << "start" << start.toString(Qt::ISODate)
<< "cost" << cost << "cost" << cost
<< "until" << d.c_str() << start.secsTo(QDateTime::fromString(d.c_str(), Qt::ISODate)) / 60; << "until" << d.c_str() << start.secsTo(QDateTime::fromString(d.c_str(), Qt::ISODate)) / 60;