示例#1
0
def view_event(request, event_id):
    now = datetime.datetime.now()

    event = Event.objects.get(id=event_id)
    events = Event.objects.filter(ends_at__gte=now).order_by("starts_at").exclude(id=event.id)
    member_events = (
        Event.objects.filter(ends_at__gte=now)
        .filter(added_by=event.added_by)
        .order_by("starts_at")
        .exclude(id=event.id)
    )

    return render_to_response(
        "kiosk/event_detail.html",
        {
            "title": event.name,
            "subtitle": django_date_filter(event.starts_at, "l, F jS")
            + " from "
            + django_date_filter(event.starts_at, ("P"))
            + " until "
            + django_date_filter(event.ends_at, ("P")),
            "event": event,
            "events": events,
            "member_events": member_events,
        },
        context_instance=RequestContext(request),
    )
示例#2
0
def results(request):
    base = base_ctx('Results', 'By Date', request)

    try:
        day = datetime.strptime(get_param(request, 'd', None), '%Y-%m-%d').date()
    except:
        day = date.today()

    bounds = Match.objects.aggregate(Min('date'), Max('date'))
    day = min(max(bounds['date__min'], day), bounds['date__max'])
    base.update({
        'mindate': bounds['date__min'],
        'maxdate': bounds['date__max'],
        'td':      day,
    })

    matches = (
        Match.objects.filter(date=day).order_by('eventobj__idx', 'eventobj__latest', 'event', 'id')
            .prefetch_related('message_set', 'rta', 'rtb', 'pla', 'plb', 'eventobj')
            .annotate(Count('eventobj__match'))
    )
    base['matches'] = display_matches(matches, date=False, ratings=True, messages=True, eventcount=True)

    base.update({"title": django_date_filter(day, "F jS, Y")})

    return render_to_response('results.html', base)
def flexibledateformat(value, arg=None):
    RE_DATE = re.compile(r'(\d{4})(\d\d)(\d\d)$')
    try:
        value = str(int(value))
    except:
        return None
    match = RE_DATE.match(str(value))
    if match:
        year_val, month_val, day_val = [int(v) for v in match.groups()]
    else:
        raise ValueError("Invalid value for flexible date: %s" % value)
    if day_val:
        return django_date_filter(datetime.date(year_val,month_val,day_val),'M j, Y')
    elif month_val:
        return django_date_filter(datetime.date(year_val,month_val,1),'F Y')
    else:
        return year_val
示例#4
0
 def displayStart(self):
     if self.endDate.month == self.startDate.month:
         fmt = 'l j'
     else:
         if self.endDate.year == self.startDate.year:
             fmt = 'l j F'
         else:
             fmt = settings.DATE_FORMAT  # 'l j F Y'
     return django_date_filter(self.startDate, fmt)
示例#5
0
 def displayStart(self):
     if self.endDate.month == self.startDate.month:
         fmt = 'l j'
     else:
         if self.endDate.year == self.startDate.year:
             fmt = 'l j F'
         else:
             fmt = settings.DATE_FORMAT  # 'l j F Y'
     return django_date_filter(self.startDate, fmt)
def flexibledateformat(value, arg=None):
    RE_DATE = re.compile(r'(\d{4})(\d\d)(\d\d)$')
    try:
        value = str(int(value))
    except:
        return None
    match = RE_DATE.match(str(value))
    if match:
        year_val, month_val, day_val = [int(v) for v in match.groups()]
    else:
        raise ValueError("Invalid value for flexible date: %s" % value)
    if day_val:
        return django_date_filter(datetime.date(year_val, month_val, day_val),
                                  'M j, Y')
    elif month_val:
        return django_date_filter(datetime.date(year_val, month_val, 1), 'F Y')
    else:
        return year_val
示例#7
0
def format_datetime(value, format='Y-m-d'):
    """
    Monday, December 1, 2021
    l, F j, Y
    https://docs.djangoproject.com/en/1.1/ref/templates/builtins/#now
    """
    if value:
        from django.template.defaultfilters import date as django_date_filter
        return django_date_filter(value, format)
    else:
        return None
示例#8
0
 def displayStart(self):
     if self.endTime < self.startTime:
         if self.endDate.month == self.startDate.month:
             fmt = 'g:i a l j'
         else:
             if self.endDate.year == self.startDate.year:
                 fmt = 'g:i a l j F'
             else:
                 fmt = settings.DATETIME_FORMAT  # 'g:i a l j F Y'
     else:
         fmt = settings.TIME_FORMAT  # 'g:i a'
     return django_date_filter(self.startDateTime, fmt)
示例#9
0
 def displayStart(self):
     if self.endTime < self.startTime:
         if self.endDate.month == self.startDate.month:
             fmt = 'g:i a l j'
         else:
             if self.endDate.year == self.startDate.year:
                 fmt = 'g:i a l j F'
             else:
                 fmt = settings.DATETIME_FORMAT  # 'g:i a l j F Y'
     else:
         fmt = settings.TIME_FORMAT  # 'g:i a'
     return django_date_filter(self.startDateTime, fmt)
