def finalizar_pedido(request, pk_pedido):
    try:
        pedido = Pedido.objects.get(id=pk_pedido)
        pedido.btn_finalizado = True
        pedido.save()
        motorista = Motorista.objects.get(user=request.user)
        motorista.ocupado = False
        motorista.save()
        message = "O motorista " + request.user.first_name + " finalizou por completo a ROTA ID #" + str(
            pedido.pk
        ) + ". Se desejar confirmar, ligue para o motorista: " + motorista.phone
        n = Notification(type_message='ALL_DELIVERED',
                         to=pedido.estabelecimento.user,
                         message=message)
        n.save()
        message = 'Voce concluiu a Rota, se voce estiver com algum material (maquineta ou bag) da Loja ' + pedido.estabelecimento.user.first_name + ',  favor devolver. Obrigado!'
        messages.success(request, message)
        if motorista.configuration.plano == 'PREMIUM':
            return HttpResponseRedirect('/app/pedidos/motorista/premium/')
        return HttpResponseRedirect('/app/pedidos/motorista/')
    except:
        messages.error(request, 'Este pedido foi deletado pela Loja')
        if motorista.configuration.plano == 'PREMIUM':
            return HttpResponseRedirect('/app/pedidos/motorista/premium/')
        return HttpResponseRedirect('/app/pedidos/motorista/')
Exemple #2
0
 def post(self, request, *args, **kwargs):
     notifications = request.data['notifications']
     notifications = notifications.strip('[').strip(']').split(',')
     print(notifications)
     user = self.request.user
     old_notifications = user.profile.notification_set.order_by('operate')
     for n in notifications:
         l = n.split('_')
         if len(l) != 3 or (int(l[0]) not in (0, 1, 2)) or (int(
                 l[1]) not in (0, 1)) or (int(l[2]) not in (0, 1)):
             return Response({'message': 'params invalid'})
     if old_notifications:
         for i in range(3):
             old_notifications[i].is_sms_active = notifications[i].split(
                 '_')[1]
             old_notifications[i].is_email_active = notifications[i].split(
                 '_')[2]
             old_notifications[i].save()
     else:
         for i in range(3):
             n = Notification(profile_id=user.profile)
             n.operate = notifications[i].split('_')[0]
             n.is_sms_active = notifications[i].split('_')[1]
             n.is_mail_active = notifications[i].split('_')[2]
             n.save()
     return Response({'message': 'save successfully'})
Exemple #3
0
def offer(request, slug):
    project = get_object_or_404(Request, slug=slug)
    offered_by = request.user

    # todo validations
    # can't offer my own project
    if (offered_by == project.created_by):
        # messages.add_message(request, messages.INFO, 'Hmmm this is your project!')
        return HttpResponseRedirect("/projects/" + str(slug) + "/")

    # todo check if this user has already sent offer request ...
    sent_request = Offer.objects.filter(project=project, offer_by=offered_by)
    if sent_request:
        messages.add_message(request, messages.INFO, 'Your have already sent offer request for this project!')
        return HttpResponseRedirect("/projects/" + str(slug) + "/")




    # reputation change for offering
    offered_by_profile = UserProfile.objects.get(user=offered_by)
    if offered_by_profile:
        offered_by_profile.reputation += OFFERING_REPUTATION_POINT
        offered_by_profile.save()

    offer = Offer(project=project, offer_by=offered_by)
    offer.save()
    notification = Notification(for_user=project.created_by, extra=offer, type=200, action_url="/projects/" + str(slug),
                                message="You have received an offer ", )
    notification.save()
    # todo show offer processed message and redirect
    messages.add_message(request, messages.SUCCESS, 'Your Offer has been sent!')
    return HttpResponseRedirect("/projects/" + str(slug) + "/")
