diff --git a/library/include/mobilisis/utilities.h b/library/include/mobilisis/utilities.h
index 74dad3f..09de817 100644
--- a/library/include/mobilisis/utilities.h
+++ b/library/include/mobilisis/utilities.h
@@ -68,6 +68,6 @@ public:
///
///
///
- static double CalculatePricePerUnit(double pra_price);
+ static double CalculatePricePerUnit(double pra_price, double durationUnit = -1);
};
diff --git a/library/src/calculator_functions.cpp b/library/src/calculator_functions.cpp
index af86222..8fdef0d 100644
--- a/library/src/calculator_functions.cpp
+++ b/library/src/calculator_functions.cpp
@@ -177,8 +177,12 @@ std::string Calculator::GetDurationFromCost(Configuration* cfg,
else
{
// Set new price for the normal day
- day_price = cfg->PaymentRate.find(payment_option)->second.pra_price;
- price_per_unit = Utilities::CalculatePricePerUnit(day_price);
+ int pop_id = cfg->PaymentOption.find(payment_option)->second.pop_id;
+ day_price = cfg->PaymentRate.find(pop_id)->second.pra_price;
+
+ int durationId = cfg->PaymentRate.find(pop_id)->second.pra_payment_unit_id;
+ double durationUnit = cfg->Duration.find(durationId)->second.pun_duration;
+ price_per_unit = Utilities::CalculatePricePerUnit(day_price,durationUnit);
// If no working day found, skip it (recursively call method again)
size_t found = 0;
@@ -410,8 +414,13 @@ double Calculator::GetCostFromDuration(Configuration* cfg, uint8_t payment_optio
else
{
// Set new price for the normal day
- day_price = cfg->PaymentRate.find(payment_option)->second.pra_price;
- price_per_unit = Utilities::CalculatePricePerUnit(day_price);
+
+ int pop_id = cfg->PaymentOption.find(payment_option)->second.pop_id;
+ day_price = cfg->PaymentRate.find(pop_id)->second.pra_price;
+
+ int durationId = cfg->PaymentRate.find(pop_id)->second.pra_payment_unit_id;
+ double durationUnit = cfg->Duration.find(durationId)->second.pun_duration;
+ price_per_unit = Utilities::CalculatePricePerUnit(day_price,durationUnit);
// If no working day found, skip it (recursively call method again)
size_t found = 0;
@@ -506,11 +515,12 @@ double Calculator::GetCostFromDuration(Configuration* cfg, uint8_t payment_optio
return 0.0f;
}
+ int carry_over_status = 0;
+ carry_over_status = cfg->PaymentOption.find(payment_option)->second.pop_carry_over;
+
// Go to next day if minutes not spent
if(inputDate.time() >= worktime_to)
{
- int carry_over_status = 0;
- carry_over_status = cfg->PaymentOption.find(payment_option)->second.pop_carry_over;
if (carry_over_status < 1) break;
LOG_DEBUG("Reached end of worktime, searching for the next working day");
diff --git a/library/src/configuration.cpp b/library/src/configuration.cpp
index 70e61c7..ea5f587 100644
--- a/library/src/configuration.cpp
+++ b/library/src/configuration.cpp
@@ -210,7 +210,7 @@ bool Configuration::ParseJson(Configuration* cfg, const char* json)
cfg->PaymentMethod.insert(pair(PaymentMethod.pme_id, PaymentMethod));
break;
case MemberType::PaymentRateType:
- cfg->PaymentRate.insert(pair(PaymentRate.pra_payment_unit_id, PaymentRate));
+ cfg->PaymentRate.insert(pair(PaymentRate.pra_payment_option_id, PaymentRate));
break;
case MemberType::PaymentOptionType:
cfg->PaymentOption.insert(pair(PaymentOption.pop_payment_method_id, PaymentOption));
diff --git a/library/src/utilities.cpp b/library/src/utilities.cpp
index 48cf880..cb5d896 100644
--- a/library/src/utilities.cpp
+++ b/library/src/utilities.cpp
@@ -8,12 +8,15 @@ static int protection_counter = 0;
///
///
///
-double Utilities::CalculatePricePerUnit(double pra_price)
+double Utilities::CalculatePricePerUnit(double pra_price, double durationUnit)
{
try
{
double price_per_unit = pra_price;
- price_per_unit /= 60.0f; // Divided by 60 because price per unit is set per hour and we are using minutes
+ 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;
}
diff --git a/main/main.cpp b/main/main.cpp
index f294005..0952851 100644
--- a/main/main.cpp
+++ b/main/main.cpp
@@ -35,7 +35,7 @@ int main() {
memset(&price, 0x00, sizeof(price));
QDateTime start = QDateTime::fromString("2023-05-11T07:50:00",Qt::ISODate); //QDateTime::currentDateTime();
time_t start_parking_time = start.toSecsSinceEpoch() / 60;
- time_t end_parking_time = start_parking_time + 1230;
+ time_t end_parking_time = start_parking_time + 615;
if (compute_price_for_parking_ticket(tariff,
start_parking_time,