"""
 * @author Xiaobo Sun
 * created  on 23.06.2018
 * @copyright (C) 2018 Sogood International GmbH - all rights reserved
 * @licence
 * Unauthorized copying of this file, via any medium is strictly prohibited
 * Proprietary and confidential
"""
import base64
import io
import glob
import os
import logging
import csv
import json
import re
import datetime
import pandas as pd
import pytz
from PyPDF2 import PdfFileMerger,PdfFileReader,PdfFileWriter
from django.views.decorators.csrf import csrf_exempt
from reportlab.pdfgen import canvas
from reportlab.lib.units import mm
from reportlab.lib.pagesizes import A4
import shutil


from . import letter
from . import newletter
from . import deliverynote
from . import picklist
from . import stockup
from . import frgeneratepdf
from . import esgeneratepdf
from . import ukgeneratepdf
from . import itgeneratepdf
from . import nachlieferung
from . import gutschrift
from . import itgutschrift
from . import ukgutschrift
from . import frgutschrift
from .emailmessage import EmailMessage


from django.http import HttpResponse

# Get an instance of a logger
logger = logging.getLogger('django')

list_eki = []
list_de = []
list_it = []
list_fr = []
list_desogood = []
list_frsgood = []
list_itsogood = []
list_maimai24 = []
list_others = []

@csrf_exempt
def print_pdf(request):
    """
    Django View : endpoint
    Used by Goodone document.php
    :param request: httpRequest
    :rtype: HttpResponse
    """
    # FIXME: using request to fetch the all parameters
    is_sogood = request.POST.get("is_sogood")
    platform_id = request.POST.get("platform_id")
    order_date = request.POST.get("order_date")
    type = request.POST.get("type")
    tax = request.POST.get("tax")
    # customer data
    customerCompany = request.POST.get("customerCompany")
    customerTitle = request.POST.get("customerTitle")
    customerSurname = request.POST.get("customerSurname")
    customerFirstname = request.POST.get("customerFirstname")
    customerStreet = request.POST.get("customerStreet")
    customerPostcode = request.POST.get("customerPostcode")
    customerCity = request.POST.get("customerCity")
    customerCountry = request.POST.get("customerCountry")
    customerMail = request.POST.get("customerMail")
    customerTelephone = request.POST.get("customerTelephone")
    customerShippingCompany = request.POST.get("customerShippingCompany")
    customerShippingSurname = request.POST.get("customerShippingSurname")
    customerShippingFirstname = request.POST.get("customerShippingFirstname")
    customerShippingStreet = request.POST.get("customerShippingStreet")
    customerShippingPostcode = request.POST.get("customerShippingPostcode")
    customerShippingCity = request.POST.get("customerShippingCity")
    customerShippingCountry = request.POST.get("customerShippingCountry")

    paymentMethod = request.POST.get("paymentMethod")
    paymentDetails = request.POST.get("paymentDetails")
    paidSum = request.POST.get("paidSum")
    paidTax = request.POST.get("paidTax")
    shippingMethod = request.POST.get("shippingMethod")
    shippingDatails = request.POST.get("shippingDatails")
    soldItems = request.POST.get("soldItems")
    comment = request.POST.get("comment")
    memo_ab = request.POST.get("memo_ab")

    # new params
    docNo = request.POST.get("docNo")  # Rechnungsnr. oder Bestellungsnr.
    shippingDate = request.POST.get("shippingDate")  # Voraussichtliches Lieferdatum
    docDate = request.POST.get("docDate")
    show_customer_name_in_doc = request.POST.get("show_customer_name_in_doc")
    vat_nr = request.POST.get("vat_nr")
    arbeitsort = request.POST.get("arbeitsort")
    customerShippingTelephone = request.POST.get("customerShippingTelephone")
    dealWith = request.POST.get("deal_with")

    # Create the HttpResponse object with the appropriate PDF headers.
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = 'attachment; filename="invoice.pdf"'
    sogood_print = letter.SogoodPrintable(io.BytesIO(),
                                          is_sogood,
                                          platform_id,
                                          order_date,
                                          type,
                                          tax,
                                          customerCompany,
                                          customerTitle,
                                          customerSurname,
                                          customerFirstname,
                                          customerStreet,
                                          customerPostcode,
                                          customerCity,
                                          customerCountry,
                                          customerMail,
                                          customerTelephone,
                                          customerShippingCompany,
                                          customerShippingSurname,
                                          customerShippingFirstname,
                                          customerShippingStreet,
                                          customerShippingPostcode,
                                          customerShippingCity,
                                          customerShippingCountry,
                                          paymentMethod,
                                          paymentDetails,
                                          paidSum,
                                          paidTax,
                                          shippingMethod,
                                          shippingDatails,
                                          soldItems,
                                          comment,
                                          memo_ab,
                                          docNo,
                                          shippingDate,
                                          docDate,
                                          show_customer_name_in_doc,
                                          vat_nr,
                                          arbeitsort,
                                          customerShippingTelephone,
                                          dealWith)
    pdf_blob = sogood_print.do()
    response.write(pdf_blob)
    return response
@csrf_exempt
def new_print_pdf(request):
    """
    Django View : endpoint
    Used by Goodone document.php
    :param request: httpRequest
    :rtype: HttpResponse
    """
    # FIXME: using request to fetch the all parameters
    is_sogood = request.POST.get("is_sogood")
    is_sogood = bool(int(is_sogood))  # 将字符串转换为布尔值
    platform_id = request.POST.get("platform_id")
    order_date = request.POST.get("order_date")
    type = request.POST.get("type")
    tax = request.POST.get("tax")
    # customer data
    customerCompany = request.POST.get("customerCompany")
    customerTitle = request.POST.get("customerTitle")
    customerSurname = request.POST.get("customerSurname")
    customerFirstname = request.POST.get("customerFirstname")
    customerStreet = request.POST.get("customerStreet")
    customerPostcode = request.POST.get("customerPostcode")
    customerCity = request.POST.get("customerCity")
    customerCountry = request.POST.get("customerCountry")
    customerMail = request.POST.get("customerMail")
    customerTelephone = request.POST.get("customerTelephone")
    customerShippingCompany = request.POST.get("customerShippingCompany")
    customerShippingSurname = request.POST.get("customerShippingSurname")
    customerShippingFirstname = request.POST.get("customerShippingFirstname")
    customerShippingStreet = request.POST.get("customerShippingStreet")
    customerShippingPostcode = request.POST.get("customerShippingPostcode")
    customerShippingCity = request.POST.get("customerShippingCity")
    customerShippingCountry = request.POST.get("customerShippingCountry")

    paymentMethod = request.POST.get("paymentMethod")
    paymentDetails = request.POST.get("paymentDetails")
    paidSum = request.POST.get("paidSum")
    paidTax = request.POST.get("paidTax")
    shippingMethod = request.POST.get("shippingMethod")
    shippingDatails = request.POST.get("shippingDatails")
    soldItems = request.POST.get("soldItems")
    comment = request.POST.get("comment")
    memo_ab = request.POST.get("memo_ab")

    # new params
    docNo = request.POST.get("docNo")  # Rechnungsnr. oder Bestellungsnr.
    shippingDate = request.POST.get("shippingDate")  # Voraussichtliches Lieferdatum
    docDate = request.POST.get("docDate")
    show_customer_name_in_doc = request.POST.get("show_customer_name_in_doc")
    vat_nr = request.POST.get("vat_nr")
    arbeitsort = request.POST.get("arbeitsort")
    customerShippingTelephone = request.POST.get("customerShippingTelephone")
    dealWith = request.POST.get("deal_with")
    country = request.POST.get("country")
    iskaufland = request.POST.get("isKaufland")
    iskaufland = bool(int(iskaufland))

    # Create the HttpResponse object with the appropriate PDF headers.
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = 'attachment; filename="invoice.pdf"'
    sogood_print = newletter.SogoodPrintable(io.BytesIO(),
                                          is_sogood,
                                          platform_id,
                                          order_date,
                                          type,
                                          tax,
                                          customerCompany,
                                          customerTitle,
                                          customerSurname,
                                          customerFirstname,
                                          customerStreet,
                                          customerPostcode,
                                          customerCity,
                                          customerCountry,
                                          customerMail,
                                          customerTelephone,
                                          customerShippingCompany,
                                          customerShippingSurname,
                                          customerShippingFirstname,
                                          customerShippingStreet,
                                          customerShippingPostcode,
                                          customerShippingCity,
                                          customerShippingCountry,
                                          paymentMethod,
                                          paymentDetails,
                                          paidSum,
                                          paidTax,
                                          shippingMethod,
                                          shippingDatails,
                                          soldItems,
                                          comment,
                                          memo_ab,
                                          docNo,
                                          shippingDate,
                                          docDate,
                                          show_customer_name_in_doc,
                                          vat_nr,
                                          arbeitsort,
                                          customerShippingTelephone,
                                          dealWith,
                                          country,
                                          iskaufland)
    pdf_blob = sogood_print.do()
    # 将PDF字节流转换为base64字符串
    pdf_base64 = base64.b64encode(pdf_blob).decode('utf-8')
    return HttpResponse(pdf_base64)
    # response.write(pdf_blob)
    # return response
