Exemplo n.º 1
0
def view_contact_actions(request, contact_id, set_id):
    """view"""
    contact = get_object_or_404(models.Contact, id=contact_id)

    filters = []
    if int(set_id):
        action_set = get_object_or_404(models.ActionSet, id=set_id)
        filters.append(Q(type__set=action_set))
        title = action_set.name
    else:
        filters.append(Q(type__set=None))
        title = _("Other kind of actions") if models.ActionSet.objects.count(
        ) else _("Actions")

    actions = contact.action_set.filter(*filters).order_by(
        "planned_date", "priority")
    page_obj = paginate(request, actions, 50)
    request.session["redirect_url"] = reverse('crm_contact_actions',
                                              args=[contact_id, set_id])

    return render(
        request, 'Crm/entity_actions.html', {
            'contact': contact,
            'action_set': action_set,
            'actions': list(page_obj),
            'page_obj': page_obj,
            'all_actions': True,
            'title': title,
        })
Exemplo n.º 2
0
def view_entities_list(request):
    """view"""
    letter_filter = request.GET.get("filter", "*")

    queryset = models.Entity.objects.all()
    if re.search(r"\w+", letter_filter):
        if is_unaccent_filter_supported():
            queryset = queryset.extra(
                where=[u"UPPER(unaccent(name)) LIKE UPPER(unaccent(%s))"],
                params=[u"{0}%".format(letter_filter)]
            )
        else:
            queryset = queryset.filter(name__istartswith=letter_filter)
    elif letter_filter == "~":
        queryset = queryset.filter(name__regex=r'^\W|^\d')

    queryset = queryset.extra(select={'lower_name':'lower(name)'}).order_by('lower_name')

    page_obj = paginate(request, queryset, 50)

    entities = list(page_obj)

    return render_to_response(
        'Crm/all_entities.html',
        {
            'entities': entities,
            'letter_filter': letter_filter,
            'page_obj': page_obj,
        },
        context_instance=RequestContext(request)
    )
Exemplo n.º 3
0
def view_contact_actions(request, contact_id, set_id):
    """view"""
    contact = get_object_or_404(models.Contact, id=contact_id)

    filters = []
    if int(set_id):
        action_set = get_object_or_404(models.ActionSet, id=set_id)
        filters.append(Q(type__set=action_set))
        title = action_set.name
    else:
        filters.append(Q(type__set=None))
        title = _(u"Other kind of actions") if models.ActionSet.objects.count() else _(u"Actions")

    actions = contact.action_set.filter(*filters).order_by("planned_date", "priority")
    page_obj = paginate(request, actions, 50)
    request.session["redirect_url"] = reverse('crm_contact_actions', args=[contact_id, set_id])

    return render_to_response(
        'Crm/entity_actions.html',
        {
            'contact': contact,
            'action_set': action_set,
            'actions': list(page_obj),
            'page_obj': page_obj,
            'all_actions': True,
            'title': title,
        },
        context_instance=RequestContext(request)
    )
Exemplo n.º 4
0
def view_all_opportunities(request, ordering=None):
    """view"""
    opportunities = models.Opportunity.objects.all()
    if not ordering:
        ordering = 'date'
    if ordering == 'name':
        opportunities = opportunities.order_by('name')
    elif ordering == 'status':
        opportunities = opportunities.order_by('status__ordering', 'status')
    elif ordering == 'type':
        opportunities = opportunities.order_by('type')
    elif ordering == 'date':
        opportunities = list(opportunities)
        opportunities.sort(key=lambda o: o.get_start_date() or datetime(1970, 1, 1))
        opportunities.reverse()

    request.session["redirect_url"] = reverse('crm_all_opportunities')
    page_obj = paginate(request, opportunities, 50)

    return render(
        request,
        'Crm/all_opportunities.html',
        {
            "opportunities": list(page_obj),
            'page_obj': page_obj,
            "ordering": ordering,
            "all_opportunities": True,
        },
    )
