package com.mozu.mozuandroidinstoreassistant.app.order;
import android.app.AlertDialog;
import android.app.Fragment;
import android.app.FragmentManager;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import com.mozu.api.contracts.commerceruntime.discounts.AppliedLineItemProductDiscount;
import com.mozu.api.contracts.commerceruntime.discounts.Discount;
import com.mozu.api.contracts.commerceruntime.discounts.ShippingDiscount;
import com.mozu.api.contracts.commerceruntime.orders.Order;
import com.mozu.api.contracts.commerceruntime.orders.OrderAttribute;
import com.mozu.api.contracts.commerceruntime.orders.OrderItem;
import com.mozu.api.contracts.commerceruntime.products.Product;
import com.mozu.mozuandroidinstoreassistant.app.R;
import com.mozu.mozuandroidinstoreassistant.app.models.authentication.UserAuthenticationStateMachine;
import com.mozu.mozuandroidinstoreassistant.app.models.authentication.UserAuthenticationStateMachineProducer;
import com.mozu.mozuandroidinstoreassistant.app.product.ProductDetailOverviewDialogFragment;
import java.text.NumberFormat;
import java.util.List;
public class OrderDetailOverviewFragment extends Fragment implements View.OnClickListener {
public static final String N_A = "N/A";
private Order mOrder;
private LinearLayout mOrderedItemLayout;
private LinearLayout mDetailLayout;
private LinearLayout mOrderAttributeItemLayout;
private LinearLayout mAttributesHeaderLayout;
private TextView mItemsTotal;
private TextView mDiscounts;
private TextView mCoupons;
private TextView mSubTotal;
private TextView mShipping;
private TextView mShippingDiscounts;
private TextView mTax;
private ImageView mToggleDetailsView;
private NumberFormat mNumberFormat;
private View mView;
private ScrollView mScrollView;
public OrderDetailOverviewFragment() {
mNumberFormat = NumberFormat.getCurrencyInstance();
setRetainInstance(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mView = inflater.inflate(R.layout.order_detail_overview_fragment, null);
mScrollView = (ScrollView) mView.findViewById(R.id.topscrollview);
mOrderedItemLayout = (LinearLayout) mView.findViewById(R.id.layout_to_add_ordered_items_to);
mDetailLayout = (LinearLayout) mView.findViewById(R.id.detail_layout);
mOrderAttributeItemLayout = (LinearLayout) mView.findViewById(R.id.layout_to_add_order_attributes_to);
mAttributesHeaderLayout = (LinearLayout) mView.findViewById(R.id.attributes_header_layout);
mDetailLayout.setVisibility(View.GONE);
mItemsTotal = (TextView) mView.findViewById(R.id.items_total);
mDiscounts = (TextView) mView.findViewById(R.id.discounts);
mCoupons = (TextView) mView.findViewById(R.id.coupons);
mSubTotal = (TextView) mView.findViewById(R.id.sub_total);
mShipping = (TextView) mView.findViewById(R.id.shipping_total);
mShippingDiscounts = (TextView) mView.findViewById(R.id.shipping_discounts_total);
mTax = (TextView) mView.findViewById(R.id.tax_total);
mToggleDetailsView = (ImageView) mView.findViewById(R.id.toggle_details_view);
mToggleDetailsView.setOnClickListener(this);
if (mOrder != null) {
setOrderToViews(mView);
}
return mView;
}
private void setOrderToViews(View view) {
addOrderedItemLayoutsToView(mOrder.getItems());
addOrderAttributesLayoutsToView(mOrder.getAttributes());
TextView total = (TextView) view.findViewById(R.id.order_overview_total);
total.setText(mNumberFormat.format(mOrder.getTotal()));
mItemsTotal.setText(mOrder.getTotal() != null ? mNumberFormat.format(mOrder.getTotal()) : "N/A");
mDiscounts.setText(mOrder.getDiscountTotal() != null ? mNumberFormat.format(mOrder.getDiscountTotal()) : "N/A");
mCoupons.setText("N/A");
mSubTotal.setText(mOrder.getSubtotal() != null ? mNumberFormat.format(mOrder.getSubtotal()) : "N/A");
mShipping.setText(mOrder.getShippingSubTotal() != null ? mNumberFormat.format(mOrder.getShippingSubTotal()) : "N/A");
if (mOrder.getShippingDiscounts() != null) {
Double shippingDiscountTotal = 0d;
for (ShippingDiscount discount : mOrder.getShippingDiscounts()) {
if (discount.getDiscount() != null) {
shippingDiscountTotal += discount.getDiscount().getImpact();
}
}
mShippingDiscounts.setText(mNumberFormat.format(shippingDiscountTotal));
} else {
mShippingDiscounts.setText("N/A");
}
mTax.setText(mOrder.getTaxTotal() != null ? mNumberFormat.format(mOrder.getTaxTotal()) : "N/A");
}
private void addOrderAttributesLayoutsToView(List<OrderAttribute> attributes) {
if (attributes == null || attributes.size() < 1) {
mAttributesHeaderLayout.setVisibility(View.GONE);
mOrderAttributeItemLayout.setVisibility(View.GONE);
return;
}
mAttributesHeaderLayout.setVisibility(View.VISIBLE);
mOrderAttributeItemLayout.setVisibility(View.VISIBLE);
for(OrderAttribute attribute: attributes) {
View view = LayoutInflater.from(getActivity()).inflate(R.layout.order_attribute_list_item, mOrderAttributeItemLayout, false);
TextView label = (TextView) view.findViewById(R.id.attribute_label);
TextView value = (TextView) view.findViewById(R.id.attribute_value);
label.setVisibility(View.VISIBLE);
value.setVisibility(View.VISIBLE);
if (TextUtils.isEmpty(attribute.getFullyQualifiedName())) {
label.setText(getResources().getString(R.string.not_available));
} else {
label.setText(getPropertyValue(attribute.getFullyQualifiedName()));
}
String valueStr = getStringValueFromAttributesValues(attribute.getValues());
if (TextUtils.isEmpty(valueStr)) {
value.setText(getResources().getString(R.string.not_available));
} else {
value.setText(valueStr);
}
mOrderAttributeItemLayout.addView(view);
}
}
private String getPropertyValue(String fullyQualifiedName) {
String delimiter = getResources().getString(R.string.attribute_delimiter);
if (!TextUtils.isEmpty(fullyQualifiedName)) {
return fullyQualifiedName.substring(fullyQualifiedName.indexOf(delimiter)+1, fullyQualifiedName.length()).toUpperCase();
} else {
return "";
}
}
private String getStringValueFromAttributesValues(List<Object> values) {
String valueString = "";
for (Object obj: values) {
valueString += obj.toString() + " ";
}
return valueString;
}
private void addOrderedItemLayoutsToView(List<OrderItem> items) {
int i = 0;
for(OrderItem item: items) {
View view = LayoutInflater.from(getActivity()).inflate(R.layout.ordered_item_list_item, mOrderedItemLayout, false);
TextView code = (TextView) view.findViewById(R.id.ordered_item_code);
TextView productName = (TextView) view.findViewById(R.id.ordered_item_product);
TextView price = (TextView) view.findViewById(R.id.ordered_item_price);
TextView quantity = (TextView) view.findViewById(R.id.ordered_item_quantity);
TextView total = (TextView) view.findViewById(R.id.ordered_item_total);
// final ImageView discountInfo = (ImageView) view.findViewById(R.id.discount_info_image);
final LinearLayout discountInfoLayout = (LinearLayout)view.findViewById(R.id.discount_info_image_layout);
discountInfoLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
determineShowDiscountInfo(discountInfoLayout);
}
});
Product product = item.getProduct();
if (product == null) {
code.setText(N_A);
productName.setText(N_A);
price.setText(N_A);
quantity.setText(N_A);
total.setText(N_A);
mOrderedItemLayout.addView(view);
continue;
}
code.setText(product.getProductCode());
productName.setText(product.getName());
price.setText(product.getPrice() != null && product.getPrice().getPrice() != null ? mNumberFormat.format(product.getPrice().getPrice()) : N_A);
quantity.setText(String.valueOf(item.getQuantity()));
total.setText(mNumberFormat.format(item.getTotal()));
view.setOnClickListener(new ProductClickListener());
view.setTag(i);
if (item.getProductDiscounts() != null && item.getProductDiscounts().size() > 0) {
discountInfoLayout.setTag(i);
discountInfoLayout.setVisibility(View.VISIBLE);
} else {
discountInfoLayout.setVisibility(View.INVISIBLE);
}
i++;
mOrderedItemLayout.addView(view);
}
}
public void setOrder(Order order) {
mOrder = order;
}
private class ProductClickListener implements View.OnClickListener{
@Override
public void onClick(View view) {
int index;
try {
index = Integer.parseInt(String.valueOf(view.getTag()));
} catch (Exception e) {
index = -1;
}
if (index != -1 && mOrder != null && mOrder.getItems() != null && mOrder.getItems().size() > 0) {
OrderItem item = mOrder.getItems().get(index);
FragmentManager manager = getFragmentManager();
ProductDetailOverviewDialogFragment productOverviewFragment = (ProductDetailOverviewDialogFragment) manager.findFragmentByTag("productDialog");
UserAuthenticationStateMachine userState = UserAuthenticationStateMachineProducer.getInstance(getActivity());
if (productOverviewFragment == null) {
productOverviewFragment = new ProductDetailOverviewDialogFragment();
productOverviewFragment.setProduct(item.getProduct());
productOverviewFragment.setTenantId(userState.getTenantId());
productOverviewFragment.setSiteId(userState.getSiteId());
productOverviewFragment.setSiteDomain(userState.getSiteDomain());
}
productOverviewFragment.show(manager, "productDialog");
}
}
}
@Override
public void onClick(final View v) {
if (mToggleDetailsView.getId() == v.getId()) {
if (mDetailLayout.getVisibility() == View.GONE) {
mDetailLayout.setVisibility(View.VISIBLE);
mScrollView.post(new Runnable() {
@Override
public void run() {
mScrollView.scrollTo(0,mDetailLayout.getBottom());
}
});
} else {
mDetailLayout.setVisibility(View.GONE);
}
}
}
private void determineShowDiscountInfo(View v) {
int index;
try {
index = Integer.parseInt(String.valueOf(v.getTag()));
} catch (Exception e) {
index = -1;
}
if (index != -1 && mOrder != null && mOrder.getItems() != null && mOrder.getItems().size() > 0) {
OrderItem item = mOrder.getItems().get(index);
LinearLayout discountsView = new LinearLayout(getActivity());
discountsView.setOrientation(LinearLayout.VERTICAL);
discountsView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
for (AppliedLineItemProductDiscount productDiscount: item.getProductDiscounts()) {
Discount discount = productDiscount.getDiscount();
View eachDiscountView = LayoutInflater.from(getActivity()).inflate(R.layout.ordered_item_discount_list_item, discountsView, false);
TextView discountName = (TextView) eachDiscountView.findViewById(R.id.discount_name);
TextView discountAmount = (TextView) eachDiscountView.findViewById(R.id.discount_price);
TextView discountTotal = (TextView) eachDiscountView.findViewById(R.id.discount_total);
discountName.setText(discount.getName());
discountAmount.setText(mNumberFormat.format(productDiscount.getImpactPerUnit() * -1));
discountTotal.setText(mNumberFormat.format(productDiscount.getImpact() * -1));
discountsView.addView(eachDiscountView);
}
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setView(discountsView);
AlertDialog dialog = builder.create();
dialog.show();
}
}
}