|
|
@ -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' |
|
|
|