package org.openlmis.core.view.activity; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.TextView; import org.openlmis.core.R; import org.openlmis.core.googleAnalytics.ScreenName; import org.openlmis.core.manager.MovementReasonManager; import org.openlmis.core.presenter.NewStockMovementPresenter; import org.openlmis.core.utils.Constants; import org.openlmis.core.utils.InjectPresenter; import org.openlmis.core.utils.ToastUtil; import org.openlmis.core.view.fragment.SimpleSelectDialogFragment; import org.openlmis.core.view.widget.MovementDetailsView; import org.openlmis.core.view.widget.NewMovementLotListView; import org.openlmis.core.view.widget.SingleClickButtonListener; import roboguice.inject.ContentView; import roboguice.inject.InjectView; @ContentView(R.layout.activity_new_stock_movement) public class NewStockMovementActivity extends BaseActivity implements NewStockMovementPresenter.NewStockMovementView { @InjectView(R.id.view_movement_details) MovementDetailsView movementDetailsView; @InjectView(R.id.ly_lot_area) ViewGroup lyLotArea; @InjectView(R.id.view_lot_list) NewMovementLotListView newMovementLotListView; @InjectView(R.id.btn_complete) View btnComplete; @InjectView(R.id.btn_cancel) TextView tvCancel; @InjectPresenter(NewStockMovementPresenter.class) NewStockMovementPresenter presenter; @Override protected ScreenName getScreenName() { return ScreenName.StockCardNewMovementScreen; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String stockName = getIntent().getStringExtra(Constants.PARAM_STOCK_NAME); MovementReasonManager.MovementType movementType = (MovementReasonManager.MovementType) getIntent().getSerializableExtra(Constants.PARAM_MOVEMENT_TYPE); Long stockCardId = getIntent().getLongExtra(Constants.PARAM_STOCK_CARD_ID, 0L); boolean isKit = getIntent().getBooleanExtra(Constants.PARAM_IS_KIT, false); presenter.loadData(stockCardId, movementType, isKit); setTitle(movementType.getDescription() + " " + stockName); initView(); } private void initView() { setUpMovementDetailsView(); setUpLostListView(); setUpButtonPanel(); } @Override protected void onStart() { super.onStart(); if (!presenter.shouldLoadKitMovementPage()) { ToastUtil.showInCenter(R.string.msg_stock_movement_is_not_ready); finish(); } } private void setUpButtonPanel() { SingleClickButtonListener singleClickButtonListener = getSingleClickButtonListener(); btnComplete.setOnClickListener(singleClickButtonListener); tvCancel.setOnClickListener(singleClickButtonListener); } private void setUpMovementDetailsView() { movementDetailsView.initMovementDetailsView(presenter); movementDetailsView.setMovementReasonClickListener(getMovementReasonOnClickListener()); if (presenter.isKit()) { movementDetailsView.setMovementQuantityVisibility(View.VISIBLE); } } private void setUpLostListView() { if (!presenter.isKit()) { newMovementLotListView.initLotListView(presenter.getViewModel()); } else { lyLotArea.setVisibility(View.GONE); } } @NonNull private View.OnClickListener getMovementReasonOnClickListener() { return new SingleClickButtonListener() { @Override public void onSingleClick(View view) { Bundle bundle = new Bundle(); bundle.putStringArray(SimpleSelectDialogFragment.SELECTIONS, presenter.getMovementReasonDescriptionList()); SimpleSelectDialogFragment reasonsDialog = new SimpleSelectDialogFragment(); reasonsDialog.setArguments(bundle); reasonsDialog.setMovementTypeOnClickListener(new MovementTypeOnClickListener(reasonsDialog)); reasonsDialog.show(getFragmentManager(), "SELECT_REASONS"); } }; } public static Intent getIntentToMe(StockMovementsWithLotActivity context, String stockName, MovementReasonManager.MovementType movementType, Long stockCardId, boolean isKit) { Intent intent = new Intent(context, NewStockMovementActivity.class); intent.putExtra(Constants.PARAM_STOCK_NAME, stockName); intent.putExtra(Constants.PARAM_MOVEMENT_TYPE, movementType); intent.putExtra(Constants.PARAM_STOCK_CARD_ID, stockCardId); intent.putExtra(Constants.PARAM_IS_KIT, isKit); return intent; } public SingleClickButtonListener getSingleClickButtonListener() { return new SingleClickButtonListener() { @Override public void onSingleClick(View v) { switch (v.getId()) { case R.id.btn_complete: loading(); btnComplete.setEnabled(false); movementDetailsView.setMovementModelValue(); if (validate()) { presenter.saveStockMovement(); } else { loaded(); btnComplete.setEnabled(true); } break; case R.id.btn_cancel: finish(); break; } } }; } private boolean validate() { boolean isValid = presenter.isKit() || newMovementLotListView.validate(); isValid = movementDetailsView.validate() && isValid; return isValid; } @Override public void clearErrorAlerts() { newMovementLotListView.setAlertAddPositiveLotAmountVisibility(View.GONE); movementDetailsView.clearTextInputLayoutError(); } @Override public void showQuantityErrors(String errorMsg) { clearErrorAlerts(); movementDetailsView.showMovementQuantityError(errorMsg); } @Override public void goToStockCard() { setResult(RESULT_OK); loaded(); finish(); } class MovementTypeOnClickListener implements AdapterView.OnItemClickListener { private SimpleSelectDialogFragment reasonsDialog; public MovementTypeOnClickListener(SimpleSelectDialogFragment reasonsDialog) { this.reasonsDialog = reasonsDialog; } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { movementDetailsView.setMovementReasonText(presenter.getMovementReasonDescriptionList()[position]); presenter.getViewModel().setReason(presenter.getMovementReasons().get(position)); reasonsDialog.dismiss(); } } }