Skip to content

Commit aa65e36

Browse files
Merge pull request #390 from MySecondLanguage/device-api-added
Device api added
2 parents e2a0258 + 4b20529 commit aa65e36

File tree

8 files changed

+198
-8
lines changed

8 files changed

+198
-8
lines changed

nxtbn/admin_schema.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
from nxtbn.cart.admin_query import AdminCartQuery
44
from nxtbn.core.admin_mutation import CoreMutation
55
from nxtbn.core.admin_queries import AdminCoreQuery
6+
from nxtbn.order.admin_mutation import AdminOrderMutation
7+
from nxtbn.payment.admin_queries import AdminPaymentQuery
68
from nxtbn.product.admin_mutations import ProductMutation
79
from nxtbn.product.admin_queries import ProductQuery
810
from nxtbn.users.admin_mutation import AdminUserMutation
@@ -13,10 +15,10 @@
1315

1416

1517

16-
class Query(ProductQuery, AdminOrderQuery, AdminCoreQuery, WarehouseQuery, AdminCartQuery, UserAdminQuery, PurchaseQuery):
18+
class Query(ProductQuery, AdminOrderQuery, AdminCoreQuery, WarehouseQuery, AdminCartQuery, UserAdminQuery, PurchaseQuery, AdminPaymentQuery):
1719
pass
1820

19-
class Mutation(AdminUserMutation, ProductMutation, CoreMutation):
21+
class Mutation(AdminUserMutation, ProductMutation, CoreMutation, AdminOrderMutation):
2022
pass
2123

2224
admin_schema = graphene.Schema(query=Query, mutation=Mutation)

nxtbn/order/admin_mutation.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import graphene
2+
import graphene
3+
from graphql import GraphQLError
4+
from nxtbn.core.admin_permissions import gql_store_admin_required
5+
from nxtbn.order import OrderStatus
6+
from nxtbn.order.models import OrderLineItem, Order, OrderStockReservationStatus
7+
8+
9+
class UpdateOrderComment(graphene.Mutation):
10+
class Arguments:
11+
id = graphene.ID(required=True)
12+
comment = graphene.String(required=True)
13+
14+
success = graphene.Boolean()
15+
16+
@gql_store_admin_required
17+
def mutate(root, info, id, comment):
18+
try:
19+
order = Order.objects.get(pk=id)
20+
order.comment = comment
21+
order.save()
22+
return UpdateOrderComment(success=True)
23+
except Order.DoesNotExist:
24+
raise Exception("Order not found")
25+
26+
class AdminOrderMutation(graphene.ObjectType):
27+
update_order_comment = UpdateOrderComment.Field()

nxtbn/order/admin_queries.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,17 @@
44

55
from nxtbn.core.admin_permissions import gql_store_admin_required
66
from nxtbn.core.models import SiteSettings
7-
from nxtbn.order.admin_types import OrderInvoiceType, OrderType
8-
from nxtbn.order.models import Address, Order
7+
from nxtbn.order.admin_types import OrderDeviceMetaType, OrderInvoiceType, OrderType
8+
from nxtbn.order.models import Address, Order, OrderDeviceMeta
99
from nxtbn.users import UserRole
1010

1111

1212
class AdminOrderQuery(graphene.ObjectType):
1313
orders = DjangoFilterConnectionField(OrderType)
14-
order = graphene.Field(OrderType, id=graphene.Int(required=True))
14+
order = graphene.Field(OrderType, alias=graphene.UUID(required=True))
15+
order_device_meta = DjangoFilterConnectionField(OrderDeviceMetaType)
16+
order_device_metas = DjangoFilterConnectionField(OrderDeviceMetaType)
17+
1518
order_invoice = graphene.Field(OrderInvoiceType, order_id=graphene.Int(required=True))
1619
order_invoices = graphene.List(OrderInvoiceType, order_ids=graphene.List(graphene.Int))
1720

@@ -22,14 +25,22 @@ def resolve_orders(self, info, **kwargs):
2225
return Order.objects.all()
2326

2427
@gql_store_admin_required
25-
def resolve_order(self, info, id):
28+
def resolve_order(self, info, alias):
2629
try:
27-
order = Order.objects.get(id=id)
30+
order = Order.objects.get(alias=alias)
2831
except Order.DoesNotExist:
2932
raise Exception("Order not found")
3033

3134
return order
3235

36+
@gql_store_admin_required
37+
def resolve_order_device_meta(self, info, **kwargs):
38+
return OrderDeviceMeta.objects.all()
39+
40+
@gql_store_admin_required
41+
def resolve_order_device_metas(self, info, **kwargs):
42+
return OrderDeviceMeta.objects.all()
43+
3344

3445
@gql_store_admin_required
3546
def resolve_order_invoice(self, info, order_id):

nxtbn/order/admin_types.py

Lines changed: 89 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from graphene_django import DjangoObjectType
44
from graphene import relay
55
from nxtbn.core.models import SiteSettings
6-
from nxtbn.order.models import Address, Order, OrderLineItem
6+
from nxtbn.order.models import Address, Order, OrderDeviceMeta, OrderLineItem
77

88
from nxtbn.order.admin_filters import OrderFilter
99

@@ -25,12 +25,78 @@ class Meta:
2525
)
2626

2727

