public void processOrder(OrderTransaction orderTransaction) throws PointOfSaleSystemException {
        orderTransaction.setCashier(cashier);
        Transaction transaction = daoFactory.createTransaction(orderTransactionManager, inventoryDAO, creditManager, feeDAO);
        try {
            transaction.start();
            feeDAO.saveBillingFees(orderTransaction.getStudent(), orderTransaction.getOrder());
            orderTransaction = orderTransactionManager.save(orderTransaction);
            for (OrderItem orderItem : orderTransaction.getOrder().getOrderItems()) {
                inventoryDAO.deleteItemFromInventory(orderItem.getDBID());
            }
            hotbarDAO.updateHotbar(orderTransaction.getOrder().getOrderItems(),
                    cashier);
            if (orderTransaction.getCredit().compareTo(BigDecimal.ZERO) > 0) {
                // must update student credit information
                creditManager.saveCreditTransaction(orderTransaction);
            }
            transaction.commit();
        } catch (TransactionManagerException ex) {
            logger.log(Level.SEVERE, ex.getMessage(), ex);
            rollBack(transaction);
            throw new PointOfSaleSystemException("Error occured during Writting of Transaction Master Record.", ex);
        } catch (CreditManagerException e) {
            logger.log(Level.SEVERE, e.getMessage(), e);
            rollBack(transaction);
            throw new PointOfSaleSystemException("Error cccured during saving credit record", e);
        } catch (DAOException e) {
            logger.log(Level.SEVERE, e.getMessage(), e);
            rollBack(transaction);
            throw new PointOfSaleSystemException("Error occured during updating database", e);
        } catch (TransactionException e) {
            logger.log(Level.SEVERE, e.getMessage(), e);
            rollBack(transaction);
            throw new PointOfSaleSystemException("Critical Error: couldn't commit changes!", e);
        } catch (Exception e) {
            logger.log(Level.SEVERE, e.getMessage(), e);
            rollBack(transaction);
            throw new PointOfSaleSystemException(e);
        }

        //To change body of implemented methods use File | Settings | File Templates.
    }