@csrf_exempt
def uk_print_pdf(request):
    """
       Django View : endpoint
       Used by Goodone document.php
       :param request: httpRequest
       :rtype: HttpResponse
       """
    # FIXME: using request to fetch the all parameters
    is_sogood = request.POST.get("is_sogood")
    is_sogood = bool(int(is_sogood))  # 将字符串转换为布尔值
    platform_id = request.POST.get("platform_id")
    order_date = request.POST.get("order_date")
    type = request.POST.get("type")
    tax = request.POST.get("tax")
    # customer data
    customerCompany = request.POST.get("customerCompany")
    customerTitle = request.POST.get("customerTitle")
    customerSurname = request.POST.get("customerSurname")
    customerFirstname = request.POST.get("customerFirstname")
    customerStreet = request.POST.get("customerStreet")
    customerPostcode = request.POST.get("customerPostcode")
    customerCity = request.POST.get("customerCity")
    customerCountry = request.POST.get("customerCountry")
    customerMail = request.POST.get("customerMail")
    customerTelephone = request.POST.get("customerTelephone")
    customerShippingCompany = request.POST.get("customerShippingCompany")
    customerShippingSurname = request.POST.get("customerShippingSurname")
    customerShippingFirstname = request.POST.get("customerShippingFirstname")
    customerShippingStreet = request.POST.get("customerShippingStreet")
    customerShippingPostcode = request.POST.get("customerShippingPostcode")
    customerShippingCity = request.POST.get("customerShippingCity")
    customerShippingCountry = request.POST.get("customerShippingCountry")

    paymentMethod = request.POST.get("paymentMethod")
    paymentDetails = request.POST.get("paymentDetails")
    paidSum = request.POST.get("paidSum")
    paidTax = request.POST.get("paidTax")
    shippingMethod = request.POST.get("shippingMethod")
    shippingDatails = request.POST.get("shippingDatails")
    soldItems = request.POST.get("soldItems")
    comment = request.POST.get("comment")
    memo_ab = request.POST.get("memo_ab")

    # new params
    docNo = request.POST.get("docNo")  # Rechnungsnr. oder Bestellungsnr.
    shippingDate = request.POST.get("shippingDate")  # Voraussichtliches Lieferdatum
    docDate = request.POST.get("docDate")
    show_customer_name_in_doc = request.POST.get("show_customer_name_in_doc")
    vat_nr = request.POST.get("vat_nr")
    arbeitsort = request.POST.get("arbeitsort")
    customerShippingTelephone = request.POST.get("customerShippingTelephone")
    dealWith = request.POST.get("deal_with")
    country = request.POST.get("country")
    iskaufland = request.POST.get("isKaufland")
    iskaufland = bool(int(iskaufland))

    # Create the HttpResponse object with the appropriate PDF headers.
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = 'attachment; filename="invoice.pdf"'
    sogood_print = ukgeneratepdf.SogoodPrintable(io.BytesIO(),
                                             is_sogood,
                                             platform_id,
                                             order_date,
                                             type,
                                             tax,
                                             customerCompany,
                                             customerTitle,
                                             customerSurname,
                                             customerFirstname,
                                             customerStreet,
                                             customerPostcode,
                                             customerCity,
                                             customerCountry,
                                             customerMail,
                                             customerTelephone,
                                             customerShippingCompany,
                                             customerShippingSurname,
                                             customerShippingFirstname,
                                             customerShippingStreet,
                                             customerShippingPostcode,
                                             customerShippingCity,
                                             customerShippingCountry,
                                             paymentMethod,
                                             paymentDetails,
                                             paidSum,
                                             paidTax,
                                             shippingMethod,
                                             shippingDatails,
                                             soldItems,
                                             comment,
                                             memo_ab,
                                             docNo,
                                             shippingDate,
                                             docDate,
                                             show_customer_name_in_doc,
                                             vat_nr,
                                             arbeitsort,
                                             customerShippingTelephone,
                                             dealWith,
                                             country)
    pdf_blob = sogood_print.do()
    # 将PDF字节流转换为base64字符串
    pdf_base64 = base64.b64encode(pdf_blob).decode('utf-8')
    return HttpResponse(pdf_base64)
    # response.write(pdf_blob)
    # return response
@csrf_exempt
def es_print_pdf(request):
    """
       Django View : endpoint
       Used by Goodone document.php
       :param request: httpRequest
       :rtype: HttpResponse
       """
    # FIXME: using request to fetch the all parameters
    is_sogood = request.POST.get("is_sogood")
    is_sogood = bool(int(is_sogood))  # 将字符串转换为布尔值
    platform_id = request.POST.get("platform_id")
    order_date = request.POST.get("order_date")
    type = request.POST.get("type")
    tax = request.POST.get("tax")
    # customer data
    customerCompany = request.POST.get("customerCompany")
    customerTitle = request.POST.get("customerTitle")
    customerSurname = request.POST.get("customerSurname")
    customerFirstname = request.POST.get("customerFirstname")
    customerStreet = request.POST.get("customerStreet")
    customerPostcode = request.POST.get("customerPostcode")
    customerCity = request.POST.get("customerCity")
    customerCountry = request.POST.get("customerCountry")
    customerMail = request.POST.get("customerMail")
    customerTelephone = request.POST.get("customerTelephone")
    customerShippingCompany = request.POST.get("customerShippingCompany")
    customerShippingSurname = request.POST.get("customerShippingSurname")
    customerShippingFirstname = request.POST.get("customerShippingFirstname")
    customerShippingStreet = request.POST.get("customerShippingStreet")
    customerShippingPostcode = request.POST.get("customerShippingPostcode")
    customerShippingCity = request.POST.get("customerShippingCity")
    customerShippingCountry = request.POST.get("customerShippingCountry")

    paymentMethod = request.POST.get("paymentMethod")
    paymentDetails = request.POST.get("paymentDetails")
    paidSum = request.POST.get("paidSum")
    paidTax = request.POST.get("paidTax")
    shippingMethod = request.POST.get("shippingMethod")
    shippingDatails = request.POST.get("shippingDatails")
    soldItems = request.POST.get("soldItems")
    comment = request.POST.get("comment")
    memo_ab = request.POST.get("memo_ab")

    # new params
    docNo = request.POST.get("docNo")  # Rechnungsnr. oder Bestellungsnr.
    shippingDate = request.POST.get("shippingDate")  # Voraussichtliches Lieferdatum
    docDate = request.POST.get("docDate")
    show_customer_name_in_doc = request.POST.get("show_customer_name_in_doc")
    vat_nr = request.POST.get("vat_nr")
    arbeitsort = request.POST.get("arbeitsort")
    customerShippingTelephone = request.POST.get("customerShippingTelephone")
    dealWith = request.POST.get("deal_with")
    country = request.POST.get("country")
    iskaufland = request.POST.get("isKaufland")
    iskaufland = bool(int(iskaufland))

    # Create the HttpResponse object with the appropriate PDF headers.
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = 'attachment; filename="invoice.pdf"'
    sogood_print = esgeneratepdf.SogoodPrintable(io.BytesIO(),
                                             is_sogood,
                                             platform_id,
                                             order_date,
                                             type,
                                             tax,
                                             customerCompany,
                                             customerTitle,
                                             customerSurname,
                                             customerFirstname,
                                             customerStreet,
                                             customerPostcode,
                                             customerCity,
                                             customerCountry,
                                             customerMail,
                                             customerTelephone,
                                             customerShippingCompany,
                                             customerShippingSurname,
                                             customerShippingFirstname,
                                             customerShippingStreet,
                                             customerShippingPostcode,
                                             customerShippingCity,
                                             customerShippingCountry,
                                             paymentMethod,
                                             paymentDetails,
                                             paidSum,
                                             paidTax,
                                             shippingMethod,
                                             shippingDatails,
                                             soldItems,
                                             comment,
                                             memo_ab,
                                             docNo,
                                             shippingDate,
                                             docDate,
                                             show_customer_name_in_doc,
                                             vat_nr,
                                             arbeitsort,
                                             customerShippingTelephone,
                                             dealWith,
                                             country)
    pdf_blob = sogood_print.do()
    # 将PDF字节流转换为base64字符串
    pdf_base64 = base64.b64encode(pdf_blob).decode('utf-8')
    return HttpResponse(pdf_base64)
    # response.write(pdf_blob)
    # return response
@csrf_exempt
def fr_print_pdf(request):
    """
       Django View : endpoint
       Used by Goodone document.php
       :param request: httpRequest
       :rtype: HttpResponse
       """
    # FIXME: using request to fetch the all parameters
    is_sogood = request.POST.get("is_sogood")
    is_sogood = bool(int(is_sogood))  # 将字符串转换为布尔值
    platform_id = request.POST.get("platform_id")
    order_date = request.POST.get("order_date")
    type = request.POST.get("type")
    tax = request.POST.get("tax")
    # customer data
    customerCompany = request.POST.get("customerCompany")
    customerTitle = request.POST.get("customerTitle")
    customerSurname = request.POST.get("customerSurname")
    customerFirstname = request.POST.get("customerFirstname")
    customerStreet = request.POST.get("customerStreet")
    customerPostcode = request.POST.get("customerPostcode")
    customerCity = request.POST.get("customerCity")
    customerCountry = request.POST.get("customerCountry")
    customerMail = request.POST.get("customerMail")
    customerTelephone = request.POST.get("customerTelephone")
    customerShippingCompany = request.POST.get("customerShippingCompany")
    customerShippingSurname = request.POST.get("customerShippingSurname")
    customerShippingFirstname = request.POST.get("customerShippingFirstname")
    customerShippingStreet = request.POST.get("customerShippingStreet")
    customerShippingPostcode = request.POST.get("customerShippingPostcode")
    customerShippingCity = request.POST.get("customerShippingCity")
    customerShippingCountry = request.POST.get("customerShippingCountry")

    paymentMethod = request.POST.get("paymentMethod")
    paymentDetails = request.POST.get("paymentDetails")
    paidSum = request.POST.get("paidSum")
    paidTax = request.POST.get("paidTax")
    shippingMethod = request.POST.get("shippingMethod")
    shippingDatails = request.POST.get("shippingDatails")
    soldItems = request.POST.get("soldItems")
    comment = request.POST.get("comment")
    memo_ab = request.POST.get("memo_ab")

    # new params
    docNo = request.POST.get("docNo")  # Rechnungsnr. oder Bestellungsnr.
    shippingDate = request.POST.get("shippingDate")  # Voraussichtliches Lieferdatum
    docDate = request.POST.get("docDate")
    show_customer_name_in_doc = request.POST.get("show_customer_name_in_doc")
    vat_nr = request.POST.get("vat_nr")
    arbeitsort = request.POST.get("arbeitsort")
    customerShippingTelephone = request.POST.get("customerShippingTelephone")
    dealWith = request.POST.get("deal_with")
    country = request.POST.get("country")
    iskaufland = request.POST.get("isKaufland")
    iskaufland = bool(int(iskaufland))

    # Create the HttpResponse object with the appropriate PDF headers.
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = 'attachment; filename="invoice.pdf"'
    sogood_print = frgeneratepdf.SogoodPrintable(io.BytesIO(),
                                             is_sogood,
                                             platform_id,
                                             order_date,
                                             type,
                                             tax,
                                             customerCompany,
                                             customerTitle,
                                             customerSurname,
                                             customerFirstname,
                                             customerStreet,
                                             customerPostcode,
                                             customerCity,
                                             customerCountry,
                                             customerMail,
                                             customerTelephone,
                                             customerShippingCompany,
                                             customerShippingSurname,
                                             customerShippingFirstname,
                                             customerShippingStreet,
                                             customerShippingPostcode,
                                             customerShippingCity,
                                             customerShippingCountry,
                                             paymentMethod,
                                             paymentDetails,
                                             paidSum,
                                             paidTax,
                                             shippingMethod,
                                             shippingDatails,
                                             soldItems,
                                             comment,
                                             memo_ab,
                                             docNo,
                                             shippingDate,
                                             docDate,
                                             show_customer_name_in_doc,
                                             vat_nr,
                                             arbeitsort,
                                             customerShippingTelephone,
                                             dealWith,
                                             country)
    pdf_blob = sogood_print.do()
    # 将PDF字节流转换为base64字符串
    pdf_base64 = base64.b64encode(pdf_blob).decode('utf-8')
    return HttpResponse(pdf_base64)
    # response.write(pdf_blob)
    # return response
