Skip to content

Instantly share code, notes, and snippets.

@AlekseyA
Created August 8, 2018 15:11
Show Gist options
  • Select an option

  • Save AlekseyA/0c7ac3e60c675a77b28257996315fb82 to your computer and use it in GitHub Desktop.

Select an option

Save AlekseyA/0c7ac3e60c675a77b28257996315fb82 to your computer and use it in GitHub Desktop.
Django views
# some imports
@login_required
def provide_addinfo(request):
"""
Allows the user to provide a due date and any additional info for an order.
"""
if request.method == 'POST':
form = OrderForm(data=request.POST, request=request)
if form.is_valid(): # set session vars
request.session['due_date'] = request.POST.get('due_date', None)
request.session['shipping_date'] = request.POST.get('shipping_date', None)
request.session['po_number'] = request.POST.get('po_number', None)
request.session['additional_info'] = request.POST.get('additional_info', None)
request.session['cc_confirmation'] = request.POST.get('cc_confirmation', None)
file = request.FILES.get('upload_file', None)
if file:
path = handle_uploaded_file(file)
full_path = settings.BASE_DIR + path
request.session['upload_file'] = full_path
return HttpResponseRedirect(reverse('orders:confirm_order'))
else:
messages.warning(request, "e|There was a problem with your submission. \
Refer to the messages below and try again.")
else:
if 'upload_file' in request.session:
try:
os.remove(request.session['upload_file'])
except Exception as ex:
pass
request.session['upload_file'] = None
form = OrderForm(request=request)
if not (request.user.is_superuser or request.user.is_staff):
form.fields.pop('shipping_date')
return render(request, 'orders/provide_addinfo.html', {
'form': form,
})
@login_required
def confirm_order(request):
"""
Final step in the ordering process: shows the user a final order summary,
allows them to confirm and save/place the order.
"""
context = None
path = request.session.get('upload_file', None)
filename = None
if path:
filename = os.path.basename(request.session['upload_file'])
return render(request, 'orders/confirm_order.html', { 'filename': filename })
@login_required
@current_org_required
def order_list(request):
"""
If the user is a regular user, shows a list of orders placed by that user.
If the user is a manager, shows a list of all orders placed by members
of the active organization.
"""
org = request.session['current_org']
user_is_approval_manager = org.approval_manager == request.user
today = datetime.datetime.today()
cutoff = today - datetime.timedelta(days=21)
if user_is_approval_manager:
order_list = Order.objects.filter(org=org) #.filter(date__range=(cutoff, today))
else:
order_list = Order.objects.filter(placed_by__exact=request.user) #.filter(date__range=(cutoff, today))
return render(request, 'orders/order_list.html', {
'order_list': order_list,
'user_is_approval_manager': user_is_approval_manager,
})
@login_required
def process_order(request):
"""
Performs the steps necessary to save a new order:
creates and saves an order and any variable info,
subtracts inventory, send emails, clean up afterwards.
"""
if not request.session.get('cart', None) \
or not request.session.get('shipto_address', None) \
or not request.session.get('due_date', None):
return HttpResponseRedirect(reverse('orders:confirm_order'))
order = save_new_order(request)
save_ordered_items(request, order)
send_order_emails(request, order)
delete_order_session_vars(request)
messages.success(request, "s|Your order has been successfully submitted.")
return HttpResponseRedirect(reverse('orders:order_confirmation', args=[order.id]))
@current_org_required
def save_new_order(request):
"""
Saves a new order.
Note this does not handle saving OrderedItemsor InventoryHistory events.
All necessary pieces of the order should exist as session variables.
"""
order = Order()
order.name = order.make_name()
order.placed_by = request.user
order.org = request.session['current_org']
order.status = 'ac' # active
order.date = datetime.datetime.now()
due_date_parts = request.session['due_date'].split("-")
order.due_date = datetime.date(int(due_date_parts[0]),
int(due_date_parts[1]),
int(due_date_parts[2])
)
if (request.user.is_staff or request.user.is_superuser) and request.session['shipping_date']:
try:
shipping_date_parts = request.session['shipping_date'].split("-")
order.shipping_date = datetime.date(int(shipping_date_parts[0]),
int(shipping_date_parts[1]),
int(shipping_date_parts[2])
)
except Exception:
pass
order.ship_to = request.session['shipto_address']
order.po_number = request.session['po_number']
order.additional_info = request.session['additional_info']
if 'upload_file' in request.session:
path = request.session['upload_file']
if path and os.path.isfile(path):
file = File(open(path, 'r'))
upload = create_upload(request, file)
try:
os.remove(request.session['upload_file'])
except Exception as ex:
pass
order.additional_file = upload
request.session['upload_file'] = None
order.save()
return order
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment