package com.mozu.mozuandroidinstoreassistant.app.layout.order; import android.content.Context; import android.graphics.Paint; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; import com.mozu.api.contracts.commerceruntime.commerce.Adjustment; import com.mozu.api.contracts.commerceruntime.discounts.AppliedDiscount; import com.mozu.api.contracts.commerceruntime.discounts.ShippingDiscount; import com.mozu.api.contracts.commerceruntime.orders.Order; import com.mozu.mozuandroidinstoreassistant.app.R; import com.mozu.mozuandroidinstoreassistant.app.data.IData; import com.mozu.mozuandroidinstoreassistant.app.data.order.OrderTotalRow; import com.mozu.mozuandroidinstoreassistant.app.dialog.ErrorMessageAlertDialog; import com.mozu.mozuandroidinstoreassistant.app.layout.IRowLayout; import com.mozu.mozuandroidinstoreassistant.app.models.authentication.UserAuthenticationStateMachine; import com.mozu.mozuandroidinstoreassistant.app.models.authentication.UserAuthenticationStateMachineProducer; import com.mozu.mozuandroidinstoreassistant.app.order.loaders.NewOrderManager; import java.text.NumberFormat; import rx.Subscriber; import rx.subscriptions.CompositeSubscription; public class NewOrderTotalLayout extends LinearLayout implements IRowLayout, IEditMode { TextView mSubTotalText; LinearLayout mShippingAdjustment; LinearLayout mOrderAdjustment; LinearLayout mDiscountAdjustment; private boolean mIsEditMode; private NewOrderShippingItemLayout.OrderUpdateListener mOrderUpdateListener; private CompositeSubscription mCompositeSubscription; public NewOrderTotalLayout(Context context) { super(context); init(); } public NewOrderTotalLayout(Context context, AttributeSet attrs) { super(context, attrs); init(); } public NewOrderTotalLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } private void init() { mCompositeSubscription = new CompositeSubscription(); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); if (mCompositeSubscription != null && !mCompositeSubscription.isUnsubscribed()) { mCompositeSubscription.unsubscribe(); } } @Override public void bindData(IData data) { if (data instanceof OrderTotalRow) { OrderTotalRow orderTotalRow = (OrderTotalRow) data; mSubTotalText = (TextView) findViewById(R.id.sub_total_id); TextView mTax = (TextView) findViewById(R.id.tax_id); TextView mTotal = (TextView) findViewById(R.id.order_total_id); TextView mShippingTotal = (TextView) findViewById(R.id.shipping_total_id); mShippingAdjustment = (LinearLayout) findViewById(R.id.shipping_adjustment); mOrderAdjustment = (LinearLayout) findViewById(R.id.order_adjustment); mDiscountAdjustment = (LinearLayout) findViewById(R.id.discount_adjustment); Order order = orderTotalRow.mOrder; NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(); mSubTotalText.setText(order.getDiscountedSubtotal() != null ? currencyFormat.format(order.getDiscountedSubtotal()) : currencyFormat.format(0.00)); mShippingTotal.setText(order.getShippingSubTotal() != null ? currencyFormat.format(order.getShippingSubTotal()) : currencyFormat.format(0.00)); mTax.setText(order.getTaxTotal() != null ? currencyFormat.format(order.getTaxTotal()) : currencyFormat.format(0.00)); mTotal.setText(order.getTotal() != null ? currencyFormat.format(order.getTotal()) : currencyFormat.format(0.00)); if (order.getShippingDiscounts().size() > 0) { mShippingAdjustment.setVisibility(View.VISIBLE); for (ShippingDiscount discount : order.getShippingDiscounts()) { View view = getShippingRowItem(order.getId(), discount.getDiscount()); mShippingAdjustment.addView(view); } } else { mShippingAdjustment.removeAllViews(); mShippingAdjustment.setVisibility(View.GONE); } if (order.getOrderDiscounts().size() > 0) { mDiscountAdjustment.setVisibility(View.VISIBLE); mDiscountAdjustment.removeAllViews(); for (AppliedDiscount discount : order.getOrderDiscounts()) { View view = getShippingRowItem(order.getId(), discount); mDiscountAdjustment.addView(view); } } else { mDiscountAdjustment.removeAllViews(); mDiscountAdjustment.setVisibility(View.GONE); } if (order.getAdjustment() != null) { mOrderAdjustment.setVisibility(VISIBLE); Adjustment adjustment = order.getAdjustment(); LayoutInflater inflater = LayoutInflater.from(getContext()); View view = inflater.inflate(R.layout.neworder_total_item, null); TextView column_name = (TextView) view.findViewById(R.id.column_name); TextView column_value = (TextView) view.findViewById(R.id.column_value); column_name.setText(adjustment.getDescription()); NumberFormat format = NumberFormat.getCurrencyInstance(); column_value.setText(format.format(adjustment.getAmount())); mOrderAdjustment.addView(view); } } } public void setUpdateListener(NewOrderShippingItemLayout.OrderUpdateListener updateCouponListener) { mOrderUpdateListener = updateCouponListener; } private View getShippingRowItem(final String orderId, final AppliedDiscount discount) { LayoutInflater inflater = LayoutInflater.from(getContext()); View view = inflater.inflate(R.layout.neworder_total_item, null); TextView column_name = (TextView) view.findViewById(R.id.column_name); TextView column_value = (TextView) view.findViewById(R.id.column_value); TextView removeButton = (TextView) view.findViewById(R.id.remove_icon); if (discount.getExcluded()) { column_name.setPaintFlags(column_name.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); column_value.setPaintFlags(column_name.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); ((ViewGroup) removeButton.getParent()).removeView(removeButton); } else { removeButton.setVisibility(View.VISIBLE); } removeButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { removeCoupon(orderId, discount.getCouponCode()); } }); column_name.setText(discount.getDiscount().getName() + " (" + discount.getCouponCode() + ")"); NumberFormat format = NumberFormat.getCurrencyInstance(); column_value.setText("(" + format.format(discount.getImpact()) + ")"); return view; } private void removeCoupon(String orderId, String couponCode) { UserAuthenticationStateMachine userAuthenticationState = UserAuthenticationStateMachineProducer.getInstance(getContext()); Integer mTenantId = userAuthenticationState.getTenantId(); Integer mSiteId = userAuthenticationState.getSiteId(); mCompositeSubscription.add(NewOrderManager.getInstance().getRemoveCouponObservable(mTenantId, mSiteId, orderId, couponCode).subscribe(new Subscriber<Order>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { ErrorMessageAlertDialog.getStandardErrorMessageAlertDialog(getContext(), "Failed to remove Coupon.Please try later"); } @Override public void onNext(Order order) { mOrderUpdateListener.updateOrder(order); } })); } @Override public void setEditMode(boolean isEditMode) { if (mDiscountAdjustment != null) { int discountChildCount = mDiscountAdjustment.getChildCount(); for (int i = 0; i < discountChildCount; i++) { View view = mDiscountAdjustment.getChildAt(i); View removeView = view.findViewById(R.id.remove_icon); if (removeView != null) removeView.setVisibility(isEditMode ? View.VISIBLE : View.GONE); } } if (mShippingAdjustment != null) { int discountChildCount = mShippingAdjustment.getChildCount(); for (int i = 0; i < discountChildCount; i++) { View view = mShippingAdjustment.getChildAt(i); view.findViewById(R.id.remove_icon).setVisibility(isEditMode ? View.VISIBLE : View.GONE); } } } }