package com.dreamspace.uucampus.ui.activity.Order;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.dreamspace.uucampus.R;
import com.dreamspace.uucampus.api.ApiManager;
import com.dreamspace.uucampus.common.utils.CommonUtils;
import com.dreamspace.uucampus.common.utils.NetUtils;
import com.dreamspace.uucampus.model.api.CommonStatusRes;
import com.dreamspace.uucampus.model.api.OrderDetail;
import com.dreamspace.uucampus.ui.activity.Market.GoodDetailAct;
import com.dreamspace.uucampus.ui.activity.Market.ShopShowGoodsAct;
import com.dreamspace.uucampus.ui.base.AbsActivity;
import com.dreamspace.uucampus.ui.dialog.MsgDialog;
import com.dreamspace.uucampus.ui.dialog.ProgressDialog;
import com.dreamspace.uucampus.widget.RatingBar;
import net.glxn.qrgen.android.QRCode;
import java.io.File;
import butterknife.Bind;
import de.hdodenhof.circleimageview.CircleImageView;
import retrofit.Callback;
import retrofit.RetrofitError;
import retrofit.client.Response;
/**
* Created by Lx on 2015/10/22.
* 订单详情界面,进入需要传入order_id
*/
public class OrderDetailAct extends AbsActivity{
@Bind(R.id.good_ll)
LinearLayout goodLl;
@Bind(R.id.good_rl)
RelativeLayout goodRl;
@Bind(R.id.shop_name_rl)
RelativeLayout shopRl;
@Bind(R.id.comment_ll)
LinearLayout commentLl;
@Bind(R.id.good_bottom_divider)
View goodLlBottomDivider;
@Bind(R.id.good_name_tv)
TextView goodNameTv;
@Bind(R.id.good_image_iv)
ImageView goodImageIv;
@Bind(R.id.price_before_reduce_tv)
TextView priceBeforeReduceTv;
@Bind(R.id.total_price_tv)
TextView totalPriceTv;
@Bind(R.id.shop_image_civ)
CircleImageView shopImageCiv;
@Bind(R.id.shop_name_tv)
TextView shopNameTv;
@Bind(R.id.order_id_tv)
TextView orderIdTv;
@Bind(R.id.paid_time_tv)
TextView orderTimeTv;
@Bind(R.id.phone_num_tv)
TextView buyerPhoneTv;
@Bind(R.id.campus_tv)
TextView locationTv;
@Bind(R.id.discount_tv)
TextView discountTv;
@Bind(R.id.remark_tv)
TextView remarkTv;
@Bind(R.id.content_sv)
ScrollView contentSv;
private Button paidBtn;
private Button applyRefundBtn;
private Button commentBtn;
private View refundView;
private TextView qrCodeTv;
private TextView inRefundTv;
private TextView alreadyRefundTv;
private ImageView qrCodeIv;
private String order_id;
private MsgDialog msgDialog;
private ProgressDialog progressDialog;
private boolean actDestory = false;
private boolean orderStateChange = false;
private OrderDetail mOrderDetail;
public static final String ORDER_ID = "ORDER_ID";
private static final int GO_PAY = 1;
private static final int GO_COMMENT = 2;
@Override
protected int getContentView() {
return R.layout.activity_order_detail;
}
@Override
protected void prepareDatas() {
Bundle data = getIntent().getExtras();
order_id = data.getString(ORDER_ID);
getOrderDetail();
}
@Override
protected void initViews() {
getSupportActionBar().setTitle(getString(R.string.order_detail));
initListeners();
}
@Override
protected View getLoadingTargetView() {
return contentSv;
}
private void initListeners(){
}
//初始化未付款订单状态视图
private void initUnpaidViews(){
View unpaidView = getLayoutInflater().inflate(R.layout.order_detail_view_unpaid_state,null);
paidBtn = (Button) unpaidView.findViewById(R.id.pay_btn);
goodLl.addView(unpaidView, getInflatePosition());
commentLl.setVisibility(View.GONE);
}
private void initUnpaidListeners(){
paidBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//进入支付界面
intPayAct(mOrderDetail.getGood().getName(), mOrderDetail.get_id(),
mOrderDetail.getQuantity() * mOrderDetail.getGood().getOriginal_price(), mOrderDetail.getTotal_price());
}
});
}
//初始化未消费订单状态视图
private void initUnconsumeViews(){
View unconsumeView = getLayoutInflater().inflate(R.layout.order_detail_view_unconsume_state,null);
qrCodeTv = (TextView) unconsumeView.findViewById(R.id.order_password_tv);
qrCodeIv = (ImageView) unconsumeView.findViewById(R.id.qrcode_iv);
applyRefundBtn = (Button) unconsumeView.findViewById(R.id.apply_refund_btn);
//获取二维码宽度,按照此宽度生成二维码文件
int qrCodeWidth = getResources().getDimensionPixelSize(R.dimen.qrcode_width);
//生成二维码文件,指定编码方式为utf-8
File qrcodeFile = QRCode.from(mOrderDetail.getCode()).withSize(qrCodeWidth,qrCodeWidth).withCharset("UTF-8").file();
Glide.with(this)
.load(qrcodeFile)
.centerCrop()
.override(qrCodeWidth, qrCodeWidth)
.into(qrCodeIv);
qrCodeTv.setText(getString(R.string.order_qr_code_password) + mOrderDetail.getCode());
goodLl.addView(unconsumeView, getInflatePosition());
commentLl.setVisibility(View.GONE);
}
private void initUnconsumeListeners(){
applyRefundBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
initCancelOrderMsgDialog();
msgDialog.show();
}
});
}
//初始化未评价订单状态视图
private void initUncommentViews(){
View uncommentView = getLayoutInflater().inflate(R.layout.order_detail_view_uncomment_state,null);
commentBtn = (Button) uncommentView.findViewById(R.id.comment_btn);
goodLl.addView(uncommentView, getInflatePosition());
commentLl.setVisibility(View.GONE);
}
private void initUncommentListeners(){
commentBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//进入评论界面
inCommentAct(mOrderDetail.get_id(), mOrderDetail.getGood().get_id());
}
});
}
//初始化退款订单状态视图(退款中,已退款)
private void initRefundViews(){
refundView = getLayoutInflater().inflate(R.layout.order_detail_view_refund_state,null);
inRefundTv = (TextView) refundView.findViewById(R.id.in_refund_tv);
alreadyRefundTv = (TextView) refundView.findViewById(R.id.already_refund_tv);
if(mOrderDetail.getStatus() == -1){
inRefundTv.setVisibility(View.VISIBLE);
alreadyRefundTv.setVisibility(View.INVISIBLE);
}else{
inRefundTv.setVisibility(View.INVISIBLE);
alreadyRefundTv.setVisibility(View.VISIBLE);
}
goodLl.addView(refundView,getInflatePosition());
commentLl.setVisibility(View.GONE);
}
private void initRefundListeners(){
}
//初始化已评价订单状态视图(无控件需要添加监听器)
private void initAlreadyCommentViews(){
commentLl.setVisibility(View.VISIBLE);
RatingBar ratingBar = (RatingBar) commentLl.findViewById(R.id.comment_rating_bar);
ratingBar.setmClickable(false);
CircleImageView civ = (CircleImageView) commentLl.findViewById(R.id.user_avatar_civ);
TextView userNameTv = (TextView) commentLl.findViewById(R.id.user_name_tv);
TextView timeTv = (TextView) commentLl.findViewById(R.id.publis_time_tv);
TextView contentTv = (TextView) commentLl.findViewById(R.id.comment_content_tv);
TextView userfulTv = (TextView) commentLl.findViewById(R.id.userful_tv);
CommonUtils.showImageWithGlideInCiv(this,civ,mOrderDetail.getComment().getUser().getImage());
userNameTv.setText(mOrderDetail.getComment().getUser().getName());
timeTv.setText(mOrderDetail.getComment().getDate());
contentTv.setText(mOrderDetail.getComment().getContent());
userfulTv.setText(getString(R.string.useful) + mOrderDetail.getComment().getUseful_number() + getString(R.string.useful2));
ratingBar.setStar(mOrderDetail.getComment().getScore());
}
//返回要添加的view的位置
private int getInflatePosition(){
return goodLl.indexOfChild(goodLlBottomDivider);
}
//获取订单详情
private void getOrderDetail(){
toggleShowLoading(true,null);
if(!NetUtils.isNetworkConnected(this)){
showNetWorkError();
toggleNetworkError(true,getOrderDetailClickListener);
return;
}
ApiManager.getService(this).getOrderDetail(order_id, new Callback<OrderDetail>() {
@Override
public void success(OrderDetail orderDetail, Response response) {
if(orderDetail != null && !actDestory){
toggleRestore();
mOrderDetail = orderDetail;
setOrderInfoIntoViews();
}
}
@Override
public void failure(RetrofitError error) {
showInnerError(error);
toggleShowEmpty(true,null,getOrderDetailClickListener);
}
});
}
//取消订单(退款)
private void cancelOrder(){
if(!NetUtils.isNetworkConnected(this)){
showNetWorkError();
return;
}
ApiManager.getService(this).cancelOrder(mOrderDetail.get_id(), new Callback<CommonStatusRes>() {
@Override
public void success(CommonStatusRes commonStatusRes, Response response) {
if (commonStatusRes != null && !actDestory) {
progressDialog.dismiss();
showToast(getString(R.string.cancel_order_success));
resetViews();
}
}
@Override
public void failure(RetrofitError error) {
showInnerError(error);
}
});
}
private void setOrderInfoIntoViews(){
switch (mOrderDetail.getStatus()){
case -1://退款中
initRefundViews();
initRefundListeners();
break;
case 0://订单取消(已退款)
initRefundViews();
initRefundListeners();
break;
case 1://未付款
initUnpaidViews();
initUnpaidListeners();
break;
case 2://未消费
initUnconsumeViews();
initUnconsumeListeners();
break;
case 3://未评价
initUncommentViews();
initUncommentListeners();
break;
case 4://已评价
initAlreadyCommentViews();
break;
}
//把订单的数据填写到view中
CommonUtils.showImageWithGlide(this, goodImageIv, mOrderDetail.getGood().getImage());
if(mOrderDetail.getQuantity() > 1){
goodNameTv.setText(mOrderDetail.getGood().getName() + "*" + mOrderDetail.getQuantity());
}else{
goodNameTv.setText(mOrderDetail.getGood().getName());
}
float pricetotalBR = (float)(mOrderDetail.getGood().getOriginal_price() * mOrderDetail.getQuantity()) / 100;
priceBeforeReduceTv.setText(getString(R.string.RMB) + pricetotalBR);
totalPriceTv.setText(getString(R.string.RMB) + (float) mOrderDetail.getTotal_price() / 100);
CommonUtils.showImageWithGlideInCiv(this, shopImageCiv, mOrderDetail.getShop().getShop_image());
shopNameTv.setText(mOrderDetail.getShop().getName());
orderIdTv.setText(mOrderDetail.get_id());
orderTimeTv.setText(mOrderDetail.getTime());
buyerPhoneTv.setText(mOrderDetail.getBuyer().getPhone_num());
locationTv.setText(mOrderDetail.getBuyer().getLocation());
float priceDiscout = (float)(mOrderDetail.getGood().getOriginal_price() * mOrderDetail.getQuantity() - mOrderDetail.getTotal_price()) / 100;
discountTv.setText(getString(R.string.RMB) + priceDiscout);
remarkTv.setText(mOrderDetail.getRemark());
goodRl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Bundle bundle = new Bundle();
bundle.putString(GoodDetailAct.GOOD_ID, mOrderDetail.getGood().get_id());
readyGo(GoodDetailAct.class, bundle);
}
});
shopRl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Bundle bundle = new Bundle();
bundle.putString(ShopShowGoodsAct.SHOP_ID, mOrderDetail.getShop().getShop_id());
bundle.putString(ShopShowGoodsAct.SHOP_NAME, mOrderDetail.getShop().getName());
readyGo(ShopShowGoodsAct.class, bundle);
}
});
}
private void intPayAct(String order_name,String order_id,float total_price,float rest_to_pay){
Bundle bundle = new Bundle();
bundle.putString(OrderPayAct.ORDER_NAME, order_name);
bundle.putString(OrderPayAct.ORDER_ID, order_id);
bundle.putFloat(OrderPayAct.ORDER_TOTAL_PRICE, total_price);
bundle.putFloat(OrderPayAct.REST_TO_PAY, rest_to_pay);
readyGoForResult(OrderPayAct.class, GO_PAY, bundle);
}
private void inCommentAct(String order_id,String good_id){
Bundle bundle = new Bundle();
bundle.putString(CommentAct.ORDER_ID, order_id);
bundle.putString(CommentAct.GOOD_ID, good_id);
readyGoForResult(CommentAct.class, GO_COMMENT, bundle);
}
//初始化退款确认框
private void initCancelOrderMsgDialog(){
if(msgDialog != null){
return;
}
msgDialog = new MsgDialog(this);
msgDialog.setContent(getString(R.string.confirm_cancel_order));
msgDialog.setNegativeButton(new View.OnClickListener() {
@Override
public void onClick(View v) {
msgDialog.dismiss();
}
});
msgDialog.setPositiveButton(new View.OnClickListener() {
@Override
public void onClick(View v) {
initProgressDialog();
msgDialog.dismiss();
progressDialog.show();
cancelOrder();
}
});
}
private void initProgressDialog(){
if(progressDialog != null){
return;
}
progressDialog = new ProgressDialog(this);
progressDialog.setContent(getString(R.string.in_cancel_order));
}
private View.OnClickListener getOrderDetailClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
getOrderDetail();
}
};
@Override
protected void onDestroy() {
actDestory = true;
super.onDestroy();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == GO_PAY && resultCode == RESULT_OK){
//将原来添加进来的视图删除,再重新获取数据
resetViews();
}else if(requestCode == GO_COMMENT && resultCode == RESULT_OK){
resetViews();
}
}
private void resetViews(){
orderStateChange = true;//订单状态发生改变
goodLl.removeViewAt(getInflatePosition() - 1);
getOrderDetail();
}
@Override
public void onBackPressed() {
if(orderStateChange){
setResult(RESULT_OK);
}else{
setResult(RESULT_CANCELED);
}
super.onBackPressed();
}
}