示例#10
0
    def __init__(self, obj=None, is_emphasized=False, user=None):
        if obj:
            from cosinnus.templatetags.cosinnus_tags import full_name
            if is_emphasized:
                self['is_emphasized'] = is_emphasized
            # smart conversion by known models
            if type(obj) is get_cosinnus_group_model() or issubclass(obj.__class__, get_cosinnus_group_model()):
                self['icon'] = obj.get_icon()
                self['text'] = escape(obj.name)
                self['url'] = obj.get_absolute_url()
            elif type(obj) is CosinnusIdea:
                self['icon'] = obj.get_icon()
                self['text'] = escape(obj.title)
                self['url'] = obj.get_absolute_url()
            elif type(obj) is CosinnusOrganization:
                self['icon'] = 'fa-building'
                self['text'] = escape(obj.name)
                self['url'] = obj.get_absolute_url()
            elif isinstance(obj, NextcloudFileProxy):
                self['icon'] = 'fa-cloud'
                self['text'] = obj.name
                self['url'] = obj.url
                self['subtext'] = obj.excerpt
            elif obj._meta.model.__name__ == 'Message' and not settings.COSINNUS_ROCKET_ENABLED and not 'cosinnus_message' in settings.COSINNUS_DISABLED_COSINNUS_APPS:
                self['icon'] = 'fa-envelope'
                self['text'] = escape(obj.subject)
                self['url'] = reverse('postman:view_conversation', kwargs={'thread_id': obj.thread_id}) if obj.thread_id else obj.get_absolute_url()
                self['subtext'] = escape(', '.join([full_name(participant) for participant in obj.other_participants(user)]))
            elif issubclass(obj.__class__, BaseUserProfile):
                self['icon'] = obj.get_icon()
                self['text'] = escape(full_name(obj.user))
                self['url'] = obj.get_absolute_url()
            elif BaseTaggableObjectModel in inspect.getmro(obj.__class__):
                
                
                self['icon'] = 'fa-question'
                self['text'] = escape(obj.get_readable_title())
                self['url'] = obj.get_absolute_url()
                self['subtext'] = escape(obj.group.name)

                if hasattr(obj, 'get_icon'):
                    self['icon'] = obj.get_icon()
                if obj.group.slug in get_default_user_group_slugs():
                    self['group'] = escape(CosinnusPortal.get_current().name)
                else:
                    self['group'] = escape(obj.group.name)
                    self['group_icon'] = obj.group.get_icon()
                if obj.__class__.__name__ == 'Event':
                    if obj.state != 2:
                        self['subtext'] = {'is_date': True, 'date': django_date_filter(obj.from_date, 'Y-m-d')}
示例#11
0
文件: daterange.py 项目: whav/hav
def daterange(dt_range: DateTimeTZRange):
    rdt = ReverseDateTimeRange(dt_range.lower, dt_range.upper)
    resolution = rdt.get_resolution()

    logger.debug(f"{dt_range.lower} {dt_range.upper}")
    if resolution == Resolutions.YEAR:
        return dt_range.upper.strftime("%Y")
    elif resolution == Resolutions.MONTH:
        return dt_range.upper.strftime("%b %Y")
    elif resolution == Resolutions.DAY:
        return django_date_filter(dt_range.upper, "DATE_FORMAT")

    return (
        f"{django_date_filter(dt_range.lower)} - {django_date_filter(dt_range.upper)}"
    )
