Exemplo n.º 1
0
def downlinefarmers(request):
    user = request.user
    if user.category != 'L':
        return Response(statuscode('20'))

    try:
        downlinefarmers = Leader.objects.get(user=user).farmers.all()
    except:
        return Response(statuscode(12))

    farmer_details = Farmer.objects.select_related('user').filter(
        user__in=downlinefarmers)
    tokens = Token.objects.select_related('user').filter(
        user__in=downlinefarmers)

    farmer_list = []
    for farmer in farmer_details:
        farmer_name = farmer.first_name + " " + farmer.last_name
        token = tokens.get(user=farmer.user).key
        userID = farmer.user.username
        farmer_list.append({
            'farmer_name': farmer_name,
            'token': token,
            'userid': userID
        })

    return Response(statuscode('0', {'farmerlist': farmer_list}))
Exemplo n.º 2
0
def meetings(request):
    user = request.user

    currDate = datetime.now().date()
    meetings = Meetings.objects.filter(date__gte=currDate).values()

    if user.category=='L':
        data = { 'data': meetings }
        return Response(statuscode('0', data))

    farmer = Farmer.objects.get(user=user)

    meetingsList = []
    for meeting in meetings:
        #serialized = MeetingsSerializer(meeting)
        try:
            meetingtoken = MeetingToken.objects.get(farmer=farmer, meeting_id=meeting.get('id'))
        except:
            return Response(statuscode('Meeting token for meetingID : ' + str(meeting.get('id'))  + ' couldn\'t be found'))
        if meetingtoken.has_rsvped:
            meeting.update({'meetingtoken': 'at'})
        else:
            meeting.update( { 'meetingtoken': meetingtoken.token_number } )
        meetingsList.append(meeting)

    data = { 'data': meetingsList }
    return Response(statuscode('0', data))
Exemplo n.º 3
0
def govtSchemes(request):
    try:
        govtSchemes = Govt.objects.all().values()
    except:
        return Response(statuscode('12'))

    data = {
        'data': govtSchemes
    }
    return Response(statuscode('0', data))
Exemplo n.º 4
0
def cropproducts(request, cropID):

    try:
        cropproducts = Crops.objects.get(id=cropID).products.filter(
            available=True).values()
    except:
        return Response(statuscode('12'))

    data = {'data': list(cropproducts)}
    return Response(statuscode('0', data))
Exemplo n.º 5
0
def balancesheet(request):
    user = request.user
    try:
        balancesheet = ew_transaction.objects.filter(
            user=user).order_by('-date').values()
        current_amount = Ewallet.objects.filter(
            user=user).values('amount').first()
    except:
        return Response(statuscode('12'))

    data = {
        'balancesheet': balancesheet,
        'current_amount': current_amount,
    }
    return Response(statuscode('0', data))
Exemplo n.º 6
0
def rsvpMeeting(request):
    user = request.user

    try:
        meetingToken = request.data.get('meetingtoken')
    except:
        return Response(statuscode('23'))
    try:
        token = MeetingToken.objects.get(token_number=meetingToken)
    except:
        return Response(statuscode('24'))
    token.has_rsvped = True
    token.save()

    return Response(statuscode('0'))
Exemplo n.º 7
0
def produce(request):
    user = request.user

    try:
        produce = Produce.objects.filter(owner=user).order_by('-date').values(
            'crop__name', 'amount', 'amountsold', 'date', 'quality', 'income')
    except Exception as e:
        print(str(e))
        return Response(statuscode('12'))

    data = {
        'data': produce,
    }

    return Response(statuscode('0', data))
Exemplo n.º 8
0
def addfarmer(request):

    user = request.user
    if user.category != 'L':
        return Response(statuscode('20'))

    try:
        farmertoken = request.data.get('farmertoken')
    except:
        return Response(statuscode('"farmerusername" argument missing'))
    try:
        token = Token.objects.get(key=farmertoken)
        Leader.objects.get(user=user).farmers.add(token.user)
    except:
        return Response(statuscode('DB error or username invalid'))

    return Response(statuscode('0'))
Exemplo n.º 9
0
def catalogue(request):

    user = request.user
    category = request.data.get('category')
    products = Products.objects.filter(category=category, available=True).values('id',
                                                                                'name',
                                                                                'category',
                                                                                'rate',
                                                                                'image')

    data = {
        'data': list(products)
    }
    return Response(statuscode('0', data))
