Пример #1
0
def main():
    time_now = datetime.datetime.now()
    end_time = time_now - datetime.timedelta(minutes=30)
    start_time = time_now - datetime.timedelta(minutes=45)

    # Orders that are only in cart state or buy later and not booked by an agent (if booked by agent a response already exists)
    orders = Order.objects.filter(modified_on__range=(start_time, end_time),
                                  state__in=('cart', 'guest_cart',
                                             'temporary_cart',
                                             'unassigned_cart'),
                                  booking_agent__isnull=True,
                                  confirming_agent__isnull=True,
                                  agent__isnull=True,
                                  total__gt=0)

    for order in orders:
        try:
            phones = Phone.objects.filter(user=order.user)[:1]
            if phones:
                phone = phones[0]

                campaign = None
                response = None
                ''' Select campaign as per client '''
                if (order.client.id == 5):
                    ''' FB Abandon Cart Campaign id is 23 '''
                    campaign = Campaign.objects.get(id=23)

                elif (order.client.id == 1):
                    ''' Chaupaati Abandoned Carts campaign id is 30 '''
                    campaign = Campaign.objects.get(id=30)

                elif (order.client.id == 6):
                    ''' Holii Abandoned Carts Campaign id is 31 '''
                    campaign = Campaign.objects.get(id=31)

                if campaign:
                    response = get_or_create_response(campaign=campaign,
                                                      phone=phone,
                                                      type='outbound',
                                                      medium=order.medium)
                    if response:
                        response.orders.add(order)
                        response.save()
                    else:
                        log.info(
                            "===ABANDONED CART===  Cannot create response: %s"
                            % phone)
                        # TODO Send an email

            else:
                log.info(
                    "===ABANDONED CART===  Cannot create response: No phone attched to user"
                )
                # TODO Send an email

        except Exception, e:
            log.info("===ABANDONED CART=== %s" % repr(e))
Пример #2
0
def on_pending_order_created(sender, **kwargs):
    call = kwargs.get('call', None)
    order = kwargs.get('order', None)
    user = kwargs.get('user', None)
    try:
        agent = Agent.objects.get(user=user)
    except Agent.DoesNotExist:
        log.info('RMS: Skipping po signal, no agent found for %s' % user.id)
        return

    if not call or ('.' not in call['id']) or not order:
        log.info(
            'RMS: Skipping po signal, missing call/order call: %s, order: %s' %
            (call, order))
        return

    response_id = call.get('response_id', None)
    if not response_id:
        response = get_or_create_response(dni=call['dni'],
                                          phone_number=call['cli'])
        if not response:
            log.info(
                'RMS: Cannot create response - dni: %s, phone: %s. Skipping po signal'
                % (call['dni'], call['cli']))
            return
        else:
            response_id = response.id
    else:
        try:
            response = Response.objects.select_related('orders').get(
                pk=int(response_id))
        except Response.DoesNotExist:
            log.info('RMS: No such response %s. Skipping po signal' %
                     response_id)
            return

    if order not in response.orders.all():
        response.orders.add(order)
        try:
            funnel_state = response.campaign.funnel.funnel_states.get(
                name='Pending Order')
            funnel_sub_state = response.campaign.campaign_sub_states.get(
                name='Awaiting Payment', funnel_state=funnel_state)
            move_response(response=response,
                          state=funnel_state,
                          substate=funnel_sub_state,
                          agent=agent,
                          callid=call['id'])
        except FunnelSubState.DoesNotExist:
            log.info('RMS: No funnel sub state. Skipping po signal')
            return
        except FunnelState.DoesNotExist:
            log.info('RMS: No funnel state. Skipping po signal')
            return
Пример #3
0
def main():
    time_now = datetime.datetime.now()
    end_time = time_now - datetime.timedelta(minutes=30)
    start_time = time_now -  datetime.timedelta(minutes=45)

    # Orders that are only in cart state or buy later and not booked by an agent (if booked by agent a response already exists)
    orders = Order.objects.filter(
            modified_on__range = (start_time,
            end_time),state__in=(
            'cart','guest_cart','temporary_cart','unassigned_cart'),
            booking_agent__isnull=True,
            confirming_agent__isnull=True,
            agent__isnull=True, total__gt=0)

    for order in orders:
        try:
            phones = Phone.objects.filter(
                user = order.user)[:1]
            if phones:
                phone = phones[0]

                campaign = None
                response = None
                ''' Select campaign as per client '''
                if(order.client.id==5):
                    ''' FB Abandon Cart Campaign id is 23 '''
                    campaign = Campaign.objects.get(id=23)
                
                elif(order.client.id==1):
                    ''' Chaupaati Abandoned Carts campaign id is 30 '''
                    campaign = Campaign.objects.get(id=30)
                
                elif(order.client.id==6):
                    ''' Holii Abandoned Carts Campaign id is 31 '''
                    campaign = Campaign.objects.get(id=31)
                
                if campaign:
                    response = get_or_create_response(campaign=campaign, phone=phone, type='outbound', medium=order.medium)
                    if response:
                        response.orders.add(order)
                        response.save()
                    else:
                        log.info("===ABANDONED CART===  Cannot create response: %s" % phone)
                        # TODO Send an email

            else:
                log.info("===ABANDONED CART===  Cannot create response: No phone attched to user")
                # TODO Send an email

        except Exception, e:
            log.info("===ABANDONED CART=== %s" % repr(e))
