Files
pyGoEdge-UserPanel/billing/management/commands/__pycache__/generate_invoices.cpython-312.pyc

44 lines
10 KiB
Plaintext
Raw Normal View History

2025-11-18 03:36:49 +08:00
<EFBFBD>
3
i/"<00><00><><00>ddlmZmZddlmZmZddlmZmZddl m
Z
ddl m Z ddl mZddlmZmZddlmZmZdd lmZe<0E>Zd
efd <0B>Zd <0C>ZGd <0A>de<07>Zy)<10>)<02>date<74> timedelta)<02>Decimal<61> ROUND_HALF_UP)<02> BaseCommand<6E> CommandError)<01> transaction)<01>timezone)<01>get_user_model)<02>Invoice<63> InvoiceItem)<02>Domain<69>DomainTrafficDaily)<01>SystemSettings<67> month_strc<00><00> tt|jd<01><00>\}}t||d<02>}|dk(rt|dzdd<02>}nt||dzd<02>}|t d<02><05>z
}||fS#t$r}t d|<04><00><02><00>d}~wwxYw)N<>-<2D>u2无效的 --month 参数,格式应为 YYYY-MM<4D> <00><01>days)<07>map<61>int<6E>splitr<00> Exceptionrr)r<00>year<61>month<74>start<72>e<>next_month_start<72>ends <20>DE:\Project\pygoedge\billing\management\commands\generate_invoices.py<70>month_range_from_strr#s<><00><00>U<01><19>#<23>y<EFBFBD><EFBFBD><EFBFBD>s<EFBFBD>3<>4<> <0B><04>e<EFBFBD><14>T<EFBFBD>5<EFBFBD>!<21>$<24><05> <0A><02>{<7B><1F><04>q<EFBFBD><08>!<21>Q<EFBFBD>/<2F><18><1F><04>e<EFBFBD>a<EFBFBD>i<EFBFBD><11>3<><18>
<1A>Y<EFBFBD>A<EFBFBD>.<2E>
.<2E>C<EFBFBD> <10>#<23>:<3A><15><> <15>U<01><1A>O<>PQ<50>s<EFBFBD>S<>T<>T<><54>U<01>s<00>/A*<00>* B<03>3B<03>Bc<00><><00>tj<00>j<00>}|jd<01><02>}|t d<01><03>z
}|jd<01><02>}||fS)Nr)<01>dayr)r
<00>nowr<00>replacer)<04>today<61>this_month_start<72> last_day_prev<65>
start_prevs r"<00>previous_month_ranger, sT<00><00> <14>L<EFBFBD>L<EFBFBD>N<EFBFBD> <1F> <1F> !<21>E<EFBFBD><1C>}<7D>}<7D><11>}<7D>+<2B><14>$<24>y<EFBFBD>a<EFBFBD>'8<>8<>M<EFBFBD><1E>&<26>&<26>1<EFBFBD>&<26>-<2D>J<EFBFBD> <15>}<7D> $<24>$<24>c<00>:<00>eZdZdZd<02>Zej d<03><00>Zy)<05>Commanduu按自然月生成用户账单(套餐费 + 超量流量)。默认生成上一自然月,可用 --month 指定。c<00><><00>|jdtd<02><03>|jdtd<05><03>|jddd<08> <09>|jd
dd <0B> <09>y) Nz--monthu+计费月份,格式 YYYY-MM如 2025-10)<02>type<70>helpz --user-idu*仅为指定用户生成账单可选z --overwrite<74>
store_trueu6若已存在账单则覆盖重建(删除后重建))<02>actionr2z --dry-runu6试运行,仅输出计算结果,不写入数据库)<03> add_argument<6E>strr)<02>self<6C>parsers r"<00> add_argumentszCommand.add_arguments+sZ<00><00><0E><1B><1B>I<EFBFBD>C<EFBFBD>6c<36><1B>d<><0E><1B><1B>K<EFBFBD>c<EFBFBD>8d<38><1B>e<><0E><1B><1B>M<EFBFBD>,<2C>E}<7D><1B>~<7E><0E><1B><1B>K<EFBFBD> <0C>C{<7B><1B>|r-c<00><> <00>|jd<01>rt|d<00>\}}n t<00>\}}|jd<02>}|jdd<04>}|jdd<04>}|jj |j
j d|<03>d|<04><00><04><00>tjj<00>}|r1|j|<05><08>}|j<00>std |<05>d
<EFBFBD><03><00>tjjd <0B>j<00>} d }
t!d <0A>} |D<00>]v} t"jj| ||<04><0E>j<00>} | r^|s\|jj |j
j%d| j&<00>d| j(<00>d| j&<00><00><06><00><00><>| ro|rm|sk| j+<00>|jj |j
j%d| j&<00>d| j(<00>d| j&<00><00><06><00>t,jj| t,j.<00><14>}t!d <0A>}t!d <0A>}g}|D<00>]<5D>}|j0}|r*|j2<00>t!t5|j2<00><00>n
t!d <0A>}|r*|j6<00>t!t5|j6<00><00>nd}|r*|j8<00>t!t5|j8<00><00>n
t!d <0A>}|j:<00>t!t5|j:<00><00>}d}t=| d<15>r>| j>j@<00>(t!t5| j>j@<00><00>}| r*| jB<00>t!t5| jB<00><00>n
t!d<16>}t!d<16>}|<15>t!t5|<15><00>}n|<17>|}n|}t!t5|jDxsd <0C><00>}tFjj|||<04><17>}tId<18>|D<00><00>}t!t5|<1C><00>t!d<19>z }|jKt!d<1A>tL<00><1B>}|||zz
}|t!d<16>kr t!d<16>}|jKt!d<1A>tL<00><1B>}|d kDr%||z }|jO|dt!d<1D>||d<1E><05>|d kDs<02><02><>|d kDs<02><02><>||zjKt!d<1F>tL<00><1B>}||z }|jO|d |||d<1E><05><00><02><>t!d <0A>} ||z| zjKt!d<1F>tL<00><1B>}!|rY|jj |j
jQd!| j&<00>d| j(<00>d"|<0F>d#|<10>d$|!<21><00>
<EFBFBD><00><00><04><>t"jjS| ||||| |!d%<25>&<26>}"|D]6}#tTjjS|"|#d'|#d(|#d)|#d*|#d+<00>,<2C><00>8|
d-z }
| |!z } |jj |j
jQd.|"j&<00>d/| j&<00>d| j(<00>d0|!<21><00><08><00><00><05>y|jj |j
jQd1|
<EFBFBD>d2| <0B><00><04><00>y)3Nr<00>user_id<69> overwriteF<65>dry_runu生成账单周期u → )<01>idu用户 u
不存在r>rz0.00)<03>user<65> period_start<72>
period_endu 跳过用户 uu)该周期账单已存在Invoice#u已删除旧账单:用户 u Invoice#)r?<00>status<75>profile<6C>0)<03>domain<69>day__gte<74>day__ltec3<00>4K<00>|]}|j<00><01><00>y<00>w)N)<01>bytes)<02>.0<EFBFBD>ts r"<00> <genexpr>z!Command.handle.<locals>.<genexpr><3E>s<00><00><><00>!><3E>:<3A>a<EFBFBD>!<21>'<27>'<27>:<3A>s<00><01>
1073741824z0.001)<01>roundingu基础套餐费用<E8B4B9>1)rE<00> description<6F>quantity<74>
unit_price<EFBFBD>amountz0.01u超量流量费用u [DRY] 用户 u 套餐费¥u 超量费¥u 总计<EFBC9A>unpaid)r?r@rA<00>amount_plan_total<61>amount_overage_total<61>amount_adjustment<6E> amount_totalrBrErPrQrRrS)<06>invoicerErPrQrRrSru已生成账单Invoice#u 用户 u 总额¥u生成完成:共 u 个账单,合计金额 ¥)+<2B>getr#r,<00>stdout<75>write<74>style<6C>NOTICE<43>User<65>objects<74>all<6C>filter<65>existsrr<00>order_by<62>firstrr <00>WARNINGr><00>username<6D>deleter<00> STATUS_ACTIVE<56> current_plan<61>base_price_per_domainr6<00>included_traffic_gb_per_domain<69>overage_price_per_gb<67>custom_overage_price_per_gb<67>hasattrrC<00>+default_free_traffic_gb_per_domain_override<64>"default_free_traffic_gb_per_domain<69>#extra_free_traffic_gb_current_cycler<00>sum<75>quantizer<00>append<6E>SUCCESS<53>creater )$r7<00>args<67>optionsr@rAr;r<r=<00>users_qs<71>sys<79>total_invoices<65> total_amountr?<00>existing<6E>domainsrUrV<00>items<6D>d<>plan<61>
base_price<EFBFBD> included_gb<67> overage_price<63>user_default_override<64>sys_default_gb<67> base_quota_gb<67>extra_gb<67>
traffic_qs<EFBFBD> total_bytes<65>used_gb<67>over_gb<67> over_amountrWrXrY<00>its$ r"<00>handlezCommand.handle1s<><00><00> <13>;<3B>;<3B>w<EFBFBD> <1F>';<3B>G<EFBFBD>G<EFBFBD><L<>'M<> $<24>L<EFBFBD>*<2A>';<3B>'=<3D> $<24>L<EFBFBD>*<2A><19>+<2B>+<2B>i<EFBFBD>(<28><07><1B>K<EFBFBD>K<EFBFBD> <0B>U<EFBFBD>3<> <09><19>+<2B>+<2B>i<EFBFBD><15>/<2F><07> <0C> <0B> <0B><19><19>$<24>*<2A>*<2A>+<2B>+<2B>#<23>L<EFBFBD>><3E><15>z<EFBFBD>l<EFBFBD> C<>
<EFBFBD> <0B><18><<3C><<3C>#<23>#<23>%<25><08> <12><1F><EFBFBD><EFBFBD>'<27><EFBFBD>2<>H<EFBFBD><1B>?<3F>?<3F>$<24>"<22>W<EFBFBD>W<EFBFBD>I<EFBFBD>Z<EFBFBD>#@<40>A<>A<><1C>$<24>$<24>-<2D>-<2D>d<EFBFBD>3<>9<>9<>;<3B><03><1A><0E><1E>v<EFBFBD><EFBFBD> <0C><1C>D<EFBFBD><1E><EFBFBD><EFBFBD>-<2D>-<2D>4<EFBFBD>l<EFBFBD>_i<5F>-<2D>j<>p<>p<>r<>H<EFBFBD><17> <09><14> <0B> <0B>!<21>!<21>$<24>*<2A>*<2A>"4<>"4<>#<23>D<EFBFBD>G<EFBFBD>G<EFBFBD>9<EFBFBD>C<EFBFBD><04> <0A> <0A><EFBFBD>>g<>hp<68>hs<68>hs<68>gt<67>u<>#<12><13><19><17>I<EFBFBD>g<EFBFBD><18><0F><0F>!<21><14> <0B> <0B>!<21>!<21>$<24>*<2A>*<2A>"4<>"4<>2<>4<EFBFBD>7<EFBFBD>7<EFBFBD>)<29>3<EFBFBD>t<EFBFBD>}<7D>}<7D>o<EFBFBD>\<5C>Zb<5A>Ze<5A>Ze<5A>Yf<59>g<>#<12><13>
<1D>n<EFBFBD>n<EFBFBD>+<2B>+<2B><14>f<EFBFBD>>R<>>R<>+<2B>S<>G<EFBFBD> '<27><06><0F> <1D>#*<2A>6<EFBFBD>?<3F> <20><16>E<EFBFBD><1C><01><18>~<7E>~<7E><04>IM<49>RV<52>Rl<52>Rl<52>Rx<52>W<EFBFBD>S<EFBFBD><14>)C<>)C<>%D<>E<>F<02>GM<02>N<02>
<EFBFBD>SW<EFBFBD>\`<60>\<>\<>]L<02>g<EFBFBD>c<EFBFBD>$<24>*M<>*M<>&N<>O<>RV<02> <0B>KO<4B>TX<54>Tm<54>Tm<54>Ty<54><07><03>D<EFBFBD>,E<>,E<>(F<> G<>@G<02>HN<02>@O<02> <0A><15>0<>0<><<3C>$+<2B>C<EFBFBD><01>0M<30>0M<30>,N<>$O<>M<EFBFBD>)-<2D>%<25><1A>4<EFBFBD><19>+<2B><04> <0C> <0C>0h<30>0h<30>0t<30>,3<>C<EFBFBD><04> <0C> <0C>8p<38>8p<38>4q<34>,r<>)<29>Z]<01>ad<61>bH<02>bH<02>bT<02><17><13>S<EFBFBD>-S<>-S<>)T<>!U<>Za<02>be<02>Zf<02><0E>!(<28><03> <0C> <0A><1E>*<2A>$+<2B>C<EFBFBD> <0B>,<<3C>$=<3D>M<EFBFBD>*<2A>6<>$9<>M<EFBFBD>$2<>M<EFBFBD>#<23>3<EFBFBD>q<EFBFBD>'L<>'L<>'Q<>PQ<50>#R<>S<><08>0<>7<>7<>><3E>><3E>a<EFBFBD>R^<5E>is<69>><3E>t<>
<EFBFBD>!<21>!><3E>:<3A>!><3E>><3E> <0B>!<21>#<23>k<EFBFBD>"2<>3<>g<EFBFBD>l<EFBFBD>6K<36>K<><07>!<21>*<2A>*<2A>7<EFBFBD>7<EFBFBD>+;<3B>m<EFBFBD>*<2A>T<><07>"<22>]<5D>X<EFBFBD>%=<3D>><3E><07><1A>W<EFBFBD>S<EFBFBD>\<5C>)<29>%<25>c<EFBFBD>l<EFBFBD>G<EFBFBD>!<21>*<2A>*<2A>7<EFBFBD>7<EFBFBD>+;<3B>m<EFBFBD>*<2A>T<><07><1E><01>><3E>%<25><1A>3<>%<25><19>L<EFBFBD>L<EFBFBD>"#<23>';<3B>$+<2B>C<EFBFBD>L<EFBFBD>&0<>",<2C> "<16><17><1B>Q<EFBFBD>;<3B>=<3D>1<EFBFBD>#4<>#*<2A>]<5D>#:<3A>"D<>"D<>W<EFBFBD>V<EFBFBD>_<EFBFBD>_l<5F>"D<>"m<>K<EFBFBD>(<28>K<EFBFBD>7<>(<28><19>L<EFBFBD>L<EFBFBD>"#<23>';<3B>$+<2B>&3<>"-<2D> "<16><17>q<1D>@!(<28><06><0F> <1D>-<2D>0D<30>D<>GX<47>X<>b<>b<>cj<63>kq<6B>cr<63>~K<02>b<>L<02>L<EFBFBD><16><14> <0B> <0B>!<21>!<21>$<24>*<2A>*<2A>"4<>"4<>#<23>D<EFBFBD>G<EFBFBD>G<EFBFBD>9<EFBFBD>C<EFBFBD><04> <0A> <0A><EFBFBD>>Q<>Rc<52>Qd<51>dt<64>vJ<02>uK<02>KX<02>Ye<02>Xf<02>g<02>#<12><13><19><1E>o<EFBFBD>o<EFBFBD>,<2C>,<2C><19>)<29>%<25>"3<>%9<>"3<>)<29><1F>-<2D> <0E>G<EFBFBD><1C><02><1B>#<23>#<23>*<2A>*<2A>#<23><1D>h<EFBFBD><<3C> "<22>=<3D> 1<><1F>
<EFBFBD>^<5E>!<21>,<2C>/<2F><1D>h<EFBFBD><<3C> +<2B><12><1C> <1B>a<EFBFBD> <1F>N<EFBFBD> <18>L<EFBFBD> (<28>L<EFBFBD> <10>K<EFBFBD>K<EFBFBD> <1D> <1D>d<EFBFBD>j<EFBFBD>j<EFBFBD>0<>0<>,<2C>W<EFBFBD>Z<EFBFBD>Z<EFBFBD>L<EFBFBD><08><14><17><17> <09><13>T<EFBFBD>]<5D>]<5D>O<EFBFBD>[k<>lx<6C>ky<6B>z<><0E> <0F>m<1D>t <0A> <0B> <0B><19><19>$<24>*<2A>*<2A>,<2C>,<2C>!<21>.<2E>!1<>1N<31>|<7C>n<EFBFBD> ]<5D>
<EFBFBD> r-N)<08>__name__<5F>
__module__<EFBFBD> __qualname__r2r9r <00>atomicr<63><00>r-r"r/r/(s,<00><00> C<02>D<EFBFBD>}<01> <11><17><17>V <0B><18>V r-r/N)<1C>datetimerr<00>decimalrr<00>django.core.management.baserr<00> django.dbr <00> django.utilsr
<00>django.contrib.authr <00>billing.modelsr r <00>domains.modelsrr<00> core.modelsrr_r6r#r,r/r<>r-r"<00><module>r<>sI<00><01>$<24>*<2A>A<>!<21>!<21>.<2E>/<2F>5<>&<26><16><17><04> <16>C<EFBFBD> <16>%<25>` <0B>k<EFBFBD>` r-