def _process_shipmentitem_promoion(shipmentitem, event, category):
    item = ShipmentItemPromotionItem(shipmentitem=shipmentitem, category=category)
    item.promotiontype = mwsdecode.element_auto_text(event, 'PromotionType')
    item.promotionid = mwsdecode.element_auto_text(event, 'PromotionId')
    item.promotionamount = _currency_money(item, event, 'PromotionAmount')
    item.save()
    return item
def _process_debt_event_item(debt, event):
    item = DebtRecoveryItem(debtrecoveryevent=debt)
    item.recoveryamount = _currency_money(item, event, 'RecoveryAmount')
    item.originalamount = _currency_money(item, event, 'OriginalAmount')
    item.groupbegindate = mwsdecode.mws_datestr_to_datetime(mwsdecode.element_auto_text(event, 'GroupBeginDate'))
    item.groupenddate = mwsdecode.mws_datestr_to_datetime(mwsdecode.element_auto_text(event, 'GroupEndDate'))
    item.save()
def _orderitem_money(orderitem, element, tag):
    amount = tag + "/Amount"
    currency = tag + '/CurrencyCode'
    amount_value = mwsdecode.element_auto_text(element, amount, '0.0')
    cureency_code = mwsdecode.element_auto_text(element, currency)
    if cureency_code is not None and orderitem.item_currency is None:
        orderitem.item_currency = cureency_code
    return amount_value
def _currency_money(dbmodel, element, tag):
    amount = tag + "/CurrencyAmount"
    currency = tag + '/CurrencyCode'
    amount_value = mwsdecode.element_auto_text(element, amount, '0.0')
    cureency_code = mwsdecode.element_auto_text(element, currency)
    if cureency_code is not None and dbmodel.currency is None:
        dbmodel.currency = cureency_code
    return amount_value
Beispiel #5
0
def _currency_money(data, element, tag):
    amount = tag + "/Amount"
    currency = tag + '/CurrencyCode'
    amount_value = mwsdecode.element_auto_text(element, amount, '0.0')
    cureency_code = mwsdecode.element_auto_text(element, currency)
    if cureency_code is not None and data["currency"] is None:
        data["currency"] = cureency_code
    return amount_value
def _process_adjustment_event_item(ad, event):
    item = AdjustmentItem(adjustmentevnet=ad)
    item.quantity = int(mwsdecode.element_auto_text(event, 'Quantity', '0'))
    item.perunitamount = _currency_money(item, event, 'PerUnitAmount')
    item.totalamount = _currency_money(item, event, 'TotalAmount')
    item.seller_sku = mwsdecode.element_auto_text(event, 'SellerSKU')
    item.fnsku = mwsdecode.element_auto_text(event, 'FnSKU')
    item.productdescription = mwsdecode.element_auto_text(event, 'ProductDescription')
    item.asin = mwsdecode.element_auto_text(event, 'ASIN')
    item.save()
