Closed enzoberger closed 10 months ago
Hast du evtl. noch genauere Angaben dazu, was bei dir nicht richtig funktioniert? Dann kann ich das Problem vielleicht besser nachvollziehen. Wieviele Rechnungen hast du pro Monat erhalten, wieviele hast du erwartet?
Entweder hat Stripe was umgebaut
Die verwendete API-Version ist ja fixiert (2020-08-27
), da sollte sich "eigentlich" nichts ändern 🤔
oder wir haben zu viele Rechnungen für die stripe.Invoice.list.
Es wird ja pagination genutzt (.auto_paging_iter()
), da dürfte es kein Problem mit der Anzahl der Rechnungen geben
Dein Code-Beispiel ist so auch nicht korrekt, die Eingrenzung allein auf Basis von created
ist nicht korrekt. Was wir wollen, sind alle Rechnungen die in einem Monat finalized wurden (=Rechnungsdatum). Danach kann man nicht direkt suchen (auch in search()
nicht), daher wurde bisher die Query-Kombination "due_date >= fromTime AND created < toTime" genutzt, und dann client-seitig weiter eingeschränkt. Die Query "created > fromTime" schließt Rechnungen aus, die vor Monatsbeginn erstellt wurden, aber erst nach Monatsbeginn finalisiert wurden. Das geht nicht.
Jetzt warst du aber schnell mit der Antwort! Also ich muss zugeben, das ich noch eine recht alte Version deiner Anwendung habe und weil ich diese sehr angepasst habe, bin ich dort stehen geblieben. Ich hab z.B. die ganzen CreditNotes implementiert, da wir am Anfang einige Zahlungsausfälle hatten und daher gebuchte Rechnungen stornieren mussten.
Ich hatte deine aktuelle Version auch erst mal gar nicht zum Laufen gebracht , weil ich keine accountNumber in den MetaDaten vom Customer habe. Daher hatte ich deinen aktuellen Code in meine Version rein kopiert und war jetzt nicht ganz sicher ob das Problem bei dir überhaupt auftritt.
Aber jetzt habe ich das Problem mit den MetaDaten behoben und auch deine aktuelle Version getestet. Leider das selbe Problem. Also wir haben eigentlich nicht so viele Rechnungen ca. 30-40 pro Monat.
Das Problem mit der finalized Rechnung ist mir so ca. 5 Minuten nachdem ich dir geschrieben habe auf die Füße gefallen, da mir eine Rechnung abging die ich am 28.05 erstellt hatte, aber erst am 02.06 finalisiert hatte.
Ich hab jetzt nicht wirklich die Zeit der Sache genau auf den Grund zu gehen. Meine Lösung wird da wohl eher sein, dass ich die Daten vom Vormonat auch lade.
Falls du motiviert bist und dir das genau anschauen willst, sollten uns mal persönlich unterhalten.
BG. Enzo
Wenn du sicher bist, dass zwischen Erstellung und Finalisierung deiner Rechnungen z.B. maximal ein Monat liegt, könntest du folgendes probieren:
invoices = stripe.Invoice.list(
created={
"lt": int(toTime.timestamp()),
"gte": int((fromTime - datedelta.MONTH).timestamp()),
},
expand=["data.customer", "data.customer.tax_ids"],
).auto_paging_iter()
Sicher bin ich nicht. Aber ich denke, wenn eine Zahlungsmethode nicht funktioniert, dann wird die Rechnung nach 3 Wochen storniert. Aber kann sich in bestimmten Fällen sicher noch etwas länger ziehen. Werde sicherheitshalber 2 Monate nehmen.
Und werde es mit den stripe.Invoice.search machen, weil das list ja nicht mehr funktioniert.
Sollte so in etwa aussehen:
invoices = stripe.Invoice.search( query= "created>" + str(int(fromTime.timestamp())) + " AND created<" + str(int((fromTime - datedelta.datedelta(months=2)).timestamp())) ).auto_paging_iter()
Ich kann das Problem jetzt insoweit nachvollziehen:
invoice.due_date
: "This value will be null for invoices where collection_method=charge_automatically". Das deutet darauf hin, dass ein Filter in invoice.list()
auf Basis des due_date
ggf. problematisch sein könntedue_date
(unsere alte Implementation) aber dennoch Rechnungen mit due_date = null zurück. Daher war das von dir angesprochene Problem in der Vergangenheit kein Thema.Mit dem list()-Call selbst kann ich darüber hinaus keine Problem feststellen, der den Einsatz von search() erfordern würden
Hallo Jonas, hab mir gerade den ganzen Sonntag um die Ohren gehauen. Das Problem, bei uns kamen nur noch die halben Rechnungen beim Export raus. Ich hab mir daher die Stripe API im Postman angeschaut und festgestellt, dass die stripe.Invoice.list nicht mehr richtig funktioniert. Warum weiß ich nicht. Entweder hat Stripe was umgebaut oder wir haben zu viele Rechnungen für die stripe.Invoice.list. Es gibt aber eine stripe.Invoice.search Abfrage. Da kann man eine Query übergibt in der man das created Datum eingrenzen kann. So funktioniert es wieder perfekt. Würde euch dringend empfehlen das asap umzubauen. Ich musste jetzt bin in Mai zurück die Buchhaltung neu exportieren.
Betroffene Datei: invoices.py Methode: listFinalizedInvoices Code Changes:
def listFinalizedInvoices(fromTime, toTime): invoices = stripe.Invoice.search( query= "created>" + str(int(fromTime.timestamp())) + " AND created<" + str(int(toTime.timestamp())) ).auto_paging_iter() for invoice in invoices: .....
Beste Grüße, Enzo