package org.openlmis.core.view.widget;
import android.content.Context;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import org.openlmis.core.R;
import org.openlmis.core.view.adapter.LotInfoReviewListAdapter;
import org.openlmis.core.view.adapter.PhysicalInventoryLotMovementAdapter;
import org.openlmis.core.view.holder.PhysicalInventoryWithLotViewHolder;
import org.openlmis.core.view.viewmodel.InventoryViewModel;
import org.openlmis.core.view.viewmodel.PhysicalInventoryViewModel;
import roboguice.inject.InjectView;
public class PhysicalInventoryLotListView extends BaseLotListView {
@InjectView(R.id.btn_done)
ViewGroup btnDone;
@InjectView(R.id.btn_edit)
TextView btnEdit;
@InjectView(R.id.vg_edit_lot_area)
ViewGroup vgEditLotArea;
@InjectView(R.id.vg_lot_info_review)
ViewGroup vgLotInfoReview;
@InjectView(R.id.rv_lot_info_review)
RecyclerView rvLotInfoReview;
private PhysicalInventoryWithLotViewHolder.InventoryItemStatusChangeListener statusChangeListener;
public PhysicalInventoryLotListView(Context context) {
super(context);
}
public PhysicalInventoryLotListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void init(Context context) {
super.init(context);
btnDone.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (validateLotList()) {
markDone(true);
}
}
});
btnEdit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
markDone(false);
}
});
}
public void initLotListView(InventoryViewModel viewModel, PhysicalInventoryWithLotViewHolder.InventoryItemStatusChangeListener statusChangeListener) {
this.statusChangeListener = statusChangeListener;
super.initLotListView(viewModel);
markDone(((PhysicalInventoryViewModel) viewModel).isDone());
}
@Override
public void initExistingLotListView() {
existingLotListView.setLayoutManager(new LinearLayoutManager(getContext()));
existingLotMovementAdapter = new PhysicalInventoryLotMovementAdapter(viewModel.getExistingLotMovementViewModelList());
existingLotListView.setAdapter(existingLotMovementAdapter);
}
@Override
public void initNewLotListView() {
newLotListView.setLayoutManager(new LinearLayoutManager(getContext()));
newLotMovementAdapter = new PhysicalInventoryLotMovementAdapter(viewModel.getNewLotMovementViewModelList(), viewModel.getProduct().getProductNameWithCodeAndStrength());
newLotListView.setAdapter(newLotMovementAdapter);
}
private void initLotInfoReviewList() {
LotInfoReviewListAdapter adapter = new LotInfoReviewListAdapter(viewModel);
rvLotInfoReview.setLayoutManager(new LinearLayoutManager(context));
rvLotInfoReview.setAdapter(adapter);
}
public void markDone(boolean done) {
((PhysicalInventoryViewModel) viewModel).setDone(done);
vgEditLotArea.setVisibility(done ? GONE : VISIBLE);
vgLotInfoReview.setVisibility(done ? VISIBLE : GONE);
statusChangeListener.onStatusChange(done);
if (done) {
initLotInfoReviewList();
}
}
public boolean validateLotList() {
int position1 = ((PhysicalInventoryLotMovementAdapter) existingLotMovementAdapter).validateLotNonEmptyQuantity();
if (position1 >= 0) {
existingLotListView.scrollToPosition(position1);
return false;
}
int position2 = ((PhysicalInventoryLotMovementAdapter) newLotMovementAdapter).validateLotPositiveQuantity();
if (position2 >= 0) {
newLotListView.scrollToPosition(position2);
return false;
}
return true;
}
@Override
protected void inflateLayout(Context context) {
inflate(context, R.layout.view_lot_list_physical_inventory, this);
}
}