示例#12
0
def view_event(request, event_id):
    now = datetime.datetime.now()

    event = Event.objects.get(id=event_id)
    events = Event.objects.filter(
        ends_at__gte=now).order_by('starts_at').exclude(id=event.id)
    member_events = Event.objects.filter(ends_at__gte=now).filter(
        added_by=event.added_by).order_by('starts_at').exclude(id=event.id)

    return render_to_response('kiosk/event_detail.html', {
        'title':
        event.name,
        'subtitle':
        django_date_filter(event.starts_at, 'l, F jS') + " from " +
        django_date_filter(event.starts_at, ("P")) + " until " +
        django_date_filter(event.ends_at, ("P")),
        'event':
        event,
        'events':
        events,
        'member_events':
        member_events,
    },
                              context_instance=RequestContext(request))
    def get(self):
		zipCode = ''
		zipCodeParamName = "loc"
		if (zipCodeParamName in self.request.params):
			zipCode = self.request.params[zipCodeParamName]
			
		#validate parameters
		if (not zipCode):
			self.response.out.write('invalid parameters')
			return	
		
		cookieValue = ''
		if (AppConfig.appCookieName in self.request.cookies):
			#read cookie
			cookieValue = self.request.cookies[AppConfig.appCookieName]
		else:
			cookieValue = uuid.uuid1() 
			logging.debug('base: setting new cookie: %s' % cookieValue);
			userCookie = Cookie.BaseCookie()
			userCookie[AppConfig.appCookieName] = cookieValue
			expires = datetime.datetime.utcnow() + datetime.timedelta(days=360)
			timestamp = calendar.timegm(expires.utctimetuple())
			userCookie[AppConfig.appCookieName]["expires"] = email.utils.formatdate(timestamp,localtime=False,usegmt=True)
			for morsel in userCookie.values():
				self.response.headers.add_header('Set-Cookie',morsel.OutputString(None))
			
		#call weather service and get JSON
		#because of python timeouts we'll to try catch the exception and resubmit
		devKey = AppConfig.weatherBugAPIKey
		urlSuffix = 'nf=5&ih=1&ht=t&ht=i&ht=d&ht=ws&ht=wd&ht=h&ht=cp&l=en&c=US'
		if (zipCode[0:1] == 'z'):
			#lookup by zip
			urlStr = 'http://i.wxbug.net/REST/Direct/GetForecast.ashx?zip=%s&api_key=%s&%s' % (zipCode[2:], devKey, urlSuffix)
		else:
			#lookup by lat/lon
			coords = zipCode[2:].split(',')
			urlStr = 'http://i.wxbug.net/REST/Direct/GetForecast.ashx?la=%s&lo=%s&api_key=%s&%s' % (coords[0], coords[1], devKey, urlSuffix)
		#self.response.out.write(urlStr)
		try:
			result = urlfetch.fetch(url=urlStr, deadline=30)
			if result.status_code == 200:
				jsonData = simplejson.loads(result.content)
			else:
				self.response.out.write('unable to retrieve data (1 of 2). Invalid http code')
				return
		except:
			#lets try to resubmit the request
			try:
				result = urlfetch.fetch(url=urlStr, deadline=30)
				if result.status_code == 200:
					jsonData = simplejson.loads(result.content)
				else:
					self.response.out.write('unable to retrieve data (2 of 2). Invalid http code.')
					return
			except:
				self.response.out.write('unable to retrieve data (2 of 2). Exception.')
				return
		
		#image for first day (http://img.weather.weatherbug.com/forecast/icons/localized/500x420/en/trans/cond026.png)
		lastWeekDayStr = ''
		webapp_json_data = MutableString()
		last_hourly_data = MutableString()
		#parse JSON and get stuff we need for the app
		for dayObj in jsonData["forecastList"]:
			imgIcon = ''
			if (dayObj['dayIcon'] != None):
				imgIcon = dayObj['dayIcon']
			else:
				imgIcon = dayObj['nightIcon']
			
			if (not dayObj['high']):
				dayObj['high'] = ''
			
			if (not dayObj['dayDesc']):
				dayObj['dayDesc'] = dayObj['nightDesc']
			
			#build ourly forecast data
			hourly_data = MutableString()
			if (dayObj['hourly']):
				#build hourly json
				for hourlyObj in dayObj['hourly']:
					chancePrecip = ''
					dateTimeStr = ''
					dateTimeStamp = ''
					desc = ''
					humidity = ''
					icon = ''
					temperature = ''
					windDir = ''
					windSpeed = ''
					weekDayStr = ''
					precipChance = ''
					
					if (hourlyObj['chancePrecip']):
						chancePrecip = hourlyObj['chancePrecip']
					if (hourlyObj['dateTime']):
						dateTimeStamp = hourlyObj['dateTime']
						EST = Zone(-5,False,'EST')
						GMT = Zone(0,False,'GMT')
						#format: 2011-06-27 09:00:00-05:00
						#dateTimeGMTStr = datetime.fromtimestamp(int(hourlyObj['dateTime'])/1000).strftime('%Y-%m-%d %H:%M:%S')
						#t = datetime.strptime(dateTimeGMTStr,'%Y-%m-%d %H:%M:%S')
						dateTimeGMTStr = datetime.datetime.fromtimestamp(int(hourlyObj['dateTime'])/1000).strftime('%Y-%m-%d %H:%M:%S')
						t = datetime.datetime.strptime(dateTimeGMTStr,'%Y-%m-%d %H:%M:%S')
						t = t.replace(tzinfo=GMT)
						dateTimeObj = t.astimezone(EST)#.strftime('%I %p') #09 AM (leading zeros)
						dateTimeStr = django_date_filter(dateTimeObj, 'g A') # 9 AM (w/o leading zeros)
						weekDayStr = django_date_filter(dateTimeObj, 'l') #Friday
						if (weekDayStr != ''):
							if (lastWeekDayStr == weekDayStr):
								weekDayStr = ''
							else:
								lastWeekDayStr = weekDayStr
						
					if (hourlyObj['desc']):
						desc = hourlyObj['desc']			
					if (hourlyObj['humidity']):
						humidity = hourlyObj['humidity']
					if (hourlyObj['icon']):
						icon = hourlyObj['icon']
					if (hourlyObj['temperature']):
						temperature = hourlyObj['temperature']
					if (hourlyObj['windDir']):
						windDir = hourlyObj['windDir']
					if (hourlyObj['windSpeed']):
						windSpeed = hourlyObj['windSpeed']
					if (hourlyObj['chancePrecip']):
						precipChance = hourlyObj['chancePrecip']
					
					#time in GMT!!
					nowDate = time.time()
					wsTime = int(hourlyObj['dateTime'])/1000
					if (wsTime >= nowDate):
						hourly_data = '%s,{"chancePrecip": "%s","dateTimeStr": "%s","dateTime": "%s", "desc": "%s","humidity": "%s","icon":"%s","temperature":"%s","windDir":"%s","windSpeed":"%s", "weekDay":"%s", "precipChance":"%s"}' % (
									hourly_data,
									chancePrecip,
									dateTimeStr,
									dateTimeStamp,
									desc,
									humidity,
									icon,
									temperature,
									windDir,
									windSpeed,
									weekDayStr,
									precipChance
									)
			
			hourly_data = "[%s]" % (hourly_data[1:])
			webapp_json_data = "%s,{\"daydesc\": \"%s\", \"name\": \"%s\", \"low\": \"%s\", \"imgIcon\": \"%s\", \"high\": \"%s\", \"pred\": \"%s\", \"hourly\": %s}" % (
									webapp_json_data, 
									dayObj['dayDesc'], 
									dayObj['dayTitle'], 
									dayObj['low'], 
									imgIcon, 
									dayObj['high'], 
									dayObj['nightPred'],
									hourly_data
									)
			
		webapp_json = "{\"results\":[%s]}" % (webapp_json_data[1:]);
		self.response.headers['Content-Type'] = 'application/json; charset=utf-8'
		self.response.out.write(webapp_json)
示例#14
0
def from_utc_to_user(dt, user_profile, format='date_time'):
    """ Converts a datetime object from UTC to a user-selected timezone and datetime format.
    """
    return django_date_filter(
        _from_utc_to_local(dt, user_profile.timezone), getattr(user_profile, '{}_format_py'.format(format)))
