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/')
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'})
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/')
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/")
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)
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)
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)
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
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!')
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/')
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')
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')
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)
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)