package com.commonsensenet.realfarm.actions;
import java.util.Calendar;
import java.util.List;
import android.os.Bundle;
import android.view.View;
import com.actionbarsherlock.view.MenuItem;
import com.commonsensenet.realfarm.DataFormActivity;
import com.commonsensenet.realfarm.Global;
import com.commonsensenet.realfarm.R;
import com.commonsensenet.realfarm.dataaccess.RealFarmDatabase;
import com.commonsensenet.realfarm.dataaccess.RealFarmProvider;
import com.commonsensenet.realfarm.model.Resource;
import com.commonsensenet.realfarm.utils.ApplicationTracker;
import com.commonsensenet.realfarm.utils.ApplicationTracker.EventType;
public class SellActionActivity extends DataFormActivity {
public static final String AMOUNT = "amount";
public static final String CROP = "crop";
public static final String DAY = "day";
public static final String DEFAULT_AMOUNT = "0";
public static final int DEFAULT_CROP = -1;
public static final String DEFAULT_DAY = "0";
public static final int DEFAULT_MONTH = -1;
public static final String DEFAULT_PRICE = "0";
public static final String DEFAULT_REMAINING_AMOUNT = "0";
public static final int DEFAULT_UNIT1 = -1;
public static final int DEFAULT_UNIT2 = -1;
public static final String MONTH = "month";
public static final String PRICE = "price";
public static final String REMAINING = "remaining";
public static final String UNIT = "unit";
public static final String UNIT2 = "unit2";
private int mAmount;
private int mCrop;
private List<Resource> mCropList;
private int mDay;
private int mMonth;
private List<Resource> mMonthList;
private int mPrice;
private int mRemaining;
private int mUnit;
private List<Resource> mUnit1List;
private int mUnit2;
private List<Resource> mUnit2List;
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.equals(mHelpItem)) {
// tracks the application usage
ApplicationTracker.getInstance().logEvent(EventType.CLICK,
Global.userId, getLogTag(), item.getTitle());
playAudio(R.raw.sell_help, true);
return true;
} else { // asks the parent.
return super.onOptionsItemSelected(item);
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState, R.layout.act_sell_action);
mCropList = mDataProvider.getCropTypes();
mMonthList = mDataProvider
.getResources(RealFarmDatabase.RESOURCE_TYPE_MONTH);
mUnit1List = mDataProvider
.getUnits(RealFarmDatabase.ACTION_TYPE_SELL_ID);
mUnit2List = mDataProvider
.getUnits(RealFarmDatabase.ACTION_TYPE_SELL_ID);
playAudio(R.raw.clickingselling);
// adds the fields to validate to the map.
mResultsMap.put(CROP, DEFAULT_CROP);
mResultsMap.put(DAY, DEFAULT_DAY);
mResultsMap.put(MONTH, DEFAULT_MONTH);
mResultsMap.put(AMOUNT, DEFAULT_AMOUNT);
mResultsMap.put(UNIT, DEFAULT_UNIT1);
mResultsMap.put(PRICE, DEFAULT_PRICE);
mResultsMap.put(REMAINING, DEFAULT_REMAINING_AMOUNT);
mResultsMap.put(UNIT2, DEFAULT_UNIT2);
View item1 = findViewById(R.id.dlg_lbl_crop_sell);
View item2 = findViewById(R.id.dlg_lbl_date_sell);
View item3 = findViewById(R.id.dlg_lbl_month_sell);
View item4 = findViewById(R.id.dlg_lbl_unit_no_sell);
View item5 = findViewById(R.id.dlg_lbl_unit_sell);
View item6 = findViewById(R.id.dlg_lbl_price_sell);
View item7 = findViewById(R.id.dlg_lbl_unit_no_rem_sell);
View item8 = findViewById(R.id.dlg_lbl_unit_rem_sell);
item1.setOnLongClickListener(this);
item2.setOnLongClickListener(this);
item3.setOnLongClickListener(this);
item4.setOnLongClickListener(this);
item5.setOnLongClickListener(this);
item6.setOnLongClickListener(this);
item7.setOnLongClickListener(this);
item8.setOnLongClickListener(this);
View crop = findViewById(R.id.crop_sell_tr);
View date = findViewById(R.id.date_sell_tr);
View quantity = findViewById(R.id.quant_sell_tr);
View priceperquint = findViewById(R.id.price_sell_tr);
View remain = findViewById(R.id.rem_quant_sell_tr);
crop.setOnLongClickListener(this);
date.setOnLongClickListener(this);
quantity.setOnLongClickListener(this);
priceperquint.setOnLongClickListener(this);
remain.setOnLongClickListener(this);
item1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
stopAudio();
ApplicationTracker.getInstance().logEvent(EventType.CLICK,
Global.userId, getLogTag(),
getResources().getResourceEntryName(v.getId()));
displayDialog(v, mCropList, CROP, "Select the crop",
R.raw.select_the_crop, R.id.dlg_lbl_crop_sell,
R.id.crop_sell_tr, 0);
}
});
item2.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
stopAudio();
ApplicationTracker.getInstance().logEvent(EventType.CLICK,
Global.userId, getLogTag(),
getResources().getResourceEntryName(v.getId()));
displayDialogNP("Choose the day", DAY, R.raw.dateinfo, 1, 31,
Calendar.getInstance().get(Calendar.DAY_OF_MONTH), 1,
0, R.id.dlg_lbl_date_sell, R.id.date_sell_tr, R.raw.ok,
R.raw.cancel, R.raw.day_ok, R.raw.day_cancel);
}
});
item3.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
stopAudio();
ApplicationTracker.getInstance().logEvent(EventType.CLICK,
Global.userId, getLogTag(),
getResources().getResourceEntryName(v.getId()));
displayDialog(v, mMonthList, MONTH, "Select the month",
R.raw.choosethemonth, R.id.dlg_lbl_month_sell,
R.id.date_sell_tr, 0);
}
});
item4.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
stopAudio();
ApplicationTracker.getInstance().logEvent(EventType.CLICK,
Global.userId, getLogTag(),
getResources().getResourceEntryName(v.getId()));
displayDialogNP("Choose the number of bags", AMOUNT,
R.raw.noofbags, 0, 200, 0, 1, 0,
R.id.dlg_lbl_unit_no_sell, R.id.quant_sell_tr,
R.raw.ok, R.raw.cancel, R.raw.bag_ok, R.raw.bag_cancel);
}
});
item5.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
stopAudio();
ApplicationTracker.getInstance().logEvent(EventType.CLICK,
Global.userId, getLogTag(),
getResources().getResourceEntryName(v.getId()));
displayDialog(v, mUnit1List, UNIT, "Select the unit",
R.raw.selecttheunits, R.id.dlg_lbl_unit_sell,
R.id.quant_sell_tr, 2);
}
});
item6.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
stopAudio();
ApplicationTracker.getInstance().logEvent(EventType.CLICK,
Global.userId, getLogTag(),
getResources().getResourceEntryName(v.getId()));
displayDialogNP("Enter the price", PRICE,
R.raw.enterpricedetails, 0, 9999, 3200, 50, 0,
R.id.dlg_lbl_price_sell, R.id.price_sell_tr, R.raw.ok,
R.raw.cancel, R.raw.pricesaved, R.raw.pricenotsaved);
}
});
item7.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
stopAudio();
ApplicationTracker.getInstance().logEvent(EventType.CLICK,
Global.userId, getLogTag(),
getResources().getResourceEntryName(v.getId()));
displayDialogNP("Choose the number of bags", REMAINING,
R.raw.noofbags, 0, 200, 0, 1, 0,
R.id.dlg_lbl_unit_no_rem_sell, R.id.rem_quant_sell_tr,
R.raw.ok, R.raw.cancel, R.raw.bag_ok, R.raw.bag_cancel);
}
});
item8.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
stopAudio();
ApplicationTracker.getInstance().logEvent(EventType.CLICK,
Global.userId, getLogTag(),
getResources().getResourceEntryName(v.getId()));
displayDialog(v, mUnit2List, UNIT2, "Select the unit",
R.raw.selecttheunits, R.id.dlg_lbl_unit_rem_sell,
R.id.rem_quant_sell_tr, 2);
}
});
}
@Override
public boolean onLongClick(View v) {
ApplicationTracker.getInstance().logEvent(EventType.LONG_CLICK,
Global.userId, getLogTag(),
getResources().getResourceEntryName(v.getId()));
// forces the sound to play since its the long click
if (v.getId() == R.id.dlg_lbl_crop_sell) {
if ((Integer) mResultsMap.get(CROP) == DEFAULT_CROP)
playAudio(R.raw.select_the_crop, true);
else
playAudio(mCropList.get(((Integer) mResultsMap.get(CROP)))
.getAudio(), true);
} else if (v.getId() == R.id.dlg_lbl_date_sell) {
if (mResultsMap.get(DAY).equals(DEFAULT_DAY))
playAudio(R.raw.dateinfo, true);
else {
playInteger(Integer.valueOf(mResultsMap.get(DAY).toString()));
playSound();
}
} else if (v.getId() == R.id.dlg_lbl_month_sell) {
if ((Integer) mResultsMap.get(MONTH) == DEFAULT_MONTH)
playAudio(R.raw.choosethemonth, true);
else
playAudio(mMonthList.get(((Integer) mResultsMap.get(MONTH)))
.getAudio(), true);
} else if (v.getId() == R.id.dlg_lbl_unit_no_sell) {
if (mResultsMap.get(AMOUNT).equals(DEFAULT_AMOUNT))
playAudio(R.raw.select_unit_number, true);
else {
playInteger(Integer.valueOf(mResultsMap.get(AMOUNT).toString()));
playSound();
}
} else if (v.getId() == R.id.dlg_lbl_unit_sell) {
if ((Integer) mResultsMap.get(UNIT) == DEFAULT_UNIT1)
playAudio(R.raw.selecttheunits, true);
else
playAudio(mUnit1List.get(((Integer) mResultsMap.get(UNIT)))
.getAudio(), true);
} else if (v.getId() == R.id.dlg_lbl_price_sell) {
if (mResultsMap.get(PRICE).equals(DEFAULT_PRICE))
playAudio(R.raw.enterpricedetails, true);
else
playAudio(R.raw.problems, true);
} else if (v.getId() == R.id.dlg_lbl_unit_no_rem_sell) {
if (mResultsMap.get(REMAINING).equals(DEFAULT_REMAINING_AMOUNT))
playAudio(R.raw.select_unit_number, true);
else
playInteger(Integer.valueOf(mResultsMap.get(AMOUNT).toString()));
} else if (v.getId() == R.id.dlg_lbl_unit_rem_sell) {
if ((Integer) mResultsMap.get(UNIT2) == DEFAULT_UNIT2) {
playAudio(R.raw.selecttheunits, true);
} else {
playAudio(mUnit2List.get(((Integer) mResultsMap.get(UNIT2)))
.getAudio(), true);
}
}
else if (v.getId() == R.id.date_sell_tr) {
playAudio(R.raw.date, true);
} else if (v.getId() == R.id.quant_sell_tr) {
playAudio(R.raw.quantity, true);
} else if (v.getId() == R.id.crop_sell_tr) {
playAudio(R.raw.crop, true);
} else if (v.getId() == R.id.date_sell_tr) {
playAudio(R.raw.date, true);
} else if (v.getId() == R.id.price_sell_tr) {
playAudio(R.raw.priceperquintal, true);
} else if (v.getId() == R.id.rem_quant_sell_tr) {
playAudio(R.raw.remaining, true);
} else {
return super.onLongClick(v);
}
return true;
}
@Override
protected Boolean validateForm() {
// gets the values to validate.
mDay = Integer.valueOf(mResultsMap.get(DAY).toString());
mAmount = Integer.valueOf(mResultsMap.get(AMOUNT).toString());
mPrice = Integer.valueOf(mResultsMap.get(PRICE).toString());
mRemaining = Integer.valueOf(mResultsMap.get(REMAINING).toString());
boolean isValid = true;
if ((Integer) mResultsMap.get(CROP) != DEFAULT_CROP) {
highlightField(R.id.crop_sell_tr, false);
} else {
ApplicationTracker.getInstance().logEvent(EventType.ERROR,
Global.userId, CROP);
isValid = false;
highlightField(R.id.crop_sell_tr, true);
}
if ((Integer) mResultsMap.get(MONTH) != DEFAULT_MONTH
&& mDay > Integer.parseInt(DEFAULT_DAY)
&& validDate(mDay,
mMonthList.get((Integer) mResultsMap.get(MONTH))
.getId())) {
highlightField(R.id.date_sell_tr, false);
} else {
ApplicationTracker.getInstance().logEvent(EventType.ERROR,
Global.userId, MONTH, DAY);
isValid = false;
highlightField(R.id.date_sell_tr, true);
}
if ((Integer) mResultsMap.get(UNIT) != DEFAULT_UNIT1
&& mAmount > Integer.parseInt(DEFAULT_AMOUNT)) {
highlightField(R.id.quant_sell_tr, false);
} else {
ApplicationTracker.getInstance().logEvent(EventType.ERROR,
Global.userId, UNIT, AMOUNT);
isValid = false;
highlightField(R.id.quant_sell_tr, true);
}
if (mPrice > Integer.parseInt(DEFAULT_PRICE)) {
highlightField(R.id.price_sell_tr, false);
} else {
ApplicationTracker.getInstance().logEvent(EventType.ERROR,
Global.userId, PRICE);
isValid = false;
highlightField(R.id.price_sell_tr, true);
}
// if the quantity is 0 the unit is useless.
if (((Integer) mResultsMap.get(UNIT2) != DEFAULT_UNIT2 || mRemaining == 0)
&& mRemaining > -1) {
highlightField(R.id.rem_quant_sell_tr, false);
} else {
ApplicationTracker.getInstance().logEvent(EventType.ERROR,
Global.userId, UNIT2, REMAINING);
isValid = false;
highlightField(R.id.rem_quant_sell_tr, true);
}
// validates the form.
if (isValid) {
ApplicationTracker.getInstance().logEvent(EventType.CLICK,
Global.userId, getLogTag(), "data entered");
// gets the values to insert.
mCrop = mCropList.get((Integer) mResultsMap.get(CROP)).getId();
mMonth = mMonthList.get((Integer) mResultsMap.get(MONTH)).getId();
mUnit = mUnit1List.get((Integer) mResultsMap.get(UNIT)).getId();
if (mRemaining == 0) {
mUnit2 = RealFarmProvider.NONE;
} else {
mUnit2 = mUnit2List.get((Integer) mResultsMap.get(UNIT2))
.getId();
}
long result = mDataProvider.addSellAction(Global.userId, 0, mCrop,
mAmount, mRemaining, mUnit, mUnit2, mPrice,
getDate(mDay, mMonth), Global.isAdmin);
return result != -1;
}
return false;
}
}