def open_and_send_offer(self, request, queryset): if 'cancel' in request.POST: user_message = _("Action canceled by the user.") user_message_level = messages.INFO self.message_user(request, user_message, user_message_level) return permanence = queryset.first() if permanence is None or not (PERMANENCE_PLANNED <= permanence.status <= PERMANENCE_WAIT_FOR_OPEN): user_message = _("Action canceled by the system.") user_message_level = messages.ERROR self.message_user(request, user_message, user_message_level) return pre_open = (permanence.status == PERMANENCE_PLANNED) and Producer.objects.filter( permanence__id=permanence.id, is_active=True, producer_pre_opening=True).order_by('?').exists() if pre_open: template_offer_mail = [] template_cancel_order_mail = [] cur_language = translation.get_language() for language in settings.PARLER_LANGUAGES[settings.SITE_ID]: language_code = language["code"] translation.activate(language_code) with switch_language(repanier.apps.REPANIER_SETTINGS_CONFIG, language_code): template = Template(repanier.apps.REPANIER_SETTINGS_CONFIG. offer_producer_mail) sender_email, sender_function, signature, cc_email_staff = get_signature( is_reply_to_order_email=True) with switch_language(permanence, language_code): offer_description = permanence.safe_translation_getter( 'offer_description', any_language=True, default=EMPTY_STRING) context = TemplateContext({ 'name': _('long_profile_name'), 'long_profile_name': _('long_profile_name'), 'permanence_link': mark_safe('<a href="#">%s</a>' % _("offer")), 'offer_description': mark_safe(offer_description), 'offer_link': mark_safe('<a href="#">%s</a>' % _("offer")), 'signature': mark_safe('%s<br/>%s<br/>%s' % (signature, sender_function, repanier.apps.REPANIER_SETTINGS_GROUP_NAME)), }) template_offer_mail.append(language_code) template_offer_mail.append(template.render(context)) translation.activate(cur_language) email_will_be_sent, email_will_be_sent_to = send_email_to_who(True) else: template_offer_mail = [] template_cancel_order_mail = [] cur_language = translation.get_language() for language in settings.PARLER_LANGUAGES[settings.SITE_ID]: language_code = language["code"] translation.activate(language_code) with switch_language(repanier.apps.REPANIER_SETTINGS_CONFIG, language_code): template = Template(repanier.apps.REPANIER_SETTINGS_CONFIG. offer_customer_mail) sender_email, sender_function, signature, cc_email_staff = get_signature( is_reply_to_order_email=True) with switch_language(permanence, language_code): offer_description = permanence.safe_translation_getter( 'offer_description', any_language=True, default=EMPTY_STRING) offer_producer = ', '.join( [p.short_profile_name for p in permanence.producers.all()]) qs = Product.objects.filter( producer=permanence.producers.first(), is_into_offer=True, order_unit__lt= PRODUCT_ORDER_UNIT_DEPOSIT # Don't display technical products. ).order_by("translations__long_name")[:5] offer_detail = '<ul>%s</ul>' % ("".join( '<li>%s, %s</li>' % (p.get_long_name(with_box_unicode=False), p.producer.short_profile_name) for p in qs), ) context = TemplateContext({ 'offer_description': mark_safe(offer_description), 'offer_detail': offer_detail, 'offer_recent_detail': offer_detail, 'offer_producer': offer_producer, 'permanence_link': mark_safe('<a href="#">%s</a>' % permanence), 'signature': mark_safe('%s<br/>%s<br/>%s' % (signature, sender_function, repanier.apps.REPANIER_SETTINGS_GROUP_NAME)), }) template_offer_mail.append(language_code) template_offer_mail.append(template.render(context)) if repanier.apps.REPANIER_SETTINGS_CUSTOMERS_MUST_CONFIRM_ORDERS: context = TemplateContext({ 'name': _('long_basket_name'), 'long_basket_name': _('long_basket_name'), 'basket_name': _('short_basket_name'), 'short_basket_name': _('short_basket_name'), 'permanence_link': mark_safe('<a href=#">%s</a>' % permanence), 'signature': mark_safe( '%s<br/>%s<br/>%s' % (signature, sender_function, repanier.apps.REPANIER_SETTINGS_GROUP_NAME)), }) template_cancel_order_mail.append(language_code) template_cancel_order_mail.append(template.render(context)) translation.activate(cur_language) email_will_be_sent, email_will_be_sent_to = send_email_to_who( repanier.apps.REPANIER_SETTINGS_SEND_OPENING_MAIL_TO_CUSTOMER) if 'apply' in request.POST or 'apply-wo-mail' in request.POST: form = OpenAndSendOfferForm(request.POST) if form.is_valid(): user_message, user_message_level = task_order.admin_open_and_send( request, permanence, 'apply-wo-mail' in request.POST) self.message_user(request, user_message, user_message_level) return HttpResponseRedirect(request.get_full_path()) else: form = OpenAndSendOfferForm( initial={ 'template_offer_customer_mail': mark_safe("<br/>==============<br/>".join( template_offer_mail)), 'template_cancel_order_customer_mail': mark_safe("<br/>==============<br/>".join( template_cancel_order_mail)), }) return render( request, 'repanier/confirm_admin_open_and_send_offer.html', { 'sub_title': _("Please, confirm the action : open and send offers"), 'action_checkbox_name': admin.ACTION_CHECKBOX_NAME, 'action': 'open_and_send_offer', 'permanence': permanence, 'pre_open': pre_open, 'form': form, 'email_will_be_sent': email_will_be_sent, 'email_will_be_sent_to': email_will_be_sent_to })
def send_order(self, request, queryset): if 'cancel' in request.POST: user_message = _("Action canceled by the user.") user_message_level = messages.INFO self.message_user(request, user_message, user_message_level) return permanence = queryset.first() if permanence is None or permanence.status not in [ PERMANENCE_OPENED, PERMANENCE_CLOSED ]: user_message = _("Action canceled by the system.") user_message_level = messages.ERROR self.message_user(request, user_message, user_message_level) return if 'apply' in request.POST: deliveries_to_be_send = [] producers_to_be_send = [] producer_qs = Producer.objects.filter(permanence=permanence.id) if "deliveries" in request.POST: deliveries_to_be_send = request.POST.getlist("deliveries") if len(deliveries_to_be_send) == 0: user_message = _( "You must select at least one delivery point.") user_message_level = messages.WARNING self.message_user(request, user_message, user_message_level) return all_producers = "all-producer-invoices" in request.POST producers_invoices_to_be_send = [] if "producer-invoices" in request.POST: producers_invoices_to_be_send = request.POST.getlist( "producer-invoices") if not all_producers and len(producers_invoices_to_be_send) == 0: user_message = _("You must select at least one producer.") user_message_level = messages.WARNING self.message_user(request, user_message, user_message_level) return producer_qs = producer_qs.filter( producerinvoice__in=producers_invoices_to_be_send) for producer in producer_qs.only("id").order_by('?'): producers_to_be_send.append(producer.id) user_message, user_message_level = task_order.admin_send( permanence_id=permanence.id, all_producers=all_producers, deliveries_id=deliveries_to_be_send, producers_id=producers_to_be_send) self.message_user(request, user_message, user_message_level) return template_order_customer_mail = [] template_order_producer_mail = [] template_order_staff_mail = [] cur_language = translation.get_language() for language in settings.PARLER_LANGUAGES[settings.SITE_ID]: language_code = language["code"] translation.activate(language_code) template = Template( repanier.apps.REPANIER_SETTINGS_CONFIG.order_customer_mail) sender_email, sender_function, signature, cc_email_staff = get_signature( is_reply_to_order_email=True) customer_last_balance = \ _('The balance of your account as of %(date)s is %(balance)s.') % { 'date' : timezone.now().strftime(settings.DJANGO_SETTINGS_DATE), 'balance': RepanierMoney(123.45) } customer_on_hold_movement = \ _( 'This balance does not take account of any unrecognized payments %(bank)s and any unbilled order %(other_order)s.') \ % { 'bank' : RepanierMoney(123.45), 'other_order': RepanierMoney(123.45) } bank_account_number = repanier.apps.REPANIER_SETTINGS_BANK_ACCOUNT if bank_account_number is not None: group_name = repanier.apps.REPANIER_SETTINGS_GROUP_NAME if permanence.short_name: communication = "%s (%s)" % (_('Short name'), permanence.short_name) else: communication = _('Short name') customer_payment_needed = '<font color="#bd0926">%s</font>' % ( _('Please pay %(payment)s to the bank account %(name)s %(number)s with communication %(communication)s.' ) % { 'payment': RepanierMoney(123.45), 'name': group_name, 'number': bank_account_number, 'communication': communication }) else: customer_payment_needed = EMPTY_STRING context = TemplateContext({ 'name': _('Long name'), 'long_basket_name': _('Long name'), 'basket_name': _('Short name'), 'short_basket_name': _('Short name'), 'permanence_link': mark_safe('<a href=#">%s</a>' % permanence), 'last_balance': mark_safe('<a href="#">%s</a>' % customer_last_balance), 'order_amount': RepanierMoney(123.45), 'on_hold_movement': mark_safe(customer_on_hold_movement), 'payment_needed': mark_safe(customer_payment_needed), 'delivery_point': _('delivery point').upper(), 'signature': mark_safe('%s<br/>%s<br/>%s' % (signature, sender_function, repanier.apps.REPANIER_SETTINGS_GROUP_NAME)), }) template_order_customer_mail.append(language_code) template_order_customer_mail.append(template.render(context)) template = Template( repanier.apps.REPANIER_SETTINGS_CONFIG.order_producer_mail) context = TemplateContext({ 'name': _('Long name'), 'long_profile_name': _('Long name'), 'order_empty': False, 'duplicate': True, 'permanence_link': mark_safe('<a href=#">%s</a>' % permanence), 'signature': mark_safe('%s<br/>%s<br/>%s' % (signature, sender_function, repanier.apps.REPANIER_SETTINGS_GROUP_NAME)), }) template_order_producer_mail.append(language_code) template_order_producer_mail.append(template.render(context)) board_composition, board_composition_and_description = get_board_composition( permanence.id) template = Template( repanier.apps.REPANIER_SETTINGS_CONFIG.order_staff_mail) context = TemplateContext({ 'permanence_link': mark_safe('<a href=#">%s</a>' % permanence), 'board_composition': mark_safe(board_composition), 'board_composition_and_description': mark_safe(board_composition_and_description), 'signature': mark_safe('%s<br/>%s<br/>%s' % (signature, sender_function, repanier.apps.REPANIER_SETTINGS_GROUP_NAME)), }) template_order_staff_mail.append(language_code) template_order_staff_mail.append(template.render(context)) translation.activate(cur_language) order_customer_email_will_be_sent, order_customer_email_will_be_sent_to = send_email_to_who( repanier.apps.REPANIER_SETTINGS_SEND_ORDER_MAIL_TO_CUSTOMER) order_producer_email_will_be_sent, order_producer_email_will_be_sent_to = send_email_to_who( repanier.apps.REPANIER_SETTINGS_SEND_ORDER_MAIL_TO_PRODUCER) order_board_email_will_be_sent, order_board_email_will_be_sent_to = send_email_to_who( repanier.apps.REPANIER_SETTINGS_SEND_ORDER_MAIL_TO_BOARD, board=True) form = CloseAndSendOrderForm( initial={ 'template_order_customer_mail': mark_safe("<br/>==============<br/>".join( template_order_customer_mail)), 'template_order_producer_mail': mark_safe("<br/>==============<br/>".join( template_order_producer_mail)), 'template_order_staff_mail': mark_safe("<br/>==============<br/>".join( template_order_staff_mail)), }) if repanier.apps.REPANIER_SETTINGS_CUSTOMERS_MUST_CONFIRM_ORDERS or DeliveryBoard.objects.filter( permanence_id=permanence.id, status__gt=PERMANENCE_OPENED).order_by('?').exists(): # /!\ If one delivery point has been closed, I may not close anymore by producer: producer_invoices = ProducerInvoice.objects.none() else: producer_invoices = ProducerInvoice.objects.filter( Q(permanence_id=permanence.id, status=PERMANENCE_OPENED, producer__represent_this_buyinggroup=False) | Q(permanence_id=permanence.id, status=PERMANENCE_CLOSED, producer__represent_this_buyinggroup=False)).order_by( "producer") return render( request, 'repanier/confirm_admin_send_order.html', { 'sub_title': _("Please, confirm the action : send orders"), 'action_checkbox_name': admin.ACTION_CHECKBOX_NAME, 'action': 'send_order', 'permanence': permanence, 'deliveries': DeliveryBoard.objects.filter( permanence_id=permanence.id, status__in=[PERMANENCE_OPENED, PERMANENCE_CLOSED ]).order_by("id"), 'producer_invoices': producer_invoices, 'form': form, 'order_customer_email_will_be_sent': order_customer_email_will_be_sent, 'order_customer_email_will_be_sent_to': order_customer_email_will_be_sent_to, 'order_producer_email_will_be_sent': order_producer_email_will_be_sent, 'order_producer_email_will_be_sent_to': order_producer_email_will_be_sent_to, 'order_board_email_will_be_sent': order_board_email_will_be_sent, 'order_board_email_will_be_sent_to': order_board_email_will_be_sent_to })
def send_invoices(self, request, queryset): if "cancel" in request.POST: user_message = _("Action canceled by the user.") user_message_level = messages.INFO self.message_user(request, user_message, user_message_level) return None permanence = queryset.order_by("?").first() if permanence is None or permanence.status != PERMANENCE_DONE: user_message = _("Action canceled by the system.") user_message_level = messages.ERROR self.message_user(request, user_message, user_message_level) return None template = Template(repanier.apps.REPANIER_SETTINGS_CONFIG.invoice_customer_mail) try: invoice_description = permanence.invoice_description except TranslationDoesNotExist: invoice_description = EMPTY_STRING sender_email, sender_function, signature, cc_email_staff = get_signature(is_reply_to_invoice_email=True) # TODO : Align on tools.payment_message customer_order_amount = _("The amount of your order is %(amount)s.") % {"amount": RepanierMoney(123.45)} customer_last_balance = _("The balance of your account as of %(date)s is %(balance)s.") % { "date": timezone.now().strftime(settings.DJANGO_SETTINGS_DATE), "balance": RepanierMoney(123.45), } customer_payment_needed = '%s %s %s (%s) %s "%s".' % ( _("Please pay"), RepanierMoney(123.45), _("to the bank account number"), repanier.apps.REPANIER_SETTINGS_BANK_ACCOUNT, _("with communication"), _("short_basket_name"), ) context = TemplateContext( { "name": _("long_basket_name"), "long_basket_name": _("long_basket_name"), "basket_name": _("short_basket_name"), "short_basket_name": _("short_basket_name"), "permanence_link": mark_safe('<a href=#">%s</a>' % permanence), "last_balance_link": mark_safe('<a href="#">%s</a>' % customer_last_balance), "last_balance": customer_last_balance, "order_amount": mark_safe(customer_order_amount), "payment_needed": mark_safe(customer_payment_needed), "invoice_description": mark_safe(invoice_description), "signature": mark_safe( "%s<br/>%s<br/>%s" % (signature, sender_function, repanier.apps.REPANIER_SETTINGS_GROUP_NAME) ), } ) template_invoice_customer_mail = template.render(context) invoice_customer_email_will_be_sent, invoice_customer_email_will_be_sent_to = send_email_to_who( repanier.apps.REPANIER_SETTINGS_SEND_INVOICE_MAIL_TO_CUSTOMER ) template = Template(repanier.apps.REPANIER_SETTINGS_CONFIG.invoice_producer_mail) context = TemplateContext( { "name": _("long_profile_name"), "long_profile_name": _("long_profile_name"), "permanence_link": mark_safe('<a href=#">%s</a>' % permanence), "signature": mark_safe( "%s<br/>%s<br/>%s" % (signature, sender_function, repanier.apps.REPANIER_SETTINGS_GROUP_NAME) ), } ) template_invoice_producer_mail = template.render(context) invoice_producer_email_will_be_sent, invoice_producer_email_will_be_sent_to = send_email_to_who( repanier.apps.REPANIER_SETTINGS_SEND_INVOICE_MAIL_TO_PRODUCER ) if "apply" in request.POST: form = InvoiceOrderForm(request.POST) if form.is_valid(): user_message, user_message_level = task_invoice.admin_send(permanence.id) self.message_user(request, user_message, user_message_level) return HttpResponseRedirect(request.get_full_path()) else: form = InvoiceOrderForm( initial={ "template_invoice_customer_mail": mark_safe(template_invoice_customer_mail), "template_invoice_producer_mail": mark_safe(template_invoice_producer_mail), } ) return render( request, "repanier/confirm_admin_send_invoice.html", { "sub_title": _("Please, confirm the action : send invoices"), "action_checkbox_name": admin.ACTION_CHECKBOX_NAME, "action": "send_invoices", "permanence": permanence, "form": form, "invoice_customer_email_will_be_sent": invoice_customer_email_will_be_sent, "invoice_customer_email_will_be_sent_to": invoice_customer_email_will_be_sent_to, "invoice_producer_email_will_be_sent": invoice_producer_email_will_be_sent, "invoice_producer_email_will_be_sent_to": invoice_producer_email_will_be_sent_to, }, )
def send_invoices(self, request, permanence_qs): if 'cancel' in request.POST: user_message = _("Action canceled by the user.") user_message_level = messages.INFO self.message_user(request, user_message, user_message_level) return permanence = permanence_qs.first() if permanence is None or permanence.status != PERMANENCE_INVOICED: user_message = _("Action canceled by the system.") user_message_level = messages.ERROR self.message_user(request, user_message, user_message_level) return template = Template( repanier.apps.REPANIER_SETTINGS_CONFIG.invoice_customer_mail) invoice_description = permanence.safe_translation_getter( 'invoice_description', any_language=True, default=EMPTY_STRING) sender_email, sender_function, signature, cc_email_staff = get_signature( is_reply_to_invoice_email=True) # TODO : Align on tools.payment_message customer_order_amount = \ _('The amount of your order is %(amount)s.') % { 'amount': RepanierMoney(123.45) } customer_last_balance = \ _('The balance of your account as of %(date)s is %(balance)s.') % { 'date' : timezone.now().strftime(settings.DJANGO_SETTINGS_DATE), 'balance': RepanierMoney(123.45) } customer_payment_needed = "%s %s %s (%s) %s \"%s\"." % ( _('Please pay'), RepanierMoney(123.45), _('to the bank account number'), repanier.apps.REPANIER_SETTINGS_BANK_ACCOUNT, _('with communication'), _('short_basket_name')) context = TemplateContext({ 'name': _('long_basket_name'), 'long_basket_name': _('long_basket_name'), 'basket_name': _('short_basket_name'), 'short_basket_name': _('short_basket_name'), 'permanence_link': mark_safe('<a href=#">%s</a>' % permanence), 'last_balance_link': mark_safe('<a href="#">%s</a>' % customer_last_balance), 'last_balance': customer_last_balance, 'order_amount': mark_safe(customer_order_amount), 'payment_needed': mark_safe(customer_payment_needed), 'invoice_description': mark_safe(invoice_description), 'signature': mark_safe('%s<br/>%s<br/>%s' % (signature, sender_function, repanier.apps.REPANIER_SETTINGS_GROUP_NAME)), }) template_invoice_customer_mail = template.render(context) invoice_customer_email_will_be_sent, invoice_customer_email_will_be_sent_to = send_email_to_who( repanier.apps.REPANIER_SETTINGS_SEND_INVOICE_MAIL_TO_CUSTOMER) template = Template( repanier.apps.REPANIER_SETTINGS_CONFIG.invoice_producer_mail) context = TemplateContext({ 'name': _('long_profile_name'), 'long_profile_name': _('long_profile_name'), 'permanence_link': mark_safe('<a href=#">%s</a>' % permanence), 'signature': mark_safe('%s<br/>%s<br/>%s' % (signature, sender_function, repanier.apps.REPANIER_SETTINGS_GROUP_NAME)), }) template_invoice_producer_mail = template.render(context) invoice_producer_email_will_be_sent, invoice_producer_email_will_be_sent_to = send_email_to_who( repanier.apps.REPANIER_SETTINGS_SEND_INVOICE_MAIL_TO_PRODUCER) if 'apply' in request.POST: form = InvoiceOrderForm(request.POST) if form.is_valid(): user_message, user_message_level = task_invoice.admin_send( permanence) self.message_user(request, user_message, user_message_level) return HttpResponseRedirect(request.get_full_path()) else: form = InvoiceOrderForm( initial={ 'template_invoice_customer_mail': mark_safe(template_invoice_customer_mail), 'template_invoice_producer_mail': mark_safe(template_invoice_producer_mail), }) return render( request, 'repanier/confirm_admin_send_invoice.html', { 'sub_title': _("Please, confirm the action : send invoices"), 'action_checkbox_name': admin.ACTION_CHECKBOX_NAME, 'action': 'send_invoices', 'permanence': permanence, 'form': form, 'invoice_customer_email_will_be_sent': invoice_customer_email_will_be_sent, 'invoice_customer_email_will_be_sent_to': invoice_customer_email_will_be_sent_to, 'invoice_producer_email_will_be_sent': invoice_producer_email_will_be_sent, 'invoice_producer_email_will_be_sent_to': invoice_producer_email_will_be_sent_to })
def close_and_send_order(self, request, queryset): if 'cancel' in request.POST: user_message = _("Action canceled by the user.") user_message_level = messages.INFO self.message_user(request, user_message, user_message_level) return permanence = queryset.first() if permanence.status not in [PERMANENCE_OPENED, PERMANENCE_CLOSED]: user_message = _("The status of %(permanence)s prohibit you to perform this action.") % { 'permanence': permanence} user_message_level = messages.ERROR self.message_user(request, user_message, user_message_level) return only_deliveries = permanence.with_delivery_point if 'apply' in request.POST: all_deliveries = True if request.POST.get("all-deliveries", False) else False deliveries_to_be_send = request.POST.getlist("deliveries", []) all_producers = True if request.POST.get("all-producers", False) else False producers_to_be_send = request.POST.getlist("producers", []) if only_deliveries: if not all_deliveries and len(deliveries_to_be_send) == 0: user_message = _("You must select at least one delivery point.") user_message_level = messages.WARNING self.message_user(request, user_message, user_message_level) return else: if not all_producers and len(producers_to_be_send) == 0: user_message = _("You must select at least one producer.") user_message_level = messages.WARNING self.message_user(request, user_message, user_message_level) return if not all_producers and settings.REPANIER_SETTINGS_CUSTOMER_MUST_CONFIRM_ORDER: user_message = _("You must select all producers because the customers must confirm orders.") user_message_level = messages.WARNING self.message_user(request, user_message, user_message_level) return everything = all_producers or all_deliveries # close_and_send_order(permanence.id, everything, producers_to_be_send, deliveries_to_be_send) t = threading.Thread(target=close_and_send_order, args=(permanence.id, everything, producers_to_be_send, deliveries_to_be_send)) t.start() user_message = _("The orders are being send.") user_message_level = messages.INFO self.message_user(request, user_message, user_message_level) return template_order_customer_mail = [] template_order_producer_mail = [] template_order_staff_mail = [] cur_language = translation.get_language() for language in settings.PARLER_LANGUAGES[settings.SITE_ID]: language_code = language["code"] translation.activate(language_code) template = Template(repanier.apps.REPANIER_SETTINGS_CONFIG.order_customer_mail) staff = Staff.get_or_create_order_responsible() customer_last_balance = \ _('The balance of your account as of %(date)s is %(balance)s.') % { 'date': timezone.now().strftime(settings.DJANGO_SETTINGS_DATE), 'balance': RepanierMoney(123.45) } customer_on_hold_movement = \ _( 'This balance does not take account of any unrecognized payments %(bank)s and any unbilled order %(other_order)s.') \ % { 'bank': RepanierMoney(123.45), 'other_order': RepanierMoney(123.45) } bank_account_number = repanier.apps.REPANIER_SETTINGS_BANK_ACCOUNT if bank_account_number is not None: group_name = repanier.apps.REPANIER_SETTINGS_GROUP_NAME if permanence.short_name: communication = "{} ({})".format(_('Short name'), permanence.short_name) else: communication = _('Short name') customer_payment_needed = "<font color=\"#bd0926\">{}</font>".format( _( 'Please pay %(payment)s to the bank account %(name)s %(number)s with communication %(communication)s.') % { 'payment': RepanierMoney(123.45), 'name': group_name, 'number': bank_account_number, 'communication': communication } ) else: customer_payment_needed = EMPTY_STRING context = TemplateContext({ 'name': _('Long name'), 'long_basket_name': _('Long name'), 'basket_name': _('Short name'), 'short_basket_name': _('Short name'), 'permanence_link': mark_safe("<a href=\"#\">{}</a>".format(permanence)), 'last_balance': mark_safe("<a href=\"#\">{}</a>".format(customer_last_balance)), 'order_amount': RepanierMoney(123.45), 'on_hold_movement': mark_safe(customer_on_hold_movement), 'payment_needed': mark_safe(customer_payment_needed), 'delivery_point': _('Delivery point').upper(), 'signature': staff.get_html_signature, }) template_order_customer_mail.append(language_code) template_order_customer_mail.append(template.render(context)) template = Template(repanier.apps.REPANIER_SETTINGS_CONFIG.order_producer_mail) context = TemplateContext({ 'name': _('Long name'), 'long_profile_name': _('Long name'), 'order_empty': False, 'duplicate': True, 'permanence_link': format_html("<a href=\"#\">{}</a>", permanence), 'signature': staff.get_html_signature, }) template_order_producer_mail.append(language_code) template_order_producer_mail.append(template.render(context)) board_composition, board_composition_and_description = get_board_composition(permanence.id) template = Template(repanier.apps.REPANIER_SETTINGS_CONFIG.order_staff_mail) context = TemplateContext({ 'permanence_link': format_html("<a href=\"#\">{}</a>", permanence), 'board_composition': mark_safe(board_composition), 'board_composition_and_description': mark_safe(board_composition_and_description), 'signature': staff.get_html_signature, }) template_order_staff_mail.append(language_code) template_order_staff_mail.append(template.render(context)) translation.activate(cur_language) order_customer_email_will_be_sent, order_customer_email_will_be_sent_to = send_email_to_who() order_producer_email_will_be_sent, order_producer_email_will_be_sent_to = send_email_to_who() order_board_email_will_be_sent, order_board_email_will_be_sent_to = send_email_to_who( repanier.apps.REPANIER_SETTINGS_SEND_ORDER_MAIL_TO_BOARD, board=True ) form = CloseAndSendOrderForm( initial={ 'template_order_customer_mail': mark_safe( "<br>==============<br>".join(template_order_customer_mail)), 'template_order_producer_mail': mark_safe( "<br>==============<br>".join(template_order_producer_mail)), 'template_order_staff_mail': mark_safe("<br>==============<br>".join(template_order_staff_mail)), } ) if only_deliveries: # /!\ If one delivery point has been closed, I may not close anymore by producer producers = Producer.objects.none() deliveries = DeliveryBoard.objects.filter( permanence_id=permanence.id, status__in=[PERMANENCE_OPENED, PERMANENCE_CLOSED] ) else: producers = Producer.objects.filter( producerinvoice__permanence_id=permanence.id, producerinvoice__status__in=[PERMANENCE_OPENED, PERMANENCE_CLOSED] ) deliveries = DeliveryBoard.objects.none() return render( request, 'repanier/confirm_admin_send_order.html', { 'sub_title': _("Please, confirm the action : send orders"), 'action_checkbox_name': admin.ACTION_CHECKBOX_NAME, 'action': 'close_and_send_order', 'permanence': permanence, 'only_deliveries': only_deliveries, 'deliveries': deliveries, 'producers': producers, 'form': form, 'order_customer_email_will_be_sent': order_customer_email_will_be_sent, 'order_customer_email_will_be_sent_to': order_customer_email_will_be_sent_to, 'order_producer_email_will_be_sent': order_producer_email_will_be_sent, 'order_producer_email_will_be_sent_to': order_producer_email_will_be_sent_to, 'order_board_email_will_be_sent': order_board_email_will_be_sent, 'order_board_email_will_be_sent_to': order_board_email_will_be_sent_to })
def open_and_send_offer(self, request, queryset): if 'cancel' in request.POST: user_message = _("Action canceled by the user.") user_message_level = messages.INFO self.message_user(request, user_message, user_message_level) return permanence = queryset.first() if permanence.status not in [PERMANENCE_PLANNED, PERMANENCE_PRE_OPEN]: user_message = _("The status of %(permanence)s prohibit you to perform this action.") % { 'permanence': permanence} user_message_level = messages.ERROR self.message_user(request, user_message, user_message_level) return pre_open = (permanence.status == PERMANENCE_PLANNED) and Producer.objects.filter( permanence__id=permanence.id, is_active=True, producer_pre_opening=True ).order_by('?').exists() if pre_open: template_offer_mail = [] template_cancel_order_mail = [] cur_language = translation.get_language() for language in settings.PARLER_LANGUAGES[settings.SITE_ID]: language_code = language["code"] translation.activate(language_code) with switch_language(repanier.apps.REPANIER_SETTINGS_CONFIG, language_code): template = Template(repanier.apps.REPANIER_SETTINGS_CONFIG.offer_producer_mail) staff = Staff.get_or_create_order_responsible() with switch_language(permanence, language_code): offer_description = permanence.safe_translation_getter( 'offer_description', any_language=True, default=EMPTY_STRING ) context = TemplateContext({ 'name': _('Long name'), 'long_profile_name': _('Long name'), 'permanence_link': mark_safe("<a href=\"#\">{}</a>".format(_("Offers"))), 'offer_description': mark_safe(offer_description), 'offer_link': mark_safe("<a href=\"#\">{}</a>".format(_("Offers"))), 'signature': staff.get_html_signature, }) template_offer_mail.append(language_code) template_offer_mail.append(template.render(context)) translation.activate(cur_language) email_will_be_sent, email_will_be_sent_to = send_email_to_who(True) else: template_offer_mail = [] template_cancel_order_mail = [] cur_language = translation.get_language() for language in settings.PARLER_LANGUAGES[settings.SITE_ID]: language_code = language["code"] translation.activate(language_code) with switch_language(repanier.apps.REPANIER_SETTINGS_CONFIG, language_code): template = Template(repanier.apps.REPANIER_SETTINGS_CONFIG.offer_customer_mail) staff = Staff.get_or_create_order_responsible() with switch_language(permanence, language_code): offer_description = permanence.safe_translation_getter( 'offer_description', any_language=True, default=EMPTY_STRING ) offer_producer = ', '.join([p.short_profile_name for p in permanence.producers.all()]) qs = Product.objects.filter( producer=permanence.producers.first(), is_into_offer=True, order_unit__lt=PRODUCT_ORDER_UNIT_DEPOSIT # Don't display technical products. ).order_by( "translations__long_name" )[:5] offer_detail = "<ul>{}</ul>".format("".join("<li>{}, {}</li>".format( p.get_long_name(), p.producer.short_profile_name ) for p in qs ), ) context = TemplateContext({ 'offer_description': mark_safe(offer_description), 'offer_detail': offer_detail, 'offer_recent_detail': offer_detail, 'offer_producer': offer_producer, 'permanence_link': mark_safe("<a href=\"#\">{}</a>".format(permanence)), 'signature': staff.get_html_signature, }) template_offer_mail.append(language_code) template_offer_mail.append(template.render(context)) if settings.REPANIER_SETTINGS_CUSTOMER_MUST_CONFIRM_ORDER: context = TemplateContext({ 'name': _('Long name'), 'long_basket_name': _('Long name'), 'basket_name': _('Short name'), 'short_basket_name': _('Short name'), 'permanence_link': mark_safe("<a href=\"#\">{}</a>".format(permanence)), 'signature': staff.get_html_signature, }) template_cancel_order_mail.append(language_code) template_cancel_order_mail.append(template.render(context)) translation.activate(cur_language) email_will_be_sent, email_will_be_sent_to = send_email_to_who() if 'apply' in request.POST or 'apply-wo-mail' in request.POST: form = OpenAndSendOfferForm(request.POST) if form.is_valid(): do_not_send_any_mail = 'apply-wo-mail' in request.POST if pre_open: permanence_already_pre_opened = Permanence.objects.filter( status__in=[PERMANENCE_WAIT_FOR_PRE_OPEN, PERMANENCE_PRE_OPEN] ).order_by("-is_updated_on").only("id").first() if permanence_already_pre_opened is not None: user_message = _("A maximum of one permanence may be pre opened.") user_message_level = messages.ERROR else: # pre_open_order(permanence.id) t = threading.Thread(target=pre_open_order, args=(permanence.id,)) t.start() user_message = _("The offers are being generated.") user_message_level = messages.INFO else: # open_order(permanence.id, do_not_send_any_mail) t = threading.Thread(target=open_order, args=(permanence.id, do_not_send_any_mail)) t.start() user_message = _("The offers are being generated.") user_message_level = messages.INFO self.message_user(request, user_message, user_message_level) return HttpResponseRedirect(request.get_full_path()) else: form = OpenAndSendOfferForm( initial={ 'template_offer_customer_mail': mark_safe( "<br>==============<br>".join(template_offer_mail)), 'template_cancel_order_customer_mail': mark_safe( "<br>==============<br>".join(template_cancel_order_mail)), } ) return render( request, 'repanier/confirm_admin_open_and_send_offer.html', { 'sub_title': _("Please, confirm the action : open and send offers"), 'action_checkbox_name': admin.ACTION_CHECKBOX_NAME, 'action': 'open_and_send_offer', 'permanence': permanence, 'pre_open': pre_open, 'form': form, 'email_will_be_sent': email_will_be_sent, 'email_will_be_sent_to': email_will_be_sent_to })
def send_invoices(self, request, permanence_qs): if 'cancel' in request.POST: user_message = _("Action canceled by the user.") user_message_level = messages.INFO self.message_user(request, user_message, user_message_level) return permanence = permanence_qs.first() if permanence.status != PERMANENCE_INVOICED: user_message = _("The status of %(permanence)s prohibit you to perform this action.") % { 'permanence': permanence} user_message_level = messages.ERROR self.message_user(request, user_message, user_message_level) return template = Template(repanier.apps.REPANIER_SETTINGS_CONFIG.invoice_customer_mail) invoice_description = permanence.safe_translation_getter( 'invoice_description', any_language=True, default=EMPTY_STRING ) staff = Staff.get_or_create_invoice_responsible() # TODO : Align on tools.payment_message customer_order_amount = \ _('The amount of your order is %(amount)s.') % { 'amount': RepanierMoney(123.45) } customer_last_balance = \ _('The balance of your account as of %(date)s is %(balance)s.') % { 'date': timezone.now().strftime(settings.DJANGO_SETTINGS_DATE), 'balance': RepanierMoney(123.45) } customer_payment_needed = "{} {} {} ({}) {} \"{}\".".format( _('Please pay'), RepanierMoney(123.45), _('to the bank account number'), repanier.apps.REPANIER_SETTINGS_BANK_ACCOUNT, _('with communication'), _('Short name')) context = TemplateContext({ 'name': _('Long name'), 'long_basket_name': _('Long name'), 'basket_name': _('Short name'), 'short_basket_name': _('Short name'), 'permanence_link': mark_safe("<a href=\"#\">{}</a>".format(permanence)), 'last_balance_link': mark_safe("<a href=\"#\">{}</a>".format(customer_last_balance)), 'last_balance': customer_last_balance, 'order_amount': mark_safe(customer_order_amount), 'payment_needed': mark_safe(customer_payment_needed), 'invoice_description': mark_safe(invoice_description), 'signature': staff.get_html_signature, }) template_invoice_customer_mail = template.render(context) invoice_customer_email_will_be_sent, invoice_customer_email_will_be_sent_to = send_email_to_who( repanier.apps.REPANIER_SETTINGS_SEND_INVOICE_MAIL_TO_CUSTOMER ) template = Template(repanier.apps.REPANIER_SETTINGS_CONFIG.invoice_producer_mail) context = TemplateContext({ 'name': _('Long name'), 'long_profile_name': _('Long name'), 'permanence_link': mark_safe("<a href=\"#\">{}</a>".format(permanence)), 'signature': staff.get_html_signature, }) template_invoice_producer_mail = template.render(context) invoice_producer_email_will_be_sent, invoice_producer_email_will_be_sent_to = send_email_to_who( repanier.apps.REPANIER_SETTINGS_SEND_INVOICE_MAIL_TO_PRODUCER ) if 'apply' in request.POST: form = InvoiceOrderForm(request.POST) if form.is_valid(): t = threading.Thread(target=email_invoice.send_invoice, args=(permanence.id,)) t.start() user_message = _("Emails containing the invoices will be send to the customers and the producers.") user_message_level = messages.INFO self.message_user(request, user_message, user_message_level) return HttpResponseRedirect(request.get_full_path()) else: form = InvoiceOrderForm( initial={ 'template_invoice_customer_mail': mark_safe(template_invoice_customer_mail), 'template_invoice_producer_mail': mark_safe(template_invoice_producer_mail), } ) return render( request, 'repanier/confirm_admin_send_invoice.html', { 'sub_title': _("Please, confirm the action : send invoices"), 'action_checkbox_name': admin.ACTION_CHECKBOX_NAME, 'action': 'send_invoices', 'permanence': permanence, 'form': form, 'invoice_customer_email_will_be_sent': invoice_customer_email_will_be_sent, 'invoice_customer_email_will_be_sent_to': invoice_customer_email_will_be_sent_to, 'invoice_producer_email_will_be_sent': invoice_producer_email_will_be_sent, 'invoice_producer_email_will_be_sent_to': invoice_producer_email_will_be_sent_to })
def send_order(self, request, queryset): if 'cancel' in request.POST: user_message = _("Action canceled by the user.") user_message_level = messages.INFO self.message_user(request, user_message, user_message_level) return None permanence = queryset.order_by('?').first() if permanence is None or permanence.status not in [PERMANENCE_OPENED, PERMANENCE_CLOSED]: user_message = _("Action canceled by the system.") user_message_level = messages.ERROR self.message_user(request, user_message, user_message_level) return None if 'apply' in request.POST: deliveries_to_be_send = [] producers_to_be_send = [] producer_qs = Producer.objects.filter(permanence=permanence.id) if "deliveries" in request.POST: deliveries_to_be_send = request.POST.getlist("deliveries") if len(deliveries_to_be_send) == 0: user_message = _("You must select at least one delivery point.") user_message_level = messages.WARNING self.message_user(request, user_message, user_message_level) return None all_producers = "all-producer-invoices" in request.POST producers_invoices_to_be_send = [] if "producer-invoices" in request.POST: producers_invoices_to_be_send = request.POST.getlist("producer-invoices") if not all_producers and len(producers_invoices_to_be_send) == 0: user_message = _("You must select at least one producer.") user_message_level = messages.WARNING self.message_user(request, user_message, user_message_level) return None producer_qs = producer_qs.filter( producerinvoice__in=producers_invoices_to_be_send) for producer in producer_qs.only("id").order_by('?'): producers_to_be_send.append(producer.id) user_message, user_message_level = task_order.admin_send( permanence_id=permanence.id, all_producers=all_producers, deliveries_id=deliveries_to_be_send, producers_id=producers_to_be_send ) self.message_user(request, user_message, user_message_level) return None template_order_customer_mail = [] template_order_producer_mail = [] template_order_staff_mail = [] cur_language = translation.get_language() for language in settings.PARLER_LANGUAGES[settings.SITE_ID]: language_code = language["code"] translation.activate(language_code) template = Template(repanier.apps.REPANIER_SETTINGS_CONFIG.order_customer_mail) sender_email, sender_function, signature, cc_email_staff = get_signature(is_reply_to_order_email=True) customer_last_balance = \ _('The balance of your account as of %(date)s is %(balance)s.') % { 'date' : timezone.now().strftime(settings.DJANGO_SETTINGS_DATE), 'balance': RepanierMoney(123.45) } customer_on_hold_movement = \ _( 'This balance does not take account of any unrecognized payments %(bank)s and any unbilled order %(other_order)s.') \ % { 'bank' : RepanierMoney(123.45), 'other_order': RepanierMoney(123.45) } bank_account_number = repanier.apps.REPANIER_SETTINGS_BANK_ACCOUNT if bank_account_number is not None: group_name = repanier.apps.REPANIER_SETTINGS_GROUP_NAME if permanence.short_name: communication = "%s (%s)" % (_('short_basket_name'), permanence.short_name) else: communication = _('short_basket_name') customer_payment_needed = '<font color="#bd0926">%s</font>' % ( _( 'Please pay %(payment)s to the bank account %(name)s %(number)s with communication %(communication)s.') % { 'payment' : RepanierMoney(123.45), 'name' : group_name, 'number' : bank_account_number, 'communication': communication } ) else: customer_payment_needed = EMPTY_STRING context = TemplateContext({ 'name' : _('long_basket_name'), 'long_basket_name' : _('long_basket_name'), 'basket_name' : _('short_basket_name'), 'short_basket_name': _('short_basket_name'), 'permanence_link' : mark_safe('<a href=#">%s</a>' % permanence), 'last_balance' : mark_safe('<a href="#">%s</a>' % customer_last_balance), 'order_amount' : RepanierMoney(123.45), 'on_hold_movement' : mark_safe(customer_on_hold_movement), 'payment_needed' : mark_safe(customer_payment_needed), 'delivery_point' : _('delivery point').upper(), 'signature' : mark_safe( '%s<br/>%s<br/>%s' % (signature, sender_function, repanier.apps.REPANIER_SETTINGS_GROUP_NAME)), }) template_order_customer_mail.append(language_code) template_order_customer_mail.append(template.render(context)) template = Template(repanier.apps.REPANIER_SETTINGS_CONFIG.order_producer_mail) context = TemplateContext({ 'name' : _('long_profile_name'), 'long_profile_name': _('long_profile_name'), 'order_empty' : False, 'duplicate' : True, 'permanence_link' : mark_safe('<a href=#">%s</a>' % permanence), 'signature' : mark_safe( '%s<br/>%s<br/>%s' % (signature, sender_function, repanier.apps.REPANIER_SETTINGS_GROUP_NAME)), }) template_order_producer_mail.append(language_code) template_order_producer_mail.append(template.render(context)) board_composition, board_composition_and_description = get_board_composition(permanence.id) template = Template(repanier.apps.REPANIER_SETTINGS_CONFIG.order_staff_mail) context = TemplateContext({ 'permanence_link' : mark_safe('<a href=#">%s</a>' % permanence), 'board_composition' : mark_safe(board_composition), 'board_composition_and_description': mark_safe(board_composition_and_description), 'signature' : mark_safe( '%s<br/>%s<br/>%s' % (signature, sender_function, repanier.apps.REPANIER_SETTINGS_GROUP_NAME)), }) template_order_staff_mail.append(language_code) template_order_staff_mail.append(template.render(context)) translation.activate(cur_language) order_customer_email_will_be_sent, order_customer_email_will_be_sent_to = send_email_to_who( repanier.apps.REPANIER_SETTINGS_SEND_ORDER_MAIL_TO_CUSTOMER ) order_producer_email_will_be_sent, order_producer_email_will_be_sent_to = send_email_to_who( repanier.apps.REPANIER_SETTINGS_SEND_ORDER_MAIL_TO_PRODUCER ) order_board_email_will_be_sent, order_board_email_will_be_sent_to = send_email_to_who( repanier.apps.REPANIER_SETTINGS_SEND_ORDER_MAIL_TO_BOARD, board=True ) form = CloseAndSendOrderForm( initial={ 'template_order_customer_mail': mark_safe("<br/>==============<br/>".join(template_order_customer_mail)), 'template_order_producer_mail': mark_safe("<br/>==============<br/>".join(template_order_producer_mail)), 'template_order_staff_mail' : mark_safe("<br/>==============<br/>".join(template_order_staff_mail)), } ) if repanier.apps.REPANIER_SETTINGS_CUSTOMERS_MUST_CONFIRM_ORDERS or DeliveryBoard.objects.filter( permanence_id=permanence.id, status__gt=PERMANENCE_OPENED ).order_by('?').exists(): # /!\ If one delivery point has been closed, I may not close anymore by producer: producer_invoices = ProducerInvoice.objects.none() else: producer_invoices = ProducerInvoice.objects.filter( Q( permanence=permanence.id, status=PERMANENCE_OPENED, producer__represent_this_buyinggroup=False ) | Q( permanence=permanence.id, status=PERMANENCE_CLOSED, producer__represent_this_buyinggroup=False ) ).order_by("producer") return render( request, 'repanier/confirm_admin_send_order.html', { 'sub_title' : _("Please, confirm the action : send orders"), 'action_checkbox_name' : admin.ACTION_CHECKBOX_NAME, 'action' : 'send_order', 'permanence' : permanence, 'deliveries' : DeliveryBoard.objects.filter( permanence_id=permanence.id, status__in=[PERMANENCE_OPENED, PERMANENCE_CLOSED] ).order_by("id"), 'producer_invoices' : producer_invoices, 'form' : form, 'order_customer_email_will_be_sent' : order_customer_email_will_be_sent, 'order_customer_email_will_be_sent_to': order_customer_email_will_be_sent_to, 'order_producer_email_will_be_sent' : order_producer_email_will_be_sent, 'order_producer_email_will_be_sent_to': order_producer_email_will_be_sent_to, 'order_board_email_will_be_sent' : order_board_email_will_be_sent, 'order_board_email_will_be_sent_to' : order_board_email_will_be_sent_to })
def open_and_send_offer(self, request, queryset): if 'cancel' in request.POST: user_message = _("Action canceled by the user.") user_message_level = messages.INFO self.message_user(request, user_message, user_message_level) return None permanence = queryset.order_by('?').first() if permanence is None or not (PERMANENCE_PLANNED <= permanence.status <= PERMANENCE_WAIT_FOR_OPEN): user_message = _("Action canceled by the system.") user_message_level = messages.ERROR self.message_user(request, user_message, user_message_level) return None pre_open = (permanence.status == PERMANENCE_PLANNED) and Producer.objects.filter( permanence__id=permanence.id, is_active=True, producer_pre_opening=True ).order_by('?').exists() if pre_open: template_offer_mail = [] template_cancel_order_mail = [] cur_language = translation.get_language() for language in settings.PARLER_LANGUAGES[settings.SITE_ID]: language_code = language["code"] translation.activate(language_code) with switch_language(repanier.apps.REPANIER_SETTINGS_CONFIG, language_code): template = Template(repanier.apps.REPANIER_SETTINGS_CONFIG.offer_producer_mail) sender_email, sender_function, signature, cc_email_staff = get_signature(is_reply_to_order_email=True) with switch_language(permanence, language_code): try: offer_description = permanence.offer_description except TranslationDoesNotExist: offer_description = EMPTY_STRING context = TemplateContext({ 'name' : _('long_profile_name'), 'long_profile_name': _('long_profile_name'), 'permanence_link' : mark_safe('<a href="#">%s</a>' % _("offer")), 'offer_description': mark_safe(offer_description), 'offer_link' : mark_safe('<a href="#">%s</a>' % _("offer")), 'signature' : mark_safe( '%s<br/>%s<br/>%s' % (signature, sender_function, repanier.apps.REPANIER_SETTINGS_GROUP_NAME)), }) template_offer_mail.append(language_code) template_offer_mail.append(template.render(context)) translation.activate(cur_language) email_will_be_sent, email_will_be_sent_to = send_email_to_who(True) else: template_offer_mail = [] template_cancel_order_mail = [] cur_language = translation.get_language() for language in settings.PARLER_LANGUAGES[settings.SITE_ID]: language_code = language["code"] translation.activate(language_code) with switch_language(repanier.apps.REPANIER_SETTINGS_CONFIG, language_code): template = Template(repanier.apps.REPANIER_SETTINGS_CONFIG.offer_customer_mail) sender_email, sender_function, signature, cc_email_staff = get_signature(is_reply_to_order_email=True) with switch_language(permanence, language_code): try: offer_description = permanence.offer_description except TranslationDoesNotExist: offer_description = EMPTY_STRING offer_producer = ', '.join([p.short_profile_name for p in permanence.producers.all()]) qs = Product.objects.filter( producer=permanence.producers.first(), is_into_offer=True, order_unit__lt=PRODUCT_ORDER_UNIT_DEPOSIT # Don't display technical products. ).order_by( "translations__long_name" )[:5] offer_detail = '<ul>%s</ul>' % ("".join('<li>%s, %s</li>' % ( p.get_long_name(box_unicode=EMPTY_STRING), p.producer.short_profile_name ) for p in qs ),) context = TemplateContext({ 'offer_description': mark_safe(offer_description), 'offer_detail' : offer_detail, 'offer_producer' : offer_producer, 'permanence_link' : mark_safe('<a href="#">%s</a>' % permanence), 'signature' : mark_safe( '%s<br/>%s<br/>%s' % (signature, sender_function, repanier.apps.REPANIER_SETTINGS_GROUP_NAME)), }) template_offer_mail.append(language_code) template_offer_mail.append(template.render(context)) if repanier.apps.REPANIER_SETTINGS_CUSTOMERS_MUST_CONFIRM_ORDERS: context = TemplateContext({ 'name' : _('long_basket_name'), 'long_basket_name' : _('long_basket_name'), 'basket_name' : _('short_basket_name'), 'short_basket_name': _('short_basket_name'), 'permanence_link' : mark_safe('<a href=#">%s</a>' % permanence), 'signature' : mark_safe( '%s<br/>%s<br/>%s' % (signature, sender_function, repanier.apps.REPANIER_SETTINGS_GROUP_NAME)), }) template_cancel_order_mail.append(language_code) template_cancel_order_mail.append(template.render(context)) translation.activate(cur_language) email_will_be_sent, email_will_be_sent_to = send_email_to_who( repanier.apps.REPANIER_SETTINGS_SEND_OPENING_MAIL_TO_CUSTOMER ) if 'apply' in request.POST: form = OpenAndSendOfferForm(request.POST) if form.is_valid(): user_message, user_message_level = task_order.admin_open_and_send( request, permanence ) self.message_user(request, user_message, user_message_level) return HttpResponseRedirect(request.get_full_path()) else: form = OpenAndSendOfferForm( initial={ 'template_offer_customer_mail': mark_safe("<br/>==============<br/>".join(template_offer_mail)), 'template_cancel_order_customer_mail': mark_safe("<br/>==============<br/>".join(template_cancel_order_mail)), } ) return render( request, 'repanier/confirm_admin_open_and_send_offer.html', { 'sub_title' : _("Please, confirm the action : open and send offers"), 'action_checkbox_name' : admin.ACTION_CHECKBOX_NAME, 'action' : 'open_and_send_offer', 'permanence' : permanence, 'pre_open' : pre_open, 'form' : form, 'email_will_be_sent' : email_will_be_sent, 'email_will_be_sent_to': email_will_be_sent_to })