Exemplo n.º 5
0
def see_my_groups(request):
    """view"""
    ordering = request.GET.get('ordering', 'name')

    groups = models.Group.objects.all()

    if ordering == 'name':
        try:
            # may fail for some databases
            groups = groups.extra(select={
                'lower_name': 'lower(name)'
            }).order_by('lower_name')

        # pylint: disable=broad-except
        except Exception:
            groups = list(models.Group.objects.all())
            #order groups with case-independant name
            groups.sort(key=lambda group: group.name.lower())
    else:
        groups = groups.order_by('-modified')

    page_obj = paginate(request, groups, 50)

    return render(request, 'Crm/my_groups.html', {
        'groups': list(page_obj),
        'page_obj': page_obj,
        'ordering': ordering,
    })
Exemplo n.º 6
0
def see_my_groups(request):
    """view"""
    ordering = request.GET.get('ordering', 'name')

    groups = models.Group.objects.all()

    if ordering == 'name':
        try:
            # may fail for some databases
            groups = groups.extra(select={'lower_name': 'lower(name)'}).order_by('lower_name')

        # pylint: disable=broad-except
        except Exception:
            groups = list(models.Group.objects.all())
            #order groups with case-independant name
            groups.sort(key=lambda group: group.name.lower())
    else:
        groups = groups.order_by('-modified')

    page_obj = paginate(request, groups, 50)

    return render_to_response(
        'Crm/my_groups.html',
        {
            'groups': list(page_obj),
            'page_obj': page_obj,
            'ordering': ordering,
        },
        context_instance=RequestContext(request)
    )
Exemplo n.º 7
0
def view_entity_actions(request, entity_id, set_id):
    """view"""
    entity = get_object_or_404(models.Entity, id=entity_id)

    filters = []
    if int(set_id):
        action_set = get_object_or_404(models.ActionSet, id=set_id)
        filters.append(Q(type__set=action_set))
        title = action_set.name
    else:
        filters.append(Q(type__set=None))
        title = _("Other kind of actions") if models.ActionSet.objects.count(
        ) else _("Actions")

    actions = models.Action.objects.filter(
        Q(entity=entity) | Q(contact__entity=entity)
        | Q(opportunity__entity=entity),
        *filters).order_by("planned_date", "priority")
    request.session["redirect_url"] = reverse('crm_entity_actions',
                                              args=[entity_id, set_id])
    page_obj = paginate(request, actions, 50)

    return render(
        request, 'Crm/entity_actions.html', {
            'title': title,
            'entity': entity,
            'action_set': action_set,
            'all_actions': True,
            'actions': list(page_obj),
            'page_obj': page_obj,
            'filters': filters,
        })
Exemplo n.º 8
0
def view_entities_list(request):
    """view"""
    letter_filter = request.GET.get("filter", "*")

    queryset = models.Entity.objects.all()
    if re.search(r"\w+", letter_filter):
        if is_unaccent_filter_supported():
            queryset = queryset.extra(
                where=["UPPER(unaccent(name)) LIKE UPPER(unaccent(%s))"],
                params=["{0}%".format(letter_filter)]
            )
        else:
            queryset = queryset.filter(name__istartswith=letter_filter)
    elif letter_filter == "~":
        queryset = queryset.filter(name__regex=r'^\W|^\d')

    queryset = queryset.extra(select={'lower_name': 'lower(name)'}).order_by('lower_name')

    page_obj = paginate(request, queryset, 50)

    entities = list(page_obj)

    return render(
        request,
        'Crm/all_entities.html',
        {
            'entities': entities,
            'letter_filter': letter_filter,
            'page_obj': page_obj,
        },
    )
Exemplo n.º 9
0
def view_search_list(request):
    searches = Search.objects.all()
    page_obj = paginate(request, searches, 50)

    return render(request, 'Search/search_list.html', {
        'searches': list(page_obj),
        'page_obj': page_obj,
    })
