Compare commits
	
		
			2 Commits
		
	
	
		
			Neuhauser-
			...
			moransBran
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 6ea58be34d | |||
| 8a7828c1e6 | 
@@ -137,6 +137,11 @@ CalcState CALCULATE_LIBRARY_API compute_duration_for_daily_ticket(
 | 
				
			|||||||
                                            parking_tariff_t *tariff,
 | 
					                                            parking_tariff_t *tariff,
 | 
				
			||||||
                                            QString const &start_parking_time,
 | 
					                                            QString const &start_parking_time,
 | 
				
			||||||
                                            uint8_t paymentMethod);
 | 
					                                            uint8_t paymentMethod);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CalcState CALCULATE_LIBRARY_API compute_duration_for_24hour_daily_ticket(
 | 
				
			||||||
 | 
					                                            parking_tariff_t *tariff,
 | 
				
			||||||
 | 
					                                            QString const &start_parking_time,
 | 
				
			||||||
 | 
					                                            uint8_t paymentMethod);
 | 
				
			||||||
//#ifdef __cplusplus
 | 
					//#ifdef __cplusplus
 | 
				
			||||||
//} // extern "C"
 | 
					//} // extern "C"
 | 
				
			||||||
//#endif
 | 
					//#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,4 +29,7 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // Daily ticket
 | 
					    // Daily ticket
 | 
				
			||||||
    QString GetDailyTicketDuration(Configuration* cfg, QString start_datetime, uint8_t payment_option, bool carry_over);
 | 
					    QString GetDailyTicketDuration(Configuration* cfg, QString start_datetime, uint8_t payment_option, bool carry_over);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 24-hour daily ticket
 | 
				
			||||||
 | 
					    QString Get24HourTicketDuration(Configuration* cfg, QString start_datetime, uint8_t payment_option);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,4 +15,5 @@ public:
 | 
				
			|||||||
	double pop_min_price;
 | 
						double pop_min_price;
 | 
				
			||||||
	int pop_carry_over;
 | 
						int pop_carry_over;
 | 
				
			||||||
    int pop_daily_card_price;
 | 
					    int pop_daily_card_price;
 | 
				
			||||||
 | 
					    int pop_multi_hour_price;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -284,3 +284,12 @@ CalcState CALCULATE_LIBRARY_API compute_duration_for_daily_ticket(parking_tariff
 | 
				
			|||||||
    return calcState.set(CalcState::State::SUCCESS);
 | 
					    return calcState.set(CalcState::State::SUCCESS);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CalcState CALCULATE_LIBRARY_API compute_duration_for_24hour_daily_ticket(parking_tariff_t *tariff, QString const &start_parking_time,uint8_t paymentMethod)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    CalcState calcState;
 | 
				
			||||||
 | 
					    QString result = calculator.Get24HourTicketDuration(tariff, start_parking_time, PaymentOption::Option1,false);
 | 
				
			||||||
 | 
					    qDebug() << "24HourDailyTicket() => " + result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return calcState.set(CalcState::State::SUCCESS);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,6 +10,7 @@
 | 
				
			|||||||
double total_duration_min = 0.0f;
 | 
					double total_duration_min = 0.0f;
 | 
				
			||||||
double total_cost = 0.0f;
 | 
					double total_cost = 0.0f;
 | 
				
			||||||
bool overtime = false;
 | 
					bool overtime = false;
 | 
				
			||||||
 | 
					int protection_counter = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef _WIN32
 | 
					#ifdef _WIN32
 | 
				
			||||||
inline struct tm* localtime_r(const time_t *clock, struct tm* result){
 | 
					inline struct tm* localtime_r(const time_t *clock, struct tm* result){
 | 
				
			||||||
@@ -19,6 +20,41 @@ inline struct tm* localtime_r(const time_t *clock, struct tm* result){
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QString Calculator::Get24HourTicketDuration(Configuration *cfg, QString start_datetime, uint8_t payment_option)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					     if(start_datetime.isNull() || start_datetime.isEmpty()) return "Invalid date-time";
 | 
				
			||||||
 | 
					      protection_counter = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      double day_price = 0.0f;
 | 
				
			||||||
 | 
					      int current_special_day_id = -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      QDateTime inputDateTime = QDateTime::fromString(start_datetime, Qt::ISODate);
 | 
				
			||||||
 | 
					      QTime worktime_from;
 | 
				
			||||||
 | 
					      QTime worktime_to;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      int daily_24hour_card_price = cfg->PaymentOption.find(payment_option)->second.pop_multi_hour_price;
 | 
				
			||||||
 | 
					      if(daily_24hour_card_price <= 0) return "24-hour daily ticket: price zero or less";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      bool is_special_day = Utilities::CheckSpecialDay(cfg, start_datetime.toStdString().c_str(), ¤t_special_day_id, &day_price);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if(is_special_day)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					          worktime_from = QTime::fromString(cfg->SpecialDaysWorktime.find(current_special_day_id)->second.pedwt_time_from.c_str(), Qt::ISODate);
 | 
				
			||||||
 | 
					          worktime_to = QTime::fromString(cfg->SpecialDaysWorktime.find(current_special_day_id)->second.pedwt_time_to.c_str(),Qt::ISODate);
 | 
				
			||||||
 | 
					          return "24-hour ticket cannot be bought on special day";
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // Check next special day
 | 
				
			||||||
 | 
					      inputDateTime = inputDateTime.addSecs(86400);
 | 
				
			||||||
 | 
					      while(Utilities::CheckSpecialDay(cfg, inputDateTime.toString(Qt::ISODate).toLocal8Bit(), ¤t_special_day_id, &day_price))
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         protection_counter++;
 | 
				
			||||||
 | 
					         if(protection_counter >=7) return NULL;
 | 
				
			||||||
 | 
					         inputDateTime = inputDateTime.addSecs(86400);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      return inputDateTime.toString(Qt::ISODate) + ", price = " + to_string(daily_24hour_card_price).c_str();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
QString Calculator::GetDailyTicketDuration(Configuration* cfg, QString start_datetime, uint8_t payment_option, bool carry_over)
 | 
					QString Calculator::GetDailyTicketDuration(Configuration* cfg, QString start_datetime, uint8_t payment_option, bool carry_over)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if(start_datetime.isNull() || start_datetime.isEmpty()) return NULL;
 | 
					    if(start_datetime.isNull() || start_datetime.isEmpty()) return NULL;
 | 
				
			||||||
@@ -113,6 +149,7 @@ std::string Calculator::GetDurationFromCost(Configuration* cfg,
 | 
				
			|||||||
                                            bool nextDay,
 | 
					                                            bool nextDay,
 | 
				
			||||||
                                            bool prepaid)
 | 
					                                            bool prepaid)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Get input date
 | 
					    // Get input date
 | 
				
			||||||
    QDateTime inputDate = QDateTime::fromString(start_datetime,Qt::ISODate);
 | 
					    QDateTime inputDate = QDateTime::fromString(start_datetime,Qt::ISODate);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -201,7 +238,10 @@ std::string Calculator::GetDurationFromCost(Configuration* cfg,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (price_per_unit < 0) price_per_unit = 1.0f;
 | 
					    if (price_per_unit < 0) price_per_unit = 1.0f;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if((price/price_per_unit) < minMin) return "PARKING NOT ALLOWED";
 | 
					    // Commented on 07.06.2023
 | 
				
			||||||
 | 
					    //if((price/price_per_unit) < minMin)
 | 
				
			||||||
 | 
					    //   return "PARKING NOT ALLOWED";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    LOG_DEBUG("Calculated price per minute: ", price_per_unit);
 | 
					    LOG_DEBUG("Calculated price per minute: ", price_per_unit);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (price_per_unit < 0)
 | 
					    if (price_per_unit < 0)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -155,6 +155,7 @@ bool Configuration::ParseJson(Configuration* cfg, const char* json)
 | 
				
			|||||||
						else if (strcmp(inner_obj_name, "pop_min_price") == 0) PaymentOption.pop_min_price = 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") == 0) PaymentOption.pop_carry_over = 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_daily_card_price") == 0) PaymentOption.pop_daily_card_price = k->value.GetInt();
 | 
				
			||||||
 | 
					                        else if (strcmp(inner_obj_name, "pop_multi_hour_price") == 0) PaymentOption.pop_multi_hour_price = k->value.GetInt();
 | 
				
			||||||
						break;
 | 
											break;
 | 
				
			||||||
					case MemberType::DurationType:
 | 
										case MemberType::DurationType:
 | 
				
			||||||
						if (strcmp(inner_obj_name, "pun_id") == 0) Duration.pun_id = k->value.GetInt();
 | 
											if (strcmp(inner_obj_name, "pun_id") == 0) Duration.pun_id = k->value.GetInt();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,30 +29,32 @@ extern "C" char* strptime(const char* s,
 | 
				
			|||||||
int main() {
 | 
					int main() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    parking_tariff_t *tariff = 0;
 | 
					    parking_tariff_t *tariff = 0;
 | 
				
			||||||
    if (init_tariff(&tariff, "C:\\Users\\MROD\\Documents\\QtCreator\\build-MOBILISIS-Calculator-Desktop_Qt_5_12_12_MSVC2017_32bit-Debug\\main\\etc\\psa_tariff\\zone1.json"))
 | 
					    if (init_tariff(&tariff, "C:\\Users\\MROD\\Documents\\QtCreator\\Old\\build-MOBILISIS-Calculator-Desktop_Qt_5_12_12_MSVC2017_32bit-Debug\\main\\etc\\psa_tariff\\tariff01.json"))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        struct price_t price;
 | 
					        struct price_t price;
 | 
				
			||||||
        memset(&price, 0x00, sizeof(price));
 | 
					        memset(&price, 0x00, sizeof(price));
 | 
				
			||||||
        QDateTime start = QDateTime::fromString("2023-05-11T07:50:00",Qt::ISODate); //QDateTime::currentDateTime();
 | 
					        QDateTime start = QDateTime::fromString("2023-06-01T07:50:00.000Z",Qt::ISODate); //QDateTime::currentDateTime();
 | 
				
			||||||
        time_t start_parking_time = start.toSecsSinceEpoch() / 60;
 | 
					        time_t start_parking_time = start.toSecsSinceEpoch() / 60;
 | 
				
			||||||
        time_t end_parking_time = start_parking_time + 615;
 | 
					        time_t end_parking_time = start_parking_time + 1230;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (compute_price_for_parking_ticket(tariff,
 | 
					//        if (compute_price_for_parking_ticket(tariff,
 | 
				
			||||||
                                             start_parking_time,
 | 
					//                                             start_parking_time,
 | 
				
			||||||
                                             end_parking_time,
 | 
					//                                             end_parking_time,
 | 
				
			||||||
                                             &price))
 | 
					//                                             &price))
 | 
				
			||||||
        {
 | 
					//        {
 | 
				
			||||||
            qDebug() << "GetCostFromDuration() => price=" << price.netto;
 | 
					//            qDebug() << "GetCostFromDuration() => price=" << price.netto;
 | 
				
			||||||
        }
 | 
					//        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        QString duration;
 | 
					//        QString duration;
 | 
				
			||||||
        if(compute_duration_for_parking_ticket(tariff,start_parking_time,3090,duration))
 | 
					//        if(compute_duration_for_parking_ticket(tariff,start_parking_time,1650,duration))
 | 
				
			||||||
        {
 | 
					//        {
 | 
				
			||||||
            qDebug() << "GetDurationFromCost() => duration=" << duration;
 | 
					//            qDebug() << "GetDurationFromCost() => duration=" << duration;
 | 
				
			||||||
        }
 | 
					//        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Daily ticket
 | 
					        // Daily ticket
 | 
				
			||||||
        compute_duration_for_daily_ticket(tariff,start.toString(Qt::ISODate),3);
 | 
					//        compute_duration_for_daily_ticket(tariff,start.toString(Qt::ISODate),3);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            compute_duration_for_24hour_daily_ticket(tariff,start.toString(Qt::ISODate),3);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //Configuration* cfg, QString start_datetime, uint8_t payment_option, bool carry_over
 | 
					        //Configuration* cfg, QString start_datetime, uint8_t payment_option, bool carry_over
 | 
				
			||||||
        //        // tests
 | 
					        //        // tests
 | 
				
			||||||
 
 | 
				
			|||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
		Reference in New Issue
	
	Block a user