@csrf_exempt
def it_print_pdf(request):
    """
    Django View : endpoint
    Used by Goodone document.php
    :param request: httpRequest
    :rtype: HttpResponse
    """
    # FIXME: using request to fetch the all parameters
    is_sogood = request.POST.get("is_sogood")
    is_sogood = bool(int(is_sogood))  # 将字符串转换为布尔值
    platform_id = request.POST.get("platform_id")
    order_date = request.POST.get("order_date")
    type = request.POST.get("type")
    tax = request.POST.get("tax")
    # customer data
    customerCompany = request.POST.get("customerCompany")
    customerTitle = request.POST.get("customerTitle")
    customerSurname = request.POST.get("customerSurname")
    customerFirstname = request.POST.get("customerFirstname")
    customerStreet = request.POST.get("customerStreet")
    customerPostcode = request.POST.get("customerPostcode")
    customerCity = request.POST.get("customerCity")
    customerCountry = request.POST.get("customerCountry")
    customerMail = request.POST.get("customerMail")
    customerTelephone = request.POST.get("customerTelephone")
    customerShippingCompany = request.POST.get("customerShippingCompany")
    customerShippingSurname = request.POST.get("customerShippingSurname")
    customerShippingFirstname = request.POST.get("customerShippingFirstname")
    customerShippingStreet = request.POST.get("customerShippingStreet")
    customerShippingPostcode = request.POST.get("customerShippingPostcode")
    customerShippingCity = request.POST.get("customerShippingCity")
    customerShippingCountry = request.POST.get("customerShippingCountry")

    paymentMethod = request.POST.get("paymentMethod")
    paymentDetails = request.POST.get("paymentDetails")
    paidSum = request.POST.get("paidSum")
    paidTax = request.POST.get("paidTax")
    shippingMethod = request.POST.get("shippingMethod")
    shippingDatails = request.POST.get("shippingDatails")
    soldItems = request.POST.get("soldItems")
    comment = request.POST.get("comment")
    memo_ab = request.POST.get("memo_ab")

    # new params
    docNo = request.POST.get("docNo")  # Rechnungsnr. oder Bestellungsnr.
    shippingDate = request.POST.get("shippingDate")  # Voraussichtliches Lieferdatum
    docDate = request.POST.get("docDate")
    show_customer_name_in_doc = request.POST.get("show_customer_name_in_doc")
    vat_nr = request.POST.get("vat_nr")
    arbeitsort = request.POST.get("arbeitsort")
    customerShippingTelephone = request.POST.get("customerShippingTelephone")
    dealWith = request.POST.get("deal_with")
    country = request.POST.get("country")
    iskaufland = request.POST.get("isKaufland")
    iskaufland = bool(int(iskaufland))
    # Create the HttpResponse object with the appropriate PDF headers.
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = 'attachment; filename="invoice.pdf"'
    sogood_print = itgeneratepdf.SogoodPrintable(io.BytesIO(),
                                          is_sogood,
                                          platform_id,
                                          order_date,
                                          type,
                                          tax,
                                          customerCompany,
                                          customerTitle,
                                          customerSurname,
                                          customerFirstname,
                                          customerStreet,
                                          customerPostcode,
                                          customerCity,
                                          customerCountry,
                                          customerMail,
                                          customerTelephone,
                                          customerShippingCompany,
                                          customerShippingSurname,
                                          customerShippingFirstname,
                                          customerShippingStreet,
                                          customerShippingPostcode,
                                          customerShippingCity,
                                          customerShippingCountry,
                                          paymentMethod,
                                          paymentDetails,
                                          paidSum,
                                          paidTax,
                                          shippingMethod,
                                          shippingDatails,
                                          soldItems,
                                          comment,
                                          memo_ab,
                                          docNo,
                                          shippingDate,
                                          docDate,
                                          show_customer_name_in_doc,
                                          vat_nr,
                                          arbeitsort,
                                          customerShippingTelephone,
                                          dealWith,
                                          country)
    pdf_blob = sogood_print.do()
    # 将PDF字节流转换为base64字符串
    pdf_base64 = base64.b64encode(pdf_blob).decode('utf-8')
    return HttpResponse(pdf_base64)
    # response.write(pdf_blob)
    # return response
@csrf_exempt
def email_message(request):
    """
    Django View : endpoint
    Used by Goodone document.php
    :param request: httpRequest
    :rtype: HttpResponse
    """
    # FIXME: using request to fetch the all parameters
    country = request.POST.get("country")
    email_info = EmailMessage.getCountryEmail(country)
    return HttpResponse(email_info, content_type="application/json; charset=utf-8")
@csrf_exempt
def print_deliverynote(request):
    """
    Django View : endpoint
    :param request: httpRequest
    :rtype: HttpResponse
    """
    # FIXME: using request to fetch the all parameters
    is_sogood = request.POST.get("is_sogood")
    platform_id = request.POST.get("platform_id")
    order_date = request.POST.get("order_date")
    type = request.POST.get("type")
    tax = request.POST.get("tax")
    # customer data
    customerCompany = request.POST.get("customerCompany")
    customerTitle = request.POST.get("customerTitle")
    customerSurname = request.POST.get("customerSurname")
    customerFirstname = request.POST.get("customerFirstname")
    customerStreet = request.POST.get("customerStreet")
    customerPostcode = request.POST.get("customerPostcode")
    customerCity = request.POST.get("customerCity")
    customerCountry = request.POST.get("customerCountry")
    customerMail = request.POST.get("customerMail")
    customerTelephone = request.POST.get("customerTelephone")
    customerShippingCompany = request.POST.get("customerShippingCompany")
    customerShippingSurname = request.POST.get("customerShippingSurname")
    customerShippingFirstname = request.POST.get("customerShippingFirstname")
    customerShippingStreet = request.POST.get("customerShippingStreet")
    customerShippingPostcode = request.POST.get("customerShippingPostcode")
    customerShippingCity = request.POST.get("customerShippingCity")
    customerShippingCountry = request.POST.get("customerShippingCountry")
    customerShippingTelephone = request.POST.get("customerShippingTelephone")

    paymentMethod = request.POST.get("paymentMethod")
    paymentDetails = request.POST.get("paymentDetails")
    paidSum = request.POST.get("paidSum")
    paidTax = request.POST.get("paidTax")
    shippingMethod = request.POST.get("shippingMethod")
    shippingDatails = request.POST.get("shippingDatails")
    soldItems = request.POST.get("soldItems")
    elements = request.POST.get("elements")
    comment = request.POST.get("comment")
    invoiceComment = request.POST.get("invoiceComment")
    orderId = request.POST.get("orderId")
    billingNr = request.POST.get("billingNr")
    userId = request.POST.get("userId")
    userIdPlattform = request.POST.get("userIdPlattform")
    payment_date = request.POST.get("payment_date")
    invoice_date = request.POST.get("invoice_date")
    shipping_date = request.POST.get("shipping_date")
    dealWith = request.POST.get("deal_with")
    working_days = request.POST.get("working_days")
    prefix = request.POST.get("prefix")
    weight = request.POST.get("weight") # return None if 'sth' is not in request.POST
    countOfPackages = request.POST.get("countOfPackages")
    memo = request.POST.get("memo")
    isOneLieferschein = request.POST.get("isOneLieferschein")
    logger.info("print_deliverynote with the orderId " + orderId + " -------->")

    # Create the HttpResponse object with the appropriate PDF headers.
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = 'attachment; filename="invoice.pdf"'
    sogood_print = deliverynote.SogoodPrintable(io.BytesIO(),
                                                is_sogood,
                                                platform_id,
                                                order_date,
                                                type,
                                                tax,
                                                customerCompany,
                                                customerTitle,
                                                customerSurname,
                                                customerFirstname,
                                                customerStreet,
                                                customerPostcode,
                                                customerCity,
                                                customerCountry,
                                                customerMail,
                                                customerTelephone,
                                                customerShippingCompany,
                                                customerShippingSurname,
                                                customerShippingFirstname,
                                                customerShippingStreet,
                                                customerShippingPostcode,
                                                customerShippingCity,
                                                customerShippingCountry,
                                                customerShippingTelephone,
                                                paymentMethod,
                                                paymentDetails,
                                                paidSum,
                                                paidTax,
                                                shippingMethod,
                                                shippingDatails,
                                                soldItems,
                                                comment,
                                                invoiceComment,
                                                orderId,
                                                billingNr,
                                                userId,
                                                userIdPlattform,
                                                payment_date,
                                                invoice_date,
                                                shipping_date,
                                                dealWith,
                                                working_days,
                                                elements)
    pdf_blob = sogood_print.do()
    # 将PDF字节流转换为base64字符串
    pdf_base64 = base64.b64encode(pdf_blob).decode('utf-8')
    #
    # # 创建响应对象，并写入base64字符串
    # response = HttpResponse(pdf_base64, content_type='text/plain')
    response.write(pdf_blob)

    is_sogood = request.POST.get("is_sogood")
    prefix = request.POST.get("prefix")
    if prefix:
        logger.info("print_deliverynote with the prefix " + prefix)
    elif is_sogood == 'True':
        prefix = "sogood"
    else:
        prefix = "maimai24"

    # export to a file
    source_path = os.path.dirname(os.path.abspath(__file__))
    if isOneLieferschein == "false" :
        file_path = '%s/../pdf_files/%s-%s.pdf' % (source_path, prefix, platform_id)
        print("file path is  %s" % file_path)
        file = open(file_path, "wb")
        file.write(pdf_blob)
    else:
        merge_backup_dir = os.path.join(source_path, '../pdf_merge_files')
        os.makedirs(merge_backup_dir, exist_ok=True)

        file_path = '%s/../pdf_merge_files/%s-%s.pdf' % (source_path, prefix, platform_id + "-merge")
        print("file path is  %s" % file_path)
        file = open(file_path, "wb")
        file.write(pdf_blob)
    # 2024-01-01 export to pickList
    productName = ""
    loaded_json = json.loads(soldItems, strict=False)
    items_json = loaded_json["items"]
    for i, x in enumerate(items_json):
        # Rabatt in comment
        if x["stammbezeichnung"] is not None and str(x["stammbezeichnung"]):
            productName += x["stammbezeichnung"]
            if x["packstueck"] is not None:
                productName += " (X) " + str(x["quantity"])
            if i != len(items_json) - 1:
                productName += "\n"  # new line in Excel

    list_clone = []
    if isOneLieferschein == "false":
        if "EKI" in str(prefix):
            list_eki.append(picklist.Order(order_date, orderId, productName))
            list_clone = list_eki.copy()
        elif str(prefix) == "DE":
            list_de.append(picklist.Order(order_date, orderId, productName))
            list_clone = list_de.copy()
        elif str(prefix) == "IT":
            list_it.append(picklist.Order(order_date, orderId, productName))
            list_clone = list_it.copy()
        elif str(prefix) == "FR":
            list_fr.append(picklist.Order(order_date, orderId, productName))
            list_clone = list_fr.copy()
        elif str(prefix) == "DE-SOGOOD" :
            list_desogood.append(picklist.Order(order_date, orderId, productName))
            list_clone = list_desogood.copy()
        elif str(prefix) == "FR-SOGOOD" :
            list_frsgood.append(picklist.Order(order_date, orderId, productName))
            list_clone = list_frsgood.copy()
        elif str(prefix) == "IT-SOGOOD" :
            list_itsogood.append(picklist.Order(order_date, orderId, productName))
            list_clone = list_itsogood.copy()
        elif str(prefix) == "maimai24":
            list_maimai24.append(picklist.Order(order_date, orderId, productName))
            list_clone = list_maimai24.copy()
        else:
            list_others.append(picklist.Order(order_date, orderId, productName))
            list_clone = list_others.copy()
    # else:
    #     logger.error('no prefix')
    if isOneLieferschein == "false":
        picklist_print = picklist.PicklistPrintable(io.BytesIO(), list_clone)
        picklist_pdf_blob = picklist_print.do()

        file_path = '%s/../pdf_files/%s-%s.pdf' % (source_path, prefix, "picklist")
        print("file path is  %s" % file_path)
        file = open(file_path, "wb")
        file.write(picklist_pdf_blob)
    else:
        list_clone.clear()
        print("skip picklist, list_clone cleared")

    # 2021-03-13 create csv
    write_xlsx(is_sogood,
              prefix,
              source_path,
              platform_id,
              customerCompany,
              customerTitle,
              customerSurname,
              customerFirstname,
              customerStreet,
              customerPostcode,
              customerCity,
              customerCountry,
              customerMail,
              customerTelephone,
              customerShippingSurname,
              customerShippingFirstname,
              customerShippingStreet,
              customerShippingPostcode,
              customerShippingCity,
              customerShippingCountry,
              customerShippingTelephone,
              payment_date,
              working_days,
              weight,
              countOfPackages,
              memo,
              soldItems,
              orderId)
    write_csv(is_sogood,
              prefix,
              source_path,
              platform_id,
              customerCompany,
              customerTitle,
              customerSurname,
              customerFirstname,
              customerStreet,
              customerPostcode,
              customerCity,
              customerCountry,
              customerMail,
              customerTelephone,
              customerShippingCompany,
              customerShippingSurname,
              customerShippingFirstname,
              customerShippingStreet,
              customerShippingPostcode,
              customerShippingCity,
              customerShippingCountry,
              customerShippingTelephone,
              payment_date,
              working_days,
              weight,
              countOfPackages,
              memo,
              soldItems,
              orderId,
              userIdPlattform,
              elements,
              isOneLieferschein)

    # return response
    # 构造JSON响应
    return HttpResponse(pdf_base64)
    # return HttpResponse("Printed %s" % platform_id)

def write_csv(is_sogood,
              prefix,
              source_path,
              platform_id,
              customerCompany,
              customerTitle,
              customerSurname,
              customerFirstname,
              customerStreet,
              customerPostcode,
              customerCity,
              customerCountry,
              customerMail,
              customerTelephone,
              customerShippingCompany,
              customerShippingSurname,
              customerShippingFirstname,
              customerShippingStreet,
              customerShippingPostcode,
              customerShippingCity,
              customerShippingCountry,
              customerShippingTelephone,
              payment_date,
              working_days,
              weight,
              countOfPackages,
              memo,
              soldItems,
              orderId,
              userIdPlattform,
              elements,
              isOneLieferschein):
    logger.info("write_csv with orderId " + orderId);
    if ("DE-SOGOOD" in str(prefix) or "FR-SOGOOD" in str(prefix) or "DE-EKI" in str(prefix) or "DE" in str(prefix)) and (isOneLieferschein == "false") :
        return write_csv_eki(is_sogood,
              prefix,
              source_path,
              platform_id,
              customerCompany,
              customerTitle,
              customerSurname,
              customerFirstname,
              customerStreet,
              customerPostcode,
              customerCity,
              customerCountry,
              customerMail,
              customerTelephone,
              customerShippingCompany,
              customerShippingSurname,
              customerShippingFirstname,
              customerShippingStreet,
              customerShippingPostcode,
              customerShippingCity,
              customerShippingCountry,
              customerShippingTelephone,
              payment_date,
              working_days,
              weight,
              countOfPackages,
              memo,
              soldItems,
              orderId,
              userIdPlattform,
              elements);
    elif prefix == "italy":
        return write_csv_italy(is_sogood,
              prefix,
              source_path,
              platform_id,
              customerCompany,
              customerTitle,
              customerSurname,
              customerFirstname,
              customerStreet,
              customerPostcode,
              customerCity,
              customerCountry,
              customerMail,
              customerTelephone,
              customerShippingCompany,
              customerShippingSurname,
              customerShippingFirstname,
              customerShippingStreet,
              customerShippingPostcode,
              customerShippingCity,
              customerShippingCountry,
              customerShippingTelephone,
              payment_date,
              working_days,
              weight,
              countOfPackages,
              memo,
              soldItems,
              orderId,
              userIdPlattform,
              elements);
    else:
        return None;    

def write_csv_eki(is_sogood,
              prefix,
              source_path,
              platform_id,
              customerCompany,
              customerTitle,
              customerSurname,
              customerFirstname,
              customerStreet,
              customerPostcode,
              customerCity,
              customerCountry,
              customerMail,
              customerTelephone,
              customerShippingCompany,
              customerShippingSurname,
              customerShippingFirstname,
              customerShippingStreet,
              customerShippingPostcode,
              customerShippingCity,
              customerShippingCountry,
              customerShippingTelephone,
              payment_date,
              working_days,
              weight,
              countOfPackages,
              memo,
              soldItems,
              orderId,
              userIdPlattform,
              elements):
    logger.info("write_csv_eki with orderId " + orderId);

    csv_Auftragsnummer_1 = platform_id
    csv_company_2 = customerShippingCompany if customerShippingCompany else (customerCompany if customerCompany else "")
    csv_Name_3 = customerShippingFirstname if customerShippingFirstname else (customerFirstname if customerFirstname else "") # using the shipping name + check empty
    csv_Name_3 += " "
    csv_Name_3 += customerShippingSurname if customerShippingSurname else (customerSurname if customerSurname else "")
    csv_Strasse_4 = customerShippingStreet if customerShippingStreet else (customerStreet if customerStreet else "")
    csv_PLZ_5 = customerShippingPostcode if customerShippingPostcode else (customerPostcode if customerPostcode else "")
    csv_Ort_6 = customerShippingCity if customerShippingCity else (customerCity if customerCity else "")
    csv_Telefon_7 = customerShippingTelephone if customerShippingTelephone else (customerTelephone if customerTelephone else "")
    csv_Email_8 = customerMail if customerMail else ""
    csv_Kaufdatum_9 = ""
    csv_Verladedatum_10 = "" 
    csv_Lieferdatum_11 = ""
    csv_Plattform_12 = ""
    csv_seller_13 = ""
    csv_Versender_14 = ""
    csv_Gewicht_15 = weight
    csv_Anzahl_16 = 0
    csv_Memo_17 = memo
    csv_ZustellungOderAbholung_18 = "Zustellung"
    csv_Produktbezeichnung1_19 = ""
    csv_Produktbezeichnung2_20 = ""
    csv_Produktbezeichnung3_21 = ""
    csv_Produktbezeichnung4_22 = ""
    csv_Produktbezeichnung5_23 = ""
    csv_Produktbezeichnung6_24 = ""
    csv_Produktbezeichnung7_25 = ""
    csv_Produktbezeichnung8_26 = ""
    csv_Produktbezeichnung9_27 = ""
    csv_Produktbezeichnung10_28 = ""
    csv_Produktbezeichnung11_29 = ""
    csv_Produktbezeichnung12_30 = ""
    csv_Produktbezeichnung13_31 = ""
    csv_Produktbezeichnung14_32 = ""
    csv_Produktbezeichnung15_33 = ""
    csv_Category_XX = ""

    try:
        itemLoadJson = json.loads(soldItems, strict=False)
        loaded_json = json.loads(elements, strict=False)
        items_json = itemLoadJson["items"]
        for i, x in enumerate(items_json):
            logger.info("print_deliverynote CSV items index " + str(i))
            if not csv_Plattform_12 and x["marketplace"] is not None:
                csv_Plattform_12 = x["marketplace"]

        elements_json = loaded_json["elements"]
        # print(json.dumps(items_json, indent=4, sort_keys=True))
        for i, x in enumerate(elements_json):
            logger.info("print_deliverynote CSV element index " + str(i))
            produktbezeichnung = ""

            if x["name"] is not None:
                produktbezeichnung += x["name"]

            if x["count"] is not None:
                produktbezeichnung += " x " + str(x["count"])
            
            if i == 0:
                csv_Produktbezeichnung1_19 = produktbezeichnung
            elif i == 1:
                csv_Produktbezeichnung2_20 = produktbezeichnung
            elif i == 2:
                csv_Produktbezeichnung3_21 = produktbezeichnung
            elif i == 3:
                csv_Produktbezeichnung4_22 = produktbezeichnung
            elif i == 4:
                csv_Produktbezeichnung5_23 = produktbezeichnung
            elif i == 5:
                csv_Produktbezeichnung6_24 = produktbezeichnung
            elif i == 6:
                csv_Produktbezeichnung7_25 = produktbezeichnung
            elif i == 7:
                csv_Produktbezeichnung8_26 = produktbezeichnung
            elif i == 8:
                csv_Produktbezeichnung9_27 = produktbezeichnung
            elif i == 9:
                csv_Produktbezeichnung10_28 = produktbezeichnung
            elif i == 10:
                csv_Produktbezeichnung11_29 = produktbezeichnung
            elif i == 11:
                csv_Produktbezeichnung12_30 = produktbezeichnung
            elif i == 12:
                csv_Produktbezeichnung13_31 = produktbezeichnung
            elif i == 13:
                csv_Produktbezeichnung14_32 = produktbezeichnung
            elif i == 14:
                csv_Produktbezeichnung15_33 = produktbezeichnung
            else:
                logger.error("size of solditems over 15")
            
            if x["ean"] is not None:
                csv_Anzahl_16 += int(x["count"])
            # if x["ean"] is not None:
            #     csv_Anzahl_16 += int(x["quantity"])
            # if not csv_Plattform_12 and x["marketplace"] is not None:
            #     csv_Plattform_12 = x["marketplace"]
            # if not csv_Category_XX and x["category"] is not None:
            #     csv_Category_XX += x["category"]

        if csv_Plattform_12 == "Hitflip":
            csv_Plattform_12 = "Kaufland"

        csv_seller_13 = "sogood" if (is_sogood == 'True') else "maimai24"
        csv_Versender_14 = csv_seller_13
    
        # logger.info("print_deliverynote CSV csv_Produktbezeichnung_13 " + csv_Produktbezeichnung_13)
        # logger.info("print_deliverynote CSV payment_date " + payment_date)
        # logger.info("print_deliverynote CSV working_days " + working_days)
        
        payment_date_obj = datetime.datetime.strptime(payment_date, '%d.%m.%Y %H:%M:%S')
        csv_Kaufdatum_9 = payment_date_obj.strftime("%d.%m.%Y")
        csv_Verladedatum_10 = csv_Kaufdatum_9
        
        if working_days == "X":
            delivery_date_obj = payment_date_obj
        else:
            delivery_date_obj = payment_date_obj + datetime.timedelta(days=int(working_days))
        csv_Lieferdatum_11 = delivery_date_obj.strftime("%d.%m.%Y")

    except Exception as e:
        logger.error(e)
  
    nms = [
        [csv_Auftragsnummer_1, csv_company_2, csv_Name_3, csv_Strasse_4, csv_PLZ_5, csv_Ort_6, csv_Telefon_7, csv_Email_8,
         csv_Kaufdatum_9, csv_Verladedatum_10, csv_Lieferdatum_11, csv_Plattform_12, csv_seller_13, csv_Versender_14,
         csv_Gewicht_15, csv_Anzahl_16, csv_Memo_17, csv_ZustellungOderAbholung_18, csv_Produktbezeichnung1_19,
         csv_Produktbezeichnung2_20, csv_Produktbezeichnung3_21, csv_Produktbezeichnung4_22,
         csv_Produktbezeichnung5_23, csv_Produktbezeichnung6_24, csv_Produktbezeichnung7_25,
         csv_Produktbezeichnung8_26, csv_Produktbezeichnung9_27, csv_Produktbezeichnung10_28,
         csv_Produktbezeichnung11_29, csv_Produktbezeichnung12_30, csv_Produktbezeichnung13_31,
         csv_Produktbezeichnung14_32, csv_Produktbezeichnung15_33]]
    
    csv_file_path = '%s/../csv_files/%s-%s.csv' % (source_path, prefix, platform_id)
    print("csv file path is  %s" % csv_file_path)
    f = open(csv_file_path, 'w')
    with f:
        # integer without quotes will be written without quotes
        writer = csv.writer(f, quoting=csv.QUOTE_NONNUMERIC, delimiter=";")
        writer.writerows(nms)