Пример #4
0
def main():
    time_now = datetime.datetime.now()
    end_time = time_now - datetime.timedelta(minutes=15)
    start_time = time_now - datetime.timedelta(minutes=30)

    # Orders that are only in cart state or buy later and not booked by an agent (if booked by agent a response already exists)
    cod_verifications = CodOrderVerification.objects.select_related(
        'order').filter(created_on__range=(start_time, end_time),
                        is_verified=False)

    for x in cod_verifications:
        order = x.order
        if order.support_state == 'booked':  # still its a pending order
            try:
                phones = Phone.objects.filter(phone=x.mobile_no)
                if phones:  # Phone number entered by user for COD verification
                    phone = phones[0]

                campaign = None
                response = None
                ''' FB COD verification Campaign id is xx '''
                campaign = Campaign.objects.get(id=38)

                if campaign and phone:
                    response = get_or_create_response(campaign=campaign,
                                                      phone=phone,
                                                      type='outbound',
                                                      medium=order.medium)
                    if response:
                        response.orders.add(order)
                        response.save()
                        # add interaction for detail information
                        notes = "order id: %s." % (order.reference_order_id)
                        if order.user != phone.user:
                            notes = notes + " Call using eyebeam directly. Response phone number does not belong to the user placing this order."
                        interaction = Interaction(response=response,
                                                  communication_mode='call',
                                                  notes=notes)
                        interaction.save()
                    else:
                        log.info(
                            "===COD Verification===  Cannot create response: %s"
                            % phone)
            except Exception as e:
                log.info("===COD verification=== %s" % e)
Пример #5
0
def on_pending_order_created(sender, **kwargs):
    call = kwargs.get('call', None)
    order = kwargs.get('order', None)
    user = kwargs.get('user', None)
    try:
        agent = Agent.objects.get(user=user)
    except Agent.DoesNotExist:
        log.info('RMS: Skipping po signal, no agent found for %s' % user.id)
        return

    if not call or ('.' not in call['id']) or not order:
        log.info('RMS: Skipping po signal, missing call/order call: %s, order: %s' %(call, order))
        return
    
    response_id = call.get('response_id', None)
    if not response_id:
        response = get_or_create_response(dni=call['dni'], phone_number=call['cli'])
        if not response:
            log.info('RMS: Cannot create response - dni: %s, phone: %s. Skipping po signal' % (call['dni'],call['cli']))
            return
        else:
            response_id = response.id
    else:
        try:
            response = Response.objects.select_related('orders').get(pk=int(response_id))
        except Response.DoesNotExist:
            log.info('RMS: No such response %s. Skipping po signal' % response_id)
            return
    
    if order not in response.orders.all():
        response.orders.add(order)
        try:
            funnel_state = response.campaign.funnel.funnel_states.get(name='Pending Order')
            funnel_sub_state = response.campaign.campaign_sub_states.get(name='Awaiting Payment', funnel_state=funnel_state)
            move_response(response=response, state=funnel_state, substate=funnel_sub_state, agent=agent, callid=call['id'])
        except FunnelSubState.DoesNotExist:
            log.info('RMS: No funnel sub state. Skipping po signal')
            return
        except FunnelState.DoesNotExist:
            log.info('RMS: No funnel state. Skipping po signal')
            return
Пример #6
0
def main():
    time_now = datetime.datetime.now()
    end_time = time_now - datetime.timedelta(minutes=15)
    start_time = time_now -  datetime.timedelta(minutes=30)

    # Orders that are only in cart state or buy later and not booked by an agent (if booked by agent a response already exists)
    cod_verifications = CodOrderVerification.objects.select_related('order').filter(
            created_on__range = (start_time,
            end_time),is_verified=False)

    for x in cod_verifications:
        order = x.order
        if order.support_state == 'booked':     # still its a pending order
            try:
                phones = Phone.objects.filter(phone=x.mobile_no)
                if phones:      # Phone number entered by user for COD verification
                    phone = phones[0]
                    
                campaign = None
                response = None
                ''' FB COD verification Campaign id is xx '''
                campaign = Campaign.objects.get(id=38)

                if campaign and phone:
                    response = get_or_create_response(campaign=campaign, phone=phone, type='outbound', medium=order.medium)
                    if response:
                        response.orders.add(order)
                        response.save()
                        # add interaction for detail information
                        notes = "order id: %s." %(order.reference_order_id)
                        if order.user != phone.user:
                            notes = notes + " Call using eyebeam directly. Response phone number does not belong to the user placing this order."
                        interaction = Interaction(response = response, communication_mode = 'call', notes = notes)
                        interaction.save()
                    else:
                        log.info("===COD Verification===  Cannot create response: %s" % phone)
            except Exception as e:
                log.info("===COD verification=== %s" %e)
