-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtaxiorder.h
206 lines (153 loc) · 5.35 KB
/
taxiorder.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
#ifndef TAXIORDER_H
#define TAXIORDER_H
#include <QtCore>
#include "hello.pb.h"
#include "qgeocoordinate.h"
#define NO_ORDER_ID -1
class ITaxiOrder : public QObject
{
Q_OBJECT
public:
ITaxiOrder(int _order_id, TaxiRatePeriod _taxiRate, float _parkingCost, int _parkingId, QObject *parent);
~ITaxiOrder();
enum {
NO_STATUS = 0,
SUCCESS = 1,
ABORT_TIMEOUT = 2,
ABORT_DISPATCHER = 3,
NOT_PAY = 4,
NOT_EXIT = 5,
NOT_TO_ME = 6,
EMPTY_TRIP = 7
};
void setRegionId(int _region_id);
int getRegionId();
int getOrderId();
void setOrderId(int order_id);
int calculateSum();
TaxiRatePeriod orderTaxiRate() { return taxiRate; }
void setIsTalon(bool talon) { _is_talon = talon; }
bool getIsTalon() { return _is_talon; }
void setBonus(bool bonus) { _is_bonus = bonus; }
bool getBonus() { return _is_bonus; }
void setBonusSeconds(int seconds) { _bonus_seconds = seconds; }
int getBonusSeconds() { return _bonus_seconds; }
bool isBonusTime() {
// если за город выехали хотя бы один раз, больше бонуса не будет
if (outOfCity)
_bonus_seconds = 0;
return _is_bonus && (_total_travel_time_seconds < _bonus_seconds) && !outOfCity;
}
void setOrderTaxiRate(TaxiRatePeriod _rate) { taxiRate = _rate; }
double totalMileage();
// километражи округляются до сотен метров
float cityMileage() { return (((int)_mileage_city + 50) / 100) / 10.0; }
float outOfCityMileage() { return (((int)_mileage_out_of_city + 50) / 100) / 10.0; }
float cityMileageOverload() { return (((int)_mileage_city_overload + 50) / 100) / 10.0; }
float outOfCityMileageOverload() { return (((int)_mileage_out_of_city_overload + 50) / 100) / 10.0; }
//double car_in = taxiRate.car_in() + parkingCost;
int getCarIn() { return taxiRate.car_in(); }
double moneyCity();
double moneyCityOverload();
int moneyMg();
double moneyMgOverload();
void setOverload(bool overload) { _overload = overload; }
void setClientStop(bool clientStop) { _clientStop = clientStop; }
void setTrainCross(bool on);
float mgRate() { return _out_of_city_rate;}
int getParkingId() { return parkingId; }
float getParkingCost() { return parkingCost; }
// время округляется до минут
int minutesTraincrossStops() {return (seconds_traincross_stops + 30) / 60;}
int secondsTraincrossStops() { return seconds_traincross_stops; }
int minutesClientStops() {
// требование бригадира по поводу бесплатных секунд
int minutes = (seconds_client_stops + 30) / 60;
minutes -= 2; // 2 минуты из насчитанных остановок не идут в расчет
if (minutes < 0)
minutes = 0;
return minutes;
}
int secondsClientStops() { return seconds_client_stops; }
int minutesStops() { return (seconds_stops + 30) / 60; }
int secondsStops() { return seconds_stops; }
int minutesTotal() { return (_total_travel_time_seconds + 30) / 60; }
int secondsTotal() { return _total_travel_time_seconds; }
int minutesMoving() { return (seconds_moving + 30) / 60; }
int secondsMoving() { return seconds_moving; }
bool isClientStop() { return _clientStop; }
bool isTrainCross() { return _trainCross; }
bool isStarted() { return started; }
QString address() { return _address; }
void setAddress(QString address) { _address = address; }
void startTotalTime() { _totalTimeStarted = true; }
signals:
void paymentChanged(int);
void regionChanged(int regionId);
void newMileage(float mileage);
void newTimeMovement(int seconds);
void newTimeStops(int seconds);
void newTimeClientStops(int seconds);
void newTimeTotal(int seconds);
void movementStartFiltered(bool);
void bonusRide(bool isBonus);
public slots:
void recalcSum();
void newPosition(QGeoCoordinate);
void startOrder();
void stopOrder();
void measureTimes();
void movementStart(int startStop);
void setOutOfCity(bool _outOfCity) {
outOfCity = _outOfCity;
}
void setMg(float out_of_city_rate)
{
_out_of_city_rate = out_of_city_rate;
}
private:
// IMPORTANT ORDER VARIABLES (USED FOR MONEY COMPUATION)
TaxiRatePeriod taxiRate;
bool _is_talon;
bool _is_bonus;
int _bonus_seconds;
QString _address;
// стоимость километра в межгороде
float _out_of_city_rate;
// meters in da city
float _mileage_city;
// meters out of city
float _mileage_out_of_city;
float _mileage_city_overload;
float _mileage_out_of_city_overload;
// seconds, общее время поездки
int _total_travel_time_seconds;
// наш id для базы
int _order_id;
// куда едем, id
int _destination_region_id;
// true -- идёт счёт, false -- не идёт
bool started;
// общее время в движении
int seconds_moving;
// время в пробках
int seconds_stops;
// остановка по просьбе водителей
int seconds_traincross_stops;
int seconds_client_stops;
float parkingCost;
int parkingId;
// END IMPORTANT ORDER VARIABLES
QString addressText;
QTimer *paymentTimer;
QGeoCoordinate currentPosition;
bool gotPosition;
int current_stop_seconds;
bool outOfCity;
bool movementStarted;
bool _overload;
bool _clientStop;
bool _trainCross;
bool _totalTimeStarted;
};
#endif // TAXIORDER_H