Exemplo n.º 10
0
def newsletter_list(request):
    """display list of newsletters"""
    newsletters = Newsletter.objects.all().order_by('-id')
    page_obj = paginate(request, newsletters, 10)
    return render(request, 'Emailing/newsletter_list.html', {
        'newsletters': list(page_obj),
        'page_obj': page_obj
    })
Exemplo n.º 11
0
def view_search_list(request):
    searches = Search.objects.all()
    page_obj = paginate(request, searches, 50)

    return render_to_response(
        'Search/search_list.html',
        {
            'searches': list(page_obj),
            'page_obj': page_obj,
        },
        context_instance=RequestContext(request)
    )
Exemplo n.º 12
0
def newsletter_list(request):
    """display list of newsletters"""
    newsletters = Newsletter.objects.all().order_by('-id')
    page_obj = paginate(request, newsletters, 10)
    return render_to_response(
        'Emailing/newsletter_list.html',
        {
            'newsletters': list(page_obj),
            'page_obj': page_obj
        },
        context_instance=RequestContext(request)
    )
Exemplo n.º 13
0
    def get_context_data(self, **kwargs):
        """context"""
        context_data = super(ArticlesByCategoryView, self).get_context_data()
        category = self.get_category()

        if not self.request.user.has_perm('can_view_category', category):
            raise PermissionDenied()

        articles = self.get_articles(category)

        page_obj = paginate(self.request, articles, get_articles_category_page_size(category))

        context_data.update({
            'category': category,
            "articles": list(page_obj),
            'page_obj': page_obj,
        })
        return context_data
Exemplo n.º 14
0
    def get_context_data(self, **kwargs):
        """context"""
        context_data = super(ArticlesByCategoryView, self).get_context_data()
        category = self.get_category()

        if not self.request.user.has_perm('can_view_category', category):
            raise PermissionDenied()

        articles = self.get_articles(category)

        page_obj = paginate(self.request, articles, get_articles_category_page_size(category))

        context_data.update({
            'category': category,
            "articles": list(page_obj),
            'page_obj': page_obj,
        })
        return context_data
Exemplo n.º 15
0
def search(request, search_id=0, group_id=0, opportunity_id=0, city_id=0):
    message = ''
    results = []
    search_obj = None
    field_choice_form = FieldChoiceForm()
    contains_refuse_newsletter = False
    data = None
    contacts_count = 0
    has_empty_entities = False
    group = opportunity = city = None
    contacts_display = False

    if request.method == "POST":
        data = request.POST
    elif group_id:
        group = get_object_or_404(Group, id=group_id)
        data = {"gr0-_-group-_-0": group_id}
    elif opportunity_id:
        opportunity = get_object_or_404(Opportunity, id=opportunity_id)
        data = {"gr0-_-opportunity-_-0": opportunity_id}
    elif city_id:
        city = get_object_or_404(City, id=city_id)
        data = {"gr0-_-city-_-0": city_id}

    if data:
        search_form = SearchForm(data)
        if search_form.is_valid():
            contacts_display = search_form.contacts_display

            if not contacts_display:
                results, contacts_count, has_empty_entities = search_form.get_contacts_by_entity(
                )
                contains_refuse_newsletter = search_form.contains_refuse_newsletter
            else:
                results = search_form.get_contacts()
                contacts_count, has_empty_entities = len(results), False
                contains_refuse_newsletter = search_form.contains_refuse_newsletter

            if not results:
                message = _('Sorry, no results found')
    else:
        search_obj = get_object_or_404(Search,
                                       id=search_id) if search_id else None
        search_form = SearchForm(instance=search_obj)

    entities_count = 0 if contacts_display else len(results)

    page_obj = paginate(
        request, results,
        getattr(settings, 'BALAFON_SEARCH_NB_IN_PAGE', None) or 50)

    return render(
        request, 'Search/search.html', {
            'page_obj': page_obj,
            'results': list(page_obj),
            'field_choice_form': field_choice_form,
            'message': message,
            'has_empty_entities': has_empty_entities,
            'search_form': search_form,
            'search': search_obj,
            'contacts_count': contacts_count,
            'entities_count': entities_count,
            'contains_refuse_newsletter': contains_refuse_newsletter,
            'group': group,
            'opportunity': opportunity,
            'city': city,
            'contacts_display': contacts_display,
        })
