1
+ using Microsoft . AspNetCore . Mvc ;
2
+ using System . Diagnostics ;
3
+ using eAndon_MVC . Models ;
4
+ using Microsoft . EntityFrameworkCore ;
5
+
6
+
7
+ namespace eAndon_MVC . Controllers
8
+ {
9
+
10
+ public class HomeController : Controller
11
+ {
12
+
13
+ private readonly MyDbContext _db ;
14
+
15
+ public HomeController ( MyDbContext db )
16
+ {
17
+ _db = db ;
18
+ }
19
+
20
+ public IActionResult Index ( )
21
+ {
22
+ var workcenters = _db . WorkcenterList ? . OrderBy ( w => w . WorkcenterRow ) . ToList ( ) ;
23
+ return View ( workcenters ) ;
24
+ }
25
+
26
+ public IActionResult Overview ( )
27
+ {
28
+ var currentOverview = _db . WorkcenterList ? . OrderBy ( w => w . WorkcenterRow ) . ToList ( ) ;
29
+ var currentOverviewModel = new List < AndonTerminalModel > ( ) ;
30
+
31
+ foreach ( var workcenter in currentOverview )
32
+ {
33
+ var statusDefinitions = _db . StatusDefinition . ToList ( ) ;
34
+
35
+ var statusValues = _db . WorkcenterList
36
+ . Where ( w => w . WorkcenterID == workcenter . WorkcenterID )
37
+ . Select ( w => new List < string > {
38
+ statusDefinitions [ 0 ] . StatusEnabled == true ? w . Status1 : "" ,
39
+ statusDefinitions [ 1 ] . StatusEnabled == true ? w . Status2 : "" ,
40
+ statusDefinitions [ 2 ] . StatusEnabled == true ? w . Status3 : "" ,
41
+ statusDefinitions [ 3 ] . StatusEnabled == true ? w . Status4 : "" ,
42
+ statusDefinitions [ 4 ] . StatusEnabled == true ? w . Status5 : "" } )
43
+ . FirstOrDefault ( ) ;
44
+
45
+ // Create an instance of the custom model and populate it with the workcenter information and the status values
46
+ var workcenterModel = new AndonTerminalModel
47
+ {
48
+ WorkcenterID = workcenter . WorkcenterID ,
49
+ WorkcenterName = workcenter . WorkcenterName ,
50
+ StatusDefinitions = statusDefinitions ,
51
+ StatusValues = statusValues
52
+ } ;
53
+ currentOverviewModel . Add ( workcenterModel ) ;
54
+ }
55
+
56
+ return View ( currentOverviewModel ) ;
57
+ }
58
+
59
+
60
+ public IActionResult AndonTerminal ( string workcenterID , string workcenterName )
61
+ {
62
+
63
+ var statusDefinitions = _db . StatusDefinition . ToList ( ) ;
64
+ // Retrieve the status values for the workcenter from the database
65
+ var statusValues = _db . WorkcenterList
66
+ . Where ( w => w . WorkcenterID == workcenterID )
67
+ . Select ( w => new List < string > { statusDefinitions [ 0 ] . StatusEnabled == true ? w . Status1 : "" ,
68
+ statusDefinitions [ 1 ] . StatusEnabled == true ? w . Status2 : "" ,
69
+ statusDefinitions [ 2 ] . StatusEnabled == true ? w . Status3 : "" ,
70
+ statusDefinitions [ 3 ] . StatusEnabled == true ? w . Status4 : "" ,
71
+ statusDefinitions [ 4 ] . StatusEnabled == true ? w . Status5 : "" } )
72
+ . FirstOrDefault ( ) ;
73
+
74
+ // Create an instance of the custom model and populate it with the workcenter information and the status values
75
+ var model = new AndonTerminalModel
76
+ {
77
+ WorkcenterID = workcenterID ,
78
+ WorkcenterName = workcenterName ,
79
+ StatusDefinitions = statusDefinitions ,
80
+ StatusValues = statusValues
81
+ } ;
82
+
83
+ return View ( model ) ;
84
+
85
+ }
86
+
87
+ public IActionResult UpdateStatus ( string workcenterID , int statusIndex )
88
+ {
89
+ var workcenter = _db . WorkcenterList . FirstOrDefault ( w => w . WorkcenterID == workcenterID ) ;
90
+
91
+ var statusProperty = typeof ( Workcenter ) . GetProperties ( ) . ElementAt ( statusIndex + 3 ) ; // +3 because Status1 to Status5 are properties 3 to 7
92
+ var currentStatus = ( string ) statusProperty . GetValue ( workcenter ) ;
93
+ var newStatus = currentStatus == "green" ? "red" : "green" ;
94
+ statusProperty . SetValue ( workcenter , newStatus ) ;
95
+
96
+ var logEntry = new WorkcenterStatusLog
97
+ {
98
+ WorkcenterID = workcenterID ,
99
+ StatusIndex = statusIndex ,
100
+ OldStatus = currentStatus ,
101
+ NewStatus = newStatus ,
102
+ ChangeDateTime = DateTime . Now
103
+ } ;
104
+
105
+ _db . WorkcenterStatusLog . Add ( logEntry ) ;
106
+ _db . SaveChanges ( ) ;
107
+
108
+ return Content ( newStatus ) ;
109
+ }
110
+
111
+ public IActionResult Log ( DateTime ? startDate , DateTime ? endDate , string workcenterID )
112
+ {
113
+ var logs = _db . WorkcenterStatusLog . AsQueryable ( ) ;
114
+
115
+ if ( startDate != null )
116
+ {
117
+ logs = logs . Where ( l => l . ChangeDateTime >= startDate ) ;
118
+ }
119
+
120
+ if ( endDate != null )
121
+ {
122
+ logs = logs . Where ( l => l . ChangeDateTime <= endDate ) ;
123
+ }
124
+
125
+ if ( ! string . IsNullOrEmpty ( workcenterID ) )
126
+ {
127
+ logs = logs . Where ( l => l . WorkcenterID == workcenterID ) ;
128
+ }
129
+
130
+ ViewBag . Workcenters = _db . WorkcenterList . Select ( w => w . WorkcenterID ) . Distinct ( ) . ToList ( ) ;
131
+ ViewBag . StatusDefinitions = _db . StatusDefinition . ToList ( ) ;
132
+
133
+ return View ( logs . ToList ( ) ) ;
134
+ }
135
+
136
+
137
+ [ ResponseCache ( Duration = 0 , Location = ResponseCacheLocation . None , NoStore = true ) ]
138
+ public IActionResult Error ( )
139
+ {
140
+ return View ( new ErrorViewModel { RequestId = Activity . Current ? . Id ?? HttpContext . TraceIdentifier } ) ;
141
+ }
142
+ }
143
+ }
0 commit comments