Exemple #1
0
 def post(self):
     notificacion_json = request.get_json()
     # print(notificacion_json)
     n = not_schema_template.load(notificacion_json)
     pprint(n)
     # print("loaded")
     try:
         template = NotificacionTemplateModel()
         if "titulo" in n:
             template.titulo=n["titulo"]
         if "mensaje" in n:
             template.mensaje=n["mensaje"]
         if "imagenIcon" in n:
             template.imagenIcon=n["imagenIcon"]
         if "imagenDisplay" in n:
             template.imagenDisplay=n["imagenDisplay"]
         if "ImagenDisplay" in n:
             template.ImagenDisplay=n["ImagenDisplay"]
         if "bar_text" in n:
             template.bar_text=n["bar_text"]
         if "fecha" in n:
             template.fecha=n["fecha"]
         else:
             template.fecha=dt.datetime.now()
         if  "tipo_notificacion" in n: 
             template.tipo_notificacion=n["tipo_notificacion"]
         if "link" in n:
             template.link=n["link"]
         if "filtros" in n:
             template.filtros = n["filtros"]
         else: 
             template.filtros = []
         template.save()
         if "filtros" in n and n["filtros"] != []:
             filtersObids=[]
             for fil in n["filtros"]:
                 filtersObids.append(ObjectId(fil))
             # Enviar a todos los participantes
             for p in ParticipanteModel.objects.raw({"_id": { "$in": filtersObids}}):
                 # part_id = ObjectId(id)
                 notif = NotificacionModel(
                 id_participante=p._id,
                 id_notificacion=template._id,
                 estado=0,
                 # Estado puede servir para actualizar tambien OJO! ahora esta fijo, pero podrías ser variable
                 ).save()            
                 # PYMODM no tiene soporte transaccional, en un futuro migrar a PYMONGO, que sí tiene soporte
         # return {"message": "Notificacion guardada con éxito."}
     except ValidationError as exc:
         print(exc.message)
         return {"message": "No se pudo crear o enviar la notificacion."}, 404
     return {"message": "Notificacion guardada con éxito.",
                 "id_notificacion": str(template._id),
             "Número de destinatarios:": len(template.filtros)}
Exemple #2
0
 def post(self, id):
     part_id = ObjectId(id)
     notificacion_json = request.get_json()
     print(notificacion_json)
     n = not_schema.load(notificacion_json)
     print("loaded")
     try:
         notif = NotificacionModel(
             id_participante=part_id,
             id_notificacion=n["id_notificacion"],
             estado=n["estado"],
         ).save()            
         print("guardado")
     except ValidationError as exc:
         print(exc.message)
         return {"message": "No se pudo crear la notificacion."}, 404
     return {"message": "Notificacion guardada con éxito."}
