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))
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
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))
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)
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
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)
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))
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))