def new_job(request): # LOGGEDIN, ADMIN form = new_job_form if request.method == 'POST': form = new_job_form(request.POST) if form.is_valid(): Name = form.cleaned_data['Name'] Email = form.cleaned_data['Email'] Phone = form.cleaned_data['Phone'] Address = form.cleaned_data['Address'] Note = form.cleaned_data['Note'] job_id = re.sub('\s+', '', Address) job = Jobs.objects.create(name=Name, email=Email, phone=Phone, address=Address, job_id=job_id) Notes.objects.create(Title='First Note', Text=Note, job=job) return redirect(reverse('job', kwargs={'job_id': job_id})) if check_permissions(request, 2) == True: pass else: return check_permissions(request, 2) return check_and_render(request, 'Jobs/new_job_form.html', {'form': form})
def purchase_orders(request, order_no=None): if order_no: purchase_order = Purchase_orders.objects.filter(id=order_no).first() purchase_order_no = purchase_order.id+4000 item_list = [] for item in Items.objects.filter(PO=purchase_order): item_list.append(item) context = { 'purchase_order':purchase_order, 'item_list':item_list, 'purchase_order_no':purchase_order_no, 'update_PO_supplier_ref_form':update_PO_supplier_ref_form } if check_permissions(request, 2) == True: pass else: return check_permissions(request, 2) return check_and_render(request, 'Item_Flow/purchase_order.html', context) if request.method == 'POST': form = purchase_order_choice_form(request.POST) if form.is_valid(): purchase_order = form.cleaned_data['purchase_order_number'] return redirect(reverse('purchase_orders', kwargs={'order_no':purchase_order.id})) context = { 'purchase_order_choice_form':purchase_order_choice_form } if check_permissions(request, 2) == True: pass else: return check_permissions(request, 2) return check_and_render(request, 'Item_Flow/purchase_orders.html', context)
def homepage(request): #LOGGEDIN NOW = settings.NOW next_PO_number = Purchase_orders.objects.count() + 4001 all_delivery_items = [] this_week_delivery_items = [] today_delivery_items = [] for item in Items.objects.filter( status='ORDERED', delivery_location='shop' ): #when something is marked as 'in showroom' it doesn't reappear if item.delivery_date == NOW.strftime('%Y-%m-%d'): today_delivery_items.append(item) this_week_delivery_items.append(item) elif convert_to_date( item.delivery_date).isocalendar()[1] == NOW.isocalendar()[1]: this_week_delivery_items.append(item) elif convert_to_date(item.delivery_date) >= NOW: all_delivery_items.append(item) admin_notes = [] job_notes = [] for note in Notes.objects.all(): if note.job == None: admin_notes.append(note) else: job_notes.append(note) context = { 'today_delivery_items': today_delivery_items, 'this_week_delivery_items': this_week_delivery_items, 'all_delivery_items': all_delivery_items, 'reject_delivery_form': reject_delivery_form, 'shopping_list_items': Shopping_list_items.objects.all(), 'new_shopping_list_item_form': new_shopping_list_item_form, 'admin_notes': admin_notes, 'job_notes': job_notes, 'new_note_form': new_note_form, 'purchase_order_form': purchase_order_form, 'next_PO_number': next_PO_number, } return check_and_render(request, 'Home_Panel/home.html', context)
def shopping_list(request, function=None): #acquired will post to pk link # there are only two places where the shopping list form is visible to the user, in the shopping list page or on the homepage. # This function handles the shopping list page as well as the creation of new shopping list items from both the home page's form and the shopping list page's form. # NOTE - this breaks SRP, needs refracting. if request.method == 'POST': if function == 'create': form = new_shopping_list_item_form(request.POST) if form.is_valid(): description = form.cleaned_data['description'] quantity = form.cleaned_data['quantity'] job = form.cleaned_data['job'] Shopping_list_items.objects.create(description=description, quantity=quantity, job=job) elif function == 'create_homepage': # seperated here so that it redirects back to home page form = new_shopping_list_item_form(request.POST) if form.is_valid(): description = form.cleaned_data['description'] quantity = form.cleaned_data['quantity'] job = form.cleaned_data['job'] Shopping_list_items.objects.create(description=description, quantity=quantity, job=job) return redirect(reverse('homepage')) context = { 'new_shopping_list_item_form': new_shopping_list_item_form, 'shopping_list_items': Shopping_list_items.objects.all(), } return check_and_render(request, 'Shopping_list/shopping_list.html', context)
def jobs(request): # LOGGEDIN perm_level = request.session['perm_level'] ongoing_jobs = [] for job in Jobs.objects.filter(status='ongoing'): ongoing_jobs.append(job) completed_jobs = [] for job in Jobs.objects.filter(status='completed'): completed_jobs.append(job) quote_jobs = [] for job in Jobs.objects.filter(status='quote'): quote_jobs.append(job) context = { 'ongoing_jobs': ongoing_jobs, 'completed_jobs': completed_jobs, 'quote_jobs': quote_jobs, 'perm_level': perm_level, } return check_and_render(request, 'Jobs/jobs.html', context)
def delete_job(request): if check_permissions(request, 3) == True: pass else: return check_permissions(request, 3) context = {'delete_job_form': delete_job_form} if request.method == 'POST': form = delete_job_form(request.POST) if form.is_valid(): delete_job_address = form.cleaned_data['job_deletion_selection'] security_field_1 = form.cleaned_data['security_field_1'] security_field_2 = form.cleaned_data['security_field_2'] if str(delete_job_address) == str(security_field_1) == str( security_field_2): job = Jobs.objects.filter(address=delete_job_address).first() Shopping_list_items_to_delete = Shopping_list_items.objects.filter( job=job) Acquired_items_to_delete = Items.objects.filter( job=job).filter(status='ACQUIRED') Notes_to_delete = Notes.objects.filter(job=job) Schedule_items_to_delete = Scheduled_items.objects.filter( job=job) for item in Shopping_list_items_to_delete: item.delete() for item in Acquired_items_to_delete: item.delete() for item in Notes_to_delete: item.delete() for item in Schedule_items_to_delete: item.delete() Purchase_order_items_left = Items.objects.filter(job=job) for item in Purchase_order_items_left: item.job = None item.description = f'{item.description} --> {job.address}' item.save() job.delete() messages.add_message(request, messages.INFO, f'{job.address} JOB DELETED') return redirect(reverse('homepage')) else: messages.add_message( request, messages.INFO, 'security fields did not match, nothing deleted') return redirect(reverse('delete_job')) else: print(form.errors) # for test debugging return check_and_render(request, 'Jobs/delete_job.html', context)
def job(request, job_id): # LOGGEDIN NOW = settings.NOW perm_level = request.session['perm_level'] job = Jobs.objects.filter(job_id=job_id).first() next_PO_number = Purchase_orders.objects.count() + 4001 #-- NOTES --# notes = Notes.objects.filter(job=job).order_by('-Timestamp') #-- PROFILE --# if job.status == 'quote': job_colour = 'WHITE_PROFILE_BOX' elif job.status == 'ongoing': job_colour = 'ULTRAMARINE_BLUE_PROFILE_BOX' elif job.status=='completed': job_colour = 'FAINT_BLUE_PROFILE_BOX' #-- SCHEDULE OF ITEMS --# scheduled_items = Scheduled_items.objects.filter(job=job).order_by('date_1') #-- SITE MANAGEMENT --# needed_items = [] for item in scheduled_items: # if item.date_1 - NOW <= timedelta(days=7): needed_items.append(item) for item in Shopping_list_items.objects.filter(job=job): needed_items.append(item) en_route_items = [] for item in Items.objects.filter(job=job, status='ORDERED'): # later add 'arrived' status en_route_items.append(item) for item in Items.objects.filter(job=job, status='ACQUIRED'): en_route_items.append(item) for item in Items.objects.filter(job=job, status='IN SHOWROOM'): en_route_items.append(item) on_site_items = [] for item in Items.objects.filter(job=job, status='ON-SITE'): on_site_items.append(item) context = { 'job':job, 'profile_colour':job_colour, 'now':NOW, 'next_PO_number': next_PO_number, 'perm_level':perm_level, 'new_note_form':new_note_form, 'new_scheduled_item_form':new_scheduled_item_form, 'update_date_form':update_scheduled_item_date_form, 'purchase_order_form':purchase_order_form, 'new_shopping_list_item_form':new_shopping_list_item_form, 'notes':notes, 'scheduled_items':scheduled_items, 'needed_items':needed_items, 'en_route_items':en_route_items, 'on_site_items':on_site_items } return check_and_render(request, 'Jobs_Panel/job.html', context)