Exemplo n.º 10
0
def confcrop(request, cropID):

    if request.method == 'POST':
        user = request.user
        landarea = int(request.data.get('landarea'))

        try:
            crop = Crops.objects.get(id=cropID, live=True)
        except:
            return Response(statuscode('19'))
        try:
            FarmerCropMap(farmer=user, crop=crop, landarea=landarea).save()
            crop.current_amount += crop.weigth_per_land * landarea
            crop.subscribers += 1
            crop.save()
        except:
            return Response(statuscode('12'))

        message = "You have successfully subcribed to " + crop.name
        try:
            if user.category != 'N':
                send_to = str(user.contact_set.first().number)
                sms.send_message('+91' + send_to, sms.TWILIO_NUMBER, message)
        except:
            print("SMS could not be sent")
        return Response(statuscode('0'))

    if request.method == 'DELETE':
        user = request.user
        try:
            crop = Crops.objects.get(id=cropID, live=True)
        except:
            return Response(statuscode('19'))
        try:
            subscription = FarmerCropMap.objects.get(farmer=user, crop=crop)
            crop.current_amount -= subscription.landarea * crop.weigth_per_land
            crop.subscribers -= 1
            crop.save()
            subscription.delete()
        except:
            return Response(statuscode('12'))

        return Response(statuscode('0'))
Exemplo n.º 11
0
def cropplan(request, cropID=0):

    if cropID == 0:
        user = request.user

        crop_subscriptions = FarmerCropMap.objects.filter(
            farmer=user).order_by('-date')
        crop_subscriptions_ids = []

        subscriptions = []
        for subscription in crop_subscriptions:
            crop_subscriptions_ids.append(subscription.crop.id)
            #subscriptions += [ CropSerializer(subscription.crop).data ]
            #subscriptions += [subscription]

        subscriptions = Crops.objects.filter(
            id__in=crop_subscriptions_ids).values()

        crops = Crops.objects.filter(live=True).exclude(
            id__in=list(crop_subscriptions_ids)).values(
                'id', 'code', 'name', 'type', 'max_cap', 'current_amount',
                'weigth_per_land', 'guidance', 'live', 'image', 'subscribers')
        unsubscribedCropList = list(crops)
        recommendationFailed = False
        recommendation = request.data.get('recommendation')

        if recommendation == '1':
            try:
                #### Recommendation System starts......

                avgInvestment = 0
                if request.data.get('investment'):
                    avgInvestment = request.data.get('investment')
                else:
                    investments = Orders.objects.values('date__year').filter(
                        buyer=user).annotate(investment=Sum('price'))
                    investmentSum = 0

                    for investment in investments:
                        print(investment)
                        investmentSum += investment.get('investment')
                    if investments.count() == 0:
                        print('invest')
                        raise Exception("not enough investments to predict")

                    avgInvestment = investmentSum / investments.count()

                land = Land.objects.filter(owner=user)
                if land.count() == 0:
                    print("land")
                    raise Exception("No Land to predict profit for")

                landarea = 0
                if request.data.get('landarea'):
                    landarea = request.data.get('landarea')

                else:
                    landarea = land.aggregate(avglandarea=Avg('area'))
                    landarea = landarea.get('avglandarea')
                soil = land.first().soil

                print('investment : ', avgInvestment)
                print('landarea : ', landarea)
                print('soil : ', soil)
                farmerData = {
                    'investment': int(avgInvestment),
                    'landarea': int(landarea),
                    'soil': soil
                }

                recommender = Recommender()
                recommender.trainModel(recommender.gatherData())
                estimatedProfits = recommender.predict(farmerData,
                                                       unsubscribedCropList)

                cropEstProfit = []
                i = 0
                for estprofit in estimatedProfits:
                    unsubscribedCropList[i].update(
                        {'estimatedProfit': estprofit})
                    i += 1

                #### Recommendation System ends......
            except Exception as e:
                print(str(e))
                recommendationFailed = True
                for temp in unsubscribedCropList:
                    temp.update({'estimatedProfit': 0})

        else:
            for temp in unsubscribedCropList:
                temp.update({'estimatedProfit': 0})

        data = {
            'subscriptions': subscriptions,
            'not_subscribed': unsubscribedCropList,
            #'not_subscribed': cropEstProfit,
        }
        if recommendationFailed:
            return Response(statuscode('25', data))
        return Response(statuscode('0', data))

    else:
        user = request.user
        try:
            crop = Crops.objects.filter(id=int(cropID)).values().first()
        except:
            return Response(statuscode('19'))

        return Response(statuscode('0', {'data': crop}))
