From 21b28387e5dbfa27d43c01a17194932f4e273db7 Mon Sep 17 00:00:00 2001 From: RobinsonJenssen Date: Wed, 22 Sep 2021 19:03:30 -0500 Subject: [PATCH] Fixes #20 Desarrollo Jenssen --- .gitignore | 1 + Checkout1101756167/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 169 bytes .../__pycache__/admin.cpython-39.pyc | Bin 0 -> 333 bytes .../__pycache__/apps.cpython-39.pyc | Bin 0 -> 470 bytes .../__pycache__/models.cpython-39.pyc | Bin 0 -> 2334 bytes .../__pycache__/serializers.cpython-39.pyc | Bin 0 -> 1251 bytes .../__pycache__/urls.cpython-39.pyc | Bin 0 -> 523 bytes .../__pycache__/views.cpython-39.pyc | Bin 0 -> 3672 bytes Checkout1101756167/admin.py | 7 ++ Checkout1101756167/apps.py | 6 ++ Checkout1101756167/migrations/0001_initial.py | 49 ++++++++++ .../0002_rename_carrtio_infoenvio_carrito.py | 18 ++++ Checkout1101756167/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-39.pyc | Bin 0 -> 1485 bytes ...e_carrtio_infoenvio_carrito.cpython-39.pyc | Bin 0 -> 594 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 180 bytes Checkout1101756167/models.py | 52 +++++++++++ Checkout1101756167/serializers.py | 20 +++++ Checkout1101756167/tests.py | 3 + Checkout1101756167/urls.py | 16 ++++ Checkout1101756167/views.py | 84 ++++++++++++++++++ .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 162 bytes .../__pycache__/settings.cpython-39.pyc | Bin 0 -> 2500 bytes ExEcommerce/__pycache__/urls.cpython-39.pyc | Bin 0 -> 413 bytes ExEcommerce/__pycache__/wsgi.cpython-39.pyc | Bin 0 -> 573 bytes ExEcommerce/settings.py | 1 + ExEcommerce/urls.py | 3 +- Productos/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 160 bytes Productos/__pycache__/admin.cpython-39.pyc | Bin 0 -> 336 bytes Productos/__pycache__/apps.cpython-39.pyc | Bin 0 -> 386 bytes Productos/__pycache__/models.cpython-39.pyc | Bin 0 -> 2160 bytes .../__pycache__/serializers.cpython-39.pyc | Bin 0 -> 1286 bytes Productos/__pycache__/urls.cpython-39.pyc | Bin 0 -> 527 bytes Productos/__pycache__/views.cpython-39.pyc | Bin 0 -> 1497 bytes .../__pycache__/0001_initial.cpython-39.pyc | Bin 0 -> 1352 bytes .../0002_auto_20210916_1521.cpython-39.pyc | Bin 0 -> 657 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 171 bytes db.sqlite3 | Bin 155648 -> 0 bytes 39 files changed, 259 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 Checkout1101756167/__init__.py create mode 100644 Checkout1101756167/__pycache__/__init__.cpython-39.pyc create mode 100644 Checkout1101756167/__pycache__/admin.cpython-39.pyc create mode 100644 Checkout1101756167/__pycache__/apps.cpython-39.pyc create mode 100644 Checkout1101756167/__pycache__/models.cpython-39.pyc create mode 100644 Checkout1101756167/__pycache__/serializers.cpython-39.pyc create mode 100644 Checkout1101756167/__pycache__/urls.cpython-39.pyc create mode 100644 Checkout1101756167/__pycache__/views.cpython-39.pyc create mode 100644 Checkout1101756167/admin.py create mode 100644 Checkout1101756167/apps.py create mode 100644 Checkout1101756167/migrations/0001_initial.py create mode 100644 Checkout1101756167/migrations/0002_rename_carrtio_infoenvio_carrito.py create mode 100644 Checkout1101756167/migrations/__init__.py create mode 100644 Checkout1101756167/migrations/__pycache__/0001_initial.cpython-39.pyc create mode 100644 Checkout1101756167/migrations/__pycache__/0002_rename_carrtio_infoenvio_carrito.cpython-39.pyc create mode 100644 Checkout1101756167/migrations/__pycache__/__init__.cpython-39.pyc create mode 100644 Checkout1101756167/models.py create mode 100644 Checkout1101756167/serializers.py create mode 100644 Checkout1101756167/tests.py create mode 100644 Checkout1101756167/urls.py create mode 100644 Checkout1101756167/views.py create mode 100644 ExEcommerce/__pycache__/__init__.cpython-39.pyc create mode 100644 ExEcommerce/__pycache__/settings.cpython-39.pyc create mode 100644 ExEcommerce/__pycache__/urls.cpython-39.pyc create mode 100644 ExEcommerce/__pycache__/wsgi.cpython-39.pyc create mode 100644 Productos/__pycache__/__init__.cpython-39.pyc create mode 100644 Productos/__pycache__/admin.cpython-39.pyc create mode 100644 Productos/__pycache__/apps.cpython-39.pyc create mode 100644 Productos/__pycache__/models.cpython-39.pyc create mode 100644 Productos/__pycache__/serializers.cpython-39.pyc create mode 100644 Productos/__pycache__/urls.cpython-39.pyc create mode 100644 Productos/__pycache__/views.cpython-39.pyc create mode 100644 Productos/migrations/__pycache__/0001_initial.cpython-39.pyc create mode 100644 Productos/migrations/__pycache__/0002_auto_20210916_1521.cpython-39.pyc create mode 100644 Productos/migrations/__pycache__/__init__.cpython-39.pyc delete mode 100644 db.sqlite3 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ba520cc --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +db.sqlite3 \ No newline at end of file diff --git a/Checkout1101756167/__init__.py b/Checkout1101756167/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Checkout1101756167/__pycache__/__init__.cpython-39.pyc b/Checkout1101756167/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f5547c54aabf036961e9ad0891f62a449b1d83f2 GIT binary patch literal 169 zcmYe~<>g`k0-ZS?i6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6wy*(xTqIJKxa zCNwzIG04+D#w9TZlX-=vg$ezzY%m4tPhbU11 literal 0 HcmV?d00001 diff --git a/Checkout1101756167/__pycache__/admin.cpython-39.pyc b/Checkout1101756167/__pycache__/admin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..248c151db0080bb034c28f6812e89c814205fd50 GIT binary patch literal 333 zcmYjM!A=4(5N&q>s{-HP#lw0au8EKsVk9evjfo}#7t%}Jj#zBBr0o*@8ujQe_3DX> zAK=L@dSH@y^WIGI@`iOf2Po9>ch26z{Hn!n#X($!w!;7%aV(L-bBqy>cr2qS0=$gh z8_@g+yMNx=;d?dbjR{Jco8W*F?3;`$QEu>`!Y8*0nRoe;l?&Y~bm@$EFi|-AmeL%g z^$jZ=cw%57tOMh_88b#WooTf)%z831P85~Yem^fC^|)LM{fW$B@Yur7O?E+N7L28{ z$!v6=-_dJbR0>LG>6A$c=ID%$U&e)23QPesdxGLwS1wIY)4_Q^?GNZSbZ_f9nas~OUuK3in>7To^Krqx;QhA2s<;pwgX%UIjyRSm!6C-z9C3$} zcf^UnZzOcMJ3?ON2T;hvW}}y7eU(mT)7WNK1w(KQsyD$16k?8`8;68Dq00%dxMr(= zFXBg47D2EZboVmtu`JVm_L37|wfEK5RI!WanW0BaeYvGY=8pZ` XV*kfjcy-8`>fvIaBYRhEu?_ME+DCLr literal 0 HcmV?d00001 diff --git a/Checkout1101756167/__pycache__/models.cpython-39.pyc b/Checkout1101756167/__pycache__/models.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b2bb8758d838daaaaa97640595d133b666992dfe GIT binary patch literal 2334 zcmaJ@QE%Kt5Z<-#Y~RJXT+*}!At05I;DCk(iAF*QC0r6z+8&4`FV=yz@oo|yw)eWW zp^eg~<@>K zzi=}9G+?p;BmWr$C!8iEr2(a=TZxt0fo*gaE8AN?e0=brVDvM(%+iR)conbF%yj zdUMDX?C9o{nHw-EfR~YV3O-zb7lnNaEE%-GxEob@(Q9aLbAnmB@?a#QBG=AgoD@Q7 z8&afa8Q4Lq#+$zaSUXvn!WoD=$KVmfd;Jx>)t*6bNqb?Ku~dYiZiiSkWrDgNhL1{? zR4WR7(XIY5Q#-Lpxayes7Ar(GU%+{LCy}f$hM>Wr;u>fB8O&6%>Z%_Ks8{KFaQkCnkp4?Qib(H@CK{8*jnJz{zBK zpac}nSR_fzWzgcW5>XV(ENF~boCiJ^V@OfRtgMiM6U8NGyuxcZyc7oShj8pWFmiOp zqurWK{I(RXzQ!dIya6Ns4#fX(*$^JE(lRXC0kSxU%mBN7^`Z%;ox6IisJG!j^%00Y zh;t9Vbt5a2#B>#fT)f8Aw9t{2nkj6-pj+6iumvk07NPB2GKcB-pY+{^#hSiu-4tr} zUPCa=6|7A}Fv3P@E#ti(n|n=VnO9-pjDalZ{T`NNjKsVthp=hgnS!uR7N;QU9y;hP zyeWs&C-5tiJnB=_jKk=w_I9`T!omK72Wk};FhkX6C@^0YUO1D;m$if4@eh#K_Ty2VEm z`jirGa5FJZ$UDLX>wE*MLd7RM(V{ zahSvxLaJ+c1={HI2ya)H3CbaC^%R64KIOzW0Go0Hu#HQ@H@OM8mhSXJDdRlrXX%*? z)wqPeg@=(!yv_=qfDAbGZEgUPdGX{fq}^kYhuUQ2T@l%UXO!a4hyJTz0;H&5GM*fL9KH|UW>JxfS+0T; z2rA^W7s24$Aj;BI$VdeJPa-m9t@@9iH1E1d40eb*Mg*?|ZOOX^XJ$`%|( zSC(`!u7{$60?q&4GCwuZW`n@33=keI^;@JqyhyF#Y?=*bU*c?w`gArx%F;;86UwrY znXcS8%NlsdI*J?CS29Hk@N$DI`RKk69>WDfE~!C%3u>B2GLNGo*@l^&b&UTK<1Kw3 zz)Ks`T<@X#dD#JHZ7i!n^LHpO(o3C*G!&D>?rM&1EF;57zbnC6!=dl8%-jN a#P9E_nD$=Jr|u07wZdku8=ld2+Rk4AsPoML literal 0 HcmV?d00001 diff --git a/Checkout1101756167/__pycache__/urls.cpython-39.pyc b/Checkout1101756167/__pycache__/urls.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ae6b3491e153115bc7cf879ef926e84adfaea6f0 GIT binary patch literal 523 zcmYk1&2AGh6oqZiZ!!r=H>}x)MIcDD5<(SGnnk(*)Ha*ZNXU$D(rG>8=z6B5Wreb4 z$wTl;-m>Z|uz~Bgi(bn|{;q${u^bNjjOxetWBH3S_Q%81iU>Z?v|AFz6xXcgIj==7 zxM!h*I?O{_2P)Lj8G~@g@)+WaL`9IQNX0(`&h9yZo=To@3VoG6GFLqibSm5No!Ibv zp!%n5oZXQt8w(e1WqaqcyDAe z^qbLD1=rTa4^5XMY${7R^1b%cnP;;{Zx4fIvo;H#fXId3(`BUeJ-Xi5 z-wgMB1TTM&=kJP@1+>NLbTvC!ekzVk+11drwm6eo1HO1uEWRyDQ`dkc6!UW^FDd7A p`g(fsc7M8mP7sm?xL84xyAWLCtfO_A&lvUfj@~tVL-mc0*|mHNeUn=qyQzJnahp5OH10&K?L0Mn z7aEsWps5Ts6=?*=y( z7lW@?ZwL3*f7)K(YQALoOYB;UUN0X8E>_UwB1EM5jBCEm8P}g_zQGM{;%s6mv|#32 zyrve)e4ATXPCYxj777uk$y(CwiBPWI-Dv3;X>^c}sI8&Ns}QNyW-s*LwL?8M25O?` z`k|4U1EXy{Wn0>jvDrLgnb{5Zo_KcFm>fQHl3&_UE0viMb~@SoE}NtwyR zH1y2Olu>6lb42v8AIa2rTlsQjR+Z}M_#hHTnmC7d{`!7xd1o7HxwE~sy?Srs$DP|r ztKW_GQn}N_e37_%eP{jgdMoL6BhiX>)_#pz50ZYmw6wT%>+_pSH*f8zuq^bRWM(Ip zX$8Yd8$x4MR%ZtnCKn8EEzo1fTt+4+m)%4s)dsB1ID5_x^?^>#6W4Gy;6yl%>*Tta zk@Mh2y=|w?QysA}Ha#Y0@xEV)`EXv(6%A;VI&)(g?1!D0!%5+Ol>1G`r5y>82q`FV zo+-}I8)r$(L1fO*h015Sm?yp65>c2&G`>`Y1A|@s8tmYW<7Vd%Z??$N(P5!eB+I+F zpk!&oW@Wp9gfY0z4J3>SOU*oCJQH?iPG9yz5hqPSF86Fv!%3iOv98^?lfoipI8CRl z_pGs9ncjQg&koI!+xbXEs%%Xg>WU~8akL+u$6$GM^#(=v(s46Kk51T02|>212;V_x zpuNy2npAf&gLQ0R3=mn^Y8+YvOT~N{XT+Q#$^Z$T8%Eq}TdA!gZf$0EFT5Y}gi6Ti zg(5{gWOl!YVu(B^tKN^&Ag`d@9TzaUxJW`d=1uCUsM}-jh%2PMM1rzOCBd{y8pFAQ ze5$wboFsp1!wjH2fP=0cchKaE9z!rUu~Ih(_QGxy1X(o*x(V-hs9z6)hyAdV-x1_~ zK~sshNxVmb>bN8*F@*!+qDc~1iRC&~TWMQROdRBe6*RdFaVib#1r28k8a5QJneQkr z&Ste$IKS2JB>$O+f|d;wx}yviU>rczjBcqg| z#HHz|Q)19CLl!kuCL#yt%9g!O3LP<3DFuP9(V`TA43u4NlBzPQqB4H+0{a+R-$bOQ zd84xXI$5IPlcQ$7Y{iL?A;3&P<~U68Ss6hFIDKK^!?KLCtsvu+AmaeGZdw^aMtq8) zo8lc>aBa1fq9Wr1K*y_!!e&9+iGLBsV}9`KaKR4=k9T7N@=1}ULjM9yl5;hDU(SqT zd#UV|NwQ1;n8H9?qBS&0iOe;8FxjTcA+MZSihX0Ks1KdPv6B$VlNEYfZFbnfx$?}z z`$L$4XRe_75+9KGki<#oTA~}{sZ>w#%fk(_S!MEwUsYF-zJ)e%kZCJul4d-WU~WM$ z+Qn6}`o`XFvc9(;zdl@5iXlt9nk|&C0+w$_w3O3nb(;(<(duk5?Ej4`@d>8(oi%KA zcp^cn8@PTosl)<3G7hYYDbZ;IZJJK!CMOY`Htl)VvM3x9lM{p?izEK=dSz>R@vNY literal 0 HcmV?d00001 diff --git a/Checkout1101756167/admin.py b/Checkout1101756167/admin.py new file mode 100644 index 0000000..d1cae78 --- /dev/null +++ b/Checkout1101756167/admin.py @@ -0,0 +1,7 @@ +from django.contrib import admin + +from .models import * + +admin.site.register(CarritoCompras) +admin.site.register(Articulo) +admin.site.register(InfoEnvio) \ No newline at end of file diff --git a/Checkout1101756167/apps.py b/Checkout1101756167/apps.py new file mode 100644 index 0000000..dd9d0da --- /dev/null +++ b/Checkout1101756167/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class Checkout1101756167Config(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'Checkout1101756167' diff --git a/Checkout1101756167/migrations/0001_initial.py b/Checkout1101756167/migrations/0001_initial.py new file mode 100644 index 0000000..5ad7a8e --- /dev/null +++ b/Checkout1101756167/migrations/0001_initial.py @@ -0,0 +1,49 @@ +# Generated by Django 3.2.7 on 2021-09-21 23:07 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('Productos', '0002_auto_20210916_1521'), + ] + + operations = [ + migrations.CreateModel( + name='CarritoCompras', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('usuario', models.CharField(max_length=200)), + ('fecha', models.DateField(auto_now_add=True)), + ('dcto', models.FloatField(default=0)), + ('cantMinima', models.IntegerField(default=0)), + ('pagado', models.BooleanField(default=False)), + ], + ), + migrations.CreateModel( + name='InfoEnvio', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('nombre', models.CharField(max_length=200)), + ('apellido', models.CharField(max_length=200)), + ('direccion', models.CharField(max_length=200)), + ('pais', models.CharField(max_length=200)), + ('departamento', models.CharField(max_length=200)), + ('ciudad', models.CharField(max_length=200)), + ('carrtio', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Checkout1101756167.carritocompras')), + ], + ), + migrations.CreateModel( + name='Articulo', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('cantidad', models.IntegerField(default=0)), + ('carrito', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Checkout1101756167.carritocompras')), + ('producto', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='Productos.producto')), + ], + ), + ] diff --git a/Checkout1101756167/migrations/0002_rename_carrtio_infoenvio_carrito.py b/Checkout1101756167/migrations/0002_rename_carrtio_infoenvio_carrito.py new file mode 100644 index 0000000..aa9a347 --- /dev/null +++ b/Checkout1101756167/migrations/0002_rename_carrtio_infoenvio_carrito.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.7 on 2021-09-22 23:54 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('Checkout1101756167', '0001_initial'), + ] + + operations = [ + migrations.RenameField( + model_name='infoenvio', + old_name='carrtio', + new_name='carrito', + ), + ] diff --git a/Checkout1101756167/migrations/__init__.py b/Checkout1101756167/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Checkout1101756167/migrations/__pycache__/0001_initial.cpython-39.pyc b/Checkout1101756167/migrations/__pycache__/0001_initial.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..48a9a56e243078d0a535276da8e9ec107913f89b GIT binary patch literal 1485 zcmZux-EP}96qYF2mK{4u({xR{zogxbZw%X5Q>+_?y0$Z9YqDWUZUhekqeClnY0;yk zt_iTK?bZ*nm)P~5fw#LD`UXQWY&(>HQg5L^;(UkX`T5QfX{}bVaQw=?q(6F=^}7LY z4;R5xoJj*0u)r49*!Jx)@ri9P5svSEVSxkg&lb4M9u>vW=&&z1&$r z@2sG^D`;m0-CIHT5v{Y0(dMW$x;5H@cj3J$8Is6b#`6A+v3!8{uJictW-G93^k6UT z--bPSFm=$rYwSmkzYPzuP9N#=(V{@7Sg!InNr(1jrjFDNQ!hGY3dKmoK17@@*mG3QIb zhBOnYu7osBk9dqeb#X!?3KBDNb0@_iX95ykK8%O5AHU>M7h^d-S4?|!!i3-;bs4x~ zVTiq|-3jH1t^%7-m12}}iWfqj0R>$OF@NmntG(_83tz}AZMB-M$B*_~`;QxD54j0v z+!#h>9AMY8lxc!SybfLsGl7x`moE+CCGAb->|bpy>(E%}>JH|T388i|Z?%WZas7_= zf}F)5(3K#-|0@#=;GZI+Lr1ampe#KU94trC>B(oRf<2DE%xM^Y0w z*Iv$uA-dGsmCR?+-`L6q9aE4u!49-r@I^Q0C zJ?P0WGqp(ur&I{0cH4vgt3Gl+W-4TZ|CeWQ{TdChy<5SYna1Q&ndh#AGwI>t5!WIA zxCPfHWZPa}d~e9#?%IEJxVQ5s>T3)Aj(z_x#DC-#>qTs?@Uy=i;Sztf4ZaR2}S literal 0 HcmV?d00001 diff --git a/Checkout1101756167/migrations/__pycache__/0002_rename_carrtio_infoenvio_carrito.cpython-39.pyc b/Checkout1101756167/migrations/__pycache__/0002_rename_carrtio_infoenvio_carrito.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8905cf5a26adae46f29ae4c94e207d44cca1c2fe GIT binary patch literal 594 zcmZWlQEL=25KcC`*Sqry>Ms!SncRxY%*)F@XoRr&7x5};UFq%vzC09muO6Y2! z%ts66RM~2+5zZlzkbvs!m?1kWL31No2z{&N3K{sC&;fqf=LvEihMeQ|r3S` zZI&&V&etbGYjBS?>%DJ#jcr?S4b*q_);IgDQTZl!>0iDQi;Gz4PZdg`k0-ZS?i6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o11<*(xTqIJKxa zCNwzIG04+D#w9PO2Tq%FjT|005&ZEcE~Y literal 0 HcmV?d00001 diff --git a/Checkout1101756167/models.py b/Checkout1101756167/models.py new file mode 100644 index 0000000..c780790 --- /dev/null +++ b/Checkout1101756167/models.py @@ -0,0 +1,52 @@ +from django.db import models +from django.contrib.auth import get_user_model + +from Productos.models import Producto + +class CarritoCompras(models.Model): + usuario = models.CharField(max_length=200) + fecha = models.DateField(auto_now_add=True) #16/09/2021 + dcto = models.FloatField(default=0) + cantMinima = models.IntegerField(default=0) + pagado = models.BooleanField(default=False) + + def __str__(self): + return str(self.usuario) + " - " + str(self.fecha) + + @property + def total(self): + total = 0 + for articulo in self.articulo_set.all(): + total += articulo.subtotal() + return total + + def numArt(self): + articulos = Articulo.objects.filter(carrito=self) + return len (articulos) + +class InfoEnvio(models.Model): + carrito = models.ForeignKey(CarritoCompras, on_delete=models.CASCADE) + nombre = models.CharField(max_length=200) + apellido = models.CharField(max_length=200) + direccion = models.CharField(max_length=200) + pais = models.CharField(max_length=200) + departamento = models.CharField(max_length=200) + ciudad = models.CharField(max_length=200) + + def __str__(self): + return self.carrito.__str__() + +class Articulo(models.Model): + carrito = models.ForeignKey(CarritoCompras, on_delete=models.CASCADE) + producto = models.ForeignKey(Producto, on_delete=models.SET_NULL, null=True) + cantidad = models.IntegerField(default=0) + + + def __str__(self): + return self.carrito.__str__() + " - " + self.Producto.__str__() + + def subtotal(self): + #subtotal = precioUNitario*cantidad + return self.producto.precio*self.cantidad + + \ No newline at end of file diff --git a/Checkout1101756167/serializers.py b/Checkout1101756167/serializers.py new file mode 100644 index 0000000..6b79113 --- /dev/null +++ b/Checkout1101756167/serializers.py @@ -0,0 +1,20 @@ +from rest_framework import serializers + +from .models import * + +class CarritoComprasSerial(serializers.ModelSerializer): + class Meta: + model = CarritoCompras + fields = '__all__' + #fields = ["nombre", "foto"] + +class InfoEnvioSerial(serializers.ModelSerializer): + class Meta: + model = InfoEnvio + fields = '__all__' + + +class ArticuloSerial(serializers.ModelSerializer): + class Meta: + model = Articulo + fields = '__all__' \ No newline at end of file diff --git a/Checkout1101756167/tests.py b/Checkout1101756167/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/Checkout1101756167/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/Checkout1101756167/urls.py b/Checkout1101756167/urls.py new file mode 100644 index 0000000..0116eba --- /dev/null +++ b/Checkout1101756167/urls.py @@ -0,0 +1,16 @@ + +from django.urls import path, include + +from rest_framework.routers import DefaultRouter + +from .views import * + +router = DefaultRouter() +router.register ('carrito', CarritoComprasAPI, basename="carrito") +router.register ('articulos', ArticuloAPI, basename="articulos") +router.register ('envio', InfoEnvioAPI, basename="envio") + +urlpatterns = [ + path('crud/', include(router.urls)) + +] \ No newline at end of file diff --git a/Checkout1101756167/views.py b/Checkout1101756167/views.py new file mode 100644 index 0000000..d380837 --- /dev/null +++ b/Checkout1101756167/views.py @@ -0,0 +1,84 @@ +from rest_framework import viewsets +from rest_framework.response import Response +from rest_framework.status import HTTP_400_BAD_REQUEST + +from .serializers import * + + +class CarritoComprasAPI(viewsets.ViewSet): + def list(self, request): + carritos = CarritoCompras.objects.all() + serializer = CarritoComprasSerial(carritos, many=True) + return Response(serializer.data) + + def create(self, request): + serializer = CarritoComprasSerial(data=request.data) + if serializer.is_valid(): + carrito = serializer.save() + return Response({'idCarrito':carrito.id}) + return Response(serializer.errors, HTTP_400_BAD_REQUEST) + + def retrieve(self,request,pk=None): + #pk= primaryKey + carritosUsuario = CarritoCompras.objects.filter(usuario=pk) + carritoS= CarritoComprasSerial(carritosUsuario,many=True) + return Response(carritoS.data) + + def partial_update(self, request, pk=None): + carrito = self.get_object() + data = {'pagado':True} + serializer = CarritoComprasSerial(carrito, data, partial=True) + if serializer.is_valid(): + serializer.save() + return Response({'update':True}) + return Response(serializer.errors, HTTP_400_BAD_REQUEST) + + +class ArticuloAPI(viewsets.ViewSet): + def list(self, request): + articulos = Articulo.objects.all() + serializer = ArticuloSerial(articulos, many=True) + return Response(serializer.data) + + def create(self, request): + serializer = ArticuloSerial(data=request.data, many=True) + if serializer.is_valid(): + serializer.save() + return Response({'Exito':True}) + return Response(serializer.errors, HTTP_400_BAD_REQUEST) + + def retrieve(self,request,pk=None): + #pk= primaryKey + articulos = Articulo.objects.get(pk=pk) + artS= ArticuloSerial(articulos,many=True) + return Response(artS.data) + + def partial_update(self, request, pk=None): + artModificar = Articulo.objects.get(pk=pk) + serializer = ArticuloSerial(artModificar, request.data, partial=True) + if serializer.is_valid(): + serializer.save() + return Response({"Actualizado":True}) + return Response(serializer.errors, HTTP_400_BAD_REQUEST) + + def destroy (self, request, pk= None): + pass + +class InfoEnvioAPI(viewsets.ViewSet): + def list(self, request): + envios = InfoEnvio.objects.all() + serializer = InfoEnvioSerial(envios, many=True) + return Response(serializer.data) + + def create(self, request): + serializer = InfoEnvioSerial(data=request.data, many=True) + if serializer.is_valid(): + serializer.save() + return Response({'Creados':True}) + return Response(serializer.errors, HTTP_400_BAD_REQUEST) + + def retrieve(self,request,pk=None): + #pk= primaryKey + enviosUsuario = InfoEnvio.objects.filter(carrito=pk) + envioS= InfoEnvioSerial(enviosUsuario,many=True) + return Response(envioS.data) \ No newline at end of file diff --git a/ExEcommerce/__pycache__/__init__.cpython-39.pyc b/ExEcommerce/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d2149d0dd4ed462447ac0c6631eb08590f72f477 GIT binary patch literal 162 zcmYe~<>g`kf`|zoi6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6w=*(xTqIJKxa zCNwzIG04+D#w92KczG$)edCAXCP((0K&*8egFUf literal 0 HcmV?d00001 diff --git a/ExEcommerce/__pycache__/settings.cpython-39.pyc b/ExEcommerce/__pycache__/settings.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..786d9d4224e71916ec2c93d3705349230b9d4b2a GIT binary patch literal 2500 zcmb7G-BQ~|6t<1P#>IpLl8~QibM>yYuEOIEIHa$ z06j}Cn%wm*I(>*<=(bmVfnIbvAxE+SVVIU$)_V8s`Oe>-bJj*KmrcOu_Xic@w_GCe zN4SW8(y(|AFZ~q;l+Y3=iBeWlOXB2S>gTE0$l>XC$?(x;(3F-&oR;Y&wAo$)O}|fS zSu}&vDAP-kr1lBWW`Q<`vRV#>D-O-Un0ucjNi_eK>m{{$bWOX47SQ!b!vdZ`H{PYt z;@c2^9W9}oz`2BOMdR&gTqemLr`+E5Z3E6BJ+t@W2MttXpe~2R7s(}W?<|#8= zHs*ZDdlV$`W5Mgfny?AzZIC-~T+9<2R16G89GizP>l08)Ec_MNfU|wZhV*HnfE<$w zBONCefJp^x7eHWvIYVO7!imv^k$Bd}eAlxq-XfIoPWQ|y!$zP86PJHuSRSVTN0*Dc zF-3pE(I@Kuqr;7kM|FC*?jL=#;`=`ho#I-)*L!36ee+;t@6qcw!|xs(9O1)Fn{DPF zf4;J+=Cl6N$RojYZ03@V5Jk^loTPfJ@86psh7fEsb~MD)zdf-@F{KdCiyH&jFnWNv zJBeU$0%jO@s@*8{vAOSftXNztKKXj1xbZ}rZMqKfOy*E+-o=#ZUDp`k1IOL>m(Q;S z1I%U4KDM<_C3#zHS5;kXt1slbS}BQYrBT;QRZ&r7#V=lh1fPf*WrMI~P-2Q8?TqHH z|2sq(Ies3LPy4H5cLxL^3m+IR7AQ77m#`y28Bc1bd;a6e=#1kj#PDNPF;xDdlCW$X zTPQ_8|G`S#u26#E6~PBF)+ZCTgyD_bao*P$aMFpBvyX#oqkM>=HZF0(BIf>{VeUg2 z3qNd!2j3Wm^-5#7g;`|+S1&>j(t;Si!7<$sVyxNCS8J1th!Ig25E zZ4rjo{VWj2^L#3pk?ZA3T@JXqSd-oGg7RNX7$4=&(4Z8G7wORd2pW}Jn_^dFVIT4s zR>*)@Mpz%OMjVdoKf9`=8nMa18&t8~WBoJy_gBS_%B4BB@l3$;s|u)la9I)aqJ(K| zuXLxc4p`oy&%)q}Lrp%Epc>tTb`buF_c zDsp(1K~|AVEm_rH%0C9vlDyR}2RX4?ZS2UB{-U9%N-$rkD=LtH012RI^DS9X_3aiM z&`zWEGRW2{l2ny<#FiY)wHggoZ?~$YMtwV&RpnZ`IOa@wOS=RSnC+ zF8^pZme=RzCpWY(JPI=34&X|$@H6<^k)SOYxVg;K{WLelrMT(Ld@2dghtx5b&SW_* iTBS0_seia*Zh=dO>$wjw&vC~oF82P#EdqY@%zOllKwm}x literal 0 HcmV?d00001 diff --git a/ExEcommerce/__pycache__/urls.cpython-39.pyc b/ExEcommerce/__pycache__/urls.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0b31541b3da158771b4c838e80ea95dc769a1fdc GIT binary patch literal 413 zcmY*W%Sr<=6isH*X=@+2bL)0CQ%A4`5m9QvZdBB6hS`isXs0HVA(;W~wqN7F_yyUz z@)tzGn_59{$jLb;m%|Oodc7S4^%_mHPdMM4_*(&pGuY-5fFXtjk~qQGaZh;CPkc!d zf)V$b&+)Rc4AvfS!U=1v@rDP$n~u-@q{&)$C~Ut&8Va#(WK8Bo=vh)`)xtLOf{L2) zRj}~~tA42!t7)aoAS-jwH@`ZnwJ@t5U2yuS>gwluZ@iUpd=QV0hVgK;>AMPBNuMpV zVy+^pic04X+JgyfXKT7J?SrFKPG^Q|lg{pD z=eN`A^g_{E@}e^7eI^9g`-kb|X+o8hTvPs!yXdHVwyhHh4;1_qL!@zk(Z#!d7sLAc E2BG0|%>V!Z literal 0 HcmV?d00001 diff --git a/ExEcommerce/__pycache__/wsgi.cpython-39.pyc b/ExEcommerce/__pycache__/wsgi.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c13052c7514fd075bde709810e6f761c056e8f49 GIT binary patch literal 573 zcmY*X&5qMB5O&h;wgeXKVa3_kN|3DJwnB*2wv?i!l}Ia46)83GGvd2B~3Y?g0I3s#m= zWXuVz77Oh64v`9NfC`16#V$d$!sf!#rI7HPT7Y2XTxrjui0jOTe9cs@|8YW+5vb@@ zcp9zrmD3T2QtF!ml#8xxE~4N!NRe>fixCuuyGPDkTmoPM12 zXP1N9lZFDJ1?PmyZLd>x(iCZ=Y2|BM9q-A68O{*at&NXhRR`2o7_F)R3pp&=M!M>8 z1N9d%^@Hx*pNosLWM;wGWERiPKaD0yUuTjLhwI6l;C;n6aFS1gzX#fBK literal 0 HcmV?d00001 diff --git a/ExEcommerce/settings.py b/ExEcommerce/settings.py index 274e968..ba84683 100644 --- a/ExEcommerce/settings.py +++ b/ExEcommerce/settings.py @@ -37,6 +37,7 @@ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'Checkout1101756167', 'Productos', 'rest_framework', 'rest_framework.authtoken' diff --git a/ExEcommerce/urls.py b/ExEcommerce/urls.py index a28b9fb..f78673e 100644 --- a/ExEcommerce/urls.py +++ b/ExEcommerce/urls.py @@ -3,5 +3,6 @@ urlpatterns = [ path('admin/', admin.site.urls), - path('productos/api/', include('Productos.urls')) + path('productos/api/', include('Productos.urls')), + path('checkout/api/', include('Checkout1101756167.urls')) ] diff --git a/Productos/__pycache__/__init__.cpython-39.pyc b/Productos/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0dd8d0fc904dd763e06c812834248f1c35d6cf9d GIT binary patch literal 160 zcmYe~<>g`kf`|zoi6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6w&*(xTqIJKxa zCNwzIG04+D#w9Jip)edC*XCP((0Czej@&Et; literal 0 HcmV?d00001 diff --git a/Productos/__pycache__/admin.cpython-39.pyc b/Productos/__pycache__/admin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2dde640be2dbe4fff3eba46dbf18a08b7a5b3863 GIT binary patch literal 336 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 literal 0 HcmV?d00001 diff --git a/Productos/__pycache__/views.cpython-39.pyc b/Productos/__pycache__/views.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e59791f2860804811e56c6153223919e46685785 GIT binary patch literal 1497 zcmbtU&2HQ_5ayqLysLFw*GBqx@GKCjWv@l2R9+RO*FM)}Vf<%yBz63iPcy5$SK6LX92t_g~NyZe@egHjMvQuawTqx-iCVp>W zjWV_>TNkx|&Hyrw7j^C8=L@Azf!|+5Z@}@q`0v5~kJBUA&rFZTM|+2lf15sR%SEH+ z)=Vd`OzE8;ro)%RvTYirOEoaX6nPWdwi-x*bVb*FpV)4%p;!>oPOtI86X|u zabpx~AhPw&yo`tL1L)!o)B~Kjj^Y-I4_uep7l>_wKx21e>XA>M_&b=}rBhPLUXzSV zE(QFB3?QMQ8|*{e=eE!lrnSUM=o*Fv`#yBD1HzISea|k*IkWtX;f8P7Ik)1B&w>lA z4?e;I6HPHcg{^z5tykpS#tOZP1Bb1hkcBN$;e=83Qx|CkX*V|OLjtdkXI#=1P$64= zEkGC>C+f=BZO{znmCznd=&Q|@GhnxiQ*Ka1*VsM9d!SfyMrTygxAdHyF(j++z@J|d zO01Af@`@r=AkAih4KEnb7NeBvuVD28UH|>&Wo6q*8tL0G^0^>G{!jP`fHqx7f^qTVwHbSFD$hxtU|l-j}l903?Go(x=C_5ag+uh)t|;{&^tHx z_FjB#ZGquS=*!w-ai9?yr31IFArtvi4R`%TtDkAC5qJA0xC=x7@OWz3_D5D@3%gh{ z%{ID!KU~hh!R@3 literal 0 HcmV?d00001 diff --git a/Productos/migrations/__pycache__/0001_initial.cpython-39.pyc b/Productos/migrations/__pycache__/0001_initial.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a96a54dfa1bd1368478d32d943fb3ee8d06281d0 GIT binary patch literal 1352 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