def finalizar_entrega(request, pk_ponto, pk_pedido):
    try:
        ponto = Ponto.objects.get(id=pk_ponto)
        pedido = Pedido.objects.get(id=pk_pedido)
        ponto.status = True
        ponto.save()
        try:
            if pedido.request_set.first():
                reqs = pedido.request_set.all()
                for req in reqs:
                    req.status_pedido = 'ENTREGUE'
                    req.save()
        except (Exception, ):
            pass
        pto_entregues = len(pedido.ponto_set.filter(status=True))
        if len(pedido.ponto_set.all()) == pto_entregues:
            pedido.is_complete = True
            pedido.save()
            messages.success(
                request,
                'Tudo entregue! Finalize esta Rota para poder pegar outros.')
        if pedido.estabelecimento.is_online:
            message = "Motorista " + request.user.first_name + " entregou pedido ao cliente " + ponto.cliente + " no endereco " + ponto.full_address
            n = Notification(type_message='ORDER_DELIVERED',
                             to=pedido.estabelecimento.user,
                             message=message)
            n.save()
        return HttpResponseRedirect('/app/pedido/route/' + str(pedido.pk))
    except:
        messages.error(request, 'Este pedido foi deletado pela Loja')
        return HttpResponseRedirect('/app/pedidos/motorista/')
def cancel_pedido(request, pk):
    if not request.user.is_authenticated:
        messages.error(request,
                       "Usuario precisa estar logado para esta operacao")
        raise PermissionDenied(
            "Usuario precisa estar logado para esta operacao")
    else:
        pedido = Pedido.objects.get(id=pk)
        try:
            user_motorista = pedido.motorista
            motorista = Motorista.objects.get(user=user_motorista)
        except:
            user_motorista = None
        if user_motorista:
            if user_motorista.pedido_set.last() == pedido:
                motorista.ocupado = False
                motorista.save()
                loja = Estabelecimento.objects.get(user=request.user)
                if motorista.is_online:
                    message = "O Pedido que voce ia entregar foi cancelado pela loja " + request.user.first_name + ". Desculpe pelo transtorno! Qualquer coisa, ligue para a loja: " + loja.phone
                    n = Notification(type_message='DELETE_LOJA',
                                     to=motorista.user,
                                     message=message)
                    n.save()
        pedido.status = True
        pedido.motorista = None
        pedido.save()
        try:
            logger(request.user, "Cancelou a Rota #" + str(pedido.pk))
        except (Exception, ):
            pass
        messages.success(request, "Pedido deletado com sucesso")
        return HttpResponseRedirect('/app/pedidos/loja/')
Exemple #6
0
def create_request_offer(request):
    # todo there is no validation here

    if request.POST:
        if request.is_ajax():

            offer_id = request.POST.get('offer_id')

            # OFFER
            if offer_id:
                offer_project = Request.objects.get(pk=offer_id)
                offer_instance = Offer(project=offer_project, offer_by=request.user)
                offer_instance.save()

                # reputation change for offering
                offered_by_profile = UserProfile.objects.get(user=request.user)
                if offered_by_profile:
                    offered_by_profile.reputation += OFFERING_REPUTATION_POINT
                    offered_by_profile.save()

                notification = Notification(for_user=offer_project.created_by, extra=offer_instance, type=200,
                                            action_url="/projects/" + str(offer_project.slug),
                                            message="You have received an offer ", )
                notification.save()

            # REQUEST
            return project_create(request)

        else:
            return HttpResponseRedirect("/dashboard/")


    else:
        return HttpResponseRedirect("/dashboard/")
Exemple #7
0
    def form_valid(self, form):
        data = form.cleaned_data
        requeriment = Requirement.objects.get(id=self.kwargs['requeriment_id'])
        requeriment.name = data['name_item']
        requeriment.description = data['description']
        common_user = self.object.commonuser
        common_user.cpf = data['cpf']
        common_user.phone = data['phone']
        common_user.anonymous = data['anonymous']
        common_user.save()
        new_item = Item(owner=self.request.user,
                        description=requeriment.description,
                        name_item=requeriment.name)
        new_item.save()
        new_object = Object(item=new_item, type=requeriment.type)
        new_object.save()
        messages.success(self.request, "Novo Objeto cadastrado com sucesso!")
        match = Match(requirement=requeriment, item=new_item)
        match.save()
        notification = Notification(user=requeriment.owner, match=match)
        notification.save()
        donation = Donation(
            donator=self.request.user,
            institute=requeriment.owner,
            item=new_item,
            data=datetime.datetime.today().strftime('%Y-%m-%d'),
            is_completed=False)
        donation.save()
        messages.success(self.request, 'Muito Obrigado pela sua Doação!')

        return super(DonatorRequerimentView, self).form_valid(form)