def _process_retrocharge_event(task, event):
    amazonid = mwsdecode.element_auto_text(event, 'AmazonOrderId')
    posteddate = mwsdecode.mws_datestr_to_datetime(mwsdecode.element_auto_text(event, 'PostedDate'))
    item, created = RetrochargeEvent.objects.get_or_create(sellerid=task.sellerid, amazonorderid=amazonid,
                                                           posteddate=posteddate)
    if not created:
        return
    item.retrochargeeventtype = mwsdecode.element_auto_text(event, 'RetrochargeEventType')
    item.basetax = _currency_money(item, event, 'BaseTax')
    item.shippingtax = _currency_money(item, event, 'ShippingTax')
    item.marketplacename = mwsdecode.element_auto_text(event, 'MarketplaceName')
    item.save()
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)
Beispiel #9
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)
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()
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)
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)
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)
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()
def _process_serviceprovider_event(task, event):
    item = SolutionProviderCreditEvent(sellerid=task.sellerid)
    item.providertransactiontype = mwsdecode.element_auto_text(event, 'ProviderTransactionType')
    item.sellerorderid = mwsdecode.element_auto_text(event, 'SellerOrderId')
    item.marketplaceid = mwsdecode.element_auto_text(event, 'MarketplaceId')
    item.marketplacecountrycode = mwsdecode.element_auto_text(event, 'MarketplaceCountryCode')
    item.sellerstorename = mwsdecode.element_auto_text(event, 'SellerStoreName')
    item.providerid = mwsdecode.element_auto_text(event, 'ProviderId')
    item.providerstorename = mwsdecode.element_auto_text(event, 'ProviderStoreName')
    item.save()
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)
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')
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)
Beispiel #19
0
def _process_order(task, order):
    torder, created = Order.objects.get_or_create(
        sellerid=task.sellerid,
        amazon_order_id=mwsdecode.element_auto_text(order, 'AmazonOrderId'))
    status = mwsdecode.element_auto_text(order, 'OrderStatus')
    if created or torder.order_status != status:
        torder.seller_order_id = mwsdecode.element_auto_text(
            order, 'SellerOrderId')
        torder.purchase_date = mwsdecode.mws_datestr_to_datetime(
            mwsdecode.element_auto_text(order, 'PurchaseDate'))
        torder.last_update_date = mwsdecode.mws_datestr_to_datetime(
            mwsdecode.element_auto_text(order, 'LastUpdateDate'))
        torder.order_status = status
        torder.fulfillment_channel = mwsdecode.element_auto_text(
            order, 'FulfillmentChannel')
        torder.sales_channel = mwsdecode.element_auto_text(
            order, 'SalesChannel')
        torder.order_channel = mwsdecode.element_auto_text(
            order, 'OrderChannel')
        torder.ship_service_level = mwsdecode.element_auto_text(
            order, 'ShipServiceLevel')
        torder.recipient_name = mwsdecode.element_auto_text(
            order, 'ShippingAddress/Name')
        torder.address_line1 = mwsdecode.element_auto_text(
            order, 'ShippingAddress/AddressLine1')
        torder.address_line2 = mwsdecode.element_auto_text(
            order, 'ShippingAddress/AddressLine2')
        torder.address_line3 = mwsdecode.element_auto_text(
            order, 'ShippingAddress/AddressLine3')
        torder.city = mwsdecode.element_auto_text(order,
                                                  'ShippingAddress/City')
        torder.county = mwsdecode.element_auto_text(order,
                                                    'ShippingAddress/County')
        torder.district = mwsdecode.element_auto_text(
            order, 'ShippingAddress/district')
        torder.state_or_region = mwsdecode.element_auto_text(
            order, 'ShippingAddress/StateOrRegion')
        torder.postal_code = mwsdecode.element_auto_text(
            order, 'ShippingAddress/PostalCode')
        torder.country_code = mwsdecode.element_auto_text(
            order, 'ShippingAddress/CountryCode')
        torder.phone = mwsdecode.element_auto_text(order,
                                                   'ShippingAddress/Phone')
        torder.order_currency_code = mwsdecode.element_auto_text(
            order, 'OrderTotal/CurrencyCode')
        torder.order_total_amount = mwsdecode.element_auto_text(
            order, 'OrderTotal/Amount', '0.0')
        torder.number_items_shipped = int(
            mwsdecode.element_auto_text(order, 'NumberOfItemsShipped', '0'))
        torder.number_items_unshipped = int(
            mwsdecode.element_auto_text(order, 'NumberOfItemsUnshipped', '0'))
        # payment_execution_detail = order.get("PaymentExecutionDetail", None) # object ignore
        torder.payment_method = mwsdecode.element_auto_text(
            order, 'PaymentMethod')
        torder.marketplaceid = mwsdecode.element_auto_text(
            order, 'MarketplaceId')
        torder.buyer_email = mwsdecode.element_auto_text(order, 'BuyerEmail')
        torder.buyer_name = mwsdecode.element_auto_text(order, 'BuyerName')
        torder.shipment_service_level_category = mwsdecode.element_auto_text(
            order, 'ShipmentServiceLevelCategory')
        torder.shipped_by_amazon_tfm = mwsdecode.mws_boolean(
            mwsdecode.element_auto_text(order, 'ShippedByAmazonTFM', 'false'))
        torder.tfm_shipment_status = mwsdecode.element_auto_text(
            order, 'TFMShipmentStatus')
        torder.cba_displayable_shipping_label = mwsdecode.element_auto_text(
            order, 'CbaDisplayableShippingLabel')
        torder.order_type = mwsdecode.element_auto_text(order, 'OrderType')
        torder.earliest_ship_date = mwsdecode.mws_datestr_to_datetime(
            mwsdecode.element_auto_text(order, 'EarliestShipDate'))
        torder.latest_ship_date = mwsdecode.mws_datestr_to_datetime(
            mwsdecode.element_auto_text(order, 'LatestShipDate'))
        torder.earliest_delivery_date = mwsdecode.mws_datestr_to_datetime(
            mwsdecode.element_auto_text(order, 'EarliestDeliveryDate'))
        torder.latest_delivery_date = mwsdecode.mws_datestr_to_datetime(
            mwsdecode.element_auto_text(order, 'LatestDeliveryDate'))
        torder.is_business_order = mwsdecode.mws_boolean(
            mwsdecode.element_auto_text(order, 'IsBusinessOrder', 'false'))
        torder.purchase_order_number = mwsdecode.element_auto_text(
            order, 'PurchaseOrderNumber')
        torder.is_prime = mwsdecode.mws_boolean(
            mwsdecode.element_auto_text(order, 'IsPrime', 'false'))
        torder.is_premenum_order = mwsdecode.mws_boolean(
            mwsdecode.element_auto_text(order, 'IsPremiumOrder', 'false'))
        torder.save()
