def update_trav_batiment(id_trav): """ Met à jour une demande de travaux """ dem = request.json trav = _db.session.query(TravauxBatiment).get(id_trav) try: TravauxBatimentFullSerializer(trav).populate(dem) _db.session.commit() send_mail( ['tizoutis-travaux-batiments-admin', 'admin-tizoutis'], "Mise à jour de la fiche n°%s" % trav.id, ''' La fiche n°{0} a été modifiée. Vous pouvez vous connecter sur http://tizoutis.pnc.int/#/batiments?fiche={0} pour voir les détails de cette demande. '''.format(trav.id), add_dests=trav.dmdr_contact_email.split(','), sendername='travaux-batiments' ) return {'id': trav.id} except ValidationError as e: return e.errors, 400
def create_trav_batiment(): """ Crée une nouvelle demande de travaux """ dem = request.json dem['dem_date'] = datetime.datetime.now() demande = TravauxBatiment() try: TravauxBatimentFullSerializer(demande).populate(dem) _db.session.add(demande) _db.session.commit() send_mail(['tizoutis-travaux-batiments-admin', 'admin-tizoutis'], "Création de la demande de travaux n°%s" % demande.id, ''' Une nouvelle demande de travaux a été créée. Vous pouvez vous connecter sur http://tizoutis.pnc.int/#/batiments?fiche=%s pour voir les détails de cette demande. ''' % demande.id, add_dests=demande.dmdr_contact_email.split(','), sendername='travaux-batiments') return {'id': demande.id} except ValidationError as e: return e.errors, 400
def update_trav_batiment(id_trav): """ Met à jour une demande de travaux """ dem = request.json trav = _db.session.query(TravauxBatiment).get(id_trav) try: TravauxBatimentFullSerializer(trav).populate(dem) _db.session.commit() send_mail(['tizoutis-travaux-batiments-admin', 'admin-tizoutis'], "Mise à jour de la fiche n°%s" % trav.id, ''' La fiche n°{0} a été modifiée. Vous pouvez vous connecter sur http://tizoutis.pnc.int/#/batiments?fiche={0} pour voir les détails de cette demande. '''.format(trav.id), add_dests=trav.dmdr_contact_email.split(','), sendername='travaux-batiments') return {'id': trav.id} except ValidationError as e: return e.errors, 400
def create_trav_batiment(): """ Crée une nouvelle demande de travaux """ dem = request.json dem['dem_date'] = datetime.datetime.now() demande = TravauxBatiment() try: TravauxBatimentFullSerializer(demande).populate(dem) _db.session.add(demande) _db.session.commit() send_mail( ['tizoutis-travaux-batiments-admin', 'admin-tizoutis'], "Création de la demande de travaux n°%s" % demande.id, ''' Une nouvelle demande de travaux a été créée. Vous pouvez vous connecter sur http://tizoutis.pnc.int/#/batiments?fiche=%s pour voir les détails de cette demande. ''' % demande.id, add_dests=demande.dmdr_contact_email.split(','), sendername='travaux-batiments' ) return {'id': demande.id} except ValidationError as e: return e.errors, 400
def create_intervention(): """ crée une nouvelle demande d'intervention """ dem = request.json dem['dem_date'] = datetime.date.today() ref_chrono = '{}I'.format(str(dem['dem_date'].year)[2:4]) demande = Demande() try: chrono = get_chrono(ref_chrono) dem['num_intv'] = chrono DemandeFullSerializer(demande).load(dem) _db.session.add(demande) _db.session.commit() dem_loc = _db.session.query(Thesaurus).get( demande.dem_localisation).label dem_objet = _db.session.query(Thesaurus).get(demande.dem_objet).label send_mail(['tizoutis-interventions', 'admin-tizoutis'], "Création de la demande d'intervention n°%s - %s %s" % (demande.id, dem_objet, dem_loc), ''' Une nouvelle demande d'intervention a été créée. Vous pouvez vous connecter sur http://tizoutis.pnc.int/#/interventions?fiche=%s pour voir les détails de cette demande. ''' % demande.id, add_dests=demande.dmdr_contact_email.split(','), sendername='interventions') return {'id': demande.id} except ValidationError as e: amend_chrono(ref_chrono) return e.errors, 400
def update_intervention(id_intervention): """ met à jour une demande d'intervention identifée par id_intervention """ dem = request.json demande = _db.session.query(Demande).get(id_intervention) try: DemandeFullSerializer(demande).load(dem) _db.session.commit() dem_loc = _db.session.query(Thesaurus).get( demande.dem_localisation).label dem_objet = _db.session.query(Thesaurus).get(demande.dem_objet).label send_mail(['tizoutis-interventions', 'admin-tizoutis'], "Mise à jour de la demande d'intervention n°%s - %s %s" % (demande.id, dem_objet, dem_loc), ''' La demande d'intervention n°%s a été modifiée. Vous pouvez vous connecter sur http://tizoutis.pnc.int/#/interventions?fiche=%s pour voir les détails de cette demande. ''' % (demande.id, demande.id), add_dests=demande.dmdr_contact_email.split(','), sendername='interventions') return {'id': demande.id} except ValidationError as e: return e.errors, 400 except Exception: import traceback print(traceback.format_exc()) _db.session.rollback() return {}, 400
def post(self, request): user = request.user update_form = UpdateForm(request.POST, instance=user, initial={'new_email': user.username}) delete_user_form = DeleteUserForm() change_password_form = CustomPasswordChangeForm(user) changed = False if update_form.has_changed(): if update_form.is_valid(): upd_user = update_form.save() if 'new_email' in update_form.changed_data: send_mail(request, upd_user, register=False) context = { 'msg': 'Проверьте почту', 'text': 'На указанную вами электронную почту выслано письмо с инструкциями для подтверждения учётной записи' } return render(request, 'users/activate.html', context) changed = True context = { 'delete_user_form': delete_user_form, 'change_password_form': change_password_form, 'changed': changed, 'update_form': update_form, } return render(request, 'users/profile.html', context)
def post(self, request): register_form = RegisterForm(request.POST) field_errors = register_form.errors.as_json() success = False email_error = None success_message = None if register_form.is_valid(): user = register_form.save(commit=False) user.is_active = False try: send_mail(request, user) user.save() success = True success_message = 'На указанную вами электронную почту выслано письмо с инструкциями для подтверждения учётной записи' except Exception as e: email_error = 'Ошибка! Перезагрузите страницу и попробуйте заново.' print(e) context = { 'success': success, 'errors': field_errors, 'email_error': email_error, 'success_message': success_message } return JsonResponse(context)
def delete_intervention(id_intervention): """ supprime une demande d'intervention identifiée par id_intervention """ demande = _db.session.query(Demande).get(id_intervention) _db.session.delete(demande) _db.session.commit() dem_loc = _db.session.query(Thesaurus).get(demande.dem_localisation).label dem_objet = _db.session.query(Thesaurus).get(demande.dem_objet).label send_mail( ['tizoutis-interventions', 'admin-tizoutis'], "Annulation de la demande d'intervention n°%s - %s %s" % ( demande.id, dem_objet, dem_loc ), ''' La demande d'intervention n°%s a été annulée. Vous pouvez vous connecter sur http://tizoutis.pnc.int/#/interventions/ pour voir la liste des demandes en cours. ''', add_dests=demande.dmdr_contact_email.split(','), sendername='interventions') return {'id': demande.id}
def delete_agent(id_agent): ''' annule un recrutement en cours ''' agent = _db.session.query(AgentDetail).get(id_agent) if not agent: return [], 404 """ rels_fichiers = _db.session.query(RelAgentFichier).filter( RelAgentFichier.id_agent == id_agent ).all() for rel in rels_fichiers: delete_uploaded_file(rel.id_fichier, _db) """ _db.session.delete(agent) _db.session.commit() send_mail(['tizoutis-recrutement', 'admin-tizoutis'], "Suppression d'une fiche de recrutement : %s %s" % (agent.prenom or '', agent.nom), ''' La fiche de recrutement de %s %s a été supprimée le %s. Vous pouvez vous connecter à http://tizoutis.pnc.int/#/recrutement pour voir la liste des recrutements en cours. ''' % (agent.prenom or '', agent.nom, datetime.datetime.today().strftime('%d/%m/%Y')), add_dests=agent.notif_list.split(',')) return []
def delete_agent(id_agent): ''' annule un recrutement en cours ''' agent = _db.session.query(AgentDetail).get(id_agent) if not agent: return [], 404 rels_fichiers = _db.session.query(RelAgentFichier).filter( RelAgentFichier.id_agent == id_agent).all() for rel in rels_fichiers: delete_uploaded_file(rel.id_fichier, _db) #_db.session.delete(rel) _db.session.delete(agent) _db.session.commit() send_mail( ['tizoutis-recrutement', 'admin-tizoutis'], "Suppression d'une fiche de recrutement : %s %s" % ( agent.prenom or '', agent.nom ), ''' La fiche de recrutement de %s %s a été supprimée le %s. Vous pouvez vous connecter à http://tizoutis.pnc.int/#/recrutement pour voir la liste des recrutements en cours. ''' % ( agent.prenom or '', agent.nom, datetime.datetime.today().strftime('%d/%m/%Y') ), add_dests=agent.notif_list.split(',') ) return []
def send_welcome_email(user): """ Send a new User a welcome email. """ subject = 'Welcome to Code Atlas' body = 'Welcome to Code Atlas' template = 'email/welcome.html' send_mail(subject, body, template, [user])
def reset(self, request, *args, **kwargs): email = request.data.get('email') user = self.get_queryset().filter(email=email).first() if not user: raise ValidationError('Пользователь с указзанным email-ом не найдет') key = "{}:{}".format(md5(user.username).hexdigest(), user.pk) message = render_to_string('auth/password_reset_email.html', context={"key": key}) try: send_mail('*****@*****.**', user.email, 'Восстановление пароля', message) except Exception as e: raise ValidationError('Ошибка при отправке письма: {}'.format(e)) return Response(status=status.HTTP_200_OK)
def deactivate(self, request, *args, **kwargs): user = self.get_object() if not user.is_active: raise ValidationError('Пользователь уже деактивирован') user.is_active = False user.save() message = render_to_string('auth/account_deactivate_email.html') try: send_mail('*****@*****.**', user.email, 'Ваш аккаунт отключен', message) except Exception as e: raise ValidationError('Ошибка при отправке письма: {}'.format(e)) return Response(status=status.HTTP_200_OK)
def confirm_close_claim(self, request, *args, **kwargs): deposit = self.get_object() if deposit.status != deposit.STATUS_REQUESTED_CLOSING: raise ValidationError('Заявка на закрытие депозита не подана.') if deposit.close_confirm(): message = render_to_string('deposit/create_confirm_email.html') try: send_mail('*****@*****.**', deposit.client.email, 'Ваша заявка на закрытие депозита одобрена.', message) except Exception as e: raise ValidationError('Ошибка при отправке письма: {}'.format(e)) return Response('Закрытие подтверждено, деньги переведены.', status=status.HTTP_200_OK) else: raise ValidationError('Заявка на закрытие не была подана.')
def update_agent(id_agent): ''' met à jour un agent ''' try: ag = request.json agent = _db.session.query(AgentDetail).get(id_agent) if not agent: return [], 404 ag['materiel'] = [ _db.session.query(Thesaurus).get(item_id) for item_id in ag.get('materiel', [])] ag['meta_update'] = datetime.datetime.now() notif = ag.pop('ctrl_notif', False) AgentDetailSerializer(agent).populate(ag) _db.session.commit() out = AgentDetailSerializer(agent).serialize() if notif: send_mail( ['tizoutis-recrutement', 'admin-tizoutis'], "Modification d'une fiche de recrutement : %s %s" % ( agent.prenom or '', agent.nom ), ''' La fiche de recrutement de %s %s a été modifiée le %s. Vous pouvez vous connecter à http://tizoutis.pnc.int/#/recrutement?annee=%s&fiche=%s pour voir les détails de cette fiche. ''' % ( agent.prenom or '', agent.nom, datetime.datetime.today().strftime('%d/%m/%Y'), agent.arrivee.year, agent.id ), add_dests=ag['notif_list'] ) return out except Exception as exc: import traceback print(exc) print(traceback.format_exc()) return [{'msg': traceback.format_exc()}], 400
def reject_create_claim(self, request, *args, **kwargs): """ """ account = self.get_object() cause = '' if account.status != account.STATUS_REQUESTED_CREATING: raise ValidationError('Заявка на создание счета была обработана ранее.') else: message = render_to_string('account/create_reject_email.html') try: send_mail('*****@*****.**', account.client.email, 'Ваша заявка на создание счета отклонена.', message) except Exception as e: raise ValidationError('Ошибка при отправке письма: {}'.format(e)) account.reject(cause) return Response('Создание счета отклонено')
def confirm_create_claim(self, request, *args, **kwargs): account = self.get_object() if account.status == account.STATUS_ACTIVE: raise ValidationError('Заявка на создание счета уже была обработана ранее.') if account.status != account.STATUS_REQUESTED_CREATING: raise ValidationError('Операции со счетом невозможны') else: if account.confirm(): message = render_to_string('account/create_confirm_email.html') try: send_mail('*****@*****.**', account.client.email, 'Ваша заявка на создание счета одобрена.', message) except Exception as e: raise ValidationError('Ошибка при отправке письма: {}'.format(e)) return Response('Создание счета подтверждено', status=status.HTTP_200_OK) raise ValidationError('Создание счета отклонено банком')
def create_agent(): ''' crée un nouvel agent ''' try: ag = request.json ag['meta_create'] = datetime.datetime.now() ag['materiel'] = [ _db.session.query(Thesaurus).get(item_id) for item_id in ag.get('materiel', [])] notif = ag.pop('ctrl_notif', False) # agent = AgentDetail(**ag) agent = AgentDetail() AgentDetailSerializer(agent).populate(ag) _db.session.add(agent) _db.session.commit() out = AgentDetailSerializer(agent).serialize() if notif: send_mail( ['tizoutis-recrutement', 'admin-tizoutis'], 'Nouvelle fiche de recrutement : %s %s' % ( agent.prenom or '', agent.nom ), ''' La fiche de recrutement de %s %s a été créée le %s. Vous pouvez vous connecter sur http://tizoutis.pnc.int/#/recrutement?annee=%s&fiche=%s pour voir les détails de cette fiche. ''' % ( agent.prenom or '', agent.nom, datetime.datetime.today().strftime('%d/%m/%Y'), agent.arrivee.year, agent.id ), add_dests=ag['notif_list'] ) return out except Exception: import traceback return [{'msg': traceback.format_exc()}], 400
def confirm_create_claim(self, request, *args, **kwargs): credit = self.get_object() if credit.status != credit.STATUS_REQUESTED: raise ValidationError( 'Заявка на создание кредита была обработана ранее.') else: if credit.confirm(): message = render_to_string('credit/create_confirm_email.html') try: send_mail('*****@*****.**', credit.client.email, 'Ваша заявка на создание кредита одобрена.', message) except Exception as e: raise ValidationError( 'Ошибка при отправке письма: {}'.format(e)) return Response('Создание кредита подтверждено', status=status.HTTP_200_OK) else: raise ValidationError('Отклонено банком')
def update_agent(id_agent): ''' met à jour un agent ''' try: ag = request.json agent = _db.session.query(AgentDetail).get(id_agent) if not agent: return [], 404 ag['materiel'] = [ _db.session.query(Thesaurus).get(item_id) for item_id in ag.get('materiel', []) ] ag['meta_update'] = str(datetime.date.today()) notif = ag.pop('ctrl_notif', False) AgentDetailSerializer(agent).load(ag) _db.session.commit() out = AgentDetailSerializer(agent).dump() if notif: send_mail(['tizoutis-recrutement', 'admin-tizoutis'], "Modification d'une fiche de recrutement : %s %s" % (agent.prenom or '', agent.nom), ''' La fiche de recrutement de %s %s a été modifiée le %s. Vous pouvez vous connecter à http://tizoutis.pnc.int/#/recrutement?annee=%s&fiche=%s pour voir les détails de cette fiche. ''' % (agent.prenom or '', agent.nom, datetime.datetime.today().strftime('%d/%m/%Y'), agent.arrivee.year, agent.id), add_dests=ag['notif_list']) return out except Exception as exc: import traceback print(exc) print(traceback.format_exc()) return [{'msg': traceback.format_exc()}], 400
def delete_trav_batiment(id_trav): """ Supprime une demande de travaux """ trav = _db.session.query(TravauxBatiment).get(id_trav) _db.session.delete(trav) _db.session.commit() send_mail(['tizoutis-travaux-batiments-admin', 'admin-tizoutis'], "Suppression de la fiche n°%s" % trav.id, ''' La fiche n°{0} a été supprimée. Vous pouvez vous connecter sur http://tizoutis.pnc.int/#/batiments pour voir la liste des travaux en cours. '''.format(trav.id), add_dests=trav.dmdr_contact_email.split(','), sendername='travaux-batiments') return {'id': id_trav}
def delete_trav_batiment(id_trav): """ Supprime une demande de travaux """ trav = _db.session.query(TravauxBatiment).get(id_trav) _db.session.delete(trav) _db.session.commit() send_mail( ['tizoutis-travaux-batiments-admin', 'admin-tizoutis'], "Suppression de la fiche n°%s" % trav.id, ''' La fiche n°{0} a été supprimée. Vous pouvez vous connecter sur http://tizoutis.pnc.int/#/batiments pour voir la liste des travaux en cours. '''.format(trav.id), add_dests=trav.dmdr_contact_email.split(','), sendername='travaux-batiments' ) return {'id': id_trav}
def reject_create_claim(self, request, *args, **kwargs): """ :param request: { "cause", cause of rejection } """ deposit = self.get_object() cause = request.data['cause'] if deposit.status != deposit.STATUS_REQUESTED_CREATING: raise ValidationError('Заявка на создание депозита уже была обработана.') else: message = render_to_string('deposit/create_reject_email.html') try: send_mail('*****@*****.**', deposit.client.email, 'Ваша заявка на создание депозита отклонена.', message) except Exception as e: raise ValidationError('Ошибка при отправке письма: {}'.format(e)) deposit.reject(cause) return Response('Создание депозита отклонено')
def reject_close_claim(self, request, *args, **kwargs): """ :param request: { "cause", cause of rejection } """ deposit = self.get_object() if deposit.status != deposit.STATUS_REQUESTED_CLOSING: raise ValidationError('Заявка на закрытие депозита не подана.') cause = request.data['cause'] if deposit.close_reject(cause): message = render_to_string('deposit/close_reject_email.html') try: send_mail('*****@*****.**', deposit.client.email, 'Ваша заявка на закрытие депозита отклонена.', message) except Exception as e: raise ValidationError('Ошибка при отправке письма: {}'.format(e)) return Response('Закрытие отклонено.', status=status.HTTP_200_OK) else: raise ValidationError('Заявка на закрытие не была подана.')
def password_reset_token_created(sender, reset_password_token, *args, **kwargs): user_email = reset_password_token.user.email context = { 'current_user': reset_password_token.user, 'email': user_email, 'protocol': 'https' } to_email = user_email.lower() first_location = Location.objects.filter(musers__email=to_email). \ select_related('branding').first() branding = first_location.branding if first_location else \ MUser.objects.filter( email=to_email, has_access_to_all_locations=True ).exists() and Branding.objects.first() if not branding: log.error( 'PasswordResetForm: Either email %s does not have location ' 'assigned or does not have access to all locations or does ' 'not exists', to_email) return context['branding'] = branding context['imprint'] = branding.imprint context['site_name'] = context['domain'] = branding.my_portal_domain context['reset_password_path'] = f'/password-reset/check/?token=' \ f'{reset_password_token.key}' template = branding.email_template_my_portal_password_reset send_mail( render_template_from_db(template.subject, context), render_template_from_db(template.txt, context), from_email=template.get_email_sender( settings.TIGAELEVEN_MYPORTAL_EMAIL_FROM), recipient_list=[ to_email, ], html_message=render_template_from_db(template.html, context), allow_unverified_recipient=True, )
def create_agent(): ''' crée un nouvel agent ''' try: ag = request.json ag['materiel'] = [ _db.session.query(Thesaurus).get(item_id) for item_id in ag.get('materiel', []) ] notif = ag.pop('ctrl_notif', False) # agent = AgentDetail(**ag) agent = AgentDetail() AgentDetailSerializer(agent).load(ag) _db.session.add(agent) _db.session.commit() out = AgentDetailSerializer(agent).dump() if notif: send_mail(['tizoutis-recrutement', 'admin-tizoutis'], 'Nouvelle fiche de recrutement : %s %s' % (agent.prenom or '', agent.nom), ''' La fiche de recrutement de %s %s a été créée le %s. Vous pouvez vous connecter sur http://tizoutis.pnc.int/#/recrutement?annee=%s&fiche=%s pour voir les détails de cette fiche. ''' % (agent.prenom or '', agent.nom, datetime.datetime.today().strftime('%d/%m/%Y'), agent.arrivee.year, agent.id), add_dests=ag['notif_list']) return out except Exception: import traceback return [{'msg': traceback.format_exc()}], 400
def update_intervention(id_intervention): """ met à jour une demande d'intervention identifée par id_intervention """ dem = request.json demande = _db.session.query(Demande).get(id_intervention) try: DemandeFullSerializer(demande).populate(dem) #_db.session.add(demande) _db.session.commit() dem_loc = _db.session.query(Thesaurus).get(demande.dem_localisation).label dem_objet = _db.session.query(Thesaurus).get(demande.dem_objet).label send_mail( ['tizoutis-interventions', 'admin-tizoutis'], "Mise à jour de la demande d'intervention n°%s - %s %s" % ( demande.id, dem_objet, dem_loc ), ''' La demande d'intervention n°%s a été modifiée. Vous pouvez vous connecter sur http://tizoutis.pnc.int/#/interventions?fiche=%s pour voir les détails de cette demande. ''' % (demande.id, demande.id), add_dests=demande.dmdr_contact_email.split(','), sendername='interventions' ) return {'id': demande.id} except ValidationError as e: return e.errors, 400 except: import traceback print(traceback.format_exc()) _db.session.rollback() return {}, 400
def create_intervention(): """ crée une nouvelle demande d'intervention """ dem = request.json dem['dem_date'] = datetime.datetime.now() ref_chrono = '{}-INTV-'.format(dem['dem_date'].year) demande = Demande() try: chrono = get_chrono(ref_chrono) dem['num_intv'] = chrono DemandeFullSerializer(demande).populate(dem) _db.session.add(demande) _db.session.commit() dem_loc = _db.session.query(Thesaurus).get(demande.dem_localisation).label dem_objet = _db.session.query(Thesaurus).get(demande.dem_objet).label send_mail( ['tizoutis-interventions', 'admin-tizoutis'], "Création de la demande d'intervention n°%s - %s %s" % ( demande.id, dem_objet, dem_loc ), ''' Une nouvelle demande d'intervention a été créée. Vous pouvez vous connecter sur http://tizoutis.pnc.int/#/interventions?fiche=%s pour voir les détails de cette demande. ''' % demande.id, add_dests=demande.dmdr_contact_email.split(','), sendername='interventions' ) return {'id': demande.id} except ValidationError as e: amend_chrono(ref_chrono) return e.errors, 400
def delete_intervention(id_intervention): """ supprime une demande d'intervention identifiée par id_intervention """ demande = _db.session.query(Demande).get(id_intervention) _db.session.delete(demande) _db.session.commit() dem_loc = _db.session.query(Thesaurus).get(demande.dem_localisation).label dem_objet = _db.session.query(Thesaurus).get(demande.dem_objet).label send_mail(['tizoutis-interventions', 'admin-tizoutis'], "Annulation de la demande d'intervention n°%s - %s %s" % (demande.id, dem_objet, dem_loc), ''' La demande d'intervention n°%s a été annulée. Vous pouvez vous connecter sur http://tizoutis.pnc.int/#/interventions/ pour voir la liste des demandes en cours. ''', add_dests=demande.dmdr_contact_email.split(','), sendername='interventions') return {'id': demande.id}
def create_result(sender, instance, created, *args, **kwargs): """ add docs.. """ try: if not instance: return if instance.status in ["STARTED", "REVOKED"]: return if not EMAIL_RECEIVE_HOSTS: raise ValueError("EMAIL_RECEIVE_HOSTS configuration not found") if not EMAIL_SENDER: raise ValueError("EMAIL_HOST_USER configuration not found") EMAIL_RECEIVE_HOSTS_LIST = EMAIL_RECEIVE_HOSTS.split(',') res = json.loads(instance.result) if instance.status == 'SUCCESS': # save a new timeseries record active_amplifiers_count = res["active_amplifiers_count"] scan_name = res["scan_name"] private_amplifiers_count = 0 public_amplifiers_count = 0 for ip, details in res["amplifiers"].items(): if details["private_address"]: private_amplifiers_count += 1 else: public_amplifiers_count += 1 periodic_task = PeriodicTask.objects.get(name=res["scan_name"]) scan_result_obj = ScanTimeSeriesResult( scan_name=scan_name, active_amplifiers_count=active_amplifiers_count, private_amplifiers_count=private_amplifiers_count, public_amplifiers_count=public_amplifiers_count, scan_result=instance, status=instance.status, periodic_task=periodic_task) scan_result_obj.save() for ip, details in res["amplifiers"].items(): amp_obj = Amplifier( address=ip, destination_address=details["destination_address"], total_response_size=details["total_response_size"], amplification_factor=details["amplification_factor"], unsolicited_response=details["unsolicited_response"], private_address=details["private_address"], scan=scan_result_obj) amp_obj.save() for response in details["responses"]: res_obj = Response( response_hex_data=response["response_hex_data"], response_size=response["response_size"], response_ipid=response["response_ipid"], response_ttl=response["response_ttl"], response_sport=response["response_sport"], response_dport=response["response_dport"], amplifier=amp_obj) res_obj.save() # send email to administrator if active_amplifiers_count < 1: return table = PrettyTable() table.field_names = [ "Amplifier", "Response Size", "Amplification Factor", "Unsolicited Response", "Address Type" ] for ip, details in res["amplifiers"].items(): table.add_row([ ip, details["total_response_size"], details["amplification_factor"], details["unsolicited_response"], details["private_address"] ]) table.sortby = "Amplification Factor" # sort in descending order table.reversesort = True subject = "%d amplifiers found for scan '%s'" % ( active_amplifiers_count, scan_name) html_content = table.get_html_string() send_mail(subject, EMAIL_SENDER, EMAIL_RECEIVE_HOSTS_LIST, html_content=html_content) elif instance.status == 'FAILURE': scan_name = instance.task_kwargs['scan_name'] periodic_task = PeriodicTask.objects.get(name=scan_name) scan_result_obj = ScanTimeSeriesResult(scan_name=scan_name, active_amplifiers_count=0, scan_result=instance, status=instance.status, periodic_task=periodic_task) scan_result_obj.save() subject = "Scan '%s' has failed " % scan_name content = "Exception Type: %s\n" % res["exc_type"] content += "Exception Message: %s\n" % res["exc_message"] content += "Exception Module: %s\n" % res["exc_module"] content += instance.traceback send_mail(subject, EMAIL_SENDER, EMAIL_RECEIVE_HOSTS_LIST, txt_content=content) except Exception as err: # log exception logger.error("%s" % err)
def user_order_done(request): cart = request.session['cart'] display_order_items = [] total_price = 0 # メールの本文に表示する、注文商品情報をまとめる for item in cart: product_id = item['product_id'] qty = int(item['qty']) product = get_object_or_404(Product, id=product_id) # 各商品の小計 subtotal_price = product.price * qty item_dict = { 'product_name': product.name, 'price': product.price, 'qty': qty, 'subtotal_price': subtotal_price, } display_order_items.append(item_dict) # 合計金額(税抜き) total_price += subtotal_price # 合計金額(税込み) calc_total_price = calc_price_tax(total_price) # メールの本文に表示する注文者情報 prefecture = Prefecture.objects.get(id=request.POST['prefecture']) name = request.POST['name'] name_kana = request.POST['name_kana'] email_address = request.POST['email_address'] phone_number = request.POST['phone_number'] postal_code = request.POST['postal_code'] address = prefecture.prefecture_name + request.POST[ 'municipality'] + request.POST['address'] context = { 'name': name, 'phone_number': phone_number, 'postal_code': postal_code, 'address': address, 'display_order_items': display_order_items, 'total_price': total_price, # 税抜き合計 'calc_total_price': calc_total_price, # 税込み合計 } to_list = [email_address] send_mail_result = send_mail( request, '【d_shopping】ご注文ありがとうございます。', 'email_txt/user_order_done_email.txt', context, to_list, ) sales = Sales.objects.create(name=name, name_kana=name_kana, email_address=email_address, phone_number=phone_number, postal_code=postal_code, prefecture=prefecture, municipality=request.POST['municipality'], address=request.POST['address'], member_code=0) for item in cart: product_id = item['product_id'] qty = int(item['qty']) product = get_object_or_404(Product, id=product_id) sales_details = SalesDetails.objects.create(sales=sales, product_id=product.pk, price=product.price, quantity=qty) # セッションのカート情報をクリア del request.session['cart'] return render(request, 'user/user_order_done.html', context={ 'name': name, 'email_address': email_address, })