package is.idega.idegaweb.campus.nortek.business; import is.idega.idegaweb.campus.block.allocation.data.Contract; import is.idega.idegaweb.campus.block.finance.business.CampusAssessmentBusiness; import is.idega.idegaweb.campus.nortek.data.Card; import is.idega.idegaweb.campus.nortek.data.CardHome; import is.idega.idegaweb.campus.nortek.data.CardTransactionLog; import is.idega.idegaweb.campus.nortek.data.CardTransactionLogHome; import is.idega.idegaweb.campus.nortek.data.NortekSetup; import is.idega.idegaweb.campus.nortek.data.NortekSetupHome; import java.rmi.RemoteException; import java.util.Collection; import java.util.Date; import javax.ejb.CreateException; import javax.ejb.FinderException; import com.idega.block.finance.data.Account; import com.idega.block.finance.data.AccountBMPBean; import com.idega.block.finance.data.AccountHome; import com.idega.business.IBOServiceBean; import com.idega.data.IDOLookup; import com.idega.data.IDOLookupException; import com.idega.user.data.User; import com.idega.user.data.UserHome; import com.idega.util.IWTimestamp; public class NortekBusinessBean extends IBOServiceBean implements NortekBusiness { public static final String ACTION_BAN = "ban"; public static final String ACTION_VERIFY = "verify"; public static final String ACTION_ADD = "add"; public static final String CARD_PREFIX = "010500"; public boolean isCardValid(String serialNumber) { Card card = null; try { card = getCardHome().findByPrimaryKey(serialNumber); addLogEntry(card, IWTimestamp.RightNow(), null, ACTION_VERIFY, Boolean.toString(card.getIsValid()), null, false, null, serialNumber); } catch (FinderException e) { e.printStackTrace(); addLogEntry(card, IWTimestamp.RightNow(), null, ACTION_VERIFY, Boolean.toString(false), null, true, e.getMessage(), serialNumber); return false; } return card.getIsValid(); } public boolean banCard(String serialNumber, boolean ban) { Card card = null; try { card = getCardHome().findByPrimaryKey(serialNumber); addLogEntry(card, IWTimestamp.RightNow(), null, ACTION_BAN, Boolean .toString(ban), null, false, null, serialNumber); } catch (FinderException e) { e.printStackTrace(); try { card = getCardHome().create(); card.setCardSerialNumber(serialNumber); card .setDecodedCardSerialNumber(decodeSerialNumber(serialNumber)); card.store(); addLogEntry(card, IWTimestamp.RightNow(), null, ACTION_BAN, Boolean.toString(ban), null, false, null, serialNumber); } catch (CreateException e1) { e1.printStackTrace(); addLogEntry(card, IWTimestamp.RightNow(), null, ACTION_BAN, Boolean.toString(ban), null, true, e1.getMessage(), serialNumber); return false; } } card.setIsValid(!ban); if (ban) { card.setUser(null); } card.store(); return true; } public boolean addAmountToCardUser(String serialNumber, Date timestamp, double amount, String terminalNumber) { Card card = null; try { card = getCardHome().findByPrimaryKey(serialNumber); User user = card.getUser(); Account account = getAccountHome().findByUserAndType(user, AccountBMPBean.typeFinancial); NortekSetup setup = getNortekSetupHome().findEntry(); Contract contract = getCampusAssessmentBusiness() .findContractForUser(user); Integer division = new Integer(contract.getApartment().getFloor() .getBuilding().getDivision()); // String name = setup.getAccountKey().getName(); String info = setup.getAccountKey().getInfo(); IWTimestamp today = IWTimestamp.RightNow(); today.addMonths(1); today.setDay(1); getCampusAssessmentBusiness().assessTariffsToAccount( (float) amount, info, info, (Integer) account.getPrimaryKey(), (Integer) setup.getAccountKey().getPrimaryKey(), today.getDate(), (Integer) setup.getTariffGroup().getPrimaryKey(), (Integer) setup.getFinanceCategory().getPrimaryKey(), contract.getApartmentId(), false, null); addLogEntry(card, IWTimestamp.RightNow(), new IWTimestamp(timestamp), ACTION_ADD, Double .toString(amount), terminalNumber, false, null, serialNumber); } catch (Exception e) { e.printStackTrace(); Throwable t = e.getCause(); if (t != null) { addLogEntry(card, IWTimestamp.RightNow(), new IWTimestamp( timestamp), ACTION_ADD, Double.toString(amount), terminalNumber, true, t.getMessage(), serialNumber); } else { addLogEntry(card, IWTimestamp.RightNow(), new IWTimestamp( timestamp), ACTION_ADD, Double.toString(amount), terminalNumber, true, e.getMessage(), serialNumber); } return false; } return true; } private void addLogEntry(Card card, IWTimestamp stamp, IWTimestamp externalStamp, String action, String value, String terminal, boolean isError, String errorMessage, String serialNumber) { CardTransactionLog log; try { log = getCardTransactionLogHome().create(); if (card != null) { log.setCard(card); } if (stamp != null) { log.setEntryDate(stamp.getTimestamp()); } else { log.setEntryDate(IWTimestamp.getTimestampRightNow()); } if (externalStamp != null) { log.setExternalEntryDate(externalStamp.getTimestamp()); } log.setAction(action); log.setValue(value); log.setTerminal(terminal); log.setIsError(isError); log.setErrorMessage(errorMessage); log.setSerialNumber(serialNumber); log.store(); } catch (CreateException e) { e.printStackTrace(); } } public Collection getAllCards() { Collection col = null; try { col = getCardHome().findAll(); } catch (FinderException e) { } return col; } public Collection getCardsByValdi(boolean valid) { Collection col = null; try { col = getCardHome().findAllByValid(valid); } catch (FinderException e) { } return col; } public Card getCard(String serialNumber) { try { return (Card) getCardHome().findByPrimaryKey(serialNumber); } catch (FinderException e) { } return null; } public Card getCard(User user) { try { return (Card) getCardHome().findByUser(user); } catch (FinderException e) { } return null; } public void saveCard(String decodedSerial, String ssn, String valid) throws CreateException, FinderException { String encoded = encodeDecodedSerialNumber(decodedSerial); Card card = getCard(encoded); if (card == null) { card = getCardHome().create(); } card.setCardSerialNumber(encoded); card.setDecodedCardSerialNumber(decodedSerial); if (valid != null && !"".equals(valid)) { User user = null; if (ssn != null && !"".equals(ssn)) { user = getUserHome().findByPersonalID(ssn); } card.setUser(user); card.setIsValid(true); } else { card.setUser(null); card.setIsValid(false); } card.setIsDeleted(false); card.store(); } public void deleteCards(String[] cardIDs) throws CreateException, FinderException { if (cardIDs != null) { for (int i = 0; i < cardIDs.length; i++) { Card card = getCard(cardIDs[i]); if (card != null) { card.setUser(null); card.setIsDeleted(true); card.store(); } } } } public String decodeSerialNumber(String serialNumber) { if (serialNumber.length() == 10) { String hex = serialNumber.substring(6); return Integer.valueOf(hex, 16).toString(); } return null; } public String encodeDecodedSerialNumber(String encodedSerialNumber) { String ret = CARD_PREFIX + Integer.toHexString( 0x10000 | Integer.parseInt(encodedSerialNumber)) .substring(1).toUpperCase(); return ret; } private CardHome getCardHome() { try { return (CardHome) IDOLookup.getHome(Card.class); } catch (IDOLookupException e) { e.printStackTrace(); } return null; } private NortekSetupHome getNortekSetupHome() { try { return (NortekSetupHome) IDOLookup.getHome(NortekSetup.class); } catch (IDOLookupException e) { e.printStackTrace(); } return null; } private CardTransactionLogHome getCardTransactionLogHome() { try { return (CardTransactionLogHome) IDOLookup .getHome(CardTransactionLog.class); } catch (IDOLookupException e) { e.printStackTrace(); } return null; } private AccountHome getAccountHome() { try { return (AccountHome) IDOLookup.getHome(Account.class); } catch (IDOLookupException e) { e.printStackTrace(); } return null; } private UserHome getUserHome() { try { return (UserHome) IDOLookup.getHome(User.class); } catch (IDOLookupException e) { e.printStackTrace(); } return null; } public CampusAssessmentBusiness getCampusAssessmentBusiness() throws RemoteException { return (CampusAssessmentBusiness) getServiceInstance(CampusAssessmentBusiness.class); } }