Example #1
0
def viewallquests(request):
    """Shows all the active quests so far"""
    pagetype = "loggedin"
    user = request.user
    userdetails = user_handler.getQuestrDetails(user.id)
    pagetitle = "Active Quests"
    if userdetails.is_shipper:
        return redirect('home')
    else:
        quests = Quests.objects.filter(
            ishidden=False,
            isaccepted=False,
            questrs_id=userdetails.id,
        ).order_by('-creation_date')
    return render(request, 'allquestsviews.html', locals())
Example #2
0
def viewDeliveries(request):
    """Shows all the active quests so far"""
    pagetype = "loggedin"
    user = request.user
    # userdetails = user_handler.getQuestrDetails(user.id)
    pagetitle = "Deliveries"
    userdetails = user_handler.getQuestrDetails(user.id)
    if userdetails.is_shipper:
        alert_message = request.session.get('alert_message')
        if request.session.has_key('alert_message'):
            del request.session['alert_message']
        activequests = Quests.objects.filter(
            ishidden=False,
            isaccepted=True,
            shipper=userdetails.id,
            is_complete=False).order_by('-creation_date')[:10]
        pastquests = Quests.objects.filter(
            ishidden=False,
            is_complete=True,
            isaccepted=True,
            shipper=userdetails.id).order_by('-creation_date')[:10]

        return render(request, 'deliveries.html', locals())
    elif userdetails.is_superuser:
        alert_message = request.session.get('alert_message')
        if request.session.has_key('alert_message'):
            del request.session['alert_message']
        allquests = Quests.objects.filter(
            ishidden=False, isaccepted=True,
            shipper=0).order_by('-creation_date')[:10]
        return render(request, 'deliveries.html', locals())
    else:
        alert_message = request.session.get('alert_message')
        if request.session.has_key('alert_message'):
            del request.session['alert_message']
        activequests = Quests.objects.filter(
            ishidden=False,
            isaccepted=True,
            is_complete=False,
            questrs_id=userdetails.id).order_by('-creation_date')[:10]
        pastquests = Quests.objects.filter(
            ishidden=False, is_complete=True,
            questrs_id=userdetails.id).order_by('-creation_date')[:10]
        return render(request, 'deliveries.html', locals())
    return render(request, 'deliveries.html', locals())
Example #3
0
def activate_shipper(courier_id):
    """Activates Shipper, this should only be used after a shipper doesn't ack a request"""
    courier = user_handler.getQuestrDetails(int(courier_id))
    user_handler.updateCourierAvailability(courier, True)
    logger.warn("Courier availability set to True")
Example #4
0
def accept_quest(request, quest_code):
    """
    Verifies email of the user and redirect to the home page
    """
    user = request.user
    logger.debug(quest_code)
    if quest_code:
        try:
            transcational = QuestTransactional.objects.get(
                quest_code__regex=r'^%s' % quest_code)
            opptransaction = QuestTransactional.objects.get(quest_id=transcational.quest_id, \
                shipper_id=transcational.shipper_id, transaction_type=0, status=False)
            logger.debug("quest transactional")
            logger.debug(transcational)
            if transcational:
                logger.debug("transactional status")
                logger.debug(transcational.status)
                if not transcational.status:
                    try:
                        quest = Quests.objects.get(
                            id=int(transcational.quest_id))
                        questr = user_handler.getQuestrDetails(
                            quest.questrs_id)
                        courier = QuestrUserProfile.objects.get(
                            id=int(transcational.shipper_id))
                        logger.debug(
                            "%s is the requesting user, where %s is the courier for %s quest"
                            % (request.user, courier, quest))
                        if quest and courier and request.user == courier:
                            # Set status to true so it won't be used again
                            transcational.status = True
                            # Set rejection status to true so it won't be used again
                            opptransaction.status = True
                            # Set Courier status to available so he can accept multiple quests if he wants to.
                            courier.is_available = True  # change this to False if you want to keep a courier as occupied
                            # Set quest's courier to respective courier
                            quest.shipper = courier.id
                            # Set quest as accepted
                            quest.isaccepted = True
                            quest.status = "Accepted"
                            ##Save all the details
                            transcational.save()
                            courier.save()
                            opptransaction.save()
                            quest.save()
                            from libs.twilio_handler import twclient
                            tw = twclient()
                            alert_message = tw.load_acceptquest_notif(quest)
                            logger.warn(alert_message)
                            tw.sendmessage(courier.phone, alert_message)
                            tw.sendmessage(
                                questr.phone,
                                os.environ['SMS_COURIERACCEPTANCE_MSG'])
                            # After 30 minutes send the guy a message asking if the quest is complete
                            send_complete_quest_link.apply_async(
                                (courier.id, quest.id), countdown=1800)
                            couriermanager = user_handler.CourierManager()
                            couriermanager.informCourierAfterAcceptance(
                                courier, quest)
                            couriermanager.informQuestrAfterAcceptance(
                                courier, questr, quest)
                            eventmanager = quest_handler.QuestEventManager()
                            extrainfo = dict(
                                designated_courier=courier.id,
                                detail="quest accepted by courier")
                            eventmanager.setevent(quest, 4, extrainfo)
                            request.session['alert_message'] = dict(
                                type="success",
                                message=
                                "Congratulations! You have accepted the quest!"
                            )
                            # Setting status of all considered couriers to True
                            considered_couriers = json.loads(
                                quest.considered_couriers.strip(','))
                            for courier in considered_couriers:
                                courier = user_handler.getQuestrDetails(
                                    courier)
                                courier.is_available = True
                                courier.save()
                            return render(request, 'questaccepted.html',
                                          locals())
                            # return redirect('home')
                    except QuestrUserProfile.DoesNotExist:
                        logger.debug('User does not exist')
                        return redirect('home')
                else:
                    request.session['alert_message'] = dict(
                        type="warning",
                        message=
                        "The link has expired, perhaps you were too late to respond."
                    )
                    return render(request, 'questtimeout.html', locals())
        except QuestTransactional.DoesNotExist:
            return redirect('home')
    return redirect('home')