aboutsummaryrefslogtreecommitdiff
path: root/src/time.cpp
diff options
context:
space:
mode:
authorSan Jacobs2022-08-04 12:13:55 +0200
committerSan Jacobs2022-08-04 12:13:55 +0200
commita38359917d770156d8a5d5e8123074c54c8a0ab7 (patch)
tree7ca14a712bdef863fd77e638809557e2f5c875a1 /src/time.cpp
parent4990f42668d68b1311f97bcd123a43086f382d28 (diff)
downloadsatscalc-a38359917d770156d8a5d5e8123074c54c8a0ab7.tar.gz
satscalc-a38359917d770156d8a5d5e8123074c54c8a0ab7.tar.bz2
satscalc-a38359917d770156d8a5d5e8123074c54c8a0ab7.zip
Added minimum day length and unused overtime rule
Diffstat (limited to 'src/time.cpp')
-rwxr-xr-xsrc/time.cpp22
1 files changed, 15 insertions, 7 deletions
diff --git a/src/time.cpp b/src/time.cpp
index 4f14772..11b4336 100755
--- a/src/time.cpp
+++ b/src/time.cpp
@@ -127,8 +127,16 @@ workday::workday(const moment& previous_wrap,
call = calltime;
wrap = wraptime;
planned_wrap = planned_wraptime;
- timeblock initial_block{call, wrap};
- moment splitpoints[10]{ // --$-- Points where the price may change --$-- //
+ timeblock initial_block{call,
+ std::max(
+ // Paragraph 6.7 says that up to 2 hours of unused warned overtime counts as worktime, though so that at least one hour of the unused overtime is not counted.
+ // (It's unclear if an 8-hour day that ends 3 hours in counts as having 5 hours of unused overtime)
+ std::clamp(planned_wrap-(delta){0, 1, 0}, wraptime, planned_wraptime+(delta){0, 2, 0}),
+ call+(delta){0, 4, 0})};
+ // ^ Minimum 4 hour day ^
+
+ const int sp_length = 10;
+ moment splitpoints[sp_length]{ // --$-- Points where the price may change --$-- //
// NOTE: Maybe this should also contain the valuefactor associated with the split.
// Probably the valuefactor leading up to the splitpoint, not the one after.
@@ -154,12 +162,12 @@ workday::workday(const moment& previous_wrap,
splitpoints[5] = splitpoints[3];
}
- moment splitpoints_sorted[10];
- std::copy(splitpoints, splitpoints+10, splitpoints_sorted);
- std::sort(splitpoints_sorted, splitpoints_sorted + 10);
+ moment splitpoints_sorted[sp_length];
+ std::copy(splitpoints, splitpoints+sp_length, splitpoints_sorted);
+ std::sort(splitpoints_sorted, splitpoints_sorted + sp_length);
int j = 0;
- for(int i = 0; i<10; i++) {
+ for(int i = 0; i<sp_length; i++) {
const moment* each_moment = &splitpoints_sorted[i];
//std::cout << "Splitting: " << timeprint(*each_moment) << "\t\tJ: " << j << "\t\tI: " << i << std::endl;
// If each splitpoint moment is within the workday, and is not equal to the start of the current block
@@ -182,7 +190,7 @@ workday::workday(const moment& previous_wrap,
// TODO: Implement a good system for this fuckin' paragraph:
// A. 50 % tillegg for arbeid inntil 2 timer før, eller inntil 3 timer etter ordinær arbeidstid når arbeidstiden ikke er forskjøvet og overtiden er varslet. Dersom det varsles overtid både før og etter ordinær arbeidstid betales de to første timene med 50 % tillegg og de øvrige med 100 % tillegg.
// TODO: And this paragraph, which seems to say that planned being beyond actual wrap is a relevant case
- // Varslet overtid som ikke benyttes honoreres med inntil to timer etter de vanlige overtidssatser, dog slik at én time av den ubenyttede overtiden ikke honoreres .
+ // Varslet overtid som ikke benyttes honoreres med inntil to timer etter de vanlige overtidssatser, dog slik at én time av den ubenyttede overtiden ikke honoreres.
// TODO: Add reasons for the upped valuefactors.
for(int ii=0; ii < total_timeblocks; ii++){