28+
class OrderLineItemsType(DjangoObjectType):
29+
db_id = graphene.Int(source='id')
30+
humanize_total_price = graphene.String()
31+
humanize_price_per_unit = graphene.String()
32+
33+
def resolve_humanize_total_price(self, info):
34+
return self.humanize_total_price()
35+
36+
def resolve_humanize_price_per_unit(self, info):
37+
return self.humanize_price_per_unit()
38+
class Meta:
39+
model = OrderLineItem
40+
fields = (
41+
'id',
42+
'quantity',
43+
'variant',
44+
'total_price',
45+
'price_per_unit',
46+
)
47+
2848
class OrderType(DjangoObjectType):
2949
db_id = graphene.Int(source='id')
3050
humanize_total_price = graphene.String()
51+
line_items = graphene.List(OrderLineItemsType)
52+
overcharged_amount = graphene.String()
53+
is_overdue = graphene.Boolean()
54+
payment_method = graphene.String()
55+
humanize_total_price = graphene.String()
56+
humanize_total_shipping_cost = graphene.String()
57+
humanize_total_discounted_amount = graphene.String()
58+
humanize_total_tax = graphene.String()
59+
humanize_total_paid_amount = graphene.String()
60+
due = graphene.String()
61+
total_price_without_symbol = graphene.String()
62+
63+
def resolve_total_price_without_symbol(self, info):
64+
return self.humanize_total_price(locale='')
3165

3266
def resolve_humanize_total_price(self, info):
3367
return self.humanize_total_price()
68+
69+
def resolve_line_items(self, info):
70+
return self.line_items.all()
71+
72+
def resolve_overcharged_amount(self, info):
73+
return self.get_overcharged_amount()
74+
75+
def resolve_is_overdue(self, info):
76+
return self.is_overdue()
77+
78+
def resolve_payment_method(self, info):
79+
return self.get_payment_method()
80+
81+
def resolve_humanize_total_price(self, info):
82+
return self.humanize_total_price()
83+
84+
def resolve_humanize_total_shipping_cost(self, info):
85+
return self.humanize_total_shipping_cost()
86+
87+
def resolve_humanize_total_discounted_amount(self, info):
88+
return self.humanize_total_discounted_amount()
89+
90+
def resolve_humanize_total_tax(self, info):
91+
return self.humanize_total_tax()
92+
93+
def resolve_humanize_total_paid_amount(self, info):
94+
return self.humanize_total_paid_amount()
95+
96+
def resolve_due(self, info):
97+
return self.get_due()
98+
99+
34100
class Meta:
35101
model = Order
36102
fields = (
@@ -58,6 +124,8 @@ class Meta:
58124
'reservation_status',
59125
'note',
60126
'comment',
127+
'user',
128+
'due'
61129
)
62130
interfaces = (relay.Node,)
63131
filterset_class = OrderFilter
@@ -131,4 +199,24 @@ class Meta:
131199
'preferred_payment_method',
132200
'reservation_status',
133201
'note',
202+
)
203+
204+
205+
class OrderDeviceMetaType(DjangoObjectType):
206+
db_id = graphene.Int(source='id')
207+
class Meta:
208+
model = OrderDeviceMeta
209+
fields = (
210+
'id',
211+
'order',
212+
'ip_address',
213+
'user_agent',
214+
'browser',
215+
'browser_version',
216+
'operating_system',
217+
'device_type',
218+
)
219+
interfaces = (relay.Node,)
220+
filter_fields = (
221+
'order__alias',
134222
)

nxtbn/order/api/dashboard/serializers.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ class Meta:
158158
'total_paid_amount',
159159
'device_meta',
160160
'reservation_status',
161+
'comment',
161162
)
162163

163164
def get_total_price(self, obj):

nxtbn/payment/admin_queries.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
from django.conf import settings
2+
import graphene
3+
from graphene_django.filter import DjangoFilterConnectionField
4+
5+
from nxtbn.core.admin_permissions import gql_store_admin_required
6+
from nxtbn.payment.admin_types import PaymentType
7+
from nxtbn.payment.models import Payment
8+
9+
10+
class AdminPaymentQuery(graphene.ObjectType):
11+
payments = DjangoFilterConnectionField(PaymentType)
12+
payment = graphene.Field(PaymentType, id=graphene.Int(required=True))
13+
14+
@gql_store_admin_required
15+
def resolve_payments(self, info, **kwargs):
16+
return Payment.objects.all()
17+
18+
@gql_store_admin_required
19+
def resolve_payment(self, info, id):
20+
try:
21+
payment = Payment.objects.get(id=id)
22+
except Payment.DoesNotExist:
23+
raise Exception("Payment not found")
24+
25+
return payment

nxtbn/payment/admin_types.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
from django.conf import settings
2+
import graphene
3+
from graphene_django import DjangoObjectType
4+
from graphene import relay
5+
6+
from nxtbn.payment.models import Payment
7+
8+
class PaymentType(DjangoObjectType):
9+
db_id = graphene.Int(source='id')
10+
11+
class Meta:
12+
model = Payment
13+
fields = (
14+
'id',
15+
'user',
16+
'order',
17+
'payment_method',
18+
'transaction_id',
19+
'payment_status',
20+
'is_successful',
21+
'currency',
22+
'payment_amount',
23+
'gateway_response_raw',
24+
'paid_at',
25+
'payment_plugin_id',
26+
'gateway_name',
27+
)
28+
29+
interfaces = (relay.Node,)
30+
filter_fields = (
31+
'order__alias',
32+
)

nxtbn/product/admin_types.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,10 @@ class Meta:
108108
class ProductVariantAdminType(DjangoObjectType):
109109
db_id = graphene.Int(source="id")
110110
display_name = graphene.String()
111+
humanize_price = graphene.String()
112+
113+
def resolve_humanize_price(self, info):
114+
return self.humanize_total_price()
111115
class Meta:
112116
model = ProductVariant
113117
fields = (

0 commit comments

Comments
 (0)