Exemplo n.º 1
0
def manual_assign(request, position_id, cid):
    position = get_object_or_404(EventPosition, id=position_id)
    controller = get_object_or_404(User, cid=cid)

    if position.user != controller:
        if position.user is not None:
            send_mail(
                'Event Position Unassigned',
                render_to_string('emails/position_unassigned.html',
                                 {'position': position}),
                os.getenv('NO_REPLY'),
                [position.user.email],
            )

        position.user = controller
        position.save()

        send_mail(
            'Event Position Assigned!',
            render_to_string('emails/position_assigned.html',
                             {'position': position}),
            os.getenv('NO_REPLY'),
            [controller.email],
        )

        return HttpResponse(status=200)
    return HttpResponse('Position is already assigned to selected user.',
                        status=403)
Exemplo n.º 2
0
def submit_visiting_request(request):
    if request.method == 'POST':
        if User.objects.filter(cid=request.POST.get('cid')).exclude(
                status=2).exists():
            return HttpResponse('You are already a controller at Houston!',
                                status=403)
        else:
            visiting_request = Visit(
                cid=int(request.POST.get('cid')),
                rating=request.POST.get('rating'),
                home_facility=request.POST.get('home_facility'),
                first_name=request.POST.get('first_name'),
                last_name=request.POST.get('last_name'),
                email=request.POST.get('email'),
                reason=request.POST.get('reason'),
                submitted=timezone.now(),
            )
            visiting_request.save()

            send_mail(
                'We have received your visiting request!',
                render_to_string('emails/visiting_request_received.html',
                                 {'name': visiting_request.first_name}),
                os.getenv('NO_REPLY'),
                [visiting_request.email],
            )

            return redirect(reverse('home'))

    return render(request, 'visit.html', {'page_title': 'Visit Houston'})
Exemplo n.º 3
0
def accept_training_request(request, request_id):
    training_request = TrainingRequest.objects.get(id=request_id)
    training_session = TrainingSession(
        student=training_request.student,
        instructor=request.user_obj,
        start=pytz.utc.localize(
            datetime.strptime(request.POST.get('start'),
                              '%Y-%m-%dT%H:%M:%S.%f')),
        end=pytz.utc.localize(
            datetime.strptime(request.POST.get('end'),
                              '%Y-%m-%dT%H:%M:%S.%f')),
        type=training_request.type,
        level=training_request.level,
    )
    training_session.save()

    send_mail(
        'Training Scheduled!',
        render_to_string('emails/request_accepted.html',
                         {'session': training_session}),
        os.getenv('NO_REPLY'),
        [training_session.student.email, training_session.instructor.email],
    )

    ActionLog(
        action=
        f'{request.user_obj} accepted {training_request.student.full_name}\'s training request.'
    ).save()
    training_request.delete()

    return redirect(reverse('training_requests'))
Exemplo n.º 4
0
def assign_position(request, request_id):
    position_request = get_object_or_404(EventPositionRequest, id=request_id)
    if position_request.position.user != position_request.user:
        if position_request.position.user is not None:
            send_mail(
                'Event Position Unassigned',
                render_to_string('emails/position_unassigned.html',
                                 {'position': position_request.position}),
                os.getenv('NO_REPLY'),
                [position_request.position.user.email],
            )
        position_request.assign()

        send_mail(
            'Event Position Assigned!',
            render_to_string('emails/position_assigned.html',
                             {'position': position_request.position}),
            os.getenv('NO_REPLY'),
            [position_request.user.email],
        )

        position_request.user.event_requests.filter(
            position__event=position_request.position.event).delete()

        return HttpResponse(status=200)
    return HttpResponse('Position is already assigned to selected user.',
                        status=403)
Exemplo n.º 5
0
def unassign_position(request, position_id):
    position = EventPosition.objects.get(id=position_id)

    send_mail(
        'Event Position Unassigned',
        render_to_string('emails/position_unassigned.html', {'position': position}),
        os.getenv('NO_REPLY'),
        [position.user.email],
    )

    position.user = None
    position.save()

    return HttpResponse(status=200)
Exemplo n.º 6
0
def warn_inactive_users():
    for aggregate in return_inactive_users():
        context = {
            'user':
            aggregate['user_obj'],
            'hours':
            round(aggregate['hours']['current'].total_seconds() / 3600, 1),
        }
        send_mail(
            'Controller Activity Warning',
            render_to_string('emails/activity_warning.html', context),
            os.getenv('NO_REPLY'),
            [aggregate['user_obj'].email],
            fail_silently=True,
        )
Exemplo n.º 7
0
def reject_training_request(request, request_id):
    training_request = TrainingRequest.objects.get(id=request_id)

    send_mail(
        'Training Request Rejected',
        render_to_string('emails/request_rejected.html',
                         {'request': training_request}),
        os.getenv('NO_REPLY'),
        [training_request.student.email],
    )
    ActionLog(
        action=
        f'{request.user_obj} rejected {training_request.student.full_name}\'s training request.'
    ).save()

    training_request.delete()

    return redirect(reverse('training_requests'))
