Exemple #1
0
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
Exemple #2
0
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)
Exemple #3
0
 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()
Exemple #4
0
    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
Exemple #5
0
 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))
Exemple #6
0
 def venue_entity(self):
     if self.venue:
         return Venue.get(self.venue.id())
     return None