Skip to content

Commit ecfe088

Browse files
committed
backend order add views created
1 parent ccbe684 commit ecfe088

File tree

6 files changed

+197
-9
lines changed

6 files changed

+197
-9
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Generated by Django 3.2 on 2021-06-19 12:45
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('core', '0003_product_image'),
10+
]
11+
12+
operations = [
13+
migrations.AlterModelOptions(
14+
name='orderitem',
15+
options={'verbose_name': 'OrderItem', 'verbose_name_plural': 'OrderItems'},
16+
),
17+
migrations.AlterModelOptions(
18+
name='shippingaddress',
19+
options={'verbose_name': 'ShippingAddress', 'verbose_name_plural': 'ShippingAddresses'},
20+
),
21+
migrations.AddField(
22+
model_name='order',
23+
name='shippingPrice',
24+
field=models.DecimalField(blank=True, decimal_places=2, max_digits=7, null=True),
25+
),
26+
migrations.AddField(
27+
model_name='order',
28+
name='totalPrice',
29+
field=models.DecimalField(blank=True, decimal_places=2, max_digits=7, null=True),
30+
),
31+
]
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 3.2 on 2021-06-19 12:51
2+
3+
from django.db import migrations
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('core', '0004_auto_20210619_1245'),
10+
]
11+
12+
operations = [
13+
migrations.RenameField(
14+
model_name='shippingaddress',
15+
old_name='postalCode',
16+
new_name='pincode',
17+
),
18+
]

backend/core/models.py

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,35 @@ class Order(models.Model):
6767
related_name='order',
6868
on_delete=models.CASCADE
6969
)
70-
paymentMethord = models.CharField(max_length=255, blank=True, null=True)
70+
paymentMethord = models.CharField(
71+
max_length=255,
72+
blank=True,
73+
null=True
74+
)
7175
taxPrice = models.DecimalField(
72-
max_digits=7, decimal_places=2, blank=True, null=True)
76+
max_digits=7,
77+
decimal_places=2,
78+
blank=True,
79+
null=True
80+
)
81+
shippingPrice = models.DecimalField(
82+
max_digits=7,
83+
decimal_places=2,
84+
blank=True,
85+
null=True
86+
)
87+
totalPrice = models.DecimalField(
88+
max_digits=7,
89+
decimal_places=2,
90+
blank=True,
91+
null=True
92+
)
7393
isPaid = models.BooleanField(default=False)
74-
createdAt = models.DateTimeField(auto_now_add=False, blank=True, null=True)
94+
createdAt = models.DateTimeField(
95+
auto_now_add=False,
96+
blank=True,
97+
null=True
98+
)
7599
isDeliverd = models.BooleanField(default=False)
76100
deliverdAt = models.DateTimeField(
77101
auto_now_add=False,
@@ -129,10 +153,26 @@ class ShippingAddress(models.Model):
129153
null=True,
130154
blank=True
131155
)
132-
address = models.CharField(max_length=200, null=True, blank=True)
133-
city = models.CharField(max_length=200, null=True, blank=True)
134-
postalCode = models.CharField(max_length=200, null=True, blank=True)
135-
country = models.CharField(max_length=200, null=True, blank=True)
156+
address = models.CharField(
157+
max_length=200,
158+
null=True,
159+
blank=True
160+
)
161+
city = models.CharField(
162+
max_length=200,
163+
null=True,
164+
blank=True
165+
)
166+
pincode = models.CharField(
167+
max_length=200,
168+
null=True,
169+
blank=True
170+
)
171+
country = models.CharField(
172+
max_length=200,
173+
null=True,
174+
blank=True
175+
)
136176
shippingPrice = models.DecimalField(
137177
max_digits=7,
138178
decimal_places=2,

backend/core/serializer.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,3 +68,45 @@ class Meta:
6868
model = Product
6969
fields = '__all__'
7070
# Product Serializer - end
71+
72+
73+
class ShippingAddressSerializer(ModelSerializer):
74+
class Meta:
75+
model = ShippingAddress
76+
fields = '__all__'
77+
78+
79+
class OrderItemSerializer(ModelSerializer):
80+
class Meta:
81+
model = OrderItem
82+
fields = '__all__'
83+
84+
85+
class OrderSerializer(ModelSerializer):
86+
orders = SerializerMethodField(read_only=True)
87+
shippingAddress = SerializerMethodField(read_only=True)
88+
user = SerializerMethodField(read_only=True)
89+
90+
class Meta:
91+
model = Order
92+
fields = '__all__'
93+
94+
def get_orders(self, obj):
95+
items = obj.orderitem_set.all()
96+
serializer = OrderItemSerializer(items, many=True)
97+
return serializer.data
98+
99+
def get_shippingAddress(self, obj):
100+
try:
101+
address = ShippingAddressSerializer(
102+
obj.shippingAddress,
103+
many=False
104+
)
105+
except:
106+
address = False
107+
return address
108+
109+
def get_user(self, obj):
110+
user = obj.user
111+
serializer = UserSerializer(user, many=False)
112+
return serializer.data

backend/core/urls.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
getUserProfile,
88
getUsers,
99
registerUser,
10-
updateUserProfile
10+
updateUserProfile,
11+
addOrderItem
1112
)
1213

1314
app_name = 'core'
@@ -25,4 +26,5 @@
2526
path('product/<int:id>/', getProduct, name="get-product"),
2627

2728
# orders urls
29+
path('orders/add', addOrderItem, name="order-add"),
2830
]

backend/core/views.py

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
MyTokenObtainPairSerializer,
1717
ProductSerializer,
1818
UserSerializer,
19-
UserSerializerWithToken
19+
UserSerializerWithToken,
20+
OrderSerializer
2021
)
2122

2223
# Users views
@@ -100,4 +101,58 @@ def getProduct(request, id):
100101
# Products views - end
101102

102103
# Order views
104+
105+
106+
@api_view(['POST'])
107+
@permission_classes(['IsAuthenticated'])
108+
def addOrderItem(request):
109+
user = request.user
110+
data = request.data
111+
112+
orderItems = data['orderItems']
113+
114+
if orderItems and len(orderItems) == 0:
115+
return Response(
116+
{'detail': 'No Order Items'},
117+
status=HTTP_400_BAD_REQUEST
118+
)
119+
else:
120+
# (1): Create Order
121+
order = Order.objects.create(
122+
user=user,
123+
paymentMethord=data.get('paymentMethord'),
124+
taxPrice=data.get('taxPrice'),
125+
shippingPrice=data.get('shippingPrice'),
126+
totalPrice=data.get('totalPrice')
127+
)
128+
# (2): Shipping Address
129+
shipping = ShippingAddress.objects.create(
130+
order=order,
131+
address=data.get('shippingAddress').get('address'),
132+
city=data.get('shippingAddress').get('city'),
133+
pincode=data.get('shippingAddress').get('pincode'),
134+
country=data.get('shippingAddress').get('country'),
135+
)
136+
# (3): Create OrderItem and set order to orderItems relationship
137+
for item in orderItems:
138+
product = Product.objects.get(_id=item.get('product'))
139+
item = OrderItem.objects.create(
140+
product=product,
141+
order=order,
142+
name=product.name,
143+
qty=item.get('qtn'),
144+
price=item.get('price'),
145+
image=product.image.url
146+
)
147+
148+
# (4) Update Stock
149+
150+
product.countInStock -= item.qty
151+
product.save()
152+
153+
serializer = OrderSerializer(order, many=True)
154+
155+
return Response(serializer.data)
156+
157+
103158
# Order views - end

0 commit comments

Comments
 (0)