def write_csv_italy(is_sogood,
              prefix,
              source_path,
              platform_id,
              customerCompany,
              customerTitle,
              customerSurname,
              customerFirstname,
              customerStreet,
              customerPostcode,
              customerCity,
              customerCountry,
              customerMail,
              customerTelephone,
              customerShippingCompany,
              customerShippingSurname,
              customerShippingFirstname,
              customerShippingStreet,
              customerShippingPostcode,
              customerShippingCity,
              customerShippingCountry,
              customerShippingTelephone,
              payment_date,
              working_days,
              weight,
              countOfPackages,
              memo,
              soldItems,
              orderId):
    logger.info("write_csv_italy with orderId " + orderId);

    csv_Email_7 = customerMail if customerMail else ""
    csv_Kaufdatum_8 = ""
    csv_Lieferdatum_9 = ""
    csv_Plattform_10 = ""
    csv_seller_11 = ""
    csv_Produktbezeichnung_12 = ""
    csv_Memo_15 = memo
    csv_ZustellungOderAbholung_16 = "Zustellung"
    csv_Category_17 = ""
    csv_Anzahl_14 = 0

    csv_VABCCM_1 = "1601389";        # account is 1601389, fixed vale
    csv_VABCTR_2 = "300";            # price is 300, fixed value
    csv_VABLNP_3 = "160";            # shipping from depot 160, fixed value
    csv_VABCBO_4 = "1";              # logistic cost code 1, fixed value
    csv_VABTSP_5 = "C";              # speed is express/C, fixed value
    csv_VABRMN_6 = platform_id;      # order id
    csv_VABRSD_7 = "";               # consignee name, size limit? move oversized part to comment
    csv_VABRSD_7 = customerShippingFirstname if customerShippingFirstname else (customerFirstname if customerFirstname else "") # using the shipping name + check empty
    csv_VABRSD_7 += " "
    csv_VABRSD_7 += customerShippingSurname if customerShippingSurname else (customerSurname if customerSurname else "")
    csv_VABIND_8 = "";               # consignee addr, size limit? move oversized part to comment
    csv_VABIND_8 = customerShippingStreet if customerShippingStreet else (customerStreet if customerStreet else "")
    csv_VABNOT_9 = "";               # consignee comment    
    csv_VABCAD_10 = customerShippingPostcode if customerShippingPostcode else (customerPostcode if customerPostcode else "")               
    csv_VABLOD_11 = customerShippingCity if customerShippingCity else (customerCity if customerCity else "")
    csv_VABPRD_12 = "BS";            # where is city code specified? For consignee for shipper
    csv_VABNZD_13 = "IT";
    csv_VABNCL_14 = 0;               # count of package like csv_Anzahl_14
    csv_VABPKB_15 = weight;          # weight in KG like
    csv_VABNRC_16 = csv_VABRSD_7;    # what is the difference here?
    csv_VABTRC_17 = customerShippingTelephone if customerShippingTelephone else (customerTelephone if customerTelephone else "")
    csv_VABEMD_18 = customerMail if customerMail else ""
    csv_VABCEL_19 = csv_VABTRC_17;   # what is the difference?
    csv_VABTNO_20 = 2;               # 3 for mail + SMS, 2 for only SMS

    try:
        loaded_json = json.loads(soldItems, strict=False)
        items_json = loaded_json["items"]
        # print(json.dumps(items_json, indent=4, sort_keys=True))
        for i, x in enumerate(items_json):
            if x["stammbezeichnung"] is not None:
                csv_Produktbezeichnung_12 += x["stammbezeichnung"]
            else:
                csv_Produktbezeichnung_12 += x["comment"]
            if x["packstueck"] is not None:
                csv_Produktbezeichnung_12 += " x " + str(x["quantity"])
            if i != len(items_json)-1 :
                csv_Produktbezeichnung_12 += "\015" # new line in excel
            if x["ean"] is not None:
                csv_Anzahl_14 += int(x["quantity"])
            if not csv_Plattform_10 and x["marketplace"] is not None:
                csv_Plattform_10 = x["marketplace"]
            if not csv_Category_17 and x["category"] is not None:
                csv_Category_17 += x["category"]

        if csv_Plattform_10 == "Hitflip":
            csv_Plattform_10 = "Kaufland"
        # elif csv_Plattform_10 == "maimai24":
        #     csv_Plattform_10 = "Goodone"
        # elif csv_Plattform_10 == "96994_sogood-de":
        #     csv_Plattform_10 = "Shop"

        csv_seller_11 = "sogood" if (is_sogood == 'True') else "maimai24"
    
        # logger.info("print_deliverynote CSV csv_Produktbezeichnung_11 " + csv_Produktbezeichnung_11)
        # logger.info("print_deliverynote CSV payment_date " + payment_date)
        # logger.info("print_deliverynote CSV working_days " + working_days)
        
        payment_date_obj = datetime.datetime.strptime(payment_date, '%d.%m.%Y %H:%M:%S')
        csv_Kaufdatum_8 = payment_date_obj.strftime("%d.%m.%Y")
        
        if working_days == "X":
            delivery_date_obj = payment_date_obj
        else:
            delivery_date_obj = payment_date_obj + datetime.timedelta(days=int(working_days))
        csv_Lieferdatum_9 = delivery_date_obj.strftime("%d.%m.%Y")

    except Exception as e:
        logger.error(e)
  
    nms = [
        [csv_VABCCM_1, csv_VABCTR_2, csv_VABLNP_3, csv_VABCBO_4, csv_VABTSP_5, csv_VABRMN_6, csv_VABRSD_7,
         csv_VABIND_8, csv_VABNOT_9, csv_VABCAD_10, csv_VABLOD_11, csv_VABPRD_12, 
         csv_VABNZD_13, csv_VABNCL_14, csv_VABPKB_15, csv_VABNRC_16, csv_VABTRC_17,
         csv_VABEMD_18, csv_VABCEL_19, csv_VABTNO_20]]
    
    csv_file_path = '%s/../csv_files/%s-%s.csv' % (source_path, prefix, platform_id)
    print("csv file path is  %s" % csv_file_path)
    f = open(csv_file_path, 'w')
    with f:
        # integer without quotes will be written without quotes
        writer = csv.writer(f, quoting=csv.QUOTE_NONNUMERIC)
        writer.writerows(nms)

@csrf_exempt
def stockup_pdf(request):
    prefix = request.POST.get("prefix")
    collis = request.POST.get("collis")

    if not prefix:
        logger.error("stockup_pdf failed because of missing of prefix")
        return HttpResponse("stockup failed due to missing prefix")
    logger.info("stockup_pdf with prefix " + prefix)
    loaded_json = json.loads(collis, strict=False)
    collis_json = loaded_json["collis"]
    list_collis= []
    for i, x in enumerate(collis_json):
        if x["ean"] is not None and str(x["ean"]):
            ean = x["ean"]
        if x["title"] is not None and str(x["title"]):
            title = x["title"]
        if x["count"] is not None and str(x["count"]):
            count = x["count"]
        logger.info("stockup_pdf with ean " + ean + " name " + title + " quantity " + count)
        list_collis.append(stockup.Colli(ean, title, count))

    stockup_print = stockup.StockupPrintable(io.BytesIO(), list_collis)
    stockup_pdf_blob = stockup_print.do()

    source_path = os.path.dirname(os.path.abspath(__file__))
    file_path = '%s/../pdf_files/%s-%s.pdf' % (source_path, prefix, "stockup")
    print("file path is  %s" % file_path)
    file = open(file_path, "wb")
    file.write(stockup_pdf_blob)
    return HttpResponse("stockup pdfs")
@csrf_exempt
def eki_stockup_pdf(request):
    prefix = request.POST.get("prefix")
    collis = request.POST.get("collis")

    if not prefix:
        logger.error("stockup_pdf failed because of missing of prefix")
        return HttpResponse("stockup failed due to missing prefix")
    logger.info("stockup_pdf with prefix " + prefix)
    loaded_json = json.loads(collis, strict=False)
    collis_json = loaded_json["collis"]
    list_collis= []
    for i, x in enumerate(collis_json):
        if x["ean"] is not None and str(x["ean"]):
            ean = x["ean"]
        if x["title"] is not None and str(x["title"]):
            title = x["title"]
        if x["count"] is not None and str(x["count"]):
            count = x["count"]
        logger.info("stockup_pdf with ean " + ean + " name " + title + " quantity " + count)
        list_collis.append(stockup.Colli(ean, title, count))

    stockup_print = stockup.StockupPrintable(io.BytesIO(), list_collis)
    stockup_pdf_blob = stockup_print.do()

    # 转成 Base64
    pdf_base64 = base64.b64encode(stockup_pdf_blob).decode("utf-8")
    return HttpResponse(pdf_base64)

