def card_payment_performing(payment_json, amount, order, put_order=True): binding_id = payment_json.get('binding_id') client_id = payment_json.get('client_id') return_url = payment_json.get('return_url') if not binding_id or not client_id or not return_url: return False, u'Карта не найдена' legal = Venue.get(order.venue_id).legal.get() try: success, result = alfa_bank.create_simple(legal.alfa_login, legal.alfa_password, amount, order.key.id(), return_url, client_id) except Exception as e: send_error("Alfa error", "Alfa failure", str(e)) success, result = False, u'Не удалось произвести оплату' if not success: return success, result order.payment_id = result if put_order: order.put() success, error = alfa_bank.hold_and_check(legal.alfa_login, legal.alfa_password, order.payment_id, binding_id) if not success: error = u"Не удалось произвести оплату. %s" % error return success, error
def done_order(order, namespace, with_push=True): total_cash_back = 0 point_sum = 0 if config.WALLET_ENABLED: total_cash_back = order.activate_cash_back() if config.GIFT_ENABLED: point_sum = order.activate_gift_points() for share_gift in order.shared_gift_details: share_gift.gift.get().deactivate() for performing in order.promo_code_performings: performing = performing.get() promo_code = performing.promo_code.get() if not promo_code.persist: performing.close() if order.subscription_details: subscription = order.subscription_details.subscription.get() subscription.finalize_payment_if_needed() order.status = READY_ORDER order.email_key_done = None order.email_key_cancel = None order.email_key_postpone = None order.email_key_confirm = None order.actual_delivery_time = datetime.utcnow() client_key = Client.get(order.client_id).key shared_promo = SharedPromo.query( SharedPromo.recipient == client_key, SharedPromo.status == SharedPromo.READY).get() if shared_promo: shared_promo.deactivate(namespace_manager.get_namespace()) if order.has_card_payment: legal = Venue.get(order.venue_id).legal.get() alfa_bank.deposit(legal.alfa_login, legal.alfa_password, order.payment_id, 0) # TODO check success elif order.has_paypal_payment: paypal.capture(order.payment_id, order.total_sum - order.wallet_payment) order.put() if with_push: text = u"Заказ №%s выдан." % order.number if point_sum: text += u" Начислены баллы в размере %s." % point_sum if total_cash_back: text += u" Начислены бонусы на Ваш счет в размере %s." % ( total_cash_back / 100.0) OrderPush(text, order, namespace).send(silent=True) if order.version >= 4: send_review_push(order)
def create(self, performance=None): show = Show.get(self.read('show_key')) if not show: raise Exception("That show doesn't exist.") venue = Venue.get(self.read('venue_key')) if not venue: raise Exception("That venue doesn't exist.") year = int(self.read('year')) month = int(self.read('month')) day = int(self.read('day')) hour = int(self.read('hour')) minute = int(self.read('minute')) Performance(show = show, venue = venue, utc_date_time = datetime.datetime(year, month, day, hour, minute) - venue.city.get_timedelta() ).put() self.get()
def history_dict(self): dct = self.status_dict() if self.delivery_slot_id > 0: delivery_slot = DeliverySlot.get_by_id(self.delivery_slot_id) else: delivery_slot = None gifts = self.grouped_item_dict(self.gift_details, gift=True) gifts.extend(self.grouped_item_dict(self.order_gift_details)) venue = Venue.get(self.venue_id) dct.update({ "delivery_type": self.delivery_type, "address": self.address.dict() if self.address else None, "delivery_time": timestamp(self.delivery_time) if self.delivery_time else 0, "delivery_time_str": self.delivery_time_str, "delivery_slot": delivery_slot.dict() if delivery_slot else None, "delivery_slot_str": delivery_slot.name if delivery_slot and delivery_slot.slot_type == DeliverySlot.STRINGS else None, "payment_type_id": self.payment_type_id, "total": self.total_sum, "menu_sum": sum([ item_detail.price / 100.0 for item_detail in self.item_details ]), "wallet_payment": self.wallet_payment, "delivery_sum": self.delivery_sum, "venue_id": str(self.venue_id), "venue": None if not venue else venue.admin_dict(), "items": self.grouped_item_dict(self.item_details), "gifts": gifts }) return dct
def get(self, namespace, order_id): order_id = int(order_id) order = Order.get_by_id(order_id) if not order: self.abort(404) venue = Venue.get(order.venue_id) order_created_local = order.date_created + timedelta(hours=venue.timezone_offset) xml = E.order( self._personal_data(order), E.order_details( E.is_delivery_asap('0'), E.delivery_time(order.delivery_time_str) ), self._cart(order), date_n_time=order_created_local.strftime("%Y-%m-%d %H:%M:%S"), total="%.2f" % order.total_sum, id="%s/%s" % (namespace, order_id), ) self.response.content_type = 'application/xml;charset=utf-8' self.response.write(etree.tostring(xml))
def venue_entity(self): if self.venue: return Venue.get(self.venue.id()) return None