コード例 #1
0
	def verify(self, id):
		response = ResponseBuilder()
		orderverification_query = db.session.query(OrderVerification).filter_by(id=id)
		orderverification = orderverification_query.first()
		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()
			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)
				user_query.update({
					'role_id': ROLE['booth']
				})
				redeem_payload = {}
				redeem_payload['ticket_id'] = items[0].ticket_id
				redeem_payload['codeable_id'] = user.id
				RedeemCodeService().purchase_user_redeems(redeem_payload)
			elif items[0].ticket.type == TICKET_TYPES['hackaton']:
				payload = {}
				payload['user_id'] = user.id
				payload['ticket_id'] = items[0].ticket_id
				UserTicketService().create(payload)
				hackerteam_id = self.create_hackaton(user)
				user_query.update({
					'role_id': ROLE['hackaton']
				})
				redeem_payload = {}
				redeem_payload['codeable_type'] = TICKET_TYPES['hackaton']
				redeem_payload['codeable_id'] = hackerteam_id
				redeem_payload['count'] = items[0].ticket.quota
				RedeemCodeService().create(redeem_payload)
			else:
				for item in items:
					for i in range(0, item.count):
						payload = {}
						payload['user_id'] = user.id
						payload['ticket_id'] = item.ticket_id
						UserTicketService().create(payload)
			orderverification_query.update({
				'is_used': 1
			})
			payment_query = db.session.query(Payment).filter_by(order_id=orderverification.order_id)
			payment_query.update({
				'transaction_status': 'capture'
			})
			completed_order = db.session.query(Order).filter_by(id=orderverification.order_id)
			completed_order.update({
				'status': 'paid'
			})
			db.session.commit()
			return response.set_data(None).set_message('ticket purchased').build()
		else:
			return response.set_data(None).set_message('This payment has already verified').build()
コード例 #2
0
 def reward_referal(self, user):
     response = ResponseBuilder()
     if user['referal_count'] < 10:
         return response.set_data(None).set_message(
             'Not sufficient referal count').set_error(True).build()
     if user['referal_count'] > 10:
         return response.set_data(None).set_message(
             'You have taken your reward').set_error(True).build()
     payload = {}
     payload['user_id'] = user['id']
     payload['ticket_id'] = 1
     update_user = db.session.query(User).filter_by(id=user['id'])
     update_user.update({'referal_count': 11})
     db.session.commit()
     UserTicketService().create(payload)
     return response.set_data(None).set_message(
         'You have successfully redeemed your reward').build()
コード例 #3
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()
コード例 #4
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()
コード例 #5
0
ticketservice = TicketService()
stageservice = StageService()
beaconservice = BeaconService()
spotservice = SpotService()
orderservice = OrderService()
orderdetailservice = OrderDetailsService()
eventservice = EventService(10)  # number of item per page
scheduleservice = ScheduleService()
pointtransactionservice = PointsTransactionService()
userphotoservice = UserPhotoService()
speakerservice = SpeakerService()
tickettransferservice = TicketTransferService()
speakerdocumentservice = SpeakerDocumentService()
newsletterservice = NewsletterService()
boothservice = BoothService(10)  # number of item per page
userticketservice = UserTicketService()
attendeeservice = AttendeeService(10)  # number of item per page
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()
コード例 #6
0
	def confirm(self, payload):
		response = ResponseBuilder()
		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
		for order in order_details:
			check_total += order.price * order.count	
		if check_total == 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()
			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)

				# user_role = db.session.query(User).filter_by(id=user.id)
				# user_role.update({
				# 	'updated_at': datetime.datetime.now(),
				# 	'role_id': 3
				# })
				# ticket_quota = order_details.ticket.quota
				# for i 
			else:				
				for order in order_details:
					for i in range(0, order.count):
						payload = {}
						payload['user_id'] = user.id
						payload['ticket_id'] = order.ticket_id
						UserTicketService().create(payload)
			confirmed_order = db.session.query(Order).filter_by(id=payment.order_id)
			confirmed_order.update({
				'status': 'paid'
			})
			db.session.commit()
			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
    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()