Rabih Nasr

Rabih Nasr

  • NA
  • 74
  • 946

create an automatic week subject scheduler?

Jan 22 2019 4:12 AM
  1. USE [DB_SchoolManager]  
  2. GO  
  3. /****** Object: StoredProcedure [dbo].[Sched] Script Date: 1/22/2019 12:02:03 PM ******/  
  4. SET ANSI_NULLS ON  
  5. GO  
  6. SET QUOTED_IDENTIFIER ON  
  7. GO  
  8. ALTER procedure [dbo].[Sched]  
  9. AS  
  10. Begin  
  11. Delete from tbl_week_sched  
  12. Declare @classid int  
  13. Set @classid=1  
  14. drop table #temp1  
  15. SELECT asnsub.[sub_id],sub.[sub_name],asnsub.[assign_hours],ws.[week_count]  
  16. into #temp1  
  17. FROM [DB_SchoolManager].[dbo].[tbl_sub_cor_assigns] asnsub  
  18. INNER JOIN [DB_SchoolManager].[dbo].[tbl_subject] sub ON asnsub.[sub_id]=sub.[sub_id]  
  19. INNER JOIN [DB_SchoolManager].[dbo].[tbl_classes] cls ON asnsub.[regcor_id]=cls.[cor_id]  
  20. LEFT JOIN [DB_SchoolManager].[dbo].[tbl_week_session_count] ws ON asnsub.[sub_id]=ws.[sub_id]  
  21. WHERE cls.[class_id]=@classid  
  22. Declare @weekstart date  
  23. Declare @weekend date  
  24. Declare @workdays int  
  25. Set @weekstart='2019-01-20';  
  26. Set @weekend='2019-01-26';  
  27. Set @workdays=0;  
  28. Declare @day1 date  
  29. Declare @day2 date  
  30. Declare @day3 date  
  31. Declare @day4 date  
  32. Declare @day5 date  
  33. Declare @day6 date  
  34. Declare @day7 date  
  35. if (@weekstart Not in (SELECT [dateFROM [tbl_holidaies])) Begin Set @day1=@weekstart; Set @workdays=1 END else Begin Set @day1=null End;  
  36. if ((DATEADD(dd, 1, @weekstart)) Not in (SELECT [dateFROM [tbl_holidaies])) Begin Set @day2=(DATEADD(dd, 1, @weekstart)); Set @workdays=@workdays+1; END else Begin Set @day2=null End;  
  37. if ((DATEADD(dd, 2, @weekstart)) Not in (SELECT [dateFROM [tbl_holidaies])) Begin Set @day3=(DATEADD(dd, 2, @weekstart)); Set @workdays=@workdays+1; END else Begin Set @day3=null End;  
  38. if ((DATEADD(dd, 3, @weekstart)) Not in (SELECT [dateFROM [tbl_holidaies])) Begin Set @day4=(DATEADD(dd, 3, @weekstart)); Set @workdays=@workdays+1; END else Begin Set @day4=null End;  
  39. if ((DATEADD(dd, 4, @weekstart)) Not in (SELECT [dateFROM [tbl_holidaies])) Begin Set @day5=(DATEADD(dd, 4, @weekstart)); Set @workdays=@workdays+1; END else Begin Set @day5=null End;  
  40. if ((DATEADD(dd, 5, @weekstart)) Not in (SELECT [dateFROM [tbl_holidaies])) Begin Set @day6=(DATEADD(dd, 5, @weekstart)); Set @workdays=@workdays+1; END else Begin Set @day6=null End;  
  41. if (@weekend Not in (SELECT [dateFROM [tbl_holidaies])) Begin Set @day7=@weekend; Set @workdays=@workdays+1; END else Begin Set @day7=null End;  
  42. Insert Into tbl_week_sched ([1],[2],[3],[4],[5],[6],[7]) values (@day1,@day2,@day3,@day4,@day5,@day6,@day7)  
  43. Declare @subid int  
  44. Declare @subname nvarchar(50)  
  45. Declare @subcount int  
  46. Declare @count int  
  47. Declare @count2 int  
  48. Declare @sday1 nvarchar(50)  
  49. Declare @sday2 nvarchar(50)  
  50. Declare @sday3 nvarchar(50)  
  51. Declare @sday4 nvarchar(50)  
  52. Declare @sday5 nvarchar(50)  
  53. Declare @sday6 nvarchar(50)  
  54. Declare @sday7 nvarchar(50)  
  55. Set @count =0  
  56. Set @count2=0  
  57. print @workdays  
  58. DECLARE MY_CURSOR CURSOR  
  59. LOCAL STATIC READ_ONLY FORWARD_ONLY  
  60. FOR  
  61. SELECT DISTINCT sub_id  
  62. FROM #temp1  
  63. OPEN MY_CURSOR  
  64. FETCH NEXT FROM MY_CURSOR INTO @subid  
  65. WHILE @@FETCH_STATUS = 0  
  66. BEGIN  
  67. Set @subname=(select sub_name from tbl_subject where sub_id=@subid)  
  68. Set @subcount=(select week_count from tbl_week_session_count where sub_id=@subid)  
  69. if ((Select TOP (1) [1] from tbl_week_sched) IS NOT null)  
  70. Begin  
  71. if (@count2<@workdays)  
  72. Begin  
  73. if (@count<@subcount)  
  74. Begin  
  75. Set @sday1= @subname;  
  76. Set @count=@count+1;  
  77. end  
  78. ELSE  
  79. Begin  
  80. Set @sday1=null  
  81. End  
  82. Set @count2=@count2+1;  
  83. End  
  84. Else  
  85. Begin  
  86. Insert Into tbl_week_sched ([1],[2],[3],[4],[5],[6],[7]) values (@sday1,@sday2,@sday3,@sday4,@sday5,@sday6,@sday7); Set @count2=0; Set @count=0;  
  87. End  
  88. End  
  89. if ((Select TOP (1) [2] from tbl_week_sched) IS NOT null)  
  90. Begin  
  91. if (@count2<@workdays)  
  92. Begin  
  93. if (@count<@subcount)  
  94. Begin  
  95. Set @sday2= @subname;  
  96. Set @count=@count+1;  
  97. end  
  98. ELSE  
  99. Begin  
  100. Set @sday2=null  
  101. End  
  102. Set @count2=@count2+1;  
  103. End  
  104. Else  
  105. Begin  
  106. Insert Into tbl_week_sched ([1],[2],[3],[4],[5],[6],[7]) values (@sday1,@sday2,@sday3,@sday4,@sday5,@sday6,@sday7); Set @count2=0; Set @count=0;  
  107. End  
  108. End  
  109. if ((Select TOP (1) [3] from tbl_week_sched) IS NOT null)  
  110. Begin  
  111. if (@count2<@workdays)  
  112. Begin  
  113. if (@count<@subcount)  
  114. Begin  
  115. Set @sday3= @subname;  
  116. Set @count=@count+1;  
  117. end  
  118. ELSE  
  119. Begin  
  120. Set @sday3=null  
  121. End  
  122. Set @count2=@count2+1;  
  123. End  
  124. Else  
  125. Begin  
  126. Insert Into tbl_week_sched ([1],[2],[3],[4],[5],[6],[7]) values (@sday1,@sday2,@sday3,@sday4,@sday5,@sday6,@sday7); Set @count2=0; Set @count=0;  
  127. End  
  128. End  
  129. if ((Select TOP (1) [4] from tbl_week_sched) IS NOT null)  
  130. Begin  
  131. if (@count2<@workdays)  
  132. Begin  
  133. if (@count<@subcount)  
  134. Begin  
  135. Set @sday4= @subname;  
  136. Set @count=@count+1;  
  137. end  
  138. ELSE  
  139. Begin  
  140. Set @sday4=null  
  141. End  
  142. Set @count2=@count2+1;  
  143. End  
  144. Else  
  145. Begin  
  146. Insert Into tbl_week_sched ([1],[2],[3],[4],[5],[6],[7]) values (@sday1,@sday2,@sday3,@sday4,@sday5,@sday6,@sday7); Set @count2=0; Set @count=0;  
  147. End  
  148. End  
  149. if ((Select TOP (1) [5] from tbl_week_sched) IS NOT null)  
  150. Begin  
  151. if (@count2<@workdays)  
  152. Begin  
  153. if (@count<@subcount)  
  154. Begin  
  155. Set @sday5= @subname;  
  156. Set @count=@count+1;  
  157. end  
  158. ELSE  
  159. Begin  
  160. Set @sday5=null  
  161. End  
  162. Set @count2=@count2+1;  
  163. End  
  164. Else  
  165. Begin  
  166. Insert Into tbl_week_sched ([1],[2],[3],[4],[5],[6],[7]) values (@sday1,@sday2,@sday3,@sday4,@sday5,@sday6,@sday7); Set @count2=0; Set @count=0;  
  167. End  
  168. End  
  169. if ((Select TOP (1) [6] from tbl_week_sched) IS NOT null)  
  170. Begin  
  171. if (@count2<@workdays)  
  172. Begin  
  173. if (@count<@subcount)  
  174. Begin  
  175. Set @sday6= @subname;  
  176. Set @count=@count+1;  
  177. end  
  178. ELSE  
  179. Begin  
  180. Set @sday6=null  
  181. End  
  182. Set @count2=@count2+1;  
  183. End  
  184. Else  
  185. Begin  
  186. Insert Into tbl_week_sched ([1],[2],[3],[4],[5],[6],[7]) values (@sday1,@sday2,@sday3,@sday4,@sday5,@sday6,@sday7); Set @count2=0; Set @count=0;  
  187. End  
  188. End  
  189. if ((Select TOP (1) [7] from tbl_week_sched) IS NOT null)  
  190. Begin  
  191. if (@count2<@workdays)  
  192. Begin  
  193. if (@count<@subcount)  
  194. Begin  
  195. Set @sday7= @subname;  
  196. Set @count=@count+1;  
  197. end  
  198. ELSE  
  199. Begin  
  200. Set @sday7=null  
  201. End  
  202. Set @count2=@count2+1;  
  203. End  
  204. Else  
  205. Begin  
  206. Insert Into tbl_week_sched ([1],[2],[3],[4],[5],[6],[7]) values (@sday1,@sday2,@sday3,@sday4,@sday5,@sday6,@sday7); Set @count2=0; Set @count=0;  
  207. End  
  208. End  
  209. FETCH NEXT FROM MY_CURSOR INTO @subid  
  210. END  
  211. CLOSE MY_CURSOR  
  212. DEALLOCATE MY_CURSOR  
  213. SELECT * FROM [DB_SchoolManager].[dbo].[tbl_week_sched]  
  214. End  
#temp1
 
sub_idsub_nameassign_hoursweek_count
2English1354
1Arabic408
3English2503
4Math504
5History202
6Geography202
7Philosophy202
8Physics402
9Chemistry402
10Biology402
 
But the results 
 
id1234567
11034NULL2019-01-212019-01-222019-01-232019-01-242019-01-25NULL
11035NULLArabicArabicArabicArabicArabicNULL
11036NULLNULLEnglish1English1English1English1NULL
11037NULLMathNULLEnglish2English2English2NULL
11038NULLNULLNULLNULLMathMathNULL
11039NULLGeographyNULLNULLNULLHistoryNULL
11040NULLPhilosophyPhilosophyNULLNULLNULLNULL
11041NULLNULLPhysicsPhysicsNULLNULLNULL
11042NULLNULLNULLChemistryChemistryNULLNULL
 
the problem when the loop reach day 7 and the subject count still not completed it does not create a new line
as you see arabic count is 5 but must add new line below with day 1,2,3 is arabic 

Attachment: WeekSched.rar