Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Stojcheska Teodora
Programming_Project
Commits
182ca5c2
Commit
182ca5c2
authored
Jul 08, 2021
by
Stojcheska Teodora
Browse files
Milestone
parent
21c7b826
Changes
13
Hide whitespace changes
Inline
Side-by-side
.gitignore
View file @
182ca5c2
...
...
@@ -7,8 +7,8 @@
instructions.txt
Properties/
App.config
*.csproj
*.sln
*.bin
# User-specific files
*.rsuser
...
...
Calendar.cs
View file @
182ca5c2
...
...
@@ -5,23 +5,23 @@ using static System.Console;
[
Serializable
]
public
class
Calendar
{
public
List
<
Day
>
d
ays
{
get
;
set
;
}
public
DateTime
c
urrentDate
{
get
;
set
;
}
public
(
int
,
int
)
d
efaultWorkingHoursInterval
{
get
;
set
;
}
public
int
d
efaultWorkingHours
{
get
;
set
;
}
public
List
<
Day
>
D
ays
{
get
;
set
;
}
public
DateTime
C
urrentDate
{
get
;
set
;
}
public
(
int
,
int
)
D
efaultWorkingHoursInterval
{
get
;
set
;
}
public
int
D
efaultWorkingHours
{
get
;
set
;
}
public
delegate
void
ErrorNotify
();
public
Calendar
()
{
this
.
d
ays
=
new
List
<
Day
>();
this
.
c
urrentDate
=
DateTime
.
Now
;
// format dd.mm.yyyy hh:mm:ss
this
.
D
ays
=
new
List
<
Day
>();
this
.
C
urrentDate
=
DateTime
.
Now
;
// format dd.mm.yyyy hh:mm:ss
}
public
Calendar
(
List
<
Day
>
days
)
{
this
.
d
ays
=
days
;
this
.
c
urrentDate
=
DateTime
.
Now
;
// format dd.mm.yyyy hh:mm:ss
this
.
D
ays
=
days
;
this
.
C
urrentDate
=
DateTime
.
Now
;
// format dd.mm.yyyy hh:mm:ss
}
/* ----------------------------- Utilities ------------------------------ */
...
...
@@ -30,13 +30,19 @@ public class Calendar
private
bool
isDateValid
(
DateTime
startingDate
,
DateTime
endDate
)
=>
numberOfDaysInRange
(
startingDate
,
endDate
)
>
0
;
private
bool
shouldAddDay
(
Task
task
)
=>
days
[
days
.
Count
-
1
].
hoursToShift
*
-
1
<
task
.
duration
;
public
static
bool
isDateValid
(
string
date
)
{
DateTime
val
;
return
(
DateTime
.
TryParse
(
date
,
out
val
))
&&
(
numberOfDaysInRange
(
DateTime
.
Now
,
val
)
>
0
)
?
true
:
false
;
}
private
bool
shouldAddDay
(
Task
task
)
=>
Days
[
Days
.
Count
-
1
].
hoursToShift
*
-
1
<
task
.
Duration
;
public
Day
getDayByDate
(
DateTime
date
)
{
foreach
(
Day
day
in
d
ays
)
foreach
(
Day
day
in
D
ays
)
{
if
(
day
.
d
ate
.
Date
==
date
.
Date
)
if
(
day
.
D
ate
.
Date
==
date
.
Date
)
{
return
day
;
}
...
...
@@ -44,66 +50,72 @@ public class Calendar
return
null
;
}
public
Day
findTaskInDay
(
Task
task
)
public
bool
addDaysUpToDate
(
DateTime
date
,
int
duration
)
{
foreach
(
Day
day
in
days
)
int
daysToAdd
;
if
(
Days
.
Count
==
0
)
{
foreach
(
Task
t
in
day
.
tasks
)
{
if
(
t
.
Equals
(
task
))
{
return
day
;
}
}
daysToAdd
=
numberOfDaysInRange
(
date
,
DateTime
.
Now
);
Days
.
Add
(
new
Day
(
DateTime
.
Now
,
new
List
<
Task
>(),
DefaultWorkingHoursInterval
,
DefaultWorkingHours
));
}
return
null
;
}
public
static
bool
isDateValid
(
string
date
)
{
DateTime
val
;
if
(
DateTime
.
TryParse
(
date
,
out
val
))
else
{
if
(
numberOfDaysInRange
(
DateTime
.
Now
,
val
)
>
0
)
daysToAdd
=
numberOfDaysInRange
(
Days
[
Days
.
Count
-
1
].
Date
,
date
)
-
1
;
}
for
(
int
i
=
0
;
i
<
daysToAdd
;
++
i
)
{
if
(
duration
==
0
)
{
return
true
;
break
;
}
Day
newDay
=
new
Day
(
Days
[
Days
.
Count
-
1
].
Date
.
AddDays
(
1
),
new
List
<
Task
>(),
DefaultWorkingHoursInterval
,
DefaultWorkingHours
);
newDay
.
PrevDay
=
Days
[
Days
.
Count
-
1
];
Days
[
Days
.
Count
-
1
].
NextDay
=
newDay
;
Days
.
Add
(
newDay
);
duration
=
duration
>=
newDay
.
WorkingHours
||
duration
<
0
?
(
duration
-
newDay
.
WorkingHours
)
:
0
;
}
return
false
;
return
duration
<=
0
;
}
// TODO: Fix
public
List
<
Day
>
getRangeOfDaysForTask
(
Task
task
)
{
List
<
Day
>
validDays
=
new
List
<
Day
>();
Day
newDay
;
if
(
days
.
Count
==
0
)
// calculate duration
if
(
Days
.
Count
==
0
)
{
newDay
=
new
Day
(
c
urrentDate
,
new
List
<
Task
>(),
d
efaultWorkingHoursInterval
,
d
efaultWorkingHours
);
d
ays
.
Add
(
newDay
);
newDay
=
new
Day
(
C
urrentDate
,
new
List
<
Task
>(),
D
efaultWorkingHoursInterval
,
D
efaultWorkingHours
);
D
ays
.
Add
(
newDay
);
validDays
.
Add
(
newDay
);
return
validDays
;
}
if
(
shouldAddDay
(
task
))
{
newDay
=
new
Day
(
days
[
days
.
Count
-
1
].
date
.
AddDays
(
1
),
new
List
<
Task
>(),
defaultWorkingHoursInterval
,
defaultWorkingHours
);
newDay
.
prevDay
=
days
[
days
.
Count
-
1
];
days
[
days
.
Count
-
1
].
nextDay
=
newDay
;
days
.
Add
(
newDay
);
// TODO: Calculate correctly the task duration left
Day
day
=
Days
[
Days
.
Count
-
1
];
int
durationLeft
=
task
.
Duration
;
while
(
day
.
PrevDay
!=
null
&&
!
day
.
isDayFull
(
0
))
{
durationLeft
+=
day
.
hoursToShift
;
day
=
day
.
PrevDay
;
}
addDaysUpToDate
(
task
.
Deadline
,
durationLeft
);
}
int
numberOfValidDaysInRange
=
numberOfDaysInRange
(
c
urrentDate
,
task
.
d
eadline
);
int
numberOfValidDaysInRange
=
numberOfDaysInRange
(
C
urrentDate
,
task
.
D
eadline
);
// start from current
d
ate
int
startIndex
=
numberOfDaysInRange
(
d
ays
[
0
].
d
ate
,
c
urrentDate
)
-
1
;
// start from current
D
ate
int
startIndex
=
numberOfDaysInRange
(
D
ays
[
0
].
D
ate
,
C
urrentDate
)
-
1
;
for
(
int
i
=
0
;
i
<
numberOfValidDaysInRange
;
++
i
)
{
if
(
days
.
Count
<=
i
)
// TODO: First Condition?
if
(
Days
.
Count
<=
i
||
Days
.
Count
-
1
<
startIndex
+
i
)
{
break
;
}
validDays
.
Add
(
d
ays
[
startIndex
+
i
]);
validDays
.
Add
(
D
ays
[
startIndex
+
i
]);
}
return
validDays
;
...
...
@@ -111,81 +123,53 @@ public class Calendar
public
event
ErrorNotify
ErrorInTaskParameters
;
/* ---------------------------------- Exception Handling ----------------------------------- */
public
void
errorCheck
(
Task
task
,
List
<
Day
>
validDays
,
ref
Day
d
)
{
for
(
int
i
=
0
;
i
<
validDays
.
Count
;
++
i
)
{
if
(!
validDays
[
i
].
isDayFull
(
0
))
{
break
;
}
d
=
validDays
[
i
];
}
int
hours
=
0
;
Day
cur
=
d
;
while
(
cur
!=
null
&&
validDays
.
Contains
(
cur
))
{
hours
+=
cur
.
hoursToShift
*
-
1
;
cur
=
cur
.
nextDay
;
}
if
(
hours
<
task
.
duration
)
{
validDays
[
validDays
.
Count
-
1
].
addTask
(
task
,
validDays
[
validDays
.
Count
-
1
].
tasks
.
Count
);
throw
new
NoSpaceForTaskExeption
(
"There is no space to add the task which needs to be added as the last task in the calendar"
,
d
,
task
,
hours
-
task
.
duration
);
}
}
/* ------------------------------- Add Task --------------------------------- */
public
void
addTask
(
Task
task
)
{
try
{
if
(
task
.
t
ype
==
Type
.
NORMAL
)
if
(
task
.
T
ype
==
Type
.
NORMAL
)
{
_addTask
(
task
);
}
else
if
(
task
.
t
ype
==
Type
.
FIXED
)
else
if
(
task
.
T
ype
==
Type
.
FIXED
)
{
addFixedTask
(
task
);
}
}
catch
(
NoSpaceForTaskExeption
exception
)
{
Day
day
=
getDayByDate
(
task
.
d
eadline
);
Day
day
=
getDayByDate
(
task
.
D
eadline
);
day
.
removeTask
(
task
);
deleteReorderCalendar
(
exception
.
d
ay
.
n
extDay
,
day
.
hoursToShift
*
-
1
,
day
);
deleteReorderCalendar
(
exception
.
D
ay
.
N
extDay
,
day
.
hoursToShift
*
-
1
,
day
);
ErrorInTaskParameters
.
Invoke
();
}
}
public
void
addFixedTask
(
Task
task
)
{
if
(
d
ays
.
Count
==
0
)
if
(
D
ays
.
Count
==
0
)
{
d
ays
.
Add
(
new
Day
(
c
urrentDate
,
new
List
<
Task
>(),
d
efaultWorkingHoursInterval
,
d
efaultWorkingHours
));
D
ays
.
Add
(
new
Day
(
C
urrentDate
,
new
List
<
Task
>(),
D
efaultWorkingHoursInterval
,
D
efaultWorkingHours
));
}
Day
day
;
if
(
numberOfDaysInRange
(
task
.
d
eadline
,
d
ays
[
d
ays
.
Count
-
1
].
d
ate
)
>
0
){
day
=
getDayByDate
(
task
.
d
eadline
);
if
(
numberOfDaysInRange
(
task
.
D
eadline
,
D
ays
[
D
ays
.
Count
-
1
].
D
ate
)
>
0
){
day
=
getDayByDate
(
task
.
D
eadline
);
day
.
addTask
(
task
,
0
);
reorderCalendar
(
day
,
task
.
d
uration
,
true
,
null
);
reorderCalendar
(
day
,
task
.
D
uration
);
}
else
{
while
(
numberOfDaysInRange
(
task
.
d
eadline
,
d
ays
[
d
ays
.
Count
-
1
].
d
ate
)
<=
0
)
while
(
numberOfDaysInRange
(
task
.
D
eadline
,
D
ays
[
D
ays
.
Count
-
1
].
D
ate
)
<=
0
)
{
Day
newDay
=
new
Day
(
d
ays
[
d
ays
.
Count
-
1
].
d
ate
.
AddDays
(
1
),
new
List
<
Task
>(),
d
efaultWorkingHoursInterval
,
d
efaultWorkingHours
);
d
ays
[
d
ays
.
Count
-
1
].
n
extDay
=
newDay
;
newDay
.
p
revDay
=
d
ays
[
d
ays
.
Count
-
1
];
d
ays
.
Add
(
newDay
);
Day
newDay
=
new
Day
(
D
ays
[
D
ays
.
Count
-
1
].
D
ate
.
AddDays
(
1
),
new
List
<
Task
>(),
D
efaultWorkingHoursInterval
,
D
efaultWorkingHours
);
D
ays
[
D
ays
.
Count
-
1
].
N
extDay
=
newDay
;
newDay
.
P
revDay
=
D
ays
[
D
ays
.
Count
-
1
];
D
ays
.
Add
(
newDay
);
}
day
=
getDayByDate
(
task
.
d
eadline
);
day
=
getDayByDate
(
task
.
D
eadline
);
day
.
addTask
(
task
,
0
);
}
}
...
...
@@ -196,77 +180,77 @@ public class Calendar
foreach
(
Day
day
in
validDays
)
{
for
(
int
i
=
0
;
i
<
day
.
t
asks
.
Count
;
++
i
)
for
(
int
i
=
0
;
i
<
day
.
T
asks
.
Count
;
++
i
)
{
if
(
numberOfDaysInRange
(
day
.
t
asks
[
i
].
d
eadline
,
task
.
d
eadline
)
<=
0
&&
day
.
t
asks
[
i
].
t
ype
!=
Type
.
FIXED
)
if
(
numberOfDaysInRange
(
day
.
T
asks
[
i
].
D
eadline
,
task
.
D
eadline
)
<=
0
&&
day
.
T
asks
[
i
].
T
ype
!=
Type
.
FIXED
)
{
day
.
addTask
(
task
,
i
);
if
(
day
.
isDayFull
(
0
))
{
reorderCalendar
(
day
,
day
.
hoursToShift
,
true
,
null
);
reorderCalendar
(
day
,
day
.
hoursToShift
);
}
return
;
}
}
if
(!
day
.
isDayFull
(
0
))
{
day
.
addTask
(
task
,
day
.
Tasks
.
Count
);
if
(
day
.
isDayFull
(
0
))
{
reorderCalendar
(
day
,
day
.
hoursToShift
);
}
return
;
}
}
Day
d
=
validDays
[
0
];
errorCheck
(
task
,
validDays
,
ref
d
);
d
.
addTask
(
task
,
d
.
tasks
.
Count
);
if
(
d
.
isDayFull
(
0
))
{
reorderCalendar
(
d
,
d
.
hoursToShift
,
true
,
null
);
}
}
private
void
reorderCalendar
(
Day
day
,
int
hours
,
bool
next
,
Day
returnPoint
)
private
void
reorderCalendar
(
Day
day
,
int
hours
)
{
Day
dirDay
=
day
.
n
extDay
;
Day
dirDay
=
day
.
N
extDay
;
if
(
dirDay
==
null
||
day
.
hoursToShift
<=
0
)
{
return
;
}
List
<
Task
>
tasks
=
new
List
<
Task
>();
for
(
int
i
=
day
.
t
asks
.
Count
-
1
;
i
>=
0
;
--
i
)
for
(
int
i
=
day
.
T
asks
.
Count
-
1
;
i
>=
0
;
--
i
)
{
if
(
day
.
t
asks
[
i
].
t
ype
!=
Type
.
FIXED
)
if
(
day
.
T
asks
[
i
].
T
ype
!=
Type
.
FIXED
)
{
if
(
hours
==
0
)
{
break
;
}
Task
curTask
=
day
.
t
asks
[
i
];
Task
curTask
=
day
.
T
asks
[
i
];
if
(!
isDateValid
(
dirDay
.
d
ate
,
curTask
.
d
eadline
))
if
(!
isDateValid
(
dirDay
.
D
ate
,
curTask
.
D
eadline
))
{
foreach
(
Task
task
in
tasks
)
{
day
.
addTask
(
task
,
day
.
t
asks
.
Count
);
}
throw
new
NoSpaceForTaskExeption
(
"There is no space to add the
t
ask, error occured during shifting the
t
asks"
,
day
,
curTask
,
hours
);
foreach
(
Task
task
in
tasks
)
{
day
.
addTask
(
task
,
day
.
T
asks
.
Count
);
}
throw
new
NoSpaceForTaskExeption
(
"There is no space to add the
T
ask, error occured during shifting the
T
asks"
,
day
,
curTask
,
hours
);
}
if
(
curTask
.
d
uration
>
hours
)
if
(
curTask
.
D
uration
>
hours
)
{
int
additionalHours
=
0
;
if
(
curTask
.
i
sSplit
)
if
(
curTask
.
I
sSplit
)
{
additionalHours
=
curTask
.
s
plitTaskPtr
.
d
uration
;
dirDay
.
removeTask
(
curTask
.
s
plitTaskPtr
);
curTask
.
mergeTasks
(
curTask
,
curTask
.
s
plitTaskPtr
);
additionalHours
=
curTask
.
S
plitTaskPtr
.
D
uration
;
dirDay
.
removeTask
(
curTask
.
S
plitTaskPtr
);
curTask
.
mergeTasks
(
curTask
,
curTask
.
S
plitTaskPtr
);
}
int
[]
splitHours
=
{
curTask
.
d
uration
-
hours
-
additionalHours
,
hours
+
additionalHours
};
int
[]
splitHours
=
{
curTask
.
D
uration
-
hours
-
additionalHours
,
hours
+
additionalHours
};
curTask
.
splitTask
(
splitHours
,
0
,
curTask
,
day
);
hours
=
0
;
tasks
.
Add
(
curTask
.
s
plitTaskPtr
);
tasks
.
Add
(
curTask
.
S
plitTaskPtr
);
}
else
{
int
curTaskHours
=
curTask
.
d
uration
;
if
(
curTask
.
i
sSplit
)
int
curTaskHours
=
curTask
.
D
uration
;
if
(
curTask
.
I
sSplit
)
{
dirDay
.
removeTask
(
curTask
.
s
plitTaskPtr
);
curTask
.
mergeTasks
(
curTask
,
curTask
.
s
plitTaskPtr
);
dirDay
.
removeTask
(
curTask
.
S
plitTaskPtr
);
curTask
.
mergeTasks
(
curTask
,
curTask
.
S
plitTaskPtr
);
}
else
{
...
...
@@ -281,7 +265,7 @@ public class Calendar
foreach
(
Task
task
in
tasks
)
{
dirDay
.
addTask
(
task
,
0
);
}
reorderCalendar
(
dirDay
,
dirDay
.
hoursToShift
,
next
,
null
);
reorderCalendar
(
dirDay
,
dirDay
.
hoursToShift
);
}
/* ------------------------------- Delete Task ----------------------------------- */
...
...
@@ -289,31 +273,31 @@ public class Calendar
private
void
deleteReorderCalendar
(
Day
day
,
int
hours
,
Day
returnPoint
)
{
int
h
=
hours
;
Day
dirDay
=
day
.
p
revDay
;
Day
dirDay
=
day
.
P
revDay
;
if
(
dirDay
==
null
||
day
.
Equals
(
returnPoint
))
{
return
;
}
List
<
Task
>
tasks
=
new
List
<
Task
>();
for
(
int
i
=
0
;
i
<
day
.
t
asks
.
Count
;
++
i
)
for
(
int
i
=
0
;
i
<
day
.
T
asks
.
Count
;
++
i
)
{
if
(
day
.
t
asks
[
i
].
t
ype
!=
Type
.
FIXED
)
if
(
day
.
T
asks
[
i
].
T
ype
!=
Type
.
FIXED
)
{
if
(
hours
==
0
)
{
break
;
}
Task
curTask
=
day
.
t
asks
[
i
];
Task
curTask
=
day
.
T
asks
[
i
];
if
(
curTask
.
d
uration
>
hours
)
if
(
curTask
.
D
uration
>
hours
)
{
Task
shiftSplitTask
=
new
Task
(
curTask
.
n
ame
,
curTask
.
d
eadline
,
hours
,
curTask
.
t
ype
,
true
);
shiftSplitTask
.
s
plitTaskPtr
=
curTask
;
curTask
.
d
uration
-=
hours
;
Task
shiftSplitTask
=
new
Task
(
curTask
.
N
ame
,
curTask
.
D
eadline
,
hours
,
curTask
.
T
ype
,
true
);
shiftSplitTask
.
S
plitTaskPtr
=
curTask
;
curTask
.
D
uration
-=
hours
;
tasks
.
Add
(
shiftSplitTask
);
hours
=
0
;
}
else
{
int
curTaskHours
=
curTask
.
d
uration
;
int
curTaskHours
=
curTask
.
D
uration
;
tasks
.
Add
(
curTask
);
hours
-=
curTaskHours
;
day
.
removeTask
(
curTask
);
...
...
@@ -322,42 +306,69 @@ public class Calendar
}
}
if
(
dirDay
.
t
asks
.
Count
!=
0
&&
dirDay
.
t
asks
[
dirDay
.
t
asks
.
Count
-
1
].
i
sSplit
)
if
(
dirDay
.
T
asks
.
Count
!=
0
&&
dirDay
.
T
asks
[
dirDay
.
T
asks
.
Count
-
1
].
I
sSplit
&&
tasks
.
Count
>
0
)
{
dirDay
.
t
asks
[
dirDay
.
t
asks
.
Count
-
1
].
i
sSplit
=
tasks
[
0
].
i
sSplit
;
dirDay
.
t
asks
[
dirDay
.
t
asks
.
Count
-
1
].
s
plitTaskPtr
=
tasks
[
0
].
s
plitTaskPtr
;
dirDay
.
t
asks
[
dirDay
.
t
asks
.
Count
-
1
].
d
uration
+=
tasks
[
0
].
d
uration
;
dirDay
.
T
asks
[
dirDay
.
T
asks
.
Count
-
1
].
I
sSplit
=
tasks
[
0
].
I
sSplit
;
dirDay
.
T
asks
[
dirDay
.
T
asks
.
Count
-
1
].
S
plitTaskPtr
=
tasks
[
0
].
S
plitTaskPtr
;
dirDay
.
T
asks
[
dirDay
.
T
asks
.
Count
-
1
].
D
uration
+=
tasks
[
0
].
D
uration
;
tasks
.
RemoveAt
(
0
);
}
for
(
int
i
=
0
;
i
<
tasks
.
Count
;
++
i
)
{
dirDay
.
addTask
(
tasks
[
i
],
dirDay
.
t
asks
.
Count
);
dirDay
.
addTask
(
tasks
[
i
],
dirDay
.
T
asks
.
Count
);
}
deleteReorderCalendar
(
dirDay
,
h
,
returnPoint
);
}
public
void
deleteTask
(
Day
day
,
Task
task
)
public
void
deleteTask
Helper
(
Day
day
,
Task
task
)
{
int
hours
=
0
;
if
(
task
.
isSplit
)
if
(
task
.
IsSplit
)
{
hours
+=
task
.
s
plitTaskPtr
.
d
uration
;
day
.
n
extDay
.
removeTask
(
task
.
s
plitTaskPtr
);
task
.
i
sSplit
=
false
;
deleteReorderCalendar
(
d
ays
[
d
ays
.
Count
-
1
],
task
.
s
plitTaskPtr
.
d
uration
,
day
.
n
extDay
);
hours
+=
task
.
S
plitTaskPtr
.
D
uration
;
day
.
N
extDay
.
removeTask
(
task
.
S
plitTaskPtr
);
task
.
I
sSplit
=
false
;
deleteReorderCalendar
(
D
ays
[
D
ays
.
Count
-
1
],
task
.
S
plitTaskPtr
.
D
uration
,
day
.
N
extDay
);
}
if
(
day
.
p
revDay
!=
null
&&
day
.
p
revDay
.
t
asks
.
Count
!=
0
&&
day
.
p
revDay
.
t
asks
[
day
.
p
revDay
.
t
asks
.
Count
-
1
].
i
sSplit
)
while
(
day
.
P
revDay
!=
null
&&
day
.
P
revDay
.
T
asks
.
Count
!=
0
&&
day
.
P
revDay
.
T
asks
[
day
.
P
revDay
.
T
asks
.
Count
-
1
].
I
sSplit
)
{
hours
+=
day
.
p
revDay
.
t
asks
[
day
.
p
revDay
.
t
asks
.
Count
-
1
].
d
uration
;
deleteTask
(
day
.
p
revDay
,
day
.
p
revDay
.
t
asks
[
day
.
p
revDay
.
t
asks
.
Count
-
1
]);
hours
+=
day
.
P
revDay
.
T
asks
[
day
.
P
revDay
.
T
asks
.
Count
-
1
].
D
uration
;
deleteTask
Helper
(
day
.
P
revDay
,
day
.
P
revDay
.
T
asks
[
day
.
P
revDay
.
T
asks
.
Count
-
1
]);
}
hours
+=
task
.
d
uration
;
hours
+=
task
.
D
uration
;
day
.
removeTask
(
task
);
deleteReorderCalendar
(
days
[
days
.
Count
-
1
],
task
.
duration
,
day
);
task
.
duration
=
hours
;
deleteReorderCalendar
(
Days
[
Days
.
Count
-
1
],
task
.
Duration
,
day
);
task
.
Duration
=
hours
;
}
public
void
deleteTask
(
Day
day
,
Task
task
)
{
while
(
task
.
IsSplit
)
{
task
=
task
.
SplitTaskPtr
;
day
=
day
.
NextDay
;
}
deleteTaskHelper
(
day
,
task
);
}
/* --------------------------- Change Working Hours ------------------------------- */
public
void
changeWorkingHours
(
DateTime
date
,
int
previousWorkingHours
)
{
Day
day
=
getDayByDate
(
date
);
if
(
previousWorkingHours
-
day
.
WorkingHours
<
0
)
{
deleteReorderCalendar
(
Days
[
Days
.
Count
-
1
],
Math
.
Abs
(
previousWorkingHours
-
day
.
WorkingHours
),
day
);
}
else
if
(
previousWorkingHours
-
day
.
WorkingHours
>
0
)
{
reorderCalendar
(
day
,
previousWorkingHours
-
day
.
WorkingHours
);
}
}
}
\ No newline at end of file
Controls/DatePicker.cs
View file @
182ca5c2
...
...
@@ -23,14 +23,14 @@ namespace Scheduler.Controls
this
.
year
=
new
Scheduler
.
Controls
.
HintTextBox
();
this
.
SuspendLayout
();
//
//
d
ay
//
D
ay
//
this
.
day
.
ForeColor
=
System
.
Drawing
.
Color
.
DarkGray
;
this
.
day
.
Hint
=
"dd"
;
this
.
day
.
Location
=
new
System
.
Drawing
.
Point
(
6
,
6
);
this
.
day
.
Margin
=
new
System
.
Windows
.
Forms
.
Padding
(
6
,
6
,
6
,
6
);
this
.
day
.
MaxLength
=
2
;
this
.
day
.
Name
=
"
d
ay"
;
this
.
day
.
Name
=
"
D
ay"
;
this
.
day
.
Size
=
new
System
.
Drawing
.
Size
(
43
,
34
);
this
.
day
.
TabIndex
=
0
;
this
.
day
.
Text
=
"dd"
;
...
...
Day.cs
View file @
182ca5c2
...
...
@@ -5,23 +5,23 @@ using static System.Console;
[
Serializable
]
public
class
Day
{
public
DateTime
d
ate
{
get
;
set
;
}
public
List
<
Task
>
t
asks
{
get
;
set
;
}
public
(
int
,
int
)
w
orkingHoursInterval
{
get
;
set
;
}
public
int
w
orkingHours
{
get
;
set
;
}
public
Day
n
extDay
{
get
;
set
;
}
public
Day
p
revDay
{
get
;
set
;
}
public
DateTime
D
ate
{
get
;
set
;
}
public
List
<
Task
>
T
asks
{
get
;
set
;
}
public
(
int
,
int
)
W
orkingHoursInterval
{
get
;
set
;
}
public
int
W
orkingHours
{
get
;
set
;
}
public
Day
N
extDay
{
get
;
set
;
}
public
Day
P
revDay
{
get
;
set
;
}
public
Task
this
[
int
i
]
=>
t
asks
[
i
];
public
Task
this
[
int
i
]
=>
T
asks
[
i
];
public
Day
(
DateTime
date
,
List
<
Task
>
tasks
,
(
int
,
int
)
workingHoursInterval
,
int
workingHours
)
{
this
.
d
ate
=
date
;
this
.
t
asks
=
tasks
;
this
.
w
orkingHoursInterval
=
workingHoursInterval
;
this
.
w
orkingHours
=
workingHours
;
this
.
n
extDay
=
null
;
this
.
p
revDay
=
null
;
this
.
D
ate
=
date
;
this
.
T
asks
=
tasks
;
this
.
W
orkingHoursInterval
=
workingHoursInterval
;
this
.
W
orkingHours
=
workingHours
;
this
.
N
extDay
=
null
;
this
.
P
revDay
=
null
;
}
public
override
bool
Equals
(
Object
obj
)
...
...
@@ -33,65 +33,65 @@ public class Day
else
{
Day
d
=
(
Day
)
obj
;
return
d
.
d
ate
==
d
ate
;
return
d
.
D
ate
==
D
ate
;
}
}
public
override
int
GetHashCode
()
=>
d
ate
.
GetHashCode
();
public
override
int
GetHashCode
()
=>
D
ate
.
GetHashCode
();
public
int
totalHoursTasks
()
{
int
totalHours
=
0
;
foreach
(
Task
task
in
t
asks
)
{
totalHours
+=
task
.
d
uration
;
foreach
(
Task
task
in
T
asks
)
{
totalHours
+=
task
.
D
uration
;
}
return
totalHours
;
}
public
string
getTimeRangeForTask
(
Task
task
)
{
int
hours
=
w
orkingHoursInterval
.
Item1
;
foreach
(
Task
t
in
t
asks
)
int
hours
=
W
orkingHoursInterval
.
Item1
;
foreach
(
Task
t
in
T
asks
)
{
if
(
t
.
Equals
(
task
))