Exemple #3
0
 def post(self, id, accion):
     if accion == 'ninguna':
         n = NotificacionTemplateModel.find_by_id(id)
         if not n:
             return {"message": "No se encontro la notificación"}, 404
         try:
             filtersObids=[]
             if not "filtros" in n:
                 return {"message": "Error: Sin destinatarios, debe haber al menos un participante a quien enviarle esta acción"}
             for fil in n["filtros"]:
                 filtersObids.append(ObjectId(fil))
             # Enviar a todos los participantes
             for p in ParticipanteModel.objects.raw({"_id": { "$in": filtersObids}}):
                 # part_id = ObjectId(id)
                 notif = NotificacionModel(
                 id_participante=p._id,
                 id_notificacion=n._id,
                 estado=0,
                 # Estado puede servir para actualizar tambien OJO! ahora esta fijo, pero podrías ser variable
                 ).save()            
                 # PYMODM no tiene soporte transaccional, en un futuro migrar a PYMONGO, que sí tiene soporte
         # return {"message": "Notificacion guardada con éxito."}
         except ValidationError as exc:
             print(exc.message)
             return {"message": "No se pudo crear o enviar la notificacion."}, 404
         return {"message": "Notificacion reenviada con éxito.",
                 "Número de destinatarios:": len(filtersObids)}
     elif accion == 'premio':
         n = NotificacionTemplateModel.find_by_id(id)
         pprint(n)
         if not n:
             return {"message": "No se encontro el premio"}, 404
         p = PremioModel.find_by_id(n.link)
         if not p:
             return {"message": "No se encontro el premio"}, 404
         try:
             filtersObids=[]
             if not "filtros" in n:
                 return {"message": "Error: Sin destinatarios, debe haber al menos un participante a quien enviarle esta acción"}
             for fil in n["filtros"]:
                 filtersObids.append(ObjectId(fil))
             # Enviar a todos los participantes
             for par in ParticipanteModel.objects.raw({"_id": { "$in": filtersObids}}):
                 # part_id = ObjectId(id)
                 notif = PremioParticipanteModel(
                 id_participante=par._id,
                 # id_notificacion=n._id,
                 fecha_creacion=dt.datetime.now(),
                 estado=0,
                 # Estado puede servir para actualizar tambien OJO! ahora esta fijo, pero podrías ser variable
                 ).save()        
             filtersObids=[]
             if not "filtros" in n:
                 return {"message": "Error: Sin destinatarios, debe haber al menos un participante a quien enviarle esta acción"}
             for fil in n["filtros"]:
                 filtersObids.append(ObjectId(fil))
             # Enviar a todos los participantes
             for p in ParticipanteModel.objects.raw({"_id": { "$in": filtersObids}}):
                 # part_id = ObjectId(id)
                 notif = NotificacionModel(
                 id_participante=p._id,
                 id_notificacion=n._id,
                 estado=0,
                 # Estado puede servir para actualizar tambien OJO! ahora esta fijo, pero podrías ser variable
             ).save()            
             # PYMODM no tiene soporte transaccional, en un futuro migrar a PYMONGO, que sí tiene soporte
     # return {"message": "Notificacion guardada con éxito."}
         except ValidationError as exc:
             print(exc.message)
             return {"message": "No se pudo crear o enviar la notificacion."}, 404
         return {"message": "Notificacion reenviada con éxito.",
                 "Número de destinatarios:": len(filtersObids)}               
     elif accion == 'encuesta':
         n = NotificacionTemplateModel.find_by_id(id)
         pprint(n)
         if not n:
             return {"message": "No se encontro la notificacion"}, 404
         en = EncuestaModel.find_by_id(n.link)
         if not en:
             return {"message": "No se encontro la encuesta"}, 404
         try:
              filtersObids=[]
             if not "filtros" in n:
                 return {"message": "Error: Sin destinatarios, debe haber al menos un participante a quien enviarle esta acción"}
             for fil in n["filtros"]:
                 filtersObids.append(ObjectId(fil))
             # Enviar a todos los participantes
             for par in ParticipanteModel.objects.raw({"_id": { "$in": filtersObids}}):
                 # part_id = ObjectId(id)
                 notif = PremioParticipanteModel(
                 id_participante=par._id,
                 # id_notificacion=n._id,
                 fecha_creacion=dt.datetime.now(),
                 estado=0,
                 # Estado puede servir para actualizar tambien OJO! ahora esta fijo, pero podrías ser variable
                 ).save()        
             filtersObids=[]
             if not "filtros" in n:
                 return {"message": "Error: Sin destinatarios, debe haber al menos un participante a quien enviarle esta acción"}
             for fil in n["filtros"]:
                 filtersObids.append(ObjectId(fil))
             # Enviar a todos los participantes
             for p in ParticipanteModel.objects.raw({"_id": { "$in": filtersObids}}):
                 # part_id = ObjectId(id)
                 notif = NotificacionModel(
                 id_participante=p._id,
                 id_notificacion=n._id,
                 estado=0,
                 # Estado puede servir para actualizar tambien OJO! ahora esta fijo, pero podrías ser variable
             ).save()         
            
         except:
Exemple #4
0
            oid = ObjectId(id)
            # Enviar a todos los participantes en la lista de flitros
            filtersObids=[]
            if not "filtros" in n:
                return {"message": "Error: Sin destinatarios, debe haber al menos un participante a quien enviarle esta acción"}
            for fil in n["filtros"]:
                filtersObids.append(ObjectId(fil))
            # Enviar a todos los participantes
            if accion == "encuesta":
                en = 
            elif accion == "premio":
            for p in ParticipanteModel.objects.raw({"_id": { "$in": filtersObids}}):
                # part_id = ObjectId(id)
                notif = NotificacionModel(
                id_participante=p._id,
                id_notificacion=oid,
                estado=0,
                # Estado puede servir para actualizar tambien OJO! ahora esta fijo, pero podrías ser variable
                ).save()            
                # PYMODM no tiene soporte transaccional, en un futuro migrar a PYMONGO, que sí tiene soporte
            # return {"message": "Notificacion guardada con éxito."}
        except ValidationError as exc:
            print(exc.message)
            return {"message": "No se pudo crear o enviar la notificacion."}, 404
        return {"message": "Notificacion reenviada con éxito.",
                "Número de destinatarios:": len(filtersObids)}

    # # Marcar como eliminada notificación
    # @classmethod
    # def patch(self, id, accion):
    #     pass
            
