diff --git a/main/main.cpp b/main/main.cpp index 0f82852..e8d6c06 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -37,8 +37,8 @@ extern "C" char* strptime(const char* s, #define SZEGED (0) #define SCHOENAU_KOENIGSEE (0) #define NEUHAUSER_KORNEUBURG (0) -#define NEUHAUSER_LINSINGER_MASCHINENBAU (1) -#define NEUHAUSER_NORDISCHES_AUSBILDUNGSZENTRUM (0) +#define NEUHAUSER_LINSINGER_MASCHINENBAU (0) +#define NEUHAUSER_NORDISCHES_AUSBILDUNGSZENTRUM (1) #define NEUHAUSER_BILEXA_GALTUER (0) #define NEUHAUSER_KIRCHDORF (0) @@ -509,6 +509,17 @@ int main() { cout << endl; if (isParsed) { + + int v = compute_product_price(&cfg, PERMIT_TYPE::DAY_TICKET_ADULT); + qCritical() << "price adult" << v; + + int w = compute_product_price(&cfg, PERMIT_TYPE::DAY_TICKET_TEEN); + qCritical() << "price teen" << w; + + return 0; + + + QDateTime s(QDate(2023, 11, 30), QTime()); QDateTime end; struct price_t price; @@ -643,10 +654,11 @@ int main() { int pop_max_time; int pop_min_price; int pop_max_price; + int pop_daily_card_price; - for (int t=1; t < 2; ++t) { + for (int zone=2; zone < 3; ++zone) { //for (int t=6; t < 7; t+=20) { - switch (t) { + switch (zone) { case 1: { input.open("/opt/ptu5/opt/customer_281/etc/psa_tariff/tariff01.json"); //pop_max_time = 6*60; @@ -690,43 +702,186 @@ int main() { pop_max_time = get_maximal_parkingtime(&cfg); pop_min_price = get_minimal_parkingprice(&cfg); pop_max_price = get_maximal_parkingprice(&cfg); + pop_daily_card_price = cfg.getPaymentOptions().pop_daily_card_price; qCritical() << " pop_min_time: " << pop_min_time; qCritical() << " pop_max_time: " << pop_max_time; qCritical() << " pop_min_price: " << pop_min_price; qCritical() << " pop_max_price: " << pop_max_price; - qCritical() << "pop_daily_card_price: " << cfg.getPaymentOptions().pop_daily_card_price; + qCritical() << "pop_daily_card_price: " << pop_daily_card_price; + + if (pop_min_time > pop_max_time) { + qCritical() << "ERROR pop_min_time > pop_max_time" + << pop_min_time << pop_max_time; + return -1; + } + + if (pop_min_price > pop_max_price) { + qCritical() << "ERROR pop_min_price > pop_max_price" + << pop_min_price << pop_max_price; + return -1; + } + + if (pop_daily_card_price < pop_max_price) { + qCritical() << "ERROR pop_daily_card_price < pop_max_price" + << pop_daily_card_price << pop_max_price; + return -1; + } + + QMap m; { // zone 1 (lila) QDateTime s(QDate(2023, 11, 30), QTime()); QDateTime end; int cnt = 1; -#if 0 - for (int duration = 15; duration <= pop_max_time; duration += 5) { +#if 1 + if (zone == 1) { + m.insert(5, pop_min_price); + m.insert(10, pop_min_price); + + m.insert(pop_min_time, pop_min_price); + m.insert(20, 55); + m.insert(25, 69); + m.insert(30, 83); + m.insert(35, 97); + m.insert(40, 110); + m.insert(45, 124); + m.insert(50, 138); + m.insert(55, 152); + m.insert(60, 165); + + m.insert(65, 179); + m.insert(70, 193); + m.insert(75, 207); + m.insert(80, 220); + m.insert(85, 234); + m.insert(90, 248); + m.insert(95, 262); + m.insert(100, 275); + m.insert(105, 289); + m.insert(110, 303); + m.insert(115, 317); + m.insert(120, 330); + + m.insert(125, 344); + m.insert(130, 358); + m.insert(135, 372); + m.insert(140, 385); + m.insert(145, 399); + m.insert(150, 413); + m.insert(155, 427); + m.insert(160, 440); + m.insert(165, 454); + m.insert(170, 468); + m.insert(175, 482); + m.insert(180, 495); + + m.insert(185, 509); + m.insert(190, 523); + m.insert(195, 537); + m.insert(200, 550); + m.insert(205, 564); + m.insert(210, 578); + m.insert(215, 592); + m.insert(220, 605); + m.insert(225, 619); + m.insert(230, 633); + m.insert(235, 647); + m.insert(240, 660); + + m.insert(245, 674); + m.insert(250, 688); + m.insert(255, 702); + m.insert(260, 715); + m.insert(265, 729); + m.insert(270, 743); + m.insert(275, 757); + m.insert(280, 770); + m.insert(285, 784); + m.insert(290, 798); + m.insert(295, 812); + m.insert(300, 825); + + m.insert(305, 839); + m.insert(310, 853); + m.insert(315, 867); + m.insert(320, 880); + m.insert(325, 894); + m.insert(330, 908); + m.insert(335, 922); + m.insert(340, 935); + m.insert(345, 949); + m.insert(350, 963); + m.insert(355, 977); + m.insert(360, pop_max_price); + + m.insert(365, pop_max_price); + m.insert(370, pop_max_price); + m.insert(375, pop_max_price); + m.insert(380, pop_max_price); + m.insert(385, pop_max_price); + m.insert(390, pop_max_price); + m.insert(395, pop_max_price); + m.insert(400, pop_max_price); + m.insert(405, pop_max_price); + m.insert(410, pop_max_price); + m.insert(415, pop_max_price); + m.insert(420, pop_max_price); + } else + if (zone == 2) { + + } + + struct price_t price; + for (int duration = pop_min_time; duration <= pop_max_time; duration += 5) { for (int offset = 480; offset < 1080; ++offset) { QDateTime start = s.addSecs(offset * 60); - // qCritical() << "start" << start.toString(Qt::ISODate); + end = QDateTime(); + price.netto = 0; + if (compute_price_for_parking_ticket(&cfg, start, duration, end, &price)) { + double cost = price.netto; - double cost = Calculator::GetInstance().GetCostFromDuration(&cfg, 3, start, end, duration); - // Q_ASSERT(cost == duration*2.5); - //qCritical() << ""; - qCritical() << cnt << "start" << start.toString(Qt::ISODate) - << "end" << end.toString(Qt::ISODate) - << "duration" << duration - << "cost" << cost; + qCritical() << start.toString(Qt::ISODate) << end.toString(Qt::ISODate) + << duration << cost; + + //if (cost != m[duration]) { + // qCritical() << "ERROR computing_price_for_parking_ticket" + // << "duration" << duration + // << "HAVE cost" << cost + // << "SHOULD HAVE cost" << m[duration]; + // return -1; + //} + } else { + qCritical() << "ERROR computing_price_for_parking_ticket AT" + << cnt << "duration" << duration + << "start" << start.toString(Qt::ISODate); + return -1; + } + start = s.addSecs(offset * 60); + end = QDateTime(); + price.netto = 0; + + if (zone == 1) { // || zone == 2) + if (compute_price_for_daily_ticket(&cfg, start, end, PERMIT_TYPE::DAY_TICKET, &price)) { + if (price.netto != pop_daily_card_price) { + qCritical() << "ERROR computing_price_for_daily_ticket" + << "duration" << duration + << "HAVE cost" << price.netto + << "SHOULD HAVE cost" << pop_daily_card_price; + return -1; + } + } else { + qCritical() << "ERROR computing_price_for_daily_ticket AT" + << "start" << start.toString(Qt::ISODate); + return -1; + } + } - std::string duration = Calculator::GetInstance().GetDurationFromCost(&cfg, - 3, - start.toString(Qt::ISODate).toStdString().c_str(), - cost, false, true); - //Q_ASSERT(cost == duration*2.5); - qCritical() << cnt << "start" << start.toString(Qt::ISODate) - << "cost" << cost - << "until" << duration.c_str() << start.secsTo(QDateTime::fromString(duration.c_str(), Qt::ISODate)) / 60; ++cnt; } } + #else QDateTime start = s.addSecs(480 * 60); // 8:00:00 double cost = 2000;