示例#15
0
def period(request, period_id=None):
    base = base_ctx('Ranking', 'Current', request)

    # {{{ Get period object
    if not period_id:
        period = base['curp']
    else:
        period = get_object_or_404(Period, id=period_id, computed=True)

    if period.is_preview():
        base['messages'].append(
            Message(msg_preview % django_date_filter(period.end, 'F jS'),
                    type=Message.INFO))

    base['period'] = period
    if period.id != base['curp'].id:
        base['curpage'] = ''
    # }}}

    # {{{ Best and most specialised players
    qset = total_ratings(filter_active(
        Rating.objects.filter(period=period))).select_related('player')
    qsetp = qset.filter(player__race=P)
    qsett = qset.filter(player__race=T)
    qsetz = qset.filter(player__race=Z)
    base.update({
        'best':
        qset.latest('rating'),
        'bestvp':
        qset.latest('tot_vp'),
        'bestvt':
        qset.latest('tot_vt'),
        'bestvz':
        qset.latest('tot_vz'),
        'bestp':
        qsetp.latest('rating'),
        'bestpvp':
        qsetp.latest('tot_vp'),
        'bestpvt':
        qsetp.latest('tot_vt'),
        'bestpvz':
        qsetp.latest('tot_vz'),
        'bestt':
        qsett.latest('rating'),
        'besttvp':
        qsett.latest('tot_vp'),
        'besttvt':
        qsett.latest('tot_vt'),
        'besttvz':
        qsett.latest('tot_vz'),
        'bestz':
        qsetz.latest('rating'),
        'bestzvp':
        qsetz.latest('tot_vp'),
        'bestzvt':
        qsetz.latest('tot_vt'),
        'bestzvz':
        qsetz.latest('tot_vz'),
        'specvp':
        qset.extra(select={
            'd': 'rating_vp/dev_vp*(rating+1.5)'
        }).latest('d'),
        'specvt':
        qset.extra(select={
            'd': 'rating_vt/dev_vt*(rating+1.5)'
        }).latest('d'),
        'specvz':
        qset.extra(select={
            'd': 'rating_vz/dev_vz*(rating+1.5)'
        }).latest('d'),
        'specpvp':
        qsetp.extra(select={
            'd': 'rating_vp/dev_vp*(rating+1.5)'
        }).latest('d'),
        'specpvt':
        qsetp.extra(select={
            'd': 'rating_vt/dev_vt*(rating+1.5)'
        }).latest('d'),
        'specpvz':
        qsetp.extra(select={
            'd': 'rating_vz/dev_vz*(rating+1.5)'
        }).latest('d'),
        'spectvp':
        qsett.extra(select={
            'd': 'rating_vp/dev_vp*(rating+1.5)'
        }).latest('d'),
        'spectvt':
        qsett.extra(select={
            'd': 'rating_vt/dev_vt*(rating+1.5)'
        }).latest('d'),
        'spectvz':
        qsett.extra(select={
            'd': 'rating_vz/dev_vz*(rating+1.5)'
        }).latest('d'),
        'speczvp':
        qsetz.extra(select={
            'd': 'rating_vp/dev_vp*(rating+1.5)'
        }).latest('d'),
        'speczvt':
        qsetz.extra(select={
            'd': 'rating_vt/dev_vt*(rating+1.5)'
        }).latest('d'),
        'speczvz':
        qsetz.extra(select={
            'd': 'rating_vz/dev_vz*(rating+1.5)'
        }).latest('d'),
    })
    # }}}

    # {{{ Highest gainer and biggest losers

    # TODO: Fix these queries, highly dependent on the way django does things.
    gainers = filter_active(Rating.objects.filter(period=period))\
        .filter(prev__isnull=False)\
        .select_related('prev', 'player')\
        .extra(select={'diff': 'rating.rating - T3.rating'})\
        .order_by('-diff')
    losers = filter_active(Rating.objects.filter(period=period))\
        .filter(prev__isnull=False)\
        .select_related('prev', 'player')\
        .extra(select={'diff': 'rating.rating - T3.rating'})\
        .order_by('diff')

    base.update({'updown': zip(gainers[:5], losers[:5])})
    # }}}

    # {{{ Matchup statistics
    qset = period.match_set
    base['pvt_wins'], base['pvt_loss'] = count_matchup_games(qset, 'P', 'T')
    base['pvz_wins'], base['pvz_loss'] = count_matchup_games(qset, 'P', 'Z')
    base['tvz_wins'], base['tvz_loss'] = count_matchup_games(qset, 'T', 'Z')
    base.update({
        'pvp_games': count_mirror_games(qset, 'P'),
        'tvt_games': count_mirror_games(qset, 'T'),
        'zvz_games': count_mirror_games(qset, 'Z'),
    })

    base['tot_mirror'] = base['pvp_games'] + base['tvt_games'] + base[
        'zvz_games']
    # }}}

    # {{{ Build country list
    all_players = Player.objects.filter(rating__period_id=period.id,
                                        rating__decay__lt=INACTIVE_THRESHOLD)
    base['countries'] = country_list(all_players)
    # }}}

    # {{{ Initial filtering of ratings
    entries = filter_active(period.rating_set).select_related('player')

    # Race filter
    race = get_param(request, 'race', 'ptzrs')
    q = Q()
    for r in race:
        q |= Q(player__race=r.upper())
    entries = entries.filter(q)

    # Country filter
    nats = get_param(request, 'nats', 'all')
    if nats == 'foreigners':
        entries = entries.exclude(player__country='KR')
    elif nats != 'all':
        entries = entries.filter(player__country=nats)

    # Sorting
    sort = get_param(request, 'sort', '')
    if sort not in ['vp', 'vt', 'vz']:
        entries = entries.order_by('-rating', 'player__tag')
    else:
        entries = entries.extra(select={
            'd': 'rating+rating_' + sort
        }).order_by('-d', 'player__tag')

    entries = entries.prefetch_related('prev')

    base.update({
        'race': race,
        'nats': nats,
        'sort': sort,
    })
    # }}}

    # {{{ Pages etc.
    pagesize = SHOW_PER_LIST_PAGE
    page = int(get_param(request, 'page', 1))
    nitems = entries.count()
    npages = nitems // pagesize + (1 if nitems % pagesize > 0 else 0)
    page = min(max(page, 1), npages)
    entries = entries[(page - 1) * pagesize:page *
                      pagesize] if page > 0 else []

    pn_start, pn_end = page - 2, page + 2
    if pn_start < 1:
        pn_end += 1 - pn_start
        pn_start = 1
    if pn_end > npages:
        pn_start -= pn_end - npages
        pn_end = npages
    if pn_start < 1:
        pn_start = 1

    base.update({
        'page': page,
        'npages': npages,
        'startcount': (page - 1) * pagesize,
        'entries': populate_teams(entries),
        'nperiods': Period.objects.filter(computed=True).count(),
        'pn_range': range(pn_start, pn_end + 1),
    })
    # }}}

    base.update({
        'sortable': True,
        'localcount': True,
    })

    fmt_date = django_date_filter(period.end, "F jS, Y")

    return render_to_response('period.djhtml', base)
