Exemplo n.º 1
0
def _process_debt_event(task, event):
    item = DebtRecoveryEvent(sellerid=task.sellerid)
    item.debtrecoverytype = mwsdecode.element_auto_text(event, 'DebtRecoveryType')
    item.recoveryamount = _currency_money(item, event, 'RecoveryAmount')
    item.overpaymentcredit = _currency_money(item, event, 'OverPaymentCredit')
    item.save()
    debtitems = mwsdecode.element_auto_list(event, 'DebtRecoveryItemList/DebtRecoveryItem')
    for db in debtitems:
        _process_debt_event_item(item, db)

    chargeinstruments = mwsdecode.element_auto_list(event, 'ChargeInstrumentList/ChargeInstrument')
    for ci in chargeinstruments:
        _process_debt_event_charge(item, ci)
Exemplo n.º 2
0
def _process_response(task, response):
    """
    处理返回结果
    :param task:
    :return:
    """
    if response is None or response['code'] != '00000':
        logger.info("response error %s " % response)
        task.reset_init()
        return
    tree = mwsdecode.tree_ignore_namepace(response['mwsResponse'])
    if tree is None:
        return
    task.update_last_request_time()
    if mwsdecode.is_error_response(tree):
        logger.info("%s reponse error: %s" % (task.sellerid, response))
        return
    result = ''
    if response['action'] == 'ListOrders':
        result = 'ListOrdersResult'
    elif response['action'] == 'ListOrdersByNextToken':
        result = 'ListOrdersByNextTokenResult'
    orders_path = result + '/Orders/Order'
    orders = mwsdecode.element_auto_list(tree, orders_path)
    for item in orders:
        _process_order(task, item)
    nexttoken_path = result + "/NextToken"
    nexttoken = mwsdecode.element_auto_text(tree, nexttoken_path)
    if nexttoken is None:
        task.task_finished()
    else:
        task.need_nexttoken(nexttoken)
Exemplo n.º 3
0
def _process_performance_event(task, event):
    item = PerformanceBondRefundEvent(sellerid=task.sellerid)
    item.marketplacecountrycode = mwsdecode.element_auto_text(event, 'MarketplaceCountryCode')
    item.amount = _currency_money(item, event, 'Amount')
    groupids = mwsdecode.element_auto_list(event, 'ProductGroupList/ProductGroup')
    pgids = map(lambda x: x.text, groupids)
    item.productgrouplist = ",".join(pgids)
    item.save()
Exemplo n.º 4
0
def _process_adjustment_event(task, event):
    item = AdjustmentEvent(sellerid=task.sellerid)
    item.adjustmenttype = mwsdecode.element_auto_text(event, 'AdjustmentType')
    item.adjustmentamount = _currency_money(item, event, 'AdjustmentAmount')
    item.post_date = task.last_after_datetime
    item.save()
    items = mwsdecode.element_auto_list(event, 'AdjustmentItemList/AdjustmentItem')
    for it in items:
        _process_adjustment_event_item(item, it)
Exemplo n.º 5
0
def _process_rental_event(task, event):
    amazonid = mwsdecode.element_auto_text(event, 'AmazonOrderId')
    posteddate = mwsdecode.mws_datestr_to_datetime(mwsdecode.element_auto_text(event, 'PostedDate'))
    tetype = mwsdecode.element_auto_text(event, 'RentalEventType')
    item, created = RentalTransactionEvent.objects.get_or_create(sellerid=task.sellerid, amazonorderid=amazonid,
                                                                 posteddate=posteddate, rentaleventtype=tetype)
    if not created:
        return
    item.extensionlength = int(mwsdecode.element_auto_text(event, 'ExtensionLength', '0'))
    item.marketplacename = mwsdecode.element_auto_text(event, 'MarketplaceName')
    item.rentalinitialvalue = _currency_money(item, event, 'RentalInitialValue')
    item.rentalreimbursement = _currency_money(item, event, 'RentalReimbursement')
    item.save()
    chargelist = mwsdecode.element_auto_list(event, 'RentalChargeList/ChargeComponent')
    for cl in chargelist:
       _process_rental_event_charge(item, cl)
    feelist = mwsdecode.element_auto_list(event, 'RentalFeeList/FeeComponent')
    for fl in feelist:
       _process_rental_event_fee(item, fl)
