示例#1
0
 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)
示例#2
0
    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)
示例#3
0
    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)
示例#4
0
    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)
示例#5
0
    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)
示例#6
0
    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)
示例#7
0
 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)
示例#8
0
 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)
示例#9
0
    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)
示例#10
0
    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)
示例#11
0
    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)
示例#12
0
    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)
示例#13
0
 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)
示例#14
0
    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)