def naturaltime_addon(uploadDate): """ :param uploadDate: the date when the object was added :return: True if was more than 12 hours ago """ if timezone.now() > uploadDate + timedelta(days=1.1): return 'le {0}'.format(naturalday(uploadDate, 'd M Y')) elif timezone.now() > uploadDate + timedelta(hours=12): return naturalday(uploadDate) return naturaltime(uploadDate)
def test_naturalday_tz(self): today = datetime.date.today() tz_one = tzinfo.FixedOffset(datetime.timedelta(hours=-12)) tz_two = tzinfo.FixedOffset(datetime.timedelta(hours=12)) # Can be today or yesterday date_one = datetime.datetime(today.year, today.month, today.day, tzinfo=tz_one) naturalday_one = humanize.naturalday(date_one) # Can be today or tomorrow date_two = datetime.datetime(today.year, today.month, today.day, tzinfo=tz_two) naturalday_two = humanize.naturalday(date_two) # As 24h of difference they will never be the same self.assertNotEqual(naturalday_one, naturalday_two)
def test_naturalday_tz(self): today = datetime.date.today() tz_one = get_fixed_timezone(-720) tz_two = get_fixed_timezone(720) # Can be today or yesterday date_one = datetime.datetime(today.year, today.month, today.day, tzinfo=tz_one) naturalday_one = humanize.naturalday(date_one) # Can be today or tomorrow date_two = datetime.datetime(today.year, today.month, today.day, tzinfo=tz_two) naturalday_two = humanize.naturalday(date_two) # As 24h of difference they will never be the same self.assertNotEqual(naturalday_one, naturalday_two)
def index(request, category=None, year=None, month=None, day=None, author=None, template_name="blog/index.html"): posts = Post.objects.published().select_related('user') extra_context = {} if category: category = get_object_or_404(Category, slug=category) posts = posts.filter(category=category) extra_context.update({'category': category}) if author: author = get_object_or_404(User, username=author) posts = posts.filter(user=author) extra_context.update({'author': author}) if year: posts = posts.filter(published_on__year=int(year)) extra_context.update({'drilldown_mode': 'year', 'title': year}) else: year=1 if month: # display month as full word. from django.template import defaultfilters posts = posts.filter(published_on__month=int(month)) extra_context.update({ 'drilldown_mode': 'month', 'title' : defaultfilters.date(date(int(year), int(month), 1), 'E Y') }) else: month=1 if day: from django.contrib.humanize.templatetags.humanize import naturalday posts = posts.filter(published_on__day=int(day)) extra_context.update({ 'drilldown_mode': 'day', 'title' : naturalday(date(int(year), int(month), int(day))) }) else: day=1 tag = request.GET.get('tag', None) if tag: tag = get_object_or_404(Tag, name=tag) posts = TaggedItem.objects.get_by_model(posts, tag) extra_context.update({ 'date': date(int(year), int(month), int(day)), 'posts': posts, 'tag': tag, }) return template_name, extra_context
def aaData(self, request): """ aaData formats for datatables """ subscriptions=request.user.profile.subscriptions.all() tags = "" for tag in self.tags.all(): vars = render_tag(tag, '/forum/tag/', subscriptions) tags += render_to_string('tag_template.html', vars) title = u"<a href=\"{0}\" >{1}</a>".format( self.get_absolute_url(), self.title ) created = u"{0} {1} av <a href=\"{2}\">{3}</a>".format(naturalday(self.date_created), self.date_created.strftime("%H:%M"), self.created_by.get_profile().get_absolute_url(), self.created_by.username) if self.allow_comments: allow_comments = self.get_posts_index() else: allow_comments = "-" data = { 'title': title, 'created': created, 'tags' : tags, 'allow_comments': allow_comments, 'id': self.id, } return data
def sensibletime(value, arg = None): ''' If it's today, show the time, otherwise show the date. Might be improved later on. @param value: either a datetime or a timestamp @param arg: the format to be passed to humanize.naturalday in case it's needed ''' try: value = datetime.datetime.fromtimestamp(value) except ValueError: #it's an integer, but it's out of range: return it as is return value except TypeError: pass #It's already a datetime, no need to do anything try: p_value = datetime.date(value.year, value.month, value.day) except AttributeError: # Passed value wasn't a date object return value except ValueError: # Date arguments out of range return value delta = p_value - datetime.date.today() if delta.days == 0: return value.strftime('%H:%M:%S') #TODO: Remove hardcoding return humanize.naturalday(value, arg)
def aaData(self): """ aaData formats for datatables """ title = u"<a href=\"{0}\" >{1}</a>".format( self.get_absolute_url(), self.title ) tags = [u"<span class=\"ui-tag\"><a href=\"{0}\">{1}</a></span>".format( reverse( 'list_forum', args = [ tag.name ]), unicode(tag.name).title() ) for tag in self.tags.all()] created = u"{0} {1} av <a href=\"{2}\">{3}</a>".format(naturalday(self.date_created), self.date_created.strftime("%H:%M"), self.created_by.get_profile().get_absolute_url(), self.created_by.username) data = { 'title': title, 'tags' : u" ".join( tags ), 'created': created, 'index' : self.id, 'posts_index': self.posts_index, } if self.last_comment: last_comment =u"<a href=\"{0}\">{1} {2} av {3}</a>".format(self.last_comment.get_absolute_url(), naturalday(self.last_comment.added), self.last_comment.added.strftime("%H:%M"), self.last_comment.created_by.username) data['last_comment'] = last_comment data['last_comment_index'] = self.last_comment.id else: data['last_comment'] = " " data['last_comment_index'] = " " return data
def galleries(request,language_code='en'): response_data = {} response_data['message'] = 'Success.' response_data['status'] = 200 if validate_token(request) and validate_language(language_code): cache_key = str(language_code) + '_galleries_' response_data['galleries'] = get_cache(cache_key) if response_data['galleries'] is None: galleries = None gallery_set = Gallery.objects.order_by('name') if gallery_set: galleries = [] for gallery in gallery_set: i = {} i['id'] = gallery.id i['name'] = gallery.name i['slug'] = gallery.slug i['is_enabled'] = gallery.is_enabled i['is_default'] = gallery.is_default i['created_at'] = str(naturalday(gallery.created_at)) galleries.append(i) response_data['galleries'] = galleries set_cache(cache_key,galleries) else: response_data['galleries'] = None response_data['message'] = 'Please verify access token and language code.' response_data['status'] = 403 return HttpResponse(json.dumps(response_data), content_type="application/json",status=response_data['status'])
def next_card_due_at(request, deck=None, tags=None): """ Returns a human-readable format of the next date that the card is due. """ cards = Card.objects.common_filters(request.user, deck=deck, tags=tags) due_at = cards.next_card_due_at() return naturalday(due_at.date())
def test_naturalday_tz(self): from django.contrib.humanize.templatetags.humanize import naturalday today = date.today() tz_one = FixedOffset(-12, 'TzOne') tz_two = FixedOffset(12, 'TzTwo') # Can be today or yesterday date_one = datetime(today.year, today.month, today.day, tzinfo=tz_one) naturalday_one = naturalday(date_one) # Can be today or tomorrow date_two = datetime(today.year, today.month, today.day, tzinfo=tz_two) naturalday_two = naturalday(date_two) # As 24h of difference they will never be the same self.assertNotEqual(naturalday_one, naturalday_two)
def clean_old_rooms(): for acc in ACCluster.objects.all(): then = datetime.now() - timedelta(days=30) then = then.replace(microsecond=0) with ac_api_client(acc) as api: for room in Room.objects.filter(lastvisited__lt=then): logging.debug("room %s was last used %s" % (room.name,humanize.naturalday(room.lastvisited))) send_message.apply_async([room.creator,"You have an unused meetingroom at %s" % acc.name ,"Do you still need %s (%s)?" % (room.name,room.permalink())])
def nice_date(date, date_format=None): """ For date values that are tomorrow, today or yesterday compared to present day returns representing string. Otherwise, returns a string formatted according to settings.DATE_FORMAT. """ datestring = naturalday(date, date_format) return datestring and datestring[0].upper() + datestring[1:]
def export_as_image(): """ Exports agenda as an image. """ # Base image base = Image.open('site_wide/static/images/agenda_base.png').convert('RGBA') # Fonts bold = ImageFont.truetype('site_wide/static/fonts/Nexa/nexa-bold.otf', 24) light = ImageFont.truetype('site_wide/static/fonts/Nexa/nexa-light.otf', 24) # Color color = (31, 31, 31, 255) meeting_n = 787 meeting = Meeting.objects.get(id = 5) print date(meeting.date) # make a blank image for the text, # initiated to transparent text color text = Image.new('RGBA', base.size, (255, 255, 255, 0)) # Get a drawing context. d = ImageDraw.Draw(text) # META d.text((545, 193), str(meeting_n), font=bold, fill=color) d.text((600, 193), naturalday(meeting.date), font=bold, fill=color) # INTRO d.text((585, 345), 'Sergeant-at-Arms', font=light, fill=color) d.text((495, 422), 'Chairman', font=light, fill=color) d.text((527, 550), 'Grammarian', font=light, fill=color) d.text((500, 627), 'Secretary', font=light, fill=color) d.text((440, 704), 'Toast', font=light, fill=color) d.text((625, 748), 'Moment of Reflection', font=light, fill=color) d.text((605, 793), 'Moment of Humour', font=light, fill=color) # EDUCATION d.text((525, 865), 'Toastmaster', font=light, fill=color) d.text((445, 943), 'Timer', font=light, fill=color) d.text((477, 1020), 'Speaker', font=light, fill=color) # TABLE TOPICS d.text((517, 1128), 'Table Topics', font=light, fill=color) # GENERAL EVALUATION d.text((592, 1235), 'General Evaluator', font=light, fill=color) d.text((585, 1310), 'Speech Evaluator', font=light, fill=color) d.text((528, 1353), 'Timer report', font=light, fill=color) d.text((609, 1454), 'Grammarian report', font=light, fill=color) d.text((525, 1496), 'Toastmaster', font=light, fill=color) d.text((492, 1570), 'Chairman', font=light, fill=color) out = Image.alpha_composite(base, text) out.show()
def test_natural_date_django_equivalent(self): self.selenium.get(self.live_server_url) # One year and 30 days for i in range(0, 365+30): time.sleep(0.1) d = date.today() - timedelta(days=i) formatted_date = d.isoformat() filter_date = self.selenium.execute_script('return env.getFilter("naturalDay")("%s");' % formatted_date); self.assertEqual(filter_date, naturalday(d, 'l j b.'))
def get_formatted(value, formater): if value: naturalday = humanize.naturalday(value) localize = force_unicode(formats.localize(value, use_l10n=True)) if formater: dtm = formater.format(localize=localize, naturalday=naturalday) else: dtm = naturalday return localize if naturalday.find(unicode(value.year)) != -1 else dtm return value
def disp_days(days): """ Returns a human readable string for DAYS duration. """ if isinstance(days, timedelta): days = timedelta_float(days) if days < 1: return '%.0f minutes' % days_in_minutes(days) else: return naturalday(days)
def aaData(self, request): """ aaData formats for datatables """ last_login = u'{0} {1}'.format( naturalday( self.last_login ), self.last_login.strftime("%H:%M") ) date_joined = u'{0} {1}'.format( naturalday( self.date_joined ), self.date_joined.strftime("%H:%M") ) data = { 'photo': self.photo, 'username' : self.userlink, 'last_login' : last_login, 'date_joined' : date_joined, 'gender' : self.gender, 'location' : self.location, 'age' : self.age, } return data
def aaData(self, request): """ aaData formats for datatables """ title = u'<a href="{0}" >{1}</a>'.format(self.get_absolute_url(), self.title) subscriptions = request.user.profile.subscriptions.all() tags = "" for tag in self.tags.all(): vars = render_tag(tag, "/forum/tag/", subscriptions) tags += render_to_string("tag_template.html", vars) created = u'{0} {1} av <a href="{2}">{3}</a>'.format( naturalday(self.date_created), self.date_created.strftime("%H:%M"), self.created_by.get_profile().get_absolute_url(), self.created_by.username, ) data = {"title": title, "tags": tags, "created": created, "index": self.id, "posts_index": self.posts_index} if self.last_comment: last_comment = u'<a href="{0}">{1} {2} av {3}</a>'.format( self.last_comment.get_absolute_url(), naturalday(self.last_comment.added), self.last_comment.added.strftime("%H:%M"), self.last_comment.created_by.username, ) data["last_comment"] = last_comment else: last_comment = u'<a href="{0}">{1} {2} av {3}</a>'.format( self.get_absolute_url(), naturalday(self.date_last_changed), self.date_last_changed.strftime("%H:%M"), self.created_by.username, ) data["last_comment"] = last_comment data["date_last_changed"] = time.mktime(self.date_last_changed.timetuple()) return data
def experiment_end_time_badge(experiment): c = { 'actual_time': experiment.end_time.strftime('%a %d %b %Y %H:%M'), 'iso_time': get_local_time(experiment.end_time).isoformat(), 'natural_time': naturalday(experiment.end_time), } # We don't render via Mustache+Pystache - Django templating will do # return render_mustache('badges/end_time_badge', c) return loader.render_to_string('badges/end_time_badge.html', c)
def serialize(self): """ serializes the photo to a json-style dictionary. """ return { 'public_id': self.public_id, 'filename': os.path.basename(self.image.name), 'username': self.user.username, 'caption': self.caption, 'effects': self.effects, 'date': title(naturalday(self.date_modified)), }
def experiment_end_time_badge(experiment): c = { 'actual_time': experiment.end_time.strftime('%a %d %b %Y %H:%M'), 'iso_time': get_local_time(experiment.end_time).isoformat(), 'natural_time': naturalday(experiment.end_time), } # We don't render via Mustache+Pystache - Django templating will do # return render_mustache('badges/end_time_badge', c) return loader.render_to_string( 'sequencing_facility/badges/end_time_badge.html', c)
def calculate_timestamp(timestamp): """ 1. Today or yesterday: - EX: 'today at 10:56 AM' - EX: 'yesterday at 5:19 PM' 2. other: - EX: 05/06/2020 - EX: 12/28/2020 """ ts = "" # Today or yesterday if (naturalday(timestamp) == "today") or (naturalday(timestamp) == "yesterday"): str_time = datetime.strftime(timestamp, "%I:%M %p") str_time = str_time.strip("0") ts = f"{naturalday(timestamp)} at {str_time}" # other days else: str_time = datetime.strftime(timestamp, "%m/%d/%Y") ts = f"{str_time}" return str(ts)
def to_representation(self, instance): representation = super(ItemsSerializer, self).to_representation(instance) # imagemURL = cloudinary.utils.cloudinary_url(instance.image, width = 100, height = 150, crop = 'fill', quality = '30') # imagemURL = cloudinary.utils.cloudinary_url('DjangoAPI/' + instance.image) # representation['image'] = imagemURL[0] date = parse(representation['created'], ignoretz=True) representation['created'] = naturalday(date) return representation
def test_naturalday_tz(self): from django.contrib.humanize.templatetags.humanize import naturalday today = datetime.date.today() tz_one = tzinfo.FixedOffset(datetime.timedelta(hours=-12)) tz_two = tzinfo.FixedOffset(datetime.timedelta(hours=12)) # Can be today or yesterday date_one = datetime.datetime(today.year, today.month, today.day, tzinfo=tz_one) naturalday_one = naturalday(date_one) # Can be today or tomorrow date_two = datetime.datetime(today.year, today.month, today.day, tzinfo=tz_two) naturalday_two = naturalday(date_two) # As 24h of difference they will never be the same self.assertNotEqual(naturalday_one, naturalday_two)
def get_message(self, transactions): #for every pending transaction should build a string that lists the approval dates needed. dates_list = [] user_is_broker = self.request.user.userprofile.basic_role == 'broker' if user_is_broker: #user_pending_transactions = self.user_pending_transactions() for transaction in self.user_pending_transactions(): date_string = naturalday(transaction.created) dates_list.append(date_string) transaction_dates = list_to_string(dates_list, ' | ') message = _('You have pending transactions for %s' % (transaction_dates)) return message
def postSubjectList(request): subjectId = request.GET.get('id') offset_limit = 5 if int(request.GET.get('offset')) == 0: offset = 0 else: offset = int(request.GET.get('offset')) - 1 posts = Descriptions.objects.filter(subject_id=subjectId).values( ).order_by('-updated')[int(offset) * offset_limit:(int(offset) * offset_limit) + offset_limit] total = Descriptions.objects.filter(subject_id=subjectId).count() content = [] for post in posts: postObj = Descriptions.objects.get(id=post['id']) images = Images.objects.filter(description_id=post['id']).count() user = User.objects.get(id=post['user_id']) for gp in user.groups.all(): group = gp info = {} updated = '' if humanize.naturalday(post['updated']) == 'today': updated = humanize.naturaltime(post['updated']) else: updated = humanize.naturalday(post['updated']) info = { 'id': post['id'], 'display': user.profile.display, 'role': str(group), 'description': post['description'], 'updated': updated, 'recommendation': postObj.recommend, 'comments': postObj.comments, 'images': images, 'user': str(postObj.user.username), } content.append(info) return HttpResponse(json.dumps(content))
def pending_ticket_list(request): data = [] open_status = TicketStatus.objects.get(value="open") replied_status = TicketStatus.objects.get(value="clientreply") queryset = Ticket.objects.filter( Q(status=open_status) | (Q(status=replied_status) & Q(assigned_to=request.user))) for item in queryset: data.append(TicketItem( item.id, item.order_number, naturalday(item.created_date), '', '', item.priority.name, item.problem.name, '', item.status.name, item.assigned_to)) serializer = TicketListSerializer(data, many=True) return JSONResponse(serializer.data)
class DocumentView(DocumentView): list_display = ['summary'] list_thumbnail = True thumbnail = True queryset = Document.objects.all() fields = ['summary', 'date_created'] ordering = ['title'] url_identifier_field = 'slug' field_class_filters = { models.DateTimeField: lambda v: naturalday(v, 'F Y').title() } template = 'small_dms/detail.html' list_template = 'small_dms/list.html'
def pages(request,language_code='en'): response_data = {} response_data['message'] = 'Success.' response_data['status'] = 200 if validate_token(request) and validate_language(language_code): category_slug = request.REQUEST.get('category_slug', None) page_slug = request.REQUEST.get('page_slug', None) cache_key = str(language_code) + '_pages_' + str(category_slug) + str(page_slug) response_data['pages'] = get_cache(cache_key) if response_data['pages'] is None: pages = [] page_set = [] language = validate_language(language_code) if category_slug: category_slug_object = Category.objects.filter(language=language[0], slug=request.REQUEST['category_slug'])[:1] if category_slug_object: page_set = Page.objects.order_by('title').filter(is_enabled = True, category_id=category_slug_object[0].id) elif page_slug: page_set = Page.objects.filter(is_enabled = True, slug=request.REQUEST['page_slug'])[:1] else: page_set = Page.objects.order_by('title').filter(is_enabled = True) for page in page_set: p = {} p['id'] = page.id p['title'] = page.title p['headline'] = re.sub('<[^<]+?>', '', page.headline).strip() p['slug'] = page.slug p['content'] = page.content if len(page_set) == 1 else None p['content_no_html'] = strip_tags(p['content'] ) if p['content'] else None p['author'] = page.user.first_name if page.user else None p['category'] = page.category.name p['category_slug'] = page.category.slug p['feed_type'] = None p['twitter_hashtags'] = page.twitter_hashtags p['feed_source']= page.feed_source p['feed_image_url'] = None p['image_url']= page.image_url p['video_url']= page.video_url p['audio_url']= page.audio_url p['priority']= page.priority p['is_enabled']= page.is_enabled p['created_at'] = str(naturalday(page.created_at)) p['timestamp'] = None pages.append(p) response_data['pages'] = pages set_cache(cache_key,pages) else: response_data['pages'] = None response_data['message'] = 'Please verify access token and language code.' response_data['status'] = 403 return HttpResponse(json.dumps(response_data), content_type="application/json",status=response_data['status'])
def test_notify_impending_copilot_windows_closing_one_project(slack_messages): project = ProjectFactory(copilot_support_ends_at=timezone.now() + timedelta(days=3)) assert notify_impending_copilot_windows_closing() is None end_date = naturalday(project.copilot_support_ends_at) url = f"http://localhost:8000{project.get_staff_url()}" line = f"\n * <{url}|{project.title}> ({end_date})" expected = f"Projects with support window ending soon:{line}" assert len(slack_messages) == 1 text, channel = slack_messages[0] assert channel == "co-pilot-support" assert text == expected
def time_since_until_format(date, schedule=Event.SCHEDULE_PAST, time=None): from django.contrib.humanize.templatetags.humanize import naturalday # combine date and time, if time is given. Some models provide "date" # already in datetime format if time: date = datetime.datetime.combine(date, time) time_since = timesince(date) time_until = timeuntil(date) human_date_orig = naturalday(date) human_date = human_date_orig + ' - ' # django 1.1.x zero_strg = '0 minutes' # django 1.0.x zero_strg2 = '' # time_since & time_until == now() if (time_since.__eq__(zero_strg) and time_until.__eq__(zero_strg)) or \ (time_since.__eq__(zero_strg2) and time_until.__eq__(zero_strg2)): strg = human_date + 'currently happening ...' return strg # FUTURE events if time_since.__eq__(zero_strg) or time_since.__eq__(zero_strg2): if schedule == Event.SCHEDULE_PAST: strg = human_date + 'will happen / please try to do this in ' + time_until elif schedule == Event.SCHEDULE_PARTIAL: strg = human_date + '(currently in progress) - due in ' + time_until else: strg = human_date + 'due in ' + time_until return strg # PAST EVENTS if time_until.__eq__(zero_strg) or time_until.__eq__(zero_strg2): if schedule == Event.SCHEDULE_PAST: strg = human_date + time_since + ' ago' elif schedule == Event.SCHEDULE_PARTIAL: strg = human_date + '(currently in progress) - overdue by ' + time_since else: strg = human_date + 'overdue by ' + time_since return strg # return the date itself if all above failed (which should never happen ...) return human_date_orig
class Feedback(models.Model): enquiry = models.ForeignKey(Enquiry, null=True, blank=True, on_delete=models.CASCADE) feedback = models.TextField(null=False, blank=False) created_by = models.IntegerField(blank=True, null=True) created_at = models.DateTimeField(default=naturalday(timezone.now)) updated_by = models.IntegerField(blank=True, null=True) updated_at = models.DateTimeField(auto_now=True) deleted_at = models.DateTimeField(blank=True, null=True) deleted_by = models.IntegerField(blank=True, null=True) class Meta: db_table = "feedback" def delete(self): self.deleted_at = timezone.now() self.save()
def receive_json(self, content, **kwargs): message_text = content['text'] message_created = ChatMessage.objects.create( text=message_text, author=self.scope['user'], project_id=self.project_pk).created.astimezone( get_default_timezone()) data = { 'author': self.scope['user'].get_full_name(), 'text': message_text, 'created': naturalday(message_created) + ' at ' + message_created.strftime('%H:%M'), } async_to_sync(self.channel_layer.group_send)(self.group_name, { 'type': 'send_message', 'data': data, })
def event_gviz(request, account): if not request.user.has_perm('view', account): return HttpResponseForbidden() since = date.today() - timedelta(days=6) events = Event.objects.filter( account=account, bookings__in=Booking.objects.filter(timestamp__gt=datetime.combine(since, time.min)) ).distinct() rows = [] for d in dateIterator(from_date=since): for event in events: num = Attendee.objects.filter( booking__timestamp__range=(datetime.combine(d, time.min), datetime.combine(d, time.max)), booking__event=event, booking__confirmed=True, ).aggregate(Sum('attendee_count'))['attendee_count__sum'] rows.append({'date': d, 'id': event.id, 'attendees': num}) description = { ('date', 'date', 'Date') : [(str(event.id), 'number', event.title) for event in events] } data = {} for index, row in enumerate(rows): date_tuple = (row['date'], naturalday(row['date'], "j F")) if date_tuple in data: data[date_tuple].append(row['attendees']) else: data[date_tuple] = [row['attendees']] data_table = gviz_api.DataTable(description) data_table.LoadData(data) out = data_table.ToResponse() return HttpResponse(out, content_type='text/plain')
def get(self, request, *args, **kwargs): from datetime import datetime from django.contrib.humanize.templatetags.humanize import naturalday ahora = datetime.now() id_pedido = self.kwargs.get('pk') confs = Configuracion_pedido.objects.all() for config in confs: if ahora.date() <= config.conf_fecha_fin_autorizador: Pedido.objects.filter(ped_id_ped=id_pedido).update( ped_estatusPedido=2, ped_id_UsuarioAutorizo=self.request.user, ped_fechaAutorizacion=ahora) else: messages.error( request, 'No puede autorizar fuera de tiempo, fecha limite ' + naturalday(config.conf_fecha_fin_autorizador)) rev = reverse_lazy('pedido:listar_pedido') get_encode = self.request.GET.urlencode() rev = rev + '?' + get_encode return redirect(rev)
def get_more_questions(request): q = Question.objects.filter(creator=UserProfile.objects.get(user=request.user)).order_by('-pub_date') p = Paginator(q, 10) page = request.GET.get('q_page', 2) json = { } json['questions'] = {} count = 1 for q in p.page(page): json['questions'][count] = { 'text': q.text, 'id': q.id, 'naturalday': naturalday(q.pub_date), } count += 1 json['has_next'] = p.page(page).has_next() return JsonResponse(json)
def notify_if_not_duplicate(request, item): the_message_content = mark_safe("""<strong><a title='{dismiss_title}' href='{dismiss_url}'>×</a></strong> <small><em>{date}</em></small>, <strong>{created_by}</strong>: {message}""".format( created_by=item.created_by, date=naturalday(item.date), message=linebreaksbr(removetags(item.content, 'script')), dismiss_title=_('Dismiss'), dismiss_url=item.get_delete_url())) jot_messages = [msg for msg in messages.get_messages(request) \ if msg.level == JOT_MESSAGE_LEVEL] in_jot_messages = [msg for msg in jot_messages \ if msg.message == the_message_content] if not in_jot_messages: messages.add_message(request, JOT_MESSAGE_LEVEL, the_message_content, fail_silently=True)
def get_more_questions(request): page = request.GET.get('q_page', 2) user_id = request.GET.get('user_id') target = UserProfile.objects.get(user=User.objects.get(id=user_id)) if target.hide_activity: if target.user.id != request.user.id: return 'Proibido.' q = Question.objects.filter(creator=target).order_by('-pub_date') p = Paginator(q, 10) json = {} json['questions'] = {} count = 1 try: p.page(page) except: return HttpResponse(False) for q in p.page(page): if target.user.id == request.user.id: best_answer = q.best_answer else: best_answer = -1 json['questions'][count] = { 'text': q.text, 'id': q.id, 'naturalday': naturalday(q.pub_date), 'best_answer': best_answer } count += 1 json['has_next'] = p.page(page).has_next() return JsonResponse(json)
def index(request): user = request.user context = {} fav_tags = [f.tag for f in UserFavoriteTags.objects.select_related('tag').filter(user=user)] context['fav_tags'] = fav_tags resources = UserResources.objects.select_related('resource').filter(user=user) context['resources'] = resources assigned_badges = AssignedBadges.objects.select_related('badge')\ .filter(completed=True, resource__user=user).order_by('-completed_at') history = OrderedDict() for ab in assigned_badges: day = naturalday(ab.completed_at) if day not in history: history[day] = [] history[day].append(ab.badge) context['history'] = history return render(request, 'dashboard/index.html', context=context)
def aaData(self): """ aaData formats for datatables """ title = u"<a href=\"{0}\" >{1}</a>".format( self.get_absolute_url(), self.title ) tags = [u"<span class=\"ui-tag\"><a href=\"{0}\">{1}</a></span>".format( reverse( 'search_article', args = [ tag.name ]), unicode(tag.name).title() ) for tag in self.tags.all()] created = u"{0} {1} av <a href=\"{2}\">{3}</a>".format(naturalday(self.date_created), self.date_created.strftime("%H:%M"), self.created_by.get_profile().get_absolute_url(), self.created_by.username) if self.allow_comments: allow_comments = self.get_posts_index() else: allow_comments = "-" data = { 'title': title, 'created': created, 'tags' : u" ".join( tags ), 'allow_comments': allow_comments, 'id': self.id, } return data
def ajax_cloud_storage(request): print '-- ajax_cloud_storage:' if not request.user.is_authenticated(): return "" user = request.user profile = userprofile.objects.get(user=request.user) secret = profile.secret print request.user uploaded_files = Uploaded_Files.objects.filter(user=request.user).order_by('-pk') counter = 0 fobj = [] for f in uploaded_files: row = [] counter+=1 row.append('<a href="/media/'+str(f.file.file)+'">'+str(counter)+'</a>') row.append(naturalday(f.date_created)) row.append('<a href="/media/'+str(f.file.file)+'" target="_blank">'+clear_filename(f.file.file)+'</a> <small><a href="#" id="name" data-type="text" data-pk="1" data-original-title="Name this file" class="editable editable-click">create alias</a></small>') row.append(filesizeformat(f.file.file.size)) row.append(upper(get_file_extension(f.file.file))) row.append('<span class="label label-warning">Synchronising..</span>') if (not f.is_shared): row.append(' <a class="btn btn-success" href="#"><i class="fa fa-search-plus "></i></a> <a class="btn btn-info" href="/media/'+str(f.file.file)+'" target="_blank"><i class="fa fa-cloud-download "></i></a> <a class="btn btn-info" href="#" target="_blank"><i class="fa fa-share "></i></a> <a class="btn btn-danger" href="#"><i class="fa fa-trash-o "></i></a>') else: row.append(' <a class="btn btn-warning" href="/password/protect/file"><i class="fa fa-key "></i></a> <a class="btn btn-danger" href="#"><i class="fa fa-trash-o "></i></a><button type="button" class="btn btn-link"><i class="fa fa-link"></i> Share Link</button><span class="label label-default">'+str(f.share_link_clicks_count)+'</span>') fobj.append(row) json = { 'data': fobj } return HttpResponse(simplejson.dumps(json), mimetype='application/json')
def images(request,language_code='en'): response_data = {} response_data['message'] = 'Success.' response_data['status'] = 200 if validate_token(request) and validate_language(language_code): page_slug = request.REQUEST.get('page_slug', None) cache_key = str(language_code) + '_images_' + str(page_slug) response_data['images'] = get_cache(cache_key) if response_data['images'] is None: images = [] image_set = [] if page_slug: page_slug_object = Page.objects.filter(slug=request.REQUEST['page_slug'])[:1] if page_slug_object: image_set = Image.objects.order_by('name').filter(page_id=page_slug_object[0].id) else: image_set = Image.objects.order_by('name') for image in image_set: i = {} i['id'] = image.id i['page_slug'] = image.page.slug if image.page else None i['name'] = image.name i['slug'] = image.slug i['picasa_photo_url'] = image.picasa_photo_url i['picasa_thumb_url'] = image.picasa_thumb_url i['height'] = image.height i['width'] = image.width i['created_at'] = str(naturalday(image.created_at)) images.append(i) response_data['images'] = images set_cache(cache_key,images) else: response_data['images'] = None response_data['message'] = 'Please verify access token and language code.' response_data['status'] = 403 return HttpResponse(json.dumps(response_data), content_type="application/json",status=response_data['status'])
def render(self, context): time = timezone.localtime(self.time.resolve(context)) formatted_time = '%s %s' % (naturalday(time), time.strftime('%H:%M:%S')) formatted_time = mark_safe(formatted_time) return formatted_time
def forum_time(time): return u'%s %s' % (capfirst(naturalday(time)), time.strftime('%H:%M:%S'))
def naturalday(source, arg=None): return humanize.naturalday(source, arg)
def humanize_time(self): return naturalday(self.date_created)
def get_start_day(self): from django.contrib.humanize.templatetags.humanize import naturalday natural_day = naturalday(self.start_day) return str(natural_day)
def line(project): end_date = naturalday(project.copilot_support_ends_at) url = f"http://localhost:8000{project.get_staff_url()}" return f"\n * <{url}|{project.title}> ({end_date})"
def last_updated(self) -> str: """Return humanised version of the last_updated_at timestamp.""" from django.contrib.humanize.templatetags import humanize return humanize.naturalday(self.last_updated_at)
def parse_feed(feed): feed_url = feed.feed_url source_type = feed.source_type pages = [] if source_type == 'YAHOO': info = feedparser.parse(feed_url) for entry in info.entries: match = re.search(r'src="(.*?)"', entry.content[0]["value"]) if match: image_url = match.groups()[0] else: image_url = None if image_url: p = {} p['id'] = None p['title'] = entry.title p['headline'] = (entry.title[:29] + '..') if len(entry.title) > 29 else entry.title p['slug'] = slugify(entry.title) p['content'] = entry.description p['content_no_html'] = strip_tags(p['content'] ) p['author'] = None p['category'] = source_type p['category_slug'] = slugify(source_type) p['feed_type'] = source_type p['twitter_hashtags'] = None p['feed_source']= entry.link p['feed_image_url']= feed.logo_url p['image_url']= image_url p['video_url']= None p['audio_url']= None p['priority']= 2 p['is_enabled']= True p['created_at'] = str(naturalday(datetime.datetime.fromtimestamp(time.mktime(entry.published_parsed)))) p['timestamp'] = time.mktime(entry.published_parsed) if len(entry.description) > 140: pages.append(p) elif source_type == 'GREENPEACE': info = feedparser.parse(feed_url) for entry in info.entries: match = re.search(r'src="(.*?)"', entry.description) if match: image_url = match.groups()[0] else: image_url = None if image_url: p = {} p['id'] = None p['title'] = entry.title p['headline'] = (entry.title[:29] + '..') if len(entry.title) > 29 else entry.title p['slug'] = slugify(entry.title) p['content'] = entry.description p['content_no_html'] = strip_tags(p['content'] ) p['author'] = None p['category'] = source_type p['category_slug'] = slugify(source_type) p['feed_type'] = source_type p['twitter_hashtags'] = None p['feed_source']= entry.link p['feed_image_url']= feed.logo_url p['image_url']= image_url p['video_url']= None p['audio_url']= None p['priority']= 2 p['is_enabled']= True p['created_at'] = str(naturalday(datetime.datetime.fromtimestamp(time.mktime(entry.published_parsed)))) p['timestamp'] = time.mktime(entry.published_parsed) if len(entry.description) > 140: pages.append(p) elif source_type == 'PETA': info = feedparser.parse(feed_url) for entry in info.entries: match = re.search(r'[href|src]="(.*(png|jpg))"', entry.description) if match: image_url = match.groups()[0] else: image_url = None if image_url: p = {} p['id'] = None p['title'] = entry.title p['headline'] = (entry.title[:29] + '..') if len(entry.title) > 29 else entry.title p['slug'] = slugify(entry.title) p['content'] = entry.description p['content_no_html'] = strip_tags(p['content'] ) p['author'] = None p['category'] = source_type p['category_slug'] = slugify(source_type) p['feed_type'] = source_type p['twitter_hashtags'] = None p['feed_source']= entry.link p['feed_image_url']= feed.logo_url p['image_url']= image_url p['video_url']= None p['audio_url']= None p['priority']= 2 p['is_enabled']= True p['created_at'] = str(naturalday(datetime.datetime.fromtimestamp(time.mktime(entry.published_parsed)))) p['timestamp'] = time.mktime(entry.published_parsed) if len(entry.description) > 140: pages.append(p) elif source_type == 'WWF': info = feedparser.parse(feed_url) for entry in info.entries: match = re.search(r'[href|src]="(.*(png|jpg))"', entry.description) if match: image_url = match.groups()[0] else: image_url = None if True: p = {} p['id'] = None p['title'] = entry.title p['headline'] = (entry.title[:29] + '..') if len(entry.title) > 29 else entry.title p['slug'] = slugify(entry.title) p['content'] = entry.description p['content_no_html'] = strip_tags(p['content'] ) p['author'] = None p['category'] = source_type p['category_slug'] = slugify(source_type) p['feed_type'] = source_type p['twitter_hashtags'] = None p['feed_source']= entry.link p['feed_image_url']= feed.logo_url p['image_url']= image_url p['video_url']= None p['audio_url']= None p['priority']= 2 p['is_enabled']= True p['created_at'] = str(naturalday(datetime.datetime.fromtimestamp(time.mktime(entry.published_parsed)))) p['timestamp'] = time.mktime(entry.published_parsed) if len(entry.description) > 140: pages.append(p) else: return None return pages
def elMeuInforme(request, pk=None): """Dades que veurà l'alumne""" detall = 'all' credentials = tools.getImpersonateUser(request) (user, l4) = credentials nTaula = 0 tePermis = True semiImpersonat = False if pk: professor = User2Professor(user) alumne = Alumne.objects.get(pk=pk) tePermis = professor in alumne.tutorsDeLAlumne() semiImpersonat = True else: alumne = Alumne.objects.get(user_associat=user) if not alumne or not tePermis: raise Http404 head = u'{0} ({1})'.format(alumne, unicode(alumne.grup)) ara = datetime.now() report = [] #----Assistencia -------------------------------------------------------------------- if detall in ['all', 'assistencia']: controls = alumne.controlassistencia_set.exclude( estat__codi_estat='P').filter(estat__isnull=False) controlsNous = controls.filter(relacio_familia_revisada__isnull=True) taula = tools.classebuida() taula.codi = nTaula nTaula += 1 taula.tabTitle = 'Faltes i retards {0}'.format( pintaNoves(controlsNous.count())) taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] taula.fileres = [] capcelera = tools.classebuida() capcelera.amplade = 25 capcelera.contingut = u'Dia' capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 75 capcelera.contingut = u'Falta, assignatura i franja horària.' taula.capceleres.append(capcelera) tots_els_controls = list( controls.select_related('impartir', 'estat').order_by( '-impartir__dia_impartir', '-impartir__horari__hora')) assistencia_calendari = [ ] #{"date":"2016-04-02","badge":true,"title":"Example 2"} from itertools import groupby for k, g in groupby(tots_els_controls, lambda x: x.impartir.dia_impartir): gs = list(g) gs.reverse() assistencia_calendari.append({ 'date': k.strftime('%Y-%m-%d'), 'badge': any([c.estat.codi_estat == 'F' for c in gs]), 'title': u'\n'.join([ escapejs(u'{0} a {1} ({2})'.format( c.estat, c.impartir.horari.assignatura, c.impartir.horari.hora)) for c in gs ]) # Store group iterator as a list }) for control in tots_els_controls: filera = [] #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = unicode( control.impartir.dia_impartir.strftime('%d/%m/%Y')) camp.negreta = False if control.relacio_familia_revisada else True filera.append(camp) #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0} a {1} ({2})'.format( control.estat, control.impartir.horari.assignatura, control.impartir.horari.hora) camp.negreta = False if control.relacio_familia_revisada else True filera.append(camp) # assistencia_calendari.append( { 'date': control.impartir.dia_impartir.strftime( '%Y-%m-%d' ) , # 'badge': control.estat.codi_estat == 'F', # 'title': escapejs( camp.contingut ) # } ) #-- taula.fileres.append(filera) report.append(taula) if not semiImpersonat: controlsNous = controls.update(relacio_familia_notificada=ara, relacio_familia_revisada=ara) #----observacions -------------------------------------------------------------------- observacions = alumne.incidencia_set.filter(tipus__es_informativa=True) observacionsNoves = observacions.filter( relacio_familia_revisada__isnull=True) taula = tools.classebuida() taula.codi = nTaula nTaula += 1 taula.tabTitle = 'Observacions {0}'.format( pintaNoves(observacionsNoves.count())) taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 25 capcelera.contingut = u'Dia' capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 75 capcelera.contingut = u'Professor i observació.' taula.capceleres.append(capcelera) taula.fileres = [] for incidencia in observacions.order_by('-dia_incidencia', '-franja_incidencia'): filera = [] #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0}'.format( incidencia.dia_incidencia.strftime('%d/%m/%Y')) camp.negreta = False if incidencia.relacio_familia_notificada else True filera.append(camp) #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.negreta = False if incidencia.relacio_familia_revisada else True camp.contingut = u'Sr(a): {0} - {1}'.format( incidencia.professional, incidencia.descripcio_incidencia) camp.negreta = False if incidencia.relacio_familia_revisada else True filera.append(camp) #-- taula.fileres.append(filera) report.append(taula) if not semiImpersonat: observacionsNoves = observacions.update( relacio_familia_notificada=ara, relacio_familia_revisada=ara) #----incidències -------------------------------------------------------------------- incidencies = alumne.incidencia_set.filter(tipus__es_informativa=False) incidenciesNoves = incidencies.filter( relacio_familia_revisada__isnull=True) taula = tools.classebuida() taula.codi = nTaula nTaula += 1 taula.tabTitle = 'Incidències {0}'.format( pintaNoves(incidenciesNoves.count())) taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 30 capcelera.contingut = u'Dia i estat' capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 70 capcelera.contingut = u'Professor i Incidència' taula.capceleres.append(capcelera) taula.fileres = [] for incidencia in incidencies.order_by('-dia_incidencia', '-franja_incidencia'): filera = [] #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0} {1}'.format( incidencia.dia_incidencia.strftime('%d/%m/%Y'), 'Vigent' if incidencia.es_vigent else '') camp.negreta = False if incidencia.relacio_familia_revisada else True filera.append(camp) #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'Sr(a): {0} - {1}'.format( incidencia.professional, incidencia.descripcio_incidencia) camp.negreta = False if incidencia.relacio_familia_revisada else True filera.append(camp) #-- taula.fileres.append(filera) report.append(taula) if not semiImpersonat: incidenciesNoves.update(relacio_familia_notificada=ara, relacio_familia_revisada=ara) #----Expulsions -------------------------------------------------------------------- expulsions = alumne.expulsio_set.exclude(estat='ES') expulsionsNoves = expulsions.filter( relacio_familia_revisada__isnull=True) taula = tools.classebuida() taula.codi = nTaula nTaula += 1 taula.tabTitle = 'Expulsions {0}'.format( pintaNoves(expulsionsNoves.count())) taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 20 capcelera.contingut = u'Dia' capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 20 capcelera.contingut = u'Data comunicació' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 60 capcelera.contingut = u'Professor i motiu' taula.capceleres.append(capcelera) taula.fileres = [] for expulsio in expulsions.order_by('-dia_expulsio', '-franja_expulsio'): filera = [] #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0} {1}'.format( expulsio.dia_expulsio.strftime('%d/%m/%Y'), u'''(per acumulació d'incidències)''' if expulsio.es_expulsio_per_acumulacio_incidencies else '') camp.negreta = False if expulsio.relacio_familia_revisada else True filera.append(camp) #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0}'.format( expulsio.moment_comunicacio_a_tutors.strftime('%d/%m/%Y' ) if expulsio. moment_comunicacio_a_tutors else u'Pendent de comunicar.') camp.negreta = False if expulsio.relacio_familia_revisada else True filera.append(camp) #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'Sr(a): {0} - {1}'.format( expulsio.professor, expulsio.motiu if expulsio.motiu else u'Pendent redactar motiu.') camp.negreta = False if expulsio.relacio_familia_revisada else True filera.append(camp) #-- taula.fileres.append(filera) report.append(taula) if not semiImpersonat: expulsionsNoves.update(relacio_familia_notificada=ara, relacio_familia_revisada=ara) #----Sancions ----------------------------------------------------------------------------- if detall in ['all', 'incidencies']: sancions = alumne.sancio_set.filter(impres=True) sancionsNoves = sancions.filter(relacio_familia_revisada__isnull=True) taula = tools.classebuida() taula.codi = nTaula nTaula += 1 taula.tabTitle = 'Sancions {0}'.format( pintaNoves(sancionsNoves.count())) taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 25 capcelera.contingut = u'Dates' capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 75 capcelera.contingut = u'Detall' taula.capceleres.append(capcelera) taula.fileres = [] for sancio in sancions.order_by('-data_inici'): filera = [] #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0} a {1}'.format( sancio.data_inici.strftime('%d/%m/%Y'), sancio.data_fi.strftime('%d/%m/%Y')) camp.negreta = False if sancio.relacio_familia_revisada else True filera.append(camp) #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0} {1} {2}'.format( sancio.tipus, ' - ' if sancio.motiu else '', sancio.motiu) camp.negreta = False if sancio.relacio_familia_revisada else True filera.append(camp) #-- taula.fileres.append(filera) report.append(taula) if not semiImpersonat: sancionsNoves.update(relacio_familia_notificada=ara, relacio_familia_revisada=ara) #---dades alumne--------------------------------------------------------------------- if detall in ['all', 'dades']: taula = tools.classebuida() taula.tabTitle = 'Dades personals' taula.codi = nTaula nTaula += 1 taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 25 capcelera.contingut = u'Dades Alumne' capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 75 capcelera.contingut = u'' taula.capceleres.append(capcelera) taula.fileres = [] #----grup------------------------------------------ filera = [] camp = tools.classebuida() camp.enllac = None camp.contingut = u'Grup' filera.append(camp) camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0}'.format(alumne.grup) filera.append(camp) taula.fileres.append(filera) #----data neix------------------------------------------ filera = [] camp = tools.classebuida() camp.enllac = None camp.contingut = u'Data Neixement' filera.append(camp) camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0}'.format(alumne.data_neixement) filera.append(camp) taula.fileres.append(filera) #----telefons------------------------------------------ filera = [] camp = tools.classebuida() camp.enllac = None camp.contingut = u'Telèfon' filera.append(camp) camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0}'.format(alumne.altres_telefons) filera.append(camp) taula.fileres.append(filera) #----Pares------------------------------------------ filera = [] camp = tools.classebuida() camp.enllac = None camp.contingut = u'Pares' filera.append(camp) camp = tools.classebuida() camp.enllac = None camp.multipleContingut = [ (u'{0} ({1} , {2})'.format(alumne.rp1_nom, alumne.rp1_telefon, alumne.rp1_mobil), None), (u'{0} ({1} , {2})'.format(alumne.rp2_nom, alumne.rp2_telefon, alumne.rp2_mobil), None), ] filera.append(camp) taula.fileres.append(filera) #----adreça------------------------------------------ filera = [] camp = tools.classebuida() camp.enllac = None camp.contingut = u'Adreça' filera.append(camp) camp = tools.classebuida() camp.enllac = None localitat_i_o_municipi = alumne.localitat if not alumne.municipi \ else (alumne.municipi if not alumne.localitat else (alumne.localitat + '-' + alumne.municipi if alumne.localitat != alumne.municipi else alumne.localitat)) camp.contingut = u'{0} - {1}'.format(alumne.adreca, localitat_i_o_municipi) filera.append(camp) taula.fileres.append(filera) report.append(taula) #----Sortides ----------------------------------------------------------------------------- if detall in ['all', 'sortides'] and settings.CUSTOM_MODUL_SORTIDES_ACTIU: sortides = alumne.notificasortida_set.all() sortidesNoves = sortides.filter(relacio_familia_revisada__isnull=True) sortides_on_no_assistira = alumne.sortides_on_ha_faltat.values_list( 'id', flat=True).distinct() sortides_justificades = alumne.sortides_falta_justificat.values_list( 'id', flat=True).distinct() taula = tools.classebuida() taula.codi = nTaula nTaula += 1 taula.tabTitle = 'Activitats/Sortides {0}'.format( pintaNoves(sortidesNoves.count())) taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 20 capcelera.contingut = u'Dates' capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 35 capcelera.contingut = u' ' capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 35 capcelera.contingut = u'Detall' taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 10 capcelera.contingut = u' ' taula.capceleres.append(capcelera) taula.fileres = [] for sortida in sortides.order_by('-sortida__calendari_desde'): filera = [] #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = naturalday(sortida.sortida.calendari_desde) camp.negreta = False if bool( sortida.relacio_familia_revisada) else True filera.append(camp) #---------------------------------------------- # NO INSCRIT A L’ACTIVITAT. L'alumne ha d'assistir al centre excepte si són de viatge de final de curs. comentari_no_ve = u"" if sortida.sortida.pk in sortides_on_no_assistira: comentari_no_ve = u"NO INSCRIT A L’ACTIVITAT." if sortida.sortida.pk in sortides_justificades: comentari_no_ve += u"NO INSCRIT A L’ACTIVITAT. Té justificada l'absència." camp = tools.classebuida() camp.enllac = None camp.contingut = comentari_no_ve camp.negreta = False if bool( sortida.relacio_familia_revisada) else True filera.append(camp) #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = u'{0}'.format(sortida.sortida.titol_de_la_sortida) camp.negreta = False if sortida.relacio_familia_revisada else True filera.append(camp) #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.modal = {} camp.modal['id'] = sortida.id camp.modal['txtboto'] = u'Detalls' camp.modal['tittle'] = u"{0} ({1})".format( sortida.sortida.titol_de_la_sortida, naturalday(sortida.sortida.calendari_desde), ) camp.modal['body'] = u'{0} a {1} \n\n{2}\n'.format( sortida.sortida.calendari_desde.strftime('%d/%m/%Y %H:%M'), sortida.sortida.calendari_finsa.strftime('%d/%m/%Y %H:%M'), sortida.sortida.programa_de_la_sortida, ) filera.append(camp) #-- taula.fileres.append(filera) report.append(taula) if not semiImpersonat: sortidesNoves.update(relacio_familia_notificada=ara, relacio_familia_revisada=ara) #----Qualitativa ----------------------------------------------------------------------------- qualitatives_alumne = { r.qualitativa for r in alumne.respostaavaluacioqualitativa_set.all() } avui = datetime.now().date() qualitatives_en_curs = [ q for q in qualitatives_alumne if (bool(q.data_obrir_portal_families) and bool(q.data_tancar_tancar_portal_families) and q.data_obrir_portal_families <= avui <= q.data_tancar_tancar_portal_families) ] if detall in ['all', 'qualitativa'] and qualitatives_en_curs: respostes = alumne.respostaavaluacioqualitativa_set.filter( qualitativa__in=qualitatives_en_curs) respostesNoves = respostes.filter( relacio_familia_revisada__isnull=True) assignatures = list(set([r.assignatura for r in respostes])) hi_ha_tipus_assignatura = ( bool(assignatures) and assignatures[0] and assignatures[0].tipus_assignatura is not None and assignatures[0].tipus_assignatura.capcelera) asignatura_label = assignatures[ 0].tipus_assignatura.capcelera if hi_ha_tipus_assignatura else u"Matèria" taula = tools.classebuida() taula.codi = nTaula nTaula += 1 taula.tabTitle = u"Avaluació qualitativa {0}".format( u"!" if respostesNoves.exists() else "") taula.titol = tools.classebuida() taula.titol.contingut = '' taula.titol.enllac = None taula.capceleres = [] capcelera = tools.classebuida() capcelera.amplade = 15 capcelera.contingut = u'Qualitativa' capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 20 capcelera.contingut = asignatura_label capcelera.enllac = "" taula.capceleres.append(capcelera) capcelera = tools.classebuida() capcelera.amplade = 65 capcelera.contingut = u'' taula.capceleres.append(capcelera) taula.fileres = [] respostes_pre = (respostes.order_by( 'qualitativa__data_obrir_avaluacio', 'assignatura')) keyf = lambda x: (x.qualitativa.nom_avaluacio + x.assignatura. nom_assignatura) respostes_sort = sorted(respostes_pre, key=keyf) from itertools import groupby for _, respostes in groupby(respostes_sort, keyf): respostes = list(respostes) filera = [] #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.contingut = respostes[0].qualitativa.nom_avaluacio camp.negreta = False if bool( respostes[0].relacio_familia_revisada) else True filera.append(camp) camp = tools.classebuida() camp.enllac = None camp.contingut = respostes[ 0].assignatura.nom_assignatura or respostes[0].assignatura camp.negreta = False if bool( respostes[0].relacio_familia_revisada) else True filera.append(camp) #---------------------------------------------- camp = tools.classebuida() camp.enllac = None camp.multipleContingut = [] for resposta in respostes: camp.multipleContingut.append(( u'{0}'.format(resposta.get_resposta_display()), None, )) camp.negreta = False if respostes[ 0].relacio_familia_revisada else True filera.append(camp) #-- taula.fileres.append(filera) report.append(taula) if not semiImpersonat: respostesNoves.update(relacio_familia_notificada=ara, relacio_familia_revisada=ara) return render( request, 'report_detall_families.html', { 'report': report, 'head': u'Informació alumne {0}'.format(head), 'assistencia_calendari': json.dumps(assistencia_calendari), }, )
def __str__(self): from django.contrib.humanize.templatetags.humanize import naturalday return "({}) - {} {} {} {} to {}, created: {}, expires: {}".format(self.network, self.status, "ORPHAN" if len(self.emails) == 0 else "", self.amount, self.tokenName, self.username, naturalday(self.created_on), naturalday(self.expires_date))
def get_discogs_data_quality(self, obj): if obj.discogs: return '{0} (retrieved {1})'.format( obj.discogs.data.get('data_quality', 'unknown'), naturalday(obj.discogs.data_cache_dttm), )
def get_last_change_human(self, obj): return naturalday(obj.last_change)
def __str__(self): from django.contrib.humanize.templatetags.humanize import naturalday return "{} -- {} {}. created: {}, expires: {}".format( self.network, self.amount, self.tokenName, naturalday(self.created_on), naturalday(self.expires_date))
def experiment_last_updated_badge(experiment): return render_mustache('tardis_portal/badges/last_updated_badge', { 'actual_time': experiment.update_time.strftime('%a %d %b %Y %H:%M'), 'iso_time': get_local_time(experiment.update_time).isoformat(), 'natural_time': naturalday(experiment.update_time), })
def render(self, context): time = self.time.resolve(context) formated_time = u'%s %s' % (naturalday(time), time.strftime('%H:%M:%S')) formated_time = mark_safe(formated_time) return formated_time
def mandate_date(date, arg=None): if date is None or date.year == 9999: return 'present' else: return naturalday(date, arg)