예제 #1
0
def sendmail(request):
    if request.method == 'POST':
        title = request.POST.get('subject', '')
        message = request.POST.get('message', '')

        imgs = ServiceProviderImage.objects.filter(service_provider=2)
        img = MEDIA_URL
        #pdb.set_trace()

        ctx = {
            'email': request.user.email,
            'title': title,
            'message': message
        }

        customer_ids = Reservation.objects.filter(service_provider=request.user.service_provider).exclude(
            customer__isnull=True).values_list('customer_id', flat=True).distinct()

        # Find customers who have not reserved anything yet and were added by service provider
        customers_nonr = Customer.objects.filter(service_provider=request.user.service_provider)
        customers = Customer.objects.filter(pk__in=customer_ids)

        all_recipients = customers_nonr | customers

        msg = get_template('emails/servicenotification.html').render(Context(ctx))
        service_provider_email = request.user.email

        recipents_ids = ""
        recipent_number = 0
        current_datetime = datetime.datetime.today()

        for recipent in all_recipients:
            recipient_reservations = Reservation.objects.filter(customer_id=recipent.id)
            if recipient_reservations.__len__() == 0:
                continue
            send_notification = recipient_reservations[recipient_reservations.__len__() - 1].service_notifications
            if send_notification:
                email = EmailMessage(title, msg, service_provider_email, to=[recipent.email])
                email.content_subtype = 'html'
                email.send()
                recipents_ids += " " + str(recipent.id)
                recipent_number += 1

        sent_mail = MailService(title=title, message=message, mail_type=1, date_time=current_datetime,
                                number_of_recipients=recipent_number, recipients=recipents_ids,
                                service_provider=request.user.service_provider)
        sent_mail.save()
        emailForm = EmailForm()

        messages.success(request, _('Your messages was sent successfully.'))
        return HttpResponseRedirect(reverse(mynotifications))

    else:
        emailForm = EmailForm()
        return render_to_response('customers/sendmail.html', locals(), context_instance=RequestContext(request))
