From c256731c71db2dd1f2d958f2b8d8ef5e264db8a0 Mon Sep 17 00:00:00 2001 From: Giovanni Arroyo Date: Tue, 11 Nov 2014 15:29:07 -0600 Subject: [PATCH 1/5] update settings.py 'change WSGI_APPLICATION variable' --- settings.py | 2 +- settings.py~ | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 settings.py~ diff --git a/settings.py b/settings.py index 7bc4f56..546210c 100644 --- a/settings.py +++ b/settings.py @@ -32,7 +32,7 @@ ROOT_URLCONF = 'urls' -WSGI_APPLICATION = 'apps.wsgi.application' +WSGI_APPLICATION = 'wsgi.application' DATABASES = { 'default': { diff --git a/settings.py~ b/settings.py~ new file mode 100644 index 0000000..7bc4f56 --- /dev/null +++ b/settings.py~ @@ -0,0 +1,56 @@ +import os + +BASE_DIR = os.path.dirname(os.path.dirname(__file__)) + +SECRET_KEY = 'lw4yxsx_!!!e-)saya7*bo1vr1!fn^r*lbb3=uz(-l@#pw)ass' + +DEBUG = True + +TEMPLATE_DEBUG = True + +ALLOWED_HOSTS = [] + +INSTALLED_APPS = ( + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + + 'orders', +) + +MIDDLEWARE_CLASSES = ( + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +) + +ROOT_URLCONF = 'urls' + +WSGI_APPLICATION = 'apps.wsgi.application' + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + } +} + +FIXTURE_DIRS = ('/fixtures/',) + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + +STATIC_URL = '/static/' From 8c1f033d6d1e8a41cffa8bdf0b97e547babc82de Mon Sep 17 00:00:00 2001 From: Giovanni Arroyo Date: Tue, 11 Nov 2014 16:52:05 -0600 Subject: [PATCH 2/5] update models.py 'complete first test' --- orders/.models.py.swp | Bin 0 -> 12288 bytes orders/migrations/0002_auto_20141111_2233.py | 19 +++++++++ orders/models.py | 9 ++++- orders/models.py~ | 40 +++++++++++++++++++ orders/tests.py | 4 +- orders/tests.py~ | 28 +++++++++++++ 6 files changed, 97 insertions(+), 3 deletions(-) create mode 100644 orders/.models.py.swp create mode 100644 orders/migrations/0002_auto_20141111_2233.py create mode 100644 orders/models.py~ create mode 100644 orders/tests.py~ diff --git a/orders/.models.py.swp b/orders/.models.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..1efc45167db4879578f3aa0b486856953116ff17 GIT binary patch literal 12288 zcmeI2&yO256vtgINI(IBgb*hKhnc``esqhdDn(Re8yd00Mw=9^glKSPoW$+?!s96$ zA>hJ+3qtCJBPTdTt7+fT6cNyZ|brE>FNdah$TPcD(1Dv_Stf7tW>Dqt(jBH7B9 zW|5_>nHGtBC)3x8R&-UQ^Q<*fv5{J(^UZJ};#j70*~)YzbINKm>>Y5g-CYfCvx)B5>~zF!?F=0k(5r zy(Pc4r`BxUBtry<01+SpM1Tko0U|&IhyW2F0z`la{0|9;h_TNfU`#xS#pD0~!{7hE zJ;KO&WxKOSc62k1NKOXwr$dFZFpjC})r4c&ykf^I+`LI+R` zy#?(-FGJ5k_d~xwgt5>~=o2V{u0T&gKVyxbLUyfxV$GjHREPi(AOb{y2oM1xKm_g~ z0^F6iOOYC7mb}aBb{b3+O%c^Bj|T)^=b6*fX#@uv@VEwsO{1 zTw)zPs^=qHA64~z z*TCc~j73p!cQgYWg zR$md-9@ZkSod59~qSHR|evK{-hQq;YuiW~AtWRDA2jwlv_;SGq8~ x=MMX*)A|%xUUkQCM5wz7+?El?wr#khcjowgndvOyRbqWJnsSxonKm^b_80fl+p7Qo literal 0 HcmV?d00001 diff --git a/orders/migrations/0002_auto_20141111_2233.py b/orders/migrations/0002_auto_20141111_2233.py new file mode 100644 index 0000000..f10a89b --- /dev/null +++ b/orders/migrations/0002_auto_20141111_2233.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('orders', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='orderitem', + name='product', + field=models.CharField(max_length=100, choices=[(b'XS', b'Extra Small Tee'), (b'S', b'Small Tee'), (b'M', b'Medium Tee'), (b'L', b'Large Tee'), (b'XL', b'Extra Large Tee'), (b'XXL', b'Double Extra Large Tee')]), + ), + ] diff --git a/orders/models.py b/orders/models.py index aeb40f6..6436077 100644 --- a/orders/models.py +++ b/orders/models.py @@ -10,6 +10,13 @@ class Order(models.Model): ) shipping_method = models.CharField(max_length=100, choices=SHIPPING_CHOICES) date_completed = models.DateTimeField() + + @staticmethod + def split_by_shipping_method(): + fcm = list(Order.objects.filter(shipping_method='FCM').values_list('pk', flat=True)) + pri = list(Order.objects.filter(shipping_method='PRI').values_list('pk', flat=True)) + return [fcm, pri] + class OrderItem(models.Model): @@ -30,4 +37,4 @@ class OrderItem(models.Model): priority = {'XS': 0, 'S': 1, 'M': 2, 'L': 3, 'XL': 4, 'XXL': 5} order = models.ForeignKey(Order, related_name='items') product = models.CharField(max_length=100, choices=PRODUCT_CHOICES) - quantity = models.PositiveIntegerField(default=1) \ No newline at end of file + quantity = models.PositiveIntegerField(default=1) diff --git a/orders/models.py~ b/orders/models.py~ new file mode 100644 index 0000000..6436077 --- /dev/null +++ b/orders/models.py~ @@ -0,0 +1,40 @@ +from django.db import models + + +class Order(models.Model): + FCM = 'FCM' + PRI = 'PRI' + SHIPPING_CHOICES = ( + ('FCM', 'First Class Mail'), + ('PRI', 'Priority Mail'), + ) + shipping_method = models.CharField(max_length=100, choices=SHIPPING_CHOICES) + date_completed = models.DateTimeField() + + @staticmethod + def split_by_shipping_method(): + fcm = list(Order.objects.filter(shipping_method='FCM').values_list('pk', flat=True)) + pri = list(Order.objects.filter(shipping_method='PRI').values_list('pk', flat=True)) + return [fcm, pri] + + + +class OrderItem(models.Model): + XS = 'XS' + S = 'S' + M = 'M' + L = 'L' + XL = 'XL' + XXL = 'XXL' + PRODUCT_CHOICES = ( + ('XS', 'Extra Small Tee'), + ('S', 'Small Tee'), + ('M', 'Medium Tee'), + ('L', 'Large Tee'), + ('XL', 'Extra Large Tee'), + ('XXL', 'Double Extra Large Tee'), + ) + priority = {'XS': 0, 'S': 1, 'M': 2, 'L': 3, 'XL': 4, 'XXL': 5} + order = models.ForeignKey(Order, related_name='items') + product = models.CharField(max_length=100, choices=PRODUCT_CHOICES) + quantity = models.PositiveIntegerField(default=1) diff --git a/orders/tests.py b/orders/tests.py index a3ea841..0e35c67 100644 --- a/orders/tests.py +++ b/orders/tests.py @@ -9,7 +9,7 @@ class OrderOrderingTestCase(TestCase): fixtures = ['test_orders.json'] def test_orders_are_split_by_shipping_method(self): - #fcm, pri = Order.split_by_shipping_method() + fcm, pri = Order.split_by_shipping_method() self.assertEqual(results.fcm, fcm) self.assertEqual(results.pri, pri) @@ -25,4 +25,4 @@ def test_single_orders_are_sorted(self): def test_multiple_orders_are_split_by_xxl_and_not(self): #xxl, not_xxl = Order.orders_split_by_xxl_and_not() self.assertEqual(results.xxl, xxl) - self.assertEqual(results.not_xxl, not_xxl) \ No newline at end of file + self.assertEqual(results.not_xxl, not_xxl) diff --git a/orders/tests.py~ b/orders/tests.py~ new file mode 100644 index 0000000..a3ea841 --- /dev/null +++ b/orders/tests.py~ @@ -0,0 +1,28 @@ +from django.test import TestCase + +from orders.models import Order, OrderItem + +import results + + +class OrderOrderingTestCase(TestCase): + fixtures = ['test_orders.json'] + + def test_orders_are_split_by_shipping_method(self): + #fcm, pri = Order.split_by_shipping_method() + self.assertEqual(results.fcm, fcm) + self.assertEqual(results.pri, pri) + + def test_orders_are_split_by_single_and_multiple(self): + #singles, multiples = Order.split_by_single_and_multiple() + self.assertEqual(results.singles, singles) + self.assertEqual(results.multiples, multiples) + + def test_single_orders_are_sorted(self): + #single_sorted_orders = Order.single_orders_are_sorted() + self.assertEqual(results.single_sorted_orders, single_sorted_orders) + + def test_multiple_orders_are_split_by_xxl_and_not(self): + #xxl, not_xxl = Order.orders_split_by_xxl_and_not() + self.assertEqual(results.xxl, xxl) + self.assertEqual(results.not_xxl, not_xxl) \ No newline at end of file From 0bcec52048c92717f734495d07f9d00bc27dbf34 Mon Sep 17 00:00:00 2001 From: Giovanni Arroyo Date: Wed, 12 Nov 2014 04:36:20 -0600 Subject: [PATCH 3/5] update --- orders/.models.py.swp | Bin 12288 -> 12288 bytes orders/.tests.py.swp | Bin 0 -> 12288 bytes orders/models.py | 64 +++++++++++++++++++++++++++++++++++++++++- orders/models.py~ | 54 ++++++++++++++++++++++++++++++++++- orders/tests.py | 10 +++---- orders/tests.py~ | 10 +++---- 6 files changed, 126 insertions(+), 12 deletions(-) create mode 100644 orders/.tests.py.swp diff --git a/orders/.models.py.swp b/orders/.models.py.swp index 1efc45167db4879578f3aa0b486856953116ff17..b5bb10071034e258061ccee9e663111d216a4876 100644 GIT binary patch literal 12288 zcmeHNO^6&t6t0+A!RsA=;zj}=Jz(-Ygy?XWD z_g=lOWvg9ztlpr9%ZCVlHxu&aVSVvR<#zJN7$Jt|*nDiYeWWS}H~$&DEttLecsz0; zRXDCY1|N3^LC>+rJ07$6ImcV^$Bom>?mFWgVFuh2c6UtgG1KIBmybK1!99Q6!bHn$g@ot6va4CD;t4CD;t4CD;t4CD;t z4CD;_cNhrV9pq`ab4}z@Cu(=BX`{!y$r;EQ$Qj5P$Qj5P$Qj5P$Qj5P$Qj5P$Qj5P zxC$9y1|e_bkA1ci#^eA0@!$VH-9*Tzz$d^Pz-8b$zy|6-0XP7Bbt56K1Fr!u00P(t zytAK>mw}gni@$gjYUz{kK_ zz$M@U@HnspJOJDS{Jxuz&wy6}3z!BpU?=eHwS;^Fd<1+5ya!wYo&{C`6F3FT0}lcB z0(*d8b`kO=@IG)6Fn}k3JAoe%o6CTT(N&mZ|7(*eerNj34n#1ZH5y%CnR9#*h_k$I z2fWL@X~9iHGkAyf&7f8-5;@ED9HXxX>7>aXizF?!+LE_of?lm!sg$VRbA-;GelWLiEJTAKS!+fC4$}2S`>T#0=+-TXjhEpqufLnecHbFRE zX!uiwrG>%-#bO27R?#-l9z;8X_7K`7*||@4RPX-t%8gKybVySJ7@u`t8AO{yL+$>r@1}~F!*NLp*7o=*+ zWH^kzaxZ)iA7={cNj*gUhLmfB?-yi$A?z=y2P{r>lleYXp{XMjT9h#jdGDz>p%hZo zwCLyYpzqnVxw>kWsO_}SE)NaIVzLcK%glATZD=Yh%ECy)6U&MY?J-|!qO}^GW~R@h zWn+nv!r5}CeyQ=Y>kNY_4aifPl-}t)5uks*JZ?9 zi&>0Jh0!5G5mA+i&@`D#d5Q{oMw{>fMmqOjXq8_6b@7@Ei>wfOZfFlmQ>#(kNE)ZR~wwc+yG4B1ipZWx1?Ah~>yx1SHgy%o#n- zgH*qU94gVX%TjaYYS8b_URGU;4DgH1QVT!yR zJ1h~M7$|;gk}KUzvQ&f&g<0gc5S~`F6*jCBQr)^@(F}DUlork^!Zo>{)+{2Y4F3|D zILTw~vsr^1y&HUEqLsFux=HoMmuskeZ<$IYHh8m;$WKNhlz5afE9XbHrY{xUaY>GN zmsL5Qzj0}ns@7B9(XEn9v6N^$U@22z|7G(h$_>9KTo*g96_)&3VQ#)&D3(=T`YkoD z;I81L)4|cNCO^(YwGPYuJLS`pjen#(%SqP6E%=b67}yio4i@qa-zu0F9gC*$eo|EXhe(77eYF6QE<=xemgR~-@BA(&MdSaC@~}xhJ?R7Qc*P^`afJh{VFlll(hHu@!6oMKmX{u2(L)z4T;L2f zgxJh$Nvj;Q7{%8F&*}*WgwG_CHk5X|*UA(4XVT_*{bh0}eL5TMy$9^JyA61p2S~4W558<% zfrqyMLYbw!HSFwcnw#^FkayxBoqxZ&^Kuf<>t-SM@{#UmsTav0;m>PE3MpoR0XA#2oQnA1O_^4?X1G~*5-yWZrr@VE?ziX z>_-+vfCvx)B0vO)01+SpM1TnVHw1LP0Bm5QG4)PXk;&gT>?j|JCpRpXUI6puVBLqCTMBqu!yOquQuL)OFPF zvjE>wZ&7bhZPX>yuT_9gsE?=@s9n@w%<~8J8KqG7Q6_hhe+l_f$wYt%5CI}U1c(3; zAOb{S=?O4M@^@97{AP07_j;P`EtX@58r4zm~Qu+XJ2$J4~L9)R6p`)0n^ zEvI~am5W&Wosr4n2WjYIqGstD@`#xsU_Zf9;#_dw`UH~C_A_m)?}DkZQPerNFNGt= z7*J(W^U%h1*sO1hT5Pl#PUC*8Z@t7Kc-c&Yjk}p^SgZc{;wv7?VdKjQ?FBufQ(1wk zxfG4n!%f<%o{uftJfbS;^mD5Bew^Eh8_i|xFg(>Nowre=ZsIUJO-ze#(0N8H{W#CD zWk2CKmL8s{jVYIU3sF4O1AJjH(WA9u! 1: + for item in order.items.all(): + if item.product == 'XXL': + xxl.append(order.id) + has_xxl = True + break + if has_xxl == False: + no_xxl.append(order.id) + return [xxl, no_xxl] + class OrderItem(models.Model): XS = 'XS' S = 'S' diff --git a/orders/models.py~ b/orders/models.py~ index 6436077..a99b193 100644 --- a/orders/models.py~ +++ b/orders/models.py~ @@ -1,5 +1,5 @@ from django.db import models - +from operator import itemgetter class Order(models.Model): FCM = 'FCM' @@ -17,8 +17,60 @@ class Order(models.Model): pri = list(Order.objects.filter(shipping_method='PRI').values_list('pk', flat=True)) return [fcm, pri] + @staticmethod + def split_by_single_and_multiple(): + singles = [] + multiples = [] + orders = Order.objects.all() + + for order in orders: + if order.items.count() == 1: + singles.append(order.id) + else: + multiples.append(order.id) + + return [singles, multiples] + + @staticmethod + def single_orders_are_sorted(): + unsorted_orders = [] + orders = Order.objects.annotate(item_count=Count('items')).filter(item_count=1) + priority = orders[0].items.first().priority + + for order in orders: + only_order = order.items.first() + unsorted_orders.append([priority[only_order.product], only_order.order.id]) + + + sorted_orders = sorted(unsorted_orders, key=itemgetter(0)) + + sorted_ids = [] + for i in range (0, len(sorted_orders)): + sorted_ids.append(sorted_orders[i][1]) + + return sorted_ids + + @staticmethod + def orders_split_by_xxl_and_not(): + xxl = [] + has_xxl = False + no_xxl = [] + orders = Order.objects.all() + + for order in orders: + has_xxl = False + if order.items.count() > 1: + for item in order.items.all(): + if item.product == 'XXL': + xxl.append(order.id) + has_xxl = True + break + if has_xxl == False: + no_xxl.append(order.id) + return [xxl, no_xxl] + class OrderItem(models.Model): XS = 'XS' S = 'S' diff --git a/orders/tests.py b/orders/tests.py index 0e35c67..43fd128 100644 --- a/orders/tests.py +++ b/orders/tests.py @@ -14,15 +14,15 @@ def test_orders_are_split_by_shipping_method(self): self.assertEqual(results.pri, pri) def test_orders_are_split_by_single_and_multiple(self): - #singles, multiples = Order.split_by_single_and_multiple() + singles, multiples = Order.split_by_single_and_multiple() self.assertEqual(results.singles, singles) self.assertEqual(results.multiples, multiples) - def test_single_orders_are_sorted(self): - #single_sorted_orders = Order.single_orders_are_sorted() - self.assertEqual(results.single_sorted_orders, single_sorted_orders) + # def test_single_orders_are_sorted(self): + # single_sorted_orders = Order.single_orders_are_sorted() + # self.assertEqual(results.single_sorted_orders, single_sorted_orders) def test_multiple_orders_are_split_by_xxl_and_not(self): - #xxl, not_xxl = Order.orders_split_by_xxl_and_not() + xxl, not_xxl = Order.orders_split_by_xxl_and_not() self.assertEqual(results.xxl, xxl) self.assertEqual(results.not_xxl, not_xxl) diff --git a/orders/tests.py~ b/orders/tests.py~ index a3ea841..c6ceeb9 100644 --- a/orders/tests.py~ +++ b/orders/tests.py~ @@ -9,20 +9,20 @@ class OrderOrderingTestCase(TestCase): fixtures = ['test_orders.json'] def test_orders_are_split_by_shipping_method(self): - #fcm, pri = Order.split_by_shipping_method() + fcm, pri = Order.split_by_shipping_method() self.assertEqual(results.fcm, fcm) self.assertEqual(results.pri, pri) def test_orders_are_split_by_single_and_multiple(self): - #singles, multiples = Order.split_by_single_and_multiple() + singles, multiples = Order.split_by_single_and_multiple() self.assertEqual(results.singles, singles) self.assertEqual(results.multiples, multiples) def test_single_orders_are_sorted(self): - #single_sorted_orders = Order.single_orders_are_sorted() + single_sorted_orders = Order.single_orders_are_sorted() self.assertEqual(results.single_sorted_orders, single_sorted_orders) def test_multiple_orders_are_split_by_xxl_and_not(self): - #xxl, not_xxl = Order.orders_split_by_xxl_and_not() + xxl, not_xxl = Order.orders_split_by_xxl_and_not() self.assertEqual(results.xxl, xxl) - self.assertEqual(results.not_xxl, not_xxl) \ No newline at end of file + self.assertEqual(results.not_xxl, not_xxl) From a494a0b3abd84808d93ac9ff6ed59305a4c8b641 Mon Sep 17 00:00:00 2001 From: Giovanni Arroyo Date: Wed, 12 Nov 2014 05:24:15 -0600 Subject: [PATCH 4/5] update --- orders/.models.py.swp | Bin 12288 -> 12288 bytes orders/models.py | 23 +++++++++++------------ orders/models.py~ | 33 +++++++++++++++++++++------------ 3 files changed, 32 insertions(+), 24 deletions(-) diff --git a/orders/.models.py.swp b/orders/.models.py.swp index b5bb10071034e258061ccee9e663111d216a4876..919a95bc0e1aec395f5483fceaaaba85a021a9ec 100644 GIT binary patch delta 700 zcmXZZUr19?9KiA4<~Dar+w!HXv=f7EGP!0-J%nLMMSt`u4Jw#-+{>KJd*}5oMj2D8 zHzDfQb3OGE7B=X`3QT$p9}1$k5Q?a`LJGqAZuNuD`Tfp+IA?BrZoDnGf9&M2I;8gr z5f{l1F12mO0#@nR6~uZ>WEBr^A2;B^#AzfE!sa%SMa*LslQ@nq zts)C>F^wY5;{ZAk!N(Sn_bpPDWr{l};2gSmS4J}B%(D?T-gyu%7Cm^gt9n(;LvvW8_m!985X z6Di*a&kz-r!L$%`LbXLm#3D;w9g59fwi>qGwGaH=CALDgoa}>_oa# z5z}SE_8P_iUOhE}B|3(KO4W?S<=}2jvz=_EQq+x7$+FF~PM7tAiv{8+L*p=tGf zIoC2S@n-dU!kDRVPy_0$TecYV=acP0(&OZ=fabqV_V}69h<`iNAIWC(-axNEo9gtR zriN-iQX7GIw=!%~c@vguT$S~IcRjC#GpnHvbJDQ$j&A1kDaW*mGpaCEa$HXhIc3}P IU-caM3({nVS^xk5 delta 829 zcmZ|MUr1A77{~Ev&HUGDCYD1&-)*t!kXdxGP>d)Myoe|&45D^yXYSC++1Z2{*bIVh z3dy&Sx~MLKD2Q4k3JQw4F&N=R6kS+Q(M@z!(nS<~&Fn(f1E2SO&-4Cx&Ve%?ACK1$ zY}nVgL&c(-gsKy{5i8XH^1716)pcLJ`CBd#!@Y2moKH|6ydux=6xT6@(-=Y@!ti5e zmB=+*!C6@F;Py(93pkGnjA1Xfq74=J;SqW3k-XgFa0bV*6TJw)k9DZUrxha4aSSPR zq7pxAMeabO2aTx3lNxe}Lt(aBT+UYA-Ky8HGiIkO z4J|$oIHqyrzqkM9s6EbzSw7}wlpYVQDgS|ALQS5P@CsExWUe86qn zt@?4eS;xXYJsaL$^taBr>Z2-?O*^K_rc9M~5~dT?p~$12pq)++({$1!gDGVihf^w$ qv4#fizo~#Sh7u}iu~^xR8g{I-V`WGGbQi{0iQ=0`sX|Y8Z2k?jkD+h? diff --git a/orders/models.py b/orders/models.py index 516f7cf..041e3e2 100644 --- a/orders/models.py +++ b/orders/models.py @@ -1,5 +1,6 @@ from django.db import models from operator import itemgetter +from django.db.models import Count class Order(models.Model): FCM = 'FCM' @@ -41,12 +42,11 @@ def single_orders_are_sorted(): #Get priority (key, value) dictionary priority = orders[0].items.first().priority - #loop through each "single order" and find its priority and order.id for order in orders: #since these are single orders, they can be found at items.first() only_order = order.items.first() - #store the priority at index 0. store the order.id at index 1 + #store the priority at index 0, and the order_id at index 1 unsorted_orders.append([priority[only_order.product], only_order.order.id]) #sort by using the priority number (stored at index 0) @@ -60,23 +60,22 @@ def single_orders_are_sorted(): return sorted_ids + @staticmethod def orders_split_by_xxl_and_not(): xxl = [] - has_xxl = False no_xxl = [] - orders = Order.objects.all() + orders = Order.objects.annotate(item_count=Count('items')).filter(item_count__gt=1) for order in orders: has_xxl = False - if order.items.count() > 1: - for item in order.items.all(): - if item.product == 'XXL': - xxl.append(order.id) - has_xxl = True - break - if has_xxl == False: - no_xxl.append(order.id) + for item in order.items.all(): + if item.product == 'XXL': + xxl.append(order.id) + has_xxl = True + break + if has_xxl == False: + no_xxl.append(order.id) return [xxl, no_xxl] diff --git a/orders/models.py~ b/orders/models.py~ index a99b193..041e3e2 100644 --- a/orders/models.py~ +++ b/orders/models.py~ @@ -1,5 +1,6 @@ from django.db import models from operator import itemgetter +from django.db.models import Count class Order(models.Model): FCM = 'FCM' @@ -17,6 +18,7 @@ class Order(models.Model): pri = list(Order.objects.filter(shipping_method='PRI').values_list('pk', flat=True)) return [fcm, pri] + @staticmethod def split_by_single_and_multiple(): singles = [] @@ -31,42 +33,49 @@ class Order(models.Model): return [singles, multiples] + @staticmethod def single_orders_are_sorted(): unsorted_orders = [] orders = Order.objects.annotate(item_count=Count('items')).filter(item_count=1) + + #Get priority (key, value) dictionary priority = orders[0].items.first().priority - + for order in orders: + #since these are single orders, they can be found at items.first() only_order = order.items.first() + + #store the priority at index 0, and the order_id at index 1 unsorted_orders.append([priority[only_order.product], only_order.order.id]) - + #sort by using the priority number (stored at index 0) sorted_orders = sorted(unsorted_orders, key=itemgetter(0)) + + #create a new array with only the order_id sorted_ids = [] for i in range (0, len(sorted_orders)): sorted_ids.append(sorted_orders[i][1]) return sorted_ids + @staticmethod def orders_split_by_xxl_and_not(): xxl = [] - has_xxl = False no_xxl = [] - orders = Order.objects.all() + orders = Order.objects.annotate(item_count=Count('items')).filter(item_count__gt=1) for order in orders: has_xxl = False - if order.items.count() > 1: - for item in order.items.all(): - if item.product == 'XXL': - xxl.append(order.id) - has_xxl = True - break - if has_xxl == False: - no_xxl.append(order.id) + for item in order.items.all(): + if item.product == 'XXL': + xxl.append(order.id) + has_xxl = True + break + if has_xxl == False: + no_xxl.append(order.id) return [xxl, no_xxl] From 2d7cc67a40d0eb1a3c92032eab1ba9f6254b66ed Mon Sep 17 00:00:00 2001 From: Giovanni Arroyo Date: Wed, 12 Nov 2014 05:55:09 -0600 Subject: [PATCH 5/5] remove tilda files --- orders/models.py~ | 101 ---------------------------------------------- orders/tests.py~ | 28 ------------- settings.py~ | 56 ------------------------- 3 files changed, 185 deletions(-) delete mode 100644 orders/models.py~ delete mode 100644 orders/tests.py~ delete mode 100644 settings.py~ diff --git a/orders/models.py~ b/orders/models.py~ deleted file mode 100644 index 041e3e2..0000000 --- a/orders/models.py~ +++ /dev/null @@ -1,101 +0,0 @@ -from django.db import models -from operator import itemgetter -from django.db.models import Count - -class Order(models.Model): - FCM = 'FCM' - PRI = 'PRI' - SHIPPING_CHOICES = ( - ('FCM', 'First Class Mail'), - ('PRI', 'Priority Mail'), - ) - shipping_method = models.CharField(max_length=100, choices=SHIPPING_CHOICES) - date_completed = models.DateTimeField() - - @staticmethod - def split_by_shipping_method(): - fcm = list(Order.objects.filter(shipping_method='FCM').values_list('pk', flat=True)) - pri = list(Order.objects.filter(shipping_method='PRI').values_list('pk', flat=True)) - return [fcm, pri] - - - @staticmethod - def split_by_single_and_multiple(): - singles = [] - multiples = [] - orders = Order.objects.all() - - for order in orders: - if order.items.count() == 1: - singles.append(order.id) - else: - multiples.append(order.id) - - return [singles, multiples] - - - @staticmethod - def single_orders_are_sorted(): - unsorted_orders = [] - orders = Order.objects.annotate(item_count=Count('items')).filter(item_count=1) - - #Get priority (key, value) dictionary - priority = orders[0].items.first().priority - - for order in orders: - #since these are single orders, they can be found at items.first() - only_order = order.items.first() - - #store the priority at index 0, and the order_id at index 1 - unsorted_orders.append([priority[only_order.product], only_order.order.id]) - - #sort by using the priority number (stored at index 0) - sorted_orders = sorted(unsorted_orders, key=itemgetter(0)) - - - #create a new array with only the order_id - sorted_ids = [] - for i in range (0, len(sorted_orders)): - sorted_ids.append(sorted_orders[i][1]) - - return sorted_ids - - - @staticmethod - def orders_split_by_xxl_and_not(): - xxl = [] - no_xxl = [] - orders = Order.objects.annotate(item_count=Count('items')).filter(item_count__gt=1) - - for order in orders: - has_xxl = False - for item in order.items.all(): - if item.product == 'XXL': - xxl.append(order.id) - has_xxl = True - break - if has_xxl == False: - no_xxl.append(order.id) - - return [xxl, no_xxl] - - -class OrderItem(models.Model): - XS = 'XS' - S = 'S' - M = 'M' - L = 'L' - XL = 'XL' - XXL = 'XXL' - PRODUCT_CHOICES = ( - ('XS', 'Extra Small Tee'), - ('S', 'Small Tee'), - ('M', 'Medium Tee'), - ('L', 'Large Tee'), - ('XL', 'Extra Large Tee'), - ('XXL', 'Double Extra Large Tee'), - ) - priority = {'XS': 0, 'S': 1, 'M': 2, 'L': 3, 'XL': 4, 'XXL': 5} - order = models.ForeignKey(Order, related_name='items') - product = models.CharField(max_length=100, choices=PRODUCT_CHOICES) - quantity = models.PositiveIntegerField(default=1) diff --git a/orders/tests.py~ b/orders/tests.py~ deleted file mode 100644 index c6ceeb9..0000000 --- a/orders/tests.py~ +++ /dev/null @@ -1,28 +0,0 @@ -from django.test import TestCase - -from orders.models import Order, OrderItem - -import results - - -class OrderOrderingTestCase(TestCase): - fixtures = ['test_orders.json'] - - def test_orders_are_split_by_shipping_method(self): - fcm, pri = Order.split_by_shipping_method() - self.assertEqual(results.fcm, fcm) - self.assertEqual(results.pri, pri) - - def test_orders_are_split_by_single_and_multiple(self): - singles, multiples = Order.split_by_single_and_multiple() - self.assertEqual(results.singles, singles) - self.assertEqual(results.multiples, multiples) - - def test_single_orders_are_sorted(self): - single_sorted_orders = Order.single_orders_are_sorted() - self.assertEqual(results.single_sorted_orders, single_sorted_orders) - - def test_multiple_orders_are_split_by_xxl_and_not(self): - xxl, not_xxl = Order.orders_split_by_xxl_and_not() - self.assertEqual(results.xxl, xxl) - self.assertEqual(results.not_xxl, not_xxl) diff --git a/settings.py~ b/settings.py~ deleted file mode 100644 index 7bc4f56..0000000 --- a/settings.py~ +++ /dev/null @@ -1,56 +0,0 @@ -import os - -BASE_DIR = os.path.dirname(os.path.dirname(__file__)) - -SECRET_KEY = 'lw4yxsx_!!!e-)saya7*bo1vr1!fn^r*lbb3=uz(-l@#pw)ass' - -DEBUG = True - -TEMPLATE_DEBUG = True - -ALLOWED_HOSTS = [] - -INSTALLED_APPS = ( - 'django.contrib.admin', - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.messages', - 'django.contrib.staticfiles', - - 'orders', -) - -MIDDLEWARE_CLASSES = ( - 'django.contrib.sessions.middleware.SessionMiddleware', - 'django.middleware.common.CommonMiddleware', - 'django.middleware.csrf.CsrfViewMiddleware', - 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.messages.middleware.MessageMiddleware', - 'django.middleware.clickjacking.XFrameOptionsMiddleware', -) - -ROOT_URLCONF = 'urls' - -WSGI_APPLICATION = 'apps.wsgi.application' - -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), - } -} - -FIXTURE_DIRS = ('/fixtures/',) - -LANGUAGE_CODE = 'en-us' - -TIME_ZONE = 'UTC' - -USE_I18N = True - -USE_L10N = True - -USE_TZ = True - -STATIC_URL = '/static/'