@csrf_exempt
def merge_pdf(request):
    prefix = request.POST.get("prefix")
    if not prefix:
        logger.error("merge_pdf failed because of missing of prefix")
        return HttpResponse("merge failed due to missing prefix")
    logger.info("merge_pdf with prefix " + prefix)

    source_path = os.path.dirname(os.path.abspath(__file__))
    paths = glob.glob(source_path + '/../pdf_files/%s-*.pdf' % (prefix))
    paths = [f for f in paths if re.search(r'%s-[\w\d]+\.pdf$' % re.escape(prefix), f)]
    paths.sort(key=os.path.getmtime)

    pdf_merger = PdfFileMerger()

    total_pages = 0
    for path in paths:
        reader = PdfFileReader(path)
        if "picklist" not in path and "stockup" not in path:
            total_pages += len(reader.pages)

    starting_page = 1
    for path in paths:
        reader = PdfFileReader(path)
        if "picklist" not in path and "stockup" not in path:
            writer, starting_page = add_page_numbers(reader, starting_page, total_pages)
        else:
            writer = PdfFileWriter()
            for page in reader.pages:
                writer.addPage(page)

        temp_pdf_io = io.BytesIO()
        writer.write(temp_pdf_io)
        temp_pdf_io.seek(0)

        pdf_merger.append(temp_pdf_io)

    berlin = pytz.timezone("Europe/Berlin")
    now = datetime.datetime.now(berlin)
    formatted_time = now.strftime("%Y-%m-%d.%H%M%S")
    merged_pdf_path = source_path + '/../pdf_files/%s.%s.pdf' % (formatted_time,prefix)
    with open(merged_pdf_path, 'wb') as fileobj:
        pdf_merger.write(fileobj)
    logger.info(f"Merged PDF saved to: {merged_pdf_path}")

    merge_backup_dir = os.path.join(source_path, '../pdf_merge_files')
    os.makedirs(merge_backup_dir, exist_ok=True)

    for path in paths:
        filename = os.path.basename(path)
        name, ext = os.path.splitext(filename)
        new_filename = f"{name}-merge{ext}"
        backup_path = os.path.join(merge_backup_dir, new_filename)
        shutil.copy2(path, backup_path)
        logger.info(f"Backup copied to: {backup_path}")

    for path in paths:
        os.remove(path)

    if  "EKI" in str(prefix):
        list_eki.clear()
    elif str(prefix) == "DE":
        list_de.clear()
    elif str(prefix) == "IT":
        list_it.clear()
    elif str(prefix) == "FR":
        list_fr.clear()
    elif str(prefix) == "DE-SOGOOD":
        list_desogood.clear()
    elif str(prefix) == "IT-SOGOOD":
        list_itsogood.clear()
    elif str(prefix) == "FR-SOGOOD":
        list_frsgood.clear()
    elif str(prefix) == "maimai24":
        list_maimai24.clear()   
    else:
        list_others.clear()
    merge_csv(prefix,formatted_time)
    merge_xlsx(prefix)

    pdf_base64 = base64.b64encode(open(merged_pdf_path, 'rb').read()).decode('utf-8')
    return HttpResponse(pdf_base64)

    # return HttpResponse("merge pdfs")

def add_page_numbers(reader, starting_page, total_pages):
    writer = PdfFileWriter()
    num_pages = len(reader.pages)

    for i in range(num_pages):
        page = reader.pages[i]

        packet = io.BytesIO()
        c = canvas.Canvas(packet, pagesize=A4)
        c.setFont("Helvetica", 6)
        c.drawCentredString(100 * mm, 10 * mm,
                                "%d von %d" % ((starting_page + i), total_pages))
        c.save()

        packet.seek(0)
        page_with_number = PdfFileReader(packet).pages[0]
        page.mergePage(page_with_number)

        writer.addPage(page)

    return writer, starting_page + num_pages

def merge_csv(prefix,formatted_time):
    logger.info("merge_csv with prefix " + prefix)
    source_path = os.path.dirname(os.path.abspath(__file__))
    paths = glob.glob(source_path + '/../csv_files/%s-*.csv' % (prefix))
    paths = [f for f in paths if re.search(r'%s-\d+\.csv$' % re.escape(prefix), f)]
    paths.sort(key=os.path.getmtime)
    
    if not paths:
        logger.info("merge_csv the " + prefix + " is empty!")
        return

    #export to csv
    # berlin = pytz.timezone("Europe/Berlin")
    # now = datetime.datetime.now(berlin)
    # formatted_time = now.strftime("%Y-%m-%d.%H%M%S")
    combined_csv_filepath = source_path + '/../csv_files/%s.%s.csv' % (formatted_time,prefix)

    with open(combined_csv_filepath, 'w') as outfile:
        for fname in paths:
            with open(fname) as infile:
                outfile.write(infile.read())
                # outfile.write("\n")
    
    for path in paths:
        os.remove(path)

def merge_xlsx(prefix):
    source_path = os.path.dirname(os.path.abspath(__file__))
    paths = glob.glob(source_path + '/../xlsx_files/%s-*.xlsx' % (prefix))
    paths.sort()

    if not paths:
        logger.info("merge_excel the " + prefix + " is empty!")
        return

    # combined_xlsx_filepath = source_path + '/../xlsx_files/%s-merged.xlsx' % (prefix)
    # combined_data = pd.DataFrame()

    # for path in paths:
    #     data = pd.read_excel(path)
    #     combined_data = combined_data.append(data, ignore_index=True) # ZZT: it returns error!!!

    # combined_data.to_excel(combined_xlsx_filepath, index=False)

    for path in paths:
        os.remove(path)

def write_xlsx(is_sogood,
              prefix,
              source_path,
              platform_id,
              customerCompany,
              customerTitle,
              customerSurname,
              customerFirstname,
              customerStreet,
              customerPostcode,
              customerCity,
              customerCountry,
              customerMail,
              customerTelephone,
              customerShippingSurname,
              customerShippingFirstname,
              customerShippingStreet,
              customerShippingPostcode,
              customerShippingCity,
              customerShippingCountry,
              customerShippingTelephone,
              payment_date,
              working_days,
              weight,
              countOfPackages,
              memo,
              soldItems,
              orderId):
    logger.info('write_xlsx with orderId ' + orderId)
    if prefix == "DE-SOGOOD":
        return write_xlsx_eki(is_sogood,
              prefix,
              source_path,
              platform_id,
              customerCompany,
              customerTitle,
              customerSurname,
              customerFirstname,
              customerStreet,
              customerPostcode,
              customerCity,
              customerCountry,
              customerMail,
              customerTelephone,
              customerShippingSurname,
              customerShippingFirstname,
              customerShippingStreet,
              customerShippingPostcode,
              customerShippingCity,
              customerShippingCountry,
              customerShippingTelephone,
              payment_date,
              working_days,
              weight,
              countOfPackages,
              memo,
              soldItems,
              orderId);
    elif prefix == "italy":
        logger.info('write_xlsx_italy DUPA')
        return write_xlsx_italy(is_sogood,
              prefix,
              source_path,
              platform_id,
              customerCompany,
              customerTitle,
              customerSurname,
              customerFirstname,
              customerStreet,
              customerPostcode,
              customerCity,
              customerCountry,
              customerMail,
              customerTelephone,
              customerShippingSurname,
              customerShippingFirstname,
              customerShippingStreet,
              customerShippingPostcode,
              customerShippingCity,
              customerShippingCountry,
              customerShippingTelephone,
              payment_date,
              working_days,
              weight,
              countOfPackages,
              memo,
              soldItems,
              orderId);
    else:
        logger.info('write_xlsx_none DUPA')
        return None;

def write_xlsx_italy(is_sogood,
                      prefix,
                      source_path,
                      platform_id,
                      customerCompany,
                      customerTitle,
                      customerSurname,
                      customerFirstname,
                      customerStreet,
                      customerPostcode,
                      customerCity,
                      customerCountry,
                      customerMail,
                      customerTelephone,
                      customerShippingSurname,
                      customerShippingFirstname,
                      customerShippingStreet,
                      customerShippingPostcode,
                      customerShippingCity,
                      customerShippingCountry,
                      customerShippingTelephone,
                      payment_date,
                      working_days,
                      weight,
                      countOfPackages,
                      memo,
                      soldItems,
                      orderId):
    logger.info('write_xlsx_italy with orderId ' + orderId)
    csv_Email_7 = customerMail if customerMail else ""
    csv_Kaufdatum_8 = ""
    csv_Lieferdatum_9 = ""
    csv_Plattform_10 = ""
    csv_seller_11 = ""
    csv_Produktbezeichnung_12 = ""
    csv_Anzahl_14 = 0
    csv_Memo_15 = memo
    csv_ZustellungOderAbholung_16 = "Zustellung"
    csv_Category_17 = ""

    csv_VABCCM_1 = "1601389"
    csv_VABCTR_2 = "300"
    csv_VABLNP_3 = "160"
    csv_VABCBO_4 = "1"
    csv_VABTSP_5 = "C"
    csv_VABRMN_6 = platform_id
    csv_VABRSD_7 = ""
    csv_VABRSD_7 = customerShippingFirstname if customerShippingFirstname else (customerFirstname if customerFirstname else "")
    csv_VABRSD_7 += " "
    csv_VABRSD_7 += customerShippingSurname if customerShippingSurname else (customerSurname if customerSurname else "")
    csv_VABIND_8 = ""
    csv_VABIND_8 = customerShippingStreet if customerShippingStreet else (customerStreet if customerStreet else "")
    csv_VABNOT_9 = ""
    csv_VABCAD_10 = customerShippingPostcode if customerShippingPostcode else (customerPostcode if customerPostcode else "")
    csv_VABLOD_11 = customerShippingCity if customerShippingCity else (customerCity if customerCity else "")
    csv_VABPRD_12 = "BS"
    csv_VABNZD_13 = "IT"
    csv_VABNCL_14 = 0
    csv_VABPKB_15 = weight
    csv_VABNRC_16 = csv_VABRSD_7
    csv_VABTRC_17 = customerShippingTelephone if customerShippingTelephone else (customerTelephone if customerTelephone else "")
    csv_VABEMD_18 = customerMail if customerMail else ""
    csv_VABCEL_19 = csv_VABTRC_17
    csv_VABTNO_20 = 2

    try:
        loaded_json = json.loads(soldItems, strict=False)
        items_json = loaded_json["items"]
        for i, x in enumerate(items_json):
            if x["stammbezeichnung"] is not None:
                csv_Produktbezeichnung_12 += x["stammbezeichnung"]
            else:
                csv_Produktbezeichnung_12 += x["comment"]
            if x["packstueck"] is not None:
                csv_Produktbezeichnung_12 += " x " + str(x["quantity"])
            if i != len(items_json) - 1:
                csv_Produktbezeichnung_12 += "\015"
            if x["ean"] is not None:
                csv_Anzahl_14 += int(x["quantity"])
            if not csv_Plattform_10 and x["marketplace"] is not None:
                csv_Plattform_10 = x["marketplace"]
            if not csv_Category_17 and x["category"] is not None:
                csv_Category_17 += x["category"]

        if csv_Plattform_10 == "Hitflip":
            csv_Plattform_10 = "Kaufland"

        csv_seller_11 = "sogood" if (is_sogood == 'True') else "maimai24"

        payment_date_obj = datetime.datetime.strptime(payment_date, '%d.%m.%Y %H:%M:%S')
        csv_Kaufdatum_8 = payment_date_obj.strftime("%d.%m.%Y")

        if working_days == "X":
            delivery_date_obj = payment_date_obj
        else:
            delivery_date_obj = payment_date_obj + datetime.timedelta(days=int(working_days))
        csv_Lieferdatum_9 = delivery_date_obj.strftime("%d.%m.%Y")

    except Exception as e:
        logger.error(e)

    data = [
        [csv_VABCCM_1, csv_VABCTR_2, csv_VABLNP_3, csv_VABCBO_4, csv_VABTSP_5, csv_VABRMN_6, csv_VABRSD_7,
         csv_VABIND_8, csv_VABNOT_9, csv_VABCAD_10, csv_VABLOD_11, csv_VABPRD_12,
         csv_VABNZD_13, csv_VABNCL_14, csv_VABPKB_15, csv_VABNRC_16, csv_VABTRC_17,
         csv_VABEMD_18, csv_VABCEL_19, csv_VABTNO_20]
    ]

    df = pd.DataFrame(data)

    excel_file_path = '%s/../xlsx_files/%s-%s.xlsx' % (source_path, prefix, platform_id)
    logger.info('excel_file_path' + excel_file_path)
    df.to_excel(excel_file_path, index=False)
    print("Excel file path is %s" % excel_file_path)

