PDF fixes, and working on models andstlying django side

This commit is contained in:
Tyrel Souza 2023-09-18 14:01:34 -04:00
parent 87922787c9
commit 13bbc4705a
No known key found for this signature in database
GPG Key ID: F3614B02ACBE438E
13 changed files with 471 additions and 246 deletions

View File

@ -279,7 +279,7 @@ namespace BenchtopPDF
table.Cell().Element(CellStyle).AlignRight().Text($"{masterValue.LowLimit / 1000.0:F3}"); table.Cell().Element(CellStyle).AlignRight().Text($"{masterValue.LowLimit / 1000.0:F3}");
table.Cell().Element(CellStyle).AlignRight().Text($"{masterValue.HighLimit / 1000.0:F3}"); table.Cell().Element(CellStyle).AlignRight().Text($"{masterValue.HighLimit / 1000.0:F3}");
table.Cell().Element(CellStyle).AlignRight().Text($"{value / 1000.0:F3}"); table.Cell().Element(CellStyle).AlignRight().Text($"{value / 1000.0:F3}");
table.Cell().Element(CellStyle).AlignRight().Text($"{delta / 1000.0:F3}"); table.Cell().Element(CellStyle).AlignRight().Text($"---");
} }

View File

@ -1,14 +1,8 @@
from django.contrib import admin from django.contrib import admin
from sheets.models import ( from .models import (
Configuration,
Sheet Sheet
) )
class ConfigurationAdmin(admin.ModelAdmin):
pass
admin.site.register(Configuration, ConfigurationAdmin)
class SheetAdmin(admin.ModelAdmin): class SheetAdmin(admin.ModelAdmin):
pass pass

View File

@ -3,18 +3,48 @@ from django.forms.widgets import ClearableFileInput
from django.db import models from django.db import models
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from sheets.models import Configuration, Sheet from .models import Sheet
class SheetForm(forms.ModelForm): class SheetForm(forms.ModelForm):
class Meta: class Meta:
model = Sheet model = Sheet
fields = ["instrument", "customer_name", "customer_address", "control_number", "serial_number", "accuracy", "barometric_pressure", "temperature", "humidity", "report_type", "as_found", "as_left", "both", "configuration",] fields = [
"customer_name",
"onsite_cal",
"control_doc",
"technician",
"instrument_model",
"serial_number",
"channel",
"transducer_model",
"transducer_span",
"calibration_serial",
"calibration_model",
"calibration_date",
"calibration_due_date",
"calibration_cert_id",
"accuracy",
"barometric_pressure",
"temperature",
"humidity",
"report_type",
"as_found",
"as_left",
"both",
]
widgets = { widgets = {
"accuracy": forms.NumberInput(attrs={'step': 0.01}), "accuracy": forms.NumberInput(attrs={'step': 0.01}),
"barometric_pressure": forms.NumberInput(attrs={'step': 0.01, 'max': 1100, 'min': 800}), "barometric_pressure": forms.NumberInput(attrs={'step': 0.01, 'max': 1100, 'min': 800}),
"temperature": forms.NumberInput(attrs={'step': 0.01, 'max': 1000.0, 'min': -459.67}), "temperature": forms.NumberInput(attrs={'step': 0.01, 'max': 1000.0, 'min': -459.67}),
"humidity": forms.NumberInput(attrs={'step': 0.01, 'max': 100.0, 'min': 0.0}), "humidity": forms.NumberInput(attrs={'step': 0.01, 'max': 100.0, 'min': 0.0}),
"calibration_date": forms.SelectDateWidget(),
"calibration_due_date": forms.SelectDateWidget(),
} }
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
@ -30,4 +60,3 @@ class SheetForm(forms.ModelForm):
}) })
else: else:
field.widget.attrs.update({'v-model': name}) field.widget.attrs.update({'v-model': name})

View File

@ -1,30 +1,38 @@
# Generated by Django 4.2.3 on 2023-07-26 18:12 # Generated by Django 4.2.5 on 2023-09-18 17:03
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
initial = True
dependencies = [] dependencies = [
]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name="Configuration", name='Sheet',
fields=[ fields=[
( ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
"id", ('customer_name', models.CharField(max_length=256)),
models.BigAutoField( ('customer_address', models.CharField(max_length=256)),
auto_created=True, ('serial_number', models.CharField(max_length=256)),
primary_key=True, ('accuracy', models.FloatField()),
serialize=False, ('barometric_pressure', models.FloatField()),
verbose_name="ID", ('temperature', models.FloatField()),
), ('humidity', models.FloatField()),
), ('report_type', models.CharField(choices=[('TV', 'Transducer Verify'), ('HC', 'Hardware Calibration')], max_length=256)),
("serial", models.CharField(max_length=100)), ('as_found', models.FileField(blank=True, upload_to='')),
("device", models.CharField(max_length=100)), ('as_left', models.FileField(blank=True, upload_to='')),
("calibration_date", models.DateField()), ('both', models.FileField(blank=True, upload_to='')),
("calibration_due_date", models.DateField()), ('calibration_cert_id', models.CharField(default=0, max_length=100)),
('calibration_date', models.DateField(default=0)),
('calibration_due_date', models.DateField(default=0)),
('calibration_model', models.CharField(default=0, max_length=100)),
('calibration_serial', models.CharField(default=0, max_length=100)),
('channel', models.CharField(default=0, max_length=256)),
('instrument_model', models.CharField(default=0, max_length=256)),
('transducer_model', models.CharField(default=0, max_length=256)),
('transducer_span', models.CharField(default=0, max_length=256)),
], ],
), ),
] ]

View File

@ -0,0 +1,58 @@
# Generated by Django 4.2.5 on 2023-09-18 17:03
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sheets', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='sheet',
name='calibration_cert_id',
field=models.CharField(max_length=100),
),
migrations.AlterField(
model_name='sheet',
name='calibration_date',
field=models.DateField(),
),
migrations.AlterField(
model_name='sheet',
name='calibration_due_date',
field=models.DateField(),
),
migrations.AlterField(
model_name='sheet',
name='calibration_model',
field=models.CharField(max_length=100),
),
migrations.AlterField(
model_name='sheet',
name='calibration_serial',
field=models.CharField(max_length=100),
),
migrations.AlterField(
model_name='sheet',
name='channel',
field=models.CharField(max_length=256),
),
migrations.AlterField(
model_name='sheet',
name='instrument_model',
field=models.CharField(max_length=256),
),
migrations.AlterField(
model_name='sheet',
name='transducer_model',
field=models.CharField(max_length=256),
),
migrations.AlterField(
model_name='sheet',
name='transducer_span',
field=models.CharField(max_length=256),
),
]

View File

@ -1,56 +0,0 @@
# Generated by Django 4.2.3 on 2023-07-26 19:33
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("sheets", "0001_initial"),
]
operations = [
migrations.CreateModel(
name="Sheet",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("instrument", models.CharField(max_length=256)),
("customer_name", models.CharField(max_length=256)),
("customer_address", models.CharField(max_length=256)),
("control_number", models.CharField(max_length=256)),
("serial_number", models.CharField(max_length=256)),
("accuracy", models.FloatField()),
("barometric_pressure", models.FloatField()),
("temperature", models.FloatField()),
("humidity", models.FloatField()),
(
"report_type",
models.CharField(
choices=[
("TV", "Transducer Verify"),
("HC", "Hardware Calibration"),
],
max_length=256,
),
),
("as_found", models.FileField(upload_to="")),
("as_left", models.FileField(upload_to="")),
("both", models.FileField(upload_to="")),
(
"configuration",
models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT,
to="sheets.configuration",
),
),
],
),
]

View File

@ -1,36 +0,0 @@
# Generated by Django 4.2.3 on 2023-07-26 20:34
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("sheets", "0002_sheet"),
]
operations = [
migrations.AlterField(
model_name="sheet",
name="as_found",
field=models.FileField(blank=True, upload_to=""),
),
migrations.AlterField(
model_name="sheet",
name="as_left",
field=models.FileField(blank=True, upload_to=""),
),
migrations.AlterField(
model_name="sheet",
name="both",
field=models.FileField(blank=True, upload_to=""),
),
migrations.RemoveField(
model_name="sheet",
name="configuration",
),
migrations.AddField(
model_name="sheet",
name="configuration",
field=models.ManyToManyField(to="sheets.configuration"),
),
]

View File

@ -0,0 +1,34 @@
# Generated by Django 4.2.5 on 2023-09-18 17:13
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sheets', '0002_alter_sheet_calibration_cert_id_and_more'),
]
operations = [
migrations.RemoveField(
model_name='sheet',
name='customer_address',
),
migrations.AddField(
model_name='sheet',
name='control_doc',
field=models.CharField(default=0, max_length=256),
preserve_default=False,
),
migrations.AddField(
model_name='sheet',
name='onsite_cal',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='sheet',
name='technician',
field=models.CharField(default=0, max_length=256),
preserve_default=False,
),
]

View File

@ -1,41 +1,41 @@
from django.db import models from django.db import models
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
# Create your models here.
class Configuration(models.Model):
serial = models.CharField(max_length=100)
device = models.CharField(max_length=100)
calibration_date = models.DateField()
calibration_due_date = models.DateField()
def __str__(self):
return f"{self.serial} {self.device} [{self.calibration_date} to {self.calibration_due_date}]"
class Sheet(models.Model): class Sheet(models.Model):
instrument = models.CharField(max_length=256) instrument_model = models.CharField(max_length=256)
customer_name = models.CharField(max_length=256)
customer_address = models.CharField(max_length=256)
control_number = models.CharField(max_length=256)
serial_number = models.CharField(max_length=256) serial_number = models.CharField(max_length=256)
channel = models.CharField(max_length=256)
transducer_model = models.CharField(max_length=256)
transducer_span = models.CharField(max_length=256)
customer_name = models.CharField(max_length=256)
onsite_cal = models.BooleanField(default=False)
control_doc = models.CharField(max_length=256)
technician = models.CharField(max_length=256)
accuracy = models.FloatField() accuracy = models.FloatField()
barometric_pressure = models.FloatField() barometric_pressure = models.FloatField()
temperature = models.FloatField() temperature = models.FloatField()
humidity = models.FloatField() humidity = models.FloatField()
calibration_serial = models.CharField(max_length=100)
calibration_model = models.CharField(max_length=100)
calibration_date = models.DateField()
calibration_due_date = models.DateField()
calibration_cert_id = models.CharField(max_length=100)
CHOICES = [ CHOICES = [
('TV', _('Transducer Verify')), ('TV', _('Transducer Verify')),
('HC', _('Hardware Calibration')) ('HC', _('Hardware Calibration'))
] ]
report_type = models.CharField(max_length=256, report_type = models.CharField(
max_length=256,
choices=CHOICES, choices=CHOICES,
) )
as_found = models.FileField(blank=True) as_found = models.FileField(blank=True)
as_left = models.FileField(blank=True) as_left = models.FileField(blank=True)
both = models.FileField(blank=True) both = models.FileField(blank=True)
configuration = models.ManyToManyField("Configuration")

View File