Exemple #8
0
def search_matches(**kwargs):
    reqs = Requirement.objects.filter(status=True)
    for req in reqs:
        if req.type == kwargs['type']:
            match = Match(requirement=req,
                          item=Item.objects.get(id=kwargs['pk_item']))
            match.save()
            notification = Notification(user=req.owner, match=match)
            notification.save()
    def form_valid(self, form):
        context = self.get_context_data()
        pontoset = context['pontoset']
        with transaction.atomic():
            self.object = form.save()
            if pontoset.is_valid():
                pontoset.instance = self.object
                pontoset.save()
        pedido = self.object
        data = self.request.POST
        try:
            cliente = Cliente.objects.get(user__username=data['login'])
        except (Exception, ):
            cliente = None
        if not cliente:
            user_data = {}
            user_data['username'] = data['login']
            user_data['password'] = data['login']
            user_data['email'] = data['email']
            user_data['last_name'] = str(data['nome'])[:30]
            usuario = User.objects.create_user(**user_data)
            usuario.save()
            cliente = Cliente(user=usuario)
            cliente.save()
        cliente.phone = data['phone']
        cliente.nome = data['nome']
        cliente.endereco = data['endereco']
        cliente.numero = data['numero']
        cliente.bairro = data['bairro']
        cliente.cidade = data['cidade']
        cliente.save()
        pedido.cliente = cliente
        try:
            vendedor = Vendedor.objects.get(user=self.request.user)
            pedido.vendedor = vendedor
        except (Exception, ):
            pass
        pedido.save()

        # message = "Um novo pedido foi feito pelo vendedor " + self.request.user.first_name
        # pedido = self.object
        # a = func()
        if not self.request.user.is_superuser:
            users = User.objects.filter(is_superuser=True)
            for user in users:
                message = "Um novo pedido foi feito pelo vendedor " + self.request.user.first_name
                n = Notification(type_message='NOVO_PEDIDO_VENDEDOR',
                                 to=user,
                                 message=message)
                print(user)
                n.save()
        return super(PedidoCreateVendedorView, self).form_valid(form)
Exemple #10
0
    def save_model(self, request, obj, form, change):

        if obj.pk:
            obj.save()
            logging.warning('Modifying the change, notifications are omitted...')
            return

        obj.save()

        logging.warning('A new change was created, notifications will be sent.')
        integrations = Integration.objects.filter(integrate__project_id=obj.project.pk)
        
        responsible_users=[]
        for i in integrations:
            responsible = User.objects.filter(responsable__project__integrate__integration_id=i.id)
            responsible_users = list(set(responsible_users) | set(responsible)) 

        logging.info("Found responsible: %s" % responsible_users)
        emails=[]
        messages_to_responsible = ()
        link_to_change = "%s%s%s" % (settings.BASE_URL, '/admin/app/change/', obj.pk)
        message_subject = "%s '%s'" % (_('message_updated_project'),obj.project.name)
        message_from = settings.EMAIL_FROM
        message_content = "%s: %s\n\n" % (_('message_updated_project'),obj.project.name)
        message_content += "%s: %s\n\n" % (_('message_change'), obj.name)
        message_content += "%s: \n%s\n\n" % (_('message_description'),obj.description)
        message_content += "%s: %s\n" % (_('message_created_at'),
                                         obj.created_at.strftime("%d/%m/%Y %H:%M"))
        message_content +=  "%s: %s\n" % (_('message_updated_at'),
                                          obj.updated_at.strftime("%d/%m/%Y %H:%M"))
        message_content += "%s: %s\n" % (_('message_confirm_change'),link_to_change)

        for u in responsible_users:
            g = Notification(change=obj,user=u)
            g.save()

            if u.email:
                message_to = (message_subject,
                               message_content,
                               message_from,
                               ["%s" % u.email])
                messages_to_responsible += (message_to,)
            


        try:
            sent_messages = send_mass_mail(messages_to_responsible, fail_silently=False)
            messages.info(request,_('message_mails_sent') % {'emails':sent_messages} )
            logging.info("Sent messages:  %s" % sent_messages)
        except Exception as e:
            logging.error("ERROR to sent messajes. %s" % e)
