mostly working - a few bugs remaining
This commit is contained in:
235
rowers/models.py
235
rowers/models.py
@@ -1073,6 +1073,7 @@ def createmacrofillers(plan):
|
||||
|
||||
if not cycles:
|
||||
macr = TrainingMacroCycle(
|
||||
plan=plan,
|
||||
startdate = plan.startdate,
|
||||
enddate = plan.enddate,
|
||||
type='filler',
|
||||
@@ -1095,6 +1096,131 @@ def createmacrofillers(plan):
|
||||
cycles = cycles[1:]
|
||||
|
||||
|
||||
def createmesofillers(plan):
|
||||
fillers = TrainingMesoCycle.objects.filter(
|
||||
plan = plan, type = 'filler'
|
||||
)
|
||||
|
||||
for f in fillers:
|
||||
f.delete()
|
||||
|
||||
cycles = TrainingMesoCycle.objects.filter(
|
||||
plan = plan
|
||||
).order_by("-startdate")
|
||||
|
||||
if not cycles:
|
||||
macr = TrainingMesoCycle(
|
||||
plan = plan,
|
||||
startdate = plan.startdate,
|
||||
enddate = plan.enddate,
|
||||
type='filler',
|
||||
name='Filler'
|
||||
)
|
||||
macr.save()
|
||||
|
||||
thedate = plan.enddate
|
||||
while cycles:
|
||||
if cycles[0].enddate < thedate:
|
||||
macr = TrainingMesoCycle(
|
||||
plan=plan,
|
||||
startdate = cycles[0].enddate+datetime.timedelta(days=1),
|
||||
enddate = thedate,
|
||||
type='filler',
|
||||
name='Filler'
|
||||
)
|
||||
macr.save()
|
||||
thedate = cycles[0].startdate-datetime.timedelta(days=1)
|
||||
cycles = cycles[1:]
|
||||
|
||||
|
||||
def createmicrofillers(plan):
|
||||
fillers = TrainingMicroCycle.objects.filter(
|
||||
plan = plan, type = 'filler'
|
||||
)
|
||||
|
||||
for f in fillers:
|
||||
f.delete()
|
||||
|
||||
cycles = TrainingMicroCycle.objects.filter(
|
||||
plan = plan
|
||||
).order_by("-startdate")
|
||||
|
||||
if not cycles:
|
||||
macr = TrainingMicroCycle(
|
||||
plan=plan,
|
||||
startdate = plan.startdate,
|
||||
enddate = plan.enddate,
|
||||
type='filler',
|
||||
name='Filler'
|
||||
)
|
||||
macr.save()
|
||||
|
||||
thedate = plan.enddate
|
||||
while cycles:
|
||||
if cycles[0].enddate < thedate:
|
||||
macr = TrainingMicroCycle(
|
||||
plan=plan,
|
||||
startdate = cycles[0].enddate+datetime.timedelta(days=1),
|
||||
enddate = thedate,
|
||||
type='filler',
|
||||
name='Filler'
|
||||
)
|
||||
macr.save()
|
||||
thedate = cycles[0].startdate-datetime.timedelta(days=1)
|
||||
cycles = cycles[1:]
|
||||
|
||||
def microcyclecheckdates(plan):
|
||||
cycles = TrainingMicroCycle.objects.filter(
|
||||
plan=plan
|
||||
).order_by("-startdate")
|
||||
|
||||
thedate = plan.enddate
|
||||
while cycles:
|
||||
if cycles[0].enddate < plan.startdate:
|
||||
cycles[0].delete()
|
||||
if cycles[0].startdate > plan.enddate:
|
||||
cycles[0].delete()
|
||||
if cycles[0].enddate > thedate:
|
||||
cycles[0].enddate = thedate
|
||||
cycles[0].save()
|
||||
thedate = cycles[0].startdate-datetime.timedelta(days=1)
|
||||
cycles = cycles[1:]
|
||||
|
||||
def mesocyclecheckdates(plan):
|
||||
cycles = TrainingMesoCycle.objects.filter(
|
||||
plan=plan
|
||||
).order_by("-startdate")
|
||||
|
||||
thedate = plan.enddate
|
||||
while cycles:
|
||||
if cycles[0].enddate < plan.startdate:
|
||||
cycles[0].delete()
|
||||
if cycles[0].startdate > plan.enddate:
|
||||
cycles[0].delete()
|
||||
if cycles[0].enddate > thedate:
|
||||
cycles[0].enddate = thedate
|
||||
cycles[0].save()
|
||||
thedate = cycles[0].startdate-datetime.timedelta(days=1)
|
||||
cycles = cycles[1:]
|
||||
|
||||
def macrocyclecheckdates(plan):
|
||||
cycles = TrainingMacroCycle.objects.filter(
|
||||
plan=plan
|
||||
).order_by("-startdate")
|
||||
|
||||
thedate = plan.enddate
|
||||
while cycles:
|
||||
if cycles[0].enddate < plan.startdate:
|
||||
cycles[0].delete()
|
||||
if cycles[0].startdate > plan.enddate:
|
||||
cycles[0].delete()
|
||||
if cycles[0].enddate > thedate:
|
||||
cycles[0].enddate = thedate
|
||||
cycles[0].save()
|
||||
thedate = cycles[0].startdate-datetime.timedelta(days=1)
|
||||
cycles = cycles[1:]
|
||||
|
||||
|
||||
class TrainingMacroCycle(models.Model):
|
||||
plan = models.ForeignKey(TrainingPlan)
|
||||
name = models.CharField(max_length=150,blank=True)
|
||||
@@ -1127,6 +1253,12 @@ class TrainingMacroCycle(models.Model):
|
||||
for f in fillers:
|
||||
f.delete()
|
||||
|
||||
if self.enddate > self.plan.enddate:
|
||||
self.enddate = self.plan.enddate
|
||||
|
||||
if self.startdate < self.plan.startdate:
|
||||
self.startdate = self.plan.startdate
|
||||
|
||||
othercycles = TrainingMacroCycle.objects.filter(
|
||||
plan=self.plan).exclude(pk=self.pk).order_by("-startdate")
|
||||
|
||||
@@ -1151,11 +1283,13 @@ class TrainingMacroCycle(models.Model):
|
||||
)
|
||||
|
||||
meso.save()
|
||||
else:
|
||||
createmesofillers(self)
|
||||
|
||||
class TrainingMacroCycleForm(ModelForm):
|
||||
class Meta:
|
||||
model = TrainingMacroCycle
|
||||
fields = ['name','startdate','enddate']
|
||||
fields = ['name','startdate','enddate','notes']
|
||||
|
||||
widgets = {
|
||||
'startdate': AdminDateWidget(),
|
||||
@@ -1181,6 +1315,49 @@ class TrainingMesoCycle(models.Model):
|
||||
|
||||
return stri
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if self.enddate < self.startdate:
|
||||
startdate = self.startdate
|
||||
enddate = self.enddate
|
||||
self.startdate = enddate
|
||||
self.enddate = startdate
|
||||
|
||||
fillers = TrainingMesoCycle.objects.filter(
|
||||
plan=self.plan,type='filler')
|
||||
for f in fillers:
|
||||
f.delete()
|
||||
|
||||
if self.enddate > self.plan.enddate:
|
||||
self.enddate = self.plan.enddate
|
||||
|
||||
if self.startdate < self.plan.startdate:
|
||||
self.startdate = self.plan.startdate
|
||||
|
||||
othercycles = TrainingMesoCycle.objects.filter(
|
||||
plan=self.plan).exclude(pk=self.pk).order_by("-startdate")
|
||||
|
||||
for othercycle in othercycles:
|
||||
if othercycle.startdate <= self.enddate and othercycle.startdate >= self.startdate:
|
||||
self.enddate = othercycle.startdate-datetime.timedelta(days=1)
|
||||
|
||||
if othercycle.enddate >= self.startdate and othercycle.enddate <= self.enddate:
|
||||
self.startdate = othercycle.enddate+datetime.timedelta(days=1)
|
||||
|
||||
if not self.enddate <= self.startdate:
|
||||
super(TrainingMesoCycle,self).save(*args, **kwargs)
|
||||
|
||||
microcycles = TrainingMicroCycle.objects.filter(plan = self)
|
||||
if not microcycles:
|
||||
micro = TrainingMicroCycle(
|
||||
plan = self,
|
||||
name = 'Filler',
|
||||
startdate = self.startdate,
|
||||
enddate = self.enddate,
|
||||
)
|
||||
|
||||
micro.save()
|
||||
else:
|
||||
createmicrofillers(self)
|
||||
|
||||
class TrainingMicroCycle(models.Model):
|
||||
plan = models.ForeignKey(TrainingMesoCycle)
|
||||
@@ -1201,15 +1378,57 @@ class TrainingMicroCycle(models.Model):
|
||||
|
||||
return stri
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if self.enddate < self.startdate:
|
||||
startdate = self.startdate
|
||||
enddate = self.enddate
|
||||
self.startdate = enddate
|
||||
self.enddate = startdate
|
||||
|
||||
# Needs some error checking
|
||||
# - Microcycles should not overlap with other microcycles, same for MesoCycles, MacroCycles
|
||||
# - When a TrainingPlan is created, it should create 1 "collector" Macro, Meso & MicroCycle - this is invisible for users who choose to not use cycles
|
||||
# - When a new Microcycle is inserted, the "collector" cycle is automatically adjusted to "go out of the way" of the new MicroCycle - and similar for Macro & Meso
|
||||
# - If the entire MesoCycle is filled with user defined MicroCycles - there are no "filler" MicroCycles
|
||||
# - Sessions are automatically linked to the correct Cycles based on their start/end date - no need for a hard link
|
||||
fillers = TrainingMicroCycle.objects.filter(
|
||||
plan=self.plan,type='filler')
|
||||
for f in fillers:
|
||||
f.delete()
|
||||
|
||||
if self.enddate > self.plan.enddate:
|
||||
self.enddate = self.plan.enddate
|
||||
|
||||
if self.startdate < self.plan.startdate:
|
||||
self.startdate = self.plan.startdate
|
||||
|
||||
othercycles = TrainingMicroCycle.objects.filter(
|
||||
plan=self.plan).exclude(pk=self.pk).order_by("-startdate")
|
||||
|
||||
for othercycle in othercycles:
|
||||
if othercycle.startdate <= self.enddate and othercycle.startdate >= self.startdate:
|
||||
self.enddate = othercycle.startdate-datetime.timedelta(days=1)
|
||||
|
||||
if othercycle.enddate >= self.startdate and othercycle.enddate <= self.enddate:
|
||||
self.startdate = othercycle.enddate+datetime.timedelta(days=1)
|
||||
|
||||
if not self.enddate <= self.startdate:
|
||||
super(TrainingMicroCycle,self).save(*args, **kwargs)
|
||||
|
||||
class TrainingMesoCycleForm(ModelForm):
|
||||
class Meta:
|
||||
model = TrainingMesoCycle
|
||||
fields = ['name','startdate','enddate','notes']
|
||||
|
||||
widgets = {
|
||||
'startdate': AdminDateWidget(),
|
||||
'enddate': AdminDateWidget()
|
||||
}
|
||||
|
||||
class TrainingMicroCycleForm(ModelForm):
|
||||
class Meta:
|
||||
model = TrainingMicroCycle
|
||||
fields = ['name','startdate','enddate','notes']
|
||||
|
||||
widgets = {
|
||||
'startdate': AdminDateWidget(),
|
||||
'enddate': AdminDateWidget()
|
||||
}
|
||||
|
||||
# Cycle error checking goes in forms
|
||||
|
||||
# model for Planned Session (Workout, Challenge, Test)
|
||||
class PlannedSession(models.Model):
|
||||
|
||||
Reference in New Issue
Block a user