def _process_shipmentevent_direct(shipment, event):
    item = ShipmentDirectPaymentItem(shipmentevent=shipment)
    item.directpaymentpype = mwsdecode.element_auto_text(event, 'DirectPaymentType')
    item.directpaymentamount = _currency_money(item, event, 'DirectPaymentAmount')
    item.save()
def _process_loan_event(task, event):
    item = LoanServicingEvent(sellerid=task.sellerid)
    item.loanamount = _currency_money(item, event, 'LoanAmount')
    item.sourcebusinesseventtype = mwsdecode.element_auto_text(event, 'SourceBusinessEventType')
    item.save()
def _process_debt_event_charge(debt, event):
    item = DebtRecoveryChargeInstrumentItem(debtrecoveryevent=debt)
    item.description = mwsdecode.element_auto_text(event, 'Description')
    item.tail = mwsdecode.element_auto_text(event, 'Tail')
    item.amount = _currency_money(item, event, 'Amount')
    item.save()
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()
def _process_servicefee_event_fee( service, event):
    item = ServiceFeeEventFeeItem(servicefeeevent=service)
    item.feetype = mwsdecode.element_auto_text(event, 'FeeType')
    item.feeamount = _currency_money(item, event, 'FeeAmount')
    item.save()
def _process_shipmentitem_charge(shipmentitem, event, category):
    item = ShipmentItemChargeItem(shipmentitem=shipmentitem, category=category)
    item.charegetype = mwsdecode.element_auto_text(event, 'ChargeType')
    item.charegeamount = _currency_money(item, event, 'ChargeAmount')
    item.save()
    return item
def _process_rental_event_fee(rental, event):
    item = RentalTransactionFeeItem(rentaltransactionevent=rental)
    item.feetype = mwsdecode.element_auto_text(event, 'FeeType')
    item.feeamount = _currency_money(item, event, 'FeeAmount')
    item.save()
def _process_rental_event_charge(rental, event):
    item = RentalTransactionChargeItem(rentaltransactionevent=rental)
    item.charegetype = mwsdecode.element_auto_text(event, 'ChargeType')
    item.charegeamount = _currency_money(item, event, 'ChargeAmount')
    item.save()
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)
def _process_shipmentitem_fee(shipmentitem, event, category):
    item = ShipmentItemFeeItem(shipmentitem=shipmentitem, category=category)
    item.feetype = mwsdecode.element_auto_text(event, 'FeeType')
    item.feeamount = _currency_money(item, event, 'FeeAmount')
    item.save()
    return item
def _process_paywithamazon_fee(paywithamazon, event):
    item = PayWithAmazonFeeItem(paywithamazonevent=paywithamazon)
    item.feetype = mwsdecode.element_auto_text(event, 'FeeType')
    item.feeamount = _currency_money(item, event, 'FeeAmount')
    item.save()