def write_xlsx_eki(is_sogood, prefix, source_path, platform_id, customerCompany, customerTitle, customerSurname,
                  customerFirstname, customerStreet, customerPostcode, customerCity, customerCountry, customerMail,
                  customerTelephone, customerShippingSurname, customerShippingFirstname, customerShippingStreet,
                  customerShippingPostcode, customerShippingCity, customerShippingCountry, customerShippingTelephone,
                  payment_date, working_days, weight, countOfPackages, memo, soldItems, orderId):
    logger.info('write_xlsx_eki with orderId ' + orderId)
    csv_Auftragsnummer_1 = platform_id
    csv_Name_2 = customerShippingFirstname if customerShippingFirstname else (
        customerFirstname if customerFirstname else "")
    csv_Name_2 += " "
    csv_Name_2 += customerShippingSurname if customerShippingSurname else (customerSurname if customerSurname else "")
    csv_Strasse_3 = customerShippingStreet if customerShippingStreet else (customerStreet if customerStreet else "")
    csv_PLZ_4 = customerShippingPostcode if customerShippingPostcode else (customerPostcode if customerPostcode else "")
    csv_Ort_5 = customerShippingCity if customerShippingCity else (customerCity if customerCity else "")
    csv_Telefon_6 = customerShippingTelephone if customerShippingTelephone else (
        customerTelephone if customerTelephone else "")
    csv_Email_7 = customerMail if customerMail else ""
    csv_Kaufdatum_8 = ""
    csv_Lieferdatum_9 = ""
    csv_Plattform_10 = ""
    csv_seller_11 = ""
    csv_Produktbezeichnung_12 = ""
    csv_Gewicht_13 = weight
    csv_Anzahl_14 = 0
    csv_Memo_15 = memo
    csv_ZustellungOderAbholung_16 = "Zustellung"
    csv_Category_17 = ""

    try:
        loaded_json = json.loads(soldItems, strict=False)
        items_json = loaded_json["items"]
        for i, x in enumerate(items_json):
            if x["stammbezeichnung"] is not None:
                csv_Produktbezeichnung_12 += x["stammbezeichnung"]
            else:
                csv_Produktbezeichnung_12 += x["comment"]
            if x["packstueck"] is not None:
                csv_Produktbezeichnung_12 += " x " + str(x["quantity"])
            if i != len(items_json) - 1:
                csv_Produktbezeichnung_12 += "\n"  # new line in Excel
            if x["ean"] is not None:
                csv_Anzahl_14 += int(x["quantity"])
            if not csv_Plattform_10 and x["marketplace"] is not None:
                csv_Plattform_10 = x["marketplace"]
            if not csv_Category_17 and x["category"] is not None:
                csv_Category_17 += x["category"]

        if csv_Plattform_10 == "Hitflip":
            csv_Plattform_10 = "Kaufland"

        csv_seller_11 = "sogood" if (is_sogood == 'True') else "maimai24"

        payment_date_obj = datetime.datetime.strptime(payment_date, '%d.%m.%Y %H:%M:%S')
        csv_Kaufdatum_8 = payment_date_obj.strftime("%d.%m.%Y")

        if working_days == "X":
            delivery_date_obj = payment_date_obj
        else:
            delivery_date_obj = payment_date_obj + datetime.timedelta(days=int(working_days))
        csv_Lieferdatum_9 = delivery_date_obj.strftime("%d.%m.%Y")

    except Exception as e:
        logger.error(e)

    data = {
        "Auftragsnummer": [csv_Auftragsnummer_1],
        "Name": [csv_Name_2],
        "Strasse": [csv_Strasse_3],
        "PLZ": [csv_PLZ_4],
        "Ort": [csv_Ort_5],
        "Telefon": [csv_Telefon_6],
        "Email": [csv_Email_7],
        "Kaufdatum": [csv_Kaufdatum_8],
        "Lieferdatum": [csv_Lieferdatum_9],
        "Plattform": [csv_Plattform_10],
        "Seller": [csv_seller_11],
        "Produktbezeichnung": [csv_Produktbezeichnung_12],
        "Gewicht": [csv_Gewicht_13],
        "Anzahl": [csv_Anzahl_14],
        "Memo": [csv_Memo_15],
        "ZustellungOderAbholung": [csv_ZustellungOderAbholung_16],
        "Category": [csv_Category_17]
    }

    df = pd.DataFrame(data)
    excel_file_path = '%s/../xlsx_files/%s-%s.xlsx' % (source_path, prefix, platform_id)
    logger.info('excel_file_path' + excel_file_path)
    df.to_excel(excel_file_path, index=False)
    print("Excel file path is %s" % excel_file_path)

@csrf_exempt
def print_nachlieferung(request):
        """
        Django View : endpoint
        :param request: httpRequest
        :rtype: HttpResponse
        """
        # FIXME: using request to fetch the all parameters
        is_sogood = request.POST.get("is_sogood")
        platform_id = request.POST.get("Originale BestellNr")
        order_date = request.POST.get("Bestelldatum")
        orderId = request.POST.get("Originale BestellNr")
        type = request.POST.get("type")
        # customer data
        customerCompany = request.POST.get("company")
        customerTitle = request.POST.get("title")
        customerSurname = request.POST.get("lastName")
        customerFirstname = request.POST.get("firstName")
        customerStreet = request.POST.get("street")
        customerPostcode = request.POST.get("postalCode")
        customerCity = request.POST.get("city")
        customerCountry = request.POST.get("countryISO")
        customerMail = request.POST.get("mail")
        customerTelephone = request.POST.get("phone")
        elements = request.POST.get("elements")
        weight = request.POST.get("weight")  # return None if 'sth' is not in request.POST
        countOfPackages = request.POST.get("countOfPackages")
        memo = request.POST.get("memo")
        erstellungsdatum = request.POST.get("Erstellungsdatum")
        versand = request.POST.get("Versand bis spaetestens")
        userIdPlattform = request.POST.get("userIdPlattform")
        xNachlieferungId = request.POST.get("xNachlieferungId")
        logger.info("print_deliverynote with the orderId " + erstellungsdatum + " -------->")

        # Create the HttpResponse object with the appropriate PDF headers.
        response = HttpResponse(content_type='application/pdf')
        response['Content-Disposition'] = 'attachment; filename="invoice.pdf"'
        sogood_print = nachlieferung.SogoodPrintable(io.BytesIO(),
                                                    is_sogood,
                                                    platform_id,
                                                    order_date,
                                                    type,
                                                    customerCompany,
                                                    customerTitle,
                                                    customerSurname,
                                                    customerFirstname,
                                                    customerStreet,
                                                    customerPostcode,
                                                    customerCity,
                                                    customerCountry,
                                                    customerMail,
                                                    customerTelephone,
                                                    elements,
                                                    memo,
                                                    erstellungsdatum,
                                                    versand,
                                                    userIdPlattform,
                                                    orderId,
                                                    xNachlieferungId)
        pdf_blob = sogood_print.do()
        # 将PDF字节流转换为base64字符串
        pdf_base64 = base64.b64encode(pdf_blob).decode('utf-8')
        #
        # # 创建响应对象，并写入base64字符串
        response = HttpResponse(pdf_base64, content_type='text/plain')
        return  response;


@csrf_exempt
def print_gutschrift(request):
    """
    Django View : endpoint
    Used by Goodone document.php
    :param request: httpRequest
    :rtype: HttpResponse
    """
    # FIXME: using request to fetch the all parameters
    is_sogood = request.POST.get("is_sogood")
    is_sogood = bool(int(is_sogood))  # 将字符串转换为布尔值
    platform_id = request.POST.get("platform_id")
    order_date = request.POST.get("order_date")
    type = request.POST.get("type")
    tax = request.POST.get("tax")
    # customer data
    customerCompany = request.POST.get("customerCompany")
    customerTitle = request.POST.get("customerTitle")
    customerSurname = request.POST.get("customerSurname")
    customerFirstname = request.POST.get("customerFirstname")
    customerStreet = request.POST.get("customerStreet")
    customerPostcode = request.POST.get("customerPostcode")
    customerCity = request.POST.get("customerCity")
    customerCountry = request.POST.get("customerCountry")
    customerMail = request.POST.get("customerMail")
    customerTelephone = request.POST.get("customerTelephone")

    paymentMethod = request.POST.get("paymentMethod")
    paymentDetails = request.POST.get("paymentDetails")
    paidSum = request.POST.get("paidSum")
    paidTax = request.POST.get("paidTax")
    shippingMethod = request.POST.get("shippingMethod")
    shippingDatails = request.POST.get("shippingDatails")
    soldItems = request.POST.get("soldItems")
    comment = request.POST.get("comment")
    memo_ab = request.POST.get("memo_ab")

    # new params
    docNo = request.POST.get("docNo")  # Rechnungsnr. oder Bestellungsnr.
    shippingDate = request.POST.get("shippingDate")  # Voraussichtliches Lieferdatum
    docDate = request.POST.get("docDate")
    show_customer_name_in_doc = request.POST.get("show_customer_name_in_doc")
    vat_nr = request.POST.get("vat_nr")
    arbeitsort = request.POST.get("arbeitsort")
    dealWith = request.POST.get("deal_with")
    country = request.POST.get("country")
    orderId = request.POST.get("orderId")
    systemId = request.POST.get("systemId")

    # Create the HttpResponse object with the appropriate PDF headers.
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = 'attachment; filename="invoice.pdf"'
    sogood_print = gutschrift.SogoodPrintable(io.BytesIO(),
                                          is_sogood,
                                          platform_id,
                                          order_date,
                                          type,
                                          tax,
                                          customerCompany,
                                          customerTitle,
                                          customerSurname,
                                          customerFirstname,
                                          customerStreet,
                                          customerPostcode,
                                          customerCity,
                                          customerCountry,
                                          customerMail,
                                          customerTelephone,
                                          paymentMethod,
                                          paymentDetails,
                                          paidSum,
                                          paidTax,
                                          shippingMethod,
                                          shippingDatails,
                                          soldItems,
                                          comment,
                                          memo_ab,
                                          docNo,
                                          shippingDate,
                                          docDate,
                                          show_customer_name_in_doc,
                                          vat_nr,
                                          arbeitsort,
                                          dealWith,
                                          country,
                                          orderId,
                                          systemId)
    pdf_blob = sogood_print.do()
    # 将PDF字节流转换为base64字符串
    pdf_base64 = base64.b64encode(pdf_blob).decode('utf-8')
    return HttpResponse(pdf_base64)
    # response.write(pdf_blob)
    # return response


