def notify_bid_reverse(cls, userid, jobid, bidid, job_collection, bidderfullname, job_bid_detail): notificationtext = "You reverse bid on the job title " + job_collection[ 'title'] + " for bidder : " + str(bidderfullname) from jobwork.models.user import User registration_id = User.find_FCM_id(job_bid_detail['userid']) if registration_id: data_message = { "body": notificationtext, } push_service.notify_single_device(registration_id=registration_id, message_title="Reverse Bid", message_body=notificationtext, data_message=data_message) from jobwork.models.notification import Notifications Notifications.insert({ "notificationid": CommonUtils.generateRandomNo(Notifications, "notificationid"), "notificationtext": notificationtext, "notificationtype": "Bid", "notificationtouserid": int(job_bid_detail['userid']), "notificationfromuserid": userid, "jobid": int(jobid), "jobbidid": int(bidid), "commentid": -1, "createddatetime": datetime.datetime.now(), "updatedatetime": datetime.datetime.now(), "isread": False })
def notify_bid_accepted(cls, userid, jobid, bidid, job_collection, jobberfullname, final_bid): notificationtext = "Your Bid on job title '" + job_collection[ 'title'] + "' is accepted by Jobber : " + jobberfullname from jobwork.models.user import User registration_id = User.find_FCM_id(final_bid['userid']) if registration_id: data_message = { "body": notificationtext, } push_service.notify_single_device(registration_id=registration_id, message_title="Bid Accepted", message_body=notificationtext, data_message=data_message) # Notification entry from jobwork.models.notification import Notifications Notifications.insert({ "notificationid": CommonUtils.generateRandomNo(Notifications, "notificationid"), "notificationtext": notificationtext, "notificationtype": "Bid", "notificationtouserid": int(final_bid['userid']), "notificationfromuserid": userid, "jobid": int(jobid), "jobbidid": int(bidid), "commentid": -1, "createddatetime": datetime.datetime.now(), "updatedatetime": datetime.datetime.now(), "isread": False })
def notify_onboard(cls, userid, fullname, device_token): if device_token: notificationtext = "Hello " + str(fullname) + " SaveOnJobs welcomes you !!" data_message = { "body": notificationtext, } push_service.notify_single_device(registration_id=device_token, message_title="Welcome!", message_body=notificationtext, data_message=data_message, click_action="FCM_PLUGIN_ACTIVITY") from jobwork.models.notification import Notifications Notifications.insert({ "notificationid": CommonUtils.generateRandomNo(Notifications, "notificationid"), "notificationtext": notificationtext, "notificationtype": "welcome", "notificationtouserid": int(userid), "notificationfromuserid": -1, "jobid": -1, "bidid": -1, "commentid": -1, "createddatetime": datetime.datetime.now(), "updatedatetime": datetime.datetime.now(), "isread": False })
def notification_read(): userid = int(request.json['userid']) token = request.json['token'] notificationData = Notifications.find_one( {"notificationid": int(request.json['notificationid'])}, {"_id": 0}) if len(notificationData) > 0: Notifications.update( {"notificationid": int(request.json['notificationid'])}, {"$set": { "isread": True }}) notificationData = list( Notifications.find( {"notificationid": int(request.json['notificationid'])}, { "_id": 0, "isread": 1, "notificationid": 1 })) notificationUnread = list( Notifications.find( { "notificationtouserid": userid, "isread": False }, {"_id": 0})) return jsonify({ "status": 200, "message": "Notification Data.", "notificationReadArray": notificationData, "notificationUnread": len(notificationUnread) }) else: return jsonify({ "status": 200, "message": "No Notification data Found.", "notificationReadArray": [], "notificationUnread": 0 })
def notification_total_count(): # Check authentications keys userid = int(request.json['userid']) token = request.json['token'] notificationUnread = list( Notifications.find({ "notificationtouserid": userid, "isread": False }, {"_id": 0})) messagesUnread = list( Messages.find({ "userid": userid, "isread": False }, {"_id": 0})) return jsonify({ "status": 200, "message": "Notification Data.", "totalmessage_unread_count": len(messagesUnread), "notificationUnread": len(notificationUnread) })
def notification_list(): URL = Constants.URL imagePath = Constants.IMAGE_PATH userid = int(request.json['userid']) token = request.json['token'] notificationArray = [] notificationData = list( Notifications.find({ "notificationtouserid": userid }, { "_id": 0 }).sort("createddatetime", -1)) notificationUnread = list( Notifications.find({ "notificationtouserid": userid, "isread": False }, {"_id": 0})) print(notificationData) if len(notificationData) > 0: for collections in notificationData: jobber = {} if collections['notificationfromuserid'] != -1: jobber = Jobs.find_one({"jobid": int(collections['jobid'])}, { "_id": 0, "creatinguserid": 1 }) userData = User.find_one( {"userid": int(collections['notificationfromuserid'])}, {"_id": 0}) if userData is not None: fullname = userData['firstname'] + " " + userData[ 'lastname'] if userData['picurl'] != "": picurl = URL + imagePath + userData['picurl'] else: picurl = URL + imagePath + "user-no-image.jpg" if userData['addressJSON']['city'] != "": cityNamedata = CityCollections.find_one( {"cityid": userData['addressJSON']['city']}, { "_id": 0, "city": 1 }) cityName = cityNamedata['city'] else: cityName = "" else: fullname = "" picurl = URL + imagePath + "user-no-image.jpg" cityName = "" else: fullname = "SAVEonJOBS" picurl = URL + "static/front_end/images/logo1.png" cityName = "" userDataCollection = { "fullname": fullname, "cityname": cityName, "picurl": picurl, "jobber": jobber } collections.update(userDataCollection) notificationArray.append(collections) return jsonify({ "status": 200, "message": "Notification Data.", "notificationArray": notificationArray, "notificationUnread": len(notificationUnread) }) else: return jsonify({ "status": 200, "message": "No Notification data Found.", "notificationArray": [], "notificationUnread": notificationUnread })
def job_bid_create(): userid = request.json['userid'] userInfo = User.find_one({"userid": int(userid)}, {"_id": 0}) if userInfo is not None: if userInfo['emailverified'] is False: return jsonify({ "status": 202, "message": "Email not verified. Please verify your email to bid" }) jobCollection = Jobs.find_one( { "jobid": int(request.json['jobid']), "active": True }, {"_id": 0}) #if jobCollection['personsselected'] >= jobCollection['personsrequired']: # return jsonify({"status": 203, "message": "Jobber's requirement has already been fulfilled"}) jobberUser = User.find_one({"userid": jobCollection['creatinguserid']}, {"_id": 0}) userCollection = User.find_one({"userid": userid}, {"_id": 0}) if userCollection is not None: fullname = userCollection['firstname'] + " " + userCollection[ 'lastname'] bidderEmail = userCollection['email'] else: fullname = "" bidderEmail = None if jobberUser is not None: jobberfullname = jobberUser['firstname'] + " " + jobberUser['lastname'] jobberEmail = jobberUser['email'] else: jobberfullname = None jobberEmail = None if jobCollection is not None: if request.json['bidid'] == "": check_status = JobBids.find( { "jobid": int(request.json['jobid']), "userid": userid, "active": True }, {"_id": 0}) if check_status.count() == 0: reverseBidData = { "reversebidamount": None, "reversebiddatetime": None } bidid = CommonUtils.generateRandomNo(JobBids, "bidid") JobBids.insert({ "jobid": int(request.json['jobid']), "bidid": bidid, "userid": userid, "selected": False, "bidamount": float(request.json['bidamount']), "finalbidamount": None, "bidcomment": request.json['bidcomment'], "createdatetime": datetime.now(), "bidcanceldatetime": "", "bidcancellationreason": "", "status": "pending", "reversebid": reverseBidData, "completionstatus": "pending", "completionremarks": "", "active": True }) notificationtext = "Your job title " + jobCollection[ 'title'] + " is bid by : " + fullname '''registration_id = find_FCM_id(jobCollection['creatinguserid']) if (registration_id): data_message = { "body": notificationtext, } result = push_service.notify_single_device(registration_id=registration_id, message_title="New Bid", message_body=notificationtext, data_message=data_message, click_action="FCM_PLUGIN_ACTIVITY")''' Notifications.insert({ "notificationid": CommonUtils.generateRandomNo(Notifications, "notificationid"), "notificationtext": notificationtext, "notificationtype": "Bid", "notificationtouserid": int(jobCollection['creatinguserid']), "notificationfromuserid": userid, "jobid": jobCollection['jobid'], "bidid": bidid, "commentid": -1, "createddatetime": datetime.now(), "updatedatetime": datetime.now(), "isread": False }) ''' # Sending Email if jobberEmail is not None: subject = "Bid Created." msg = Message(subject, sender=("SAVEonJOBS", "*****@*****.**"), recipients=[jobberEmail]) msg.html = render_template('/emailTemplates/bid-receive.html', name=jobberfullname, title=str(jobCollection['title']), bidder=fullname, amount=int(request.json['bidamount'])) mail.send(msg) emailtracks.insert({"emailtrackid": generateRandomNo(emailtracks, "emailtrackid"), "userid": int(jobCollection['creatinguserid']), "email": jobberEmail, "subject": subject, "emailtext": msg.html, "createdatetime": datetime.now(), "updatedatetime": datetime.now()}) else: print "No email of jobber." ''' new_bid = list(JobBids.find({"bidid": bidid}, {"_id": 0})) return jsonify({ "status": 200, "message": "Successfully created.", "response": new_bid, "error": False }) else: new_bid = list( JobBids.find({"bidid": check_status['bidid']}, {"_id": 0})) return jsonify({ "status": 200, "message": "bid status intercepted.", "bidUpdate": new_bid }) else: job_bid_detail = JobBids.find_one( {"bidid": int(request.json['bidid'])}, {"_id": 0}) if job_bid_detail is not None: if job_bid_detail['status'] == 'pending': finalbidamount = float(request.json['reversebid']) # updating bidamount array and reverse bid array reverseBidData = { "reversebidamount": request.json['reversebid'], "reversebiddatetime": datetime.now() } JobBids.update({"bidid": int(request.json['bidid'])}, { "$set": { "status": "reversebid", "bidcomment": request.json['bidcomment'], "reversebid": reverseBidData, "finalbidamount": finalbidamount } }) commission = float(finalbidamount * 0.1) finalbidamount = float(finalbidamount - commission) Ledgers.insert({ "userid": userid, "ledgerid": CommonUtils.generateRandomNo(Ledgers, "ledgerid"), "amount": float(finalbidamount), "datetime": datetime.now(), "type": "escrow", "jobid": int(jobCollection['jobid']), "paymentdetailsJSON": "", "refundinitateddatetime": "", "refunddetailsJSON": "", "refundcompletiondatetime": "", "payingdatetime": "", "remark": "", "active": True }) Ledgers.insert({ "userid": userid, "ledgerid": CommonUtils.generateRandomNo(Ledgers, "ledgerid"), "amount": float(commission), "datetime": datetime.now(), "type": "commission", "jobid": int(jobCollection['jobid']), "paymentdetailsJSON": datetime.now(), "refundinitateddatetime": "", "refunddetailsJSON": "", "refundcompletiondatetime": "", "active": True }) notificationtext = "Jobber reverse bid on the job title " + jobCollection[ 'title'] + " for bidder : " + fullname '''registration_id = find_FCM_id(job_bid_detail['userid']) if (registration_id): data_message = { "body": notificationtext, } result = push_service.notify_single_device(registration_id=registration_id, message_title="Reverse Bid", message_body=notificationtext, data_message=data_message, click_action="FCM_PLUGIN_ACTIVITY")''' Notifications.insert({ "notificationid": CommonUtils.generateRandomNo(Notifications, "notificationid"), "notificationtext": notificationtext, "notificationtype": "Bid", "notificationtouserid": int(job_bid_detail['userid']), "notificationfromuserid": userid, "jobid": jobCollection['jobid'], "bidid": int(request.json['bidid']), "commentid": -1, "createddatetime": datetime.now(), "updatedatetime": datetime.now(), "isread": False }) ''' if bidderEmail is not None: subject = "Reverse Bid on Job." msg = Message(subject, sender=("SAVEonJOBS", "*****@*****.**"), recipients=[bidderEmail]) msg.html = render_template('/emailTemplates/reverse-bid.html', name=bidderfullname, title=jobCollection['title'], jobber=jobberfullname, amount=int(request.form['payment'])) mail.send(msg) emailtracks.insert({"emailtrackid": generateRandomNo(emailtracks, "emailtrackid"), "userid": finalBid['userid'], "email": bidderEmail, "subject": subject, "emailtext": msg.html, "createdatetime": datetime.now(), "updatedatetime": datetime.now()}) else: print "No email of bidder." ''' update_bid = list( JobBids.find({"bidid": int(request.json['bidid'])}, {"_id": 0})) return jsonify({ "status": 200, "message": "Bid Successfully set.", "response": update_bid, "error": False }) else: update_bid = list( JobBids.find({"bidid": int(request.json['bidid'])}, {"_id": 0})) return jsonify({ "status": 200, "message": "bid update", "Response": update_bid, "error": False }) else: return jsonify({ "status": 200, "message": "Bid not found.", "response": [], "error": True }) else: return jsonify({ "status": 402, "message": "Job Not Found.", "response": [], "error": True })
def job_comment_create(): # Check authentications keys if request.json.has_key('userid') == False or request.json.has_key( 'token') == False: return jsonify({ "status": 401, "message": "Authentication keys are missing." }) userid = int(request.json['userid']) token = request.json['token'] # Authenticate credentials if authentication(userid, token) == False: return jsonify({"status": 400, "message": "Authentication Failed."}) jobData = Jobs.find_one({"jobid": int(request.json['jobid'])}, {"_id": 0}) if jobData is not None: userCollection = User.find_one({"userid": userid}, {"_id": 0}) if userCollection is not None: fullname = userCollection['firstname'] + " " + userCollection[ 'lastname'] if userCollection['picurl'] != "": picurl = URL + imagePath + userCollection['picurl'] else: picurl = URL + imagePath + "user-no-image.jpg" else: fullname = "" commentid = CommonUtils.generateRandomNo(JobComments, "commentid") JobComments.insert({ "commentid": commentid, "jobid": int(request.json['jobid']), "userid": userid, "comment": request.json['comment'], "reportedJSON": [], "createdatetime": datetime.now(), "updatedatetime": datetime.now(), "active": True, "picurl": picurl }) commentData = list( JobComments.find({"jobid": int(request.json['jobid'])}, { "_id": 0, "userid": 1 })) if len(commentData) > 0: userArray = [] for commentCollection in commentData: if commentCollection['userid'] != jobData[ 'creatinguserid'] and commentCollection[ 'userid'] != userid: userArray.append(commentCollection['userid']) userArrayList = list(set(userArray)) if jobData['creatinguserid'] != userid: notificationtext = fullname + " commented on your job - title " + jobData[ 'title'] registration_id = find_FCM_id(jobData['creatinguserid']) if (registration_id): data_message = { "body": notificationtext, } result = push_service.notify_single_device( registration_id=registration_id, message_title="New comment", message_body=notificationtext, data_message=data_message, click_action="FCM_PLUGIN_ACTIVITY") Notifications.insert({ "notificationid": CommonUtils.generateRandomNo(Notifications, "notificationid"), "notificationtext": notificationtext, "notificationtype": "Comment", "notificationtouserid": int(jobData['creatinguserid']), "notificationfromuserid": userid, "jobid": jobData['jobid'], "bidid": -1, "commentid": commentid, "createddatetime": datetime.now(), "updatedatetime": datetime.now(), "isread": False }) else: print("job created userid and userid is same.") for userArrayListData in userArrayList: notificationtext = fullname + " commented on your job - title " + jobData[ 'title'] registration_id = find_FCM_id(userArrayListData) if (registration_id): data_message = { "body": notificationtext, } result = push_service.notify_single_device( registration_id=registration_id, message_title="New Comment", message_body=notificationtext, data_message=data_message, click_action="FCM_PLUGIN_ACTIVITY") Notifications.insert({ "notificationid": CommonUtils.generateRandomNo(Notifications, "notificationid"), "notificationtext": notificationtext, "notificationtype": "Comment", "notificationtouserid": int(userArrayListData), "notificationfromuserid": userid, "jobid": jobData['jobid'], "bidid": -1, "commentid": commentid, "createddatetime": datetime.now(), "updatedatetime": datetime.now(), "isread": False }) else: print("No comment data.") print(commentid) getNewJobComment = list( JobComments.find({"commentid": commentid}, {"_id": 0})) print(getNewJobComment) return jsonify({ "status": 200, "message": "Comments created.", "getNewJobComment": getNewJobComment }) else: return jsonify({ "status": 200, "message": "No Job Found.", "getNewJobComment": [] })
def job_paypal_payment(): try : if request.json.has_key('userid') == False or request.json.has_key('token') == False: return jsonify({ "status" :401 ,"message" :"Authentication keys are missing." }) userid = int(request.json['userid']) token = request.json['token'] # Authenticate credentials if authentication(userid ,token) == False: return jsonify({"status" :400 ,"message" :"Authentication Failed."}) pay_id = request.json['payid'] print (pay_id) payment = Payment.find(pay_id) print (payment) transactions = [] transaction_amount = {} credit_card = {} sales_id = 0 soj_transaction_id = 0 transactionstatus = "" for transaction_details in payment.transactions: transaction_amount = {"currency" :transaction_details.amount.currency ,"total" :transaction_details.amount.total} sales_link = transaction_details['related_resources'][0]['sale']['links'][0]['href'] sales_list = sales_link.split('sale')[1] sales_id = sales_list.split('/')[1] soj_transaction_id = int(transaction_details.custom) transactionstatus = transaction_details.state transactions.append(transaction_amount) payment_details = {"payment" :payment.id ,"sales_id" :sales_id ,"paymenttype" :payment.payer.payment_method ,"state" :payment.state ,"transaction_details" :transactions} if (payment.state == "approved"): print (soj_transaction_id) TransactionTrack.update({ "transactionid" : soj_transaction_id} ,{"$set" :{ "transactionstatus" : transactionstatus, "transactionresponse" : payment_details, "responsedatetime" : datetime.now()}}) transactions_details_from_database = TransactionTrack.find_one({"transactionid" :soj_transaction_id} ,{"_id" :0}) print (transactions_details_from_database) bidid = transactions_details_from_database['jobbid'] jobid = transactions_details_from_database['jobid'] finalBid = JobBids.find_one({"bidid" : int(bidid)} ,{"_id" :0}) completionremarks = "" completionstatus = "" bidcanceldatetime = "" bidcancellationreason = "" bidselected = False if finalBid is not None: jobCollection = Jobs.find_one({"jobid" :finalBid['jobid']} ,{"_id" :0}) if jobCollection is not None: person_selected = jobCollection['personsselected'] if person_selected is None : person_selected = 0 else: person_selected = int(person_selected) userJobberCollection = User.find_one({"userid" :jobCollection['creatinguserid']} ,{"_id" :0}) if userJobberCollection is not None: jobberfullname = userJobberCollection['firstname' ] +" " +userJobberCollection['lastname'] jobberEmail = userJobberCollection['email'] jobberMobile = userJobberCollection['mobile'] else: jobberfullname = "" jobberEmail = None jobberMobile = None userbidderCollection = User.find_one({"userid" :finalBid['userid']} ,{"_id" :0}) if userbidderCollection is not None: bidderfullname = userbidderCollection['firstname' ] +" " +userbidderCollection['lastname'] bidderEmail = userbidderCollection['email'] bidderMobile = userbidderCollection['mobile'] else: bidderfullname = "" bidderEmail = None bidderMobile = None else: print ("No jobs") if request.json['status'] == "selectedbyjobber" : if finalBid['status'] == "pending": print (transaction_amount) JobBids.update({"bidid" :int(bidid)} ,{ "$set" : { "selected" : True, "finalbidamount" : int(float(transaction_amount['total'])), "bidcanceldatetime" : bidcanceldatetime, "bidcancellationreason" : bidcancellationreason, "status" : "selectedbyjobber", "completionstatus" : "pending", "completionremarks" : completionremarks }}) if (jobCollection['personsrequired'] > person_selected ): if (jobCollection['personsrequired'] == person_selected +1 ): Jobs.update({"jobid" :int(jobid)} ,{"$set" :{ "personsselected" : int(person_selected +1), "jobstatus" : "allotted" }}) else: Jobs.update({"jobid" :int(jobid)} ,{"$set" :{ "personsselected" : int(person_selected +1) }}) Totalbidamount = float(finalBid['bidamount']) commission = float(Totalbidamount * 0.1) finalbidamount = float(Totalbidamount - commission) Ledgers.insert({"userid" : userid, "ledgerid" : CommonUtils.generateRandomNo(Ledgers ,"ledgerid"), "amount" : float(Totalbidamount ) *(-1), "datetime" : datetime.now(), "type" : "ESCROW", "jobid" : int(jobid), "jobbidid" : int(bidid), "paymentdetailsJSON" : payment_details, "refunddetailsJSON" : "", "refundcompletiondatetime" : "", "payingdatetime": "", "remark" : "", "active" : True}) Ledgers.insert({"userid" : userid, "ledgerid" : CommonUtils.generateRandomNo(Ledgers ,"ledgerid"), "amount" : float(commission), "datetime" : datetime.now(), "type" : "COMMISSION", "jobid" : int(jobid), "jobbidid" : int(bidid), "paymentdetailsJSON" : "", "refunddetailsJSON" : "", "refundcompletiondatetime" : "", "payingdatetime": "", "remark" : "", "active" : True}) Ledgers.insert({"userid" : finalBid['userid'], "ledgerid" : CommonUtils.generateRandomNo(Ledgers ,"ledgerid"), "amount" : float(finalbidamount), "datetime" : datetime.now(), "type" : "PAID", "jobid" : int(jobid), "jobbidid" : int(bidid), "paymentdetailsJSON" : "", "refunddetailsJSON" : "", "refundcompletiondatetime" : "", "payingdatetime": "", "remark" : "", "active" : True}) notificationtext = "Your Bid on job title ' " +jobCollection['title' ] +"' is accepted by Jobber : " +jobberfullname registration_id = find_FCM_id(finalBid['userid']) if(registration_id): data_message = { "body" : notificationtext, } result = push_service.notify_single_device(registration_id=registration_id, message_title="Bid Accepted" ,message_body=notificationtext, data_message=data_message, click_action="FCM_PLUGIN_ACTIVITY") Notifications.insert({"notificationid" :CommonUtils.generateRandomNo(Notifications ,"notificationid"), "notificationtext" :notificationtext, "notificationtype" :"Bid", "notificationtouserid" :int(finalBid['userid']), "notificationfromuserid" :userid, "jobid" : int(jobid), "jobbidid" : int(bidid), "commentid" :-1, "createddatetime" :datetime.now(), "updatedatetime" :datetime.now(), "isread" :False }) if bidderEmail is not None: subject = "Bid Accepted." msg = Message(subject, sender=("SAVEonJOBS", "*****@*****.**"), recipients=[bidderEmail]) msg.html = render_template('/emailTemplates/Accept-bid.html', name= bidderfullname, title= jobCollection['title'] ,jobber=jobberfullname, amount=int(float(transaction_amount['total']))) Mail.send(msg) EmailTracks.insert({"emailtrackid": CommonUtils.generateRandomNo(EmailTracks, "emailtrackid"), "userid": finalBid['userid'], "email": bidderEmail, "subject": subject, "emailtext": msg.html, "createdatetime": datetime.now(), "updatedatetime": datetime.now()}) else: print "No email of bidder." elif request.json['status'] == "reversebid": job_bid_detail = JobBids.find_one({"bidid": int(bidid)}, {"_id": 0}) if job_bid_detail is not None: if job_bid_detail['status'] == 'pending': Totalbidamount = int(float(transaction_amount['total'])) # updating bidamount array and reverse bid array reverseBidData = {"reversebidamount": int(float(transaction_amount['total'])), "reversebiddatetime": datetime.now()} JobBids.update({"bidid": int(bidid)}, {"$set": {"status": "reversebid", "reversebid": reverseBidData, "finalbidamount": Totalbidamount }}) commission = float(Totalbidamount * 0.1) finalbidamount = float(Totalbidamount - commission) Ledgers.insert({"userid": userid, "ledgerid": CommonUtils.generateRandomNo(Ledgers, "ledgerid"), "amount": float(Totalbidamount) * (-1), "datetime": datetime.now(), "type": "ESCROW", "jobid": int(jobid), "jobbidid": int(bidid), "paymentdetailsJSON": payment_details, "refunddetailsJSON": "", "refundcompletiondatetime": "", "payingdatetime": "", "remark": "", "active": True}) Ledgers.insert({"userid": userid, "ledgerid": CommonUtils.generateRandomNo(Ledgers, "ledgerid"), "amount": float(commission), "datetime": datetime.now(), "type": "COMMISSION", "jobid": int(jobid), "jobbidid": int(bidid), "paymentdetailsJSON": "", "refunddetailsJSON": "", "refundcompletiondatetime": "", "payingdatetime": "", "remark": "", "active": True}) Ledgers.insert({"userid": finalBid['userid'], "ledgerid": CommonUtils.generateRandomNo(Ledgers, "ledgerid"), "amount": float(finalbidamount), "datetime": datetime.now(), "type": "PAID", "jobid": int(jobid), "jobbidid": int(bidid), "paymentdetailsJSON": "", "refunddetailsJSON": "", "refundcompletiondatetime": "", "payingdatetime": "", "remark": "", "active": True}) notificationtext = "You reverse bid on the job title " + jobCollection[ 'title'] + " for bidder : " + str(bidderfullname) registration_id = find_FCM_id(job_bid_detail['userid']) if (registration_id): data_message = { "body": notificationtext, } result = push_service.notify_single_device(registration_id=registration_id, message_title="Reverse Bid", message_body=notificationtext, data_message=data_message, click_action="FCM_PLUGIN_ACTIVITY") Notifications.insert({"notificationid": CommonUtils.generateRandomNo(Notifications, "notificationid"), "notificationtext": notificationtext, "notificationtype": "Bid", "notificationtouserid": int(job_bid_detail['userid']), "notificationfromuserid": userid, "jobid": int(jobid), "jobbidid": int(bidid), "commentid": -1, "createddatetime": datetime.now(), "updatedatetime": datetime.now(), "isread": False }) if bidderEmail is not None: subject = "Reverse Bid on Job." msg = Message(subject, sender=("SAVEonJOBS", "*****@*****.**"), recipients=[bidderEmail]) msg.html = render_template('/emailTemplates/reverse-bid.html', name=bidderfullname, title=jobCollection['title'], jobber=jobberfullname, amount=int(float(transaction_amount['total']))) Mail.send(msg) EmailTracks.insert({"emailtrackid": CommonUtils.generateRandomNo(EmailTracks, "emailtrackid"), "userid": finalBid['userid'], "email": bidderEmail, "subject": subject, "emailtext": msg.html, "createdatetime": datetime.now(), "updatedatetime": datetime.now()}) else: print("No email of bidder.") return jsonify({"status": 200, "message": "Payment Successful"}) except ResourceNotFound as e: # It will through ResourceNotFound exception if the payment not found print("Payment Not Found") print(e.message) return jsonify({"status": 500, "message": e.message})