Exemplo n.º 6
0
def _process_servicefee_event(task, event):
    item = ServiceFeeEvent(sellerid=task.sellerid)
    item.amazonorderid = mwsdecode.element_auto_text(event, 'AmazonOrderId')
    item.feereason = mwsdecode.element_auto_text(event, 'FeeReason')
    item.sellersku = mwsdecode.element_auto_text(event, 'SellerSKU')
    item.fnsku = mwsdecode.element_auto_text(event, 'FnSKU')
    item.feedescription = mwsdecode.element_auto_text(event, 'FeeDescription')
    item.asin = mwsdecode.element_auto_text(event, 'ASIN')
    item.postdate = task.last_after_datetime
    item.save()
    feelist = mwsdecode.element_auto_list(event, 'FeeList/FeeComponent')
    for fl in feelist:
        _process_servicefee_event_fee(item, fl)
Exemplo n.º 7
0
def _process_response(task, response):
    """
    处理返回结果
    :param task:
    :return:
    """
    if response is None or response['code'] != '00000':
        logger.info("response error %s " % response)
        task.reset_init()
        return
    tree = mwsdecode.tree_ignore_namepace(response['mwsResponse'])
    if tree is None:
        return
    if mwsdecode.is_error_response(tree):
        logger.info("%s reponse error: %s" % (task.sellerid, response))
        return
    result = ""
    if response['action'] == 'ListOrderItems':
        result = 'ListOrderItemsResult'
    elif response['action'] == 'ListOrderItemsByNextToken':
        result = 'ListOrderItemsByNextTokenResult'
    items = mwsdecode.element_auto_list(tree,
                                        ('%s/OrderItems/OrderItem' % result))
    amazon_order_id = mwsdecode.element_auto_text(
        tree, ('%s/AmazonOrderId' % result))
    try:
        order = Order.objects.get(sellerid=task.sellerid,
                                  amazon_order_id=amazon_order_id)
        for item in items:
            _process_orderitem(order=order,
                               amazon_order_id=amazon_order_id,
                               itemele=item)
        if order.order_status in [
                'Shipped', 'InvoiceUnconfirmed', 'Canceled', 'Unfulfillable'
        ]:
            order.pulled_items = 2
        else:
            order.pulled_items = 1
        order.save()
    except MultipleObjectsReturned:
        logger.info(
            "find MultipleObjectsReturned on order %s-%s" % task.sellerid,
            amazon_order_id)
    nexttoken = mwsdecode.element_auto_text(tree, ('%s/NextToken' % result))
    if nexttoken is None:
        task.task_finished()
    else:
        task.need_nexttoken(nexttoken)
Exemplo n.º 8
0
def _process_paywithamazon_event(task, event):
    item = PayWithAmazonEvent(sellerid=task.sellerid)
    item.sellerorderid = mwsdecode.element_auto_text(event, 'SellerOrderId')
    item.transactionposteddate = mwsdecode.mws_datestr_to_datetime(mwsdecode.element_auto_text(event, 'TransactionPostedDate'))
    item.businessobjecttype = mwsdecode.element_auto_text(event, 'businessobjecttype')
    item.saleschannel = mwsdecode.element_auto_text(event, 'SalesChannel')
    item.charge_type = mwsdecode.element_auto_text(event, 'Charge/ChargeType')
    item.charge_amount = _currency_money(item, event, 'Charge/ChargeAmount')
    item.paymentamounttype = mwsdecode.element_auto_text(event, 'PaymentAmountType')
    item.amountdescription = mwsdecode.element_auto_text(event, 'AmountDescription')
    item.fulfillmentchannel = mwsdecode.element_auto_text(event, 'FulfillmentChannel')
    item.storename = mwsdecode.element_auto_text(event, 'StoreName')
    item.save()
    feelist = mwsdecode.element_auto_list(event, 'FeeList/FeeComponent')
    for fee in feelist:
        _process_paywithamazon_fee(item, event)