Exemplo n.º 16
0
def show_media(request, media_type):
    """show media library"""
    try:
        if not request.user.is_staff:
            raise PermissionDenied

        try:
            page = int(request.GET.get('page', 0) or 0)
        except ValueError:
            page = 1
        is_ajax = page > 0
        media_filter = request.GET.get('media_filter', 0)
        skip_media_filter = False

        if request.session.get("coop_cms_media_doc", False):
            # force the doc
            media_type = 'document'
            del request.session["coop_cms_media_doc"]

        if media_type == 'image':
            queryset = models.Image.objects.all().order_by("ordering", "-created")
            context = {
                'media_url': reverse('coop_cms_media_images'),
                'media_slide_template': 'coop_cms/medialib/slide_images_content.html',
            }

        elif media_type == 'photologue':
            queryset, context = _get_photologue_media(request)
            skip_media_filter = True

        else:
            media_type = "document"
            queryset = models.Document.objects.all().order_by("ordering", "-created")
            context = {
                'media_url': reverse('coop_cms_media_documents'),
                'media_slide_template': 'coop_cms/medialib/slide_docs_content.html',
            }

        context['is_ajax'] = is_ajax
        context['media_type'] = media_type

        if not skip_media_filter:
            # list of lists of media_filters
            media_filters = [media.filters.all() for media in queryset.all()]
            # flat list of media_filters
            media_filters = itertools.chain(*media_filters)
            # flat list of unique media filters sorted by alphabetical order (ignore case)
            context['media_filters'] = sorted(
                list(set(media_filters)), key=lambda mf: mf.name.upper()
            )

            if int(media_filter):
                queryset = queryset.filter(filters__id=media_filter)
                context['media_filter'] = int(media_filter)

        page_obj = paginate(request, queryset, 12)

        context[media_type+'s'] = list(page_obj)
        context['page_obj'] = page_obj

        context["allow_photologue"] = "photologue" in settings.INSTALLED_APPS

        if int(media_filter):
            context["media_url"] += '?media_filter={0}'.format(media_filter)

        template = get_template('coop_cms/medialib/slide_base.html')
        html = template.render(make_context(request, context))

        if is_ajax:
            data = {
                'html': html,
                'media_type': media_type,
                'media_url': context["media_url"],
            }
            return HttpResponse(json.dumps(data), content_type="application/json")
        else:
            return HttpResponse(html)
    except Exception:
        logger.exception("show_media")
        raise
Exemplo n.º 17
0
def show_media(request, media_type):
    """show media library"""
    try:
        if not request.user.is_staff:
            raise PermissionDenied

        try:
            page = int(request.GET.get('page', 0) or 0)
        except ValueError:
            page = 1
        is_ajax = page > 0
        media_filter = request.GET.get('media_filter', 0)
        skip_media_filter = False

        if request.session.get("coop_cms_media_doc", False):
            # force the doc
            media_type = 'document'
            del request.session["coop_cms_media_doc"]

        if media_type == 'image':
            queryset = models.Image.objects.all().order_by("ordering", "-created")
            context = {
                'media_url': reverse('coop_cms_media_images'),
                'media_slide_template': 'coop_cms/medialib/slide_images_content.html',
            }

        elif media_type == 'photologue':
            queryset, context = _get_photologue_media(request)
            skip_media_filter = True

        else:
            media_type = "document"
            queryset = models.Document.objects.all().order_by("ordering", "-created")
            context = {
                'media_url': reverse('coop_cms_media_documents'),
                'media_slide_template': 'coop_cms/medialib/slide_docs_content.html',
            }

        context['is_ajax'] = is_ajax
        context['media_type'] = media_type

        if not skip_media_filter:
            # list of lists of media_filters
            media_filters = [media.filters.all() for media in queryset.all()]
            # flat list of media_filters
            media_filters = itertools.chain(*media_filters)
            # flat list of unique media filters sorted by alphabetical order (ignore case)
            context['media_filters'] = sorted(
                list(set(media_filters)), key=lambda mf: mf.name.upper()
            )

            if int(media_filter):
                queryset = queryset.filter(filters__id=media_filter)
                context['media_filter'] = int(media_filter)

        page_obj = paginate(request, queryset, 12)

        context[media_type+'s'] = list(page_obj)
        context['page_obj'] = page_obj

        context["allow_photologue"] = "photologue" in settings.INSTALLED_APPS

        if int(media_filter):
            context["media_url"] += '?media_filter={0}'.format(media_filter)

        template = get_template('coop_cms/medialib/slide_base.html')
        html = template.render(make_context(request, context))

        if is_ajax:
            data = {
                'html': html,
                'media_type': media_type,
                'media_url': context["media_url"],
            }
            return HttpResponse(json.dumps(data), content_type="application/json")
        else:
            return HttpResponse(html)
    except Exception:
        logger.exception("show_media")
        raise
Exemplo n.º 18
0
def search(request, search_id=0, group_id=0, opportunity_id=0, city_id=0):
    message = ''
    results = []
    search_obj = None
    field_choice_form = FieldChoiceForm()
    contains_refuse_newsletter = False
    data = None
    contacts_count = 0
    has_empty_entities = False
    group = opportunity = city = None
    contacts_display = False

    if request.method == "POST":
        data = request.POST
    elif group_id:
        group = get_object_or_404(Group, id=group_id)
        data = {"gr0-_-group-_-0": group_id}
    elif opportunity_id:
        opportunity = get_object_or_404(Opportunity, id=opportunity_id)
        data = {"gr0-_-opportunity-_-0": opportunity_id}
    elif city_id:
        city = get_object_or_404(City, id=city_id)
        data = {"gr0-_-city-_-0": city_id}
            
    if data:
        search_form = SearchForm(data)
        if search_form.is_valid():
            contacts_display = search_form.contacts_display
            
            if not contacts_display:
                results, contacts_count, has_empty_entities = search_form.get_contacts_by_entity()
                contains_refuse_newsletter = search_form.contains_refuse_newsletter
            else:
                results = search_form.get_contacts()
                contacts_count, has_empty_entities = len(results), False
                contains_refuse_newsletter = search_form.contains_refuse_newsletter
            
            if not results:
                message = _(u'Sorry, no results found')
    else:
        search_obj = get_object_or_404(Search, id=search_id) if search_id else None
        search_form = SearchForm(instance=search_obj)
    
    entities_count = 0 if contacts_display else len(results)

    page_obj = paginate(request, results, getattr(settings, 'BALAFON_SEARCH_NB_IN_PAGE', None) or 50)

    return render_to_response(
        'Search/search.html',
        {
            'page_obj': page_obj,
            'results': list(page_obj),
            'field_choice_form': field_choice_form,
            'message': message,
            'has_empty_entities': has_empty_entities,
            'search_form': search_form,
            'search': search_obj,
            'contacts_count': contacts_count,
            'entities_count': entities_count,
            'contains_refuse_newsletter': contains_refuse_newsletter,
            'group': group,
            'opportunity': opportunity,
            'city': city,
            'contacts_display': contacts_display,
        },
        context_instance=RequestContext(request)
    )