From 208f1b30dbbb694bb605d232a90d6d669a4ef2c2 Mon Sep 17 00:00:00 2001 From: Lauryn Menard Date: Tue, 19 Aug 2025 18:52:36 +0200 Subject: [PATCH] corporate: Invoice self-hosted fixed-price plans with stale data. Because license counts do not change the amount due for plans with a fixed-price, we invoice them for self-hosted customers even when the audit log data from the server is stale. --- corporate/lib/stripe.py | 9 ++++++++ ...rice_monthly_basic_plan--Event.list.2.json | Bin 41924 -> 42742 bytes ...rice_monthly_basic_plan--Event.list.3.json | Bin 11970 -> 12256 bytes ..._monthly_basic_plan--Invoice.create.1.json | Bin 2825 -> 2968 bytes ..._monthly_basic_plan--Invoice.create.2.json | Bin 0 -> 2810 bytes ..._monthly_basic_plan--Invoice.create.3.json | Bin 0 -> 2810 bytes ...asic_plan--Invoice.finalize_invoice.1.json | Bin 4220 -> 4363 bytes ...asic_plan--Invoice.finalize_invoice.2.json | Bin 0 -> 4233 bytes ...asic_plan--Invoice.finalize_invoice.3.json | Bin 0 -> 4233 bytes ...ice_monthly_basic_plan--Invoice.pay.1.json | Bin 4225 -> 4368 bytes ...thly_basic_plan--InvoiceItem.create.2.json | Bin 0 -> 714 bytes ...thly_basic_plan--InvoiceItem.create.3.json | Bin 0 -> 714 bytes ...basic_plan--checkout.Session.create.1.json | Bin 2418 -> 2465 bytes ...y_basic_plan--checkout.Session.list.1.json | Bin 2861 -> 2920 bytes corporate/tests/test_stripe.py | 20 +++++++++++++----- 15 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 corporate/tests/stripe_fixtures/upgrade_server_to_fixed_price_monthly_basic_plan--Invoice.create.2.json create mode 100644 corporate/tests/stripe_fixtures/upgrade_server_to_fixed_price_monthly_basic_plan--Invoice.create.3.json create mode 100644 corporate/tests/stripe_fixtures/upgrade_server_to_fixed_price_monthly_basic_plan--Invoice.finalize_invoice.2.json create mode 100644 corporate/tests/stripe_fixtures/upgrade_server_to_fixed_price_monthly_basic_plan--Invoice.finalize_invoice.3.json create mode 100644 corporate/tests/stripe_fixtures/upgrade_server_to_fixed_price_monthly_basic_plan--InvoiceItem.create.2.json create mode 100644 corporate/tests/stripe_fixtures/upgrade_server_to_fixed_price_monthly_basic_plan--InvoiceItem.create.3.json diff --git a/corporate/lib/stripe.py b/corporate/lib/stripe.py index 5473fa5b32..0bc8affcca 100644 --- a/corporate/lib/stripe.py +++ b/corporate/lib/stripe.py @@ -5531,6 +5531,15 @@ def check_remote_server_audit_log_data( next_invoice_date = plan.next_invoice_date last_audit_log_update = remote_server.last_audit_log_update if last_audit_log_update is None or next_invoice_date > last_audit_log_update: + # We still process fixed-price plans because the current license count + # won't change the amount due or the fact that we should downgrade the + # plan when it is scheduled to end. + if plan.fixed_price is not None: + # TODO: Possibly send an internal billing notice so that billing admin + # have a record that the customer's license ledger entries do not + # reflect actual audit log data from the remote server. + return True + if not plan.stale_audit_log_data_email_sent: maybe_send_stale_audit_log_data_email( plan, billing_session, next_invoice_date, last_audit_log_update diff --git a/corporate/tests/stripe_fixtures/upgrade_server_to_fixed_price_monthly_basic_plan--Event.list.2.json b/corporate/tests/stripe_fixtures/upgrade_server_to_fixed_price_monthly_basic_plan--Event.list.2.json index e33cd59f81f655ff10c78df537103b48fedd2d9e..bd0afdb92a5edb6f5028f8ca9e7a95056bcf1042 100644 GIT binary patch delta 1155 zcmX?doax(HrVYzk>y+OzYi6Hp%g8>t-p6FJfG^wRy^Nfb6HIj`&q?B%>>Y15 zd6o#*Oa5FbPxaqahGH$lyDC3x{kR&)+UY2V!UyK&h@mAP*VHmb_7kPW(P@2=FO{QmazhPM>mTq zAK{ps$|^8fK%RB;C+$vVexM#hLjy}ob2D=gV{?~23kz6ju*qha(cyfP3&hPP?@!^M z{8A)f@&<91$#!#{H{bVEXXJ$2x!J$Hk#TdE&l)0hA-Qz&Mlp-Y?PX4rZ%tL7EN{a* zxvyMsviD4>$@7||H|wROvQAzl(+hO6;AE|C^T`Kf%Qo|8&*lR8d9p8?+vePU`yhTpE^ED#XPQDmVr6Dtx0 YVl>*ECg#dEWSna_IZf=`WQCQQI6(XYU65Iz!Erz_XfhK*gf&R?HolcsL!?3#T6ejGi4 delta 31 gcmbOs-YK@>5Hm|&X->}OXcjYeUPA*I;Hu>U0G#3oQ2+n{ diff --git a/corporate/tests/stripe_fixtures/upgrade_server_to_fixed_price_monthly_basic_plan--Invoice.create.2.json b/corporate/tests/stripe_fixtures/upgrade_server_to_fixed_price_monthly_basic_plan--Invoice.create.2.json new file mode 100644 index 0000000000000000000000000000000000000000..b5c581a40bab8f82e6e2863797a53994b9e3117b GIT binary patch literal 2810 zcmb_eO>f*b5WVMD5IQ^Sq{p7xqB$5y8X$o$DGGuTM;5abDez9MMc3Yr_ z`d~OS#k}lb1@Llh14 zcVD}|Kmk6CUhleXpdkhJ@K`U^6dgTZB&MplBYS03E|2Y=FPEto(v+_UM{H?OwwHeQ z`6dOU+mUmTb)=NQQl|KV`z(Ao?iJI4;Bu|Hfvh6jTHWm#rpj_+g=eB*yq1v2?X+_a zTO@GHS6EC?#A-?)ur^6L$O((2ENbM%nK1|-ta64WEV|uq7rJ}Xk^81F?!G&guh&E)`SMn zj9ox4%qVE??Wn@U%bJSAYpT{<1lxS!%_M$f*Qn00ZuLe7)mNo8H7JW|8#eU~k(L#& z_r8b;M-`4RsO*+aj{l9^9AZPh3Bs;5Zmvdq0VTIZ^T1=CYYt%Tbv73###dX@#f3WS zyW=ad^7Hk GSAPR-iGm6M literal 0 HcmV?d00001 diff --git a/corporate/tests/stripe_fixtures/upgrade_server_to_fixed_price_monthly_basic_plan--Invoice.create.3.json b/corporate/tests/stripe_fixtures/upgrade_server_to_fixed_price_monthly_basic_plan--Invoice.create.3.json new file mode 100644 index 0000000000000000000000000000000000000000..7abdad728f2ce7a781110078e256a9078f90f971 GIT binary patch literal 2810 zcmb_eO>f*b5WVMD5IQ^S1ikgt7R|vx(f|p3Nl_4#II@_fNP!<4Z;br+z9A*8wA%tb z)Ca?vA%`}Y1+l7$(l|jgp*+{j&oV--}q+G{Mr;so45tTcMIgxk)G{8-ps9H-}22yeNDw5<%Zd)Hw zYgB8jNeuFW6v9*RC!;CsqcN$J7fkWwkG09tjI#DDd*hTf-ziF!aQp3><)@s*TNW5y z8f-@8va3R)7%(|f8a#v1bb|^{Bo&}oUzv|%%v2D&dZo)Dkn0L@a@6zb98m%N zk=^s6D~U2|gTLi9rItKCgboy!`O7?Oj#**3-9e3((l6h$HPfN<QV4$Q4vl3xBnbOt;+5k;@r5ai zOR1#rMCA>68s1b%jPK7@Vy73gy>*2GkXKs5QJY+VdU6&FXe!q?oN-rmo1#{2&X zz5Ckz1q$$C^m^BA0}Uy#hsS!Urs(MTA~99X9oZ|Ra(Qg`e7Q`$kfwY+IATkKvc2@X z&o?O;-Hx1#tRtlamNLZ`+-Kp#aj%#T1ea^o4P+JJ*6ME0FjbZlD?AegjzQSUHB34rZfwf7}K~7jCWpU$1UD{Ki|8y=;M=&IL3oB;FCK8-Wi|gV^@{<4gG`l~rjOcz=vilZA_4UpJ^f{7?_DCz!J zyzhfs@pxs|Vq-CwiQN(Pgxa_c!5gQRJR}C?h9DN9B~<$oQR&y)Y6lqti-Q%9b1TqR yV&BZzA7hEML=c=zN6_eJ!URkb{R-?x;RAs+UAajcHun9xc)qjya^X_vm;4LdD?WSx delta 31 gcmeBH`lGPn6f;X+X->}OWR`_IyoLraz*Wly0J9SbOaK4? diff --git a/corporate/tests/stripe_fixtures/upgrade_server_to_fixed_price_monthly_basic_plan--Invoice.finalize_invoice.2.json b/corporate/tests/stripe_fixtures/upgrade_server_to_fixed_price_monthly_basic_plan--Invoice.finalize_invoice.2.json new file mode 100644 index 0000000000000000000000000000000000000000..08b13a9a7df04c76b3d23bd022e3876a7ee3b698 GIT binary patch literal 4233 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 diff --git a/corporate/tests/stripe_fixtures/upgrade_server_to_fixed_price_monthly_basic_plan--InvoiceItem.create.2.json b/corporate/tests/stripe_fixtures/upgrade_server_to_fixed_price_monthly_basic_plan--InvoiceItem.create.2.json new file mode 100644 index 0000000000000000000000000000000000000000..329eff414b7f8ece4d6d88dba75be18961442626 GIT binary patch literal 714 zcmZWn%T5C^47~R%R(qyZm$rbof#6Vyhr|(tqBJpJ$R;6=LRIzOv6Dp<$SD~+Gvmj0 z)HJQ^UACz`ZMrF)1BO%%0j$~(*ygC)0gTD@5ExWBiksWJ>$9un{pCfCYnkAig_$aq zhNuGigwFEE`)trR=Q5&d#tn(Uhcv@~jEbGem0_MIX(AM1Jp>}5503>x&1Bg>2dP0s z2x|x;Iq`&_poI^pK=jV07qby778Bk`J036X+EHwopr5D!zl05`;T+EjGPMrtKk8U=b z9xaaN^93gn9Fq)XM6<(_Zqc307lc=T(+sbXeMJiCk&|^0$8;nu+34oJs6YgATX$M6!#C0cbB(|r<>~<*D}GLg_$aq zhNuGigwFEEr)15KjEbGerD2{|X(AM1-3KC}&o2c+&1BiX1*t(q z2rCF8Iq`~X(832)AUbE$yV-~(iwSR}9S#?E0D4 zKcCGxiQt%IC?lFq$EWkN*=$aDmE&U3z8xrP^_qO4;g(fqA}Ij^>g8{FMaKuHb2ZP` z A2><{9 delta 26 icmZ1|{7Gnn1WR6NPR>Rndsar%$%U*Dn;*08V+H_yy9qh~ diff --git a/corporate/tests/stripe_fixtures/upgrade_server_to_fixed_price_monthly_basic_plan--checkout.Session.list.1.json b/corporate/tests/stripe_fixtures/upgrade_server_to_fixed_price_monthly_basic_plan--checkout.Session.list.1.json index c9932bff90838aa51adf1a23eeec9aa19cfb44c6..c385d9e6c8eb5f40957bb29eb02550600805fcfc 100644 GIT binary patch delta 41 xcmZ20_Cjoe-sAud?TyyISSOpY