Exemplo n.º 9
0
def _process_shipmentevents(task, event, category):
    posteddate = mwsdecode.mws_datestr_to_datetime(mwsdecode.element_auto_text(event, 'PostedDate'))
    amazonorderid = mwsdecode.element_auto_text(event, 'AmazonOrderId')
    shipment, created = ShipmentEvent.objects.get_or_create(sellerid=task.sellerid, category=category,
                                                            amazonorderid=amazonorderid, posteddate=posteddate)
    if not created:
        # ignore if the evnet is recorded
        return
    shipment.sellerorderid = mwsdecode.element_auto_text(event, 'SellerOrderId')
    shipment.marketplacename = mwsdecode.element_auto_text(event, 'MarketplaceName')
    shipment.save()
    orderchargementlist = mwsdecode.element_auto_list(event, 'OrderChargeList/ChargeComponent')
    for ordercharge in orderchargementlist:
        _process_shipmentevent_charge(shipment, ordercharge, 'order')
    orderchargeadjustmentlist = mwsdecode.element_auto_list(event, 'OrderChargeAdjustmentList/ChargeComponent')
    for oj in orderchargeadjustmentlist:
        _process_shipmentevent_charge(shipment, oj, 'orderadjustment')
    shipmentfeelist = mwsdecode.element_auto_list(event, 'ShipmentFeeList/FeeComponent')
    for sf in shipmentfeelist:
        _process_shipmentevent_fee(shipment, sf, 'shipment')
    shipmentfeeadjustmentlist = mwsdecode.element_auto_list(event, 'ShipmentFeeAdjustmentList/FeeComponent')
    for sfa in shipmentfeeadjustmentlist:
        _process_shipmentevent_fee(shipment, sfa, 'shipmentadjustment')
    orderfeelist = mwsdecode.element_auto_list(event, 'OrderFeeList/FeeComponent')
    for of in orderfeelist:
        _process_shipmentevent_fee(shipment, of, 'order')
    orderfeeadjustmentlist = mwsdecode.element_auto_list(event, 'OrderFeeAdjustmentList/FeeComponent')
    for ofa in orderfeeadjustmentlist:
        _process_shipmentevent_fee(shipment, ofa, 'orderadjustment')
    directpaymentlist = mwsdecode.element_auto_list(event, 'DirectPaymentList/DirectPayment')
    for dp in directpaymentlist:
        _process_shipmentevent_direct(shipment, dp)
    shipmentitemlist = mwsdecode.element_auto_list(event, 'ShipmentItemList/ShipmentItem')
    for si in shipmentitemlist:
        _process_shipmentevent_item(shipment, si, 'normal')
    shipmentitemadjustmentlist = mwsdecode.element_auto_list(event, 'ShipmentItemAdjustmentList/ShipmentItem')
    for sia in shipmentitemadjustmentlist:
        _process_shipmentevent_item(shipment, sia, 'adjustment')
Exemplo n.º 10
0
def _process_shipmentevent_item(shipment, event, category):
    item = ShipmentItem(shipmentevent=shipment, category=category)
    item.sellersku = mwsdecode.element_auto_text(event, 'SellerSKU')
    item.orderitemid = mwsdecode.element_auto_text(event, 'OrderItemId')
    item.orderadjustmentitemid = mwsdecode.element_auto_text(event, 'OrderAdjustmentItemId')
    item.quantityshipped = int(mwsdecode.element_auto_text(event, 'QuantityShipped', '0'))
    item.costofpointsgranted = _currency_money(item, event, 'CostOfPointsGranted')
    item.cotofpointsreturned = _currency_money(item, event, 'CostOfPointsReturned')
    item.save()

    chargers = []
    itemchargelist = mwsdecode.element_auto_list(event, 'ItemChargeList/ChargeComponent')
    for ic in itemchargelist:
        chargers.append(_process_shipmentitem_charge(item, ic, 'normal'))
    itemchargeadjustmentlist = mwsdecode.element_auto_list(event, 'ItemChargeAdjustmentList/ChargeComponent')
    for ica in itemchargeadjustmentlist:
        chargers.append(_process_shipmentitem_charge(item, ica, 'adjustment'))
    for charger in chargers:
        item.charger = Decimal(item.charger) + Decimal(charger.charegeamount)
        item.currency = charger.currency

    fees = []
    itemfeelist = mwsdecode.element_auto_list(event, 'ItemFeeList/FeeComponent')
    for ifee in itemfeelist:
        fees.append(_process_shipmentitem_fee(item, ifee, 'normal'))
    itemfeeadjustmentlist = mwsdecode.element_auto_list(event, 'ItemFeeAdjustmentList/FeeComponent')
    for ifeea in itemfeeadjustmentlist:
        fees.append(_process_shipmentitem_fee(item, ifeea, 'adjustment'))
    for fee in fees:
        item.fee = Decimal(item.fee) + Decimal(fee.feeamount)

    promotions = []
    promotionlist = mwsdecode.element_auto_list(event, 'PromotionList/Promotion')
    for p in promotionlist:
        promotions.append(_process_shipmentitem_promoion(item, p, 'normal'))
    promotionadjustmentlist = mwsdecode.element_auto_list(event, 'PromotionAdjustmentList/Promotion')
    for pa in promotionadjustmentlist:
        promotions.append(_process_shipmentitem_promoion(item, pa, 'adjustment'))
    for promotion in promotions:
        item.promotion = Decimal(item.promotion) + Decimal(promotion.promotionamount)

    item.save()