示例#16
0
文件: __init__.py 项目: xbx/zato
def from_utc_to_user(dt, user_profile, format='date_time'):
    """ Converts a datetime object from UTC to a user-selected timezone and datetime format. 
    """
    return django_date_filter(
        _from_utc_to_local(dt, user_profile.timezone),
        getattr(user_profile, '{}_format_py'.format(format)))
示例#17
0
    def __init__(self, obj=None, is_emphasized=False, user=None):
        if obj:
            if is_emphasized:
                self['is_emphasized'] = is_emphasized
            # smart conversion by known models
            if type(obj) is get_cosinnus_group_model() or issubclass(
                    obj.__class__, get_cosinnus_group_model()):
                self[
                    'icon'] = 'fa-sitemap' if obj.type == CosinnusGroup.TYPE_SOCIETY else 'fa-group'
                self['text'] = escape(obj.name)
                self['url'] = obj.get_absolute_url()
            elif type(obj) is CosinnusIdea:
                self['icon'] = 'fa-lightbulb-o'
                self['text'] = escape(obj.title)
                self['url'] = obj.get_absolute_url()
            elif obj._meta.model.__name__ == 'Message' and not settings.COSINNUS_ROCKET_ENABLED:
                self['icon'] = 'fa-envelope'
                self['text'] = escape(obj.subject)
                self['url'] = reverse(
                    'postman:view_conversation',
                    kwargs={'thread_id': obj.thread_id
                            }) if obj.thread_id else obj.get_absolute_url()
                self['subtext'] = escape(', '.join([
                    full_name(participant)
                    for participant in obj.other_participants(user)
                ]))
            elif issubclass(obj.__class__, BaseUserProfile):
                self['icon'] = 'fa-user'
                self['text'] = escape(full_name(obj.user))
                self['url'] = obj.get_absolute_url()
            elif BaseTaggableObjectModel in inspect.getmro(obj.__class__):
                self['icon'] = 'fa-question'
                self['text'] = escape(obj.title)
                self['url'] = obj.get_absolute_url()
                self['subtext'] = escape(obj.group.name)

                if obj.group.slug in get_default_user_group_slugs():
                    self['group'] = escape(CosinnusPortal.get_current().name)
                else:
                    self['group'] = escape(obj.group.name)
                    self[
                        'group_icon'] = 'fa-group' if obj.group.type == CosinnusGroup.TYPE_PROJECT else 'fa-sitemap'

                if obj.__class__.__name__ == 'Event':
                    if obj.state == 2:
                        self['icon'] = 'fa-calendar-check-o'
                    else:
                        self['subtext'] = {
                            'is_date': True,
                            'date': django_date_filter(obj.from_date, 'Y-m-d')
                        }
                        self['icon'] = 'fa-calendar'
                if obj.__class__.__name__ == 'Etherpad':
                    self['icon'] = 'fa-file-text'
                if obj.__class__.__name__ == 'Ethercalc':
                    self['icon'] = 'fa-table'
                if obj.__class__.__name__ == 'FileEntry':
                    self['icon'] = 'fa-file'
                if obj.__class__.__name__ == 'Message':
                    self['icon'] = 'fa-envelope'
                if obj.__class__.__name__ == 'TodoEntry':
                    self['icon'] = 'fa-tasks'
                if obj.__class__.__name__ == 'Poll':
                    self['icon'] = 'fa-bar-chart'
                if obj.__class__.__name__ == 'Offer':
                    self['icon'] = 'fa-exchange-alt'
示例#18
0
 def displayEnd(self):
     return django_date_filter(self.endDate, settings.DATE_FORMAT)
示例#19
0
 def shortDate(self):
     return django_date_filter(self.startDate, 'Y-m-d')
示例#20
0
 def displayStartEndShort(self):
     return django_date_filter(self.startDateTime,
                               settings.SHORT_DATE_FORMAT)
