forked from rc/aircox
replace diffusion.duration by diffusion.end
This commit is contained in:
@ -368,14 +368,16 @@ class Schedule (models.Model):
|
||||
If exclude_saved, exclude all diffusions that are yet in the database.
|
||||
"""
|
||||
dates = self.dates_of_month(date)
|
||||
saved = Diffusion.objects.filter(date__in = dates,
|
||||
saved = Diffusion.objects.filter(start__in = dates,
|
||||
program = self.program)
|
||||
diffusions = []
|
||||
|
||||
duration = utils.to_timedelta(self.duration)
|
||||
|
||||
# existing diffusions
|
||||
for item in saved:
|
||||
if item.date in dates:
|
||||
dates.remove(item.date)
|
||||
if item.start in dates:
|
||||
dates.remove(item.start)
|
||||
if not exclude_saved:
|
||||
diffusions.append(item)
|
||||
|
||||
@ -385,7 +387,7 @@ class Schedule (models.Model):
|
||||
if self.initial:
|
||||
first_date -= self.date - self.initial.date
|
||||
|
||||
first_diffusion = Diffusion.objects.filter(date = first_date,
|
||||
first_diffusion = Diffusion.objects.filter(start = first_date,
|
||||
program = self.program)
|
||||
first_diffusion = first_diffusion[0] if first_diffusion.count() \
|
||||
else None
|
||||
@ -393,8 +395,8 @@ class Schedule (models.Model):
|
||||
program = self.program,
|
||||
type = Diffusion.Type['unconfirmed'],
|
||||
initial = first_diffusion if self.initial else None,
|
||||
date = date,
|
||||
duration = self.duration,
|
||||
start = date,
|
||||
end = date + duration,
|
||||
))
|
||||
return diffusions
|
||||
|
||||
@ -581,11 +583,16 @@ class Diffusion (models.Model):
|
||||
blank = True, null = True,
|
||||
help_text = _('the diffusion is a rerun of this one')
|
||||
)
|
||||
date = models.DateTimeField( _('start of the diffusion') )
|
||||
duration = models.TimeField(
|
||||
_('duration'),
|
||||
help_text = _('regular duration'),
|
||||
)
|
||||
start = models.DateTimeField( _('start of the diffusion') )
|
||||
end = models.DateTimeField( _('end of the diffusion') )
|
||||
|
||||
@property
|
||||
def duration (self):
|
||||
return self.end - self.start
|
||||
|
||||
@property
|
||||
def date (self):
|
||||
return self.start
|
||||
|
||||
def archives_duration (self):
|
||||
"""
|
||||
@ -596,7 +603,7 @@ class Diffusion (models.Model):
|
||||
r = [ sound.duration
|
||||
for sound in sounds.filter(type = Sound.Type['archive'])
|
||||
if sound.duration ]
|
||||
return utils.time_sum(r) if r else self.duration
|
||||
return utils.time_sum(r)
|
||||
|
||||
def get_archives (self):
|
||||
"""
|
||||
@ -613,10 +620,10 @@ class Diffusion (models.Model):
|
||||
Return a queryset with the upcoming diffusions, ordered by
|
||||
+date
|
||||
"""
|
||||
filter_args['date__gte'] = date_or_default(date)
|
||||
filter_args['start__gte'] = date_or_default(date)
|
||||
if station:
|
||||
filter_args['program__station'] = station
|
||||
return cl.objects.filter(**filter_args).order_by('date')
|
||||
return cl.objects.filter(**filter_args).order_by('start')
|
||||
|
||||
@classmethod
|
||||
def get_prev (cl, station = None, date = None, **filter_args):
|
||||
@ -624,46 +631,21 @@ class Diffusion (models.Model):
|
||||
Return a queryset with the previous diffusion, ordered by
|
||||
-date
|
||||
"""
|
||||
filter_args['date__lte'] = date_or_default(date)
|
||||
filter_args['start__lte'] = date_or_default(date)
|
||||
if station:
|
||||
filter_args['program__station'] = station
|
||||
return cl.objects.filter(**filter_args).order_by('-date')
|
||||
return cl.objects.filter(**filter_args).order_by('-start')
|
||||
|
||||
def get_conflicts (self):
|
||||
"""
|
||||
Return a list of conflictual diffusions, based on the scheduled duration.
|
||||
|
||||
Note: for performance reason, check next and prev are limited to a
|
||||
certain amount of diffusions.
|
||||
"""
|
||||
r = []
|
||||
# prev
|
||||
qs = self.get_prev(self.program.station, self.date)
|
||||
count = 0
|
||||
for diff in qs:
|
||||
if diff.pk == self.pk:
|
||||
continue
|
||||
|
||||
end = diff.date + utils.to_timedelta(diff.duration)
|
||||
if end > self.date:
|
||||
r.append(diff)
|
||||
continue
|
||||
count+=1
|
||||
if count > 5: break
|
||||
|
||||
# next
|
||||
end = self.date + utils.to_timedelta(self.duration)
|
||||
qs = self.get_next(self.program.station, self.date)
|
||||
count = 0
|
||||
for diff in qs:
|
||||
if diff.pk == self.pk:
|
||||
continue
|
||||
|
||||
if diff.date < end and diff not in r:
|
||||
r.append(diff)
|
||||
continue
|
||||
count+=1
|
||||
if count > 5: break
|
||||
r = Diffusion.objects.filter(
|
||||
models.Q(start__lte = self.start,
|
||||
end__gte = self.start) |
|
||||
models.Q(start__gte = self.start,
|
||||
start__lte = self.end)
|
||||
)
|
||||
return r
|
||||
|
||||
def save (self, *args, **kwargs):
|
||||
|
Reference in New Issue
Block a user