コード例 #1
0
	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
コード例 #2
0
	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'])
コード例 #3
0
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()
コード例 #4
0
 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()
コード例 #5
0
 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()
コード例 #6
0
 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()
コード例 #7
0
ファイル: user_service.py プロジェクト: andy-shi88/Devsummit
	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()
コード例 #8
0
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)
コード例 #9
0
	def __init__(self, perpage):
		self.perpage = perpage
		self.fcmservice = FCMService()
コード例 #10
0
    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()