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}))
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))
def govtSchemes(request): try: govtSchemes = Govt.objects.all().values() except: return Response(statuscode('12')) data = { 'data': govtSchemes } return Response(statuscode('0', data))
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))
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))
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'))
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))
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'))
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))
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'))
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}))
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))