Exemplo n.º 11
0
def _process_response(task, response):
    """
    处理返回结果
    :param task:
    :return:
    """
    if response is None or response['code'] != '00000':
        logger.info("response error %s " % response)
        task.reset_init()
        return
    tree = mwsdecode.tree_ignore_namepace(response['mwsResponse'])
    if tree is None:
        return
    if mwsdecode.is_error_response(tree):
        logger.info("%s reponse error: %s" % (task.sellerid, response))
        return
    result = ''
    if response['action'] == 'ListFinancialEvents':
        result = 'ListFinancialEventsResult'
    elif response['action'] == 'ListFinancialEventsByNextToken':
        result = 'ListFinancialEventsByNextTokenResult'
    financial_tree_path = result + '/FinancialEvents'
    financial_tree = tree.find(financial_tree_path)
    shipmentevents = mwsdecode.element_auto_list(financial_tree, "ShipmentEventList/ShipmentEvent")
    for item in shipmentevents:
        _process_shipmentevents(task, item, 'normal')
    refundevents = mwsdecode.element_auto_list(financial_tree, "RefundEventList/ShipmentEvent")
    for rf in refundevents:
        _process_shipmentevents(task, rf, 'refund')
    guaranteeclaimevents = mwsdecode.element_auto_list(financial_tree, "GuaranteeClaimEventList/ShipmentEvent")
    for gc in guaranteeclaimevents:
        _process_shipmentevents(task, gc, 'guarantee_claim')
    chargebackevents = mwsdecode.element_auto_list(financial_tree, "ChargebackEventList/ShipmentEvent")
    for cb in chargebackevents:
        _process_shipmentevents(task, cb, 'chargeback')

    paywithamazonevents = mwsdecode.element_auto_list(financial_tree, 'PayWithAmazonEventList/PayWithAmazonEvent')
    for pwa in paywithamazonevents:
        _process_paywithamazon_event(task, pwa)

    serviceprovidercreditevents = mwsdecode.element_auto_list(financial_tree,
                                                         'ServiceProviderCreditEventList/SolutionProviderCreditEvent')
    for spc in serviceprovidercreditevents:
        _process_serviceprovider_event(task, spc)

    retrochargeevents = mwsdecode.element_auto_list(financial_tree, 'RetrochargeEventList/RetrochargeEvent')
    for rc in retrochargeevents:
        _process_retrocharge_event(task, rc)

    rentaltransactionevents = mwsdecode.element_auto_list(financial_tree,
                                                     'RentalTransactionEventList/RentalTransactionEvent')
    for rte in rentaltransactionevents:
        _process_rental_event(task, rte)

    performancebondrefundevents = mwsdecode.element_auto_list(financial_tree,
                                                         'PerformanceBondRefundEventList/PerformanceBondRefundEvent')
    for pb in performancebondrefundevents:
        _process_performance_event(task, pb)

    servicefeeevents = mwsdecode.element_auto_list(financial_tree, 'ServiceFeeEventList/ServiceFeeEvent')
    for sf in servicefeeevents:
        _process_servicefee_event(task, sf)

    debtrecoveryevents = mwsdecode.element_auto_list(financial_tree, 'DebtRecoveryEventList/DebtRecoveryEvent')
    for dr in debtrecoveryevents:
        _process_debt_event(task, dr)

    loanservicingevents = mwsdecode.element_auto_list(financial_tree, 'LoanServicingEventList/LoanServicingEvent')
    for ls in loanservicingevents:
        _process_loan_event(task, ls)

    adjustmentevents = mwsdecode.element_auto_list(financial_tree, 'AdjustmentEventList/AdjustmentEvent')
    for ae in adjustmentevents:
        _process_adjustment_event(task, ae)

    nexttoken_path = result + "/NextToken"
    nexttoken = mwsdecode.element_auto_text(tree, nexttoken_path)
    if nexttoken is None:
        task.task_finished()
    else:
        task.need_nexttoken(nexttoken)
