package org.openlmis.core.view.viewmodel;
import org.apache.commons.lang3.StringUtils;
import org.openlmis.core.exceptions.MovementReasonNotFoundException;
import org.openlmis.core.manager.MovementReasonManager;
import org.openlmis.core.model.StockMovementItem;
import org.openlmis.core.utils.DateUtil;
import java.util.HashMap;
import lombok.Data;
@Data
public class StockHistoryMovementItemViewModel {
private final MovementReasonManager.MovementReason reason;
StockMovementItem stockMovementItem;
private String movementDate;
private static String EMPTY_FIELD = "-";
private HashMap<MovementReasonManager.MovementType, String> typeQuantityMap = new HashMap<>();
public StockHistoryMovementItemViewModel(StockMovementItem stockMovementItem) {
this.stockMovementItem = stockMovementItem;
typeQuantityMap.put(stockMovementItem.getMovementType(), String.valueOf(stockMovementItem.getMovementQuantity()));
try {
reason = MovementReasonManager.getInstance().queryByCode(stockMovementItem.getReason());
} catch (MovementReasonNotFoundException e) {
throw new RuntimeException("MovementReason Cannot be find " + e.getMessage());
}
}
public String getMovementDate() {
return DateUtil.formatDate(stockMovementItem.getMovementDate());
}
public String getMovementReason() {
return reason.getDescription();
}
public String getDocumentNumber() {
if (StringUtils.isEmpty(stockMovementItem.getDocumentNumber())) {
return EMPTY_FIELD;
}
return stockMovementItem.getDocumentNumber();
}
public String getEntryAmount() {
return wrapOrEmpty(typeQuantityMap.get(MovementReasonManager.MovementType.RECEIVE));
}
public String getNegativeAdjustmentAmount() {
return wrapOrEmpty(typeQuantityMap.get(MovementReasonManager.MovementType.NEGATIVE_ADJUST));
}
public String getPositiveAdjustmentAmount() {
return wrapOrEmpty(typeQuantityMap.get(MovementReasonManager.MovementType.POSITIVE_ADJUST));
}
public String getIssueAmount() {
return wrapOrEmpty(typeQuantityMap.get(MovementReasonManager.MovementType.ISSUE));
}
public String getStockExistence() {
return String.valueOf(stockMovementItem.getStockOnHand());
}
private String wrapOrEmpty(String s) {
if (StringUtils.isEmpty(s)) {
return EMPTY_FIELD;
} else return s;
}
public boolean isIssueAdjustment() {
return stockMovementItem.getMovementType().equals(MovementReasonManager.MovementType.ISSUE);
}
}