calculate_parking/main/main.cpp.bck.1

161 lines
6.1 KiB
Groff

#include <QDebug>
#include <QDateTime>
#include "calculate_parking_tickets.h"
#include "calculate_parking_tickets_algorithms.h"
#include "calculate_parking_tickets_tariff.h"
#include "calculate_parking_tickets_utils.h"
#include "message_handler.h"
int main() {
if (!messageHandlerInstalled()) { // change internal qt-QDebug-handling
atbInstallMessageHandler(atbDebugOutput);
setDebugLevel(QtMsgType::QtDebugMsg);
}
/*
Germersheim:
Freiparkzeit: 90 min
Stundentarif: 7:00 - 20:00 3,50 Euro/h
Tagesmaximum: 18 Euro, gueltig 24h ab einfahrt
Nacht-Tarif: 20:00 - 7:00: 8 Euro
Fragen:
1. Fuer die Abrechnung bleiben mehrere Moeglichkeiten.
a: minutengenau: eine Minute kostet 0.0583 Euro (bzw. 0.012 Euro nachts).
b: im Stunden-Raster ausgerichtet an der tatsaechlichen Uhrzeit
wie angeben: jede angefangene Stunde kostet 3.50 Euro bzw.
8 Euro Nacht-Tarif.
Beispiele:
zu b: Einfahrt um 18:24 Uhr. Bis 19:54 Uhr ist dann frei. Die 6 Minuten
bis 20:00 Uhr kosten dann 3.50 Euro. Ausfahrt um 21.00 Uhr: kostet
dann 8 Euro, insgesamt also 11.50 Euro.
zu a: wie vor, nur minutengenaue Abrechnung: 6 Minuten kosten dann
6*0.0583 = 0.35 Euro, plus 1h nachts: 60*0.012 = 0.72 Euro,
insgesamt also 1.07 Euro.
Was (logisch) nicht moeglich ist: ein Stunden-Raster, das nicht an der
tatsaechlichen Uhrzeit ausgerichtet ist.
Beispiel: Einfahrt 18:00 Uhr, frei bis 19:30 Uhr. Wie soll nun die
naechste Stunde berechnet werden? Nach Tag- oder Nacht-Tariff?
2: Tagesmaximum
a: Es gibt also eine maximale Parkzeit von 24h, und der maximale Preis
ist 18 Euro? Oder gibt es kein Maximum fuer die Parkdauer, aber der
Preis ab 24h Parkdauer betraegt einheitlich 18 Euro.
Im zweiten Fall waere dann Folgendes moeglich:
Einfahrt 5:30 Uhr, frei bis 7:00 Uhr.
Kosten von 7:00 - 20:00 Uhr: 13*3.50 = 45.50 Euro.
Kosten von 20:00 - 7:00 Uhr: 8 Euro.
Ausfahrt: 8:00 Uhr: 3.50 Euro, insgesamt eigentlich 57 Euro,
nach obiger Regel aber dann nur 18 Euro.
*/
/*
TODO:
1: Abrechnungsmodus:
a: minutengenau
b: 15-min-Raster, ausgerichtet an der tatseachlichen Uhrzeit
b: 30-min-Raster, ausgerichtet an der tatseachlichen Uhrzeit
b: 60-min-Raster, ausgerichtet an der tatseachlichen Uhrzeit
c: wie im Tarif angegeben mit einer moeglichst groben Aufloesung.
*/
parking_tariff_t *tariff = new parking_tariff_t();
tariff->unit_scale_factor = 1.0;
tariff->unit_definition = 1000;
tariff->waiting_period = 0;
// tariff->waiting_period = 90;
int const si = sizeof(TariffStep);
qDebug() << si;
QDate today = QDate::currentDate();
int todayWeekDay = today.dayOfWeek();
if (todayWeekDay > Qt::Monday) {
int day = today.day() - todayWeekDay;
if (!today.setDate(today.year(), today.month(), day)) {
qFatal("Setting today failed");
}
}
QDate sunday = today;
qDebug() << sunday;
for (int i = Qt::Monday; i <= Qt::Sunday; ++i) {
// days start at midnight
QDateTime startMinute(sunday.addDays(i), QTime( 0, 0));
//qDebug() << "startMinute=" << startMinute << startMinute.date().dayOfWeek();
// first block: 0:00 - 7:00. night-tariff.
TariffStep *current = &tariff->m_tariffSteps[i][0];
TariffStep *next = &tariff->m_tariffSteps[i][7*60];
*current = TariffStep(startMinute, 0, next);
//qDebug() << "current =" << "c=" << current << current->startMinute() << current->price() << "n=" << current->next();
//qDebug() << "offset =" << ((char *)current->next() - (char *)&tariff->m_tariffSteps[i][0])/sizeof(TariffStep);
// from 7:00 on, each hour costs 3.50 euros == 350000 units
startMinute = startMinute.addSecs(7*3600);
current = next;
for (int j = 7; j < 20; ++j) {
next = current + 60;
*current = TariffStep(startMinute, 350000, next);
//qDebug() << "current =" << "c=" << current << current->startMinute() << current->price() << "n=" << current->next();
//qDebug() << "offset =" << ((char *)current->next() - (char *)&tariff->m_tariffSteps[i][0])/sizeof(TariffStep);
startMinute = startMinute.addSecs(3600);
current = next;
}
if (i != Qt::Sunday) {
next = current + 4*60 + 7*60;
} else {
next = &tariff->m_tariffSteps[Qt::Monday][7*60];
}
*current = TariffStep(startMinute, 0, next);
if (i != Qt::Sunday) {
qDebug() << "current =" << "c=" << current << current->startMinute() << current->price() << "n=" << current->next();
qDebug() << "offset =" << ((char *)current->next() - (char *)&tariff->m_tariffSteps[i][0])/sizeof(TariffStep);
} else {
qDebug() << "current =" << "c=" << current << current->startMinute() << current->price() << "n=" << current->next();
if (&tariff->m_tariffSteps[1][420] == current->next()) {
qDebug() << "OK";
qDebug() << "offset =" << ((char *)current->next() - (char *)&tariff->m_tariffSteps[1][0])/sizeof(TariffStep);
}
}
}
return 0;
#if 0
price_t price;
memset(&price, 0x00, sizeof(price));
QDateTime start = QDateTime::currentDateTime();
minute_t const s = TUtils::toMinutes(start);
minute_t const e = s + 60;
qDebug() << "start =" << start << "(" << s << ")";
//start.setTime(QTime()); ruecksetzen des tages auf 0:00
//QTime t = start.time();
for (int i=1; i < (e-s); ++i) {
qDebug() << i << start << start.date().dayOfWeek();
start = start.addSecs(60);
}
#endif
//if (TAlgo::compute_price_for_parking_ticket(tariff, s, e, &price)) {
//}
// Calculate_parking_tickets cpt;
return 0;
}