def create(self, request, format=None): """ Sample Submit: --- { 'full_name': 'agent1', 'username': '******', 'designation': 'DGM', 'email': 'email', 'role': 2, // (1, Manager), (2, Agent), (0, Organizer) 'parent': 'manager_id', 'phone': '+88017XXXXXXXX', } """ is_organizer(request) if not check_user_count(request): resp = {'detail': 'Please purchase more accounts!'} return Response(resp, status=402) serializer = AccountSerializerAdmin(data=request.data) if serializer.is_valid(): # manager = request.user user = serializer.create_user(serializer.validated_data, request) agent_details = get_profile_details(user) adjust_user_count(request) return Response(agent_details, status=201) data = {'detail': str(serializer.errors)} return Response(data, status=400)
def create(self, request, format=None): """ Sample submit: --- { 'user_id': 23, 'is_premium': true, 'package_id': 2, } """ # TODO: Prevent updates through this is_organizer(request) user_id = request.data.get('user_id', False) if not user_id: return Response({'detail': 'Provide user id!'}, status=400) organizer = User.objects.get(id=user_id) is_premium = bool(request.data.get('is_premium', False)) package_id = int(request.data.get('package_id', 3)) sub = organizer.org.subscription cur_usage = sub.current_usage sub._is_premium = is_premium sub.package = package_id sub.save() cur_usage.package = package_id cur_usage.save() return Response({'msg': 'OK'}, status=201)
def post(self, request, format=None): """ Sample Submit: --- { "gateway": 2, "vendor_uid": '1812101604200QyijFyMPMMBNtK', ('val_id' from SSL) "bill_type": 1, "amount": '780.0', "extra_tasks": 0, "new_agents": 0 } """ serializer = SSLExecuteSerializer(data=request.data) if serializer.is_valid(): # print(serializer.data) val_id = serializer.data['vendor_uid'] payment_log = validate_payment_ssl(val_id) if Payment.objects.filter(Q(vendor_uid=val_id)).exists(): msg = 'This payment is expired!' return Response({'msg': msg}, status=400) # print('Executing payment SSL.............') # print(payment_log) is_organizer(request) organizer = request.user if payment_log['status'] == 'VALIDATED': update_subscription_ssl(serializer, organizer, payment_log) return Response({'msg': 'OK'}, status=200) msg = 'Payment is invalid!' return Response({'msg': msg}, status=400) else: return Response(serializer.errors, status=400)
def retrieve(self, request, pk, format=None): """ Sample response: --- { 'is_premium': true, 'package_id': 2, 'package_details': { 'price': 100, 'has_attendance': True, 'has_agent_tracking': True, 'has_messaging': True, 'has_task_management': False, } } """ is_organizer(request) organizer = User.objects.get(id=pk) data = { 'package_id': organizer.org.subscription.package, 'package_details': PACKAGE_INFO[organizer.org.subscription.package], 'is_premium': organizer.org.subscription._is_premium, 'renew_needed': organizer.org.subscription.renew_needed, } return Response(data, status=200)
def update(self, request, pk, format=None): """ Sample Submit: --- { 'org_name': 'org1', 'address': 'Badda link road', 'day_start': '09:00:00'', 'day_end': '17:00:00', 'location_interval': 120, 'logo': 'logo_url..', 'min_work_hour_p': 90, 'weekend': [4, 5], 'tracking_enabled': true, } Response: --- same as profile """ is_organizer(request) user = request.user serializer = OrgSerializer(data=request.data) if serializer.is_valid(): org = Organization.objects.get(id=pk) if user.org != org: data = {'detail': 'Forbidden!'} return Response(data, status=403) serializer.org_update(org, serializer.validated_data) data = {'msg': 'OK'} return Response(data, status=200) # print(serializer.errors) return Response({'detail': str(serializer.errors)}, status=400)
def post(self, request, format=None): """ Sample submit: --- { "gateway": 1, "vendor_uid": '0GL0BVI1543309772718', "payment_uid": 'a132-4dfk-asjdf-hakshd', "bill_type": 1, "amount": '780.0', "extra_tasks": 0, "new_agents": 0 } """ serializer = BkashPaymentSerializer(data=request.data) # print(serializer.initial_data) if serializer.is_valid(): # print('Executing bkash payment.............') # print(request.data) is_organizer(request) paymentID = serializer.data['vendor_uid'] token = get_token()["id_token"] organizer = request.user payment_log = execute_payment_bkash(token, paymentID) ''' SUCCESS: { "paymentID": "3FGA3YC1543309140580", "createTime": "2018-11-27T08:59:00:660 GMT+0000", "updateTime": "2018-11-27T08:59:30:017 GMT+0000", "trxID": "5KR201949E", "transactionStatus": "Completed", "amount": "100.50", "currency": "BDT", "intent": "sale", "merchantInvoiceNumber": "12124567" } ERROR: { 'errorCode': '2023', 'errorMessage': 'Insufficient Balance' } ''' # send_log_mail('Bkash payment log', payment_log) try: if payment_log['transactionStatus'] == 'Completed': with transaction.atomic(): update_subscription_bksah(serializer, organizer, payment_log) return Response({'msg': 'Payment Successful!'}, status=200) return Response(payment_log, status=402) except Exception as e: return Response(payment_log, status=400) else: # print(serializer.errors) return Response(serializer.errors, status=400)
def destroy(self, request, pk, format=None): is_organizer(request) viewer = request.user user = User.objects.get(id=pk) check_same_org(user, viewer) try: delete_agent_data(user) adjust_user_count(request) return Response({'msg': 'User deleted!'}, status=200) except Exception as e: return Response({'msg': str(e)}, status=400)
def post(self, request, format=None): is_organizer(request) organizer = request.user org = organizer.org try: with transaction.atomic(): organizer.delete() org.status = 2 # suspended org.save() return Response({'msg': 'OK'}, status=200) except Exception as e: return Response({'detail': str(e)}, status=400)
def get(self, request, format=None): """ Query Parameter details: --- bill_type: type: int required: Yes choices: (1, new subscription), (2, new agents), (3, extra tasks) amount: type: float required: Yes new_agents: type: int default: 0 extra_tasks: type: int default: 0 payment_uid: type: str required: Yes Response: --- Bkash HTML page.. """ is_organizer(request) token = request.META.get('HTTP_AUTHORIZATION', " ").split(' ')[1] bill_type = request.query_params.get('bill_type', False) amount = request.query_params.get('amount', False) extra_tasks = request.query_params.get('extra_tasks', 0) new_agents = request.query_params.get('new_agents', 0) payment_uid = request.query_params.get('payment_uid', 'None') if (not amount) or (not bill_type): return render_context(request, 'billing/payment_error.html', {}, 400) context = get_context(request) context.update({ 'bill_type': bill_type, 'amount': amount, 'extra_tasks': extra_tasks, 'new_agents': new_agents, 'token': token, 'payment_uid': payment_uid, }) # print(context) return render_context(request, 'billing/bkash.html', context, 200)
def post(self, request, format=None): """ Sample form: --- 'task_data': file(excel file for team data) """ is_organizer(request) organizer = request.user # fetching csv file csv_file = request.FILES.get("task_data", None) validate_csv(csv_file) task_list = check_tasks_csv(csv_file, organizer) with transaction.atomic(): create_tasks_sync(task_list, organizer) resp = {'msg': 'Upload Process finished'} return Response(resp, status=200)
def update(self, request, pk, format=None): """ Sample submit: --- { 'is_premium': true, 'package_id': 2, } """ is_organizer(request) organizer = User.objects.get(id=pk) is_premium = bool(request.data.get('is_premium', False)) package_id = int(request.data.get('package_id', 3)) organizer.org.subscription._is_premium = is_premium if organizer.org.subscription.package != package_id: organizer.org.subscription.package = package_id organizer.org.subscription.renew_needed = True organizer.org.subscription.save() return Response({'msg': 'OK'}, status=200)
def post(self, request, format=None): """ Sample form: --- 'user_data': file(csv file for user data) """ is_organizer(request) organizer = request.user # fetching csv file # print(request.FILES) csv_file = request.FILES.get("user_data", None) validate_csv(csv_file) user_list = check_team_hierarchy_csv(csv_file, organizer) with transaction.atomic(): create_teams_sync(user_list, organizer) resp = {'msg': 'Upload Process finished'} return Response(resp, status=200)
def partial_update(self, request, pk, format=None): """ Sample Submit: --- { 'full_name': 'agent1', 'username': '******', 'email': 'email', 'role': 2, 'parent': 'manager_id', 'phone': '+88017XXXXXXXX', } """ viewer = request.user is_organizer(request) serializer = AccountSerializerAdmin(data=request.data) if serializer.is_valid(): user = User.objects.get(id=pk) check_same_org(user, viewer) user = serializer.update_user(user, serializer.validated_data) profile_details = get_profile_details(user) return Response(profile_details, status=200) data = {'detail': str(serializer.errors)} return Response(data, status=400)
def post(self, request, format=None): """ Sample Submit: --- { 'gateway': 2, 'amount': 2, 'bill_type': 1, 'extra_tasks': 3, 'new_agents':3 } """ serializer = SSLCreateSerializer(data=request.data) organizer = request.user is_organizer(request) if serializer.is_valid(): # print('Creating payment SSL.............') payment_log = create_payment_ssl(serializer.data, organizer) # print(payment_log) return Response(payment_log, status=200) else: return Response(serializer.errors, status=400)