package devopsdistilled.operp.server.data.service.stock.impl;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import devopsdistilled.operp.client.stock.models.StockKeeperModel;
import devopsdistilled.operp.server.data.entity.stock.Stock;
import devopsdistilled.operp.server.data.entity.stock.StockKeeper;
import devopsdistilled.operp.server.data.repo.stock.StockKeeperRepository;
import devopsdistilled.operp.server.data.repo.stock.StockRepository;
import devopsdistilled.operp.server.data.service.impl.AbstractEntityService;
import devopsdistilled.operp.server.data.service.stock.StockKeeperService;
@Service
public class StockKeeperServiceImpl
extends
AbstractEntityService<StockKeeper, Long, StockKeeperRepository, StockKeeperModel>
implements StockKeeperService {
private static final long serialVersionUID = -1311042040845285500L;
@Inject
private StockKeeperRepository repo;
@Inject
private StockRepository stockRepository;
@Override
protected StockKeeperRepository getRepo() {
return repo;
}
@Override
protected StockKeeper findByEntityName(String entityName) {
return null;
}
@Override
@Transactional
public <S extends StockKeeper> S save(S stockKeeper) {
Stock stock = stockRepository.findByItemAndWarehouse(stockKeeper
.getStock().getItem(), stockKeeper.getStock().getWarehouse());
if (stock != null) {
stock.setQuantity(stock.getQuantity() + stockKeeper.getQuantity());
} else {
stock = stockKeeper.getStock();
stock.setQuantity(stockKeeper.getQuantity());
}
stock = stockRepository.save(stock);
stockKeeper.setStock(stock);
stockKeeper.setStockUpdateDate(new Date());
return super.save(stockKeeper);
}
@Override
@Transactional
public void delete(StockKeeper stockKeeper) {
Stock stock = stockKeeper.getStock();
stock.setQuantity(stock.getQuantity() - stockKeeper.getQuantity());
stock = stockRepository.save(stock);
stockKeeper.setStock(stock);
super.delete(stockKeeper);
}
@Override
@Transactional
public List<StockKeeper> saveTransfer(StockKeeper srcStockKeeper,
StockKeeper destStockKeeper) {
List<StockKeeper> savedStockKeepers = new LinkedList<>();
srcStockKeeper = save(srcStockKeeper);
destStockKeeper = save(destStockKeeper);
srcStockKeeper.setTransferStockKeeper(destStockKeeper);
destStockKeeper.setTransferStockKeeper(srcStockKeeper);
savedStockKeepers.add(srcStockKeeper);
savedStockKeepers.add(destStockKeeper);
return savedStockKeepers;
}
@Override
@Transactional
public void delete(StockKeeper srcStockKeeper, StockKeeper destStockKeeper) {
delete(srcStockKeeper);
delete(destStockKeeper);
}
}