Exemplo n.º 12
0
def _process_orderitem(order, amazon_order_id, itemele):
    orderitemid = mwsdecode.element_auto_text(itemele, 'OrderItemId')
    item, created = OrderItem.objects.get_or_create(
        order_item_id=orderitemid,
        sellerid=order.sellerid,
        amazon_order_id=order.amazon_order_id)
    if created:
        item.purchase_date = order.purchase_date
        item.fulfillment_channel = order.fulfillment_channel
        item.phone = order.phone
        item.marketplaceid = order.marketplaceid
        item.asin = mwsdecode.element_auto_text(itemele, 'ASIN')
        item.seller_sku = mwsdecode.element_auto_text(itemele, 'SellerSKU')
    item.customized_url = mwsdecode.element_auto_text(
        itemele, 'BuyerCustomizedInfo/CustomizedURL')
    item.title = mwsdecode.element_auto_text(itemele, 'Title')
    item.quantity_ordered = int(
        mwsdecode.element_auto_text(itemele, 'QuantityOrdered', '0'))
    item.quantity_shipped = int(
        mwsdecode.element_auto_text(itemele, 'QuantityShipped', '0'))
    item.points_number = int(
        mwsdecode.element_auto_text(itemele, 'PointsGranted/PointsNumber',
                                    '0'))
    item.points_monetary_value = _orderitem_money(
        item, itemele, 'PointsGranted/PointsMonetaryValue')
    item.item_price = _orderitem_money(item, itemele, 'ItemPrice')
    item.shipping_price = _orderitem_money(item, itemele, 'ShippingPrice')
    item.gift_wrap_price = _orderitem_money(item, itemele, 'GiftWrapPrice')
    item.item_tax = _orderitem_money(item, itemele, 'ItemTax')
    item.shipping_tax = _orderitem_money(item, itemele, 'ShippingTax')
    item.gift_wrap_tax = _orderitem_money(item, itemele, 'GiftWrapTax')
    item.shipping_discount = _orderitem_money(item, itemele,
                                              'ShippingDiscount')
    item.promotion_discount = _orderitem_money(item, itemele,
                                               'PromotionDiscount')
    promotionids = mwsdecode.element_auto_list(itemele,
                                               'PromotionIds/PromotionId')
    pids = map(lambda x: x.text, promotionids)
    item.promotion_ids = ",".join(pids)
    item.cod_fee = _orderitem_money(item, itemele, 'CODFee')
    item.cod_fee_discount = _orderitem_money(item, itemele, 'CODFeeDiscount')
    item.gift_message_text = mwsdecode.element_auto_text(
        itemele, 'GiftMessageText')
    item.gift_wrap_level = mwsdecode.element_auto_text(itemele,
                                                       'GiftWrapLevel')
    item.invoice_requirement = mwsdecode.element_auto_text(
        itemele, 'InvoiceData/InvoiceRequirement')
    item.buyer_selected_invoice_category = mwsdecode.element_auto_text(
        itemele, 'InvoiceData/BuyerSelectedInvoiceCategory')
    item.invoice_title = mwsdecode.element_auto_text(
        itemele, 'InvoiceData/InvoiceTitle')
    item.invoice_information = mwsdecode.element_auto_text(
        itemele, 'InvoiceData/InvoiceInformation')
    item.condition_note = mwsdecode.element_auto_text(itemele, 'ConditionNote')
    item.conditionid = mwsdecode.element_auto_text(itemele, 'ConditionId')
    item.condition_subtype_id = mwsdecode.element_auto_text(
        itemele, 'ConditionSubtypeId')
    item.scheduled_delivery_start_date = mwsdecode.element_auto_text(
        itemele, 'ScheduledDeliveryStartDate')
    item.scheduled_delivery_end_date = mwsdecode.element_auto_text(
        itemele, 'ScheduledDeliveryEndDate')
    item.price_designation = mwsdecode.element_auto_text(
        itemele, 'PriceDesignation')
    item.save()
