def send_email(self, subject, template, context): context.update({'user': self.user, 'VERIFICATION_KEY_DAYS': VERIFICATION_KEY_DAYS}) context.update(scheme_and_domain()) message = render_to_string(template, context) return send_mail(subject=subject, message=message, from_email=None, recipient_list=[self.user.email, ])
def create_for_action(self, action_flag, context_dict=None, extra=None, reason=None): u""" создается запись в логах + создаются сообщения для всех уровней логирования(основываясь на шаблонах ACTION_TEMPLATES) Аргументы: action_flag - тип действия, записанный в workflow context_dict - контекст, передающийся в шаблон extra - дополнительные параметры: user - пользователь выполнивший действие sadik_group - группа ДОУ по отношению к которой выполнеяется действие, например распределение заявки age_group - возрастная группа added_pref_sadiks - ДОУ, которые были добавлены removed_pref_sadiks - ДОУ, которые были удалены """ from sadiki.core.workflow import DISABLE_EMAIL_ACTIONS from sadiki.core.workflow import ACTION_TEMPLATES context = Context(context_dict) if extra is None: extra = {} log_dict = {'reason': reason, 'action_flag': action_flag, 'user': extra.get('user')} obj = extra.get('obj') if obj: log_dict.update({'content_object': obj}) log = Logger(**log_dict) # к логу добавляем дополнительную информацию if isinstance(obj, Requestion): if obj.distributed_in_vacancy: log.vacancy = obj.distributed_in_vacancy # надо сохранить возрастную группу, т.к. может изменяться у группы в ДОУ age_groups = (obj.distributed_in_vacancy.sadik_group.age_group,) else: age_groups = obj.age_groups() if 'profile' in extra: log.profile = extra['profile'] if 'distribution_type' in extra: log.distribution_type = extra['distribution_type'] # need save instance before work with many to many(pk required) log.save() if age_groups: log.age_groups = age_groups if 'added_pref_sadiks' in extra: log.added_pref_sadiks = extra['added_pref_sadiks'] if 'removed_pref_sadiks' in extra: log.removed_pref_sadiks = extra['removed_pref_sadiks'] else: log.save() if 'age_group' in extra: log.age_groups = (extra['age_group'],) # для данного типа изменений создаем сообщения в логах для всех # уровней логирования main_message = u'' if action_flag in ACTION_TEMPLATES: for log_level, template in ACTION_TEMPLATES[action_flag].iteritems(): message = template.render(context).strip() # убираем лишние пробелы message = re.sub(r"\s+", u" ", message) # если текстового сообщения нет(например не изменялись публичные поля) # то не сохраняем if message: main_message = u"%s %s" % (main_message, message) LoggerMessage.objects.create( level=log_level, message=message, logger=log,) # а теперь отсылаем сообщение(если работаем с заявкой) # и это действие не находится в исключениях if isinstance(obj, Requestion) and action_flag not in DISABLE_EMAIL_ACTIONS: profile = obj.profile if profile.user.email and profile.email_verified: context = scheme_and_domain() context.update({'requestion': log.content_object, 'user': log.user, 'change_type': log.get_action_flag_display(), 'changes_message': main_message}) message = render_to_string("logger/emails/base.html", context) try: send_mail(subject=u"Изменение заявки %s" % extra['obj'], message=message, from_email=None, recipient_list=[obj.profile.user.email, ]) except SMTPException: pass