diff --git a/abonapp/models.py b/abonapp/models.py index 5acfb8b..d2eef58 100644 --- a/abonapp/models.py +++ b/abonapp/models.py @@ -317,33 +317,39 @@ def abon_post_save(sender, instance, **kwargs): else: return inst_tariff = instance.active_tariff() - if inst_tariff: - agent_trf = TariffStruct(inst_tariff.id, inst_tariff.speedIn, inst_tariff.speedOut) - else: - agent_trf = TariffStruct() - agent_abon = AbonStruct(instance.id, user_ip, agent_trf) - tm = Transmitter() - if kwargs['created']: - # создаём абонента - tm.add_user(agent_abon) - else: - # обновляем абонента на NAS - try: - tm.update_user(agent_abon) - except NasFailedResult: + try: + if inst_tariff: + agent_trf = TariffStruct(inst_tariff.id, inst_tariff.speedIn, inst_tariff.speedOut) + else: + agent_trf = TariffStruct() + agent_abon = AbonStruct(instance.id, user_ip, agent_trf) + tm = Transmitter() + if kwargs['created']: + # создаём абонента tm.add_user(agent_abon) - # если не активен то приостановим услугу - if instance.is_active: - tm.start_user(agent_abon) else: - tm.pause_user(agent_abon) + # обновляем абонента на NAS + try: + tm.update_user(agent_abon) + except NasFailedResult: + tm.add_user(agent_abon) + # если не активен то приостановим услугу + if instance.is_active: + tm.start_user(agent_abon) + else: + tm.pause_user(agent_abon) + except NasFailedResult: + return True def abon_del_signal(sender, instance, **kwargs): - # подключаемся к NAS'у - tm = Transmitter() - # удаляем абонента на NAS - tm.remove_user(instance.id) + try: + # подключаемся к NAS'у + tm = Transmitter() + # удаляем абонента на NAS + tm.remove_user(instance.id) + except NasFailedResult: + return True def abontariff_post_save(sender, instance, **kwargs): @@ -353,21 +359,30 @@ def abontariff_post_save(sender, instance, **kwargs): return if instance.abon.ip_address is None: return - agent_trf = TariffStruct(instance.tariff.id, instance.tariff.speedIn, instance.tariff.speedOut) - agent_abon = AbonStruct(instance.abon.id, instance.abon.ip_address.int_ip(), agent_trf) - tm = Transmitter() - tm.update_user(agent_abon) - tm.start_user(agent_abon) + try: + agent_trf = TariffStruct(instance.tariff.id, instance.tariff.speedIn, instance.tariff.speedOut) + agent_abon = AbonStruct(instance.abon.id, instance.abon.ip_address.int_ip(), agent_trf) + tm = Transmitter() + tm.update_user(agent_abon) + tm.start_user(agent_abon) + except NasFailedResult: + return True def abontariff_del_signal(sender, instance, **kwargs): if not instance.is_started(): # если удаляем не активную услугу то говорить об этом NAS'у не обязательно return - agent_trf = TariffStruct(instance.tariff.id, instance.tariff.speedIn, instance.tariff.speedOut) - agent_abon = AbonStruct(instance.abon.id, instance.abon.ip_address.int_ip(), agent_trf) - tm = Transmitter() - tm.pause_user(agent_abon) + if instance.abon.ip_address is None: + # если у абонента нет ip то и создавать правило не на кого + return + try: + agent_trf = TariffStruct(instance.tariff.id, instance.tariff.speedIn, instance.tariff.speedOut) + agent_abon = AbonStruct(instance.abon.id, instance.abon.ip_address.int_ip(), agent_trf) + tm = Transmitter() + tm.pause_user(agent_abon) + except NasFailedResult: + return True models.signals.post_save.connect(abon_post_save, sender=Abon) diff --git a/abonapp/views.py b/abonapp/views.py index ff101f5..63fca9a 100644 --- a/abonapp/views.py +++ b/abonapp/views.py @@ -143,16 +143,20 @@ def delentity(request): abon = get_object_or_404(models.Abon, id=uid) gid = abon.group.id abon.delete() - return mydefs.res_success(request, resolve_url('abonapp:people_list', gid)) + messages.success(request, 'Абонент успешно удалён') + return mydefs.res_success(request, resolve_url('abonapp:people_list', gid=gid)) elif typ == 'g': if not request.user.has_perm('abonapp.delete_abongroup'): raise PermissionDenied get_object_or_404(models.AbonGroup, id=uid).delete() - return mydefs.res_success(request, 'abonapp:group_list') + messages.success(request, 'Группа успешно удалёна') + return mydefs.res_success(request, 'abonapp:group_list') + else: + messages.warning(request, 'Не понятно что удалять') except NasNetworkError as e: messages.error(request, e) except NasFailedResult as e: - messages.error(request, e) + messages.error(request, "NAS сказал: '%s'" % e) return redirect('abonapp:group_list')