Exemple #5
0
 def post(self, id):
     # Get premios
     bir_all = BirthdayModel.objects.all()
     # pprint(bir)
     if not bir_all:
         return {"message": "No se encontró el premio de cumpleaños"}, 404
     # item_json = request.get_json()
     # item = BirthdaySchema().load(item_json)
     # Get notificacion
     # TODO: Obtener la última configuración
     for birthday in bir_all:
         bir = birthday
     notificacion = NotificacionTemplateModel.find_by_id(
         bir.id_notificacion)
     if not notificacion:
         return {"message": "No se encontró la notificacion"}, 404
     # Enviar notificaciones
     # Enviar premio
     notificacion_id_premio = notificacion.link
     current_date = datetime.now()
     print("current_date", current_date)
     current_day = current_date.day
     current_month = current_date.month
     current_year = current_date.year
     maxdays = 0
     count_sends = 0
     premio = None
     for p in ParticipanteModel.objects.all():
         if p.fecha_nacimiento and p.fecha_nacimiento != "null":
             maxdays = bir.trigger
             bmonth = p.fecha_nacimiento.month
             r_maxdate = current_date + relativedelta(days=+maxdays)
             r_mindate = current_date - relativedelta(days=+maxdays)
             r_participante_birthdate = p.fecha_nacimiento.replace(
                 year=current_year)
             r_antiguedad = current_date - p.fecha_antiguedad
             r_antiguedad = r_antiguedad.days
             #  Verificar si no se ha enviado antes el premio al participante
             # print("data id_par:{}, id_premio: {}".format(str(p._id), notificacion_id_premio))
             tienePremio = PremioParticipanteModel.find_by_two_fields(
                 'id_participante', str(p._id), 'id_premio',
                 notificacion_id_premio)
             # Verificar si en ESTE año no ha canjeado el premio, en caso de que no, enviar premio
             canjeado = False
             if tienePremio and tienePremio.fechas_redencion:
                 if len(tienePremio.fechas_redencion) > 0:
                     for fecha in tienePremio.fechas_redencion:
                         if fecha.year == current_date.year:
                             canjeado = True
             #OLD: tieneNotificacion = NotificacionModel.find_by_field('id_notificacion', str(notificacion._id))
             if r_mindate < r_participante_birthdate < r_maxdate and r_antiguedad >= bir.antiguedad:
                 if not canjeado and not tienePremio:
                     # Realizar envío de un nuevo premio
                     if (notificacion.tipo_notificacion == "premio"):
                         premio = PremioParticipanteModel(
                             id_participante=str(p._id),
                             id_premio=notificacion_id_premio,
                             estado=0,
                             fecha_creacion=datetime.now(),
                             id_promocion=bir.id_promocion,
                         ).save()
                         notif = NotificacionModel(
                             id_participante=str(p._id),
                             id_notificacion=str(notificacion._id),
                             estado=0).save()
                         # print("Envio", list(premio), str(premio._id))
                         if premio:
                             count_sends += 1
     return {"Total de envios:": count_sends}, 200
