all a bit neater and now working
This commit is contained in:
@@ -3,7 +3,7 @@ from __future__ import division
|
||||
from __future__ import print_function
|
||||
from __future__ import unicode_literals
|
||||
from __future__ import unicode_literals, absolute_import
|
||||
|
||||
import uuid
|
||||
from django.utils.encoding import python_2_unicode_compatible
|
||||
|
||||
from django.db import models,IntegrityError
|
||||
@@ -119,6 +119,12 @@ class UserFullnameChoiceField(forms.ModelChoiceField):
|
||||
class PlannedSessionStepField(models.TextField):
|
||||
pass
|
||||
|
||||
def get_file_path(instance, filename):
|
||||
ext = filename.split('.')[-1]
|
||||
filename = "%s.%s" % (uuid.uuid4(), ext)
|
||||
return filename
|
||||
# return os.path.join(settings.MEDIA_ROOT, filename)
|
||||
|
||||
# model for configurable template field
|
||||
class TemplateListField(models.TextField):
|
||||
def __init__(self, *args, **kwargs):
|
||||
@@ -2311,7 +2317,7 @@ class PlannedSession(models.Model):
|
||||
|
||||
is_template = models.BooleanField(default=False)
|
||||
|
||||
fitfile = models.FileField(blank=True,null=True)
|
||||
fitfile = models.FileField(upload_to=get_file_path,blank=True,null=True)
|
||||
#steps_json = models.TextField(max_length=10000,default=None,blank=True,null=True)
|
||||
steps = PlannedSessionStepField(default={},null=True)
|
||||
interval_string = models.TextField(max_length=1000,default=None,blank=True,null=True,
|
||||
@@ -2354,8 +2360,6 @@ class PlannedSession(models.Model):
|
||||
"You must be a Self-Coach user or higher to create a planned session"
|
||||
)
|
||||
|
||||
|
||||
|
||||
# interval string
|
||||
if self.interval_string:
|
||||
dct = trainingparser.parsetodict(self.interval_string)
|
||||
@@ -2363,9 +2367,6 @@ class PlannedSession(models.Model):
|
||||
dct = trainingparser.tofitdict(dct)
|
||||
self.steps = dct
|
||||
|
||||
|
||||
|
||||
|
||||
# sort units
|
||||
if self.sessionmode == 'distance':
|
||||
if self.sessionunit not in ['m','km']:
|
||||
@@ -2403,42 +2404,19 @@ class PlannedSession(models.Model):
|
||||
self.preferreddate = self.startdate
|
||||
|
||||
#super(PlannedSession,self).save(*args, **kwargs)
|
||||
|
||||
|
||||
# read file
|
||||
if self.fitfile:
|
||||
if self.fitfile.name == 'False':
|
||||
self.fitfile = None
|
||||
else:
|
||||
steps = steps_read_fit(settings.MEDIA_ROOT+'/'+self.fitfile.name)
|
||||
self.steps = steps
|
||||
steps = steps_read_fit(os.path.join(settings.MEDIA_ROOT,self.fitfile.name))
|
||||
self.steps = steps
|
||||
|
||||
if self.steps and not self.fitfile:
|
||||
if self.pk is not None:
|
||||
filename = 'session'+encoder.encode_hex(self.pk)+'.fit'
|
||||
else:
|
||||
file = tempfile.NamedTemporaryFile(mode='w+b',suffix='.fit',dir=settings.MEDIA_ROOT)
|
||||
filename = file
|
||||
|
||||
|
||||
filename = 'aap.fit'
|
||||
filename = get_file_path(self,filename)
|
||||
steps = self.steps
|
||||
|
||||
try:
|
||||
steps['filename'] = settings.MEDIA_ROOT+'/'+filename
|
||||
except TypeError:
|
||||
try:
|
||||
steps['filename'] = filename.name
|
||||
except TypeError:
|
||||
steps = json.loads(steps)
|
||||
steps['filename'] = filename.name
|
||||
self.steps = steps
|
||||
steps['filename'] = os.path.join(settings.MEDIA_ROOT,filename)
|
||||
fitfile = steps_write_fit(steps)
|
||||
|
||||
|
||||
filelist = fitfile.split('/media/')
|
||||
|
||||
self.fitfile.name = filelist[-1]
|
||||
|
||||
self.fitfile.name = filename
|
||||
self.steps = steps
|
||||
print(self.fitfile.name,filename)
|
||||
|
||||
# calculate approximate distance
|
||||
if self.steps:
|
||||
@@ -2454,11 +2432,13 @@ class PlannedSession(models.Model):
|
||||
|
||||
super(PlannedSession,self).save(*args, **kwargs)
|
||||
|
||||
#@receiver(models.signals.pre_delete,sender=PlannedSession)
|
||||
#def auto_delete_fitfile_on_delete(send, instance, **kwargs):
|
||||
# if instance.fitfile:
|
||||
# if os.path.isfile(instance.fitfile):
|
||||
# os.remove(instance.fitfile)
|
||||
@receiver(models.signals.post_delete,sender=PlannedSession)
|
||||
def auto_delete_fitfile_on_delete(sender, instance, **kwargs):
|
||||
# delete CSV file
|
||||
if instance.fitfile:
|
||||
filename = os.path.join(settings.MEDIA_ROOT,instance.fitfile.name)
|
||||
if os.path.isfile(filename):
|
||||
os.remove(filename)
|
||||
|
||||
from django.core.validators import RegexValidator,validate_email
|
||||
|
||||
|
||||
@@ -431,57 +431,18 @@ def plannedsession_create_view(request,
|
||||
if request.method == 'POST':
|
||||
sessioncreateform = PlannedSessionForm(request.POST, request.FILES)
|
||||
if sessioncreateform.is_valid():
|
||||
cd = sessioncreateform.cleaned_data
|
||||
startdate = cd['startdate']
|
||||
enddate = cd['enddate']
|
||||
preferreddate = cd['preferreddate']
|
||||
sessiontype = cd['sessiontype']
|
||||
sessionmode = cd['sessionmode']
|
||||
criterium = cd['criterium']
|
||||
sessionsport = cd['sessionsport']
|
||||
sessionvalue = cd['sessionvalue']
|
||||
sessionunit = cd['sessionunit']
|
||||
comment = cd['comment']
|
||||
course = cd['course']
|
||||
name = cd['name']
|
||||
interval_string = cd['interval_string']
|
||||
fitfile = cd['fitfile']
|
||||
|
||||
if sessionunit == 'min':
|
||||
sessionmode = 'time'
|
||||
elif sessionunit in ['km','m']:
|
||||
sessionmode = 'distance'
|
||||
|
||||
ps = PlannedSession(
|
||||
name=name,
|
||||
startdate=startdate,
|
||||
enddate=enddate,
|
||||
preferreddate=preferreddate,
|
||||
course=course,
|
||||
sessiontype=sessiontype,
|
||||
sessionmode=sessionmode,
|
||||
sessionvalue=sessionvalue,
|
||||
sessionunit=sessionunit,
|
||||
sessionsport=sessionsport,
|
||||
comment=comment,
|
||||
criterium=criterium,
|
||||
interval_string=interval_string,
|
||||
manager=request.user)
|
||||
|
||||
ps = sessioncreateform.save(commit=False)
|
||||
ps.manager = request.user
|
||||
ps.save()
|
||||
|
||||
if sessioncreateform.cleaned_data['fitfile']:
|
||||
f = sessioncreateform.cleaned_data['fitfile']
|
||||
filename, path_and_filename = handle_uploaded_file(f)
|
||||
ps.fitfile = filename
|
||||
ps.save()
|
||||
|
||||
|
||||
|
||||
add_rower_session(r,ps)
|
||||
|
||||
|
||||
request.session['fstartdate'] = str(arrow.get(startdate))
|
||||
request.session['fenddate'] = str(arrow.get(enddate))
|
||||
request.session['fprefdate'] = str(arrow.get(preferreddate))
|
||||
request.session['fstartdate'] = str(arrow.get(ps.startdate))
|
||||
request.session['fenddate'] = str(arrow.get(ps.enddate))
|
||||
request.session['fprefdate'] = str(arrow.get(ps.preferreddate))
|
||||
|
||||
else:
|
||||
if 'fstartdate' in request.session:
|
||||
@@ -765,50 +726,10 @@ def plannedsession_teamcreate_view(request,
|
||||
|
||||
if sessioncreateform.is_valid() and sessionteamselectform.is_valid():
|
||||
cd = sessioncreateform.cleaned_data
|
||||
startdate = cd['startdate']
|
||||
enddate = cd['enddate']
|
||||
preferreddate = cd['preferreddate']
|
||||
sessiontype = cd['sessiontype']
|
||||
sessionmode = cd['sessionmode']
|
||||
criterium = cd['criterium']
|
||||
sessionvalue = cd['sessionvalue']
|
||||
sessionunit = cd['sessionunit']
|
||||
sessionsport = cd['sessionsport']
|
||||
comment = cd['comment']
|
||||
course = cd['course']
|
||||
name = cd['name']
|
||||
interval_string = cd['interval_string']
|
||||
fitfile = cd['fitfile']
|
||||
|
||||
|
||||
if sessionunit == 'min':
|
||||
sessionmode = 'time'
|
||||
elif sessionunit in ['km','m']:
|
||||
sessionmode = 'distance'
|
||||
|
||||
ps = PlannedSession(
|
||||
name=name,
|
||||
startdate=startdate,
|
||||
enddate=enddate,
|
||||
preferreddate=preferreddate,
|
||||
sessiontype=sessiontype,
|
||||
sessionmode=sessionmode,
|
||||
sessionsport=sessionsport,
|
||||
sessionvalue=sessionvalue,
|
||||
sessionunit=sessionunit,
|
||||
comment=comment,
|
||||
criterium=criterium,
|
||||
course=course,
|
||||
interval_string=interval_string,
|
||||
fitfile=fitfile,
|
||||
manager=request.user)
|
||||
|
||||
ps = sessioncreateform.save(commit=False)
|
||||
ps.manager = request.user
|
||||
ps.save()
|
||||
if fitfile:
|
||||
f = sessioncreateform.cleaned_data['fitfile']
|
||||
filename, path_and_filename = handle_uploaded_file(f)
|
||||
ps.fitfile.name = filename
|
||||
ps.save()
|
||||
|
||||
|
||||
cd = sessionteamselectform.cleaned_data
|
||||
teams = cd['team']
|
||||
@@ -2235,7 +2156,7 @@ class PlannedSessionDelete(DeleteView):
|
||||
w.plannedsession = None
|
||||
w.save()
|
||||
|
||||
|
||||
|
||||
|
||||
url = reverse(plannedsessions_view)
|
||||
next = self.request.GET.get('next',url)
|
||||
|
||||
Reference in New Issue
Block a user