package org.openlmis.core.view.holder; import android.graphics.Typeface; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; import org.openlmis.core.LMISApp; import org.openlmis.core.R; import org.openlmis.core.googleAnalytics.TrackerActions; import org.openlmis.core.googleAnalytics.TrackerCategories; import org.openlmis.core.model.service.StockService; import org.openlmis.core.utils.DateUtil; import org.openlmis.core.utils.TextStyleUtil; import org.openlmis.core.view.viewmodel.InventoryViewModel; import java.util.Date; import roboguice.RoboGuice; import roboguice.inject.InjectView; public class StockCardViewHolder extends BaseViewHolder { @InjectView(R.id.tv_product_name) TextView tvProductName; @InjectView(R.id.tv_product_unit) TextView tvProductUnit; @InjectView(R.id.tv_stock_on_hand) TextView tvStockOnHand; @InjectView(R.id.vg_stock_on_hand_bg) View stockOnHandBg; @InjectView(R.id.ly_expiry_date_warning) LinearLayout lyExpiryDateWarning; @InjectView(R.id.tv_expiry_date_msg) TextView tvExpiryDateMsg; @InjectView(R.id.ly_over_stock) LinearLayout lyOverStock; @InjectView(R.id.ly_low_stock) LinearLayout lyLowStock; protected StockService stockService; private OnItemViewClickListener listener; public static final int STOCK_ON_HAND_NORMAL = 1; public static final int STOCK_ON_HAND_LOW_STOCK = 2; public static final int STOCK_ON_HAND_OVER_STOCK = 3; public static final int STOCK_ON_HAND_STOCK_OUT = 4; public StockCardViewHolder(View itemView, OnItemViewClickListener listener) { super(itemView); this.listener = listener; this.stockService = RoboGuice.getInjector(context).getInstance(StockService.class); } public void populate(final InventoryViewModel inventoryViewModel, String queryKeyWord) { setListener(inventoryViewModel); inflateData(inventoryViewModel, queryKeyWord); } protected void inflateData(InventoryViewModel inventoryViewModel, String queryKeyWord) { tvStockOnHand.setText(inventoryViewModel.getStockOnHand() + ""); tvProductName.setText(TextStyleUtil.getHighlightQueryKeyWord(queryKeyWord, inventoryViewModel.getStyledName())); tvProductUnit.setText(TextStyleUtil.getHighlightQueryKeyWord(queryKeyWord, inventoryViewModel.getStyledUnit())); initExpiryDateWarning(inventoryViewModel); initStockOnHandWarning(inventoryViewModel); } private void initExpiryDateWarning(InventoryViewModel inventoryViewModel) { Date earliestLotExpiryDate = inventoryViewModel.getStockCard().getEarliestLotExpiryDate(); if (earliestLotExpiryDate != null) { if (earliestLotExpiryDate.before(new Date(LMISApp.getInstance().getCurrentTimeMillis()))) { showExpiryDateWithMessage(R.string.msg_expired_date, earliestLotExpiryDate); return; } if (DateUtil.calculateDateMonthOffset(new Date(LMISApp.getInstance().getCurrentTimeMillis()), earliestLotExpiryDate) <= 3) { showExpiryDateWithMessage(R.string.msg_expiring_date, earliestLotExpiryDate); return; } } hideExpiryDate(); hideStockStatus(); } private void showExpiryDateWithMessage(int expiryMsg, Date earliestExpiryDate) { if (lyExpiryDateWarning != null) { lyExpiryDateWarning.setVisibility(View.VISIBLE); tvExpiryDateMsg.setText(context.getResources().getString(expiryMsg, DateUtil.formatDateWithShortMonthAndYear(earliestExpiryDate))); } } private void hideExpiryDate() { if (lyExpiryDateWarning != null) { lyExpiryDateWarning.setVisibility(View.GONE); } } private void hideStockStatus() { if (lyOverStock != null) { lyOverStock.setVisibility(View.GONE); } if (lyLowStock != null) { lyLowStock.setVisibility(View.GONE); } } private void hideLowStockStatus() { if (lyLowStock != null) { lyLowStock.setVisibility(View.GONE); } } private void hideOverStockStatus() { if (lyOverStock != null) { lyOverStock.setVisibility(View.GONE); } } private void setListener(final InventoryViewModel inventoryViewModel) { itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (listener != null) { LMISApp.getInstance().trackEvent(TrackerCategories.StockMovement, TrackerActions.SelectStockCard); listener.onItemViewClick(inventoryViewModel); } } }); } private void initStockOnHandWarning(final InventoryViewModel viewModel) { int stockOnHandLevel = viewModel.getStockOnHandLevel(); switch (stockOnHandLevel) { case STOCK_ON_HAND_OVER_STOCK: tvStockOnHand.setTextColor(context.getResources().getColor(R.color.color_over_stock)); tvStockOnHand.setTypeface(null, Typeface.NORMAL); lyOverStock.setVisibility(View.VISIBLE); hideLowStockStatus(); break; case STOCK_ON_HAND_LOW_STOCK: tvStockOnHand.setTextColor(context.getResources().getColor(R.color.color_warning_text)); tvStockOnHand.setTypeface(null, Typeface.NORMAL); lyLowStock.setVisibility(View.VISIBLE); hideOverStockStatus(); break; case STOCK_ON_HAND_STOCK_OUT: tvStockOnHand.setTextColor(context.getResources().getColor(R.color.color_stock_out)); tvStockOnHand.setTypeface(null, Typeface.BOLD); hideStockStatus(); break; default: stockOnHandBg.setBackgroundResource(R.color.color_white); tvStockOnHand.setTextAppearance(context, R.style.Text_Black_Normal); tvStockOnHand.setTypeface(null, Typeface.NORMAL); hideStockStatus(); break; } } public interface OnItemViewClickListener { void onItemViewClick(InventoryViewModel inventoryViewModel); } }