Exemple #1
0
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})
Exemple #2
0
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)
Exemple #3
0
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)
Exemple #4
0
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)
Exemple #5
0
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)
Exemple #6
0
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)
Exemple #7
0
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)