Skip to content

Instantly share code, notes, and snippets.

@jerstlouis
Created September 26, 2014 23:39
Show Gist options
  • Select an option

  • Save jerstlouis/c0cbfe16b341b1a09d02 to your computer and use it in GitHub Desktop.

Select an option

Save jerstlouis/c0cbfe16b341b1a09d02 to your computer and use it in GitHub Desktop.
RowTaskTimeEntries rOver { query = "SELECT TaskTimeEntries.ROWID, TaskTimeEntries.*, Tasks.ROWID FROM TaskTimeEntries LEFT OUTER JOIN Tasks ON TaskTimeEntries.Task = Tasks.ROWID WHERE "
"`Assigned to` = ? AND Date = ? AND `Start Time` < ? AND `End Time` > ? AND TaskTimeEntries.ROWID != ?" };
int start = r.startTime, end = r.endTime;
int e1 = (start / 100) * 4 + (start % 100) / 15;
int e2 = (end / 100) * 4 + (end % 100) / 15;
int overlaps[96];
int e;
bool gotOverlaps = false;
int nOverlaps = 0;
rOver.BindQueryData(3, dbfield("TaskTimeEntries", startTime), end);
rOver.BindQueryData(4, dbfield("TaskTimeEntries", endTime), start);
rOver.BindQueryData(5, dbfield("TaskTimeEntries", id), tte);
while(rOver.Next())
{
int tStart = Max(start, rOver.startTime);
int tEnd = Min(end, rOver.endTime);
int te1 = (tStart / 100) * 4 + (tStart % 100) / 15;
int te2 = (tEnd / 100) * 4 + (tEnd % 100) / 15;
if(!gotOverlaps)
{
memset(overlaps, 0, sizeof(overlaps));
gotOverlaps = true;
}
for(e = te1; e < te2; e++)
overlaps[e]++;
}
if(gotOverlaps)
{
hours = 0;
for(e = e1; e < e2; e++)
{
hours += 0.25 / (overlaps[e] + 1);
if(overlaps[e])
nOverlaps++;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment