files, parsing, updates

This commit is contained in:
Tyrel Souza 2023-07-26 16:37:59 -04:00
parent 10a216a37d
commit bac7d9ac9d
No known key found for this signature in database
GPG Key ID: F3614B02ACBE438E
8 changed files with 198 additions and 35 deletions

View File

@ -1,3 +1,16 @@
from django.contrib import admin from django.contrib import admin
from sheets.models import (
Configuration,
Sheet
)
# Register your models here. class ConfigurationAdmin(admin.ModelAdmin):
pass
admin.site.register(Configuration, ConfigurationAdmin)
class SheetAdmin(admin.ModelAdmin):
pass
admin.site.register(Sheet, SheetAdmin)

View File

@ -3,35 +3,22 @@ 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
class UploadFileForm(forms.Form):
instrument = forms.CharField()
customer_name = forms.CharField()
customer_address = forms.CharField()
control_number = forms.CharField()
serial_number = forms.CharField()
accuracy = forms.FloatField(widget=forms.NumberInput(attrs={'step': 0.01}))
barometric_pressure = forms.FloatField(widget=forms.NumberInput(attrs={'step': 0.01, 'max': 1100, 'min': 800}))
temperature = forms.FloatField(widget=forms.NumberInput(attrs={'step': 0.01, 'max': 1000.0, 'min': -459.67}))
humidity = forms.FloatField(widget=forms.NumberInput(attrs={'step': 0.01, 'max': 100.0, 'min': 0.0}))
CHOICES = [ class SheetForm(forms.ModelForm):
('TV', _('Transducer Verify')), class Meta:
('HC', _('Hardware Calibration')) 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",]
widgets = {
report_type = forms.ChoiceField( "accuracy": forms.NumberInput(attrs={'step': 0.01}),
widget=forms.RadioSelect, "barometric_pressure": forms.NumberInput(attrs={'step': 0.01, 'max': 1100, 'min': 800}),
choices=CHOICES, "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}),
}
as_found = forms.FileField(required=False, widget=ClearableFileInput(attrs={'placeholder': ...}))
as_left = forms.FileField(required=False, widget=ClearableFileInput(attrs={'placeholder': ...}))
both = forms.FileField(required=False, widget=ClearableFileInput(attrs={'placeholder': ...}))
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(UploadFileForm, self).__init__(*args, **kwargs) super(SheetForm, self).__init__(*args, **kwargs)
for name, field in self.fields.items(): for name, field in self.fields.items():
# add v-model to each model field # add v-model to each model field
@ -42,4 +29,5 @@ class UploadFileForm(forms.Form):
'v-if': f"show_{name}" 'v-if': f"show_{name}"
}) })
else: else:
field.widget.attrs.update({'v-model': name}) field.widget.attrs.update({'v-model': name})

View File

@ -0,0 +1,30 @@
# Generated by Django 4.2.3 on 2023-07-26 18:12
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = []
operations = [
migrations.CreateModel(
name="Configuration",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("serial", models.CharField(max_length=100)),
("device", models.CharField(max_length=100)),
("calibration_date", models.DateField()),
("calibration_due_date", models.DateField()),
],
),
]

View File

@ -0,0 +1,56 @@
# 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

@ -0,0 +1,36 @@
# 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

@ -1,4 +1,5 @@
from django.db import models from django.db import models
from django.utils.translation import gettext_lazy as _
# Create your models here. # Create your models here.
@ -9,4 +10,32 @@ class Configuration(models.Model):
calibration_due_date = models.DateField() calibration_due_date = models.DateField()
def __str__(self): def __str__(self):
return f"{self.serial} {self.description}" return f"{self.serial} {self.device} [{self.calibration_date} to {self.calibration_due_date}]"
class Sheet(models.Model):
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()
CHOICES = [
('TV', _('Transducer Verify')),
('HC', _('Hardware Calibration'))
]
report_type = models.CharField(max_length=256,
choices=CHOICES,
)
as_found = models.FileField(blank=True)
as_left = models.FileField(blank=True)
both = models.FileField(blank=True)
configuration = models.ManyToManyField("Configuration")

View File

@ -49,7 +49,7 @@ def parse_calibration_data(text):
return calibration_data return calibration_data
def parse_hardware_calibration(content): def parse_hardware_calibration(content, accuracy):
# Split the content into instrument info and calibration data sections # Split the content into instrument info and calibration data sections
info_section, calibration_section = content.split( info_section, calibration_section = content.split(
"|| Hardware Calibration Report ||" "|| Hardware Calibration Report ||"

View File

@ -1,18 +1,29 @@
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.shortcuts import render from django.shortcuts import render
from .forms import UploadFileForm from .forms import SheetForm, SheetForm
from django.core.exceptions import ValidationError
from .parsers import parse_transducer, parse_hardware_calibration from .parsers import parse_transducer, parse_hardware_calibration
def upload_file(request): def upload_file(request):
if request.method == "POST": if request.method == "POST":
breakpoint() f = SheetForm(request.POST, request.FILES)
f = UploadFileForm(request.POST, request.FILES)
if f.is_valid(): if f.is_valid():
data = f.clean() data = f.clean()
content = request.FILES['file'].read() as_found = request.FILES.get('as_found')
as_left = request.FILES.get('as_left')
both = request.FILES.get('both')
if both:
if data['report_type'] == "TV":
tv = parse_transducer(both.read().decode(), data['accuracy'])
else:
hc = parse_hardware_calibration(both.read().decode(), data['accuracy'])
elif as_found and as_left:
pass
else:
raise ValidationError("Please provide proper files")
return HttpResponseRedirect("/success/url/") return HttpResponseRedirect("/success/url/")
else: else:
form = UploadFileForm() form = SheetForm()
return render(request, "sheets/upload.html", {"form": form}) return render(request, "sheets/upload.html", {"form": form})