Skip to content

Commit

Permalink
Initial refactor of serial number functions to .env variables
Browse files Browse the repository at this point in the history
  • Loading branch information
ethanandrews committed Nov 4, 2019
1 parent ec50826 commit 44c9aaf
Show file tree
Hide file tree
Showing 5 changed files with 100 additions and 47 deletions.
14 changes: 14 additions & 0 deletions .envs.example/.local/.django
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,20 @@ REDIS_URL=redis://redis:6379/0
# ------------------------------------------------------------------------------
DJANGO_SECRET_KEY=9vgy4xpSMfbmesHKI5mJjZn2V6tHZhQHgSmvAoGzq4HnLpX1LagUTGiYwHJQNWCo

# Roundabout Specific Django settings
# ------------------------------------------------------------------------------

# Settings for initial superuser creation
DJANGO_SU_NAME=admin
[email protected]
DJANGO_SU_PASSWORD=admin

# Settings for serial number generation functions
# Default pattern - "1, 2, 3, ... etc."
RDB_SERIALNUMBER_CREATE=True

# Recommended OOI pattern - Part Number + "-20001" fragment
RDB_SERIALNUMBER_OOI_DEFAULT_PATTERN=True

# Short numbers for cable labels - Part Number + "-01" fragment
RDB_SERIALNUMBER_OOI_WETCABLE_PATTERN=False
23 changes: 18 additions & 5 deletions .envs.example/.production/.django
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,6 @@ DJANGO_SECRET_KEY=9vgy4xpSMfbmesHKI5mJjZn2V6tHZhQHgSmvAoGzq4HnLpX1LagUTGiYwHJQNW
DJANGO_ADMIN_URL=admin-django/
DJANGO_ALLOWED_HOSTS=.roundabout.whoi.edu,.localhost

# Set default super user creds on app start up
DJANGO_SU_NAME=admin
[email protected]
DJANGO_SU_PASSWORD=admin

# Security
# ------------------------------------------------------------------------------
# TIP: better off using DNS, however, redirect is OK too
Expand Down Expand Up @@ -40,3 +35,21 @@ WEB_CONCURRENCY=4
# Redis
# ------------------------------------------------------------------------------
REDIS_URL=redis://redis:6379/0

# Roundabout Specific Django settings
# ------------------------------------------------------------------------------

# Settings for initial superuser creation
DJANGO_SU_NAME=admin
[email protected]
DJANGO_SU_PASSWORD=admin

# Settings for serial number generation functions
# Default pattern - "1, 2, 3, ... etc."
RDB_SERIALNUMBER_CREATE=True

# Recommended OOI pattern - Part Number + "-20001" fragment
RDB_SERIALNUMBER_OOI_DEFAULT_PATTERN=True

# Short numbers for cable labels - Part Number + "-01" fragment
RDB_SERIALNUMBER_OOI_WETCABLE_PATTERN=False
15 changes: 11 additions & 4 deletions roundabout/inventory/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@
from roundabout.locations.models import Location
from roundabout.parts.models import Part, Revision
from roundabout.userdefinedfields.models import FieldValue
# Import environment variables from .env files
import environ
env = environ.Env()


class InventoryForm(forms.ModelForm):
Expand Down Expand Up @@ -89,10 +92,14 @@ def __init__(self, *args, **kwargs):


class InventoryAddForm(forms.ModelForm):
serial_number = forms.CharField(strip=True,
help_text='Serial Number auto-generated. Click here to override.',
widget=forms.TextInput(attrs={'readonly':'readonly'}),
)
RDB_SERIALNUMBER_CREATE = env.bool('RDB_SERIALNUMBER_CREATE', default=False)
if RDB_SERIALNUMBER_CREATE:
serial_number = forms.CharField(strip=True,
help_text='Serial Number auto-generated. Click here to override.',
widget=forms.TextInput(attrs={'readonly':'readonly'}),
)
else:
serial_number = forms.CharField(strip=True)

class Meta:
model = Inventory
Expand Down
91 changes: 55 additions & 36 deletions roundabout/inventory/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@
from roundabout.assemblies.models import AssemblyPart
from roundabout.builds.models import Build, BuildAction
from common.util.mixins import AjaxFormMixin

from django.contrib.sites.models import Site
current_site = Site.objects.get_current()
# Import environment variables from .env files
import environ
env = environ.Env()

# Mixins
# ------------------------------------------------------------------------------
Expand Down Expand Up @@ -244,43 +244,62 @@ def load_revisions_by_partnumber(request):

