Exemplo n.º 1
0
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)
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
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
Exemplo n.º 5
0
    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
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
    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
Exemplo n.º 8
0
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'])
Exemplo n.º 9
0
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())
Exemplo n.º 10
0
    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)
Exemplo n.º 11
0
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())])
Exemplo n.º 12
0
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:]
Exemplo n.º 13
0
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()
Exemplo n.º 14
0
 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.'))
Exemplo n.º 15
0
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
Exemplo n.º 16
0
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)
Exemplo n.º 17
0
    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
Exemplo n.º 18
0
    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)
Exemplo n.º 20
0
 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)
Exemplo n.º 22
0
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)
Exemplo n.º 23
0
    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
Exemplo n.º 24
0
    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)
Exemplo n.º 25
0
 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
Exemplo n.º 26
0
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))
Exemplo n.º 27
0
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)
Exemplo n.º 28
0
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'
Exemplo n.º 29
0
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'])
Exemplo n.º 30
0
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
Exemplo n.º 31
0
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
Exemplo n.º 32
0
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()
Exemplo n.º 33
0
    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,
        })
Exemplo n.º 34
0
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')
Exemplo n.º 35
0
    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)
Exemplo n.º 36
0
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)
Exemplo n.º 37
0
def notify_if_not_duplicate(request, item):
    the_message_content = mark_safe("""<strong><a title='{dismiss_title}'
                                 href='{dismiss_url}'>&times;</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)
Exemplo n.º 38
0
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)
Exemplo n.º 39
0
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)
Exemplo n.º 40
0
    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
Exemplo n.º 41
0
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')
Exemplo n.º 42
0
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'])    
Exemplo n.º 43
0
 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
Exemplo n.º 44
0
def forum_time(time):
    return u'%s %s' % (capfirst(naturalday(time)), time.strftime('%H:%M:%S'))
Exemplo n.º 45
0
def naturalday(source, arg=None):
    return humanize.naturalday(source, arg)
Exemplo n.º 46
0
 def humanize_time(self):
     return naturalday(self.date_created)
Exemplo n.º 47
0
    def get_start_day(self):
        from django.contrib.humanize.templatetags.humanize import naturalday

        natural_day = naturalday(self.start_day)
        return str(natural_day)
Exemplo n.º 48
0
 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})"
Exemplo n.º 49
0
    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)
Exemplo n.º 50
0
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
Exemplo n.º 51
0
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),
        },
    )
Exemplo n.º 52
0
def naturalday(source, arg=None):
    return humanize.naturalday(source, arg)
Exemplo n.º 53
0
 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))
Exemplo n.º 54
0
 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),
         )
Exemplo n.º 55
0
 def get_last_change_human(self, obj):
     return naturalday(obj.last_change)
Exemplo n.º 56
0
 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))
Exemplo n.º 57
0
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),
    })
Exemplo n.º 58
0
 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
Exemplo n.º 59
0
def mandate_date(date, arg=None):
    if date is None or date.year == 9999:
        return 'present'
    else:
        return naturalday(date, arg)