package org.openlmis.core.view.holder;
import android.text.Html;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import org.apache.commons.lang.StringUtils;
import org.openlmis.core.LMISApp;
import org.openlmis.core.R;
import org.openlmis.core.utils.TextStyleUtil;
import org.openlmis.core.view.adapter.LotMovementAdapter;
import org.openlmis.core.view.viewmodel.InventoryViewModel;
import org.openlmis.core.view.viewmodel.UnpackKitInventoryViewModel;
import org.openlmis.core.view.widget.MovementChangeLotListView;
import roboguice.inject.InjectView;
import rx.functions.Action1;
public class UnpackKitWithLotViewHolder extends BaseViewHolder{
@InjectView(R.id.tv_kit_expected_quantity)
TextView tvKitExpectedQuantity;
@InjectView(R.id.tv_alert_quantity_message)
TextView tvQuantityMessage;
@InjectView(R.id.tv_confirm_no_stock)
TextView tvConfirmNoStock;
@InjectView(R.id.tv_confirm_has_stock)
TextView tvConfirmHasStock;
@InjectView(R.id.vg_soh_pop)
ViewGroup vg_soh_pop;
@InjectView(R.id.tv_product_name)
TextView tvProductName;
@InjectView(R.id.tv_product_unit)
TextView tvProductUnit;
@InjectView(R.id.view_lot_list)
MovementChangeLotListView lotListView;
protected InventoryViewModel viewModel;
public UnpackKitWithLotViewHolder(View itemView) {
super(itemView);
}
public void populate(final InventoryViewModel viewModel, Action1 setConfirmNoStockReceivedAction) {
this.viewModel = viewModel;
lotListView.initLotListView(viewModel, getMovementChangedListener());
initViewHolderStyle(viewModel);
setConfirmStockClickListener((UnpackKitInventoryViewModel) viewModel, setConfirmNoStockReceivedAction);
validateIfShouldShowUpEmptyLotWarning(viewModel);
updatePop(viewModel);
}
private LotMovementAdapter.MovementChangedListener getMovementChangedListener() {
return new LotMovementAdapter.MovementChangedListener() {
@Override
public void movementChange() {
updatePop(viewModel);
}
};
}
private void validateIfShouldShowUpEmptyLotWarning(InventoryViewModel inventoryViewModel) {
if (((UnpackKitInventoryViewModel) inventoryViewModel).shouldShowEmptyLotWarning()) {
vg_soh_pop.setVisibility(View.VISIBLE);
vg_soh_pop.setBackgroundResource(R.drawable.inventory_pop);
tvConfirmHasStock.setVisibility(View.GONE);
tvConfirmNoStock.setVisibility(View.VISIBLE);
tvQuantityMessage.setText(LMISApp.getContext().getResources().getString(R.string.message_no_stock_amount_change));
tvQuantityMessage.setTextColor(context.getResources().getColor(R.color.color_black));
tvKitExpectedQuantity.setTextColor(this.context.getResources().getColor(R.color.color_red));
}
if (((UnpackKitInventoryViewModel) inventoryViewModel).isConfirmedNoStockReceived()) {
vg_soh_pop.setVisibility(View.VISIBLE);
vg_soh_pop.setBackgroundResource(R.drawable.inventory_pop);
tvConfirmHasStock.setVisibility(View.VISIBLE);
tvConfirmNoStock.setVisibility(View.GONE);
tvQuantityMessage.setText(LMISApp.getContext().getResources().getString(R.string.message_no_stock_received));
tvQuantityMessage.setTextColor(context.getResources().getColor(R.color.color_black));
tvKitExpectedQuantity.setTextColor(LMISApp.getContext().getResources().getColor(R.color.color_black));
lotListView.setVisibility(View.GONE);
}
}
protected void updatePop(InventoryViewModel viewModel) {
long totalQuantity = viewModel.getLotListQuantityTotalAmount();
long kitExpectQuantity = viewModel.getKitExpectQuantity();
if (((UnpackKitInventoryViewModel) viewModel).hasLotChanged()) {
if (totalQuantity == kitExpectQuantity) {
initViewHolderStyle(viewModel);
} else {
vg_soh_pop.setVisibility(View.VISIBLE);
vg_soh_pop.setBackgroundResource(R.drawable.inventory_pop_warning);
tvConfirmHasStock.setVisibility(View.GONE);
tvConfirmNoStock.setVisibility(View.GONE);
tvKitExpectedQuantity.setTextColor(LMISApp.getContext().getResources().getColor(R.color.color_black));
tvQuantityMessage.setTextColor(context.getResources().getColor(R.color.color_warning_text_unpack_kit_pop));
if (totalQuantity > kitExpectQuantity) {
tvQuantityMessage.setText(Html.fromHtml(context.getString(R.string.label_unpack_kit_quantity_more_than_expected)));
} else {
tvQuantityMessage.setText(Html.fromHtml(context.getString(R.string.label_unpack_kit_quantity_less_than_expected)));
}
}
} else {
initViewHolderStyle(viewModel);
validateIfShouldShowUpEmptyLotWarning(viewModel);
}
}
private void initViewHolderStyle(InventoryViewModel inventoryViewModel) {
lotListView.setVisibility(View.VISIBLE);
vg_soh_pop.setVisibility(View.GONE);
tvKitExpectedQuantity.setTextColor(LMISApp.getContext().getResources().getColor(R.color.color_black));
tvProductName.setText(TextStyleUtil.getHighlightQueryKeyWord(StringUtils.EMPTY, inventoryViewModel.getStyledName()));
tvProductUnit.setText(TextStyleUtil.getHighlightQueryKeyWord(StringUtils.EMPTY, inventoryViewModel.getStyledUnit()));
tvKitExpectedQuantity.setText(this.context.getResources().getString(R.string.text_quantity_expected,
Long.toString(inventoryViewModel.getKitExpectQuantity())));
}
private void setConfirmStockClickListener(final UnpackKitInventoryViewModel inventoryViewModel, final Action1 setConfirmNoStockReceivedAction) {
tvConfirmNoStock.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
tvConfirmNoStock.setVisibility(View.GONE);
tvConfirmHasStock.setVisibility(View.VISIBLE);
tvQuantityMessage.setText(LMISApp.getContext().getResources().getString(R.string.message_no_stock_received));
tvKitExpectedQuantity.setTextColor(LMISApp.getContext().getResources().getColor(R.color.color_black));
lotListView.setVisibility(View.GONE);
setConfirmNoStockReceivedAction.call(inventoryViewModel);
}
});
tvConfirmHasStock.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
tvConfirmHasStock.setVisibility(View.GONE);
tvConfirmNoStock.setVisibility(View.VISIBLE);
tvQuantityMessage.setText(LMISApp.getContext().getResources().getString(R.string.message_no_stock_amount_change));
tvKitExpectedQuantity.setTextColor(LMISApp.getContext().getResources().getColor(R.color.color_red));
lotListView.setVisibility(View.VISIBLE);
inventoryViewModel.setConfirmedNoStockReceived(false);
inventoryViewModel.setShouldShowEmptyLotWarning(true);
}
});
}
}