Exemple #6
0
    def delete(self, id):
        ticket = VentaModel.find_by_field('id_ticket_punto_venta', id)
        if not ticket:
            return {"message": "No se encontro el elemento que desea eliminar"}, 404
        # Calcular los sellos involucrados
        sellos = 0
        participante = ParticipanteModel.find_by_id(ticket.id_participante) 
        if not participante: 
            return {"message": "No se encontro el participante asociado a este ticket"}, 404
        # Quitar sellos
        try:
            if participante.sellos >= 0 and ticket.sellos_otorgados:
                # Restablecer los sellos antiguos
                card_id = TarjetaSellosModel.get_tarjeta_sellos_actual()
                if card_id and card_id.num_sellos:
                    if ticket.sellos_otorgados > card_id.num_sellos:
                        #  actual=8, otorgados=12, num_sellos_card = 10, old = 6
                        #  new_actual = 8 - 12 % 10 
                        participante.sellos -= ticket.sellos_otorgados % card_id.num_sellos 
                    if ticket.sellos_otorgados < card_id.num_sellos:
                        #  actual=4, otorgados=8, num_sellos_card = 10, old = 6
                        #  new_actual = 4 + 10 % 8 
                        participante.sellos += card_id.num_sellos % ticket.sellos_otorgados
                    # Si es igual, no hay un cambio en la tarjeta de sellos del participante
                participante.save() 
                sellos = ticket.sellos_otorgados
        except:
            return {"message": "No se pudo quitar los sellos otorgados"}, 504
        # Calcular los puntos involucrados
        puntos = 0
        # Quitar puntos
        try:
            if participante.saldo and ticket.puntos_otorgados:
                participante.saldo -= ticket.puntos_otorgados
                participante.save() 
                puntos = ticket.puntos_otorgados
        except:
            return {"message": "No se pudo quitar los puntos otorgados"}, 504
        # Calcular y quitar los notificaciones/encuestas involucrados (otro movimiento)
        notifs_quemadas = 0
        premios_quemados = 0
        if len(ticket.id_notificacion_obtenidas_list) > 0:
            for notif in ticket.id_notificacion_obtenidas_list:
                if NotificacionModel.delete_notificacion_and_link(notif):
                    notifs_quemadas+=1
        # Calcular y quitar los notificaciones/encuestas involucrados (otro movimiento) ===> # Calcular los quemados de premio vs estado
        # --------> # Calcular los niveles involucrados (solo eliminar premios, no se necesita eliminar el nivel,
        #             ya que este es solo un template )
        if len(ticket.id_premios_obtenidos_list) > 0:
            for id_ in ticket.id_premios_obtenidos_list:
                p = PremioParticipanteModel.find_by_id(id_)
                print("Se encontro premio")
        #   1. Verificar que no se haya usado los premios que se desean eliminar, PERO POR AHORA NO
        #   if p and len(p.fechas_redencion) == 0:
                if p:
                    p.delete()
                    premios_quemados+=1
        #   1. eliminar premios
        # Quitar niveles
        # Eliminar ticket
        try:
            # ticket.estado = "Cancelado-Eliminado"
            # ticket.save()
            ticket.delete()
        except:
            return {"message": "No se pudo eliminar el elemento solicitado"}, 504
        return {"message": "Ticket de venta eliminado satisfactoriamente",
                "Puntos cancelados:": puntos,
                "Sellos cancelados:": sellos,
                "Notificaciones quemadas": notifs_quemadas,
                "Premios eliminados": premios_quemados,
        }, 200

        # NOTE: UN ticket otorga beneficios y al cancelar solo se podrá cancelar dichos beneficios. Pero los premios por ahora los canjeamos
        # por aparte, por lo que a la hora de vender se debe escanear el QR del premio del participante para quemar el premio (añadir la fecha de rendencion)
        # si cuenta con suficientes vidas