示例#21
0
 def displayStart(self):
     return django_date_filter(self.startDateTime, settings.DATETIME_FORMAT)
 def handle(self, *args, **options):
     
     stripe.api_key = settings.STRIPE_SECRET_KEY
     x = stripe.Event.all(type = 'charge.succeeded',
                          created = {'gt': calendar.timegm((timezone.now()-timedelta(hours = 24)).timetuple())})
     
     if len(x) > 0 and 'data' in x:
         charges = x['data']
         
         for charge in charges:
             try:
                 account = Account.objects.get(stripe_customer_id = charge['data']['object']['customer'])
                 
                 if settings.DJANGO_ENV == 'production':
                    prefix = 'http://app.buildingspeak.com'
                 elif settings.DJANGO_ENV == 'staging':
                    prefix = 'http://buildingspeak-staging.com'
                 else:
                    prefix = 'http://128.0.0.1:8000'
                 
                 created = datetime.fromtimestamp(float(charge['created']))
                 billing_month_year = django_date_filter(created, 'F Y')
                 billing_month = django_date_filter(created, 'F')
                 
                 context   = Context({ 'account':            account,
                                       'billing_url':        prefix + '/' + str(account.id) + '/billing/',
                                       'payment_id':         'inv_%06d' % Payment.objects.get(stripe_charge_id = charge['data']['object']['id']).id,
                                       'charge_amount':      '${0:,.2f}'.format(charge['data']['object']['amount']/100.0),
                                       'charge_date':        django_date_filter(created, 'F j, Y'),
                                       'card_type':          charge['data']['object']['card']['type'],
                                       'last4':              charge['data']['object']['card']['last4'],
                                       'billing_month_year': billing_month_year,
                                       'billing_month':      billing_month,
                             })
                 
                 #turn html file + context variable into string for html body
                 html_body = render_to_string('mail/invoice_renderer.html', context)
                 
                 #construct email and reference Mandrill template name to be used
                 subject = 'BuildingSPEAK invoice for %s' % billing_month_year
                 email     = EmailMultiAlternatives(subject, 
                                                    html_body, 
                                                    headers={ 'X-MC-Template': 'invoice' })
                 email.attach_alternative(html_body, "text/html")
                 
                 #send to account contact email
                 email.to = [account.email]
                 email.send()
                 
                 #send to finance team
                 for person in [x[1] for x in settings.TEAM_FINANCE]:
                     email.to = [person]
                     email.send()
             except:
                 #construct email and reference Mandrill template name to be used
                 subject = 'BuildingSPEAK invoice for %s failed for Account %s' % (billing_month_year, str(account.id))
                 email     = EmailMultiAlternatives(subject, 
                                                    '', 
                                                    headers={ 'X-MC-Template': 'invoice' })
                 email.attach_alternative('', "text/html")
                 
                 #send to finance team
                 for person in [x[1] for x in settings.TEAM_FINANCE]:
                    email.to = [person]
                    email.send()
    def handle(self, *args, **options):

        stripe.api_key = settings.STRIPE_SECRET_KEY
        x = stripe.Event.all(type = 'charge.failed',
                             created = {'gt': calendar.timegm((timezone.now()-timedelta(hours = 24)).timetuple())})

        if len(x) > 0 and 'data' in x:
        
            for account in Account.objects.filter(status = 'Delinquent'):
                try:
                    if account.stripe_customer_id in set([z['data']['object']['customer'] for z in x['data']]):
                        
                        if settings.DJANGO_ENV == 'production':
                           prefix = 'http://app.buildingspeak.com'
                        elif settings.DJANGO_ENV == 'staging':
                           prefix = 'http://buildingspeak-staging.com'
                        else:
                           prefix = 'http://128.0.0.1:8000'
                        
                        
                        billing_month_year = django_date_filter(timezone.now(), 'F Y')
                        billing_month = django_date_filter(timezone.now(), 'F')
                        
                        context   = Context({ 'account':            account,
                                              'billing_url':        prefix + '/' + str(account.id) + '/billing/',
                                              'charge_amount':      '${0:,.2f}'.format(float(account.monthly_payment)),
                                              'card_type':          account.stripe_cc_type,
                                              'last4':              account.stripe_cc_last_4,
                                              'billing_month_year': billing_month_year,
                                              'billing_month':      billing_month,
                                    })
                        
                        #turn html file + context variable into string for html body
                        html_body = render_to_string('mail/delinquent_renderer.html', context)
                        
                        #construct email and reference Mandrill template name to be used
                        subject = 'BuildingSPEAK account delinquent!'
                        email     = EmailMultiAlternatives(subject, 
                                                           html_body, 
                                                           headers={ 'X-MC-Template': 'delinquent' })
                        email.attach_alternative(html_body, "text/html")
                        
                        #send to account contact email
                        email.to = [account.email]
                        email.send()
                        
                        #send to finance team
                        for person in [x[1] for x in settings.TEAM_FINANCE]:
                            email.to = [person]
                            email.send()
                except:
                    #construct email and reference Mandrill template name to be used
                    subject = 'BuildingSPEAK delinquency email delivery failed for Account %s' % str(account.id)
                    email     = EmailMultiAlternatives(subject, 
                                                       '', 
                                                       headers={ 'X-MC-Template': 'delinquent' })
                    email.attach_alternative('', "text/html")
                    
                    #send to finance team
                    for person in [x[1] for x in settings.TEAM_FINANCE]:
                       email.to = [person]
                       email.send()
示例#24
0
 def shortDate(self):
     return django_date_filter(self.startDate, 'Y-m-d')
示例#25
0
 def displayStartEndShort(self):
     return django_date_filter(self.startDateTime, settings.SHORT_DATE_FORMAT)
示例#26
0
 def displayStart(self):
     return django_date_filter(self.startDateTime, settings.DATETIME_FORMAT)
示例#27
0
 def displayEnd(self):
     return django_date_filter(self.endDate, settings.DATE_FORMAT)
示例#28
0
 def _creation_date(self, obj):
     creation_date_str = django_date_filter(obj.creation_date, 'M j, Y, P')
     if obj.creation_date > timezone.now():
         creation_date_str = '<span style="background-color: yellow">{}</span>'.format(creation_date_str)
     return mark_safe(creation_date_str)
