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 print_function
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
from __future__ import unicode_literals, absolute_import
|
from __future__ import unicode_literals, absolute_import
|
||||||
|
import uuid
|
||||||
from django.utils.encoding import python_2_unicode_compatible
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
|
|
||||||
from django.db import models,IntegrityError
|
from django.db import models,IntegrityError
|
||||||
@@ -119,6 +119,12 @@ class UserFullnameChoiceField(forms.ModelChoiceField):
|
|||||||
class PlannedSessionStepField(models.TextField):
|
class PlannedSessionStepField(models.TextField):
|
||||||
pass
|
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
|
# model for configurable template field
|
||||||
class TemplateListField(models.TextField):
|
class TemplateListField(models.TextField):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
@@ -2311,7 +2317,7 @@ class PlannedSession(models.Model):
|
|||||||
|
|
||||||
is_template = models.BooleanField(default=False)
|
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_json = models.TextField(max_length=10000,default=None,blank=True,null=True)
|
||||||
steps = PlannedSessionStepField(default={},null=True)
|
steps = PlannedSessionStepField(default={},null=True)
|
||||||
interval_string = models.TextField(max_length=1000,default=None,blank=True,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"
|
"You must be a Self-Coach user or higher to create a planned session"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# interval string
|
# interval string
|
||||||
if self.interval_string:
|
if self.interval_string:
|
||||||
dct = trainingparser.parsetodict(self.interval_string)
|
dct = trainingparser.parsetodict(self.interval_string)
|
||||||
@@ -2363,9 +2367,6 @@ class PlannedSession(models.Model):
|
|||||||
dct = trainingparser.tofitdict(dct)
|
dct = trainingparser.tofitdict(dct)
|
||||||
self.steps = dct
|
self.steps = dct
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# sort units
|
# sort units
|
||||||
if self.sessionmode == 'distance':
|
if self.sessionmode == 'distance':
|
||||||
if self.sessionunit not in ['m','km']:
|
if self.sessionunit not in ['m','km']:
|
||||||
@@ -2403,42 +2404,19 @@ class PlannedSession(models.Model):
|
|||||||
self.preferreddate = self.startdate
|
self.preferreddate = self.startdate
|
||||||
|
|
||||||
#super(PlannedSession,self).save(*args, **kwargs)
|
#super(PlannedSession,self).save(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
# read file
|
|
||||||
if self.fitfile:
|
if self.fitfile:
|
||||||
if self.fitfile.name == 'False':
|
steps = steps_read_fit(os.path.join(settings.MEDIA_ROOT,self.fitfile.name))
|
||||||
self.fitfile = None
|
self.steps = steps
|
||||||
else:
|
|
||||||
steps = steps_read_fit(settings.MEDIA_ROOT+'/'+self.fitfile.name)
|
|
||||||
self.steps = steps
|
|
||||||
|
|
||||||
if self.steps and not self.fitfile:
|
if self.steps and not self.fitfile:
|
||||||
if self.pk is not None:
|
filename = 'aap.fit'
|
||||||
filename = 'session'+encoder.encode_hex(self.pk)+'.fit'
|
filename = get_file_path(self,filename)
|
||||||
else:
|
|
||||||
file = tempfile.NamedTemporaryFile(mode='w+b',suffix='.fit',dir=settings.MEDIA_ROOT)
|
|
||||||
filename = file
|
|
||||||
|
|
||||||
|
|
||||||
steps = self.steps
|
steps = self.steps
|
||||||
|
steps['filename'] = os.path.join(settings.MEDIA_ROOT,filename)
|
||||||
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
|
|
||||||
fitfile = steps_write_fit(steps)
|
fitfile = steps_write_fit(steps)
|
||||||
|
self.fitfile.name = filename
|
||||||
|
self.steps = steps
|
||||||
filelist = fitfile.split('/media/')
|
print(self.fitfile.name,filename)
|
||||||
|
|
||||||
self.fitfile.name = filelist[-1]
|
|
||||||
|
|
||||||
|
|
||||||
# calculate approximate distance
|
# calculate approximate distance
|
||||||
if self.steps:
|
if self.steps:
|
||||||
@@ -2454,11 +2432,13 @@ class PlannedSession(models.Model):
|
|||||||
|
|
||||||
super(PlannedSession,self).save(*args, **kwargs)
|
super(PlannedSession,self).save(*args, **kwargs)
|
||||||
|
|
||||||
#@receiver(models.signals.pre_delete,sender=PlannedSession)
|
@receiver(models.signals.post_delete,sender=PlannedSession)
|
||||||
#def auto_delete_fitfile_on_delete(send, instance, **kwargs):
|
def auto_delete_fitfile_on_delete(sender, instance, **kwargs):
|
||||||
# if instance.fitfile:
|
# delete CSV file
|
||||||
# if os.path.isfile(instance.fitfile):
|
if instance.fitfile:
|
||||||
# os.remove(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
|
from django.core.validators import RegexValidator,validate_email
|
||||||
|
|
||||||
|
|||||||
@@ -431,57 +431,18 @@ def plannedsession_create_view(request,
|
|||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
sessioncreateform = PlannedSessionForm(request.POST, request.FILES)
|
sessioncreateform = PlannedSessionForm(request.POST, request.FILES)
|
||||||
if sessioncreateform.is_valid():
|
if sessioncreateform.is_valid():
|
||||||
cd = sessioncreateform.cleaned_data
|
ps = sessioncreateform.save(commit=False)
|
||||||
startdate = cd['startdate']
|
ps.manager = request.user
|
||||||
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.save()
|
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)
|
add_rower_session(r,ps)
|
||||||
|
|
||||||
|
request.session['fstartdate'] = str(arrow.get(ps.startdate))
|
||||||
request.session['fstartdate'] = str(arrow.get(startdate))
|
request.session['fenddate'] = str(arrow.get(ps.enddate))
|
||||||
request.session['fenddate'] = str(arrow.get(enddate))
|
request.session['fprefdate'] = str(arrow.get(ps.preferreddate))
|
||||||
request.session['fprefdate'] = str(arrow.get(preferreddate))
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
if 'fstartdate' in request.session:
|
if 'fstartdate' in request.session:
|
||||||
@@ -765,50 +726,10 @@ def plannedsession_teamcreate_view(request,
|
|||||||
|
|
||||||
if sessioncreateform.is_valid() and sessionteamselectform.is_valid():
|
if sessioncreateform.is_valid() and sessionteamselectform.is_valid():
|
||||||
cd = sessioncreateform.cleaned_data
|
cd = sessioncreateform.cleaned_data
|
||||||
startdate = cd['startdate']
|
ps = sessioncreateform.save(commit=False)
|
||||||
enddate = cd['enddate']
|
ps.manager = request.user
|
||||||
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.save()
|
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
|
cd = sessionteamselectform.cleaned_data
|
||||||
teams = cd['team']
|
teams = cd['team']
|
||||||
|
|||||||
Reference in New Issue
Block a user