예제 #2
0
def selectcustomers(request):
    if request.method != 'POST':


        conditionsForm = NotificationConditionsForm()
        '''
            (('0', _('Moje storitve obiscejo vsaj 1-krat')),('1', _('Obiskujejo moje storitve veckrat letno')),('2', _('Obiskujejo moje storitve vsaj 1-krat mesecno')))

            (('0', _('Obiskale storitev brez popusta')), ('1', _('Obiskale storitev z najvec 20% popustom')), ('2', _('Obiskale storitev z vsaj 20% in najvec 40% popusta')), ('3', _('Obiskale storitev z vsaj 40% popustom')))
        '''
        conditionsForm.fields['regular_customers'].choices =(('0', _('attended services at least once')), ('1', _('is attending services more than once per year')), ('2', _('is attending services on a monthly basis')))

        services = [('-1', _('one of my services'))]
        services += [(service.id, service.name) for service in Service.objects.filter(service_provider=request.user.service_provider)]
        conditionsForm.fields['specific_service'].choices = services

        conditionsForm.fields['customers_liking_discounts'].choices = (('0', _('no discount')), ('1', _('discount less than 20%')), ('2', _('discount between 20% and 40%')), ('3', _('discount greater than 40%')))



        return render_to_response('customers/sendmailspecificcustomer.html', locals(), context_instance=RequestContext(request))



    step = request.POST.get('step', '1')

    if step == '1':
        regular_customers_choice = request.POST.get('regular_customers', '')
        specific_service_choice = request.POST.get('specific_service', '')
        customers_liking_discounts_choice = request.POST.get('customers_liking_discounts', '')


        mycustomers_in_reservations = Reservation.objects.filter(service_provider=request.user.service_provider).exclude(customer__isnull=True)
        regular_customers_choice_values = [0, 5, 8]


        regular_customers = []

        for i in range(0, mycustomers_in_reservations.__len__()):
            customer = mycustomers_in_reservations[i]
            counter = 0
            if customer.user == None:
                for j in range(0, mycustomers_in_reservations.__len__()):
                    if customer.user_email == mycustomers_in_reservations[j].user_email:
                        counter += 1
            if counter >= regular_customers_choice_values[int(regular_customers_choice)]:
                regular_customers.append(customer)
            else:
                for j in range(0, mycustomers_in_reservations.__len__()):
                    if customer.user == mycustomers_in_reservations[j].user:
                        counter += 1
                if counter >= regular_customers_choice_values[int(regular_customers_choice)]:
                    regular_customers.append(customer)
        '''
        if regular_customers_choice == '0':
            customers = Customer.objects.filter(number_of_reservations__gte=1)
            array = []
            for customer in customers:
                array.append(customer.id)
            regular_customers = Reservation.objects.filter(customer_id=array)

        elif regular_customers_choice == '1':
            customers = Customer.objects.filter(number_of_reservations__gt=1, number_of_reservations__lte=5)
            regular_customers = Reservation.objects.filter(customer=customers, service_provider=request.user.service_provider)
        else:
            customers = Customer.objects.filter(number_of_reservations__gt=4)
            regular_customers = Reservation.objects.filter(customer=customers, service_provider=request.user.service_provider)

        '''

        customer_attended_service = []
        for i in range(0, regular_customers.__len__()):
            if specific_service_choice != '-1':
                if regular_customers[i].service_id == int(specific_service_choice):
                    customer_attended_service.append(regular_customers[i])
            else:
                customer_attended_service = regular_customers


        customers_used_discount = []
        if customers_liking_discounts_choice[0] != '0':

            for customer in customer_attended_service:
                service_id = customer.service_id
                service_provider = customer.service_provider
                reservation_date = customer.date
                service_discounts = Discount.objects.filter(service_id=service_id)
                for service_discount in service_discounts:
                    discount_from = service_discount.valid_from
                    discount_to = service_discount.valid_to
                    discount = service_discount.discount
                    if discount_from <= reservation_date <= discount_to:

                        if customers_liking_discounts_choice == '1':

                            if 0 < discount <= 20:

                               customers_used_discount.append(customer)

                        elif customers_liking_discounts_choice == '2':
                            if 20 < discount <= 40:
                               customers_used_discount.append(customer)

                        else:

                            if discount > 40:

                               customers_used_discount.append(customer)


        else:
            customers_used_discount = customer_attended_service

        recipients = []
        for i in range(0, customers_used_discount.__len__()):
            insert = True
            for j in range(0, recipients.__len__()):
                if recipients[j].customer_id == customers_used_discount[i].customer_id:
                    insert = False
            if insert:
                recipients.append(customers_used_discount[i])

        request.session['recipients'] = recipients
        recipients_num = recipients.__len__()
        if recipients_num == 0:
            messages.warning(request, _('There is no matching customers!'))
        elif recipients_num == 1:
            messages.info(request, _('You are about to send an email to your customer!'))
        else:
            messages.info(request, _('You are about to send emails to '+str(recipients_num)+' customers!'))
        emailForm = EmailForm()
        return render_to_response('customers/sendmail.html', locals(), context_instance=RequestContext(request))
    if step == '2':
        recipients = request.session['recipients']

        title = request.POST.get('subject', '')
        message = request.POST.get('message', '')

        ctx = {
            'email': request.user.email,
            'title': title,
            'message': message
        }
        msg = get_template('emails/servicenotification.html').render(Context(ctx))
        service_provider_email = request.user.email

        recipents_ids = ""
        recipent_number = 0
        current_datetime = datetime.datetime.today()

        for recipient in recipients:
            email = EmailMessage(title, msg, service_provider_email, to=[recipient.user_email])
            email.content_subtype = 'html'
            email.send()
            recipent_number += 1

        sent_mail = MailService(title=title, message=message, mail_type=1, date_time=current_datetime,
                                number_of_recipients=recipent_number,
                                service_provider=request.user.service_provider)
        sent_mail.save()


        messages.success(request, _('Your messages was sent successfully.'))
        return HttpResponseRedirect(reverse(mynotifications))