@ -2,6 +2,7 @@ import re
import json import json
from pprint import pprint from pprint import pprint
def in_range(index, value, master_values): def in_range(index, value, master_values):
return ( return (
master_values[index]["Low Limit"] <= value <= master_values[index]["High Limit"] master_values[index]["Low Limit"] <= value <= master_values[index]["High Limit"]

View File

@ -1,45 +1,165 @@
<html> <html lang="en">
<body class="app"> <head>
<!--? <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/foundation-sites@6.8.1/dist/css/foundation.min.css"-->
<!--? crossorigin="anonymous">-->
<!--? <script src="https://cdn.jsdelivr.net/npm/foundation-sites@6.8.1/dist/js/foundation.min.js"-->
<!--? crossorigin="anonymous"></script>-->
<script type="importmap">
{ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.min.js" integrity="sha384-cuYeSxntonz0PPNlHhBs68uyIAVpIIOZZ5JqeqvYYIcEL727kskC66kF92t6Xl2V" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
<script type="importmap">
{
"imports": { "imports": {
"vue": "https://cdnjs.cloudflare.com/ajax/libs/vue/3.2.41/vue.esm-browser.js" "vue": "https://cdnjs.cloudflare.com/ajax/libs/vue/3.2.41/vue.esm-browser.js"
} }
} }
</script> </script>
<style>
.app {
margin: auto;
align: center;
width: 50%;
}
</style>
</head>
<body class="app">
<div id="app"> <div id="app">
<form action="." method="post" enctype="multipart/form-data"> <form action="." method="post" enctype="multipart/form-data">
{% csrf_token %} {% csrf_token %}
<table> <table class="table table-striped">
<tdata> <thead>
<tr><td>Customer Name</td><td>{{ form.customer_name }}</td></tr> <tr>
<tr><td>Customer Address</td><td>{{ form.customer_address }}</td></tr> <th colspan="2"><h2>Customer</h2></th>
<tr><td colspan=2><hr></td></tr> </tr>
</thead>
<tbody>
<tr><td>Instrument</td><td>{{ form.instrument }}</td></tr> <tr>
<tr><td>Control Number</td><td>{{ form.control_number }}</td></tr> <td>Customer Name</td>
<tr><td>Serial Number</td><td>{{ form.serial_number }}</td></tr> <td>{{ form.customer_name }}</td>
<tr><td colspan=2><hr></td></tr> </tr>
<tr>
<td>On Site Calibration</td>
<td>{{ form.onsite_cal }}</td>
</tr>
<tr>
<td>Control Doc#</td>
<td>{{ form.control_doc }}</td>
</tr>
<tr>
<td>Technician</td>
<td>{{ form.technician }}</td>
</tr>
</tbody>
<tr><td>Accuracy</td><td>{{ form.accuracy }}</td></tr> <thead>
<tr><td>Barometric Pressure (mbar)</td><td>{{ form.barometric_pressure }}</td></tr> <tr>
<tr><td>Temperature (&deg;F)</td><td>{{ form.temperature }}</td></tr> <th colspan="2"><h2>Instrument</h2></th>
<tr><td>Humidity</td><td>{{ form.humidity }}</td></tr> </tr>
<tr><td colspan=2><hr></td></tr> </thead>
<tbody>
<tr>
<td>Model:</td>
<td>{{ form.instrument_model }}</td>
</tr>
<tr>
<td>Serial Number</td>
<td>{{ form.serial_number }}</td>
</tr>
<tr>
<td>Channel</td>
<td>{{ form.channel }}</td>
</tr>
<tr>
<td>Transducer Model:</td>
<td>{{ form.transducer_model }}</td>
</tr>
<tr>
<td>Transducer Span:</td>
<td>{{ form.transducer_span }}</td>
</tr>
</tbody>
<tr><td>Report Type</td><td>{{ form.report_type }}</td></tr> <thead>
<tr><td>Configuration(s)</td><td>{{ form.configuration }}</td></tr> <tr>
<tr><td colspan=2><hr></td></tr> <th colspan="2"><h2>Primary Calibration Device</h2></th>
</tr>
</thead>
<tbody>
<tr>
<td>Model</td>
<td>{{ form.calibration_model }}</td>
</tr>
<tr>
<td>Serial #</td>
<td>{{ form.calibration_serial }}</td>
</tr>
<tr>
<td>Cal Date</td>
<td>{{ form.calibration_date }}</td>
</tr>
<tr>
<td>Cal Due Date</td>
<td>{{ form.calibration_due_date }}</td>
</tr>
<tr>
<td>Cert ID</td>
<td>{{ form.calibration_cert_id }}</td>
</tr>
</tbody>
<thead>
<tr>
<th colspan="2"><h2>Environment</h2></th>
</tr>
</thead>
<tbody>
<tr><td>As Found: {{ form.as_found }}</td><td>As Left:{{ form.as_left }}</td></tr> <tr>
<tr><td colspan=2>One File: {{ form.both }}</td></tr> <td>Accuracy</td>
<tr><td colspan=2><hr></td></tr> <td>{{ form.accuracy }}</td>
<tr><td>&nbsp;</td><td align="right"><input type="submit" value="Generate PDF and Label"></td></tr> </tr>
<tr>
<td>Barometric Pressure (mbar)</td>
<td>{{ form.barometric_pressure }}</td>
</tr>
<tr>
<td>Temperature (&deg;F)</td>
<td>{{ form.temperature }}</td>
</tr>
<tr>
<td>Humidity</td>
<td>{{ form.humidity }}</td>
</tr>
</tbody>
</tdata> <thead>
<tr>
<th colspan="2"><h2>Report Uploads</h2></th>
</tr>
</thead>
<tbody>
<tr>
<td>Report Type</td>
<td>{{ form.report_type }}</td>
</tr>
<tr>
<td colspan=2>One File: {{ form.both }}</td>
</tr>
<tr>
<td>As Found: {{ form.as_found }}</td>
<td>As Left:{{ form.as_left }}</td>
</tr>
<tr>
<td>&nbsp;</td>
<td align="right"><input type="submit" value="Generate PDF and Label"></td>
</tr>
</tbody>
</table> </table>
</form> </form>
@ -47,40 +167,28 @@
{% verbatim %} {% verbatim %}
<script type="module"> <script type="module">
import { createApp, ref, reactive, computed } from 'vue' import {createApp, ref, reactive, computed} from 'vue'
// Vue.config.delimiters = ['${', '}']; // Vue.config.delimiters = ['${', '}'];
const vm = createApp({ const vm = createApp({
el: "#app", el: "#app",
data() { data() {
const instrument = "" const as_found = ""
const customer_name = "" const as_left = ""
const customer_address = "" const both = ""
const control_number = ""
const serial_number = ""
const accuracy = ref("0.5") const accuracy = ref("0.5")
const barometric_pressure = ref(1013.25) const barometric_pressure = ref(1013.25)
const temperature = ref("50") const temperature = ref("50")
const humidity = ref("50.0") const humidity = ref("50.0")
const report_type = ""
const as_found = ""
const as_left = ""
const both = ""
const show_as_found = reactive(true) const show_as_found = reactive(true)
const show_as_left = reactive(true) const show_as_left = reactive(true)
const show_both = reactive(true) const show_both = reactive(true)
return { return {
instrument,
customer_name,
customer_address,
control_number,
serial_number,
accuracy, accuracy,
barometric_pressure, barometric_pressure,
temperature, temperature,
humidity, humidity,
report_type,
as_found, as_found,
as_left, as_left,
both, both,
@ -93,26 +201,24 @@
this.watchFileInput(); this.watchFileInput();
}, },
methods: { methods: {
change_as_found: function(event) { change_as_found: function (event) {
console.log(this)
this.show_both = false this.show_both = false
}, },
change_as_left: function(event) { change_as_left: function (event) {
this.show_both = false this.show_both = false
}, },
change_both: function(event) { change_both: function (event) {
this.show_as_found = false this.show_as_found = false
this.show_as_left = false this.show_as_left = false
}, },
watchFileInput: function() { watchFileInput: function () {
// will notify a file input // will notify a file input
$('input[type="file"]').change(this.notifyFileInput.bind(this)); $('input[type="file"]').change(this.notifyFileInput.bind(this));
}, },
notifyFileInput: function(event) { notifyFileInput: function (event) {
var fileName = event.target.files[0].name;
// update file name value // update file name value
this.file = fileName; this.file = event.target.files[0].name;
} }
} }
}).mount("#app") }).mount("#app")

View File

@ -1,9 +1,9 @@
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.shortcuts import render from django.shortcuts import render
from .forms import SheetForm, SheetForm
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from .parsers import parse_transducer, parse_hardware_calibration
from .forms import SheetForm, SheetForm
from .parsers import parse_transducer, parse_hardware_calibration
def upload_file(request): def upload_file(request):
@ -23,7 +23,9 @@ def upload_file(request):
pass pass
else: else:
raise ValidationError("Please provide proper files") raise ValidationError("Please provide proper files")
return HttpResponseRedirect("/success/url/") f.save()
breakpoint()
return HttpResponseRedirect("/")
else: else:
form = SheetForm() form = SheetForm()
return render(request, "sheets/upload.html", {"form": form}) return render(request, "sheets/upload.html", {"form": form})

View File

@ -0,0 +1,85 @@
|| Transducer Verify Report ||
TRANSDUCER1
===============================================================
Transducer 1 CTS D34-442 115PSIA
Setpoint Pressure 1 0.000 psig
Setpoint Pressure 2 20.000 psig
Setpoint Pressure 3 40.000 psig
Setpoint Pressure 4 60.000 psig
Setpoint Pressure 5 80.000 psig
Setpoint Pressure 6 100.000 psig
Instrument Pressure 1 0.000 psig
Instrument Pressure 2 20.002 psig
Instrument Pressure 3 39.997 psig
Instrument Pressure 4 60.010 psig
Instrument Pressure 5 80.001 psig
Instrument Pressure 6 100.002 psig
Master Value 1 0.000 psig
Master Value 2 20.000 psig
Master Value 3 40.000 psig
Master Value 4 60.000 psig
Master Value 5 80.000 psig
Master Value 6 100.000 psig
Verify Date 07/20/22
Verify Time 11:20:26
TRANSDUCER2
===============================================================
Transducer 2 CTS A12-221 250SCCM
Setpoint Pressure 1 20.000 psig
Setpoint Pressure 2 20.000 psig
Setpoint Pressure 3 20.000 psig
Setpoint Pressure 4 20.000 psig
Setpoint Pressure 5 20.000 psig
Setpoint Pressure 6 20.000 psig
Setpoint Pressure 7 20.000 psig
Setpoint Pressure 8 20.000 psig
Setpoint Pressure 9 20.000 psig
Setpoint Pressure 10 20.000 psig
Setpoint Pressure 11 20.000 psig
Instrument Pressure 1 20.154 psig
Instrument Pressure 2 20.153 psig
Instrument Pressure 3 20.152 psig
Instrument Pressure 4 20.150 psig
Instrument Pressure 5 20.148 psig
Instrument Pressure 6 20.145 psig
Instrument Pressure 7 20.144 psig
Instrument Pressure 8 20.141 psig
Instrument Pressure 9 20.139 psig
Instrument Pressure 10 20.138 psig
Instrument Pressure 11 20.136 psig
Instrument Flow 1 -0.082 sccm
Instrument Flow 2 24.802 sccm
Instrument Flow 3 49.664 sccm
Instrument Flow 4 74.836 sccm
Instrument Flow 5 99.416 sccm
Instrument Flow 6 125.289 sccm
Instrument Flow 7 150.205 sccm
Instrument Flow 8 175.290 sccm
Instrument Flow 9 200.165 sccm
Instrument Flow 10 224.748 sccm
Instrument Flow 11 249.825 sccm
Master Reading 1 0.000 sccm
Master Reading 2 25.000 sccm
Master Reading 3 50.000 sccm
Master Reading 4 75.000 sccm
Master Reading 5 100.000 sccm
Master Reading 6 125.000 sccm
Master Reading 7 150.000 sccm
Master Reading 8 175.000 sccm
Master Reading 9 200.000 sccm
Master Reading 10 225.000 sccm
Master Reading 11 250.000 sccm
Master Value 1 0.000 sccm
Master Value 2 25.000 sccm
Master Value 3 50.000 sccm
Master Value 4 75.000 sccm
Master Value 5 100.000 sccm
Master Value 6 125.000 sccm
Master Value 7 150.000 sccm
Master Value 8 175.000 sccm
Master Value 9 200.000 sccm
Master Value 10 225.000 sccm
Master Value 11 250.000 sccm
Verify Date 07/15/21
Verify Time 14:55:10