Exemplo n.º 12
0
def order(request):

    if request.method=='POST':
        user = request.user
        productID = int(request.data.get('id'))
        paymentType = request.data.get('type')

        if int(productID)!=-1:
            quantity = int(request.data.get('quantity'))
            try:
                product = Products.objects.get(id=productID)
            except Exception as e:
                return Response({
                    'statuscode': '11'
                })

            try:
                order = Orders(type=paymentType,
                               buyer=user,
                               item=product,
                               rate=product.rate,
                               quantity=quantity,
                               price=product.rate * quantity)
            except Exception as e:
                return Response({
                    'statuscode': str(e)
                })

            if paymentType=="CAS" or paymentType=="PEW":
                order.is_paid = True

            refno = ""
            if paymentType == "PEW":
                description = ""
                try:
                    refno = makeTransaction(user, order.price, description)
                except Exception as e:
                    return Response(statuscode(str(e)))
            try:
                order.save()
            except:
                return Response(statuscode('12'))
            try:
                message = "Your order has been placed successfully, Products : " + order.item.name + ", OrderID : " + str(order.id)
                if order.buyer.category != 'N':
                    send_to = str(order.buyer.contact_set.first().number)
                    sms.send_message('+91' + send_to, sms.TWILIO_NUMBER, message)
            except Exception as e:
                print("SMS could not be sent.")

            if paymentType=='PEW':
                transaction = ew_transaction.objects.get(refno=refno)
                transaction.description = "Paid to FPO for OrderID: " + str(order.id)
                transaction.save()
            
            return Response({
                'statuscode': '0',
                'orderID': order.id,
            })

        else:
            kart = Kart.objects.filter(user=user)
            if kart.count()==0:
                return Response(statuscode('0'))
            productIDs = []
            for kartItem in kart:
                productIDs += str(kartItem.item.id)

            products = Products.objects.filter(id__in=productIDs)
            totalCost = 0

            for kartItem in kart:
                totalCost += kartItem.item.rate * kartItem.quantity
            if paymentType=='PEW':
                ewalletBalance = Ewallet.objects.get(user=user).amount
                if ewalletBalance < totalCost:
                    return Response(statuscode('17'))

            orderIDs = []
            orders = []
            amount = 0
            for kartentry in kart:
                quantity = kartentry.quantity
                try:
                    orders.append(Orders(type=type,
                                           buyer=user,
                                           item=kartentry.item,
                                           rate=kartentry.item.rate,
                                           quantity=quantity,
                                           price=kartentry.item.rate * quantity))
                except Exception as e:
                    return Response(statuscode(str(e)))

            if paymentType == "PEW":
                description = ""
                try:
                    refno = makeTransaction(user, totalCost, description)
                except Exception as e:
                    return Response(statuscode(str(e)))

            productsstring = " "
            for order in orders:
                if paymentType=="CAS" or paymentType=="PEW":
                    order.is_paid = True
                order.save()
                orderIDs.append(order.id)
                productsstring += " " + (order.item.name) + ","

            try:
                message = "Your order has been placed successfully, Products : " + productsstring
                if order.buyer.category != 'N':
                    send_to = str(order.buyer.contact_set.first().number)
                    sms.send_message('+91' + send_to, sms.TWILIO_NUMBER, message)
            except:
                print("sms couldn't be sent")

            if paymentType=="PEW":
                description = "Paid to FPO for OrderIDs: " + str(orderIDs)
                transaction = ew_transaction.objects.get(refno=refno)
                transaction.description = description
                transaction.save()

            kart.delete()
            return Response(statuscode('0', {'orderIDs': orderIDs, 'total_cost': totalCost}))

    if request.method=='GET':
        user = request.user
        try:
            completed_orders = Orders.objects.filter(buyer=user, is_delivered=True).order_by('-date').values()
            pending_orders = Orders.objects.filter(buyer=user, is_delivered=False).order_by('-date').values()
        except:
            return Response(statuscode('12'))

        completed_orders_list = list(completed_orders)
        pending_orders_list = list(pending_orders)

        for completed_order in completed_orders_list:
            product = Products.objects.get(id=completed_order.get('item_id'))
            completed_order.update({
                                        'product_name': product.name,
                                        'rate': product.rate,
                                        'image': product.image.url
                                    })

        for pending_order in pending_orders_list:
            product = Products.objects.get(id=pending_order.get('item_id'))
            pending_order.update({
                                        'product_name': product.name,
                                        'rate': product.rate,
                                        'image': product.image.url
                                    })

        data = {
            'completed_orders': completed_orders,
            'pending_orders': pending_orders,
        }

        return Response(statuscode('0', data))