Exemple #11
0
    def insert_one(self, notification):
        """Insert Notification"""
        notification = Notification(
            highlight=notification["highlight"],
            notification=notification["notification"],
            url=notification["url"],
            type=notification["type"],
            delivered=notification["delivered"],
            user=User.objects.get(pk=notification["user_id"]),
            task=Task.objects.get(pk=notification["task_id"]) if notification["task_id"] is not None else notification["task_id"]
        )

        notification.save()
        return False if notification.pk is None else notification
Exemple #12
0
def rejectOffer(request):
    if request.method == 'GET':
        id = request.GET['offer_id']
        offer = Offer.objects.get(pk=id)
        if offer:
            offer.is_seen = True
            offer.save()
            notification = Notification(for_user=offer.offer_by, type=202, action_url="/projects/" + offer.project.slug,
                                        extra=offer, message="Your offer has been rejected.")
            notification.save()
            messages.add_message(request, messages.SUCCESS, 'You have rejected an offer!')
            return HttpResponseRedirect("/projects/" + str(offer.project.slug) + "/")

        else:
            return HttpResponse('Bad request!')
Exemple #13
0
 def form_valid(self, form):
     context = self.get_context_data()
     pontoset = context['pontoset']
     with transaction.atomic():
         self.object = form.save()
         print(pontoset.errors)
         if pontoset.is_valid():
             pontoset.instance = self.object
             pontoset.save()
     self.request.session['pedido'] = None
     del self.request.session['pedido']
     users = User.objects.filter(is_superuser=True)
     for us in users:
         message = "Um novo pedido foi feito no Catalogo Virtual"
         n = Notification(type_message='NOVO_PEDIDO_LOJA', to=us, message=message)
         n.save()
     messages.success(self.request, "Solicitacao de Orcamento realizado com sucesso")
     return HttpResponseRedirect(self.get_success_url())
def accept_corrida(request, pk_pedido):
    try:
        pedido = Pedido.objects.get(id=pk_pedido)
        if pedido.motorista:
            try:
                messages.error(
                    request, 'O motorista ' + pedido.motorista.first_name +
                    ' pegou esta entrega antes de você')
            except (Exception, ):
                messages.error(
                    request,
                    'Outro Motorista pegou esta entrega antes de você')
            return HttpResponseRedirect('/app/pedidos/motorista/')
        else:
            pedido.status = False
            pedido.motorista = request.user
            pedido.save()
            motorista = Motorista.objects.get(user=request.user)
            motorista.ocupado = True
            motorista.save()
            if pedido.estabelecimento.is_online:
                message = "O motorista " + str(
                    motorista.user.first_name
                ) + " aceitou fazer a entrega do Pedido ID #" + str(
                    pedido.pk
                ) + ". Qualquer problema, ligue para o motorista: " + motorista.phone
                n = Notification(type_message='ACCEPT_ORDER',
                                 to=pedido.estabelecimento.user,
                                 message=message)
                n.save()
                message = 'A Loja ' + pedido.estabelecimento.user.first_name + ', localizado na ' + pedido.estabelecimento.full_address + ', esta aguardando a coleta.'
                no = Notification(
                    type_message='DELETE_LOJA',
                    to=pedido.motorista,
                    message=message)  # está delete loja por enquanto.
                no.save()
            try:
                logger(request.user, "Aceitou fazer a Rota #" + str(pedido.pk))
            except (Exception, ):
                pass
            return HttpResponseRedirect('/app/pedido/route/' + str(pedido.pk))
    except (Exception, ):
        messages.error(request, 'Este pedido foi deletado pela Loja')
        return HttpResponseRedirect('/app/pedidos/motorista/')
