package com.refresh.pos.ui.inventory;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentIntegratorSupportV4;
import com.google.zxing.integration.android.IntentResult;
import com.refresh.pos.R;
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.sale.Register;
import com.refresh.pos.techicalservices.DatabaseExecutor;
import com.refresh.pos.techicalservices.Demo;
import com.refresh.pos.techicalservices.NoDaoSetException;
import com.refresh.pos.ui.MainActivity;
import com.refresh.pos.ui.component.ButtonAdapter;
import com.refresh.pos.ui.component.UpdatableFragment;
/**
* UI for Inventory, shows list of Product in the ProductCatalog.
* Also use for a sale process of adding Product into sale.
*
* @author Refresh Team
*
*/
@SuppressLint("ValidFragment")
public class InventoryFragment extends UpdatableFragment {
protected static final int SEARCH_LIMIT = 0;
private ListView inventoryListView;
private ProductCatalog productCatalog;
private List<Map<String, String>> inventoryList;
private Button addProductButton;
private EditText searchBox;
private Button scanButton;
private ViewPager viewPager;
private Register register;
private MainActivity main;
private UpdatableFragment saleFragment;
private Resources res;
/**
* Construct a new InventoryFragment.
* @param saleFragment
*/
public InventoryFragment(UpdatableFragment saleFragment) {
super();
this.saleFragment = saleFragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
try {
productCatalog = Inventory.getInstance().getProductCatalog();
register = Register.getInstance();
} catch (NoDaoSetException e) {
e.printStackTrace();
}
View view = inflater.inflate(R.layout.layout_inventory, container, false);
res = getResources();
inventoryListView = (ListView) view.findViewById(R.id.productListView);
addProductButton = (Button) view.findViewById(R.id.addProductButton);
scanButton = (Button) view.findViewById(R.id.scanButton);
searchBox = (EditText) view.findViewById(R.id.searchBox);
main = (MainActivity) getActivity();
viewPager = main.getViewPager();
initUI();
return view;
}
/**
* Initiate this UI.
*/
private void initUI() {
addProductButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showPopup(v);
}
});
searchBox.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable s) {
if (s.length() >= SEARCH_LIMIT) {
search();
}
}
public void beforeTextChanged(CharSequence s, int start, int count, int after){}
public void onTextChanged(CharSequence s, int start, int before, int count){}
});
inventoryListView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> myAdapter, View myView, int position, long mylng) {
int id = Integer.parseInt(inventoryList.get(position).get("id").toString());
register.addItem(productCatalog.getProductById(id), 1);
saleFragment.update();
viewPager.setCurrentItem(1);
}
});
scanButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
IntentIntegratorSupportV4 scanIntegrator = new IntentIntegratorSupportV4(InventoryFragment.this);
scanIntegrator.initiateScan();
}
});
}
/**
* Show list.
* @param list
*/
private void showList(List<Product> list) {
inventoryList = new ArrayList<Map<String, String>>();
for(Product product : list) {
inventoryList.add(product.toMap());
}
ButtonAdapter sAdap = new ButtonAdapter(getActivity().getBaseContext(), inventoryList,
R.layout.listview_inventory, new String[]{"name"}, new int[] {R.id.name}, R.id.optionView, "id");
inventoryListView.setAdapter(sAdap);
}
/**
* Search.
*/
private void search() {
String search = searchBox.getText().toString();
if (search.equals("/demo")) {
testAddProduct();
searchBox.setText("");
} else if (search.equals("/clear")) {
DatabaseExecutor.getInstance().dropAllData();
searchBox.setText("");
}
else if (search.equals("")) {
showList(productCatalog.getAllProduct());
} else {
List<Product> result = productCatalog.searchProduct(search);
showList(result);
if (result.isEmpty()) {
}
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
IntentResult scanningResult = IntentIntegrator.parseActivityResult(
requestCode, resultCode, intent);
if (scanningResult != null) {
String scanContent = scanningResult.getContents();
searchBox.setText(scanContent);
} else {
Toast.makeText(getActivity().getBaseContext(), res.getString(R.string.fail),
Toast.LENGTH_SHORT).show();
}
}
/**
* Test adding product
*/
protected void testAddProduct() {
Demo.testProduct(getActivity());
Toast.makeText(getActivity().getBaseContext(), res.getString(R.string.success),
Toast.LENGTH_SHORT).show();
}
/**
* Show popup.
* @param anchorView
*/
public void showPopup(View anchorView) {
AddProductDialogFragment newFragment = new AddProductDialogFragment(InventoryFragment.this);
newFragment.show(getFragmentManager(), "");
}
@Override
public void update() {
search();
}
@Override
public void onResume() {
super.onResume();
update();
}
}