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 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
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 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
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
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)
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)
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')}
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)}" )
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)
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)))
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)
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)))
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'
def displayEnd(self): return django_date_filter(self.endDate, settings.DATE_FORMAT)
def shortDate(self): return django_date_filter(self.startDate, 'Y-m-d')
def displayStartEndShort(self): return django_date_filter(self.startDateTime, settings.SHORT_DATE_FORMAT)
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()
def shortDate(self): return django_date_filter(self.startDate, 'Y-m-d')
def displayStartEndShort(self): return django_date_filter(self.startDateTime, settings.SHORT_DATE_FORMAT)
def displayStart(self): return django_date_filter(self.startDateTime, settings.DATETIME_FORMAT)
def displayEnd(self): return django_date_filter(self.endDate, settings.DATE_FORMAT)
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)
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)
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)