@csrf_exempt
def print_it_gutschrift(request):
    """
    Django View : endpoint
    Used by Goodone document.php
    :param request: httpRequest
    :rtype: HttpResponse
    """
    # FIXME: using request to fetch the all parameters
    is_sogood = request.POST.get("is_sogood")
    is_sogood = bool(int(is_sogood))  # 将字符串转换为布尔值
    platform_id = request.POST.get("platform_id")
    order_date = request.POST.get("order_date")
    type = request.POST.get("type")
    tax = request.POST.get("tax")
    # customer data
    customerCompany = request.POST.get("customerCompany")
    customerTitle = request.POST.get("customerTitle")
    customerSurname = request.POST.get("customerSurname")
    customerFirstname = request.POST.get("customerFirstname")
    customerStreet = request.POST.get("customerStreet")
    customerPostcode = request.POST.get("customerPostcode")
    customerCity = request.POST.get("customerCity")
    customerCountry = request.POST.get("customerCountry")
    customerMail = request.POST.get("customerMail")
    customerTelephone = request.POST.get("customerTelephone")

    paymentMethod = request.POST.get("paymentMethod")
    paymentDetails = request.POST.get("paymentDetails")
    paidSum = request.POST.get("paidSum")
    paidTax = request.POST.get("paidTax")
    shippingMethod = request.POST.get("shippingMethod")
    shippingDatails = request.POST.get("shippingDatails")
    soldItems = request.POST.get("soldItems")
    comment = request.POST.get("comment")
    memo_ab = request.POST.get("memo_ab")

    # new params
    docNo = request.POST.get("docNo")  # Rechnungsnr. oder Bestellungsnr.
    shippingDate = request.POST.get("shippingDate")  # Voraussichtliches Lieferdatum
    docDate = request.POST.get("docDate")
    show_customer_name_in_doc = request.POST.get("show_customer_name_in_doc")
    vat_nr = request.POST.get("vat_nr")
    arbeitsort = request.POST.get("arbeitsort")
    dealWith = request.POST.get("deal_with")
    country = request.POST.get("country")
    orderId = request.POST.get("orderId")
    systemId = request.POST.get("systemId")

    # Create the HttpResponse object with the appropriate PDF headers.
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = 'attachment; filename="invoice.pdf"'
    sogood_print = itgutschrift.SogoodPrintable(io.BytesIO(),
                                          is_sogood,
                                          platform_id,
                                          order_date,
                                          type,
                                          tax,
                                          customerCompany,
                                          customerTitle,
                                          customerSurname,
                                          customerFirstname,
                                          customerStreet,
                                          customerPostcode,
                                          customerCity,
                                          customerCountry,
                                          customerMail,
                                          customerTelephone,
                                          paymentMethod,
                                          paymentDetails,
                                          paidSum,
                                          paidTax,
                                          shippingMethod,
                                          shippingDatails,
                                          soldItems,
                                          comment,
                                          memo_ab,
                                          docNo,
                                          shippingDate,
                                          docDate,
                                          show_customer_name_in_doc,
                                          vat_nr,
                                          arbeitsort,
                                          dealWith,
                                          country,
                                          orderId,
                                          systemId)
    pdf_blob = sogood_print.do()
    # 将PDF字节流转换为base64字符串
    pdf_base64 = base64.b64encode(pdf_blob).decode('utf-8')
    return HttpResponse(pdf_base64)
    # response.write(pdf_blob)
    # return response


@csrf_exempt
def print_uk_gutschrift(request):
    """
    Django View : endpoint
    Used by Goodone document.php
    :param request: httpRequest
    :rtype: HttpResponse
    """
    # FIXME: using request to fetch the all parameters
    is_sogood = request.POST.get("is_sogood")
    is_sogood = bool(int(is_sogood))  # 将字符串转换为布尔值
    platform_id = request.POST.get("platform_id")
    order_date = request.POST.get("order_date")
    type = request.POST.get("type")
    tax = request.POST.get("tax")
    # customer data
    customerCompany = request.POST.get("customerCompany")
    customerTitle = request.POST.get("customerTitle")
    customerSurname = request.POST.get("customerSurname")
    customerFirstname = request.POST.get("customerFirstname")
    customerStreet = request.POST.get("customerStreet")
    customerPostcode = request.POST.get("customerPostcode")
    customerCity = request.POST.get("customerCity")
    customerCountry = request.POST.get("customerCountry")
    customerMail = request.POST.get("customerMail")
    customerTelephone = request.POST.get("customerTelephone")

    paymentMethod = request.POST.get("paymentMethod")
    paymentDetails = request.POST.get("paymentDetails")
    paidSum = request.POST.get("paidSum")
    paidTax = request.POST.get("paidTax")
    shippingMethod = request.POST.get("shippingMethod")
    shippingDatails = request.POST.get("shippingDatails")
    soldItems = request.POST.get("soldItems")
    comment = request.POST.get("comment")
    memo_ab = request.POST.get("memo_ab")

    # new params
    docNo = request.POST.get("docNo")  # Rechnungsnr. oder Bestellungsnr.
    shippingDate = request.POST.get("shippingDate")  # Voraussichtliches Lieferdatum
    docDate = request.POST.get("docDate")
    show_customer_name_in_doc = request.POST.get("show_customer_name_in_doc")
    vat_nr = request.POST.get("vat_nr")
    arbeitsort = request.POST.get("arbeitsort")
    dealWith = request.POST.get("deal_with")
    country = request.POST.get("country")
    orderId = request.POST.get("orderId")
    systemId = request.POST.get("systemId")

    # Create the HttpResponse object with the appropriate PDF headers.
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = 'attachment; filename="invoice.pdf"'
    sogood_print = ukgutschrift.SogoodPrintable(io.BytesIO(),
                                          is_sogood,
                                          platform_id,
                                          order_date,
                                          type,
                                          tax,
                                          customerCompany,
                                          customerTitle,
                                          customerSurname,
                                          customerFirstname,
                                          customerStreet,
                                          customerPostcode,
                                          customerCity,
                                          customerCountry,
                                          customerMail,
                                          customerTelephone,
                                          paymentMethod,
                                          paymentDetails,
                                          paidSum,
                                          paidTax,
                                          shippingMethod,
                                          shippingDatails,
                                          soldItems,
                                          comment,
                                          memo_ab,
                                          docNo,
                                          shippingDate,
                                          docDate,
                                          show_customer_name_in_doc,
                                          vat_nr,
                                          arbeitsort,
                                          dealWith,
                                          country,
                                          orderId,
                                          systemId)
    pdf_blob = sogood_print.do()
    # 将PDF字节流转换为base64字符串
    pdf_base64 = base64.b64encode(pdf_blob).decode('utf-8')
    return HttpResponse(pdf_base64)
    # response.write(pdf_blob)
    # return response


@csrf_exempt
def print_fr_gutschrift(request):
    """
    Django View : endpoint
    Used by Goodone document.php
    :param request: httpRequest
    :rtype: HttpResponse
    """
    # FIXME: using request to fetch the all parameters
    is_sogood = request.POST.get("is_sogood")
    is_sogood = bool(int(is_sogood))  # 将字符串转换为布尔值
    platform_id = request.POST.get("platform_id")
    order_date = request.POST.get("order_date")
    type = request.POST.get("type")
    tax = request.POST.get("tax")
    # customer data
    customerCompany = request.POST.get("customerCompany")
    customerTitle = request.POST.get("customerTitle")
    customerSurname = request.POST.get("customerSurname")
    customerFirstname = request.POST.get("customerFirstname")
    customerStreet = request.POST.get("customerStreet")
    customerPostcode = request.POST.get("customerPostcode")
    customerCity = request.POST.get("customerCity")
    customerCountry = request.POST.get("customerCountry")
    customerMail = request.POST.get("customerMail")
    customerTelephone = request.POST.get("customerTelephone")

    paymentMethod = request.POST.get("paymentMethod")
    paymentDetails = request.POST.get("paymentDetails")
    paidSum = request.POST.get("paidSum")
    paidTax = request.POST.get("paidTax")
    shippingMethod = request.POST.get("shippingMethod")
    shippingDatails = request.POST.get("shippingDatails")
    soldItems = request.POST.get("soldItems")
    comment = request.POST.get("comment")
    memo_ab = request.POST.get("memo_ab")

    # new params
    docNo = request.POST.get("docNo")  # Rechnungsnr. oder Bestellungsnr.
    shippingDate = request.POST.get("shippingDate")  # Voraussichtliches Lieferdatum
    docDate = request.POST.get("docDate")
    show_customer_name_in_doc = request.POST.get("show_customer_name_in_doc")
    vat_nr = request.POST.get("vat_nr")
    arbeitsort = request.POST.get("arbeitsort")
    dealWith = request.POST.get("deal_with")
    country = request.POST.get("country")
    orderId = request.POST.get("orderId")
    systemId = request.POST.get("systemId")

    # Create the HttpResponse object with the appropriate PDF headers.
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = 'attachment; filename="invoice.pdf"'
    sogood_print = frgutschrift.SogoodPrintable(io.BytesIO(),
                                          is_sogood,
                                          platform_id,
                                          order_date,
                                          type,
                                          tax,
                                          customerCompany,
                                          customerTitle,
                                          customerSurname,
                                          customerFirstname,
                                          customerStreet,
                                          customerPostcode,
                                          customerCity,
                                          customerCountry,
                                          customerMail,
                                          customerTelephone,
                                          paymentMethod,
                                          paymentDetails,
                                          paidSum,
                                          paidTax,
                                          shippingMethod,
                                          shippingDatails,
                                          soldItems,
                                          comment,
                                          memo_ab,
                                          docNo,
                                          shippingDate,
                                          docDate,
                                          show_customer_name_in_doc,
                                          vat_nr,
                                          arbeitsort,
                                          dealWith,
                                          country,
                                          orderId,
                                          systemId)
    pdf_blob = sogood_print.do()
    # 将PDF字节流转换为base64字符串
    pdf_base64 = base64.b64encode(pdf_blob).decode('utf-8')
    return HttpResponse(pdf_base64)
    # response.write(pdf_blob)
    # return response