Exemple #15
0
    def form_valid(self, form):
        data = form.cleaned_data
        user_data = {}
        common_data = {}
        user_data['last_name'] = data['last_name']
        user_data['first_name'] = data['first_name']
        user_data['email'] = data['email']
        user_data['username'] = data['username']
        user_data['password'] = data['password']
        common_data['cpf'] = data['cpf']
        common_data['phone'] = data['phone']
        if data['username'] and data['password']:
            new_user = User.objects.create_user(**user_data)
            new_common_user = CommonUser(user=new_user, **common_data)
            new_common_user.save()
            messages.success(self.request,
                             'Novo usuário cadastrado com sucesso.')
        else:
            return self.form_invalid(form)

        requeriment = Requirement.objects.get(id=self.kwargs['requeriment_id'])
        requeriment.name = data['name_item']
        requeriment.description = data['description']
        new_item = Item(owner=new_user,
                        description=requeriment.description,
                        name_item=requeriment.name)
        new_item.save()
        new_object = Object(item=new_item, type=requeriment.type)
        new_object.save()
        messages.success(self.request, "Novo Objeto cadastrado com sucesso!")
        match = Match(requirement=requeriment, item=new_item)
        match.save()
        notification = Notification(user=requeriment.owner, match=match)
        notification.save()
        donation = Donation(
            donator=new_user,
            institute=requeriment.owner,
            item=new_item,
            data=datetime.datetime.today().strftime('%Y-%m-%d'),
            is_completed=False)
        donation.save()
        messages.success(self.request, 'Muito Obrigado pela sua Doação!')
        return super(DonatorRequerimentViewAnonymous, self).form_valid(form)
 def form_valid(self, form):
     context = self.get_context_data()
     pontoset = context['pontoset']
     with transaction.atomic():
         self.object = form.save()
         if pontoset.is_valid():
             pontoset.instance = self.object
             pontoset.save()
     pedido = self.object
     try:
         logger(self.request.user, "Criou a Rota #" + str(pedido.pk))
     except (Exception, ):
         pass
     if not pedido.is_draft:
         no = Notification(type_message='NOTIFICACAO_COZINHA',
                           to=self.request.user,
                           message='NOVO PEDIDO REALIZADO')
         no.save()
     return super(PedidoCreateView, self).form_valid(form)
def liberar_corrida_cozinha(request, pk_pedido):
    pedido = Pedido.objects.get(id=pk_pedido)
    pedido.coletado = True
    pedido.status_cozinha = True
    pedido.save()
    try:
        if pedido.request_set.first():
            reqs = pedido.request_set.all()
            for req in reqs:
                req.status_pedido = 'ENTREGANDO'
                req.save()
    except (Exception, ):
        pass
    if Motorista.objects.get(user=pedido.motorista).is_online:
        message = "Voce foi liberado pela loja para realizar a(s) entrega(s). Sua Rota atual esta no menu ENTREGAS. Quando terminar uma entrega, marque finalizar. Qualquer problema, ligue para a loja: " + pedido.estabelecimento.phone
        n = Notification(type_message='ENABLE_ROTA',
                         to=pedido.motorista,
                         message=message)
        n.save()
    return redirect('/app/cozinha')
Exemple #18
0
def notify_handler(verb, **kwargs):
    kwargs.pop('signal', None)
    recipient = kwargs.pop('recipient')
    actor = kwargs.pop('sender')
    optional_objs = [(kwargs.pop(opt, None), opt)
                     for opt in ('target', 'action_object')]
    public = bool(kwargs.pop('public', True))
    description = kwargs.pop('description', None)
    timestamp = kwargs.pop('timestamp', timezone.now())
    level = kwargs.pop('level', Notification.LEVELS.info)

    # Check if User or Group
    if isinstance(recipient, Group):
        recipients = recipient.user_set.all()
    else:
        recipients = [recipient]

    for recipient in recipients:
        newnotify = Notification(
            recipient=recipient,
            actor_content_type=ContentType.objects.get_for_model(actor),
            actor_object_id=actor.pk,
            verb=verb,
            public=public,
            description=description,
            timestamp=timestamp,
            level=level,
        )

        # Set optional objects
        for obj, opt in optional_objs:
            if obj is not None:
                setattr(newnotify, '%s_object_id' % opt, obj.pk)
                setattr(newnotify, '%s_content_type' % opt,
                        ContentType.objects.get_for_model(obj))

        if len(kwargs):
            newnotify.data = kwargs

        newnotify.save()
