package devopsdistilled.operp.server.data.service.business.impl; import java.util.Date; import javax.inject.Inject; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import devopsdistilled.operp.client.business.sales.models.SaleModel; import devopsdistilled.operp.server.data.entity.account.ReceivedTransaction; import devopsdistilled.operp.server.data.entity.business.Sale; import devopsdistilled.operp.server.data.entity.business.SaleDescRow; import devopsdistilled.operp.server.data.entity.stock.Stock; import devopsdistilled.operp.server.data.entity.stock.StockKeeper; import devopsdistilled.operp.server.data.repo.business.SaleRepository; import devopsdistilled.operp.server.data.service.account.ReceivedTransactionService; import devopsdistilled.operp.server.data.service.business.SaleService; import devopsdistilled.operp.server.data.service.stock.StockKeeperService; @Service public class SaleServiceImpl extends BusinessServiceImpl<Sale, SaleRepository, SaleModel> implements SaleService { private static final long serialVersionUID = 2688393943868408691L; @Inject private SaleRepository repo; @Inject private ReceivedTransactionService receivedTransactionService; @Inject private StockKeeperService stockKeeperService; @Override protected SaleRepository getRepo() { return repo; } @Override @Transactional public <S extends Sale> S save(S sale) { sale.setDate(new Date()); S savedSale = super.save(sale); for (SaleDescRow saleDescRow : savedSale.getBusinessDesc() .getDescRows()) { Stock stock = new Stock(); stock.setItem(saleDescRow.getItem()); stock.setWarehouse(saleDescRow.getWarehouse()); StockKeeper stockKeeper = new StockKeeper(); stockKeeper.setStock(stock); stockKeeper.setQuantity(saleDescRow.getQuantity() * (-1)); stockKeeper.setNote("From Sale #" + sale.getBusinessId()); stockKeeper.setStockUpdateDate(new Date()); stockKeeperService.save(stockKeeper); } ReceivedTransaction transaction = new ReceivedTransaction(); transaction.setAccount(savedSale.getParty().getAccount()); transaction.setNote("From Sale #" + savedSale.getBusinessId().toString() + " on " + savedSale.getDate()); transaction.setAmount(savedSale.getAmount() * (-1)); receivedTransactionService.save(transaction); return savedSale; } }