Пример #7
0
def main():
    time_now = datetime.datetime.now()
    end_time = time_now - datetime.timedelta(minutes=15)
    start_time = time_now - datetime.timedelta(minutes=30)

    """ Payment Attempts that are in pending """
    pa = (
        PaymentAttempt.objects.select_related("order,order__user,order__user__user")
        .filter(
            status__in=("pending realization", "rejected"),
            created_on__range=(start_time, end_time),
            order__support_state="booked",
            order__booking_agent__isnull=True,
            order__confirming_agent__isnull=True,
            order__agent__isnull=True,
        )
        .exclude(payment_mode__in=utils.DEFERRED_PAYMENT_MODES)
    )
    for attempt in pa:
        try:
            """ Getting the 1st phone number if exists """
            phones = Phone.objects.filter(user=attempt.order.user_id)[:1]
            if phones:
                phone = phones[0]

                campaign = None
                response = None

                """ Select campaign as per client """
                if attempt.order.client.id == 5:
                    """ Abandon Payment Campaign id is 22 """
                    campaign = Campaign.objects.get(id=22)

                elif attempt.order.client.id == 6:
                    """ Holii Abandoned Payment campaign id is 29 """
                    campaign = Campaign.objects.get(id=29)

                elif attempt.order.client.id == 1:
                    """ Chaupaati Abandoned Payment campaign id is 28 """
                    campaign = Campaign.objects.get(id=28)

                if campaign and phone:
                    response = get_or_create_response(
                        campaign=campaign, phone=phone, type="outbound", medium=attempt.order.medium
                    )
                    if response:
                        response.orders.add(attempt.order)
                        response.save()
                        notes = "order id: %s Order Amount: %s Login: %s Payment_mode: %s" % (
                            attempt.order.reference_order_id,
                            attempt.order.total,
                            attempt.order.user.user.username,
                            attempt.payment_mode,
                        )
                        interaction = Interaction(response=response, communication_mode="call", notes=notes)
                        interaction.save()
                        # TODO add interaction for providing details to agent
                    else:
                        log.info("===ABANDONED PAYMENT=== Unable to create response : %s " % phone)
                        # TODO Send an email
            else:
                log.info("===ABANDONED PAYMENT=== Unable to create response as no phone attached to user ")
                # TODO Send an email

        except Exception, e:
            log.info("===ABANDONED PAYMENT=== Exception %s" % repr(e))
Пример #8
0
def main():
    time_now = datetime.datetime.now()
    end_time = time_now - datetime.timedelta(minutes=15)
    start_time = time_now - datetime.timedelta(minutes=30)
    ''' Payment Attempts that are in pending '''
    pa = PaymentAttempt.objects.select_related(
        'order,order__user,order__user__user').filter(
            status__in=('pending realization', 'rejected'),
            created_on__range=(start_time, end_time),
            order__support_state='booked',
            order__booking_agent__isnull=True,
            order__confirming_agent__isnull=True,
            order__agent__isnull=True).exclude(
                payment_mode__in=utils.DEFERRED_PAYMENT_MODES)
    for attempt in pa:
        try:
            ''' Getting the 1st phone number if exists '''
            phones = Phone.objects.filter(user=attempt.order.user_id)[:1]
            if phones:
                phone = phones[0]

                campaign = None
                response = None
                ''' Select campaign as per client '''
                if (attempt.order.client.id == 5):
                    ''' Abandon Payment Campaign id is 22 '''
                    campaign = Campaign.objects.get(id=22)

                elif (attempt.order.client.id == 6):
                    ''' Holii Abandoned Payment campaign id is 29 '''
                    campaign = Campaign.objects.get(id=29)

                elif (attempt.order.client.id == 1):
                    ''' Chaupaati Abandoned Payment campaign id is 28 '''
                    campaign = Campaign.objects.get(id=28)

                if campaign and phone:
                    response = get_or_create_response(
                        campaign=campaign,
                        phone=phone,
                        type='outbound',
                        medium=attempt.order.medium)
                    if response:
                        response.orders.add(attempt.order)
                        response.save()
                        notes = "order id: %s Order Amount: %s Login: %s Payment_mode: %s" % (
                            attempt.order.reference_order_id,
                            attempt.order.total,
                            attempt.order.user.user.username,
                            attempt.payment_mode)
                        interaction = Interaction(response=response,
                                                  communication_mode='call',
                                                  notes=notes)
                        interaction.save()
                        # TODO add interaction for providing details to agent
                    else:
                        log.info(
                            "===ABANDONED PAYMENT=== Unable to create response : %s "
                            % phone)
                        # TODO Send an email
            else:
                log.info(
                    "===ABANDONED PAYMENT=== Unable to create response as no phone attached to user "
                )
                # TODO Send an email

        except Exception, e:
            log.info("===ABANDONED PAYMENT=== Exception %s" % repr(e))