From c3ae16aef858a4c92c41cac73d3e57560cf802bf Mon Sep 17 00:00:00 2001 From: "Steve L. Nyemba" Date: Thu, 27 Apr 2017 06:49:40 -0500 Subject: [PATCH] Minor cosmetic changes @TODO: Invoice for billing --- src/api/index.py | 41 +++++++++++++++++++++++++++++----- src/api/static/img/logo-0.png | Bin 0 -> 9839 bytes src/api/templates/bill.html | 10 +++++---- 3 files changed, 42 insertions(+), 9 deletions(-) create mode 100644 src/api/static/img/logo-0.png diff --git a/src/api/index.py b/src/api/index.py index 6404592..936fc0c 100644 --- a/src/api/index.py +++ b/src/api/index.py @@ -110,9 +110,16 @@ def is_customer (app_name): info = couchdb.read() lsub = info['subscriptions'] - plans = [dict(item['plan'],**{"status":item['status']}) for item in lsub] + plans = [dict(dict(item['plan'],**{"status":item['status']}),**{"subscription":item['id']}) for item in lsub] if pid is not None: plans = [item for item in plans if item['id'] == pid] + # + # Caching the subscription identifiers so we can create an invoice later on (if need be) + # @TODO Improve this process later on by allowing user's to pay for what they can (not everything) + # + session['plans'] = plans + + # bill = {"amount":0,"count":0} # key = "" # if 'user-plans' in session : @@ -122,8 +129,28 @@ def is_customer (app_name): # key = CONFIG['stripe']['pub'].strip() # bill['count'] = len(amount) # bill['amount']= sum(amount) - amount = sum([item['amount'] for item in plans])/100 - return render_template('bill.html',app_name=app_name.replace('-',' '),plans=plans,key=None,total_amount=amount) + html = """ +
+ +
+ """ + session['plans'] + amount = sum([item['amount'] for item in plans]) + apikey = CONFIG['stripe']['pub'].strip() + html = html.replace(":email",uid).replace(":amount",str(amount)).replace(":key",apikey) + amount = amount / 100 + return render_template('bill.html',apikey=apikey,app_name=app_name.replace('-',' '),plans=plans,total_amount=amount,html=html) """ This function is intended to performa an actual payment """ @@ -133,9 +160,13 @@ def pay(): token = request.form['stripeToken'] uid = request.form['stripeEmail'] tokenType = request.form['stripeTokenType'] - - DB = COUCHDB.get_db(CONFIG['couchdb']['db']) ; + couchdb = CouchdbReader(uri=CONFIG['couchdb']['uri'],dbname=app_name,uid=uid,create=False) + DB = couchdb.dbase #COUCHDB.get_db(CONFIG['couchdb']['db']) ; handler = Domain.User(DB,stripe) ; + plans = session['plans'] + # Assuming all is fine, we must do the following at this point + # - create an invoice with the designated subscriptions + # - create a charge on the invoice # # Let's insure the preconditions are met i.e # card,invoice diff --git a/src/api/static/img/logo-0.png b/src/api/static/img/logo-0.png new file mode 100644 index 0000000000000000000000000000000000000000..bcc6a63c28f5b7330f0ba25654313c7d91be523b GIT binary patch literal 9839 zcmYM42Rzm9`~Tku*_>l<=NP4I8n$C)q^LypObaPw9OE3aouXtEAq^#aZ?a{VnLP@b z$2`_K|J&#Ldp!OggpTum-}m*t@9TQKp4T09-AIp#o|hhiASMHSotxl0`Q(e18vLtH z3;h7!s64d{Zqb5|0NOi|5QKsZbTn`Irmnt2U*#L!ZL1%~a-*=V^|O`5*ca^CE!8i4 zO=kz+dbPhCS`xkqb?0Re!`O|5O)qii=c68Ixbx}5u5jhE>u}Z38|-B6wAMr?4E1_V zw#Ij}GLG!s?h?3%qQ>7_sdP$@4aJGp)rIb-d9GD1q;+aku=e;-;r6vpA=t12vVly{ z$heZL@5+WVyfJ%$h`iUlz>2eL8MYt>p}{**e0S%HSIUSP#J&qz+6m*IAecC`L0DAERJTwZqB9Ee6lPGQKmJU zL_5>X)^}NuGOq6jf2HH86qSgx_f6SLvU3~D7@9Pio9Zm*5%7J8g$E*91oT{gjiM0^ zqG7RBgH7`-YQed+rX>0QrPXx3d-w5jrlt(|oE5TLby?JHkfnVfPu-(2>n@VI1>xA$ zqtuEl6bD-BKE%}il1ro`6u>*a1r^J+L&PY##3vp>6I4<4Es@vNPfc4vQD8PXZb+}^ zBfVOt=G};9ZS_!7V>%69c8(H$RxE=oUC>pDtz@Cy(pAdg2tw`|-fdx}X$8Gg4JyKwxiMBK9&2{{J2*=YBEgcneA2PbKC+eFr0H7 z3z3nvo~}46-M=;h3?wT{$NXd@D&rCJxb#HIHWcAQVtdN)57o;vf%iOIl{P}lTcvV~C6hNUj}?xZjsT^SC~xoVMERD0S-r1RpMgQ@}5&-`uV1 z1b6(t(yji5zEeYi!Xj&7;8B&)(Jc4sP0equpND)tsqz_@(3mHi~KYCeN+FsoK8C()y8EC(y zF>ar2*y+T*K-9DRoeCszt&XutX`6C`o4@4WSm=j!Lbqe=?rbTX?GpPP^?*nAJGYg$ zuky7yOG3<*+UJA0#|;AqdB1)MRpEWxBNE2AGQ?fq$X%M*4tV=LVU}z8@DrG6&ZAWo zHGxb+u%dH5N~3tU?@l+W;+C6xmB^YBTM;F7Vs{!|)3j^ZQCFOSPm2>gdy+g_eh>!^ zq$j+!^;;VC(O{)rfx;&oA#0%^PsjD4V)(6GJ^hYFdpH=VjS1(<6AZ;Y2U@J#AuiNd zzx&^iI(UYZP+CmQ>jC}MeWscGN2_gTKNwep-S3Ox@{!guO&+ic{u!NKwn?inM@@

1@N0xg1wPT}3F=ZAWCLFs};O885y7WbT zj~4o7vz=FxW4IUoLBD%Ms_0Cp9*-?)p?Fl$;B{W`x=!(%(=X>d81-6Y9_}~|_(d$9 zxtf6EGvbBX!1U95IV9$86&ZSoe6u<<53pj^h=nMOy1ui35VSqFJpd!I^4r)HF)QD7 zg3?q7BsXJXlm-Mi^Mb8Mk6%>K4=PWx7u zLt_HF?jZU!Uv@Y(0~%$a`&-N!W6kb&b{`nVqSVE1=V;uY^Q&gXxq%sOJZD(eMd%2C zn-x}-A~jQ3aZ<)ao`|Q9)D96D;VC^J)4Uhg!~Ss?d{%JKLBn41aN-cY=rb&Mm98Pt zj%kRQK$hRTD|2ZNlRxNwIaPBB34_}C$xcxH+d8rx^wNoZ2FfVoyvV4z>N$h3d}G2o zeCF!uhGEN5#*$C73#q;CYy3tg6*4rRuv87)#oH=e%Qu=3qR^MwLt31Eo_X;8GvV;R zh;oWQFl(2=KuC%Wy`cI&VZU|QnEcVDMD#l|A^p^XDr|x~;Iw)hqewxer+Ex(WU+;T zjfO|VRM9axQI)oJ^r(8No&qGXTwjJvy5B-14DGWxXoCr-lV|?@w>ypbn0m&i#&cij zo2u7k%2%lDzcrHs+zwGs6^?I9gp0jxK1V=Cc&3FsqP=PPMi1obhpjlpD;^E82?JrQ zI0^3vav7R7b?dd+-`@J8VSoB{QEg5_3QM&n9pq&BrVYHIfLL~wC76zdl*QvzzREv5 zL=)T?So!kC(Oty_7HALpNN;(u2xL&Ox$=C3KW|`@__owaJtOBCHK@sN<@;R&t;UyxoX04+-Uz|&9 zGa`^Tr~kB#%#Ib=XtQ3L(*+~TniS+Ld3a~7+jf{IxZvOSZ-s`}IlRN<63dm-q)Lxd zx0b96wHn1N>7BsN_CB41IRp0G)_PqvzW=*mR@UGpdP@#1Cqr-iy-@~k1NH2QBxJci zX)akL`0LI@UI$&x;hKD7cH8D;y+9f^=&4J3sBwvar|8CPPs>q^3Rf)u&40H9T?43a ze&6QI57K8-+e+k->HgXg-c_(3zi7`ign{A%gu=9SOhiEJWS|dEvBIIcO6`aND7f|@ z&o(NNzyDA)gZsI5)s7nWMXCANUtC#8-2x>Ul;OG9B51SE_|#qKj@47zPd7pxEXD5+ zHa~kFD`0hzn+ZdBxbo`L53~eaOG{#lDSO@%?j4EVFg{i?;Rpx00(=(y)4Z^F5w9g! zB}C-WXnm3674LZsW^OsAPV4nBX))|&5T1GWLha7IKbj-H8=Foc@<(gmjR@%=bs-KNg&wf zf8}Z+sLmq+~gz3eruK(L({58gxef@z#RhYGv_p<8u5) zlxMtznd}}04(=^zhdw@ER8@-3P1s*g-Fj}emvaxF!0pu3pRv~uo|npJ#V;AA&#$ya zECjAr)R#BO)u>9Srp~Nv-)brUqakL^>as~9 zd!~`gJ^g}ab_|H2ZugyE0AUiaKj%Mwjm$ARu4GNIp|WrkVYZXc)#jLgjrp8K|Jh;= z_g|N;PGS#K^HtnO$d7l>AT3@54}Thz0mP?S_otxftd z-fcn`e)(%CNlGc(jT|bf^t^wGVk>oP>T>I(nU3JJ_k~59po`vg{Tah+<@fncMS9y&!! zx#4^I>37pGjoDWN4Hi-L#j0e*(+9K)1y!Z7;EEa&TYf#2QcTh?oSZj02a`BqMt3%I zr|=i4+hP_ek`F2^xU~#u#6{42mX4Ww>^=wd&pN@p5 za;;tkeQwv2v8-Fs09AE0nD^2A%NT1&~0qe@7U<`ti^_ht_g(S4pHrn8beUnWf zY!osVFw7x~-F>uuWr}9nI?c|!b>wdF55K6M+3%gP?Hm$vD*qsECmvIWSZ6r7RKD$R zkI+Akqk;2Q=bk8LFqw!%?mDAkOr$TMBIC^`ez*M_3W6Fu`NC6@`EPzSA`Nbl+U}*G@{PS1gki}A z0fVKJbiNjU=hORkUOpv1A^gGs#e$z}fCPW{v91KE&P#My9!Piv&fgR5HTJq#>DaR9 zhjw@7e|h9Dy!^X9!xU|`H{2|9ut~GHqTcV;RXeGz`R$DB2+3cvc#o^HCX`S+x@F=3 z?=MYmB!4a@hwmkouH4qyvE!LaX(5}g!GCPBO?3S2dH-atyVAW{t<}S$LB{!Sx++>T zwE?7ONY?F-8A@ae?P*h2N+x_vw>YBvJtbE4CdBL_X3AoRWDK0lxo;$}OYrZQ;MXPA z-eZC?m*4o;g2mh>g(2r;7r1&fxX*R1XettoXK4`UYO*BJn#sKO=DQ?$K_ZKCER^1i z{BRr?(#LX0N~}TSyj17or3qr2m?`iInPYXGE!0T!+ogczZi7g-dauoF>-Si-UZfC# ztywITXk5FU2@859wao>t#JV{^%e`MJkP_*xY@*z3Y#g7h{Q4>`1LwkjN@%vreV z<2ZF#EUSeb{SnxbXWKxD%bPkAsT_HxY>tyJ=ty#`YU=DRL8F;WrOE#ZgjXWUE##`I zWYU5Hs@E8ig<{2;X`M{!=7q&l_nVw@Wry=WbP%C;Xxr|eUZR0`Mu(1ZYy0)@-v)(z zF$QYM>@O_lT~JU$$5u=&DVYW;QOjNui;PD&cr-R5c)m90ukX;PLMv7EsVL=FbJt|w zq9o#pOsW|a$Ph)2ErW`?h{I#QH;fv2=1PQ2qYxC;j`GwcP20~`(79a(M^yc^x&}F6 zLLV89Pkw>GF9||-mRIK9yQzmL^6_b5_f^rQYr>Ib*F7*4cR^&%t%ybHB3L#R%vx#f z5)B`14)U{xhMG%-I^mralO%p5cCxcj^M@tMWURA_-W>hq$TX+Kx97gpz8*up)su`Z<_wR^wn@ugbikUmmNnkhDZgP@{<%V^ zT(dnUl7H*JS8XpWhS5mtJ4R}AnDL%XJi8)xV%Y5Q7KEd0xA;Q3+h?^zujKd!E%Ba1 ztZC}BnuWq4xqgcAC-|c6hqHi{zIb!@RMoaWsIq#_NdJX!p$Q|eml>Ty+eN(w$RIG6}ZWD@E?j9 z{PybChi7VK-BF9KjoCB+@I5)Dk5Ge2Ow&iOHa{uw@GWQTcs@Wfe$hyd+s9M*Dfb8&aQRGiE`}o%K{%i}EqXR$?t58Z%14^1rI!k;NR!ehgsEN<8KC4x-i$NH>kKi* zUgxqK0hytJ_HyqKPwfHMC}bjq-l!a=QRl+8O3l*XDu?}{$Gtze@r8d1{&n0WPStje zFJ3m^xx?+$Y1YbeW3eLg%BM_Qg-nrIt`_w?^F2yTF8Obd1I|a8;7?ClQ82eg$*#Gy$;xW?F;_!T{e0HOt331Bi3w^OvhuF}; z-kt3O$67n(NlZ-|(dOxjsV|vUGUxczf2DW8i_NA1Pz3~oAiH^QvjqFc&`DM-Kg|5jJ z?F)+lf?l7n+^-2jIo_ah0Rmk!FJA7Bvb%2 zHNzX}i5xxiodLCW&s5zPg=$YdYpaRQpA;9oSIF8caJUS9J4q*jTZoPj*NY%I@s)2q zY_yyB4R0U%_(8ByPAc7**u#!?a#iBpuG)>3a5~OU*e_wy!@>rfLS~8IQjuo(Iaa zmAS!F#T$ZZS>xoqRdO(E^}N+o3ViwstnmGfhbyeFC`lJ^F5UzGQf5+(U7Xd|!l}}~ z`&Ge#VVe2#Gal=+*HjD41n?XXj;Wdvf+Dx3hwr-YI@^s`>I(#0;eiFot_63sL)4!KwHN@8KhQnUPKrreI2S0KC+U3=cmmy1857hfhCrT; z3$oO-dluBxXo@5NB27`yGgFir^QHb9+;Q-E@S)MNARf|~-^6TW*B&Ry2)-CyYW?&7bF z)Rrksr}kEx60;lMR^83v@!9@j0vtV(LjE)?cl^kTtB^ezdhGlcv%Xoq-a(rhCUg+? zk`!RRb2Soy{*}Eqmny?i@~?z13=YL(Z{w*??{C%QeHDxIBprgeG&2nvJ(maY9|Qn# zS-3M7gY3UIE!3P~w7PO^cAy903qR*FFQn3tMp@e!G{^#AWFV=}zc2q~`)D-fy;g^m+01c<#uBx5~*<|go6Y=uKU)6j!Z=v5eCXszUux84FW~K5!k{W72R*0}7I)iU2 zAUWy334#jIf+ZUR=8HA+J&a!x!OmSN>6CYPwVJ zKJ`&!nTr;K_DbYq0qJyl>QaAtChKY%T50-(e}wm2QE!wayszactg(9QU(AJYo3e@O zShjm`ccJOWGg;fdY{L`aGAi`3<*YD|z{)vI1?Y`;P5y@N|3F;9?pSbcc*6sN7|oHs z?GE3)?ybJq)HFY+#Yo4|9rG}dOI~5_K2`shk4tHxiA6@KTXrXgJ)R)#p(6VSCK%Nf zIEI*9vPx$B4lLm%hKOqsUsgHmvt>c2YA(cBdvCKWaW*Ziz4Qdm6aqA9ZBpvP3X;Fi zlnwQEZg0SOCvy%gU{lY5nVu|l`CJSN#0mXRgt6tGl~iJ2Vc~8?B}$m#U4Fz#nDGY1 zSxE(HuMpx$Ld+`88B?6`56Y*RbX3YCV%$4n{nITwCkS3?8teLp>cgMoGd=sQvtu5a zCM1*P_u`CT(LEotMwVu`e`L{lfr6o^r}-ec+%C#+&HuV=;(*KFqaHOP=smLyHHDuv z(6C!WbrI6LlH1D}=T{k*mb(-v?7wE1vH@@cnu1;r#mj^bIA3S@AAcreR}p~hu7h|_ z?z|tcIH7YMZH)ZU6#s;RXygb44yZ|E0FNtc1FZ)uPORoPUg6%DSV^26?1C4*#3s4+ zczn6`MfBAcmd!)6cX3h)XHvJ2K)oTO&uB+T1!Se?DR+cXRK3dSjGbTAMn! zntUa#4Ya@je;&V>N%JD~aCl|X@=*d&WN~(*UJ!KZ;Q==qU zfbg;#AC-GN7}?bIXzf6k@9KGm0BF0JZHE@%+U3!6IN#^8D4-%R%-GhP*7rlTpe*pZ zN`ig}ng2$$`%<&5NXe%dQ9vE73pe|^S6`*-j5ps@Ipds6*;?HN3H#ayw^Mw|`XF3J90#|U4 z*r8*6sSG~qrnB?8l0sJ_LLK{znR&%%ogfNb_uz3Phbt%ZvY^Bnqt=q1@<6M6!BuuF z)F1=54Z?dpTtH^Y;elg)SWcbd&KMmLkQlo?grTm<*BYC{oPW7zNWk4}z$9 zPtF1`VTAJh-ItW7u3DwE@d=nbAW!k6uFdET{QpkTkoOa}TJ0;M*#L{xY3z-%g=#Dc zO{}TEbgS2RAy<|ozCr-fc*0WKOAS~C&`Gs`u05SD4G}5VlW$$qdp7w8boo+!{X^nH z0RR7>c2vNoa?!|Ez#lER>CB~jAdpI-so39JfcmFTNKB0KJH6t zP&O<0v-pVsv>zbnua*D&b`Mcx`jt2t`YTIWfCGJf490ECy(C7d;dP-cw0>nffS(Jk z0p1<}+6X`*@r1(lg@bU6P=6)p(ttv6D@>~VprFSuPWPxGOBmJP+_1ES2z9ZA7E^_Xi0&1blH1`@>Mi4gCCl)y=rmXRz#1C zGe2s$L5YeMrqz1*!fnAIe*9a+z$}eA4-QBP;{;r27Z^8p?cT?cHZ;T1f0rul|DKjp zkZoifg?a(pO0vsN(z`Tc5r8HdvWg*qrH_H8{tzpmsn`Re3seqIW3QrGy6%&N5N@Z_ zts|@V`>G|CQqzE% zKxBibdfL>XDYrtk_+5pqlra3U6z{e=AmJSqr;<>vEfrdZIqUhA=L&sT^SJ6^|EZxd z&@BE0vP+48{z!NsRwl3SVP_ccYKBuY9LhZZqZGtNANh zOy>i5vY>}uQ{h=Cn%7gcI^;^S@X8^=0u?kwDbLZPdPG6;1r0hU4}H0s+7C>Ztgh+B zOilZ;+t<~+LILOi1`GuGqOZIAXNhJwe-y=9J-C+6a2N|D>-mApF@`8t)i9Q_#7p3d zY{W}|z;%KlT{R4rKKR$tlS z`+}Nq0$3nP@qL-M82WZY?Xg-nZ+8`@q^_3WV}d)>anZ>E-9 zIq8y0vZn5PI&*9gM~v<7(9K9`w$s~=RsJM7EUkYe))%Fl!Pjh@>CVqe=HXYMIO!@+ z{Pw|EUhD6ejRl7yz-b2G_S+%S2V$ZJzk~?sls)^3xQJ7^ycXaz1}E7j-0ZKB@izzM zYe(6Q0C|8I$o$`_lD3l1?u_76$>Sb2Xbq;%^Ag9GNcB#b1ne!SsNlH5tuSXub#=EZ z@O&ImszE6h;--i`ToLKW6l;2=1NE=`Y)33VWn%&t_x7cy+F#JL^ zhh&|UliQ(2wsSD(P>1e-TJeEaf@z}D=NjE32_eE5ULV05jw&q+JZY%p9D7gu>P%A; zB23}4LQ_w^lc`YGT>Sin2<35e;i%g=Cu9aR6TnX;f$BxkXx{B1)tbd>jSzQAQPL&h zMCvI>|ADjMs3gCmrylu!gk0R^BXB5!5NAxLJnR?B%KLqIwHM%r57d zYp%u8pCIb>luv`RvDCHTh!dE+4*73xAbjH6J=hUFYxRXV;%VIhHk}N<&}5>rqs}Qk z^>xDUVKIjYB5*o5P|JXSticeA+7N!W0Y{SR_o{a)a`;e$YJ>wjMIRGI#sUkf4i0^B vp`8^; literal 0 HcmV?d00001 diff --git a/src/api/templates/bill.html b/src/api/templates/bill.html index 3aa6e8a..fd77ac2 100644 --- a/src/api/templates/bill.html +++ b/src/api/templates/bill.html @@ -43,7 +43,7 @@ } @media only screen and (min-device-width: 768px){ body {font-size:12px} - table {width:70%; margin-left:15%} + table {width:60%; margin-left:20%} } @@ -55,7 +55,7 @@