00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef OVERTIME_H
00011 #define OVERTIME_H OVERTIME_H
00012 #include "Activity.h"
00013 #include "typedefs.h"
00014 int fine(int overtime){
00015 if(overtime) return (overtime / 30 + 1) * 30;
00016 return 0;
00017 }
00018
00019 void checkDayDrivingTime(DailyActivity& a){
00020 typedef std::vector<Activity> subray;
00021 typedef subray::const_iterator subiter;
00022 int sincelastbreak = 0;
00023 int overtime = 0;
00024 bool had15minbreak = false;
00025 for(subiter i = a.driver.begin(); i < a.driver.end(); ++i){
00026 const int& d = i->duration;
00027 if(i->activity == Activity::Driving){
00028 sincelastbreak += d;
00029 }
00030 if(i->activity == Activity::Break && d >= 15){
00031 if(d < 30) had15minbreak = true;
00032 else if(d >= 30){
00033 if(had15minbreak || d >= 45){
00034 if(sincelastbreak > 270) overtime += sincelastbreak - 270;
00035 sincelastbreak = 0;
00036 had15minbreak = false;
00037 }
00038 else had15minbreak = true;
00039 }
00040 }
00041 }
00042 if(sincelastbreak > 270) overtime += sincelastbreak - 270;
00043 a.overtime = std::max(overtime, a.driventime - 600);
00044 a.fine = fine(a.overtime);
00045 a.overtimeReason = "Daily driving time";
00046 }
00047
00048
00049 #endif