1
+ // Remember to use full name because adding new using directives change line numbers
2
+ using System . Linq ;
3
+
4
+ namespace Coverlet . Core . Samples . Tests
5
+ {
6
+
7
+ public class ParentTask_Issue809
8
+ {
9
+ public int Parent_ID { get ; set ; }
10
+ public int Parent_Task { get ; set ; }
11
+ public string ParentTaskDescription { get ; set ; }
12
+ public System . Collections . Generic . List < Tasks_Issue809 > Tasks { get ; set ; }
13
+ }
14
+
15
+ public class Tasks_Issue809
16
+ {
17
+ public int TaskId { get ; set ; }
18
+ public string TaskDeatails { get ; set ; }
19
+ public System . DateTime StartDate { get ; set ; }
20
+ public System . DateTime EndDate { get ; set ; }
21
+ public int ParentTaskId { get ; set ; }
22
+ public int Priortiy { get ; set ; }
23
+ public int Status { get ; set ; }
24
+
25
+ public ParentTask_Issue809 ParentTask { get ; set ; }
26
+ }
27
+
28
+ [ System . Diagnostics . CodeAnalysis . ExcludeFromCodeCoverage ]
29
+ public class TaskContext_Issue809
30
+ {
31
+ public virtual System . Collections . Generic . List < ParentTask_Issue809 > ParentTasks { get ; set ; }
32
+ public virtual System . Collections . Generic . List < Tasks_Issue809 > Tasks { get ; set ; }
33
+
34
+ internal System . Threading . Tasks . Task < int > SaveChangesAsync ( )
35
+ {
36
+ throw new System . NotImplementedException ( ) ;
37
+ }
38
+
39
+ internal void Update < T > ( T tasks )
40
+ {
41
+ throw new System . NotImplementedException ( ) ;
42
+ }
43
+ }
44
+
45
+ public class SearchMsg_Issue809
46
+ {
47
+ public int TaskId { get ; set ; } = - 1 ;
48
+ public string TaskDescription { get ; set ; }
49
+ public int ParentTaskId { get ; set ; } = - 1 ;
50
+ public int PriorityFrom { get ; set ; } = - 1 ;
51
+ public int PriorityTo { get ; set ; } = - 1 ;
52
+ public System . DateTime FromDate { get ; set ; }
53
+ public System . DateTime ToDate { get ; set ; }
54
+ }
55
+
56
+ public class TaskRepo_Issue809
57
+ {
58
+ private readonly TaskContext_Issue809 taskContext = new TaskContext_Issue809 ( ) ;
59
+
60
+ public System . Collections . Generic . List < Tasks_Issue809 > GetTaskForAllCriteria ( SearchMsg_Issue809 searchMsg )
61
+ {
62
+ var criteriaPredicate = LinqKit . PredicateBuilder . New < Tasks_Issue809 > ( true ) ;
63
+ if ( searchMsg . TaskId > 0 )
64
+ criteriaPredicate = criteriaPredicate . And ( tsk => tsk . TaskId == searchMsg . TaskId ) ;
65
+ if ( searchMsg . ParentTaskId > 0 )
66
+ {
67
+ var parentTask = taskContext . ParentTasks . FirstOrDefault (
68
+ partask => partask . Parent_Task == searchMsg . ParentTaskId ) ;
69
+ var parentId = ( parentTask != default ) ? parentTask . Parent_ID : 0 ;
70
+
71
+ criteriaPredicate = criteriaPredicate . And ( tsk => tsk . ParentTaskId == parentId ) ;
72
+ }
73
+
74
+ if ( searchMsg . PriorityFrom > 0 )
75
+ criteriaPredicate = criteriaPredicate . Or ( tsk => tsk . Priortiy >= searchMsg . PriorityFrom ) ;
76
+ if ( searchMsg . PriorityTo > 0 )
77
+ criteriaPredicate = criteriaPredicate . Or ( tsk => tsk . Priortiy <= searchMsg . PriorityTo ) ;
78
+ if ( searchMsg . FromDate > System . DateTime . MinValue )
79
+ criteriaPredicate = criteriaPredicate . And ( tsk => tsk . StartDate == searchMsg . FromDate ) ;
80
+ if ( searchMsg . ToDate > System . DateTime . MinValue )
81
+ criteriaPredicate = criteriaPredicate . And ( tsk => tsk . EndDate == searchMsg . ToDate ) ;
82
+ if ( ! string . IsNullOrWhiteSpace ( searchMsg . TaskDescription ) )
83
+ criteriaPredicate = criteriaPredicate . And ( tsk =>
84
+ tsk . TaskDeatails . CompareTo ( searchMsg . TaskDescription ) == 0 ) ;
85
+
86
+ var anyTaskQuery = from taskEntity in taskContext . Tasks . Where ( criteriaPredicate . Compile ( ) )
87
+ select taskEntity ;
88
+
89
+ var tasks = anyTaskQuery . ToList ( ) ;
90
+ tasks . ForEach ( task =>
91
+ {
92
+ if ( task . ParentTaskId > 0 )
93
+ {
94
+ task . ParentTask = taskContext . ParentTasks . FirstOrDefault ( ) ;
95
+
96
+ }
97
+ } ) ;
98
+
99
+ return tasks ;
100
+
101
+ }
102
+
103
+ public System . Collections . Generic . List < Tasks_Issue809 > GetTaskForAnyCriteria ( SearchMsg_Issue809 searchMsg )
104
+ {
105
+ var criteriaPredicate = LinqKit . PredicateBuilder . New < Tasks_Issue809 > ( false ) ;
106
+ if ( searchMsg . TaskId > 0 )
107
+ criteriaPredicate = criteriaPredicate . Or ( tsk => tsk . TaskId == searchMsg . TaskId ) ;
108
+ if ( ! string . IsNullOrWhiteSpace ( searchMsg . TaskDescription ) )
109
+ criteriaPredicate = criteriaPredicate . Or ( tsk =>
110
+ tsk . TaskDeatails . CompareTo ( searchMsg . TaskDescription ) == 0 ) ;
111
+ if ( searchMsg . ParentTaskId > 0 )
112
+ {
113
+ var parentTask = taskContext . ParentTasks . FirstOrDefault (
114
+ partask => partask . Parent_Task == searchMsg . ParentTaskId ) ;
115
+ var parentId = ( parentTask != default ) ? parentTask . Parent_ID : 0 ;
116
+
117
+ criteriaPredicate = criteriaPredicate . Or ( tsk => tsk . ParentTaskId == parentId ) ;
118
+ }
119
+
120
+ if ( searchMsg . PriorityFrom > 0 )
121
+ criteriaPredicate = criteriaPredicate . Or ( tsk => tsk . Priortiy >= searchMsg . PriorityFrom ) ;
122
+ if ( searchMsg . PriorityTo > 0 )
123
+ criteriaPredicate = criteriaPredicate . Or ( tsk => tsk . Priortiy <= searchMsg . PriorityTo ) ;
124
+ if ( searchMsg . FromDate > System . DateTime . MinValue )
125
+ criteriaPredicate = criteriaPredicate . Or ( tsk => tsk . StartDate == searchMsg . FromDate ) ;
126
+ if ( searchMsg . ToDate > System . DateTime . MinValue )
127
+ criteriaPredicate = criteriaPredicate . Or ( tsk => tsk . EndDate == searchMsg . ToDate ) ;
128
+ var anyTaskQuery = from taskEntity in taskContext . Tasks . Where ( criteriaPredicate . Compile ( ) )
129
+ select taskEntity ;
130
+
131
+ var tasks = anyTaskQuery . ToList ( ) ;
132
+ tasks . ForEach ( task =>
133
+ {
134
+ if ( task . ParentTaskId > 0 )
135
+ {
136
+ task . ParentTask = taskContext . ParentTasks . FirstOrDefault ( ) ;
137
+ }
138
+ } ) ;
139
+
140
+ return tasks ;
141
+ }
142
+ public async System . Threading . Tasks . Task < bool > AddTask ( Tasks_Issue809 tasks )
143
+ {
144
+ _ = await manageParentTask ( tasks ) ;
145
+ taskContext . Tasks . Add ( tasks ) ;
146
+ var rowsAffected = await taskContext . SaveChangesAsync ( ) ;
147
+ return ( rowsAffected > 0 ) ? true : false ;
148
+
149
+ }
150
+
151
+ [ System . Diagnostics . CodeAnalysis . ExcludeFromCodeCoverage ]
152
+ public async System . Threading . Tasks . Task < bool > EditTask ( Tasks_Issue809 tasks , int val )
153
+ {
154
+ if ( val == 10 )
155
+ {
156
+ return true ;
157
+ }
158
+ else
159
+ {
160
+ if ( ( tasks . ParentTask != default ) && ( tasks . ParentTask . Parent_Task == 0 ) )
161
+ tasks . ParentTask = null ;
162
+
163
+ var oldTaskQuery = from taskEntity in taskContext . Tasks . Where ( tsk => tsk . TaskId == tasks . TaskId )
164
+ from parTaskEntity in taskContext . ParentTasks . Where ( partask =>
165
+ partask . Parent_ID == taskEntity . ParentTaskId ) . DefaultIfEmpty ( )
166
+ select new { taskEntity , parTaskEntity } ;
167
+ var oldTaskValueObj = oldTaskQuery . FirstOrDefault ( ) ;
168
+ var oldTask = oldTaskValueObj . taskEntity ;
169
+ if ( oldTaskValueObj . parTaskEntity != default )
170
+ {
171
+ oldTask . ParentTask = new ParentTask_Issue809
172
+ {
173
+ Parent_ID = oldTaskValueObj . parTaskEntity . Parent_ID ,
174
+ ParentTaskDescription = oldTaskValueObj . parTaskEntity . ParentTaskDescription ,
175
+ Parent_Task = oldTaskValueObj . parTaskEntity . Parent_Task
176
+ } ;
177
+ }
178
+
179
+
180
+ if ( oldTask == default )
181
+ throw new System . ApplicationException ( "Task not found" ) ;
182
+ if ( ( ( oldTask . ParentTask != null ) && ( oldTask . ParentTask . Parent_ID != tasks . ParentTaskId ) ) ||
183
+ ( ( oldTask . ParentTask == default ) && ( tasks . ParentTask != default ) && ( tasks . ParentTask . Parent_Task > 0 ) ) )
184
+ _ = await manageParentTask ( tasks ) ;
185
+
186
+
187
+ taskContext . Update < Tasks_Issue809 > ( tasks ) ;
188
+ var rowsAffected = await taskContext . SaveChangesAsync ( ) ;
189
+
190
+ bool combinedResult = ( rowsAffected > 0 ) ? true : false ;
191
+ bool parentUpdateResult = await UpdateParentTakDetails ( tasks ) ;
192
+ if ( ( combinedResult ) & & ( parentUpdateResult ) )
193
+ return true ;
194
+ else
195
+ return false ;
196
+ }
197
+ }
198
+
199
+ private async System . Threading . Tasks . Task < bool > UpdateParentTakDetails ( Tasks_Issue809 task )
200
+ {
201
+ var parentTask = taskContext . ParentTasks . FirstOrDefault ( parTsk =>
202
+ parTsk . Parent_Task == task . ParentTaskId ) ;
203
+ if ( ( parentTask != default ) &&
204
+ ( parentTask . ParentTaskDescription . CompareTo ( task . TaskDeatails ) != 0 ) )
205
+ {
206
+ parentTask . ParentTaskDescription = task . TaskDeatails ;
207
+ taskContext . Update ( parentTask ) ;
208
+ var recordsAffected = await taskContext . SaveChangesAsync ( ) ;
209
+ return ( recordsAffected > 0 ) ? true : false ;
210
+ }
211
+ return true ;
212
+
213
+ }
214
+
215
+ private async System . Threading . Tasks . Task < Tasks_Issue809 > manageParentTask ( Tasks_Issue809 task )
216
+ {
217
+
218
+ if ( ( task . ParentTask != null ) && ( task . ParentTask . Parent_Task > 0 ) )
219
+ {
220
+ ParentTask_Issue809 parentTask = taskContext . ParentTasks . FirstOrDefault ( parTsk =>
221
+ parTsk . Parent_Task == task . ParentTaskId ) ;
222
+ if ( parentTask == default )
223
+ {
224
+ var parTaskFromTaskEntity = taskContext . Tasks
225
+ . FirstOrDefault ( tsk => tsk . TaskId == task . ParentTaskId ) ;
226
+ parentTask = new ParentTask_Issue809
227
+ {
228
+ Parent_Task = parTaskFromTaskEntity . TaskId ,
229
+ ParentTaskDescription = parTaskFromTaskEntity . TaskDeatails
230
+ } ;
231
+ taskContext . ParentTasks . Add ( parentTask ) ;
232
+ await taskContext . SaveChangesAsync ( ) ;
233
+
234
+ }
235
+ else
236
+ {
237
+ taskContext . Update ( parentTask ) ;
238
+ await taskContext . SaveChangesAsync ( ) ;
239
+
240
+ }
241
+
242
+ task . ParentTaskId = parentTask . Parent_ID ;
243
+ task . ParentTask = parentTask ;
244
+ }
245
+ else
246
+ task . ParentTask = null ;
247
+
248
+ return task ;
249
+ }
250
+
251
+ public System . Threading . Tasks . Task < System . Collections . Generic . List < ParentTask_Issue809 > > GetAllParentTasks ( )
252
+ {
253
+ return System . Threading . Tasks . Task . FromResult ( taskContext . ParentTasks . ToList ( ) ) ;
254
+ }
255
+
256
+ [ System . Diagnostics . CodeAnalysis . ExcludeFromCodeCoverage ]
257
+ public System . Collections . Generic . List < Tasks_Issue809 > GetAllTasks ( )
258
+ {
259
+ var taskQuery = from taskEntity in taskContext . Tasks . Where ( tsk => tsk . Status >= 0 )
260
+ from parTaskEntity in taskContext . ParentTasks . Where ( partask =>
261
+ partask . Parent_ID == taskEntity . ParentTaskId ) . DefaultIfEmpty ( )
262
+ select new { taskEntity , parTaskEntity } ;
263
+ var taskValueObj = taskQuery . ToList ( ) ;
264
+ var tasks = taskValueObj . Select ( valueObj =>
265
+ {
266
+ if ( valueObj . parTaskEntity != null )
267
+ {
268
+ valueObj . taskEntity . ParentTask = valueObj . parTaskEntity ;
269
+ }
270
+ return valueObj . taskEntity ;
271
+ } ) . ToList ( ) ;
272
+ return tasks ;
273
+ }
274
+ }
275
+ }
0 commit comments