示例#29
0
def period(request, period_id=None):
    base = base_ctx('Ranking', 'Current', request)

    # {{{ Get period object
    if not period_id:
        period = base['curp']
    else:
        period = get_object_or_404(Period, id=period_id, computed=True)

    if period.is_preview():
        base['messages'].append(Message(msg_preview % cdate(period.end, _('F jS')), type=Message.INFO))

    base['period'] = period
    if period.id != base['curp'].id:
        base['curpage'] = ''
    # }}}

    # {{{ Best and most specialised players
    qset = total_ratings(filter_active(Rating.objects.filter(period=period))).select_related('player')
    qsetp = qset.filter(player__race=P)
    qsett = qset.filter(player__race=T)
    qsetz = qset.filter(player__race=Z)
    base.update({
        'best':     qset.latest('rating'),
        'bestvp':   qset.latest('tot_vp'),
        'bestvt':   qset.latest('tot_vt'),
        'bestvz':   qset.latest('tot_vz'),
        'bestp':    qsetp.latest('rating'),
        'bestpvp':  qsetp.latest('tot_vp'),
        'bestpvt':  qsetp.latest('tot_vt'),
        'bestpvz':  qsetp.latest('tot_vz'),
        'bestt':    qsett.latest('rating'),
        'besttvp':  qsett.latest('tot_vp'),
        'besttvt':  qsett.latest('tot_vt'),
        'besttvz':  qsett.latest('tot_vz'),
        'bestz':    qsetz.latest('rating'),
        'bestzvp':  qsetz.latest('tot_vp'),
        'bestzvt':  qsetz.latest('tot_vt'),
        'bestzvz':  qsetz.latest('tot_vz'),
        'specvp':   qset.extra(select={'d':   'rating_vp/dev_vp*(rating+1.5)'}).latest('d'),
        'specvt':   qset.extra(select={'d':   'rating_vt/dev_vt*(rating+1.5)'}).latest('d'),
        'specvz':   qset.extra(select={'d':   'rating_vz/dev_vz*(rating+1.5)'}).latest('d'),
        'specpvp':  qsetp.extra(select={'d':  'rating_vp/dev_vp*(rating+1.5)'}).latest('d'),
        'specpvt':  qsetp.extra(select={'d':  'rating_vt/dev_vt*(rating+1.5)'}).latest('d'),
        'specpvz':  qsetp.extra(select={'d':  'rating_vz/dev_vz*(rating+1.5)'}).latest('d'),
        'spectvp':  qsett.extra(select={'d':  'rating_vp/dev_vp*(rating+1.5)'}).latest('d'),
        'spectvt':  qsett.extra(select={'d':  'rating_vt/dev_vt*(rating+1.5)'}).latest('d'),
        'spectvz':  qsett.extra(select={'d':  'rating_vz/dev_vz*(rating+1.5)'}).latest('d'),
        'speczvp':  qsetz.extra(select={'d':  'rating_vp/dev_vp*(rating+1.5)'}).latest('d'),
        'speczvt':  qsetz.extra(select={'d':  'rating_vt/dev_vt*(rating+1.5)'}).latest('d'),
        'speczvz':  qsetz.extra(select={'d':  'rating_vz/dev_vz*(rating+1.5)'}).latest('d'),
    })
    # }}}

    # {{{ Highest gainer and biggest losers

    # TODO: Fix these queries, highly dependent on the way django does things.
    gainers = filter_active(Rating.objects.filter(period=period))\
        .filter(prev__isnull=False)\
        .select_related('prev', 'player')\
        .extra(select={'diff': 'rating.rating - T3.rating'})\
        .order_by('-diff')
    losers = filter_active(Rating.objects.filter(period=period))\
        .filter(prev__isnull=False)\
        .select_related('prev', 'player')\
        .extra(select={'diff': 'rating.rating - T3.rating'})\
        .order_by('diff')

    base.update({
        'gainers': gainers[:5],
        'losers': losers[:5]
    })
    # }}}

    # {{{ Matchup statistics
    qset = period.match_set
    base['pvt_wins'], base['pvt_loss'] = count_matchup_games(qset, 'P', 'T')
    base['pvz_wins'], base['pvz_loss'] = count_matchup_games(qset, 'P', 'Z')
    base['tvz_wins'], base['tvz_loss'] = count_matchup_games(qset, 'T', 'Z')
    base.update({
        'pvp_games': count_mirror_games(qset, 'P'),
        'tvt_games': count_mirror_games(qset, 'T'),
        'zvz_games': count_mirror_games(qset, 'Z'),
    })

    base['tot_mirror'] = base['pvp_games'] + base['tvt_games'] + base['zvz_games']
    # }}}

    # {{{ Build country list
    all_players = Player.objects.filter(rating__period_id=period.id, rating__decay__lt=INACTIVE_THRESHOLD)
    base['countries'] = country_list(all_players)
    # }}}

    # {{{ Initial filtering of ratings
    entries = filter_active(period.rating_set).select_related('player')

    # Race filter
    race = get_param(request, 'race', 'ptzrs')
    q = Q()
    for r in race:
        q |= Q(player__race=r.upper())
    entries = entries.filter(q)

    # Country filter
    nats = get_param(request, 'nats', 'all')
    if nats == 'foreigners':
        entries = entries.exclude(player__country='KR')
    elif nats != 'all':
        entries = entries.filter(player__country=nats)

    # Sorting
    sort = get_param(request, 'sort', '')
    if sort not in ['vp', 'vt', 'vz']: 
        entries = entries.order_by('-rating', 'player__tag')
    else:
        entries = entries.extra(select={'d':'rating+rating_'+sort}).order_by('-d', 'player__tag')

    entries = entries.prefetch_related('prev')

    base.update({
        'race': race,
        'nats': nats,
        'sort': sort,
    })
    # }}}

    # {{{ Pages etc.
    pagesize = SHOW_PER_LIST_PAGE
    page = int(get_param(request, 'page', 1))
    nitems = entries.count()
    npages = nitems//pagesize + (1 if nitems % pagesize > 0 else 0)
    page = min(max(page, 1), npages)
    entries = entries[(page-1)*pagesize : page*pagesize] if page > 0 else []

    base.update({
        'page':       page,
        'npages':     npages,
        'startcount': (page-1)*pagesize,
        'entries':    populate_teams(entries),
        'nperiods':   Period.objects.filter(computed=True).count(),
    })
    # }}}

    base.update({
        'sortable':   True,
        'localcount': True,
    })
        
    fmt_date = django_date_filter(period.end, "F jS, Y")
    # Translators: List (number): (date)
    base.update({"title": _("List {num}: {date}").format(num=period.id, date=fmt_date)})

    return render_to_response('period.html', base)