# Function to create Serial Number from Part Number search or Part Template selection , load result into form to preview
def load_new_serialnumber(request):
# Set pattern variables from .env configuration
RDB_SERIALNUMBER_CREATE = env.bool('RDB_SERIALNUMBER_CREATE', default=False)
RDB_SERIALNUMBER_OOI_DEFAULT_PATTERN = env.bool('RDB_SERIALNUMBER_OOI_DEFAULT_PATTERN', default=False)
RDB_SERIALNUMBER_OOI_WETCABLE_PATTERN = env.bool('RDB_SERIALNUMBER_OOI_WETCABLE_PATTERN', default=False)
print(RDB_SERIALNUMBER_CREATE)

# Set variables from JS request
part_number = request.GET.get('part_number')
part_id = request.GET.get('part_id')
new_serial_number = ''

if RDB_SERIALNUMBER_CREATE:
if part_number or part_id:
if part_number:
part_obj = Part.objects.filter(part_number__icontains=part_number).first()

if part_id:
part_obj = Part.objects.get(id=part_id)

if part_obj:
if RDB_SERIALNUMBER_OOI_DEFAULT_PATTERN:
# Check if this a Cable, set the serial number variables accordingly
if RDB_SERIALNUMBER_OOI_WETCABLE_PATTERN and part_obj.part_type.name == 'Cable':
regex = '^(.*?)-[a-zA-Z0-9_]{2}$'
fragment_length = 2
fragment_default = '01'
else:
regex = '^(.*?)-[a-zA-Z0-9_]{5}$'
fragment_length = 5
fragment_default = '20001'
else:
# Basic default serial number pattern (1,2,3,... etc.)
regex = '^(.*?)'
fragment_length = False
fragment_default = '1'

inventory_qs = Inventory.objects.filter(part=part_obj).filter(serial_number__iregex=regex)
if inventory_qs:
inventory_last = inventory_qs.latest('id')
last_serial_number_fragment = int(inventory_last.serial_number.split('-')[-1])
new_serial_number_fragment = last_serial_number_fragment + 1
# Fill fragment with leading zeroes if necessary
if fragment_length:
new_serial_number_fragment = str(new_serial_number_fragment).zfill(fragment_length)
else:
new_serial_number_fragment = fragment_default

if part_number or part_id:
if part_number:
part_obj = Part.objects.filter(part_number__icontains=part_number).first()

if part_id:
part_obj = Part.objects.get(id=part_id)
if RDB_SERIALNUMBER_OOI_DEFAULT_PATTERN:
new_serial_number = part_obj.part_number + '-' + str(new_serial_number_fragment)
else:
new_serial_number = str(new_serial_number_fragment)

if part_obj:
# Check if this a Cable, set the serial number variables accordingly
print(current_site.domain)
if current_site.domain == 'ooi-rdb.whoi.edu' and part_obj.part_type.name == 'Cable':
regex = '^(.*?)-[a-zA-Z0-9_]{2}$'
fragment_length = 2
fragment_default = '01'
else:
regex = '^(.*?)-[a-zA-Z0-9_]{5}$'
fragment_length = 5
fragment_default = '20001'

inventory_qs = Inventory.objects.filter(part=part_obj).filter(serial_number__iregex=regex)
if inventory_qs:
inventory_last = inventory_qs.latest('id')
last_serial_number_fragment = int(inventory_last.serial_number.split('-')[-1])
new_serial_number_fragment = last_serial_number_fragment + 1
# Fill fragment with leading zeroes if necessary
new_serial_number_fragment = str(new_serial_number_fragment).zfill(fragment_length)
else:
new_serial_number_fragment = fragment_default
new_serial_number = part_obj.part_number + '-' + str(new_serial_number_fragment)
else:
new_serial_number = ''
else:
new_serial_number = ''
return render(request, 'inventory/serial_number_input.html', {'new_serial_number': new_serial_number, })
data = {
'new_serial_number': new_serial_number,
}
return JsonResponse(data)


# Function to search subassembly options by serial number, load object
Expand Down
4 changes: 2 additions & 2 deletions roundabout/static/js/form-inventory-basic.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ $(document).ready(function() {
"part_number": partNumber
},
success: function (data) {
$("#div_id_serial_number div").html(data);
$('#id_serial_number').val(data.new_serial_number);
}
});
return false;
Expand Down Expand Up @@ -101,7 +101,7 @@ $(document).ready(function() {
"part_id": partID
},
success: function (data) {
$("#div_id_serial_number div").html(data);
$('#id_serial_number').val(data.new_serial_number);
}
});

Expand Down

0 comments on commit 44c9aaf

Please sign in to comment.