Exemplo n.º 8
0
def approve_feedback(request, feedback_id):
    feedback = Feedback.objects.get(id=feedback_id)
    feedback.approved = True
    feedback.save()

    ActionLog(
        action=
        f'Feedback for {feedback.controller.full_name} was accepted by {request.user_obj}.'
    ).save()

    send_mail(
        'Thank you for your feedback!',
        render_to_string('emails/feedback_approved.html',
                         {'feedback': feedback}),
        os.getenv('NO_REPLY'),
        [feedback.pilot_email],
    )

    return HttpResponse(status=200)
Exemplo n.º 9
0
def remove_users(request):
    for id in request.POST.keys():
        if id != 'csrfmiddlewaretoken':
            user = User.objects.get(id=id)
            if user.main_role == 'HC':
                requests.delete(f'https://api.vatusa.net/v2/facility/{os.getenv("ARTCC_ICAO")}/roster/{user.cid}')
            user.status = 2
            user.save()
            send_mail(
                'Roster Removal Notification',
                render_to_string('emails/roster_removal.html', {'user': user}),
                os.getenv('NO_REPLY'),
                [user.email],
                fail_silently=True,
            )

            ActionLog(action=f'User {user.full_name} removed from the ARTCC {request.user_obj}.').save()

    return HttpResponse(status=200)
Exemplo n.º 10
0
def assign_position(request, request_id):
    position_request = EventPositionRequest.objects.get(id=request_id)
    if position_request.position.user != position_request.user:
        if position_request.position.user is not None:
            send_mail(
                'Event Position Unassigned',
                render_to_string('emails/position_unassigned.html', {'position': position_request.position}),
                os.getenv('NO_REPLY'),
                [position_request.position.user.email],
            )
        position_request.assign()

        send_mail(
            'Event Position Assigned!',
            render_to_string('emails/position_assigned.html', {'position': position_request.position}),
            os.getenv('NO_REPLY'),
            [position_request.user.email],
        )

        return HttpResponse(status=200)
Exemplo n.º 11
0
def add_feedback(request):
    if request.method == 'POST' and request.session.get('vatsim_data'):
        feedback = Feedback(
            controller=User.objects.get(cid=request.POST.get('controller')),
            controller_callsign=request.POST.get('controller_callsign'),
            rating=int(request.POST.get('rating')),
            pilot_name=request.POST.get('pilot_name', None),
            pilot_email=request.POST.get('pilot_email', None),
            event=Event.objects.get(id=request.POST.get('event'))
            if request.POST.get('event') != '' else None,
            flight_callsign=request.POST.get('flight_callsign', None),
            comments=request.POST.get('comments'),
        )
        feedback.save()

        send_mail(
            'We have received your feedback.',
            render_to_string('emails/feedback_received.html',
                             {'feedback': feedback}),
            os.getenv('NO_REPLY'),
            [feedback.pilot_email],
        )

        return redirect(reverse('feedback'))
    else:
        if request.session.get('vatsim_data'):
            return render(
                request, 'add_feedback.html', {
                    'page_title':
                    'Submit Feedback',
                    'controllers':
                    User.objects.exclude(status=2).order_by('first_name'),
                    'events':
                    Event.objects.filter(
                        start__gte=timezone.now() - timedelta(days=30)).filter(
                            start__lte=timezone.now()).filter(hidden=False),
                })
        else:
            res = redirect('login')
            res.set_cookie('redirect-from', '/feedback/')
            return res
Exemplo n.º 12
0
def reject_visiting_request(request, visit_id):
    visiting_request = Visit.objects.get(id=visit_id)

    ActionLog(
        action=
        f'{visiting_request}\'s visiting request was rejected by {request.user_obj}.'
    ).save()

    context = {
        'name': visiting_request.first_name,
        'reason': request.POST.get('reason')
    }
    send_mail(
        'Your Houston ARTCC Visiting Request...',
        render_to_string('emails/visiting_request_rejected.html', context),
        os.getenv('NO_REPLY'),
        [visiting_request.email],
    )

    visiting_request.delete()
    return redirect(reverse('visit_requests'))
Exemplo n.º 13
0
def reject_feedback(request, feedback_id):
    feedback = Feedback.objects.get(id=feedback_id)

    ActionLog(
        action=
        f'Feedback for {feedback.controller.full_name} was rejected by {request.user_obj}.'
    ).save()

    context = {
        'feedback': feedback,
        'reason': request.POST.get('reason'),
    }
    send_mail(
        'An update on your feedback...',
        render_to_string('emails/feedback_rejected.html', context),
        os.getenv('NO_REPLY'),
        [feedback.pilot_email],
    )

    feedback.delete()
    return redirect(reverse('feedback_approval'))
