Created
August 8, 2018 15:11
-
-
Save AlekseyA/0c7ac3e60c675a77b28257996315fb82 to your computer and use it in GitHub Desktop.
Django views
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # 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