Browse Source

Make vCards exporter

devel
bashmak 8 years ago
parent
commit
31d2f2e839
  1. 3
      abonapp/locale/ru/LC_MESSAGES/django.po
  2. 4
      abonapp/templates/abonapp/group_list.html
  3. 2
      abonapp/urls.py
  4. 44
      abonapp/views.py

3
abonapp/locale/ru/LC_MESSAGES/django.po

@ -1157,3 +1157,6 @@ msgstr "История задач"
msgid "Charts" msgid "Charts"
msgstr "Графики" msgstr "Графики"
msgid "Export vCards"
msgstr "Экспорт в vCards"

4
abonapp/templates/abonapp/group_list.html

@ -66,6 +66,10 @@
<span class="glyphicon glyphicon-usd"></span> <span class="hidden-xs">{% trans 'Fin report' %}</span> <span class="glyphicon glyphicon-usd"></span> <span class="hidden-xs">{% trans 'Fin report' %}</span>
</a> </a>
{% endif %} {% endif %}
<a href="{% url 'abonapp:vcards' %}" target="_blank" class="btn btn-default">
<span class="glyphicon glyphicon-phone"></span>
<span class="hidden-xs">{% trans 'Export vCards' %}</span>
</a>
</td> </td>
</tr> </tr>
</tfoot> </tfoot>

2
abonapp/urls.py

@ -62,6 +62,8 @@ urlpatterns = [
url(r'^ping$', views.abon_ping, name='ping'), url(r'^ping$', views.abon_ping, name='ping'),
url(r'contacts/vcards/$', views.vcards, name='vcards'),
# Api's # Api's
url(r'^api/abons$', views.abons), url(r'^api/abons$', views.abons),
url(r'^api/abon_filter$', views.search_abon), url(r'^api/abon_filter$', views.search_abon),

44
abonapp/views.py

@ -773,7 +773,49 @@ def abon_ping(request):
} }
@method_decorator((login_required, lib.decorators.only_admins,), name='dispatch')
@login_required
def vcards(r):
abons = models.Abon.objects.exclude(group=None).select_related('group', 'street').only(
'username', 'fio', 'group__title', 'telephone',
'street__name', 'house'
)
additional_tels = models.AdditionalTelephone.objects.select_related('abon', 'abon__group', 'abon__street')
response = HttpResponse(content_type='text/x-vcard')
response['Content-Disposition'] = 'attachment; filename="contacts.vcard"'
tmpl = ("BEGIN:VCARD\r\n"
"VERSION:4.0\r\n"
"FN:%(uname)s. %(group_name)s, %(street)s %(house)s\r\n"
"IMPP:sip:%(abon_telephone)s@dial.lo\r\n"
"END:VCARD\r\n")
def _make_vcard():
for ab in abons.iterator():
tel = ab.telephone
if tel:
yield tmpl % {
'uname': ab.get_full_name(),
'group_name': ab.group.title,
'street': ab.street.name if ab.street else '',
'house': ab.house,
'abon_telephone': tel
}
if not additional_tels.exists():
return
for add_tel in additional_tels.iterator():
abon = add_tel.abon
yield tmpl % {
'uname': "%s (%s)" % (add_tel.owner_name, abon.get_full_name()),
'group_name': abon.group.title,
'abon_telephone': add_tel.telephone,
'street': abon.street.name if abon.street else '',
'house': abon.house
}
response.content = _make_vcard()
return response
@method_decorator((login_required, lib.decorators.only_admins), name='dispatch')
class DialsListView(BaseAbonListView): class DialsListView(BaseAbonListView):
context_object_name = 'logs' context_object_name = 'logs'
template_name = 'abonapp/dial_log.html' template_name = 'abonapp/dial_log.html'

Loading…
Cancel
Save