Exemplo n.º 13
0
def _process_response(shop, response):
    """
    处理返回结果
    :param task:
    :return:
    """
    reponseok = True
    if response is None or response['code'] !=  '00000':
        logger.info("response error %s " % response)
        reponseok = False
        return
    tree = mwsdecode.tree_ignore_namepace(response['mwsResponse'])
    if tree is None:
        reponseok = False
        return
    if mwsdecode.is_error_response(tree):
        logger.info("%s reponse error: %s" % (shop.sellerid, response))
        reponseok = False
    if not reponseok:
        reponse_api(code="00014", msg="error")
        return
    data = {}
    data["sellerid"] = shop.sellerid
    data["marketplaceid"] = mwsdecode.element_auto_text(tree, 'GetLowestPricedOffersForSKUResult/Identifier/MarketplaceId')
    data["sellersku"] =  mwsdecode.element_auto_text(tree, 'GetLowestPricedOffersForSKUResult/Identifier/SellerSKU')
    data["numberOfOffers"] = int(
        mwsdecode.element_auto_text(tree, 'GetLowestPricedOffersForSKUResult/Summary/TotalOfferCount', '0'))
    data["currency"] = ""
    data['lowestLandPrice'] = 10000.0
    data['lowestListingPrice'] = 10000.0
    data['lowestShippingPrice'] = 10000.0
    lowestPrices = mwsdecode.element_auto_list(tree, 'GetLowestPricedOffersForSKUResult/Summary/LowestPrices/LowestPrice')
    for lowest in lowestPrices:
        condition = lowest.get("condition", 'used')
        fulfillmentChannel = lowest.get('fulfillmentChannel', 'Merchant')
        if condition not in ['new', 'New']:
            continue
        lowest_land_price = float(_currency_money(data, lowest, 'LandedPrice'))
        lowest_listing_price = float(_currency_money(data, lowest, 'ListingPrice'))
        lowest_shipping_price = float(_currency_money(data, lowest, 'Shipping'))
        if data['lowestListingPrice'] < lowest_listing_price:
            continue
        data["lowestFulfillment"] = fulfillmentChannel
        data['lowestLandPrice'] = lowest_land_price
        data['lowestListingPrice'] = lowest_listing_price
        data['lowestShippingPrice'] = lowest_shipping_price
    buyboxps = mwsdecode.element_auto_list(tree, 'GetLowestPricedOffersForSKUResult/Summary/BuyBoxPrices/BuyBoxPrice')
    for buybox in buyboxps:
        condition = lowest.get("condition", 'used')
        if condition not in ['New', 'new']:
            continue
        data["buyboxLandPrice"] = float(_currency_money(data, buybox, 'LandedPrice'))
        data['buyboxListingPrice'] = float(_currency_money(data, buybox, 'ListingPrice'))
        data['buyboxShippingPrice'] = float(_currency_money(data, buybox, 'Shipping'))
    if data["numberOfOffers"] > 0:
        offers = mwsdecode.element_auto_list(tree, 'GetLowestPricedOffersForSKUResult/Offers/Offer')
        for offer in offers:
            myoffer = mwsdecode.mws_boolean(mwsdecode.element_auto_text(offer, 'MyOffer', 'false'))
            if not myoffer:
                continue
            isFBA = mwsdecode.mws_boolean(mwsdecode.element_auto_text(offer, 'IsFulfilledByAmazon', 'false'))
            data['myFulfillment'] = 'Amazon' if isFBA else 'Merchant'
            data['myListingPrice'] = float(_currency_money(data, offer, 'ListingPrice'))
            data['myShippingPrice'] = float(_currency_money(data, offer, 'Shipping'))
            data['buyboxWinner'] = mwsdecode.mws_boolean(mwsdecode.element_auto_text(offer, 'IsBuyBoxWinner', 'false'))
    if data['lowestListingPrice'] == 10000.0:
        data['lowestLandPrice'] = data['lowestListingPrice'] = data['lowestShippingPrice'] = 0.0
    reponse_api(code="00000", msg="success", data=data)