Exemple #7
0
    def post(self, id):
        def diff(first, second):
            second = set(second)
            return [item for item in first if item not in second]

        ticket = VentaModel.find_by_field('id_ticket_punto_venta', id)
        if ticket:
            return {"message": "El ticket que desea ingresar ya ha sido registrado antes"}, 400
        req_json = request.get_json()
        req = VentaSchema().load(req_json)
        # print("detalle_save", req_json)
        # print("detalle_save req_json",req)
        try:
            ticket = VentaModel()
            ticket.id_ticket_punto_venta = id
            if "total" in req:
                ticket.total = req["total"]
            if "descuento" in req:
                ticket.descuento = req["descuento"]
            if "fecha" in req:
                ticket.fecha = req["fecha"]
            if "id_participante" in req:
                ticket.id_participante = req["id_participante"]
            if "promociones" in req:
                ticket.promociones = req["promociones"]
            if "detalle_venta" in req:
                ticket.detalle_venta = req["detalle_venta"]
            # ticket.save()
            # print("detalle_save",ticket.detalle_venta)
        except ValidationError as exc:
            print(exc.message)
            return {"message": "No se pudo capturar el ticket."}, 504   
        # Buscar al participante
        p = ParticipanteModel.find_by_id(ticket.id_participante)
        if not p:
            return {'message': f"No participante with id{ str(ticket.id_participante) }"}, 404 
        card_id = TarjetaSellosModel.get_tarjeta_sellos_actual()
        # Transaccion de sellos
        new_notificacion_sello = None
        if card_id.trigger == 'producto' or card_id.trigger == 'cantidad': 
            if card_id.trigger == 'producto':
                bonificacion_sellos = TarjetaSellosModel.calcular_sellos_por_productos(ticket.detalle_venta)
            elif card_id.trigger == 'cantidad':
                bonificacion_sellos = TarjetaSellosModel.calcular_sellos_por_cantidad(ticket, card_id.cantidad_trigger)
            is_historial_sellos_new_element = 0
            notificaciones_enviadas_por_sellos = 0
            encuestas_enviadas_por_sellos = 0
            premios_enviados_por_sellos = 0
            if bonificacion_sellos:
                # Quitar puntos que han caducado
                    # 1. Verificar si ha caducado sus sellos
                current_date = dt.datetime.now()
                if current_date < card_id.fecha_inicio and current_date > card_id.fecha_inicio:
                    # 2. Si sí, quitar sellos
                    p.sellos = 0
                    p.save()
                p.sellos += bonificacion_sellos
                print("participante sellos: ", p.sellos)
                # resetear sellos, liberar premio
                tarjeta_sellos_actual = TarjetaSellosModel.get_tarjeta_sellos_actual()
                if p.sellos >= tarjeta_sellos_actual.num_sellos:
                    # Verificar el número de premios que se obtienen con los sellos obtenidos en la compra efectuada
                    total_sellos_obtenidos = int(p.sellos // tarjeta_sellos_actual.num_sellos) 
                    # Enviar premio y notificacion si se amerita
                    for prem in range(total_sellos_obtenidos): 
                        new_notificacion_sello = NotificacionModel(
                            id_participante = str(p._id),
                            id_notificacion = str(tarjeta_sellos_actual.id_notificacion),
                            estado = 0
                        ).save() 
                        # Agregar el id de la notificación (movimiento) al ticket.
                        if new_notificacion_sello:
                            notificaciones_enviadas_por_sellos += 1 
                            ticket.id_notificacion_obtenidas_list.append(str(new_notificacion_sello._id))
                        # Buscar el esquema de la notificación de la tarjeta de sellos
                        tarjeta_sellos_notificacion = NotificacionTemplateModel.find_by_id(tarjeta_sellos_actual.id_notificacion)
                        if tarjeta_sellos_notificacion and tarjeta_sellos_notificacion.link and tarjeta_sellos_notificacion.link != "null":
                            # Envio de premio o encuesta
                            if tarjeta_sellos_notificacion.tipo_notificacion == "premio":
                                new_bonificacion_link = PremioParticipanteModel(
                                # TODO: Modificación en id_promoción
                                    id_participante = str(p._id),
                                    id_premio = tarjeta_sellos_notificacion.link,
                                    estado = 0,
                                    fecha_creacion = dt.datetime.now()
                                ).save()
                                if new_bonificacion_link:
                                    premios_enviados_por_sellos += 1
                            if tarjeta_sellos_notificacion.tipo_notificacion == "encuesta":
                                new_bonificacion_link = ParticipantesEncuestaModel(
                                    id_participante = str(p._id),
                                    id_encuesta = tarjeta_sellos_notificacion.link,
                                    estado = 0, 
                                    fecha_creacion = dt.datetime.now() 
                                ).save()
                                if new_bonificacion_link:
                                    encuestas_enviadas_por_sellos += 1
                    p.sellos %= tarjeta_sellos_actual.num_sellos
                    new_sello_historial = HistorialTarjetaSellos.add_movimiento(str(p._id), str(tarjeta_sellos_actual._id))
                    if new_sello_historial:
                        is_historial_sellos_new_element = 1
        # Transacción de Puntos
        # Puntos: 1. Verificar si el participante llego a un nuevo nivel
        bonificacion_puntos = ConfigModel.calcular_puntos(ticket.total) 
        nivel_actual = TarjetaPuntosTemplateModel.get_level(p.saldo)
        nivel_sig = TarjetaPuntosTemplateModel.get_level(p.saldo + bonificacion_puntos)
        bonificacion_niveles = diff(nivel_sig, nivel_actual)
        print(bonificacion_niveles)
        print(len(bonificacion_niveles))
        notificaciones_enviadas_por_puntos = 0
        encuestas_enviadas_por_puntos = 0
        premios_enviados_por_puntos = 0
        premios_enviados = 0
        if len(bonificacion_niveles): 
            for nivel in bonificacion_niveles:
                new_nivel = TarjetaPuntosTemplateModel.find_by_id(nivel)
                if new_nivel.id_notificacion:
        # Puntos: 2. Habilitado de niveles: Notificacion y premio
                    # Integración de fecha_vencimiento del sistema de niveles:
                    if new_nivel.fecha_vencimiento and dt.datetime.now() < new_nivel.fecha_vencimiento:
                        trigger_notificacion = NotificacionModel.add_notificacion(new_nivel.id_notificacion, p._id)
                        notificacion = NotificacionTemplateModel.find_by_id(new_nivel.id_notificacion)
                        print(notificacion)
                        print(notificacion.tipo_notificacion)
                        print(notificacion.link)
                        if notificacion and notificacion.link and notificacion.link != "null":
                            # Envio de premio o encuesta
                            if notificacion.tipo_notificacion == "premio":
                                new_bonificacion_link = PremioParticipanteModel(
                                # TODO: Modificación en id_promoción
                                    id_participante = str(p._id),
                                    id_premio = notificacion.link,
                                    estado = 0,
                                    fecha_creacion = dt.datetime.now()
                                ).save()
                                if new_bonificacion_link:
                                    # Añadir los premios enviados en el ticket por el sistema de niveles
                                    ticket.id_premios_obtenidos_list.append(str(new_bonificacion_link._id))
                                    premios_enviados_por_puntos += 1
                            if notificacion.tipo_notificacion == "encuesta":
                                new_bonificacion_link = ParticipantesEncuestaModel(
                                    id_participante = str(p._id),
                                    id_encuesta = notificacion.link,
                                    estado = 0, 
                                    fecha_creacion = dt.datetime.now() 
                                ).save()
                                if new_bonificacion_link:
                                    encuestas_enviadas_por_puntos += 1
                        if trigger_notificacion:
                            # Añadir las notificaciones enviadas por el sistema de niveles
                            ticket.id_notificacion_obtenidas_list.append(str(trigger_notificacion._id))
                            notificaciones_enviadas_por_puntos += 1 
        # Puntos: 3. Transaccion de puntos
        if bonificacion_puntos:
            p.saldo += bonificacion_puntos
        try:    
            p.save()
        except :
            print()
            return {"message": "No se pudieron agregar los puntos al participante"}, 504
        print("saldo del participante:", p.saldo)
        print("bonificacion_puntos:", bonificacion_puntos)
        # Transaccion de movimientos y quema de cupones, sólo hay uno en la parte superior "new_sello_historial"
        new_movimiento = MovimientoAppModel.add_movimiento(str(p._id), "Compra", "entrada", ticket.total, "ayuda4.png")
        if new_movimiento:
            movimientos_enviados = 1
        # TODO: Añadir los diferentes tipos de movimientos existentes! !
        try: 
            ticket.sellos_otorgados = bonificacion_sellos
            # TODO: Notificación por puntos
            ticket.puntos_otorgados = bonificacion_puntos
            # if new_notificacion_sello:
            #     ticket.id_notificacion_obtenidas_list.append(str(new_notificacion_sello._id))
            ticket.save()
        except ValidationError as exc:            
            print(exc.message)
            return {"message": "No se pudo guardar el ticket."}, 504   

        # Retorno
        return {
            'message': "Ticket aceptado con éxito",
            'captura del ticket': 'Exitosa',
            'Busqueda del participante': 'Exitosa',
            'Bonificacion de sellos': '{} sello(s)'.format(bonificacion_sellos),
            'Habilitación de un nuevo nivel': '{} nivel(es) desbloqueados'.format(len(bonificacion_niveles)),
            'Notificaciones enviadas por tarjeta de sellos': notificaciones_enviadas_por_sellos,
            'Notificaciones enviadas por sistema de niveles(Puntos)': notificaciones_enviadas_por_puntos,
            'Nuevas Encuestas por sellos': encuestas_enviadas_por_sellos,
            'Nuevas Encuestas por puntos': encuestas_enviadas_por_puntos,
            'Movimientos enviados': movimientos_enviados,
            'Nuevos premios por sellos': premios_enviados_por_sellos,
            'Nuevos premios por puntos': premios_enviados_por_puntos,
            'Bonificación de puntos': '{} puntos bonificados'.format(bonificacion_puntos),
            '_id': str(ticket._id)
        }, 200