Merge pull request #557 from SchrodingersGat/save-user-data

Save user data
This commit is contained in:
Oliver 2019-09-24 08:04:24 +10:00 committed by GitHub
commit d247ea7589
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 47 additions and 15 deletions

View File

@ -238,6 +238,18 @@ class AjaxCreateView(AjaxMixin, CreateView):
- Handles form validation via AJAX POST requests
"""
def pre_save(self, **kwargs):
"""
Hook for doing something before the form is validated
"""
pass
def post_save(self, **kwargs):
"""
Hook for doing something with the created object after it is saved
"""
pass
def get(self, request, *args, **kwargs):
""" Creates form with initial data, and renders JSON response """
@ -255,26 +267,29 @@ class AjaxCreateView(AjaxMixin, CreateView):
- Return status info (success / failure)
"""
self.request = request
form = self.get_form()
self.form = self.get_form()
# Extra JSON data sent alongside form
data = {
'form_valid': form.is_valid(),
'form_valid': self.form.is_valid(),
}
if form.is_valid():
obj = form.save()
if self.form.is_valid():
self.pre_save()
self.object = self.form.save()
self.post_save()
# Return the PK of the newly-created object
data['pk'] = obj.pk
data['text'] = str(obj)
data['pk'] = self.object.pk
data['text'] = str(object)
try:
data['url'] = obj.get_absolute_url()
data['url'] = self.object.get_absolute_url()
except AttributeError:
pass
return self.renderJsonResponse(request, form, data)
return self.renderJsonResponse(request, self.form, data)
class AjaxUpdateView(AjaxMixin, UpdateView):

View File

@ -91,6 +91,12 @@ class PurchaseOrderCreate(AjaxCreateView):
return initials
def post_save(self, **kwargs):
# Record the user who created this purchase order
self.object.created_by = self.request.user
self.object.save()
class PurchaseOrderEdit(AjaxUpdateView):
""" View for editing a PurchaseOrder using a modal form """

View File

@ -129,13 +129,17 @@ class StockItem(models.Model):
else:
add_note = False
user = kwargs.pop('user', None)
add_note = add_note and kwargs.pop('note', True)
super(StockItem, self).save(*args, **kwargs)
if add_note:
# This StockItem is being saved for the first time
self.addTransactionNote(
'Created stock item',
None,
user,
notes="Created new stock item for part '{p}'".format(p=str(self.part)),
system=True
)
@ -466,7 +470,8 @@ class StockItem(models.Model):
if location:
new_item.location = location
new_item.save()
# The item already has a transaction history, don't create a new note
new_item.save(user=user, note=False)
# Copy entire transaction history
new_item.copyHistoryFrom(self)

View File

@ -792,6 +792,8 @@ class StockItemCreate(AjaxCreateView):
form = self.get_form()
data = {}
valid = form.is_valid()
if valid:
@ -850,7 +852,7 @@ class StockItemCreate(AjaxCreateView):
URL=data.get('URL'),
)
item.save()
item.save(user=request.user)
except ValidationError as e:
form.errors['serial_numbers'] = e.messages
@ -861,11 +863,15 @@ class StockItemCreate(AjaxCreateView):
# We need to call _post_clean() here because it is prevented in the form implementation
form.clean()
form._post_clean()
form.save()
item = form.save(commit=False)
item.save(user=request.user)
data = {
'form_valid': valid,
}
data['pk'] = item.pk
data['url'] = item.get_absolute_url()
data['success'] = _("Created new stock item")
data['form_valid'] = valid
return self.renderJsonResponse(request, form, data=data)