orderCompleted()

in src/web-ui/src/analytics/AnalyticsHandler.js [847:981]


    orderCompleted(user, cart, order) {
        if (user) {
            AmplifyAnalytics.record({
                name: 'OrderCompleted',
                attributes: {
                    userId: user.id,
                    cartId: cart.id,
                    orderId: order.id.toString()
                },
                metrics: {
                    orderTotal: +order.total.toFixed(2)
                }
            })
        }

        for (var itemIdx in order.items) {
            let orderItem = order.items[itemIdx]

            if (user) {
                AmplifyAnalytics.record({
                    name: '_monetization.purchase',
                    attributes: {
                        userId: user.id,
                        cartId: cart.id,
                        orderId: order.id.toString(),
                        _currency: 'USD',
                        _product_id: orderItem.product_id
                    },
                    metrics: {
                        _quantity: orderItem.quantity,
                        _item_price: +orderItem.price.toFixed(2)
                    }
                })
            }

            if (this.personalizeEventTrackerEnabled()) {
                AmplifyAnalytics.record({
                    eventType: 'OrderCompleted',
                    userId: user ? user.id : AmplifyStore.state.provisionalUserID,
                    properties: {
                        itemId: orderItem.product_id,
                        discount: "No"
                    }
                }, 'AmazonPersonalize')
                AmplifyStore.commit('incrementSessionEventsRecorded');
            }

            if (this.amplitudeEnabled()) {
                // Amplitude revenue
                let revenue = new Amplitude.Revenue()
                    .setProductId(orderItem.product_id.toString())
                    .setPrice(+orderItem.price.toFixed(2))
                    .setQuantity(orderItem.quantity);
                Amplitude.getInstance().logRevenueV2(revenue);
            }
        }

        if (user && user.id) {
            AmplifyAnalytics.updateEndpoint({
                userId: user.id,
                userAttributes: {
                    HasShoppingCart: ['false'],
                    HasCompletedOrder: ['true']
                },
                metrics: {
                    ItemsInCart: 0
                }
            })
        }

        if (this.mParticleEnabled()) {
            var orderList = [];
            let totalAmount = 0;
            for (var x = 0; x < cart.items.length; x++) {
                var orderItem = cart.items[x];
                var orderDetails = window.mParticle.eCommerce.createProduct(
                    orderItem.product_name,
                    orderItem.product_id,
                    parseFloat(orderItem.price),
                    parseInt(orderItem.quantity)
                );
                totalAmount = totalAmount + parseFloat(orderItem.price);
                orderList.push(orderDetails);
            }
    
            let transactionAttributes = {
                Id: cart.id,
                Revenue: totalAmount,
                Tax: totalAmount * .10
            };
    
            let customAttributes = {mpid: window.mParticle.Identity.getCurrentUser().getMPID()}
    
            if (order.promo_code != null && order.promo_code != "")
                customAttributes = { promo_code: order.promo_code };
    
    
            window.mParticle.eCommerce.logProductAction(window.mParticle.ProductActionType.Purchase, orderList, customAttributes, {}, transactionAttributes);
        }

        let eventProperties = {
            cartId: cart.id,
            orderId: order.id,
            orderTotal: +order.total.toFixed(2)
        };

        if (this.segmentEnabled()) {
            window.analytics.track('OrderCompleted', eventProperties);
        }

        if (this.amplitudeEnabled()) {
            Amplitude.getInstance().logEvent('OrderCompleted', eventProperties);
        }

        if (this.googleAnalyticsEnabled()) {
            let gaItems = [];
            for (var i in order.items) {
                gaItems.push({
                    "item_id": order.items[i].product_id,
                    "item_name": order.items[i].product_name,
                    "quantity": order.items[i].quantity,
                    "index": gaItems.length + 1,
                    "currency": "USD",
                    "price": +order.items[i].price.toFixed(2)
                });
            }

            Vue.prototype.$gtag.event('purchase', {
                "transaction_id": order.id.toString(),
                "value": +order.total.toFixed(2),
                "currency": "USD",
                "items": gaItems
            });
        }
    },