package devopsdistilled.operp.client.stock.panes.controllers.impl; import javax.inject.Inject; import devopsdistilled.operp.client.exceptions.EntityValidationException; import devopsdistilled.operp.client.exceptions.NullFieldException; import devopsdistilled.operp.client.items.models.ItemModel; import devopsdistilled.operp.client.stock.models.StockKeeperModel; import devopsdistilled.operp.client.stock.models.StockModel; import devopsdistilled.operp.client.stock.models.WarehouseModel; import devopsdistilled.operp.client.stock.panes.UpdateStockPane; import devopsdistilled.operp.client.stock.panes.controllers.UpdateStockPaneController; import devopsdistilled.operp.client.stock.panes.models.UpdateStockPaneModel; import devopsdistilled.operp.server.data.entity.stock.Stock; import devopsdistilled.operp.server.data.entity.stock.StockKeeper; public class UpdateStockPaneControllerImpl implements UpdateStockPaneController { @Inject private UpdateStockPaneModel model; @Inject private UpdateStockPane view; @Inject private WarehouseModel warehouseModel; @Inject private ItemModel itemModel; @Inject private StockKeeperModel stockKeeperModel; @Inject private StockModel stockModel; @Override public void init() { view.init(); model.registerObserver(view); warehouseModel.registerObserver(view); itemModel.registerObserver(view); } @Override public void validate() throws EntityValidationException { if (model.getItem() == null || model.getWarehouse() == null || model.getQuantity() == null) throw new NullFieldException(); if (model.getQuantity().compareTo(0L) == 0) throw new NullFieldException("O isn't a valid quantity"); if (model.getQuantity().compareTo(0L) < 0) { if (!stockModel.getService().isItemExistsInWarehouse( model.getItem().getItemId(), model.getWarehouse().getWarehouseId())) { throw new EntityValidationException(model.getItem() + " doesn't exists in " + model.getWarehouse()); } Long stockQuantity = stockModel.getService() .getQuantityOfItemInWarehouse(model.getItem().getItemId(), model.getWarehouse().getWarehouseId()); if (model.getQuantity().compareTo(stockQuantity * (-1)) < 0) throw new EntityValidationException("Only " + stockQuantity.toString() + " " + model.getItem() + " available in " + model.getWarehouse()); } } @Override public StockKeeper save() { Stock stock = new Stock(); stock.setItem(model.getItem()); stock.setWarehouse(model.getWarehouse()); StockKeeper stockKeeper = new StockKeeper(); stockKeeper.setStock(stock); stockKeeper.setNote(model.getNote()); stockKeeper.setQuantity(model.getQuantity()); return stockKeeperModel.saveAndUpdateModel(stockKeeper); } @Override public UpdateStockPaneModel getModel() { return model; } }