package com.refresh.pos.ui.inventory;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import android.annotation.SuppressLint;
import android.app.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Build;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TabHost;
import android.widget.TextView;
import android.widget.Toast;
import com.refresh.pos.R;
import com.refresh.pos.domain.DateTimeStrategy;
import com.refresh.pos.domain.inventory.Inventory;
import com.refresh.pos.domain.inventory.Product;
import com.refresh.pos.domain.inventory.ProductCatalog;
import com.refresh.pos.domain.inventory.ProductLot;
import com.refresh.pos.domain.inventory.Stock;
import com.refresh.pos.techicalservices.NoDaoSetException;
/**
* UI for shows the datails of each Product.
* @author Refresh Team
*
*/
@SuppressLint("NewApi")
public class ProductDetailActivity extends Activity {
private ProductCatalog productCatalog;
private Stock stock;
private Product product;
private List<Map<String, String>> stockList;
private EditText nameBox;
private EditText barcodeBox;
private TextView stockSumBox;
private EditText priceBox;
private Button addProductLotButton;
private Button submitEditButton;
private Button cancelEditButton;
private Button openEditButton;
private TabHost mTabHost;
private ListView stockListView;
private String id;
private String[] remember;
private AlertDialog.Builder popDialog;
private LayoutInflater inflater ;
private Resources res;
private EditText costBox;
private EditText quantityBox;
private Button confirmButton;
private Button clearButton;
private View Viewlayout;
private AlertDialog alert;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.detail_menu, menu);
return true;
}
@SuppressLint("NewApi")
private void initiateActionBar() {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setTitle(res.getString(R.string.product_detail));
actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#33B5E5")));
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
res = getResources();
initiateActionBar();
try {
stock = Inventory.getInstance().getStock();
productCatalog = Inventory.getInstance().getProductCatalog();
} catch (NoDaoSetException e) {
e.printStackTrace();
}
id = getIntent().getStringExtra("id");
product = productCatalog.getProductById(Integer.parseInt(id));
initUI(savedInstanceState);
remember = new String[3];
nameBox.setText(product.getName());
priceBox.setText(product.getUnitPrice() + "");
barcodeBox.setText(product.getBarcode());
}
/**
* Initiate this UI.
* @param savedInstanceState
*/
private void initUI(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_productdetail_main);
stockListView = (ListView) findViewById(R.id.stockListView);
nameBox = (EditText) findViewById(R.id.nameBox);
priceBox = (EditText) findViewById(R.id.priceBox);
barcodeBox = (EditText) findViewById(R.id.barcodeBox);
stockSumBox = (TextView) findViewById(R.id.stockSumBox);
submitEditButton = (Button) findViewById(R.id.submitEditButton);
submitEditButton.setVisibility(View.INVISIBLE);
cancelEditButton = (Button) findViewById(R.id.cancelEditButton);
cancelEditButton.setVisibility(View.INVISIBLE);
openEditButton = (Button) findViewById(R.id.openEditButton);
openEditButton.setVisibility(View.VISIBLE);
addProductLotButton = (Button) findViewById(R.id.addProductLotButton);
mTabHost = (TabHost) findViewById(android.R.id.tabhost);
mTabHost.setup();
mTabHost.addTab(mTabHost.newTabSpec("tab_test1").setIndicator(res.getString(R.string.product_detail))
.setContent(R.id.tab1));
mTabHost.addTab(mTabHost.newTabSpec("tab_test2").setIndicator(res.getString(R.string.stock))
.setContent(R.id.tab2));
mTabHost.setCurrentTab(0);
popDialog = new AlertDialog.Builder(this);
inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);
addProductLotButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showAddProductLot();
}
});
openEditButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
edit();
}
});
submitEditButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
submitEdit();
}
});
cancelEditButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
cancelEdit();
}
});
}
/**
* Show list.
* @param list
*/
private void showList(List<ProductLot> list) {
stockList = new ArrayList<Map<String, String>>();
for (ProductLot productLot : list) {
stockList.add(productLot.toMap());
}
SimpleAdapter sAdap = new SimpleAdapter(ProductDetailActivity.this, stockList,
R.layout.listview_stock, new String[] { "dateAdded",
"cost", "quantity" }, new int[] {
R.id.dateAdded, R.id.cost, R.id.quantity, });
stockListView.setAdapter(sAdap);
}
@Override
protected void onResume() {
super.onResume();
int productId = Integer.parseInt(id);
stockSumBox.setText(stock.getStockSumById(productId)+"");
showList(stock.getProductLotByProductId(productId));
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
this.finish();
return true;
case R.id.action_edit:
edit();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
/**
* Submit editing.
*/
private void submitEdit() {
nameBox.setFocusable(false);
nameBox.setFocusableInTouchMode(false);
nameBox.setBackgroundColor(Color.parseColor("#87CEEB"));
priceBox.setFocusable(false);
priceBox.setFocusableInTouchMode(false);
priceBox.setBackgroundColor(Color.parseColor("#87CEEB"));
barcodeBox.setFocusable(false);
barcodeBox.setFocusableInTouchMode(false);
barcodeBox.setBackgroundColor(Color.parseColor("#87CEEB"));
product.setName(nameBox.getText().toString());
if(priceBox.getText().toString().equals(""))
priceBox.setText("0.0");
product.setUnitPrice(Double.parseDouble(priceBox.getText().toString()));
product.setBarcode(barcodeBox.getText().toString());
productCatalog.editProduct(product);
submitEditButton.setVisibility(View.INVISIBLE);
cancelEditButton.setVisibility(View.INVISIBLE);
openEditButton.setVisibility(View.VISIBLE);
}
/**
* Cancel editing.
*/
private void cancelEdit() {
nameBox.setFocusable(false);
nameBox.setFocusableInTouchMode(false);
nameBox.setBackgroundColor(Color.parseColor("#87CEEB"));
priceBox.setFocusable(false);
priceBox.setFocusableInTouchMode(false);
priceBox.setBackgroundColor(Color.parseColor("#87CEEB"));
barcodeBox.setFocusable(false);
barcodeBox.setFocusableInTouchMode(false);
barcodeBox.setBackgroundColor(Color.parseColor("#87CEEB"));
submitEditButton.setVisibility(View.INVISIBLE);
cancelEditButton.setVisibility(View.INVISIBLE);
nameBox.setText(remember[0]);
priceBox.setText(remember[1]);
barcodeBox.setText(remember[2]);
openEditButton.setVisibility(View.VISIBLE);
}
/**
* Edit
*/
private void edit() {
nameBox.setFocusable(true);
nameBox.setFocusableInTouchMode(true);
nameBox.setBackgroundColor(Color.parseColor("#FFBB33"));
priceBox.setFocusable(true);
priceBox.setFocusableInTouchMode(true);
priceBox.setBackgroundColor(Color.parseColor("#FFBB33"));
barcodeBox.setFocusable(true);
barcodeBox.setFocusableInTouchMode(true);
barcodeBox.setBackgroundColor(Color.parseColor("#FFBB33"));
remember[0] = nameBox.getText().toString();
remember[1] = priceBox.getText().toString();
remember[2] = barcodeBox.getText().toString();
submitEditButton.setVisibility(View.VISIBLE);
cancelEditButton.setVisibility(View.VISIBLE);
openEditButton.setVisibility(View.INVISIBLE);
}
/**
* Show adding product lot.
*/
private void showAddProductLot(){
Viewlayout = inflater.inflate(R.layout.layout_addproductlot,
(ViewGroup) findViewById(R.id.addProdutlot_dialog));
popDialog.setView(Viewlayout);
costBox = (EditText) Viewlayout.findViewById(R.id.costBox);
quantityBox = (EditText) Viewlayout.findViewById(R.id.quantityBox);
confirmButton = (Button) Viewlayout.findViewById(R.id.confirmButton);
clearButton = (Button) Viewlayout.findViewById(R.id.clearButton);
confirmButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
if (quantityBox.getText().toString().equals("") || costBox.getText().toString().equals("")) {
Toast.makeText(ProductDetailActivity.this,
res.getString(R.string.please_input_all), Toast.LENGTH_SHORT)
.show();
} else {
boolean success = stock.addProductLot(
DateTimeStrategy.getCurrentTime(),
Integer.parseInt(quantityBox.getText().toString()),
product,
Double.parseDouble(costBox.getText().toString()));
if (success) {
Toast.makeText(ProductDetailActivity.this, res.getString(R.string.success), Toast.LENGTH_SHORT).show();
costBox.setText("");
quantityBox.setText("");
onResume();
alert.dismiss();
} else {
Toast.makeText(ProductDetailActivity.this, res.getString(R.string.fail) ,Toast.LENGTH_SHORT).show();
}
}
}
});
clearButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
if(quantityBox.getText().toString().equals("") && costBox.getText().toString().equals("")){
alert.dismiss();
onResume();
}
else{
costBox.setText("");
quantityBox.setText("");
}
}
});
alert = popDialog.create();
alert.show();
}
}