def preview_invoices(self, request, permanence_qs): valid_permanence_qs = permanence_qs.filter( status__in=[PERMANENCE_INVOICED, PERMANENCE_ARCHIVED]) wb = None first = True for permanence in valid_permanence_qs: if first: wb = export_bank(permanence=permanence, wb=wb, sheet_name=slugify(permanence)) wb = export_invoice(permanence=permanence, wb=wb, sheet_name=slugify(permanence)) if first: wb = export_permanence_stock(permanence=permanence, wb=wb, ws_customer_title=None) first = False if wb is not None: response = HttpResponse( content_type= 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ) response[ 'Content-Disposition'] = "attachment; filename={0}-{1}.xlsx".format( slugify(_("Accounting report")), repanier.apps.REPANIER_SETTINGS_GROUP_NAME) wb.save(response) return response user_message = _("No invoice available for %(permanence)s.") % { 'permanence': ', '.join("%s" % p for p in permanence_qs.all()) } user_message_level = messages.WARNING self.message_user(request, user_message, user_message_level) return
def preview_invoices(self, request, permanence_qs): valid_permanence_qs = permanence_qs.filter( status__in=[PERMANENCE_INVOICED, PERMANENCE_ARCHIVED] ) wb = None first = True for permanence in valid_permanence_qs: if first: wb = export_bank(permanence=permanence, wb=wb, sheet_name=permanence) wb = export_invoice(permanence=permanence, wb=wb, sheet_name=permanence) if first: wb = export_permanence_stock(permanence=permanence, wb=wb, ws_customer_title=None) first = False if wb is not None: response = HttpResponse( content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') response['Content-Disposition'] = "attachment; filename={0}-{1}.xlsx".format( _("Accounting report"), settings.REPANIER_SETTINGS_GROUP_NAME ) wb.save(response) return response user_message = _("No invoice available for %(permanence)s.") % { 'permanence': ', '.join("{}".format(p) for p in permanence_qs.all())} user_message_level = messages.WARNING self.message_user(request, user_message, user_message_level) return
def admin_export(request, queryset): permanence = queryset.first() wb = export_invoice(permanence=permanence, sheet_name=repanier.apps.REPANIER_SETTINGS_GROUP_NAME) wb = export_permanence_stock(permanence=permanence, wb=wb, ws_customer_title=None) if wb is not None: response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') response['Content-Disposition'] = "attachment; filename={0}-{1}.xlsx".format( slugify(_("Accounting report")), slugify(permanence) ) wb.save(response) return response else: return None
def accounting_report(self, request, permanence_id, permanence=None): wb = export_bank(permanence=permanence, wb=None, sheet_name=permanence) wb = export_invoice(permanence=permanence, wb=wb, sheet_name=permanence) wb = export_permanence_stock(permanence=permanence, wb=wb, ws_customer_title=None) if wb is not None: response = HttpResponse( content_type= "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" ) response[ "Content-Disposition"] = "attachment; filename={0}-{1}.xlsx".format( _("Accounting report"), settings.REPANIER_SETTINGS_GROUP_NAME) wb.save(response) return response user_message = _("No invoice available for {permanence}.'.").format( permanence=permanence) user_message_level = messages.WARNING self.message_user(request, user_message, user_message_level) return HttpResponseRedirect(self.get_redirect_to_change_list_url())
def email_order(permanence_id, all_producers=True, closed_deliveries_id=None, producers_id=None): from repanier.apps import REPANIER_SETTINGS_SEND_ORDER_MAIL_TO_BOARD, \ REPANIER_SETTINGS_GROUP_NAME, REPANIER_SETTINGS_SEND_ORDER_MAIL_TO_PRODUCER, \ REPANIER_SETTINGS_SEND_ABSTRACT_ORDER_MAIL_TO_PRODUCER, \ REPANIER_SETTINGS_SEND_ORDER_MAIL_TO_CUSTOMER cur_language = translation.get_language() for language in settings.PARLER_LANGUAGES[settings.SITE_ID]: language_code = language["code"] translation.activate(language_code) permanence = Permanence.objects.get(id=permanence_id) config = Configuration.objects.get(id=DECIMAL_ONE) filename = "{0}-{1}.xlsx".format( slugify(_("Order")), slugify(permanence) ) group_filename = "{0}-{1}.xlsx".format( slugify(REPANIER_SETTINGS_GROUP_NAME), slugify(filename) ) sender_email, sender_function, signature, cc_email_staff = get_signature(is_reply_to_order_email=True) board_composition, board_composition_and_description = get_board_composition(permanence.id) # Orders send to the preparation team group_wb = xlsx_order.export_abstract(permanence=permanence, deliveries_id=closed_deliveries_id, wb=None) if group_wb is not None: abstract_ws = group_wb.get_active_sheet() else: abstract_ws = None if all_producers: if group_wb is not None: # At least one order group_wb = xlsx_order.export_customer_label( permanence=permanence, deliveries_id=closed_deliveries_id, wb=group_wb ) group_wb = xlsx_order.export_preparation( permanence=permanence, deliveries_id=closed_deliveries_id, wb=group_wb ) group_wb = xlsx_stock.export_permanence_stock( permanence=permanence, customer_price=True, wb=group_wb ) group_wb = xlsx_order.export_customer( permanence=permanence, deliveries_id=closed_deliveries_id, deposit=True, wb=group_wb ) group_wb = xlsx_order.export_customer( permanence=permanence, deliveries_id=closed_deliveries_id, wb=group_wb ) to_email_board = [] for permanence_board in PermanenceBoard.objects.filter( permanence=permanence.id).order_by('?'): if permanence_board.customer: to_email_board.append(permanence_board.customer.user.email) try: order_staff_mail = config.order_staff_mail except TranslationDoesNotExist: order_staff_mail = EMPTY_STRING # order_staff_mail_subject = "%s - %s - %s" % ( # _('Permanence preparation list'), permanence, REPANIER_SETTINGS_GROUP_NAME) order_staff_mail_subject = "%s - %s" % (REPANIER_SETTINGS_GROUP_NAME, permanence) template = Template(order_staff_mail) context = TemplateContext({ 'permanence_link' : mark_safe('<a href="http://%s%s">%s</a>' % ( settings.ALLOWED_HOSTS[0], reverse('order_view', args=(permanence.id,)), 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_SETTINGS_GROUP_NAME)) }) html_content = template.render(context) email = EmailMultiAlternatives( order_staff_mail_subject, strip_tags(html_content), from_email=sender_email, to=to_email_board, cc=cc_email_staff ) if group_wb is not None: email.attach(group_filename, save_virtual_workbook(group_wb), 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') email.attach_alternative(html_content, "text/html") if not REPANIER_SETTINGS_SEND_ORDER_MAIL_TO_BOARD: email.to = cc_email_staff email.cc = [] email.bcc = [] send_email(email=email) # Orders send to our producers if REPANIER_SETTINGS_SEND_ORDER_MAIL_TO_PRODUCER: producer_set = Producer.objects.filter( permanence=permanence.id, language=language_code, ).order_by('?') if producers_id is not None: # Do not send order twice # all_producers is True if we are sending the order to the last group of selected producers producer_set = producer_set.filter(id__in=producers_id) for producer in producer_set: long_profile_name = producer.long_profile_name if producer.long_profile_name is not None else producer.short_profile_name wb = xlsx_order.export_producer_by_product(permanence=permanence, producer=producer, wb=None) if wb is None: order_empty = True duplicate = False else: order_empty = False if not producer.manage_replenishment: duplicate = True wb = xlsx_order.export_producer_by_customer( permanence=permanence, producer=producer, wb=wb) else: duplicate = False try: order_producer_mail = config.order_producer_mail except TranslationDoesNotExist: order_producer_mail = EMPTY_STRING # order_producer_mail_subject = "%s - %s - %s" % ( # _('Permanence preparation list'), permanence, REPANIER_SETTINGS_GROUP_NAME) order_producer_mail_subject = "%s - %s" % (REPANIER_SETTINGS_GROUP_NAME, permanence) template = Template(order_producer_mail) context = TemplateContext({ 'name' : long_profile_name, 'long_profile_name': long_profile_name, 'order_empty' : order_empty, 'duplicate' : duplicate, 'permanence_link' : mark_safe('<a href="http://%s%s">%s</a>' % ( settings.ALLOWED_HOSTS[0], reverse('order_view', args=(permanence.id,)), permanence)), 'signature' : mark_safe( '%s<br/>%s<br/>%s' % (signature, sender_function, REPANIER_SETTINGS_GROUP_NAME)) }) html_content = template.render(context) producer_invoice = models.ProducerInvoice.objects.filter( producer_id=producer.id, permanence_id=permanence.id ).only("total_price_with_tax").order_by('?').first() if producer_invoice is not None \ and producer_invoice.total_price_with_tax < producer.minimum_order_value: to = cc_email_staff html_content = \ order_producer_mail_subject + '<br/><br/>' + html_content cc = [] order_producer_mail_subject = _( '/!\ Mail not send to our producer %s because the minimum order value has not been reached.') % long_profile_name else: to_email_producer = [] if producer.email: to_email_producer.append(producer.email) if producer.email2: to_email_producer.append(producer.email2) if producer.email3: to_email_producer.append(producer.email3) cc = cc_email_staff email = EmailMultiAlternatives( order_producer_mail_subject, strip_tags(html_content), from_email=sender_email, to=to_email_producer, cc=cc ) if REPANIER_SETTINGS_SEND_ORDER_MAIL_TO_PRODUCER and wb is not None: if REPANIER_SETTINGS_SEND_ABSTRACT_ORDER_MAIL_TO_PRODUCER: if abstract_ws is not None: wb.add_sheet(abstract_ws, index=0) email.attach( filename, save_virtual_workbook(wb), 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ) email.attach_alternative(html_content, "text/html") send_email(email=email) if all_producers: # Orders send to our customers only if they don't have already received it # ==> customerinvoice__is_order_confirm_send=False # customerinvoice__permanence_id=permanence.id if REPANIER_SETTINGS_SEND_ORDER_MAIL_TO_CUSTOMER: all_producers_closed = not (ProducerInvoice.objects.filter( permanence_id=permanence_id, status=PERMANENCE_OPENED ).order_by('?').exists()) if all_producers_closed: if closed_deliveries_id is None: customer_set = Customer.objects.filter( represent_this_buyinggroup=False, customerinvoice__is_order_confirm_send=False, customerinvoice__permanence_id=permanence.id, language=language_code ).order_by('?') else: customer_set = Customer.objects.filter( represent_this_buyinggroup=False, customerinvoice__is_order_confirm_send=False, customerinvoice__permanence_id=permanence.id, customerinvoice__delivery_id__in=closed_deliveries_id, language=language_code ).order_by('?') for customer in customer_set: export_order_2_1_customer( customer, filename, permanence, sender_email, sender_function, signature, abstract_ws) # confirm_customer_invoice(permanence_id, customer.id) customer_invoice = CustomerInvoice.objects.filter( customer_id=customer.id, permanence_id=permanence_id ).order_by('?').first() customer_invoice.confirm_order() customer_invoice.save() translation.activate(cur_language)