'p1', models.FloatField(blank=True, null=True)), 113
+                ('p2', models.FloatField(blank=True, null=True)),
114
+                ('p3', models.FloatField(blank=True, null=True)),
115
+                ('p4', models.FloatField(blank=True, null=True)),
116
+                ('p5', models.FloatField(blank=True, null=True)),
117
+                ('p6', models.FloatField(blank=True, null=True)),
118
+                ('p7', models.FloatField(blank=True, null=True)),
119
+                ('p8', models.FloatField(blank=True, null=True)),
120
+                ('p9', models.FloatField(blank=True, null=True)),
121
+                ('p10', models.FloatField(blank=True, null=True)),
122
+                ('created_at', models.DateTimeField(blank=True, null=True)),
123
+                ('updated_at', models.DateTimeField(blank=True, null=True)),
124
+                ('lot_no', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
125
+                ('ndata', models.IntegerField(blank=True, null=True)),
126
+                ('sub_order', models.IntegerField(blank=True, null=True)),
127
+                ('machine_id', models.IntegerField(blank=True, null=True)),
128
+                ('code', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
129
+                ('header', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=10, null=True)),
130
+            ],
131
+            options={
132
+                'db_table': 'Data_131_78079',
133
+                'managed': False,
134
+            },
135
+        ),
136
+        migrations.CreateModel(
137
+            name='Data20082018',
138
+            fields=[
139
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
140
+                ('row_no', models.IntegerField(blank=True, null=True)),
141
+                ('avg', models.FloatField(blank=True, null=True)),
142
+                ('grade', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
143
+                ('rgrade', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
144
+                ('r_type', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
145
+                ('p1', models.FloatField(blank=True, null=True)),
146
+                ('p2', models.FloatField(blank=True, null=True)),
147
+                ('p3', models.FloatField(blank=True, null=True)),
148
+                ('p4', models.FloatField(blank=True, null=True)),
149
+                ('p5', models.FloatField(blank=True, null=True)),
150
+                ('p6', models.FloatField(blank=True, null=True)),
151
+                ('p7', models.FloatField(blank=True, null=True)),
152
+                ('p8', models.FloatField(blank=True, null=True)),
153
+                ('p9', models.FloatField(blank=True, null=True)),
154
+                ('p10', models.FloatField(blank=True, null=True)),
155
+                ('created_at', models.DateTimeField(blank=True, null=True)),
156
+                ('updated_at', models.DateTimeField(blank=True, null=True)),
157
+                ('lot_no', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
158
+                ('ndata', models.IntegerField(blank=True, null=True)),
159
+                ('sub_order', models.IntegerField(blank=True, null=True)),
160
+                ('machine_id', models.IntegerField(blank=True, null=True)),
161
+                ('code', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
162
+                ('header', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=10, null=True)),
163
+            ],
164
+            options={
165
+                'db_table': 'data (2008-2018)',
166
+                'managed': False,
167
+            },
168
+        ),
169
+        migrations.CreateModel(
170
+            name='Data25113027G',
171
+            fields=[
172
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
173
+                ('row_no', models.IntegerField(blank=True, null=True)),
174
+                ('avg', models.FloatField(blank=True, null=True)),
175
+                ('grade', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
176
+                ('rgrade', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
177
+                ('r_type', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
178
+                ('p1', models.FloatField(blank=True, null=True)),
179
+                ('p2', models.FloatField(blank=True, null=True)),
180
+                ('p3', models.FloatField(blank=True, null=True)),
181
+                ('p4', models.FloatField(blank=True, null=True)),
182
+                ('p5', models.FloatField(blank=True, null=True)),
183
+                ('p6', models.FloatField(blank=True, null=True)),
184
+                ('p7', models.FloatField(blank=True, null=True)),
185
+                ('p8', models.FloatField(blank=True, null=True)),
186
+                ('p9', models.FloatField(blank=True, null=True)),
187
+                ('p10', models.FloatField(blank=True, null=True)),
188
+                ('created_at', models.DateTimeField(blank=True, null=True)),
189
+                ('updated_at', models.DateTimeField(blank=True, null=True)),
190
+                ('lot_no', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
191
+                ('ndata', models.IntegerField(blank=True, null=True)),
192
+                ('sub_order', models.IntegerField(blank=True, null=True)),
193
+                ('machine_id', models.IntegerField(blank=True, null=True)),
194
+                ('code', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
195
+                ('header', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=10, null=True)),
196
+            ],
197
+            options={
198
+                'db_table': 'data_251-13027G',
199
+                'managed': False,
200
+            },
201
+        ),
202
+        migrations.CreateModel(
203
+            name='DataMs',
204
+            fields=[
205
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
206
+                ('row_no', models.IntegerField()),
207
+                ('dsize', models.FloatField(blank=True, null=True)),
208
+                ('tsize', models.FloatField(blank=True, null=True)),
209
+                ('hsize', models.FloatField(blank=True, null=True)),
210
+                ('csize', models.FloatField(blank=True, null=True)),
211
+                ('esize', models.FloatField(blank=True, null=True)),
212
+                ('fsize', models.FloatField(blank=True, null=True)),
213
+                ('gsize', models.FloatField(blank=True, null=True)),
214
+                ('psize', models.FloatField(blank=True, null=True)),
215
+                ('wsize', models.FloatField(blank=True, null=True)),
216
+                ('jksize', models.FloatField(blank=True, null=True)),
217
+                ('usize', models.FloatField(blank=True, null=True)),
218
+                ('msize', models.FloatField(blank=True, null=True)),
219
+                ('asize', models.FloatField(blank=True, null=True)),
220
+                ('nsize', models.FloatField(blank=True, null=True)),
221
+                ('jsize', models.FloatField(blank=True, null=True)),
222
+                ('xsize', models.FloatField(blank=True, null=True)),
223
+                ('flatnesssize', models.FloatField(blank=True, null=True)),
224
+                ('ksize', models.FloatField(blank=True, null=True)),
225
+                ('thicknesssize', models.FloatField(blank=True, null=True)),
226
+                ('qsize', models.FloatField(blank=True, null=True)),
227
+                ('ssize', models.FloatField(blank=True, null=True)),
228
+                ('dsizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='dsizeOk', max_length=4, null=True)),
229
+                ('tsizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='tsizeOk', max_length=4, null=True)),
230
+                ('hsizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='hsizeOk', max_length=4, null=True)),
231
+                ('csizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='csizeOk', max_length=4, null=True)),
232
+                ('esizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='esizeOk', max_length=4, null=True)),
233
+                ('fsizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='fsizeOk', max_length=4, null=True)),
234
+                ('gsizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='gsizeOk', max_length=4, null=True)),
235
+                ('psizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='psizeOk', max_length=4, null=True)),
236
+                ('wsizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='wsizeOk', max_length=4, null=True)),
237
+                ('jksizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='jksizeOk', max_length=4, null=True)),
238
+                ('usizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='usizeOk', max_length=4, null=True)),
239
+                ('msizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='msizeOk', max_length=4, null=True)),
240
+                ('asizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='asizeOk', max_length=4, null=True)),
241
+                ('nsizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='nsizeOk', max_length=4, null=True)),
242
+                ('jsizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='jsizeOk', max_length=4, null=True)),
243
+                ('xsizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='xsizeOk', max_length=4, null=True)),
244
+                ('flatnesssizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='flatnesssizeOk', max_length=4, null=True)),
245
+                ('ksizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='ksizeOk', max_length=4, null=True)),
246
+                ('thicknesssizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='thicknesssizeOk', max_length=4, null=True)),
247
+                ('qsizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='qsizeOk', max_length=4, null=True)),
248
+                ('ssizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='ssizeOk', max_length=4, null=True)),
249
+                ('created_at', models.DateTimeField(blank=True, null=True)),
250
+                ('updated_at', models.DateTimeField(blank=True, null=True)),
251
+                ('lot_no', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
252
+                ('machine_id', models.IntegerField()),
253
+                ('code', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
254
+                ('emp_id', models.IntegerField()),
255
+                ('weight', models.FloatField(blank=True, null=True)),
256
+                ('devid', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=40, null=True)),
257
+                ('tpoint1', models.FloatField(blank=True, null=True)),
258
+                ('tpoint2', models.FloatField(blank=True, null=True)),
259
+                ('tpoint3', models.FloatField(blank=True, null=True)),
260
+                ('tpoint4', models.FloatField(blank=True, null=True)),
261
+                ('tpoint1ok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=4, null=True)),
262
+                ('tpoint2ok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=4, null=True)),
263
+                ('tpoint3ok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=4, null=True)),
264
+                ('tpoint4ok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=4, null=True)),
265
+                ('tdiff', models.FloatField(blank=True, null=True)),
266
+                ('tmin', models.FloatField(blank=True, null=True)),
267
+                ('tmax', models.FloatField(blank=True, null=True)),
268
+                ('hdev', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=20, null=True)),
269
+                ('hsizeproxy', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=20, null=True)),
270
+                ('restricts', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=40, null=True)),
271
+                ('shift', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=10, null=True)),
272
+                ('mode', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=10, null=True)),
273
+                ('cal_mode', models.IntegerField(blank=True, null=True)),
274
+                ('diasize', models.FloatField(blank=True, null=True)),
275
+                ('diasizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='diasizeOk', max_length=4, null=True)),
276
+                ('censize', models.FloatField(blank=True, null=True)),
277
+                ('censizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='censizeOk', max_length=4, null=True)),
278
+                ('osize', models.FloatField(blank=True, null=True)),
279
+                ('osizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='osizeOk', max_length=4, null=True)),
280
+                ('size1', models.FloatField(blank=True, null=True)),
281
+                ('size2', models.FloatField(blank=True, null=True)),
282
+                ('size1ok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='size1Ok', max_length=50, null=True)),
283
+                ('size2ok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='size2Ok', max_length=50, null=True)),
284
+                ('size1name', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='size1Name', max_length=50, null=True)),
285
+                ('size2name', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='size2Name', max_length=50, null=True)),
286
+                ('bsize', models.FloatField(blank=True, null=True)),
287
+                ('bsizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='bsizeOk', max_length=50, null=True)),
288
+                ('lsize', models.FloatField(blank=True, null=True)),
289
+                ('lsizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='lsizeOk', max_length=50, null=True)),
290
+                ('zsize', models.FloatField(blank=True, null=True)),
291
+                ('zsizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='zsizeOk', max_length=50, null=True)),
292
+                ('x1size', models.FloatField(blank=True, null=True)),
293
+                ('x1sizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='x1sizeOk', max_length=50, null=True)),
294
+                ('x2size', models.FloatField(blank=True, null=True)),
295
+                ('x2sizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='x2sizeOk', max_length=50, null=True)),
296
+                ('tpresssize', models.FloatField(blank=True, null=True)),
297
+                ('tpresssizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='tpresssizeOk', max_length=50, null=True)),
298
+                ('t1', models.FloatField()),
299
+                ('t2', models.FloatField()),
300
+                ('t3', models.FloatField()),
301
+                ('t4', models.FloatField()),
302
+                ('t1ok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='t1Ok', max_length=50, null=True)),
303
+                ('t2ok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='t2Ok', max_length=50, null=True)),
304
+                ('t3ok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='t3Ok', max_length=50, null=True)),
305
+                ('t4ok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='t4Ok', max_length=50, null=True)),
306
+                ('t4avg', models.FloatField()),
307
+                ('tpok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='tpOk', max_length=50, null=True)),
308
+                ('t4min', models.FloatField(blank=True, null=True)),
309
+                ('t4max', models.FloatField(blank=True, null=True)),
310
+                ('t4diff', models.FloatField(blank=True, null=True)),
311
+            ],
312
+            options={
313
+                'db_table': 'data_ms',
314
+                'managed': False,
315
+            },
316
+        ),
317
+        migrations.CreateModel(
318
+            name='DataMsLot2210062522',
319
+            fields=[
320
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
321
+                ('row_no', models.IntegerField()),
322
+                ('dsize', models.FloatField(blank=True, null=True)),
323
+                ('tsize', models.FloatField(blank=True, null=True)),
324
+                ('hsize', models.FloatField(blank=True, null=True)),
325
+                ('csize', models.FloatField(blank=True, null=True)),
326
+                ('esize', models.FloatField(blank=True, null=True)),
327
+                ('fsize', models.FloatField(blank=True, null=True)),
328
+                ('gsize', models.FloatField(blank=True, null=True)),
329
+                ('psize', models.FloatField(blank=True, null=True)),
330
+                ('wsize', models.FloatField(blank=True, null=True)),
331
+                ('jksize', models.FloatField(blank=True, null=True)),
332
+                ('usize', models.FloatField(blank=True, null=True)),
333
+                ('msize', models.FloatField(blank=True, null=True)),
334
+                ('asize', models.FloatField(blank=True, null=True)),
335
+                ('nsize', models.FloatField(blank=True, null=True)),
336
+                ('jsize', models.FloatField(blank=True, null=True)),
337
+                ('xsize', models.FloatField(blank=True, null=True)),
338
+                ('flatnesssize', models.FloatField(blank=True, null=True)),
339
+                ('ksize', models.FloatField(blank=True, null=True)),
340
+                ('thicknesssize', models.FloatField(blank=True, null=True)),
341
+                ('qsize', models.FloatField(blank=True, null=True)),
342
+                ('ssize', models.FloatField(blank=True, null=True)),
343
+                ('dsizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='dsizeOk', max_length=4, null=True)),
344
+                ('tsizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='tsizeOk', max_length=4, null=True)),
345
+                ('hsizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='hsizeOk', max_length=4, null=True)),
346
+                ('csizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='csizeOk', max_length=4, null=True)),
347
+                ('esizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='esizeOk', max_length=4, null=True)),
348
+                ('fsizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='fsizeOk', max_length=4, null=True)),
349
+                ('gsizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='gsizeOk', max_length=4, null=True)),
350
+                ('psizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='psizeOk', max_length=4, null=True)),
351
+                ('wsizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='wsizeOk', max_length=4, null=True)),
352
+                ('jksizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='jksizeOk', max_length=4, null=True)),
353
+                ('usizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='usizeOk', max_length=4, null=True)),
354
+                ('msizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='msizeOk', max_length=4, null=True)),
355
+                ('asizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='asizeOk', max_length=4, null=True)),
356
+                ('nsizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='nsizeOk', max_length=4, null=True)),
357
+                ('jsizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='jsizeOk', max_length=4, null=True)),
358
+                ('xsizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='xsizeOk', max_length=4, null=True)),
359
+                ('flatnesssizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='flatnesssizeOk', max_length=4, null=True)),
360
+                ('ksizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='ksizeOk', max_length=4, null=True)),
361
+                ('thicknesssizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='thicknesssizeOk', max_length=4, null=True)),
362
+                ('qsizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='qsizeOk', max_length=4, null=True)),
363
+                ('ssizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='ssizeOk', max_length=4, null=True)),
364
+                ('created_at', models.DateTimeField(blank=True, null=True)),
365
+                ('updated_at', models.DateTimeField(blank=True, null=True)),
366
+                ('lot_no', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
367
+                ('machine_id', models.IntegerField()),
368
+                ('code', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
369
+                ('emp_id', models.IntegerField()),
370
+                ('weight', models.FloatField(blank=True, null=True)),
371
+                ('devid', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=40, null=True)),
372
+                ('tpoint1', models.FloatField(blank=True, null=True)),
373
+                ('tpoint2', models.FloatField(blank=True, null=True)),
374
+                ('tpoint3', models.FloatField(blank=True, null=True)),
375
+                ('tpoint4', models.FloatField(blank=True, null=True)),
376
+                ('tpoint1ok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=4, null=True)),
377
+                ('tpoint2ok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=4, null=True)),
378
+                ('tpoint3ok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=4, null=True)),
379
+                ('tpoint4ok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=4, null=True)),
380
+                ('tdiff', models.FloatField(blank=True, null=True)),
381
+                ('tmin', models.FloatField(blank=True, null=True)),
382
+                ('tmax', models.FloatField(blank=True, null=True)),
383
+                ('hdev', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=20, null=True)),
384
+                ('hsizeproxy', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=20, null=True)),
385
+                ('restricts', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=40, null=True)),
386
+                ('shift', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=10, null=True)),
387
+                ('mode', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=10, null=True)),
388
+                ('cal_mode', models.IntegerField(blank=True, null=True)),
389
+                ('diasize', models.FloatField(blank=True, null=True)),
390
+                ('diasizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='diasizeOk', max_length=4, null=True)),
391
+                ('censize', models.FloatField(blank=True, null=True)),
392
+                ('censizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='censizeOk', max_length=4, null=True)),
393
+                ('osize', models.FloatField(blank=True, null=True)),
394
+                ('osizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='osizeOk', max_length=4, null=True)),
395
+                ('size1', models.FloatField(blank=True, null=True)),
396
+                ('size2', models.FloatField(blank=True, null=True)),
397
+                ('size1ok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='size1Ok', max_length=50, null=True)),
398
+                ('size2ok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='size2Ok', max_length=50, null=True)),
399
+                ('size1name', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='size1Name', max_length=50, null=True)),
400
+                ('size2name', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='size2Name', max_length=50, null=True)),
401
+                ('bsize', models.FloatField(blank=True, null=True)),
402
+                ('bsizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='bsizeOk', max_length=50, null=True)),
403
+                ('lsize', models.FloatField(blank=True, null=True)),
404
+                ('lsizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='lsizeOk', max_length=50, null=True)),
405
+                ('zsize', models.FloatField(blank=True, null=True)),
406
+                ('zsizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='zsizeOk', max_length=50, null=True)),
407
+                ('x1size', models.FloatField(blank=True, null=True)),
408
+                ('x1sizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='x1sizeOk', max_length=50, null=True)),
409
+                ('x2size', models.FloatField(blank=True, null=True)),
410
+                ('x2sizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='x2sizeOk', max_length=50, null=True)),
411
+                ('tpresssize', models.FloatField(blank=True, null=True)),
412
+                ('tpresssizeok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='tpresssizeOk', max_length=50, null=True)),
413
+                ('t1', models.FloatField()),
414
+                ('t2', models.FloatField()),
415
+                ('t3', models.FloatField()),
416
+                ('t4', models.FloatField()),
417
+                ('t1ok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='t1Ok', max_length=50, null=True)),
418
+                ('t2ok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='t2Ok', max_length=50, null=True)),
419
+                ('t3ok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='t3Ok', max_length=50, null=True)),
420
+                ('t4ok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='t4Ok', max_length=50, null=True)),
421
+                ('t4avg', models.FloatField()),
422
+                ('tpok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='tpOk', max_length=50, null=True)),
423
+                ('t4min', models.FloatField(blank=True, null=True)),
424
+                ('t4max', models.FloatField(blank=True, null=True)),
425
+                ('t4diff', models.FloatField(blank=True, null=True)),
426
+            ],
427
+            options={
428
+                'db_table': 'data_ms_LOT2210062522',
429
+                'managed': False,
430
+            },
431
+        ),
432
+        migrations.CreateModel(
433
+            name='DataRl',
434
+            fields=[
435
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
436
+                ('row_no', models.IntegerField(blank=True, null=True)),
437
+                ('avg', models.FloatField(blank=True, null=True)),
438
+                ('grade', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
439
+                ('rgrade', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
440
+                ('r_type', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
441
+                ('p1', models.FloatField(blank=True, null=True)),
442
+                ('p2', models.FloatField(blank=True, null=True)),
443
+                ('p3', models.FloatField(blank=True, null=True)),
444
+                ('p4', models.FloatField(blank=True, null=True)),
445
+                ('p5', models.FloatField(blank=True, null=True)),
446
+                ('p6', models.FloatField(blank=True, null=True)),
447
+                ('p7', models.FloatField(blank=True, null=True)),
448
+                ('p8', models.FloatField(blank=True, null=True)),
449
+                ('p9', models.FloatField(blank=True, null=True)),
450
+                ('p10', models.FloatField(blank=True, null=True)),
451
+                ('created_at', models.DateTimeField(blank=True, null=True)),
452
+                ('updated_at', models.DateTimeField(blank=True, null=True)),
453
+                ('lot_no', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
454
+                ('ndata', models.IntegerField(blank=True, null=True)),
455
+                ('sub_order', models.IntegerField(blank=True, null=True)),
456
+                ('machine_id', models.IntegerField(blank=True, null=True)),
457
+                ('code', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
458
+                ('header', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=10, null=True)),
459
+            ],
460
+            options={
461
+                'db_table': 'data_rl',
462
+                'managed': False,
463
+            },
464
+        ),
465
+        migrations.CreateModel(
466
+            name='DataWb',
467
+            fields=[
468
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
469
+                ('row_no', models.IntegerField(blank=True, null=True)),
470
+                ('result', models.FloatField(blank=True, null=True)),
471
+                ('weight', models.FloatField(blank=True, null=True)),
472
+                ('judgement', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=10, null=True)),
473
+                ('created_at', models.DateTimeField(blank=True, null=True)),
474
+                ('updated_at', models.DateTimeField(blank=True, null=True)),
475
+                ('lot_no', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
476
+                ('machine_id', models.IntegerField(blank=True, null=True)),
477
+                ('code', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
478
+                ('emp_id', models.IntegerField(blank=True, null=True)),
479
+                ('repair_by', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=30, null=True)),
480
+            ],
481
+            options={
482
+                'db_table': 'data_wb',
483
+                'managed': False,
484
+            },
485
+        ),
486
+        migrations.CreateModel(
487
+            name='DataWbTest',
488
+            fields=[
489
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
490
+                ('row_no', models.IntegerField(blank=True, null=True)),
491
+                ('result', models.FloatField(blank=True, null=True)),
492
+                ('weight', models.FloatField(blank=True, null=True)),
493
+                ('judgement', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=10, null=True)),
494
+                ('created_at', models.DateTimeField(blank=True, null=True)),
495
+                ('updated_at', models.DateTimeField(blank=True, null=True)),
496
+                ('lot_no', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
497
+                ('machine_id', models.IntegerField(blank=True, null=True)),
498
+                ('code', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
499
+                ('emp_id', models.IntegerField(blank=True, null=True)),
500
+                ('repair_by', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=30, null=True)),
501
+            ],
502
+            options={
503
+                'db_table': 'data_wb_test',
504
+                'managed': False,
505
+            },
506
+        ),
507
+        migrations.CreateModel(
508
+            name='LegacyUsers',
509
+            fields=[
510
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
511
+                ('email', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=255, null=True)),
512
+                ('password_digest', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=255, null=True)),
513
+                ('created_at', models.DateTimeField(blank=True, null=True)),
514
+                ('updated_at', models.DateTimeField(blank=True, null=True)),
515
+                ('roles_mask', models.IntegerField(blank=True, null=True)),
516
+                ('empid', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=255, null=True)),
517
+                ('fname', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=255, null=True)),
518
+                ('lname', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=255, null=True)),
519
+            ],
520
+            options={
521
+                'db_table': 'users',
522
+                'managed': False,
523
+            },
524
+        ),
525
+        migrations.CreateModel(
526
+            name='LoginTemps',
527
+            fields=[
528
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
529
+                ('empid', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=255, null=True)),
530
+                ('password', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=255, null=True)),
531
+                ('created_at', models.DateTimeField(blank=True, null=True)),
532
+                ('updated_at', models.DateTimeField(blank=True, null=True)),
533
+            ],
534
+            options={
535
+                'db_table': 'login_temps',
536
+                'managed': False,
537
+            },
538
+        ),
539
+        migrations.CreateModel(
540
+            name='Lot',
541
+            fields=[
542
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
543
+                ('lot_no', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
544
+            ],
545
+            options={
546
+                'db_table': 'lot',
547
+                'managed': False,
548
+            },
549
+        ),
550
+        migrations.CreateModel(
551
+            name='LotRl',
552
+            fields=[
553
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
554
+                ('lot_no', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
555
+            ],
556
+            options={
557
+                'db_table': 'lot_rl',
558
+                'managed': False,
559
+            },
560
+        ),
561
+        migrations.CreateModel(
562
+            name='Lotsizeorder',
563
+            fields=[
564
+                ('oid', models.AutoField(primary_key=True, serialize=False)),
565
+                ('lotno', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=100, null=True)),
566
+                ('sizes', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=400, null=True)),
567
+            ],
568
+            options={
569
+                'db_table': 'LotSizeOrder',
570
+                'managed': False,
571
+            },
572
+        ),
573
+        migrations.CreateModel(
574
+            name='LotSummary',
575
+            fields=[
576
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
577
+                ('lot_no', models.CharField(db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50)),
578
+                ('created_at', models.DateTimeField()),
579
+                ('avg', models.FloatField()),
580
+                ('code', models.CharField(db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50)),
581
+                ('start_time', models.DateTimeField(blank=True, null=True)),
582
+                ('end_time', models.DateTimeField(blank=True, null=True)),
583
+                ('grade', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
584
+                ('machine_id', models.IntegerField(blank=True, null=True)),
585
+                ('avg0', models.FloatField(blank=True, null=True)),
586
+                ('avg1', models.FloatField(blank=True, null=True)),
587
+                ('avg2', models.FloatField(blank=True, null=True)),
588
+                ('avg3', models.FloatField(blank=True, null=True)),
589
+                ('avg0_name', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
590
+                ('avg1_name', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
591
+                ('avg2_name', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
592
+                ('avg3_name', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
593
+            ],
594
+            options={
595
+                'db_table': 'lot_summary',
596
+                'managed': False,
597
+            },
598
+        ),
599
+        migrations.CreateModel(
600
+            name='LotSummary20082018',
601
+            fields=[
602
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
603
+                ('lot_no', models.CharField(db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50)),
604
+                ('created_at', models.DateTimeField()),
605
+                ('avg', models.FloatField()),
606
+                ('code', models.CharField(db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50)),
607
+                ('start_time', models.DateTimeField(blank=True, null=True)),
608
+                ('end_time', models.DateTimeField(blank=True, null=True)),
609
+                ('grade', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
610
+                ('machine_id', models.IntegerField(blank=True, null=True)),
611
+                ('avg0', models.FloatField(blank=True, null=True)),
612
+                ('avg1', models.FloatField(blank=True, null=True)),
613
+                ('avg2', models.FloatField(blank=True, null=True)),
614
+                ('avg3', models.FloatField(blank=True, null=True)),
615
+                ('avg0_name', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
616
+                ('avg1_name', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
617
+                ('avg2_name', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
618
+                ('avg3_name', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
619
+            ],
620
+            options={
621
+                'db_table': 'lot_summary (2008-2018)',
622
+                'managed': False,
623
+            },
624
+        ),
625
+        migrations.CreateModel(
626
+            name='LotSummaryRl',
627
+            fields=[
628
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
629
+                ('lot_no', models.CharField(db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50)),
630
+                ('created_at', models.DateTimeField()),
631
+                ('avg', models.FloatField()),
632
+                ('code', models.CharField(db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50)),
633
+                ('start_time', models.DateTimeField(blank=True, null=True)),
634
+                ('end_time', models.DateTimeField(blank=True, null=True)),
635
+                ('grade', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
636
+                ('machine_id', models.IntegerField(blank=True, null=True)),
637
+                ('avg0', models.FloatField(blank=True, null=True)),
638
+                ('avg1', models.FloatField(blank=True, null=True)),
639
+                ('avg2', models.FloatField(blank=True, null=True)),
640
+                ('avg3', models.FloatField(blank=True, null=True)),
641
+                ('avg0_name', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
642
+                ('avg1_name', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
643
+                ('avg2_name', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
644
+                ('avg3_name', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
645
+            ],
646
+            options={
647
+                'db_table': 'lot_summary_rl',
648
+                'managed': False,
649
+            },
650
+        ),
651
+        migrations.CreateModel(
652
+            name='LotSummaryWb',
653
+            fields=[
654
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
655
+                ('lot_no', models.CharField(db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50)),
656
+                ('created_at', models.DateTimeField()),
657
+                ('w_avg', models.FloatField()),
658
+                ('wb_avg', models.FloatField()),
659
+                ('cp', models.FloatField()),
660
+                ('code', models.CharField(db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50)),
661
+                ('start_time', models.DateTimeField(blank=True, null=True)),
662
+                ('end_time', models.DateTimeField(blank=True, null=True)),
663
+                ('machine_id', models.IntegerField(blank=True, null=True)),
664
+            ],
665
+            options={
666
+                'db_table': 'lot_summary_wb',
667
+                'managed': False,
668
+            },
669
+        ),
670
+        migrations.CreateModel(
671
+            name='Lottracking',
672
+            fields=[
673
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
674
+                ('lotno', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=255, null=True)),
675
+                ('machinegroup', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='machineGroup', max_length=255, null=True)),
676
+                ('datams_id', models.IntegerField(blank=True, null=True)),
677
+                ('created_at', models.DateTimeField(blank=True, null=True)),
678
+                ('updated_at', models.DateTimeField(blank=True, null=True)),
679
+            ],
680
+            options={
681
+                'db_table': 'LotTracking',
682
+                'managed': False,
683
+            },
684
+        ),
685
+        migrations.CreateModel(
686
+            name='Machinegroup',
687
+            fields=[
688
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
689
+                ('groupname', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='groupName', max_length=255, null=True)),
690
+            ],
691
+            options={
692
+                'db_table': 'machineGroup',
693
+                'managed': False,
694
+            },
695
+        ),
696
+        migrations.CreateModel(
697
+            name='Machines',
698
+            fields=[
699
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
700
+                ('name', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=255, null=True)),
701
+                ('description', models.TextField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', null=True)),
702
+                ('created_at', models.DateTimeField(blank=True, null=True)),
703
+                ('updated_at', models.DateTimeField(blank=True, null=True)),
704
+                ('tag_name', models.TextField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', null=True)),
705
+            ],
706
+            options={
707
+                'db_table': 'machines',
708
+                'managed': False,
709
+            },
710
+        ),
711
+        migrations.CreateModel(
712
+            name='MachinesWb',
713
+            fields=[
714
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
715
+                ('name', models.TextField(db_collation='SQL_Latin1_General_CP1_CI_AS')),
716
+                ('description', models.TextField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', null=True)),
717
+                ('created_at', models.DateTimeField()),
718
+                ('updated_at', models.DateTimeField(blank=True, null=True)),
719
+                ('tag_name', models.TextField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', null=True)),
720
+                ('ip', models.TextField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', null=True)),
721
+                ('isactive', models.BooleanField(db_column='isActive')),
722
+                ('machinestd', models.FloatField(blank=True, db_column='machineStd', null=True)),
723
+            ],
724
+            options={
725
+                'db_table': 'machines_wb',
726
+                'managed': False,
727
+            },
728
+        ),
729
+        migrations.CreateModel(
730
+            name='Manualsize',
731
+            fields=[
732
+                ('lotno', models.CharField(db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='lotNo', max_length=20, primary_key=True, serialize=False)),
733
+                ('size_name', models.CharField(db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='Size_Name', max_length=50)),
734
+                ('std', models.FloatField(blank=True, db_column='Std', null=True)),
735
+                ('tolun', models.FloatField(blank=True, db_column='TolUn', null=True)),
736
+                ('tolup', models.FloatField(blank=True, db_column='TolUp', null=True)),
737
+                ('created_at', models.DateTimeField()),
738
+                ('productcode', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='ProductCode', max_length=30, null=True)),
739
+            ],
740
+            options={
741
+                'db_table': 'manualSize',
742
+                'managed': False,
743
+            },
744
+        ),
745
+        migrations.CreateModel(
746
+            name='PressCal',
747
+            fields=[
748
+                ('v0', models.FloatField(blank=True, null=True)),
749
+                ('lot_no', models.CharField(db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, primary_key=True, serialize=False)),
750
+                ('v1', models.FloatField(blank=True, null=True)),
751
+                ('v2', models.FloatField(blank=True, null=True)),
752
+                ('v3', models.FloatField(blank=True, null=True)),
753
+                ('v4', models.FloatField(blank=True, null=True)),
754
+                ('v5', models.FloatField(blank=True, null=True)),
755
+                ('v6', models.FloatField(blank=True, null=True)),
756
+                ('y0', models.FloatField(blank=True, null=True)),
757
+                ('y1', models.FloatField(blank=True, null=True)),
758
+                ('y2', models.FloatField(blank=True, null=True)),
759
+                ('ac1', models.FloatField(blank=True, null=True)),
760
+                ('ac2', models.FloatField(blank=True, null=True)),
761
+                ('ac3', models.FloatField(blank=True, null=True)),
762
+                ('ac4', models.FloatField(blank=True, null=True)),
763
+                ('ac5', models.FloatField(blank=True, null=True)),
764
+                ('ac6', models.FloatField(blank=True, null=True)),
765
+                ('ac7', models.FloatField(blank=True, null=True)),
766
+                ('r_result', models.FloatField(blank=True, null=True)),
767
+                ('created_at', models.DateTimeField(blank=True, null=True)),
768
+                ('updated_at', models.DateTimeField(blank=True, null=True)),
769
+                ('c0', models.FloatField()),
770
+            ],
771
+            options={
772
+                'db_table': 'press_cal',
773
+                'managed': False,
774
+            },
775
+        ),
776
+        migrations.CreateModel(
777
+            name='RotateData',
778
+            fields=[
779
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
780
+                ('row_no', models.IntegerField(blank=True, null=True)),
781
+                ('speed_spec', models.FloatField(blank=True, null=True)),
782
+                ('speed_test', models.FloatField(blank=True, null=True)),
783
+                ('speedok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='speedOk', max_length=4, null=True)),
784
+                ('qty', models.IntegerField()),
785
+                ('station_no', models.IntegerField()),
786
+                ('created_at', models.DateTimeField(blank=True, null=True)),
787
+                ('updated_at', models.DateTimeField(blank=True, null=True)),
788
+                ('lot_no', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
789
+                ('machine_id', models.IntegerField(blank=True, null=True)),
790
+                ('code', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
791
+                ('emp_id', models.IntegerField()),
792
+                ('devid', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=40, null=True)),
793
+                ('mode', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=10, null=True)),
794
+                ('cal_mode', models.IntegerField(blank=True, null=True)),
795
+            ],
796
+            options={
797
+                'db_table': 'rotate_data',
798
+                'managed': False,
799
+            },
800
+        ),
801
+        migrations.CreateModel(
802
+            name='SchemaMigrations',
803
+            fields=[
804
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
805
+                ('version', models.CharField(db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=255)),
806
+            ],
807
+            options={
808
+                'db_table': 'schema_migrations',
809
+                'managed': False,
810
+            },
811
+        ),
812
+        migrations.CreateModel(
813
+            name='SplitData',
814
+            fields=[
815
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
816
+                ('v1', models.FloatField(blank=True, null=True)),
817
+                ('v2', models.FloatField(blank=True, null=True)),
818
+                ('v3', models.FloatField(blank=True, null=True)),
819
+                ('v4', models.FloatField(blank=True, null=True)),
820
+                ('v5', models.FloatField(blank=True, null=True)),
821
+                ('unit', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
822
+                ('vr', models.FloatField(blank=True, null=True)),
823
+                ('vname', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=50, null=True)),
824
+                ('no', models.IntegerField()),
825
+                ('v1ok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=20, null=True)),
826
+                ('v2ok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=20, null=True)),
827
+                ('v3ok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=20, null=True)),
828
+                ('v4ok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=20, null=True)),
829
+                ('v5ok', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=20, null=True)),
830
+                ('vmax', models.FloatField(blank=True, null=True)),
831
+                ('vmin', models.FloatField(blank=True, null=True)),
832
+                ('vdiff', models.FloatField(blank=True, null=True)),
833
+                ('row_no', models.IntegerField(blank=True, null=True)),
834
+            ],
835
+            options={
836
+                'db_table': 'split_data',
837
+                'managed': False,
838
+            },
839
+        ),
840
+        migrations.CreateModel(
841
+            name='SysConfigs',
842
+            fields=[
843
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
844
+                ('title', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=255, null=True)),
845
+                ('value', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', max_length=255, null=True)),
846
+                ('created_at', models.DateTimeField(blank=True, null=True)),
847
+                ('updated_at', models.DateTimeField(blank=True, null=True)),
848
+            ],
849
+            options={
850
+                'db_table': 'sys_configs',
851
+                'managed': False,
852
+            },
853
+        ),
854
+        migrations.CreateModel(
855
+            name='TbFgPressinfoLotlist',
856
+            fields=[
857
+                ('product_year', models.CharField(db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='Product_Year', max_length=10, primary_key=True, serialize=False)),
858
+                ('productcode', models.CharField(db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='ProductCode', max_length=20)),
859
+                ('lotno', models.CharField(db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='LotNo', max_length=20)),
860
+                ('lot_qty', models.FloatField(blank=True, db_column='Lot_Qty', null=True)),
861
+                ('def_qty', models.FloatField(blank=True, db_column='Def_Qty', null=True)),
862
+                ('fg_qty', models.FloatField(blank=True, db_column='FG_Qty', null=True)),
863
+                ('insp_date', models.DateTimeField(blank=True, db_column='Insp_Date', null=True)),
864
+                ('current_prono', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='Current_ProNo', max_length=5, null=True)),
865
+                ('press_mcname', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='Press_McName', max_length=50, null=True)),
866
+                ('press_username', models.CharField(blank=True, db_collation='SQL_Latin1_General_CP1_CI_AS', db_column='Press_UserName', max_length=50, null=True)),
867
+            ],
868
+            options={
869
+                'db_table': 'tb_fg_pressinfo_lotlist',
870
+                'managed': False,
871
+            },
872
+        ),
873
+        migrations.CreateModel(
874
+            name='TbWbStdCode12',
875
+            fields=[
876
+                ('id', models.IntegerField(db_column='ID', primary_key=True, serialize=False)),
877
+                ('u_weight', models.FloatField(blank=True, db_column='U_Weight', null=True)),
878
+                ('speed_from', models.FloatField(blank=True, db_column='Speed_From', null=True)),
879
+                ('speed_to', models.FloatField(blank=True, db_column='Speed_To', null=True)),
880
+                ('diameter_from', models.FloatField(blank=True, db_column='Diameter_From', null=True)),
881
+                ('diameter_to', models.FloatField(blank=True, db_column='Diameter_To', null=True)),
882
+                ('std_balance', models.FloatField(blank=True, db_column='STD_Balance', null=True)),
883
+            ],
884
+            options={
885
+                'db_table': 'tb_wb_std_code_1-2',
886
+                'managed': False,
887
+            },
888
+        ),
889
+        migrations.CreateModel(
890
+            name='TbWbStdCode345',
891
+            fields=[
892
+                ('id', models.IntegerField(db_column='ID', primary_key=True, serialize=False)),
893
+                ('u_weight', models.FloatField(blank=True, db_column='U_Weight', null=True)),
894
+                ('speed_from', models.FloatField(blank=True, db_column='Speed_From', null=True)),
895
+                ('speed_to', models.FloatField(blank=True, db_column='Speed_To', null=True)),
896
+                ('diameter_from', models.FloatField(blank=True, db_column='Diameter_From', null=True)),
897
+                ('diameter_to', models.FloatField(blank=True, db_column='Diameter_To', null=True)),
898
+                ('std_balance', models.FloatField(blank=True, db_column='STD_Balance', null=True)),
899
+            ],
900
+            options={
901
+                'db_table': 'tb_wb_std_code_3-4-5',
902
+                'managed': False,
903
+            },
904
+        ),
905
+    ]

+ 0 - 0
app/legacy/migrations/__init__.py


+ 842 - 0
app/legacy/models.py

@@ -0,0 +1,842 @@
1
+# This is an auto-generated Django model module.
2
+# You'll have to do the following manually to clean this up:
3
+#   * Rearrange models' order
4
+#   * Make sure each model has one field with primary_key=True
5
+#   * Make sure each ForeignKey and OneToOneField has `on_delete` set to the desired behavior
6
+#   * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
7
+# Feel free to rename the models, but don't rename db_table values or field names.
8
+from django.db import models
9
+
10
+
11
+class Data13178079(models.Model):
12
+    row_no = models.IntegerField(blank=True, null=True)
13
+    avg = models.FloatField(blank=True, null=True)
14
+    grade = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
15
+    rgrade = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
16
+    r_type = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
17
+    p1 = models.FloatField(blank=True, null=True)
18
+    p2 = models.FloatField(blank=True, null=True)
19
+    p3 = models.FloatField(blank=True, null=True)
20
+    p4 = models.FloatField(blank=True, null=True)
21
+    p5 = models.FloatField(blank=True, null=True)
22
+    p6 = models.FloatField(blank=True, null=True)
23
+    p7 = models.FloatField(blank=True, null=True)
24
+    p8 = models.FloatField(blank=True, null=True)
25
+    p9 = models.FloatField(blank=True, null=True)
26
+    p10 = models.FloatField(blank=True, null=True)
27
+    created_at = models.DateTimeField(blank=True, null=True)
28
+    updated_at = models.DateTimeField(blank=True, null=True)
29
+    lot_no = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
30
+    ndata = models.IntegerField(blank=True, null=True)
31
+    sub_order = models.IntegerField(blank=True, null=True)
32
+    machine_id = models.IntegerField(blank=True, null=True)
33
+    code = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
34
+    header = models.CharField(max_length=10, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
35
+
36
+    class Meta:
37
+        managed = False
38
+        db_table = 'Data_131_78079'
39
+        app_label = "legacy"
40
+
41
+
42
+class Lotsizeorder(models.Model):
43
+    oid = models.AutoField(primary_key=True)
44
+    lotno = models.CharField(max_length=100, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
45
+    sizes = models.CharField(max_length=400, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
46
+
47
+    class Meta:
48
+        managed = False
49
+        db_table = 'LotSizeOrder'
50
+        app_label = "legacy"
51
+
52
+
53
+class Lottracking(models.Model):
54
+    lotno = models.CharField(max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
55
+    machineid = models.ForeignKey('MachinesWb', models.DO_NOTHING, db_column='machineId', blank=True, null=True)  # Field name made lowercase.
56
+    machinegroup = models.CharField(db_column='machineGroup', max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
57
+    mgid = models.ForeignKey('Machinegroup', models.DO_NOTHING, db_column='mgId', blank=True, null=True)  # Field name made lowercase.
58
+    datams_id = models.IntegerField(blank=True, null=True)
59
+    datawb = models.ForeignKey('DataWb', models.DO_NOTHING, blank=True, null=True)
60
+    created_at = models.DateTimeField(blank=True, null=True)
61
+    updated_at = models.DateTimeField(blank=True, null=True)
62
+
63
+    class Meta:
64
+        managed = False
65
+        db_table = 'LotTracking'
66
+        app_label = "legacy"
67
+
68
+
69
+class Agreements(models.Model):
70
+    title = models.CharField(max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
71
+    file = models.CharField(max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
72
+    description = models.TextField(db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
73
+    created_at = models.DateTimeField(blank=True, null=True)
74
+    updated_at = models.DateTimeField(blank=True, null=True)
75
+
76
+    class Meta:
77
+        managed = False
78
+        db_table = 'agreements'
79
+        app_label = "legacy"
80
+
81
+
82
+class DailyChecks(models.Model):
83
+    p1 = models.FloatField(blank=True, null=True)
84
+    p2 = models.FloatField(blank=True, null=True)
85
+    p3 = models.FloatField(blank=True, null=True)
86
+    avg = models.FloatField(blank=True, null=True)
87
+    machine_id = models.IntegerField(blank=True, null=True)
88
+    created_at = models.DateTimeField(blank=True, null=True)
89
+    updated_at = models.DateTimeField(blank=True, null=True)
90
+    header = models.CharField(max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
91
+    user_id = models.IntegerField(blank=True, null=True)
92
+    empid = models.CharField(max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
93
+    shift = models.CharField(max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
94
+    result = models.CharField(max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
95
+
96
+    class Meta:
97
+        managed = False
98
+        db_table = 'daily_checks'
99
+        app_label = "legacy"
100
+
101
+
102
+class DailyChecksWb(models.Model):
103
+    result = models.FloatField(blank=True, null=True)
104
+    weight = models.FloatField(blank=True, null=True)
105
+    judgement = models.CharField(max_length=10, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
106
+    machine_id = models.IntegerField(blank=True, null=True)
107
+    created_at = models.DateTimeField(blank=True, null=True)
108
+    updated_at = models.DateTimeField(blank=True, null=True)
109
+    user_id = models.IntegerField(blank=True, null=True)
110
+    empid = models.CharField(max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
111
+    shift = models.CharField(max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
112
+
113
+    class Meta:
114
+        managed = False
115
+        db_table = 'daily_checks_wb'
116
+        app_label = "legacy"
117
+
118
+
119
+class Data(models.Model):
120
+    row_no = models.IntegerField(blank=True, null=True)
121
+    lot_no = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
122
+    code = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
123
+    header = models.CharField(max_length=10, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
124
+    p1 = models.FloatField(blank=True, null=True)
125
+    p2 = models.FloatField(blank=True, null=True)
126
+    p3 = models.FloatField(blank=True, null=True)
127
+    p4 = models.FloatField(blank=True, null=True)
128
+    p5 = models.FloatField(blank=True, null=True)
129
+    p6 = models.FloatField(blank=True, null=True)
130
+    p7 = models.FloatField(blank=True, null=True)
131
+    p8 = models.FloatField(blank=True, null=True)
132
+    p9 = models.FloatField(blank=True, null=True)
133
+    p10 = models.FloatField(blank=True, null=True)
134
+    avg = models.FloatField(blank=True, null=True)
135
+    grade = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
136
+    rgrade = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
137
+    r_type = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
138
+    created_at = models.DateTimeField(blank=True, null=True)
139
+    updated_at = models.DateTimeField(blank=True, null=True)
140
+    ndata = models.IntegerField(blank=True, null=True)
141
+    sub_order = models.IntegerField(blank=True, null=True)
142
+    machine_id = models.IntegerField(blank=True, null=True)
143
+
144
+    class Meta:
145
+        managed = False
146
+        db_table = 'data'
147
+        app_label = "legacy"
148
+
149
+    def __str__(self):
150
+        return f"Lotno:{self.lot_no} Code:{self.code}"
151
+
152
+
153
+class Data20082018(models.Model):
154
+    row_no = models.IntegerField(blank=True, null=True)
155
+    avg = models.FloatField(blank=True, null=True)
156
+    grade = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
157
+    rgrade = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
158
+    r_type = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
159
+    p1 = models.FloatField(blank=True, null=True)
160
+    p2 = models.FloatField(blank=True, null=True)
161
+    p3 = models.FloatField(blank=True, null=True)
162
+    p4 = models.FloatField(blank=True, null=True)
163
+    p5 = models.FloatField(blank=True, null=True)
164
+    p6 = models.FloatField(blank=True, null=True)
165
+    p7 = models.FloatField(blank=True, null=True)
166
+    p8 = models.FloatField(blank=True, null=True)
167
+    p9 = models.FloatField(blank=True, null=True)
168
+    p10 = models.FloatField(blank=True, null=True)
169
+    created_at = models.DateTimeField(blank=True, null=True)
170
+    updated_at = models.DateTimeField(blank=True, null=True)
171
+    lot_no = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
172
+    ndata = models.IntegerField(blank=True, null=True)
173
+    sub_order = models.IntegerField(blank=True, null=True)
174
+    machine_id = models.IntegerField(blank=True, null=True)
175
+    code = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
176
+    header = models.CharField(max_length=10, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
177
+
178
+    class Meta:
179
+        managed = False
180
+        db_table = 'data (2008-2018)'
181
+        app_label = "legacy"
182
+
183
+
184
+class Data25113027G(models.Model):
185
+    row_no = models.IntegerField(blank=True, null=True)
186
+    avg = models.FloatField(blank=True, null=True)
187
+    grade = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
188
+    rgrade = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
189
+    r_type = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
190
+    p1 = models.FloatField(blank=True, null=True)
191
+    p2 = models.FloatField(blank=True, null=True)
192
+    p3 = models.FloatField(blank=True, null=True)
193
+    p4 = models.FloatField(blank=True, null=True)
194
+    p5 = models.FloatField(blank=True, null=True)
195
+    p6 = models.FloatField(blank=True, null=True)
196
+    p7 = models.FloatField(blank=True, null=True)
197
+    p8 = models.FloatField(blank=True, null=True)
198
+    p9 = models.FloatField(blank=True, null=True)
199
+    p10 = models.FloatField(blank=True, null=True)
200
+    created_at = models.DateTimeField(blank=True, null=True)
201
+    updated_at = models.DateTimeField(blank=True, null=True)
202
+    lot_no = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
203
+    ndata = models.IntegerField(blank=True, null=True)
204
+    sub_order = models.IntegerField(blank=True, null=True)
205
+    machine_id = models.IntegerField(blank=True, null=True)
206
+    code = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
207
+    header = models.CharField(max_length=10, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
208
+
209
+    class Meta:
210
+        managed = False
211
+        db_table = 'data_251-13027G'
212
+        app_label = "legacy"
213
+
214
+
215
+class DataMs(models.Model):
216
+    row_no = models.IntegerField()
217
+    dsize = models.FloatField(blank=True, null=True)
218
+    tsize = models.FloatField(blank=True, null=True)
219
+    hsize = models.FloatField(blank=True, null=True)
220
+    csize = models.FloatField(blank=True, null=True)
221
+    esize = models.FloatField(blank=True, null=True)
222
+    fsize = models.FloatField(blank=True, null=True)
223
+    gsize = models.FloatField(blank=True, null=True)
224
+    psize = models.FloatField(blank=True, null=True)
225
+    wsize = models.FloatField(blank=True, null=True)
226
+    jksize = models.FloatField(blank=True, null=True)
227
+    usize = models.FloatField(blank=True, null=True)
228
+    msize = models.FloatField(blank=True, null=True)
229
+    asize = models.FloatField(blank=True, null=True)
230
+    nsize = models.FloatField(blank=True, null=True)
231
+    jsize = models.FloatField(blank=True, null=True)
232
+    xsize = models.FloatField(blank=True, null=True)
233
+    flatnesssize = models.FloatField(blank=True, null=True)
234
+    ksize = models.FloatField(blank=True, null=True)
235
+    thicknesssize = models.FloatField(blank=True, null=True)
236
+    qsize = models.FloatField(blank=True, null=True)
237
+    ssize = models.FloatField(blank=True, null=True)
238
+    dsizeok = models.CharField(db_column='dsizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
239
+    tsizeok = models.CharField(db_column='tsizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
240
+    hsizeok = models.CharField(db_column='hsizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
241
+    csizeok = models.CharField(db_column='csizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
242
+    esizeok = models.CharField(db_column='esizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
243
+    fsizeok = models.CharField(db_column='fsizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
244
+    gsizeok = models.CharField(db_column='gsizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
245
+    psizeok = models.CharField(db_column='psizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
246
+    wsizeok = models.CharField(db_column='wsizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
247
+    jksizeok = models.CharField(db_column='jksizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
248
+    usizeok = models.CharField(db_column='usizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
249
+    msizeok = models.CharField(db_column='msizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
250
+    asizeok = models.CharField(db_column='asizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
251
+    nsizeok = models.CharField(db_column='nsizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
252
+    jsizeok = models.CharField(db_column='jsizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
253
+    xsizeok = models.CharField(db_column='xsizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
254
+    flatnesssizeok = models.CharField(db_column='flatnesssizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
255
+    ksizeok = models.CharField(db_column='ksizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
256
+    thicknesssizeok = models.CharField(db_column='thicknesssizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
257
+    qsizeok = models.CharField(db_column='qsizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
258
+    ssizeok = models.CharField(db_column='ssizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
259
+    created_at = models.DateTimeField(blank=True, null=True)
260
+    updated_at = models.DateTimeField(blank=True, null=True)
261
+    lot_no = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
262
+    machine_id = models.IntegerField()
263
+    code = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
264
+    emp_id = models.IntegerField()
265
+    weight = models.FloatField(blank=True, null=True)
266
+    devid = models.CharField(max_length=40, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
267
+    tpoint1 = models.FloatField(blank=True, null=True)
268
+    tpoint2 = models.FloatField(blank=True, null=True)
269
+    tpoint3 = models.FloatField(blank=True, null=True)
270
+    tpoint4 = models.FloatField(blank=True, null=True)
271
+    tpoint1ok = models.CharField(max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
272
+    tpoint2ok = models.CharField(max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
273
+    tpoint3ok = models.CharField(max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
274
+    tpoint4ok = models.CharField(max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
275
+    tdiff = models.FloatField(blank=True, null=True)
276
+    tmin = models.FloatField(blank=True, null=True)
277
+    tmax = models.FloatField(blank=True, null=True)
278
+    hdev = models.CharField(max_length=20, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
279
+    hsizeproxy = models.CharField(max_length=20, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
280
+    restricts = models.CharField(max_length=40, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
281
+    shift = models.CharField(max_length=10, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
282
+    mode = models.CharField(max_length=10, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
283
+    cal_mode = models.IntegerField(blank=True, null=True)
284
+    diasize = models.FloatField(blank=True, null=True)
285
+    diasizeok = models.CharField(db_column='diasizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
286
+    censize = models.FloatField(blank=True, null=True)
287
+    censizeok = models.CharField(db_column='censizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
288
+    osize = models.FloatField(blank=True, null=True)
289
+    osizeok = models.CharField(db_column='osizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
290
+    size1 = models.FloatField(blank=True, null=True)
291
+    size2 = models.FloatField(blank=True, null=True)
292
+    size1ok = models.CharField(db_column='size1Ok', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
293
+    size2ok = models.CharField(db_column='size2Ok', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
294
+    size1name = models.CharField(db_column='size1Name', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
295
+    size2name = models.CharField(db_column='size2Name', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
296
+    bsize = models.FloatField(blank=True, null=True)
297
+    bsizeok = models.CharField(db_column='bsizeOk', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
298
+    lsize = models.FloatField(blank=True, null=True)
299
+    lsizeok = models.CharField(db_column='lsizeOk', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
300
+    zsize = models.FloatField(blank=True, null=True)
301
+    zsizeok = models.CharField(db_column='zsizeOk', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
302
+    x1size = models.FloatField(blank=True, null=True)
303
+    x1sizeok = models.CharField(db_column='x1sizeOk', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
304
+    x2size = models.FloatField(blank=True, null=True)
305
+    x2sizeok = models.CharField(db_column='x2sizeOk', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
306
+    tpresssize = models.FloatField(blank=True, null=True)
307
+    tpresssizeok = models.CharField(db_column='tpresssizeOk', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
308
+    t1 = models.FloatField()
309
+    t2 = models.FloatField()
310
+    t3 = models.FloatField()
311
+    t4 = models.FloatField()
312
+    t1ok = models.CharField(db_column='t1Ok', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
313
+    t2ok = models.CharField(db_column='t2Ok', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
314
+    t3ok = models.CharField(db_column='t3Ok', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
315
+    t4ok = models.CharField(db_column='t4Ok', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
316
+    t4avg = models.FloatField()
317
+    tpok = models.CharField(db_column='tpOk', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
318
+    t4min = models.FloatField(blank=True, null=True)
319
+    t4max = models.FloatField(blank=True, null=True)
320
+    t4diff = models.FloatField(blank=True, null=True)
321
+
322
+    class Meta:
323
+        managed = False
324
+        db_table = 'data_ms'
325
+        app_label = "legacy"
326
+
327
+class DataMsLot2210062522(models.Model):
328
+    row_no = models.IntegerField()
329
+    dsize = models.FloatField(blank=True, null=True)
330
+    tsize = models.FloatField(blank=True, null=True)
331
+    hsize = models.FloatField(blank=True, null=True)
332
+    csize = models.FloatField(blank=True, null=True)
333
+    esize = models.FloatField(blank=True, null=True)
334
+    fsize = models.FloatField(blank=True, null=True)
335
+    gsize = models.FloatField(blank=True, null=True)
336
+    psize = models.FloatField(blank=True, null=True)
337
+    wsize = models.FloatField(blank=True, null=True)
338
+    jksize = models.FloatField(blank=True, null=True)
339
+    usize = models.FloatField(blank=True, null=True)
340
+    msize = models.FloatField(blank=True, null=True)
341
+    asize = models.FloatField(blank=True, null=True)
342
+    nsize = models.FloatField(blank=True, null=True)
343
+    jsize = models.FloatField(blank=True, null=True)
344
+    xsize = models.FloatField(blank=True, null=True)
345
+    flatnesssize = models.FloatField(blank=True, null=True)
346
+    ksize = models.FloatField(blank=True, null=True)
347
+    thicknesssize = models.FloatField(blank=True, null=True)
348
+    qsize = models.FloatField(blank=True, null=True)
349
+    ssize = models.FloatField(blank=True, null=True)
350
+    dsizeok = models.CharField(db_column='dsizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
351
+    tsizeok = models.CharField(db_column='tsizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
352
+    hsizeok = models.CharField(db_column='hsizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
353
+    csizeok = models.CharField(db_column='csizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
354
+    esizeok = models.CharField(db_column='esizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
355
+    fsizeok = models.CharField(db_column='fsizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
356
+    gsizeok = models.CharField(db_column='gsizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
357
+    psizeok = models.CharField(db_column='psizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
358
+    wsizeok = models.CharField(db_column='wsizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
359
+    jksizeok = models.CharField(db_column='jksizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
360
+    usizeok = models.CharField(db_column='usizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
361
+    msizeok = models.CharField(db_column='msizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
362
+    asizeok = models.CharField(db_column='asizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
363
+    nsizeok = models.CharField(db_column='nsizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
364
+    jsizeok = models.CharField(db_column='jsizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
365
+    xsizeok = models.CharField(db_column='xsizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
366
+    flatnesssizeok = models.CharField(db_column='flatnesssizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
367
+    ksizeok = models.CharField(db_column='ksizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
368
+    thicknesssizeok = models.CharField(db_column='thicknesssizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
369
+    qsizeok = models.CharField(db_column='qsizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
370
+    ssizeok = models.CharField(db_column='ssizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
371
+    created_at = models.DateTimeField(blank=True, null=True)
372
+    updated_at = models.DateTimeField(blank=True, null=True)
373
+    lot_no = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
374
+    machine_id = models.IntegerField()
375
+    code = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
376
+    emp_id = models.IntegerField()
377
+    weight = models.FloatField(blank=True, null=True)
378
+    devid = models.CharField(max_length=40, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
379
+    tpoint1 = models.FloatField(blank=True, null=True)
380
+    tpoint2 = models.FloatField(blank=True, null=True)
381
+    tpoint3 = models.FloatField(blank=True, null=True)
382
+    tpoint4 = models.FloatField(blank=True, null=True)
383
+    tpoint1ok = models.CharField(max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
384
+    tpoint2ok = models.CharField(max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
385
+    tpoint3ok = models.CharField(max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
386
+    tpoint4ok = models.CharField(max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
387
+    tdiff = models.FloatField(blank=True, null=True)
388
+    tmin = models.FloatField(blank=True, null=True)
389
+    tmax = models.FloatField(blank=True, null=True)
390
+    hdev = models.CharField(max_length=20, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
391
+    hsizeproxy = models.CharField(max_length=20, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
392
+    restricts = models.CharField(max_length=40, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
393
+    shift = models.CharField(max_length=10, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
394
+    mode = models.CharField(max_length=10, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
395
+    cal_mode = models.IntegerField(blank=True, null=True)
396
+    diasize = models.FloatField(blank=True, null=True)
397
+    diasizeok = models.CharField(db_column='diasizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
398
+    censize = models.FloatField(blank=True, null=True)
399
+    censizeok = models.CharField(db_column='censizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
400
+    osize = models.FloatField(blank=True, null=True)
401
+    osizeok = models.CharField(db_column='osizeOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
402
+    size1 = models.FloatField(blank=True, null=True)
403
+    size2 = models.FloatField(blank=True, null=True)
404
+    size1ok = models.CharField(db_column='size1Ok', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
405
+    size2ok = models.CharField(db_column='size2Ok', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
406
+    size1name = models.CharField(db_column='size1Name', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
407
+    size2name = models.CharField(db_column='size2Name', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
408
+    bsize = models.FloatField(blank=True, null=True)
409
+    bsizeok = models.CharField(db_column='bsizeOk', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
410
+    lsize = models.FloatField(blank=True, null=True)
411
+    lsizeok = models.CharField(db_column='lsizeOk', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
412
+    zsize = models.FloatField(blank=True, null=True)
413
+    zsizeok = models.CharField(db_column='zsizeOk', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
414
+    x1size = models.FloatField(blank=True, null=True)
415
+    x1sizeok = models.CharField(db_column='x1sizeOk', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
416
+    x2size = models.FloatField(blank=True, null=True)
417
+    x2sizeok = models.CharField(db_column='x2sizeOk', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
418
+    tpresssize = models.FloatField(blank=True, null=True)
419
+    tpresssizeok = models.CharField(db_column='tpresssizeOk', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
420
+    t1 = models.FloatField()
421
+    t2 = models.FloatField()
422
+    t3 = models.FloatField()
423
+    t4 = models.FloatField()
424
+    t1ok = models.CharField(db_column='t1Ok', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
425
+    t2ok = models.CharField(db_column='t2Ok', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
426
+    t3ok = models.CharField(db_column='t3Ok', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
427
+    t4ok = models.CharField(db_column='t4Ok', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
428
+    t4avg = models.FloatField()
429
+    tpok = models.CharField(db_column='tpOk', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
430
+    t4min = models.FloatField(blank=True, null=True)
431
+    t4max = models.FloatField(blank=True, null=True)
432
+    t4diff = models.FloatField(blank=True, null=True)
433
+
434
+    class Meta:
435
+        managed = False
436
+        db_table = 'data_ms_LOT2210062522'
437
+        app_label = "legacy"
438
+
439
+class DataRl(models.Model):
440
+    row_no = models.IntegerField(blank=True, null=True)
441
+    avg = models.FloatField(blank=True, null=True)
442
+    grade = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
443
+    rgrade = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
444
+    r_type = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
445
+    p1 = models.FloatField(blank=True, null=True)
446
+    p2 = models.FloatField(blank=True, null=True)
447
+    p3 = models.FloatField(blank=True, null=True)
448
+    p4 = models.FloatField(blank=True, null=True)
449
+    p5 = models.FloatField(blank=True, null=True)
450
+    p6 = models.FloatField(blank=True, null=True)
451
+    p7 = models.FloatField(blank=True, null=True)
452
+    p8 = models.FloatField(blank=True, null=True)
453
+    p9 = models.FloatField(blank=True, null=True)
454
+    p10 = models.FloatField(blank=True, null=True)
455
+    created_at = models.DateTimeField(blank=True, null=True)
456
+    updated_at = models.DateTimeField(blank=True, null=True)
457
+    lot_no = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
458
+    ndata = models.IntegerField(blank=True, null=True)
459
+    sub_order = models.IntegerField(blank=True, null=True)
460
+    machine_id = models.IntegerField(blank=True, null=True)
461
+    code = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
462
+    header = models.CharField(max_length=10, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
463
+
464
+    class Meta:
465
+        managed = False
466
+        db_table = 'data_rl'
467
+        app_label = "legacy"
468
+
469
+
470
+class DataWb(models.Model):
471
+    row_no = models.IntegerField(blank=True, null=True)
472
+    result = models.FloatField(blank=True, null=True)
473
+    weight = models.FloatField(blank=True, null=True)
474
+    judgement = models.CharField(max_length=10, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
475
+    created_at = models.DateTimeField(blank=True, null=True)
476
+    updated_at = models.DateTimeField(blank=True, null=True)
477
+    lot_no = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
478
+    machine_id = models.IntegerField(blank=True, null=True)
479
+    code = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
480
+    emp_id = models.IntegerField(blank=True, null=True)
481
+    repair_by = models.CharField(max_length=30, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
482
+
483
+    class Meta:
484
+        managed = False
485
+        db_table = 'data_wb'
486
+        app_label = "legacy"
487
+
488
+
489
+class DataWbTest(models.Model):
490
+    row_no = models.IntegerField(blank=True, null=True)
491
+    result = models.FloatField(blank=True, null=True)
492
+    weight = models.FloatField(blank=True, null=True)
493
+    judgement = models.CharField(max_length=10, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
494
+    created_at = models.DateTimeField(blank=True, null=True)
495
+    updated_at = models.DateTimeField(blank=True, null=True)
496
+    lot_no = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
497
+    machine_id = models.IntegerField(blank=True, null=True)
498
+    code = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
499
+    emp_id = models.IntegerField(blank=True, null=True)
500
+    repair_by = models.CharField(max_length=30, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
501
+
502
+    class Meta:
503
+        managed = False
504
+        db_table = 'data_wb_test'
505
+        app_label = "legacy"
506
+
507
+
508
+class LoginTemps(models.Model):
509
+    empid = models.CharField(max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
510
+    password = models.CharField(max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
511
+    created_at = models.DateTimeField(blank=True, null=True)
512
+    updated_at = models.DateTimeField(blank=True, null=True)
513
+
514
+    class Meta:
515
+        managed = False
516
+        db_table = 'login_temps'
517
+        app_label = "legacy"
518
+
519
+
520
+class Lot(models.Model):
521
+    lot_no = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
522
+
523
+    class Meta:
524
+        managed = False
525
+        db_table = 'lot'
526
+
527
+
528
+class LotRl(models.Model):
529
+    lot_no = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
530
+
531
+    class Meta:
532
+        managed = False
533
+        db_table = 'lot_rl'
534
+        app_label = "legacy"
535
+
536
+
537
+class LotSummary(models.Model):
538
+    lot_no = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS')
539
+    created_at = models.DateTimeField()
540
+    avg = models.FloatField()
541
+    code = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS')
542
+    start_time = models.DateTimeField(blank=True, null=True)
543
+    end_time = models.DateTimeField(blank=True, null=True)
544
+    grade = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
545
+    machine_id = models.IntegerField(blank=True, null=True)
546
+    avg0 = models.FloatField(blank=True, null=True)
547
+    avg1 = models.FloatField(blank=True, null=True)
548
+    avg2 = models.FloatField(blank=True, null=True)
549
+    avg3 = models.FloatField(blank=True, null=True)
550
+    avg0_name = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
551
+    avg1_name = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
552
+    avg2_name = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
553
+    avg3_name = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
554
+
555
+    class Meta:
556
+        managed = False
557
+        db_table = 'lot_summary'
558
+        app_label = "legacy"
559
+
560
+
561
+class LotSummary20082018(models.Model):
562
+    lot_no = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS')
563
+    created_at = models.DateTimeField()
564
+    avg = models.FloatField()
565
+    code = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS')
566
+    start_time = models.DateTimeField(blank=True, null=True)
567
+    end_time = models.DateTimeField(blank=True, null=True)
568
+    grade = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
569
+    machine_id = models.IntegerField(blank=True, null=True)
570
+    avg0 = models.FloatField(blank=True, null=True)
571
+    avg1 = models.FloatField(blank=True, null=True)
572
+    avg2 = models.FloatField(blank=True, null=True)
573
+    avg3 = models.FloatField(blank=True, null=True)
574
+    avg0_name = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
575
+    avg1_name = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
576
+    avg2_name = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
577
+    avg3_name = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
578
+
579
+    class Meta:
580
+        managed = False
581
+        db_table = 'lot_summary (2008-2018)'
582
+        app_label = "legacy"
583
+
584
+
585
+class LotSummaryRl(models.Model):
586
+    lot_no = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS')
587
+    created_at = models.DateTimeField()
588
+    avg = models.FloatField()
589
+    code = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS')
590
+    start_time = models.DateTimeField(blank=True, null=True)
591
+    end_time = models.DateTimeField(blank=True, null=True)
592
+    grade = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
593
+    machine_id = models.IntegerField(blank=True, null=True)
594
+    avg0 = models.FloatField(blank=True, null=True)
595
+    avg1 = models.FloatField(blank=True, null=True)
596
+    avg2 = models.FloatField(blank=True, null=True)
597
+    avg3 = models.FloatField(blank=True, null=True)
598
+    avg0_name = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
599
+    avg1_name = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
600
+    avg2_name = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
601
+    avg3_name = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
602
+
603
+    class Meta:
604
+        managed = False
605
+        db_table = 'lot_summary_rl'
606
+        app_label = "legacy"
607
+
608
+
609
+class LotSummaryWb(models.Model):
610
+    lot_no = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS')
611
+    created_at = models.DateTimeField()
612
+    w_avg = models.FloatField()
613
+    wb_avg = models.FloatField()
614
+    cp = models.FloatField()
615
+    code = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS')
616
+    start_time = models.DateTimeField(blank=True, null=True)
617
+    end_time = models.DateTimeField(blank=True, null=True)
618
+    machine_id = models.IntegerField(blank=True, null=True)
619
+
620
+    class Meta:
621
+        managed = False
622
+        db_table = 'lot_summary_wb'
623
+        app_label = "legacy"
624
+
625
+
626
+class Machinegroup(models.Model):
627
+    groupname = models.CharField(db_column='groupName', max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
628
+
629
+    class Meta:
630
+        managed = False
631
+        db_table = 'machineGroup'
632
+        app_label = "legacy"
633
+
634
+
635
+class Machines(models.Model):
636
+    name = models.CharField(max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
637
+    description = models.TextField(db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
638
+    created_at = models.DateTimeField(blank=True, null=True)
639
+    updated_at = models.DateTimeField(blank=True, null=True)
640
+    tag_name = models.TextField(db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
641
+
642
+    class Meta:
643
+        managed = False
644
+        db_table = 'machines'
645
+        app_label = "legacy"
646
+
647
+
648
+class MachinesWb(models.Model):
649
+    name = models.TextField(db_collation='SQL_Latin1_General_CP1_CI_AS')
650
+    description = models.TextField(db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
651
+    created_at = models.DateTimeField()
652
+    updated_at = models.DateTimeField(blank=True, null=True)
653
+    tag_name = models.TextField(db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
654
+    ip = models.TextField(db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
655
+    isactive = models.BooleanField(db_column='isActive')  # Field name made lowercase.
656
+    machinestd = models.FloatField(db_column='machineStd', blank=True, null=True)  # Field name made lowercase.
657
+    groupid = models.ForeignKey(Machinegroup, models.DO_NOTHING, db_column='groupId', blank=True, null=True)  # Field name made lowercase.
658
+
659
+    class Meta:
660
+        managed = False
661
+        db_table = 'machines_wb'
662
+        app_label = "legacy"
663
+
664
+class Manualsize(models.Model):
665
+    lotno = models.CharField(db_column='lotNo', primary_key=True, max_length=20, db_collation='SQL_Latin1_General_CP1_CI_AS')  # Field name made lowercase. The composite primary key (lotNo, Size_Name) found, that is not supported. The first column is selected.
666
+    size_name = models.CharField(db_column='Size_Name', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS')  # Field name made lowercase.
667
+    std = models.FloatField(db_column='Std', blank=True, null=True)  # Field name made lowercase.
668
+    tolun = models.FloatField(db_column='TolUn', blank=True, null=True)  # Field name made lowercase.
669
+    tolup = models.FloatField(db_column='TolUp', blank=True, null=True)  # Field name made lowercase.
670
+    created_at = models.DateTimeField()
671
+    productcode = models.CharField(db_column='ProductCode', max_length=30, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
672
+
673
+    class Meta:
674
+        managed = False
675
+        db_table = 'manualSize'
676
+        unique_together = (('lotno', 'size_name'),)
677
+        app_label = "legacy"
678
+
679
+
680
+class PressCal(models.Model):
681
+    v0 = models.FloatField(blank=True, null=True)
682
+    lot_no = models.CharField(primary_key=True, max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS')
683
+    v1 = models.FloatField(blank=True, null=True)
684
+    v2 = models.FloatField(blank=True, null=True)
685
+    v3 = models.FloatField(blank=True, null=True)
686
+    v4 = models.FloatField(blank=True, null=True)
687
+    v5 = models.FloatField(blank=True, null=True)
688
+    v6 = models.FloatField(blank=True, null=True)
689
+    y0 = models.FloatField(blank=True, null=True)
690
+    y1 = models.FloatField(blank=True, null=True)
691
+    y2 = models.FloatField(blank=True, null=True)
692
+    ac1 = models.FloatField(blank=True, null=True)
693
+    ac2 = models.FloatField(blank=True, null=True)
694
+    ac3 = models.FloatField(blank=True, null=True)
695
+    ac4 = models.FloatField(blank=True, null=True)
696
+    ac5 = models.FloatField(blank=True, null=True)
697
+    ac6 = models.FloatField(blank=True, null=True)
698
+    ac7 = models.FloatField(blank=True, null=True)
699
+    r_result = models.FloatField(blank=True, null=True)
700
+    created_at = models.DateTimeField(blank=True, null=True)
701
+    updated_at = models.DateTimeField(blank=True, null=True)
702
+    c0 = models.FloatField()
703
+
704
+    class Meta:
705
+        managed = False
706
+        db_table = 'press_cal'
707
+        app_label = "legacy"
708
+
709
+
710
+class RotateData(models.Model):
711
+    row_no = models.IntegerField(blank=True, null=True)
712
+    speed_spec = models.FloatField(blank=True, null=True)
713
+    speed_test = models.FloatField(blank=True, null=True)
714
+    speedok = models.CharField(db_column='speedOk', max_length=4, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
715
+    qty = models.IntegerField()
716
+    station_no = models.IntegerField()
717
+    created_at = models.DateTimeField(blank=True, null=True)
718
+    updated_at = models.DateTimeField(blank=True, null=True)
719
+    lot_no = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
720
+    machine_id = models.IntegerField(blank=True, null=True)
721
+    code = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
722
+    emp_id = models.IntegerField()
723
+    devid = models.CharField(max_length=40, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
724
+    mode = models.CharField(max_length=10, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
725
+    cal_mode = models.IntegerField(blank=True, null=True)
726
+
727
+    class Meta:
728
+        managed = False
729
+        db_table = 'rotate_data'
730
+        app_label = "legacy"
731
+
732
+
733
+class SchemaMigrations(models.Model):
734
+    version = models.CharField(max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS')
735
+
736
+    class Meta:
737
+        managed = False
738
+        db_table = 'schema_migrations'
739
+
740
+
741
+class SplitData(models.Model):
742
+    data_ms = models.ForeignKey(DataMs, models.DO_NOTHING)
743
+    v1 = models.FloatField(blank=True, null=True)
744
+    v2 = models.FloatField(blank=True, null=True)
745
+    v3 = models.FloatField(blank=True, null=True)
746
+    v4 = models.FloatField(blank=True, null=True)
747
+    v5 = models.FloatField(blank=True, null=True)
748
+    unit = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
749
+    vr = models.FloatField(blank=True, null=True)
750
+    vname = models.CharField(max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
751
+    no = models.IntegerField()
752
+    v1ok = models.CharField(max_length=20, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
753
+    v2ok = models.CharField(max_length=20, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
754
+    v3ok = models.CharField(max_length=20, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
755
+    v4ok = models.CharField(max_length=20, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
756
+    v5ok = models.CharField(max_length=20, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
757
+    vmax = models.FloatField(blank=True, null=True)
758
+    vmin = models.FloatField(blank=True, null=True)
759
+    vdiff = models.FloatField(blank=True, null=True)
760
+    row_no = models.IntegerField(blank=True, null=True)
761
+
762
+    class Meta:
763
+        managed = False
764
+        db_table = 'split_data'
765
+        app_label = "legacy"
766
+
767
+
768
+class SysConfigs(models.Model):
769
+    title = models.CharField(max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
770
+    value = models.CharField(max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
771
+    created_at = models.DateTimeField(blank=True, null=True)
772
+    updated_at = models.DateTimeField(blank=True, null=True)
773
+
774
+    class Meta:
775
+        managed = False
776
+        db_table = 'sys_configs'
777
+        app_label = "legacy"
778
+
779
+
780
+class TbFgPressinfoLotlist(models.Model):
781
+    product_year = models.CharField(db_column='Product_Year', primary_key=True, max_length=10, db_collation='SQL_Latin1_General_CP1_CI_AS')  # Field name made lowercase. The composite primary key (Product_Year, ProductCode, LotNo) found, that is not supported. The first column is selected.
782
+    productcode = models.CharField(db_column='ProductCode', max_length=20, db_collation='SQL_Latin1_General_CP1_CI_AS')  # Field name made lowercase.
783
+    lotno = models.CharField(db_column='LotNo', max_length=20, db_collation='SQL_Latin1_General_CP1_CI_AS')  # Field name made lowercase.
784
+    lot_qty = models.FloatField(db_column='Lot_Qty', blank=True, null=True)  # Field name made lowercase.
785
+    def_qty = models.FloatField(db_column='Def_Qty', blank=True, null=True)  # Field name made lowercase.
786
+    fg_qty = models.FloatField(db_column='FG_Qty', blank=True, null=True)  # Field name made lowercase.
787
+    insp_date = models.DateTimeField(db_column='Insp_Date', blank=True, null=True)  # Field name made lowercase.
788
+    current_prono = models.CharField(db_column='Current_ProNo', max_length=5, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
789
+    press_mcname = models.CharField(db_column='Press_McName', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
790
+    press_username = models.CharField(db_column='Press_UserName', max_length=50, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)  # Field name made lowercase.
791
+
792
+    class Meta:
793
+        managed = False
794
+        db_table = 'tb_fg_pressinfo_lotlist'
795
+        unique_together = (('product_year', 'productcode', 'lotno'),)
796
+        app_label = "legacy"
797
+
798
+
799
+class TbWbStdCode12(models.Model):
800
+    id = models.IntegerField(db_column='ID', primary_key=True)  # Field name made lowercase.
801
+    u_weight = models.FloatField(db_column='U_Weight', blank=True, null=True)  # Field name made lowercase.
802
+    speed_from = models.FloatField(db_column='Speed_From', blank=True, null=True)  # Field name made lowercase.
803
+    speed_to = models.FloatField(db_column='Speed_To', blank=True, null=True)  # Field name made lowercase.
804
+    diameter_from = models.FloatField(db_column='Diameter_From', blank=True, null=True)  # Field name made lowercase.
805
+    diameter_to = models.FloatField(db_column='Diameter_To', blank=True, null=True)  # Field name made lowercase.
806
+    std_balance = models.FloatField(db_column='STD_Balance', blank=True, null=True)  # Field name made lowercase.
807
+
808
+    class Meta:
809
+        managed = False
810
+        db_table = 'tb_wb_std_code_1-2'
811
+        app_label = "legacy"
812
+
813
+
814
+class TbWbStdCode345(models.Model):
815
+    id = models.IntegerField(db_column='ID', primary_key=True)  # Field name made lowercase.
816
+    u_weight = models.FloatField(db_column='U_Weight', blank=True, null=True)  # Field name made lowercase.
817
+    speed_from = models.FloatField(db_column='Speed_From', blank=True, null=True)  # Field name made lowercase.
818
+    speed_to = models.FloatField(db_column='Speed_To', blank=True, null=True)  # Field name made lowercase.
819
+    diameter_from = models.FloatField(db_column='Diameter_From', blank=True, null=True)  # Field name made lowercase.
820
+    diameter_to = models.FloatField(db_column='Diameter_To', blank=True, null=True)  # Field name made lowercase.
821
+    std_balance = models.FloatField(db_column='STD_Balance', blank=True, null=True)  # Field name made lowercase.
822
+
823
+    class Meta:
824
+        managed = False
825
+        db_table = 'tb_wb_std_code_3-4-5'
826
+        app_label = "legacy"
827
+
828
+
829
+class LegacyUsers(models.Model):
830
+    email = models.CharField(max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
831
+    password_digest = models.CharField(max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
832
+    created_at = models.DateTimeField(blank=True, null=True)
833
+    updated_at = models.DateTimeField(blank=True, null=True)
834
+    roles_mask = models.IntegerField(blank=True, null=True)
835
+    empid = models.CharField(max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
836
+    fname = models.CharField(max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
837
+    lname = models.CharField(max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
838
+
839
+    class Meta:
840
+        managed = False
841
+        db_table = 'users'
842
+        app_label = "legacy"

+ 29 - 0
app/legacy/templates/legacy/data_confirm_delete.html

@@ -0,0 +1,29 @@
1
+{% extends "base.html" %}
2
+
3
+{% block title %}Confirm Delete{% endblock %}
4
+
5
+{% block content %}
6
+<div class="container mx-auto px-4 py-6">
7
+    <h1 class="text-2xl font-bold text-gray-800 mb-4">Confirm Deletion</h1>
8
+    <p class="text-gray-600 mb-4">
9
+        Are you sure you want to delete this item?
10
+    </p>
11
+
12
+    <!-- Display object details if needed -->
13
+    <div class="mb-4 p-4 bg-gray-100 rounded border border-gray-200">
14
+        <p><strong>ID:</strong> {{ object.id }}</p>
15
+        <p><strong>Details:</strong> {{ object }}</p>
16
+    </div>
17
+
18
+    <!-- Confirmation Buttons -->
19
+    <form method="post" class="inline-block" onsubmit="return confirm('Are you sure you want to delete this item?');">
20
+        {% csrf_token %}
21
+        <button type="submit" class="bg-red-500 text-white px-4 py-2 rounded hover:bg-red-600">
22
+            Delete
23
+        </button>
24
+    </form>
25
+    <a href="{% url 'legacy:data-list' %}" class="bg-gray-500 text-white px-4 py-2 rounded hover:bg-gray-600">
26
+        Cancel
27
+    </a>
28
+</div>
29
+{% endblock %}

+ 43 - 0
app/legacy/templates/legacy/data_form.html

@@ -0,0 +1,43 @@
1
+{% extends "base.html" %}
2
+
3
+{% load legacy_filters %}
4
+{% load tailwind_filters %}
5
+
6
+{% block title %}
7
+    {% if view.title %}
8
+        {{ view.title }}
9
+    {% else %}
10
+        {{ view|class_name }}
11
+    {% endif %}
12
+{% endblock %}
13
+
14
+{% block content %}
15
+<div class="container mx-auto px-4 py-6">
16
+    <h1 class="text-2xl font-bold mb-6">
17
+        {% if view.title %}
18
+            {{ view.title }}
19
+        {% elif view|class_name == "DataCreateView" %}
20
+            Create Data
21
+        {% else %}
22
+            Update Data
23
+        {% endif %}
24
+    </h1>
25
+
26
+    <!-- Render the Form -->
27
+    <form method="post" >
28
+        {% csrf_token %}
29
+        <div  class="flex flex-wrap items-center space-y-4 space-x-4">
30
+          
31
+        {{ form|crispy }}
32
+        </div>
33
+        <div class='mt-4'>
34
+            <button type="submit" class="bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600">
35
+                Save
36
+            </button>
37
+            <a href="{% url 'legacy:data-list' %}" class="bg-gray-300 text-gray-800 px-4 py-2 rounded hover:bg-gray-400">
38
+                Cancel
39
+            </a>
40
+        </div>
41
+    </form>
42
+</div>
43
+{% endblock %}

+ 91 - 0
app/legacy/templates/legacy/data_list.html

@@ -0,0 +1,91 @@
1
+{% extends "base.html" %}
2
+{% load legacy_filters %}
3
+{% load tailwind_filters %}
4
+{% block title %}Data List{% endblock %}
5
+
6
+{% block content %}
7
+<div class="container mx-auto px-4 py-6">
8
+    <h1 class="text-3xl font-bold text-gray-800 mb-4">Data List</h1>
9
+  
10
+
11
+     <!-- Filter Form -->
12
+    <form method="get" class="flex items-center space-x-4 mb-4">
13
+        {{ filter.form | crispy }}
14
+        <button type="submit" class="bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600">Filter</button>
15
+    </form>
16
+
17
+    <!-- Create Button -->
18
+    <div class="my-4 flex">
19
+       <p class="text-gray-600 mb-4 mr-auto">
20
+        Total Records: {{ page_obj.paginator.count }}
21
+    </p>
22
+        <a href="{% url 'legacy:data-create' %}" class="ml-auto bg-green-500 text-white px-4 py-2 rounded hover:bg-green-600">
23
+            Create New Data
24
+        </a>
25
+    </div>
26
+
27
+
28
+    
29
+    <!-- Data Table -->
30
+    <div class="clear-both bg-white shadow rounded-lg overflow-x-auto">
31
+
32
+        <table class="min-w-[2500px] table-auto w-full border-collapse border border-gray-200">
33
+            <thead>
34
+                <tr class="bg-gray-100 text-left text-sm uppercase">
35
+                    {% for field in fields %}
36
+                      <th class="border border-gray-200 px-4 py-2 text-left">{{ field.verbose_name }}</th>
37
+                    {% endfor %}
38
+                    <th class="py-2 px-4 border-b">Actions</th>
39
+                </tr>
40
+            </thead>
41
+            <tbody>
42
+                {% for obj in page_obj %}
43
+                    <tr class="hover:bg-gray-50">
44
+                        {% for field in fields %}
45
+                        <td class="border border-gray-200 px-4 py-2">
46
+                           {% if field.name == 'id' %}
47
+                              <a href="{% url 'legacy:data-update' obj.id %}" class="text-blue-500 hover:underline">
48
+                                  {{ obj|attr:field.name }}
49
+                              </a>
50
+                          {% else %}
51
+                             {{ obj|attr:field.name }}
52
+                          {% endif %}
53
+                        </td>
54
+                        {% endfor %}
55
+                        <td class="py-2 px-4 border-b">
56
+                            <a href="{% url 'legacy:data-update' obj.pk %}" 
57
+                              class="bg-blue-500 text-white px-3 py-2 rounded hover:bg-blue-600">Edit</a>
58
+                            <a href="{% url 'legacy:data-delete' obj.pk %}" 
59
+                              class="bg-red-500 text-white px-3 py-2 rounded hover:bg-red-600"
60
+                              >Delete</a>
61
+                        </td>
62
+                    </tr>
63
+                {% empty %}
64
+                    <tr>
65
+                        <td colspan="5" class="py-4 px-4 text-center text-gray-600">No data available.</td>
66
+                    </tr>
67
+                {% endfor %}
68
+            </tbody>
69
+        </table>
70
+    </div>
71
+
72
+    <!-- Pagination -->
73
+    <div class="mt-6 flex justify-between items-center">
74
+        <div>
75
+            <span class="text-sm text-gray-600">
76
+                Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}
77
+            </span>
78
+        </div>
79
+        <div class="space-x-2">
80
+            {% if page_obj.has_previous %}
81
+                <a href="?page=1" class="text-blue-500 hover:underline">First</a>
82
+                <a href="?page={{ page_obj.previous_page_number }}" class="text-blue-500 hover:underline">Previous</a>
83
+            {% endif %}
84
+            {% if page_obj.has_next %}
85
+                <a href="?page={{ page_obj.next_page_number }}" class="text-blue-500 hover:underline">Next</a>
86
+                <a href="?page={{ page_obj.paginator.num_pages }}" class="text-blue-500 hover:underline">Last</a>
87
+            {% endif %}
88
+        </div>
89
+    </div>
90
+</div>
91
+{% endblock %}

+ 0 - 0
app/legacy/templatetags/__init__.py


+ 29 - 0
app/legacy/templatetags/legacy_filters.py

@@ -0,0 +1,29 @@
1
+from django import template
2
+from django.template import Context
3
+
4
+
5
+register = template.Library()
6
+
7
+@register.filter
8
+def attr(obj, attr_name):
9
+    """
10
+    Retrieves an attribute of an object dynamically in the template.
11
+    """
12
+    return getattr(obj, attr_name, None)
13
+
14
+@register.filter
15
+def class_name(value):
16
+    """
17
+    Returns the class name of the given object.
18
+    """
19
+    return value.__class__.__name__
20
+
21
+@register.simple_tag(takes_context=True)
22
+def render_breadcrumbs(context, breadcrumbs):
23
+    """
24
+    Render breadcrumbs using a separate template file.
25
+    """
26
+    return context.template.engine.get_template('partials/breadcrumbs.html').render(
27
+    Context({
28
+        'breadcrumbs': breadcrumbs
29
+    }))

+ 3 - 0
app/legacy/tests.py

@@ -0,0 +1,3 @@
1
+from django.test import TestCase
2
+
3
+# Create your tests here.

+ 12 - 0
app/legacy/urls.py

@@ -0,0 +1,12 @@
1
+from django.urls import path
2
+from .views import DataListView, DataDetailView, DataCreateView, DataUpdateView, DataDeleteView
3
+
4
+app_name = 'legacy'  # Namespace for this app
5
+
6
+urlpatterns = [
7
+    path('data/', DataListView.as_view(), name='data-list'),            # data/
8
+    path('data/<int:pk>/', DataDetailView.as_view(), name='data-detail'),  # data/<pk>/
9
+    path('data/create/', DataCreateView.as_view(), name='data-create'), # data/create/
10
+    path('data/<int:pk>/update/', DataUpdateView.as_view(), name='data-update'),  # data/<pk>/update/
11
+    path('data/<int:pk>/delete/', DataDeleteView.as_view(), name='data-delete'),  # data/<pk>/delete/
12
+]

+ 113 - 0
app/legacy/views.py

@@ -0,0 +1,113 @@
1
+from django.shortcuts import render
2
+
3
+# Create your views here.
4
+from django_filters.views import FilterView
5
+from django.urls import reverse_lazy, reverse
6
+from django.views.generic import (
7
+    ListView,
8
+    DetailView,
9
+    CreateView,
10
+    UpdateView,
11
+    DeleteView,
12
+)
13
+from django.core.paginator import Paginator
14
+from .models import Data
15
+from .filters import DataFilter
16
+from django.urls import reverse
17
+from django.contrib import messages
18
+
19
+
20
+class DataListView(FilterView, ListView):
21
+    model = Data
22
+    template_name = 'legacy/data_list.html'
23
+    # context_object_name = 'data_list'
24
+    paginate_by = 10  # Enable pagination
25
+
26
+    # Specify the filter class
27
+    filterset_class = DataFilter
28
+
29
+
30
+    def get_context_data(self, **kwargs):
31
+        context = super().get_context_data(**kwargs)
32
+        # Pass model fields to the template
33
+        context['fields'] = [field for field in self.model._meta.get_fields()]
34
+        context['bs'] = [
35
+            {'label': 'Dashboard', 'url': reverse('dashboard:index')},
36
+            {'label': 'Data', 'url': reverse('legacy:data-list')},
37
+        ]
38
+        return context
39
+
40
+# Read (detail view)
41
+class DataDetailView(DetailView):
42
+    model = Data
43
+    template_name = 'data_detail.html'
44
+    context_object_name = 'data'  # Use this name in templates
45
+
46
+
47
+# Create
48
+class DataCreateView(CreateView):
49
+    model = Data
50
+    template_name = 'legacy/data_form.html'
51
+    fields = '__all__'  # Use all fields or specify a list of fields
52
+
53
+    def form_valid(self, form):
54
+        response = super().form_valid(form)
55
+        messages.success(self.request, "Data has been successfully created!")
56
+        return response
57
+    
58
+    def get_success_url(self):
59
+        # Redirect to the edit page of the newly created object
60
+        return reverse('legacy:data-update', kwargs={'pk': self.object.pk})
61
+
62
+
63
+    def get_context_data(self, **kwargs):
64
+        context = super().get_context_data(**kwargs)
65
+        # Pass model fields to the template
66
+        context['bs'] = [
67
+            {'label': 'Dashboard', 'url': reverse('dashboard:index')},
68
+            {'label': 'Data', 'url': reverse('legacy:data-list')},
69
+            {'label': 'Data Create', 'url': reverse('legacy:data-create')},
70
+        ]
71
+        return context
72
+
73
+# Update
74
+class DataUpdateView(UpdateView):
75
+    model = Data
76
+    template_name = 'legacy/data_form.html'
77
+    fields = '__all__'  # Use all fields or specify a list of fields
78
+    
79
+    def get_success_url(self):
80
+        # Redirect to the edit page of the newly created object
81
+        return reverse('legacy:data-update', kwargs={'pk': self.object.pk})
82
+
83
+    def form_valid(self, form):
84
+        response = super().form_valid(form)
85
+        messages.success(self.request, "Data has been successfully updated!")
86
+        return response
87
+
88
+
89
+    def get_context_data(self, **kwargs):
90
+        context = super().get_context_data(**kwargs)
91
+        # Pass model fields to the template
92
+        context['bs'] = [
93
+            {'label': 'Dashboard', 'url': reverse('dashboard:index')},
94
+            {'label': 'Data', 'url': reverse('legacy:data-list')},
95
+            {'label': self.object, 'url': reverse('legacy:data-update', kwargs={'pk':self.object.pk})},
96
+        ]
97
+        return context
98
+
99
+# Delete
100
+class DataDeleteView(DeleteView):
101
+    model = Data
102
+    template_name = 'legacy/data_confirm_delete.html'
103
+    success_url = reverse_lazy('legacy:data-list')  # Redirect after deletion
104
+
105
+    def get_context_data(self, **kwargs):
106
+        context = super().get_context_data(**kwargs)
107
+        # Pass model fields to the template
108
+        context['bs'] = [
109
+            {'label': 'Dashboard', 'url': reverse('dashboard:index')},
110
+            {'label': 'Data', 'url': reverse('legacy:data-list')},
111
+            {'label': self.object, 'url': reverse('legacy:data-update', kwargs={'pk':self.object.pk})},
112
+        ]
113
+        return context

+ 28 - 2
app/templates/base.html

@@ -1,6 +1,6 @@
1 1
 {% load static tailwind_tags %}
2 2
 {% load django_browser_reload %}
3
-
3
+{% load legacy_filters %}
4 4
 
5 5
 <!DOCTYPE html>
6 6
 <html lang="en">
@@ -71,7 +71,23 @@
71 71
 
72 72
     <!-- Main Content -->
73 73
     <div class="p-4 sm:ml-64">
74
-        <div class="mt-14">{% block content %}{% endblock %}</div>
74
+        <div class="mt-14">
75
+        {% if messages %}
76
+
77
+            <div class="container mx-auto px-4 py-4">
78
+                {% for message in messages %}
79
+                <div id="message-alert" 
80
+                     class="p-4 mb-4 text-white rounded-lg bg-green-500 transition-opacity duration-500"
81
+                     style="opacity: 1;">
82
+                  {{ message }}
83
+                </div>
84
+                {% endfor %}
85
+            </div>
86
+        {% endif %}
87
+
88
+          {% render_breadcrumbs bs %}
89
+          {% block content %}{% endblock %}
90
+        </div>
75 91
     </div>
76 92
 
77 93
     <!-- Footer -->
@@ -82,5 +98,15 @@
82 98
     <script src="https://cdn.jsdelivr.net/npm/flowbite@2.5.2/dist/flowbite.min.js"></script>
83 99
 
84 100
     {% django_browser_reload_script %}
101
+    <script>
102
+    // Auto-hide the message after 5 seconds
103
+    setTimeout(() => {
104
+        const alert = document.getElementById('message-alert');
105
+        if (alert) {
106
+            alert.style.opacity = '0'; // Fade out
107
+            setTimeout(() => alert.remove(), 500); // Remove after fade-out
108
+        }
109
+    }, 5000); // 5 seconds
110
+</script>
85 111
 </body>
86 112
 </html>

+ 37 - 0
app/templates/partials/breadcrumbs.html

@@ -0,0 +1,37 @@
1
+<nav class="flex" aria-label="Breadcrumb">
2
+    <ol class="inline-flex items-center space-x-1 md:space-x-2 rtl:space-x-reverse">
3
+        {% for crumb in breadcrumbs %}
4
+            {% if forloop.first %}
5
+                <!-- First breadcrumb (Home) -->
6
+                <li class="inline-flex items-center">
7
+                    <a href="{{ crumb.url }}" class="inline-flex items-center text-sm font-medium text-gray-700 hover:text-blue-600 dark:text-gray-400 dark:hover:text-white">
8
+                        <svg class="w-3 h-3 me-2.5" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20">
9
+                            <path d="m19.707 9.293-2-2-7-7a1 1 0 0 0-1.414 0l-7 7-2 2a1 1 0 0 0 1.414 1.414L2 10.414V18a2 2 0 0 0 2 2h3a1 1 0 0 0 1-1v-4a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v4a1 1 0 0 0 1 1h3a2 2 0 0 0 2-2v-7.586l.293.293a1 1 0 0 0 1.414-1.414Z"/>
10
+                        </svg>
11
+                        {{ crumb.label }}
12
+                    </a>
13
+                </li>
14
+            {% elif forloop.last %}
15
+                <!-- Last breadcrumb (Current Page) -->
16
+                <li aria-current="page">
17
+                    <div class="flex items-center">
18
+                        <svg class="rtl:rotate-180 w-3 h-3 text-gray-400 mx-1" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 6 10">
19
+                            <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 9 4-4-4-4"/>
20
+                        </svg>
21
+                        <span class="ms-1 text-sm font-medium text-gray-500 md:ms-2 dark:text-gray-400">{{ crumb.label }}</span>
22
+                    </div>
23
+                </li>
24
+            {% else %}
25
+                <!-- Intermediate breadcrumbs -->
26
+                <li>
27
+                    <div class="flex items-center">
28
+                        <svg class="rtl:rotate-180 w-3 h-3 text-gray-400 mx-1" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 6 10">
29
+                            <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 9 4-4-4-4"/>
30
+                        </svg>
31
+                        <a href="{{ crumb.url }}" class="ms-1 text-sm font-medium text-gray-700 hover:text-blue-600 md:ms-2 dark:text-gray-400 dark:hover:text-white">{{ crumb.label }}</a>
32
+                    </div>
33
+                </li>
34
+            {% endif %}
35
+        {% endfor %}
36
+    </ol>
37
+</nav>

+ 1 - 0
requirements.txt

@@ -46,3 +46,4 @@ xlrd
46 46
 seaborn
47 47
 django-browser-reload
48 48
 django-tailwind[reload]
49
+django-extensions

tum/tmt_learning - Gogs: Simplico Git Service

Keine Beschreibung

Prach Pongpanich 6f337d0a21 install tailwind alpine daisyui vor 2 Jahren
..
node_modules 6f337d0a21 install tailwind alpine daisyui vor 2 Jahren
out 6f337d0a21 install tailwind alpine daisyui vor 2 Jahren
LICENSE 6f337d0a21 install tailwind alpine daisyui vor 2 Jahren
README.md 6f337d0a21 install tailwind alpine daisyui vor 2 Jahren
package.json 6f337d0a21 install tailwind alpine daisyui vor 2 Jahren

README.md

fast-glob

It's a very fast and efficient glob library for Node.js.

This package provides methods for traversing the file system and returning pathnames that matched a defined set of a specified pattern according to the rules used by the Unix Bash shell with some simplifications, meanwhile results are returned in arbitrary order. Quick, simple, effective.

Table of Contents

Details

Highlights

  • Fast. Probably the fastest.
  • Supports multiple and negative patterns.
  • Synchronous, Promise and Stream API.
  • Object mode. Can return more than just strings.
  • Error-tolerant.

Donation

Do you like this project? Support it by donating, creating an issue or pull request.

Donate

Old and modern mode

This package works in two modes, depending on the environment in which it is used.

  • Old mode. Node.js below 10.10 or when the stats option is enabled.
  • Modern mode. Node.js 10.10+ and the stats option is disabled.

The modern mode is faster. Learn more about the internal mechanism.

Pattern syntax

:warning: Always use forward-slashes in glob expressions (patterns and ignore option). Use backslashes for escaping characters.

There is more than one form of syntax: basic and advanced. Below is a brief overview of the supported features. Also pay attention to our FAQ.

:book: This package uses a micromatch as a library for pattern matching.

Basic syntax

  • An asterisk (*) — matches everything except slashes (path separators), hidden files (names starting with .).
  • A double star or globstar (**) — matches zero or more directories.
  • Question mark (?) – matches any single character except slashes (path separators).
  • Sequence ([seq]) — matches any character in sequence.

:book: A few additional words about the basic matching behavior.

Some examples:

  • src/**/*.js — matches all files in the src directory (any level of nesting) that have the .js extension.
  • src/*.?? — matches all files in the src directory (only first level of nesting) that have a two-character extension.
  • file-[01].js — matches files: file-0.js, file-1.js.

Advanced syntax

:book: A few additional words about the advanced matching behavior.

Some examples:

  • src/**/*.{css,scss} — matches all files in the src directory (any level of nesting) that have the .css or .scss extension.
  • file-[[:digit:]].js — matches files: file-0.js, file-1.js, …, file-9.js.
  • file-{1..3}.js — matches files: file-1.js, file-2.js, file-3.js.
  • file-(1|2) — matches files: file-1.js, file-2.js.

Installation

npm install fast-glob

API

Asynchronous

fg(patterns, [options])

Returns a Promise with an array of matching entries.

const fg = require('fast-glob');

const entries = await fg(['.editorconfig', '**/index.js'], { dot: true });

// ['.editorconfig', 'services/index.js']

Synchronous

fg.sync(patterns, [options])

Returns an array of matching entries.

const fg = require('fast-glob');

const entries = fg.sync(['.editorconfig', '**/index.js'], { dot: true });

// ['.editorconfig', 'services/index.js']

Stream

fg.stream(patterns, [options])

Returns a ReadableStream when the data event will be emitted with matching entry.

const fg = require('fast-glob');

const stream = fg.stream(['.editorconfig', '**/index.js'], { dot: true });

for await (const entry of stream) {
	// .editorconfig
	// services/index.js
}

patterns

  • Required: true
  • Type: string | string[]

Any correct pattern(s).

:1234: Pattern syntax

:warning: This package does not respect the order of patterns. First, all the negative patterns are applied, and only then the positive patterns. If you want to get a certain order of records, use sorting or split calls.

[options]

See Options section.

Helpers

generateTasks(patterns, [options])

Returns the internal representation of patterns (Task is a combining patterns by base directory).

fg.generateTasks('*');

[{
    base: '.', // Parent directory for all patterns inside this task
    dynamic: true, // Dynamic or static patterns are in this task
    patterns: ['*'],
    positive: ['*'],
    negative: []
}]
patterns
  • Required: true
  • Type: string | string[]

Any correct pattern(s).

[options]

See Options section.

isDynamicPattern(pattern, [options])

Returns true if the passed pattern is a dynamic pattern.

:1234: What is a static or dynamic pattern?

fg.isDynamicPattern('*'); // true
fg.isDynamicPattern('abc'); // false
pattern
  • Required: true
  • Type: string

Any correct pattern.

[options]

See Options section.

escapePath(pattern)

Returns a path with escaped special characters (*?|(){}[], ! at the beginning of line, @+! before the opening parenthesis).

fg.escapePath('!abc'); // \\!abc
fg.escapePath('C:/Program Files (x86)'); // C:/Program Files \\(x86\\)
pattern
  • Required: true
  • Type: string

Any string, for example, a path to a file.

Options

Common options

concurrency

  • Type: number
  • Default: os.cpus().length

Specifies the maximum number of concurrent requests from a reader to read directories.

:book: The higher the number, the higher the performance and load on the file system. If you want to read in quiet mode, set the value to a comfortable number or 1.

cwd

  • Type: string
  • Default: process.cwd()

The current working directory in which to search.

deep

  • Type: number
  • Default: Infinity

Specifies the maximum depth of a read directory relative to the start directory.

For example, you have the following tree:

dir/
└── one/            // 1
    └── two/        // 2
        └── file.js // 3
// With base directory
fg.sync('dir/**', { onlyFiles: false, deep: 1 }); // ['dir/one']
fg.sync('dir/**', { onlyFiles: false, deep: 2 }); // ['dir/one', 'dir/one/two']

// With cwd option
fg.sync('**', { onlyFiles: false, cwd: 'dir', deep: 1 }); // ['one']
fg.sync('**', { onlyFiles: false, cwd: 'dir', deep: 2 }); // ['one', 'one/two']

:book: If you specify a pattern with some base directory, this directory will not participate in the calculation of the depth of the found directories. Think of it as a cwd option.

followSymbolicLinks

  • Type: boolean
  • Default: true

Indicates whether to traverse descendants of symbolic link directories when expanding ** patterns.

:book: Note that this option does not affect the base directory of the pattern. For example, if ./a is a symlink to directory ./b and you specified ['./a**', './b/**'] patterns, then directory ./a will still be read.

:book: If the stats option is specified, the information about the symbolic link (fs.lstat) will be replaced with information about the entry (fs.stat) behind it.

fs

  • Type: FileSystemAdapter
  • Default: fs.*

Custom implementation of methods for working with the file system.

export interface FileSystemAdapter {
    lstat?: typeof fs.lstat;
    stat?: typeof fs.stat;
    lstatSync?: typeof fs.lstatSync;
    statSync?: typeof fs.statSync;
    readdir?: typeof fs.readdir;
    readdirSync?: typeof fs.readdirSync;
}

ignore

  • Type: string[]
  • Default: []

An array of glob patterns to exclude matches. This is an alternative way to use negative patterns.

dir/
├── package-lock.json
└── package.json
fg.sync(['*.json', '!package-lock.json']);            // ['package.json']
fg.sync('*.json', { ignore: ['package-lock.json'] }); // ['package.json']

suppressErrors

  • Type: boolean
  • Default: false

By default this package suppress only ENOENT errors. Set to true to suppress any error.

:book: Can be useful when the directory has entries with a special level of access.

throwErrorOnBrokenSymbolicLink

  • Type: boolean
  • Default: false

Throw an error when symbolic link is broken if true or safely return lstat call if false.

:book: This option has no effect on errors when reading the symbolic link directory.

Output control

absolute

  • Type: boolean
  • Default: false

Return the absolute path for entries.

fg.sync('*.js', { absolute: false }); // ['index.js']
fg.sync('*.js', { absolute: true });  // ['/home/user/index.js']

:book: This option is required if you want to use negative patterns with absolute path, for example, !${__dirname}/*.js.

markDirectories

  • Type: boolean
  • Default: false

Mark the directory path with the final slash.

fg.sync('*', { onlyFiles: false, markDirectories: false }); // ['index.js', 'controllers']
fg.sync('*', { onlyFiles: false, markDirectories: true });  // ['index.js', 'controllers/']

objectMode

  • Type: boolean
  • Default: false

Returns objects (instead of strings) describing entries.

fg.sync('*', { objectMode: false }); // ['src/index.js']
fg.sync('*', { objectMode: true });  // [{ name: 'index.js', path: 'src/index.js', dirent: <fs.Dirent> }]

The object has the following fields:

  • name (string) — the last part of the path (basename)
  • path (string) — full path relative to the pattern base directory
  • dirent (fs.Dirent) — instance of fs.Dirent

:book: An object is an internal representation of entry, so getting it does not affect performance.

onlyDirectories

  • Type: boolean
  • Default: false

Return only directories.

fg.sync('*', { onlyDirectories: false }); // ['index.js', 'src']
fg.sync('*', { onlyDirectories: true });  // ['src']

:book: If true, the onlyFiles option is automatically false.

onlyFiles

  • Type: boolean
  • Default: true

Return only files.

fg.sync('*', { onlyFiles: false }); // ['index.js', 'src']
fg.sync('*', { onlyFiles: true });  // ['index.js']

stats

  • Type: boolean
  • Default: false

Enables an object mode with an additional field:

  • stats (fs.Stats) — instance of fs.Stats
fg.sync('*', { stats: false }); // ['src/index.js']
fg.sync('*', { stats: true });  // [{ name: 'index.js', path: 'src/index.js', dirent: <fs.Dirent>, stats: <fs.Stats> }]

:book: Returns fs.stat instead of fs.lstat for symbolic links when the followSymbolicLinks option is specified.

:warning: Unlike object mode this mode requires additional calls to the file system. On average, this mode is slower at least twice. See old and modern mode for more details.

unique

  • Type: boolean
  • Default: true

Ensures that the returned entries are unique.

fg.sync(['*.json', 'package.json'], { unique: false }); // ['package.json', 'package.json']
fg.sync(['*.json', 'package.json'], { unique: true });  // ['package.json']

If true and similar entries are found, the result is the first found.

Matching control

braceExpansion

  • Type: boolean
  • Default: true

Enables Bash-like brace expansion.

:1234: Syntax description or more detailed description.

dir/
├── abd
├── acd
└── a{b,c}d
fg.sync('a{b,c}d', { braceExpansion: false }); // ['a{b,c}d']
fg.sync('a{b,c}d', { braceExpansion: true });  // ['abd', 'acd']

caseSensitiveMatch

  • Type: boolean
  • Default: true

Enables a case-sensitive mode for matching files.

dir/
├── file.txt
└── File.txt
fg.sync('file.txt', { caseSensitiveMatch: false }); // ['file.txt', 'File.txt']
fg.sync('file.txt', { caseSensitiveMatch: true });  // ['file.txt']

dot

  • Type: boolean
  • Default: false

Allow patterns to match entries that begin with a period (.).

:book: Note that an explicit dot in a portion of the pattern will always match dot files.

dir/
├── .editorconfig
└── package.json
fg.sync('*', { dot: false }); // ['package.json']
fg.sync('*', { dot: true });  // ['.editorconfig', 'package.json']

extglob

  • Type: boolean
  • Default: true

Enables Bash-like extglob functionality.

:1234: Syntax description.

dir/
├── README.md
└── package.json
fg.sync('*.+(json|md)', { extglob: false }); // []
fg.sync('*.+(json|md)', { extglob: true });  // ['README.md', 'package.json']

globstar

  • Type: boolean
  • Default: true

Enables recursively repeats a pattern containing **. If false, ** behaves exactly like *.

dir/
└── a
    └── b
fg.sync('**', { onlyFiles: false, globstar: false }); // ['a']
fg.sync('**', { onlyFiles: false, globstar: true });  // ['a', 'a/b']

baseNameMatch

  • Type: boolean
  • Default: false

If set to true, then patterns without slashes will be matched against the basename of the path if it contains slashes.

dir/
└── one/
    └── file.md
fg.sync('*.md', { baseNameMatch: false }); // []
fg.sync('*.md', { baseNameMatch: true });  // ['one/file.md']

FAQ

What is a static or dynamic pattern?

All patterns can be divided into two types:

  • static. A pattern is considered static if it can be used to get an entry on the file system without using matching mechanisms. For example, the file.js pattern is a static pattern because we can just verify that it exists on the file system.
  • dynamic. A pattern is considered dynamic if it cannot be used directly to find occurrences without using a matching mechanisms. For example, the * pattern is a dynamic pattern because we cannot use this pattern directly.

A pattern is considered dynamic if it contains the following characters ( — any characters or their absence) or options:

  • The caseSensitiveMatch option is disabled
  • \\ (the escape character)
  • *, ?, ! (at the beginning of line)
  • […]
  • (…|…)
  • @(…), !(…), *(…), ?(…), +(…) (respects the extglob option)
  • {…,…}, {…..…} (respects the braceExpansion option)

How to write patterns on Windows?

Always use forward-slashes in glob expressions (patterns and ignore option). Use backslashes for escaping characters. With the cwd option use a convenient format.

Bad

[
	'directory\\*',
	path.join(process.cwd(), '**')
]

Good

[
	'directory/*',
	path.join(process.cwd(), '**').replace(/\\/g, '/')
]

:book: Use the normalize-path or the unixify package to convert Windows-style path to a Unix-style path.

Read more about matching with backslashes.

Why are parentheses match wrong?

dir/
└── (special-*file).txt
fg.sync(['(special-*file).txt']) // []

Refers to Bash. You need to escape special characters:

fg.sync(['\\(special-*file\\).txt']) // ['(special-*file).txt']

Read more about matching special characters as literals.

How to exclude directory from reading?

You can use a negative pattern like this: !**/node_modules or !**/node_modules/**. Also you can use ignore option. Just look at the example below.

first/
├── file.md
└── second/
    └── file.txt

If you don't want to read the second directory, you must write the following pattern: !**/second or !**/second/**.

fg.sync(['**/*.md', '!**/second']);                 // ['first/file.md']
fg.sync(['**/*.md'], { ignore: ['**/second/**'] }); // ['first/file.md']

:warning: When you write !**/second/**/* it means that the directory will be read, but all the entries will not be included in the results.

You have to understand that if you write the pattern to exclude directories, then the directory will not be read under any circumstances.

How to use UNC path?

You cannot use Uniform Naming Convention (UNC) paths as patterns (due to syntax), but you can use them as cwd directory.

fg.sync('*', { cwd: '\\\\?\\C:\\Python27' /* or //?/C:/Python27 */ });
fg.sync('Python27/*', { cwd: '\\\\?\\C:\\' /* or //?/C:/ */ });

Compatible with node-glob?

node-glob fast-glob
cwd cwd
root
dot dot
nomount
mark markDirectories
nosort
nounique unique
nobrace braceExpansion
noglobstar globstar
noext extglob
nocase caseSensitiveMatch
matchBase baseNameMatch
nodir onlyFiles
ignore ignore
follow followSymbolicLinks
realpath
absolute absolute

Benchmarks

Server

Link: Vultr Bare Metal

You can see results here for latest release.

Nettop

Link: Zotac bi323

You can see results here for latest release.

Changelog

See the Releases section of our GitHub project for changelog for each release version.

License

This software is released under the terms of the MIT license.