def aceitar_pedido(request, pk):
    mark_read(request)
    req = Request.objects.get(id=pk)
    req.status_pedido = 'ACEITO'
    req.save()
    try:
        logger(request.user, "Aceitou o pedido " + str(req))
    except (Exception, ):
        pass
    folha_pag = get_or_create_folha(datetime.now(), req.estabelecimento)
    item_pag = ItemPagamento(request=req, folha=folha_pag)
    item_pag.save()
    folha_pag.save()
    pedido = get_or_create_rota(req)
    pedido.save()
    if request.user.estabelecimento.configuration.chamar_motoboy:
        req.pedido = pedido
        itens = make_itens(req)
        obs = make_obs(req)
        ponto = Ponto(pedido=pedido,
                      bairro=req.endereco_entrega.bairro,
                      endereco=req.endereco_entrega.endereco,
                      numero=req.endereco_entrega.numero,
                      complemento=req.endereco_entrega.complemento,
                      cliente=str(req.cliente.usuario.first_name) + " " +
                      str(req.cliente.usuario.last_name),
                      telefone=req.cliente.telefone,
                      observacoes=obs,
                      itens=itens)
        req.save()
        ponto.save()
        pedido.save()
        # a = func()
    if request.user.estabelecimento.configuration.has_cozinha:
        no = Notification(type_message='NOTIFICACAO_COZINHA',
                          to=request.user,
                          message='NOVO PEDIDO REALIZADO')
        no.save()
    return redirect('/dashboard')
Exemple #20
0
 def form_valid(self, form):
     data = form.cleaned_data
     item = Item.objects.get(id=self.kwargs['item_id'])
     item.name_item = data['name']
     item.description = data['description']
     object = Object.objects.get(item=item)
     object.type = data['type']
     requeriment = Requirement(name=item.name_item, type=object.type,
                               status=True, owner=self.request.user,
                               description=item.description)
     requeriment.save()
     match = Match(requirement=requeriment, item=item)
     match.save()
     donation = Donation(donator=item.owner, institute=requeriment.owner, item=item,
                         data=datetime.datetime.today().strftime('%Y-%m-%d'), is_completed=False)
     donation.save()
     notification = Notification(user=requeriment.owner, match=match)
     notification.save()
     notification = Notification(user=item.owner, match=match)
     notification.save()
     messages.success(self.request, "Nova Necessidade cadastrada com sucesso!")
     return super(NewItemRequerimentView, self).form_valid(form)
Exemple #21
0
def acceptOffer(request):
    if request.method == 'GET':
        id = request.GET['offer_id']
        offer = Offer.objects.get(pk=id)
        if offer:
            offer.is_accepted = True
            offer.is_seen = True
            offer.project.collaborators.add(offer.offer_by)
            offer.save()
            notification = Notification(for_user=offer.offer_by, type=201, action_url="/projects/" + offer.project.slug,
                                        extra=offer, message="Your offer has been accepted.")
            notification.save()

            # update user reputation
            profile = UserProfile.objects.get(user=offer.offer_by)
            profile.reputation += REQUEST_ACCEPTED_REPUTATION_POINT
            profile.save()
            messages.add_message(request, messages.SUCCESS, 'You have accepted an offer!')
            return HttpResponseRedirect("/projects/" + str(offer.project.slug) + "/")

        else:
            return HttpResponse('bad request')
def submit_message(request, pk_pedido):
    text = request.GET['text']
    motorista = None
    pedido = Pedido.objects.get(id=pk_pedido)
    loja = None
    try:
        motorista = Motorista.objects.get(user=request.user)
    except:
        loja = Estabelecimento.objects.get(user=request.user)
    if motorista:
        mess = Message(u_from=motorista.user, u_to=pedido.estabelecimento.user, text=text, pedido=pedido, is_read=False)
        mess.save()
        message = "Nova Mensagem"
        n = Notification(type_message='MOTORISTA_MESSAGE', to=pedido.estabelecimento.user, message=message)
        n.save()
    elif loja:
        mess = Message(u_from=loja.user, u_to=pedido.motorista, text=text, pedido=pedido, is_read=False)
        mess.save()
        message = "Nova Mensagem"
        n = Notification(type_message='LOJA_MESSAGE', to=pedido.motorista, message=message)
        n.save()
    return return_to_get_chat(request, pedido.pk)