Exemplo n.º 14
0
def request_training(request):
    if request.method == 'POST':
        start = pytz.utc.localize(
            datetime.fromisoformat(request.POST.get('start')))
        end = pytz.utc.localize(datetime.fromisoformat(
            request.POST.get('end')))
        if start < end:
            training_request = TrainingRequest(
                student=request.user_obj,
                start=pytz.utc.localize(
                    datetime.fromisoformat(request.POST.get('start'))),
                end=pytz.utc.localize(
                    datetime.fromisoformat(request.POST.get('end'))),
                type=request.POST.get('type'),
                level=request.POST.get('level'),
                remarks=request.POST.get('remarks', None))
            training_request.save()

            send_mail(
                'Training Request Received',
                render_to_string('emails/request_received.html',
                                 {'request': training_request}),
                os.getenv('NO_REPLY'),
                [training_request.student.email],
            )
        else:
            return HttpResponse('The start time must be before the end time.',
                                status=400)

        return redirect(reverse('training'))
    else:
        return render(
            request, 'request_training.html', {
                'page_title': 'Request Training',
                'events': Event.objects.all().filter(hidden=False),
                'sessions': TrainingSession.objects.all(),
                'types': TrainingRequest._meta.get_field('type').choices,
                'levels': TrainingRequest._meta.get_field('level').choices,
            })
Exemplo n.º 15
0
def accept_visiting_request(request, visit_id):
    visiting_request = Visit.objects.get(id=visit_id)

    # If user is visiting the ARTCC after being marked inactive
    if User.objects.filter(cid=visiting_request.cid).exists():
        edit_user = User.objects.get(cid=visiting_request.cid)
        if edit_user.status == 2:
            edit_user.status = 0
            edit_user.email = visiting_request.email,
            edit_user.oper_init = assign_oper_init(
                visiting_request.first_name[0],
                visiting_request.first_name[0]),
            edit_user.rating = visiting_request.rating,
            edit_user.main_role = 'VC'
            edit_user.assign_initial_cert()
            edit_user.save()
        else:
            return HttpResponse('Visitor is already on the roster.',
                                status=400)
    else:
        visiting_request.add_to_roster()

    ActionLog(
        action=
        f'{visiting_request}\'s visiting request was accepted by {request.user_obj}.'
    ).save()

    send_mail(
        'Welcome to the Houston ARTCC!',
        render_to_string('emails/visiting_request_accepted.html',
                         {'name': visiting_request.first_name}),
        os.getenv('NO_REPLY'),
        [visiting_request.email],
    )

    visiting_request.delete()
    return HttpResponse(status=200)
Exemplo n.º 16
0
def request_training(request):
    if request.method == 'POST':
        start = pytz.utc.localize(
            datetime.fromisoformat(request.POST.get('start')))
        end = pytz.utc.localize(datetime.fromisoformat(
            request.POST.get('end')))
        if start < end:
            training_request = TrainingRequest(
                student=request.user_obj,
                start=pytz.utc.localize(
                    datetime.fromisoformat(request.POST.get('start'))),
                end=pytz.utc.localize(
                    datetime.fromisoformat(request.POST.get('end'))),
                type=int(request.POST.get('type')),
                level=int(request.POST.get('level')),
                remarks=request.POST.get('remarks', None))
            training_request.save()

            send_mail(
                'Training Request Received',
                render_to_string('emails/request_received.html',
                                 {'request': training_request}),
                os.getenv('NO_REPLY'),
                [training_request.student.email],
            )

            format = '%b %d, %Y @ %H%Mz'
            webhook = DiscordWebhook(url=os.getenv('TRAINING_WEBHOOK_URL'))
            embed = DiscordEmbed(
                title=':pencil:  New Training Request!',
                description=
                'See all requests at https://www.zhuartcc.org/training/requests.',
                color=2966946)
            embed.add_embed_field(
                name='User',
                value=f'[{request.user_obj.cid}] {request.user_obj.full_name}',
                inline=False,
            )
            embed.add_embed_field(
                name='Availability',
                value=
                f'{training_request.start.strftime(format)} - {training_request.end.strftime(format)}',
                inline=False,
            )
            embed.add_embed_field(name='Level',
                                  value=training_request.get_level_display())
            embed.add_embed_field(name='Type',
                                  value=training_request.get_type_display())
            embed.add_embed_field(
                name='Remarks',
                value=training_request.remarks
                if training_request.remarks != '' else 'No Remarks Provided',
                inline=False,
            )
            webhook.add_embed(embed)
            webhook.execute()
        else:
            return HttpResponse('The start time must be before the end time.',
                                status=400)

        return redirect(reverse('training'))
    else:
        return render(
            request, 'request_training.html', {
                'page_title': 'Request Training',
                'events': Event.objects.all().filter(hidden=False),
                'sessions': TrainingSession.objects.all(),
                'training_requests': request.user_obj.training_requests.all(),
                'types': TrainingRequest._meta.get_field('type').choices,
                'levels': TrainingRequest._meta.get_field('level').choices,
            })