package com.biznow.ordernow;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextSwitcher;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ViewSwitcher.ViewFactory;
import com.biznow.ordernow.R;
import com.biznow.ordernow.adapter.MyOrderAdapter;
import com.biznow.ordernow.fragments.ConfirmOrderDialogFragment;
import com.biznow.ordernow.model.MyOrderItem;
import com.biznow.ordernow.model.Order;
import com.biznow.ordernow.model.OrderNowConstants;
import com.biznow.ordernow.model.OrderStatus;
import com.data.menu.CustomerOrderWrapper;
import com.google.gson.Gson;
import com.util.AsyncNetwork;
import com.util.AsyncURLHandler;
import com.util.OrderNowUtilities;
import com.util.URLBuilder;
import com.util.Utilities;
public class MyOrderActivity extends Activity implements AsyncURLHandler {
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// Respond to the action bar's Up/Home button
case android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle("My Order");
getActionBar().setDisplayHomeAsUpEnabled(true);
ApplicationState applicationContext = (ApplicationState) getApplicationContext();
ArrayList<MyOrderItem> myOrderItemList = ApplicationState.getMyOrderItems(applicationContext);
setContentView(R.layout.my_order_summary);
Button addMoreItemsBtn = (Button) findViewById(R.id.addMoreItemsButton);
Button cancelOrderBtn = (Button) findViewById(R.id.cancelOrderButton);
Button confirmOrderBtn = (Button) findViewById(R.id.confirmOrderButton);
Animation in = AnimationUtils.loadAnimation(this, android.R.anim.fade_in);
Animation out = AnimationUtils.loadAnimation(this, android.R.anim.fade_out);
final TextSwitcher totalAmount = (TextSwitcher) findViewById(R.id.totalAmount);
totalAmount.setFactory(new ViewFactory() {
@Override
public View makeView() {
TextView t = new TextView(MyOrderActivity.this);
t.setTextColor(getResources().getColor(R.color.green));
t.setTextSize(19);
return t;
}
});
totalAmount.setInAnimation(in);
totalAmount.setOutAnimation(out);
addMoreItemsBtn.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
//Cannot use onBackPressed() here due to dependency with Past Orders Page
ApplicationState.setOpenCategoryDrawer((ApplicationState) v.getContext().getApplicationContext(), false);
Intent intent = new Intent(getApplicationContext(), FoodMenuActivity.class);
startActivity(intent);
}
});
cancelOrderBtn.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(MyOrderActivity.this);
builder.setTitle("Cancel Order");
builder.setMessage("Are you sure you want to cancel the order ?");
builder.setPositiveButton(R.string.ok, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), "Order has been canceled.", Toast.LENGTH_LONG).show();
ApplicationState.setFoodMenuItemQuantityMap((ApplicationState)getApplicationContext(), new HashMap<String, MyOrderItem>());
Intent intent = new Intent(getApplicationContext(), FoodMenuActivity.class);
startActivity(intent);
finish();
}
});
builder.setNegativeButton(R.string.cancel, null);
AlertDialog alert = builder.create();
alert.show();
}
});
confirmOrderBtn.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
showConfirmOrderDialog();
}
});
Float totalOrderAmount = (float) 0.00;
for (MyOrderItem myOrderItem: myOrderItemList) {
totalOrderAmount = totalOrderAmount + (myOrderItem.getQuantity() * myOrderItem.getFoodMenuItem().getItemPrice());
}
totalAmount.setText(OrderNowConstants.INDIAN_RUPEE_UNICODE + " " + Float.toString(totalOrderAmount));
ListView myOrderListView = (ListView) findViewById(R.id.listMyOrder);
MyOrderAdapter myOrderAdapter = new MyOrderAdapter(MyOrderActivity.this, myOrderItemList);
myOrderListView.setAdapter(myOrderAdapter);
}
void showConfirmOrderDialog() {
new ConfirmOrderDialogFragment().show(getFragmentManager(), "confirmOrderEditText");
}
public void doPositiveClick(String orderNote) {
ApplicationState applicationContext = (ApplicationState)getApplicationContext();
ArrayList<MyOrderItem> myOrderItemList = ApplicationState.getMyOrderItems(applicationContext);
String restaurantId = OrderNowUtilities.getKeyFromSharedPreferences(applicationContext.getApplicationContext(), OrderNowConstants.KEY_ACTIVE_RESTAURANT_ID);
Log.i("MyOrderActivity ", restaurantId);
CustomerOrderWrapper customerOrderWrapper = new CustomerOrderWrapper(myOrderItemList, orderNote);
ApplicationState.setCustomerOrderWrapper(applicationContext, customerOrderWrapper);
Gson gs = new Gson();
String order = gs.toJson(customerOrderWrapper.getCustomerOrder(applicationContext));
String encoded = "";
try {
encoded = URLEncoder.encode(order,"UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
String url = new URLBuilder().addPath(URLBuilder.Path.order)
.addParam(URLBuilder.URLParam.order, encoded).build();
new AsyncNetwork(this, null).execute(url);
//start other activity
Intent intent = new Intent(getApplicationContext(), MyParentOrderActivity.class);
startActivity(intent);
finish();
}
public void doNegativeClick() {}
@Override
public void handleException(Exception e) {
OrderNowUtilities.generateNotification(getApplicationContext(), "Your Order was not Sent", MyOrderActivity.class);
ApplicationState applicationContext = (ApplicationState) getApplicationContext();
ApplicationState.setCustomerOrderWrapper(applicationContext, null);
}
@Override
public void handleSuccess(String output) {
try {
Utilities.info("handleSuccess output " + output);
Toast.makeText(getApplicationContext(), "Order has been successfully sent.", Toast.LENGTH_LONG).show();
ApplicationState applicationContext = (ApplicationState) getApplicationContext();
CustomerOrderWrapper customerOrderWrapper = ApplicationState.getCustomerOrderWrapper(applicationContext);
Utilities.info("handleSuccess customerOrderWrapper " + customerOrderWrapper);
JSONObject json = new JSONObject(output);
String orderId = (String) json.get(URLBuilder.URLParam.orderId.toString());
ApplicationState.setActiveOrderId(applicationContext, orderId);
// subOrderId not used currently
Integer subOrderId = (Integer) json.get(URLBuilder.URLParam.subOrderId.toString());
customerOrderWrapper.setOrder(new Order(orderId, subOrderId));
Utilities.info("Order response: " + output + " orderId " + orderId + " subOrderId " + subOrderId);
ApplicationState.cleanFoodMenuItemQuantityMap(applicationContext);
ApplicationState.setCustomerOrderWrapper(applicationContext, customerOrderWrapper);
ApplicationState.cleanFoodMenuItemQuantityMap(applicationContext);
//cut from MyParentOrderActivity
ArrayList<CustomerOrderWrapper> subOrderList = OrderNowUtilities.getObjectFromSharedPreferences(
getApplicationContext(), OrderNowConstants.KEY_ACTIVE_SUB_ORDER_LIST);
if (subOrderList == null) {
subOrderList = new ArrayList<CustomerOrderWrapper>();
}
if (customerOrderWrapper != null) {
customerOrderWrapper.modifyItemStatus(OrderStatus.Sent, null);
subOrderList.add(customerOrderWrapper);
ApplicationState.setCustomerOrderWrapper(applicationContext, null);
// Only update Shared Prefs Object when there is a new suborder
OrderNowUtilities.putObjectToSharedPreferences(getApplicationContext(),
OrderNowConstants.KEY_ACTIVE_SUB_ORDER_LIST, subOrderList);
OrderNowUtilities.orderStatusResetReceiver(getApplicationContext(), "Order Sent", true);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}