def referer_verification(self, user): # check if user register with referal result = {} if user.referer: referer_query = db.session.query(User).filter_by( referal=user.referer) referer = referer_query.first() if referer: message = 'Got referer point' referer_valid = True if referer.referal_count >= 10: referer_valid = False result['message'] = 'The username you refered to has exceeded its limit, but your email is safely confirmed\nYou can try another username using the apps.' if referer_valid: referer_query.update({ 'referal_count': referer.referal_count + 1 }) db.session.commit() # checking referer add full day ticket if reach 10 counts if referer.referal_count > 0: referer_detail = db.session.query(User).filter_by(referal=user.referer).first().as_dict() payload = {} payload['user_id'] = referer_detail['id'] payload['ticket_id'] = 1 receiver_id = referer_detail['id'] sender_id = 1 if referer_valid: user_refcount = 1 user_havref = 1 else: user_refcount = 0 user_havref = 0 current_user = db.session.query(User).filter_by(id=user.id) current_user.update({ 'referal_count' : user_refcount, 'have_refered' : user_havref }) db.session.commit() # only send notification if count less than 10 if referer.referal_count < 10: type = "Referral Notification" message = "%s has registered referring you, your total referals count is: %d" % (user.username, referer.referal_count) FCMService().send_single_notification(type, message, receiver_id, sender_id) # else count==10, send notif and create new ticket elif referer.referal_count == 10: type = "Free Ticket Notification" message = "Congratulation! You have been referred 10 times! You've can get one free ticket, please click on claim button to claim your reward" FCMService().send_single_notification(type, message, receiver_id, sender_id) return result else: return result
def create(request, user): order_details = request.json['order_details'] if 'order_details' in request.json else None referal_code = request.json['referal_code'] if 'referal_code' in request.json else None payment_type = request.json['payment_type'] if 'payment_type' in request.json else None hacker_team_name = request.json['hacker_team_name'] if 'hacker_team_name' in request.json else None if order_details is None or len(order_details) < 1: return BaseController.send_error_api({'payload_invalid': True}, 'payload is invalid') payloads = { 'user_id': user['id'], 'order_details': order_details, 'referal_code': referal_code, 'payment_type': payment_type, 'hacker_team_name': hacker_team_name } result = orderservice.create(payloads, user) if not result['error']: send_notification = FCMService().send_single_notification('Order Status', 'Your order have been succesfully placed.', user['id'], ROLE['admin']) if SLACK['notification']: slackorder = SlackOrder(user, result, payment_type) slackservice.send_message(slackorder.build()) return BaseController.send_response_api(result['data'], 'order succesfully created', result['included']) else: return BaseController.send_error_api(None, result['message'])
class CommentService(BaseService): def __init__(self, perpage): self.perpage = perpage self.fcmservice = FCMService() def get_by_post_id(self, request, feed_id, page): self.total_items = Comment.query.filter_by(feed_id=feed_id).count() self.page = page self.base_url = request.base_url paginate = super().paginate(db.session.query(Comment).filter_by(feed_id=feed_id).order_by(Comment.created_at.desc())) paginate = super().include_user() response = ResponseBuilder() return response.set_data(paginate['data']).set_links(paginate['links']).build() def create(self, payloads): response = ResponseBuilder() comment = Comment() comment.content = payloads['content'] comment.feed_id = payloads['feed_id'] comment.user_id = payloads['user_id'] db.session.add(comment) try: db.session.commit() user = comment.user.include_photos().as_dict() del user['fcmtoken'] data = comment.as_dict() data['user'] = user fcm_result = self.fcmservice.send_single_notification('Comment Notification', user['username'] + ' commented on your post', comment.feed.user_id, 1, comment.feed_id) return response.set_data(data).build() except SQLAlchemyError as e: data = e.orig.args return response.set_data(data).set_error(True).build()
def create(self, payload): response = ResponseBuilder() orderverification_query = db.session.query( OrderVerification).filter_by(order_id=payload['order_id']) orderverification = orderverification_query.first() payment_proof = self.save_file( payload['payment_proof'] ) if payload['payment_proof'] is not None else None if orderverification: if orderverification.payment_proof is not None: Helper().silent_remove(current_app.config['STATIC_DEST'] + orderverification.payment_proof) orderverification_query.update({ 'payment_proof': payment_proof, 'updated_at': datetime.datetime.now() }) order = orderverification.order else: orderverification = OrderVerification() order_query = db.session.query(Order).filter_by( id=payload['order_id']) payment_query = db.session.query(Payment).filter_by( order_id=payload['order_id']) order = order_query.first() orderverification.user_id = order.user_id orderverification.order_id = payload['order_id'] orderverification.payment_proof = payment_proof order_query.update({ 'status': 'in progress', 'updated_at': datetime.datetime.now() }) payment_query.update({ 'transaction_status': 'in progress', 'updated_at': datetime.datetime.now() }) db.session.add(orderverification) try: db.session.commit() result = orderverification.as_dict() result['payment_proof'] = Helper().url_helper( result['payment_proof'], current_app.config['GET_DEST']) if orderverification: send_notification = FCMService().send_single_notification( 'Payment Status', 'Payment proof have been uploaded, your payment is being processed', order.user_id, ROLE['admin']) return response.set_data(result).set_message( 'Data created succesfully').build() except SQLAlchemyError as e: data = e.orig.args return response.set_data(data).set_error(True).build()
def deny(self, payloads): response = ResponseBuilder() hackaton_proposal = db.session.query(HackatonProposal).filter_by( order_id=payloads['order_id']) if hackaton_proposal.first() is None: return response.set_error(True).set_data(None).set_message( 'proposal not found').build() hackaton_proposal.update({ 'updated_at': datetime.datetime.now(), 'status': 'denied' }) try: db.session.commit() hackatonprop = hackaton_proposal.first() receiver = hackatonprop.order.user_id send_notification = FCMService().send_single_notification( 'Hackaton Status', 'Your proposal to join our hackaton has just been rejected, as this may be dissapointing to you, you can still purchase our ticket as attendee. See you there.', receiver, ROLE['admin']) return response.set_data(None).set_message( 'proposal succesfully denied').build() except SQLAlchemyError as e: data = e.orig.args return response.set_data(data).set_error(True).build()
def confirm(self, payload, user_id, request): response = ResponseBuilder() emailservice = EmailService() transaction_exist = db.session.query(Payment).filter_by( transaction_id=payload['transaction_id']).first() if transaction_exist: return response.set_error(True).set_message( 'this transaction have been used before').set_data( None).build() paypal_details = self.get_paypal_detail(payload['transaction_id']) if paypal_details == False: return response.set_error(True).set_message( 'Transaction id not found').set_data(None).build() paypal_details_amount = int( paypal_details['transactions'][0]['amount']['total'].split('.')[0]) order_ = db.session.query(Order).filter_by( id=payload['order_id']).first() if order_ is None: return response.set_error(True).set_data(None).set_message( 'Order not found').build() user = order_.user order_details = db.session.query(OrderDetails).filter_by( order_id=payload['order_id']).all() check_total = 0 discount = 0 for order in order_details: check_total += order.price * order.count if order_.referal_id is not None: discount = check_total * order_.referal.discount_amount if check_total - discount <= paypal_details_amount: payment_exist = db.session.query(Payment).filter_by( transaction_id=payload['transaction_id']).first() if payment_exist: return response.set_data(None).set_message( 'Payment had been completed!').set_error(True).build() payment = Payment() payment.order_id = payload['order_id'] payment.transaction_id = payload['transaction_id'] payment.gross_amount = paypal_details_amount payment.payment_type = 'paypal' payment.transaction_status = "captured" try: db.session.add(payment) db.session.commit() except SQLAlchemyError as e: data = e.orig.args return response.set_data(None).set_message(data).set_error( True).build() items = db.session.query(OrderDetails).filter_by( order_id=payment.order_id).first() url_invoice = request.host + '/invoices/' + order_.id if items.ticket.type == TICKET_TYPES['exhibitor']: payload = {} payload['user_id'] = user.id payload['ticket_id'] = items.ticket_id UserTicketService().create(payload) self.create_booth(user) user_query = db.session.query(User).filter_by(id=user.id) user_query.update({'role_id': ROLE['booth']}) redeem_payload = {} redeem_payload['ticket_id'] = items.ticket_id redeem_payload['codeable_id'] = user.id RedeemCodeService().purchase_user_redeems(redeem_payload) get_codes = db.session.query(RedeemCode).filter_by( codeable_type='user', codeable_id=user.id).all() code = [] for get_code in get_codes: code.append("<li>%s</li>" % (get_code.code)) li = ''.join(code) template = "<h3>You have complete the payment with order_id = %s</h3><h4>Here are the redeem codes for claiming full 3 days ticket at devsummit event as described in the package information : </h4>%s<h3>Use the above code to claim your ticket</h3><h3>Thank you for your purchase</h3>" % ( order_.id, li) template += "<h4>And here is your Invoice:</h4>" template += '<a href="' + url_invoice + '">Klik here to show the invoice</a>' email = emailservice.set_recipient(user.email).set_subject( 'Congratulations !! you received exhibitor code' ).set_sender('*****@*****.**').set_html( template).build() mail.send(email) if items.ticket.type == TICKET_TYPES['hackaton']: payload = {} payload['user_id'] = user.id payload['ticket_id'] = items.ticket_id UserTicketService.create(payload) self.create_hackaton_team(user, items.ticket_id) user_query = db.session.query(User).filter_by(id=user.id) user_query.update({'role_id': ROLE['hackaton']}) hacker_team = db.session.query(HackerTeam).order_by( HackerTeam.created_at.desc()).first() redeem_payload = {} redeem_payload['codeable_type'] = TICKET_TYPES['hackaton'] redeem_payload['codeable_id'] = hacker_team.id, redeem_payload['count'] = items.ticket.quota RedeemCodeService().create(redeem_payload) get_codes = db.session.query(RedeemCode).filter_by( codeable_type='hackaton', codeable_id=hacker_team.id).all() code = [] for get_code in get_codes: code.append("<li>%s</li>" % (get_code.code)) li = ''.join(code) template = "<h3>You have complete the payment with order_id = %s</h3><h4>Here your redeem codes : </h4>%s<h3>Share the above code to your teammate, and put it into redeem code menu to let them join your team and claim their ticket</h3><h3>Thank you for your purchase</h3>" % ( order_.id, li) template += "<h4>And here is your Invoice:</h4>" template += '<a href="' + url_invoice + '">Klik here to show the invoice</a>' email = emailservice.set_recipient(user.email).set_subject( 'Congratulations !! you received hackaton code' ).set_sender('*****@*****.**').set_html( template).build() mail.send(email) else: result = None for order in order_details: for i in range(0, order.count): payload = {} payload['user_id'] = user.id payload['ticket_id'] = order.ticket_id result = UserTicketService().create(payload) if (result and (not result['error'])): template = "<h3>Congratulation! you have the previlege to attend Indonesia Developer Summit</h3>" template += "<h4>Here is your Invoice:</h4>" template += '<a href="' + url_invoice + '">Klik here to show the invoice</a>' template += "<h5>Thank you.</h5>" email = emailservice.set_recipient(user.email).set_subject( 'Devsummit Ticket Invoice').set_sender( '*****@*****.**').set_html(template).build() mail.send(email) confirmed_order = db.session.query(Order).filter_by( id=payment.order_id) confirmed_order.update({'status': 'paid'}) db.session.commit() send_notification = FCMService().send_single_notification( 'Payment Status', 'Your payment has been confirmed', user.id, ROLE['admin']) return response.set_data(None).set_message( 'Purchase Completed').build() else: return response.set_error(True).set_message( 'Paypal amount did not match').build()
def register(self, payloads): user_refcount = 0 user_havref = 0 response = ResponseBuilder() # payloads validation if payloads is None: return response.set_error(True).set_message('Payload not valid').build() # check if social or email if payloads['social_id'] is not None: check_user = db.session.query(User).filter_by( social_id=payloads['social_id']).first() else: check_user = db.session.query(User).filter_by( email=payloads['email']).first() # check if user already exist if(check_user is not None): return response.set_data(None).set_message('User already registered').set_error(True).build() # check referal limit check_referer = None if 'referer' in payloads and payloads['referer']: check_referer = db.session.query(User).filter_by( referal=payloads['referer']) #if the check_referer return empty list, must be first time referred referer = check_referer.first() if referer: check_referer.update({ 'referal_count': referer.referal_count + 1 }) db.session.commit() # checking referer add full day ticket if reach 10 counts if referer.referal_count > 0: referer_detail = db.session.query(User).filter_by(referal=payloads['referer']).first().as_dict() payload = {} payload['user_id'] = referer_detail['id'] payload['ticket_id'] = 1 receiver_id = referer_detail['id'] sender_id = 1 user_refcount = 1 user_havref = 1 # only send notification if count less than 10 if referer.referal_count < 10: type = "Referral Notification" message = "%s has registered referring you, your total referals count is: %d" % (payloads['username'], referer.referal_count) FCMService().send_single_notification(type, message, receiver_id, sender_id) # else count==10, send notif and create new ticket else: type = "Free Ticket Notification" message = "Congratulation! You have been referred 10 times! You've got one free ticket, please check it on 'my ticket' menu" FCMService().send_single_notification(type, message, receiver_id, sender_id) UserTicketService().create(payload) if referer is not None and referer.referal_count >= 10: return response.set_data(None).set_message('Referred username already exceed the limit').set_error(True).build() if payloads['email'] is not None: try: self.model_user = User() self.model_user.first_name = payloads['first_name'] self.model_user.last_name = payloads['last_name'] self.model_user.email = payloads['email'] self.model_user.username = payloads['username'] self.model_user.role_id = payloads['role'] self.model_user.social_id = payloads['social_id'] self.model_user.referal = self.generate_referal_code(3) self.model_user.referal_count = user_refcount self.model_user.have_refered = user_havref if payloads['provider'] == 'email': self.model_user.hash_password(payloads['password']) db.session.add(self.model_user) db.session.commit() data = self.model_user return data except SQLAlchemyError as e: data = e.orig.args return response.set_error(True).set_message('SQL error').set_data(data).build()
paymentservice = PaymentService() referalservice = ReferalService() partnerservice = PartnerService(10) entrycashlogservice = EntryCashLogService(10) sponsorservice = SponsorService(10) feedservice = FeedService(10) commentservice = CommentService(10) notificationservice = NotificationService(10) baseservice = BaseService() rundownlistservice = RundownListService() redeemcodeservice = RedeemCodeService() grantroleservice = GrantroleService() sourceservice = SourceService() boothgalleryservice = BoothGalleryService() speakercandidateservice = SpeakerCandidateService() fcmservice = FCMService() overviewservice = OverviewService() feedreportservice = FeedReportService(10) prizelistservice = PrizeListService() sponsortemplateservice = SponsorTemplateService() invoiceservice = InvoiceService() packagemanagementservice = PackageManagementService() orderverificationservice = OrderVerificationService() hackatonservice = HackatonService() userfeedbackservice = UserFeedbackService() slackservice = SlackService() eventbriteservice = EventBriteService() hackatonproposalservice = HackatonProposalService() questionerservice = QuestionerService() boothcheckinservice = BoothCheckinService() checkinservice = CheckinService(10)
def __init__(self, perpage): self.perpage = perpage self.fcmservice = FCMService()
def verify(self, id, request, hacker_team_name=None): response = ResponseBuilder() emailservice = EmailService() orderverification_query = db.session.query( OrderVerification).filter_by(id=id) orderverification = orderverification_query.first() order = orderverification.order if orderverification.is_used is not 1: user_query = db.session.query(User).filter_by( id=orderverification.user_id) user = user_query.first() items = db.session.query(OrderDetails).filter_by( order_id=orderverification.order_id).all() url_invoice = request.url_root + '/invoices/' + orderverification.order_id if items[0].ticket.type == TICKET_TYPES['exhibitor']: payload = {} payload['user_id'] = user.id payload['ticket_id'] = items[0].ticket_id UserTicketService().create(payload) self.create_booth(user, items[0].ticket.ticket_type) user_query.update({ 'role_id': ROLE['booth'], 'updated_at': datetime.datetime.now() }) redeem_payload = {} redeem_payload['ticket_id'] = items[0].ticket_id redeem_payload['codeable_id'] = user.id RedeemCodeService().purchase_user_redeems(redeem_payload) get_codes = db.session.query(RedeemCode).filter_by( codeable_type='user', codeable_id=user.id).all() mail_template = EmailPurchase() template = mail_template.set_invoice_path( order.id).set_redeem_code(get_codes).build() email = emailservice.set_recipient(user.email).set_subject( 'Congratulations !! you received exhibitor code' ).set_sender('*****@*****.**').set_html( template).build() mail.send(email) elif items[0].ticket.type == TICKET_TYPES['hackaton']: payload = {} payload['user_id'] = user.id payload['ticket_id'] = items[0].ticket_id UserTicketService().create(payload) user_query.update({ 'role_id': ROLE['hackaton'], 'updated_at': datetime.datetime.now() }) send_notification = FCMService().send_single_notification( 'Hackaton Status', 'Congratulations you are accepted to join our hackaton. Further information can be seen at your registered email.', user.id, ROLE['admin']) mail_template = EmailPurchase() template = mail_template.set_invoice_path(order.id).build() email = emailservice.set_recipient(user.email).set_subject( 'Congratulations!! you are accepted to join Indonesia Developer Summit 2017 hackaton' ).set_sender('*****@*****.**').set_html( template).build() mail.send(email) else: result = None for item in items: for i in range(0, item.count): payload = {} payload['user_id'] = user.id payload['ticket_id'] = item.ticket_id result = UserTicketService().create(payload) if (result and (not result['error'])): mail_template = EmailPurchase() template = mail_template.set_invoice_path(order.id).build() email = emailservice.set_recipient(user.email).set_subject( 'Devsummit Ticket Invoice').set_sender( '*****@*****.**').set_html(template).build() mail.send(email) orderverification_query.update({ 'is_used': 1, 'updated_at': datetime.datetime.now() }) payment_query = db.session.query(Payment).filter_by( order_id=orderverification.order_id) payment_query.update({ 'updated_at': datetime.datetime.now(), 'transaction_status': 'captured' }) completed_order = db.session.query(Order).filter_by( id=orderverification.order_id) completed_order.update({ 'updated_at': datetime.datetime.now(), 'status': 'paid' }) db.session.commit() send_notification = FCMService().send_single_notification( 'Payment Status', 'Your payment has been verified', user.id, ROLE['admin']) return response.set_data(None).set_message( 'ticket purchased').build() else: return response.set_data(None).set_error(True).set_message( 'This payment has already verified').build()