示例#30
0
def period(request, period_id):
    base = base_ctx('Ranking', 'Current', request)

    # {{{ Get period object
    period = get_object_or_404(Period, id=period_id, computed=True)
    if period.is_preview():
        base['messages'].append(Message(msg_preview % period.end.strftime('%B %d'), type=Message.INFO))

    base['period'] = period
    if period.id != base['curp'].id:
        base['curpage'] = ''
    # }}}

    # {{{ Best and most specialised players
    qset = total_ratings(filter_active(Rating.objects.filter(period=period))).select_related('player')
    qsetp = qset.filter(player__race=P)
    qsett = qset.filter(player__race=T)
    qsetz = qset.filter(player__race=Z)
    base.update({
        'best':     qset.latest('rating'),
        'bestvp':   qset.latest('tot_vp'),
        'bestvt':   qset.latest('tot_vt'),
        'bestvz':   qset.latest('tot_vz'),
        'bestp':    qsetp.latest('rating'),
        'bestpvp':  qsetp.latest('tot_vp'),
        'bestpvt':  qsetp.latest('tot_vt'),
        'bestpvz':  qsetp.latest('tot_vz'),
        'bestt':    qsett.latest('rating'),
        'besttvp':  qsett.latest('tot_vp'),
        'besttvt':  qsett.latest('tot_vt'),
        'besttvz':  qsett.latest('tot_vz'),
        'bestz':    qsetz.latest('rating'),
        'bestzvp':  qsetz.latest('tot_vp'),
        'bestzvt':  qsetz.latest('tot_vt'),
        'bestzvz':  qsetz.latest('tot_vz'),
        'specvp':   qset.extra(select={'d':   'rating_vp/dev_vp*rating'}).latest('d'),
        'specvt':   qset.extra(select={'d':   'rating_vt/dev_vt*rating'}).latest('d'),
        'specvz':   qset.extra(select={'d':   'rating_vz/dev_vz*rating'}).latest('d'),
        'specpvp':  qsetp.extra(select={'d':  'rating_vp/dev_vp*rating'}).latest('d'),
        'specpvt':  qsetp.extra(select={'d':  'rating_vt/dev_vt*rating'}).latest('d'),
        'specpvz':  qsetp.extra(select={'d':  'rating_vz/dev_vz*rating'}).latest('d'),
        'spectvp':  qsett.extra(select={'d':  'rating_vp/dev_vp*rating'}).latest('d'),
        'spectvt':  qsett.extra(select={'d':  'rating_vt/dev_vt*rating'}).latest('d'),
        'spectvz':  qsett.extra(select={'d':  'rating_vz/dev_vz*rating'}).latest('d'),
        'speczvp':  qsetz.extra(select={'d':  'rating_vp/dev_vp*rating'}).latest('d'),
        'speczvt':  qsetz.extra(select={'d':  'rating_vt/dev_vt*rating'}).latest('d'),
        'speczvz':  qsetz.extra(select={'d':  'rating_vz/dev_vz*rating'}).latest('d'),
    })
    # }}}

    # {{{ Matchup statistics
    qset = period.match_set
    base['pvt_wins'], base['pvt_loss'] = count_matchup_games(qset, 'P', 'T')
    base['pvz_wins'], base['pvz_loss'] = count_matchup_games(qset, 'P', 'Z')
    base['tvz_wins'], base['tvz_loss'] = count_matchup_games(qset, 'T', 'Z')
    base.update({
        'pvp_games': count_mirror_games(qset, 'P'),
        'tvt_games': count_mirror_games(qset, 'T'),
        'zvz_games': count_mirror_games(qset, 'Z'),
    })

    base['tot_mirror'] = base['pvp_games'] + base['tvt_games'] + base['zvz_games']
    # }}}

    # {{{ Build country list
    all_players = Player.objects.filter(rating__period_id=period.id, rating__decay__lt=INACTIVE_THRESHOLD)
    base['countries'] = country_list(all_players)
    # }}}

    # {{{ Initial filtering of ratings
    entries = filter_active(period.rating_set).select_related('player')

    # Race filter
    race = get_param(request, 'race', 'ptzrs')
    q = Q()
    for r in race:
        q |= Q(player__race=r.upper())
    entries = entries.filter(q)

    # Country filter
    nats = get_param(request, 'nats', 'all')
    if nats == 'foreigners':
        entries = entries.exclude(player__country='KR')
    elif nats != 'all':
        entries = entries.filter(player__country=nats)

    # Sorting
    sort = get_param(request, 'sort', '')
    if sort not in ['vp', 'vt', 'vz']: 
        entries = entries.order_by('-rating', 'player__tag')
    else:
        entries = entries.extra(select={'d':'rating+rating_'+sort}).order_by('-d', 'player__tag')

    base.update({
        'race': race,
        'nats': nats,
        'sort': sort,
    })
    # }}}

    # {{{ Pages etc.
    pagesize = 40
    page = int(get_param(request, 'page', 1))
    nitems = entries.count()
    npages = nitems//pagesize + (1 if nitems % pagesize > 0 else 0)
    page = min(max(page, 1), npages)
    entries = entries[(page-1)*pagesize : page*pagesize]

    base.update({
        'page':       page,
        'npages':     npages,
        'startcount': (page-1)*pagesize,
        'entries':    populate_teams(entries),
        'nperiods':   Period.objects.filter(computed=True).count(),
    })
    # }}}

    base.update({
        'sortable':   True,
        'localcount': True,
    })
        
    fmt_date = django_date_filter(period.end, "F jS, Y")
    base.update({"title": "List {}: {}".format(period.id, fmt_date)})

    return render_to_response('period.html', base)