def create(self, payloads): self.model_order = Order() order_details = payloads['order_details'] self.model_order.user_id = payloads['user_id'] self.model_order.status = 'pending' referal = db.session.query(Referal).filter_by( referal_code=payloads['referal_code']) if (referal.first() is not None): self.model_order.referal_id = referal.first().as_dict()['id'] db.session.add(self.model_order) try: db.session.commit() data = self.model_order.as_dict() # insert the order details order_id = data['id'] order_items = [] for item in order_details: order_item = OrderDetails() order_item.ticket_id = item['ticket_id'] order_item.count = item['count'] order_item.order_id = order_id # get ticket data ticket = self.get_ticket(item['ticket_id']) if payloads['payment_type'] == 'paypal': order_item.price = ticket.usd_price else: order_item.price = ticket.price db.session.add(order_item) db.session.commit() order_items.append(order_item.as_dict()) if payloads['payment_type'] == 'offline': gross_amount = (item['count'] * ticket.price) payment = Payment() payment.order_id = order_id payment.payment_type = 'offline' payment.gross_amount = gross_amount payment.transaction_time = datetime.datetime.now() payment.transaction_status = 'pending' db.session.add(payment) db.session.commit() # if payloads['payment_type'] == 'paypal': # self.paypalorder(payloads) # save all items return {'error': False, 'data': data, 'included': order_items} except SQLAlchemyError as e: data = e.orig.args return {'error': True, 'data': data}
def save_payload(self, data, payloads): new_payment = Payment() new_payment.transaction_id = data['transaction_id'] new_payment.order_id = data['order_id'] new_payment.gross_amount = data['gross_amount'] new_payment.payment_type = data['payment_type'] new_payment.transaction_time = data['transaction_time'] new_payment.transaction_status = data['transaction_status'] new_payment.bank = data['bank'] new_payment.fraud_status = data['fraud_status'] if 'fraud_status' in data else None new_payment.masked_card = payloads['masked_card'] if 'masked_card' in payloads else None new_payment.saved_token_id = payloads['saved_token_id'] if 'saved_token_id' in payloads else None new_payment.va_number = data['va_number'] if 'va_number' in data else None db.session.add(new_payment) db.session.commit()
def run(): """ Create 4 Payments seeds """ transaction_statuses = ['capture', 'authorize', 'deny'] statuses = ['accept', 'challenge', 'deny'] payment_types = ['bank_transfer', 'credit_card'] banks = ['bri', 'bni', 'permata', 'maybank', 'mandiri', 'bca', 'cimb'] range_start = 10**(7 - 1) range_end = (10**7) - 1 orders = BaseModel.as_list(db.session.query(Order).all()) for i in range(0, 4): order_id = choice(orders)['id'] saved_token_id = randint(range_start, range_end) transaction_id = randint(range_start, range_end) gross_amount = randint(range_start, range_end) transaction_time = datetime.datetime.now() transaction_status = transaction_statuses[randint(0, 2)] masked_card = randint(range_start, range_end) payment_type = payment_types[randint(0, 1)] bank = banks[randint(0, 6)] fraud_status = statuses[randint(0, 2)] new_payment = Payment() new_payment.order_id = order_id new_payment.saved_token_id = saved_token_id new_payment.transaction_id = transaction_id new_payment.gross_amount = gross_amount new_payment.transaction_time = transaction_time new_payment.transaction_status = transaction_status new_payment.masked_card = masked_card new_payment.payment_type = payment_type new_payment.bank = bank new_payment.fraud_status = fraud_status db.session.add(new_payment) db.session.commit()
def create(self, payloads, user): response = ResponseBuilder() if user['role_id'] == ROLE['hackaton']: return response.set_data(None).set_message( 'Hackaton attendee cannot buy ticket').set_error(True).build() order_details = payloads['order_details'] # check if it's hackaton if order_details[0]['ticket_id'] == 10: # check if proposal already submited # disable hackaton now return response.set_data(None).set_message( 'Hackaton registration is over.').set_error(True).build() # if self.hackatonproposalservice.check_hackaton_proposal_exist(user['id']): # return response.set_error(True).set_message('Hackaton cannot be submitted twice, our admin is in the process of verifying it, you will receive notification once it is done').set_data(None).build() self.model_order = Order() self.model_order.user_id = payloads['user_id'] self.model_order.status = 'pending' # Referal code checking referal = db.session.query(Referal).filter_by( referal_code=payloads['referal_code']) if referal.first() is not None: # verify quota and update quota if referal.first().quota > 0: referal.update({'quota': referal.first().quota - 1}) self.model_order.referal_id = referal.first().as_dict()['id'] else: # handle for referal code exceed limit / quota return response.set_error(True).set_data(None).set_message( 'quota for specified code have exceeded the limit').build( ) # place order db.session.add(self.model_order) try: db.session.commit() data = self.model_order.as_dict() # insert the order details order_id = data['id'] order_items = [] for item in order_details: order_item = OrderDetails() order_item.ticket_id = item['ticket_id'] order_item.count = item['count'] order_item.order_id = order_id # get ticket data ticket = self.get_ticket(item['ticket_id']) if payloads['payment_type'] == 'paypal': order_item.price = ticket.usd_price else: order_item.price = ticket.price db.session.add(order_item) db.session.commit() order_item_dict = order_item.as_dict() order_item_dict['ticket'] = order_item.ticket.as_dict() order_items.append(order_item_dict) if payloads['payment_type'] == 'offline': gross_amount = (item['count'] * ticket.price) if referal.first() is not None: # discount on gross amount gross_amount -= gross_amount * referal.first( ).discount_amount payment = Payment() payment.order_id = order_id payment.payment_type = 'offline' payment.gross_amount = gross_amount payment.transaction_time = datetime.datetime.now() payment.transaction_status = 'pending' db.session.add(payment) db.session.commit() # check if ticket is free if order_details[0]['ticket_id'] == 10: # hackaton proposal hackatonproposal = { 'github_link': payloads['hacker_team_name'], 'order_id': order_id } hack_result = self.hackatonproposalservice.create( hackatonproposal) elif gross_amount == 0 or (referal.first() and referal.first().discount_amount == 1): # call verify service ov_service = OrderVerificationService() ov_service.admin_verify(self.model_order.id, request, payloads['hacker_team_name']) # save all items return {'error': False, 'data': data, 'included': order_items} except SQLAlchemyError as e: data = e.orig.args return {'error': True, 'data': data}