コード例 #1
0
    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}
コード例 #2
0
	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()
コード例 #3
0
ファイル: payments_seeder.py プロジェクト: devsummit/backend
    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()
コード例 #4
0
    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}