from django.shortcuts import render,redirect,get_object_or_404
# from .forms import NotesUserCreate,NotesListUpdate,NotesForm,NotesMediaFileForm,NotesImgForm,MyDocForm
from .forms import NotesListUpdate,NotesForm,NotesMediaFileForm,NotesImgForm,MyDocForm
from core.models import Account,Image
from .models import Notes,NotesMedia
from django.contrib import messages
from datetime import date,timedelta,datetime
from core.functions import get_account_name
from .functions import create_note,validate_uploaded_file_pdf,calc_note_score
from django.contrib.auth.decorators import login_required
import decimal
[docs]
@login_required(login_url='login')
def note_update(request, pk): # Display Note for update
# Update an existing note
#Important a note may be updated multiple times
# Remember the same note will be used for multiple wines
# get account details
account_name = get_account_name(request)
account_id= Account.objects.get(account=account_name)
myinstance = Notes.objects.get(id=pk)
try:
myfiles = NotesMedia.objects.filter(note=myinstance.id)
#myfile_count = NotesMedia.objects.filter(note=myinstance.id).count()
myfile_count=myfiles.count()
except:
myfile_count = '0'
print('try failed')
try:
icon = myinstance.image.url
default = 1
except:
icon = '/cellar/media/wine-images/default.jpeg'
default = 0
# Display an image of the wine if it exists
# Check if the Notes wine url is populated - and set flag for template
# Get existing Notes details for the form
update_form=NotesForm(instance=myinstance)
if request.method == 'POST':
notes_update = NotesListUpdate(request.POST,instance=myinstance,
initial={'account': account_id})
notes_update.type = myinstance.type
msg = myinstance.title
if notes_update.is_valid():
#Update notes with contents poted on form
notes_text = request.POST['notes']
notes_update.account = account_id
notes_update.save()
#Auto add the score to the note just saved
notes_score = Notes.objects.get(id=pk)
print('notes_score id =',notes_score.id)
notes_score.notes = str(calc_note_score(notes_score.id)) + notes_score.notes
#print ('score = ',notes_update.notes)
notes_score.save()
#add_notes_score.notes = score + add_notes_score.notes
#add_notes_score.save()
msg = msg + ' note updated.'
messages.success(request, msg)
# Redirect to the main list page and display success
response = redirect('notes:note_list')
return response
else:
context = {'form':notes_update,
'item':myinstance,
'icon':icon,
'default': default,
'myfiles': myfiles,
'myfile_count':myfile_count,
}
return render(request, 'notes/notes-form.html',context)
return render(request,'notes/notes-form.html',{
'form':update_form,
'item':myinstance,
'icon':icon,
'default':default,
'myfiles': myfiles,
'myfile_count':myfile_count,
})
[docs]
@login_required(login_url='login')
def note_list(request): # List all notes
#Added account 8 June
account_name = get_account_name(request)
account_id= Account.objects.get(account=account_name)
list=Notes.objects.filter(account=account_id.id).order_by('-last_update')
context = {"notes": list,
}
return render(request, 'notes/notes-list.html',context)
[docs]
@login_required(login_url='login')
def note_delete(request,id): # Delete a note
Notes.objects.filter(id=id).delete()
return redirect('notes:note_list')
[docs]
@login_required(login_url='login')
def list_wines(request):
wines = Notes.objects.all()
totalsize = 0
for s in wines:
totalsize = totalsize + s.image.size
totalsize = totalsize/1024/1024
totalsize = str(round(decimal(totalsize), 2))+' Mb'
context = {'wines':wines,'totalsize':totalsize}
return render(request,'/image_list.html',context)
[docs]
@login_required(login_url='login')
def delete_image(request,pk):
image = get_object_or_404(Notes,pk=pk)
image.image.delete()
return redirect('notes:list_wines')
[docs]
@login_required(login_url='login')
def attach_doc(request,id):# Add a PDF file to a note
try:
my_notes_instance = Notes.objects.get(pk=id)
except:
msg = 'The note id does not exist - unexpected error'
messages.error(request, msg)
return redirect('notes:note_list')
icon = my_notes_instance.image.url
if request.method == "POST":
# Fetching the form data
docname = request.POST["docname"]
uploadedfile = request.FILES["uploadedfile"]
#check mime type of uploaded file = pdf
if validate_uploaded_file_pdf(uploadedfile)==True:
# Add extra required fields
note=my_notes_instance
user =request.user
# Saving the information in the database
document = NotesMedia(note=note,
file=uploadedfile,
name=docname,
user = user
)
try:
document.save()
msg = docname + ' added successfully.'
messages.success(request, msg)
return redirect('notes:note_update', pk=my_notes_instance.id)
except:
msg = 'Unknown error saving ' + docname + ',upload failed.'
messages.error(request, msg)
return redirect('notes:note_update', pk=my_notes_instance.id)
else: # File not a PDF
msg = docname + ' not a pdf file, only valid pdf files can be uploaded.'
messages.error(request, msg)
return redirect('notes:note_update', pk=my_notes_instance.id)
return render(request, "notes/mydocform.html",context={"icon": icon,
'details':my_notes_instance
})