com.ut.tekir.finance.ChequeSuggestionBean.java Source code

Java tutorial

Introduction

Here is the source code for com.ut.tekir.finance.ChequeSuggestionBean.java

Source

/*
 * Copyleft 2007-2011 Ozgur Yazilim A.S.
 *
 * Distributable under LGPL license.
 * See terms of license at gnu.org.
 * http://www.gnu.org/licenses/lgpl.html
 *
 * www.tekir.com.tr
 * www.ozguryazilim.com.tr
 *
 */

package com.ut.tekir.finance;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.ejb.Remove;
import javax.ejb.Stateful;
import javax.persistence.EntityManager;

import org.hibernate.Criteria;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.Destroy;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.core.Events;
import org.jboss.seam.log.Log;
import org.jboss.seam.persistence.HibernateSessionProxy;

import com.ut.tekir.entities.BankAccount;
import com.ut.tekir.entities.Cheque;
import com.ut.tekir.entities.ChequeStatus;
import com.ut.tekir.entities.Contact;

/**
 *
 * @author huseyin
 */
@Stateful
@Name("chequeSuggestion")
@Scope(ScopeType.CONVERSATION)
@AutoCreate
public class ChequeSuggestionBean implements ChequeSuggestion {

    @Logger
    private Log log;

    @In
    private EntityManager entityManager;

    @In
    protected Events events;

    @SuppressWarnings("unchecked")
    private List<Cheque> chequeList;
    private String referenceNo;
    private String serialNo;
    private Date beginDate;
    private Date endDate;
    private String bankName;
    private Date issueDate;
    private String bankBranch;
    private String bankAccount;
    private BankAccount bankAccountId;
    private String chequeOwner;
    private ChequeStatus lastStatus;
    private ChequeStatus previousStatus;
    private ChequeStatus targetStatus; //alaca yeni status
    private Cheque cheque = new Cheque();
    private String callerObserveString;
    private Boolean clientCheque = Boolean.FALSE;
    private Contact contact;
    private Date historyBeginDate;
    private Date historyEndDate;

    @SuppressWarnings("unchecked")
    public List<Cheque> selectChequeList() {

        HibernateSessionProxy session = (HibernateSessionProxy) entityManager.getDelegate();
        DetachedCriteria crit = DetachedCriteria.forClass(Cheque.class);

        //TODO: projection saglanmali, embedded money nesnesi sorun cikariyor   
        //       crit.forClass(Money.class, "money");
        //       crit.setProjection(Projections.projectionList()
        //            .add(Projections.property("id"), "id")
        //            .add(Projections.property("maturityDate"), "maturityDate")
        //            .add(Projections.property("referenceNo"), "referenceNo")
        //            .add(Projections.property("bankName"), "bankName")
        //            .add(Projections.property("bankBranch"), "bankBranch")
        //            .add(Projections.property("accountNo"), "accountNo")
        //            .add(Projections.property("chequeOwner"), "chequeOwner")
        //            .add(Projections.property("contact"), "contact")
        //            .add(Projections.property("lastStatus"), "lastStatus")
        //            .add(Projections.property("previousStatus"), "previousStatus")
        //            .add(Projections.property("serialNo"), "serialNo"));
        //        
        //        crit.setResultTransformer(Transformers.aliasToBean(Cheque.class));
        if (getHistoryBeginDate() != null || getHistoryEndDate() != null) {
            crit.createAlias("history", "history");
            if (getHistoryBeginDate() != null) {
                crit.add(Restrictions.ge("history.date", getHistoryBeginDate()));
            }
            if (getHistoryEndDate() != null) {
                crit.add(Restrictions.le("history.date", getHistoryEndDate()));
            }
            crit.add(Restrictions.eqProperty("history.status", "this.lastStatus"));

        }
        if (getReferenceNo() != null && getReferenceNo().length() > 0) {
            crit.add(Restrictions.ilike("referenceNo", getReferenceNo(), MatchMode.ANYWHERE));
        }

        if (getSerialNo() != null && getSerialNo().length() > 0) {
            crit.add(Restrictions.ilike("serialNo", getSerialNo(), MatchMode.START));
        }

        if (getBeginDate() != null) {
            crit.add(Restrictions.ge("maturityDate", getBeginDate()));
        }

        if (getEndDate() != null) {
            crit.add(Restrictions.le("maturityDate", getEndDate()));
        }

        if (getBankName() != null && getBankName().length() > 0) {
            crit.add(Restrictions.ilike("bankName", getBankName(), MatchMode.START));
        }

        if (getBankBranch() != null && getBankBranch().length() > 0) {
            crit.add(Restrictions.ilike("bankBranch", getBankBranch(), MatchMode.START));
        }

        if (getChequeOwner() != null && getChequeOwner().length() > 0) {
            crit.add(Restrictions.ilike("chequeOwner", getChequeOwner(), MatchMode.START));
        }

        if (getBankBranch() != null && getBankBranch().length() > 0) {
            crit.add(Restrictions.ilike("bankBranch", getBankBranch(), MatchMode.START));
        }

        if (getBankAccount() != null && getBankAccount().length() > 0) {
            crit.add(Restrictions.ilike("bankAccount", getBankAccount(), MatchMode.START));
        }

        if (getBankAccountId() != null) {
            crit.add(Restrictions.eq("bankAccountId", getBankAccountId().getId()));
        }

        if (getContact() != null) {
            crit.add(Restrictions.eq("contact", getContact()));
        }

        if (lastStatus != null) {
            crit.add(Restrictions.eq("lastStatus", lastStatus));
        } else {
            List<ChequeStatus> possibleStatus = null;
            if (clientCheque != null && clientCheque.equals(Boolean.TRUE)) {
                possibleStatus = possibleStatusForCustomer(targetStatus);
            } else {
                possibleStatus = possibleStatusForFirm(targetStatus);
            }

            if (possibleStatus != null) {
                crit.add(Restrictions.in("lastStatus", possibleStatus));
            }
        }

        crit.add(Restrictions.eq("clientCheque", getClientCheque()));

        Criteria ecrit = crit.getExecutableCriteria(session);

        chequeList = ecrit.list();

        return chequeList;
    }

    /**
     * Bu metod, mteri ek/senetleri stat deiikliklerinde, parametre olarak verilen requestStatus
     * bilgisine gre mmkn statleri verir.
     * 
     * <p>
     * <b><u>rnek;</u></b>
     *      Statsn Portoy yapacamz ek/senet ler seilirken, 
     *      seim listesine stats sadece (Ciro, BankaTahsilatta, BankaTeminat, Karsiliksiz, Takipte) olanlar gelebilir
     * </p>
     * <p>
     * <b><u>rnek;</u></b>
     *      KasaTahsilat' a gnderilecek olan ek/senet ler seilirken, 
     *      seim listesine stats sadece (Portfoy, Karsiliksiz, Takipte) olanlar gelebilir
     * </p>
     * 
     * @param requestStatus hedef stat
     * @return List kabul edilebilecek stat listesi
     * @author dumlupinar
     * @since 12.Ocak.2009 Ptesi
     */
    public List<ChequeStatus> possibleStatusForCustomer(ChequeStatus requestStatus) {
        List<ChequeStatus> status = new ArrayList<ChequeStatus>();

        switch (requestStatus) {

        case Portfoy:
            status.add(ChequeStatus.Ciro);
            status.add(ChequeStatus.BankaTahsilatta);
            status.add(ChequeStatus.BankaTeminat);
            status.add(ChequeStatus.Karsiliksiz);
            status.add(ChequeStatus.Takipte);
            break;

        case Ciro:
        case BankaTeminat:
        case BankaTahsilatta:
            status.add(ChequeStatus.Portfoy);
            break;

        case KasaTahsilat:
            status.add(ChequeStatus.Portfoy);
            status.add(ChequeStatus.Karsiliksiz);
            status.add(ChequeStatus.Takipte);
            break;

        case BankaTahsilEdildi:
            status.add(ChequeStatus.BankaTahsilatta);
            break;

        case Takipte:
        case Karsiliksiz:
            status.add(ChequeStatus.Portfoy);
            status.add(ChequeStatus.Ciro);
            status.add(ChequeStatus.BankaTahsilatta);
            status.add(ChequeStatus.BankaTeminat);
            break;

        case Supheli:
            status.add(ChequeStatus.Karsiliksiz);
            status.add(ChequeStatus.Takipte);
            break;

        case Kapandi:
            status.add(ChequeStatus.Ciro);
            status.add(ChequeStatus.KasaTahsilat);
            status.add(ChequeStatus.BankaTahsilEdildi);
            status.add(ChequeStatus.Supheli);
            break;

        }

        if (status.size() == 0)
            status = null;

        return status;
    }

    /**
     * Bu metod, firma ek/senetleri stat deiikliklerinde, parametre olarak verilen requestStatus
     * bilgisine gre mmkn statleri verir.
     * 
     * <p>
     * <b><u>rnek;</u></b>
     *      Statsn Portoy yapacamz ek/senet ler seilirken, 
     *      seim listesine stats sadece (Cikis, BankaTeminat) olanlar gelebilir
     * </p>
     * <p>
     * <b><u>rnek;</u></b>
     *      Kapandi olarak iaretlenecek ek/senet ler seilirken, 
     *      seim listesine stats sadece (Portfoy, KasaOdeme, BankaOdeme) olanlar gelebilir
     * </p>
     * 
     * @param requestStatus hedef stat
     * @return List kabul edilebilecek stat listesi
     * @author dumlupinar
     * @since 12.Ocak.2009 Ptesi
     */
    public List<ChequeStatus> possibleStatusForFirm(ChequeStatus requestStatus) {
        List<ChequeStatus> status = new ArrayList<ChequeStatus>();

        switch (requestStatus) {

        case Portfoy:
            status.add(ChequeStatus.Cikis);
            status.add(ChequeStatus.BankaTeminat);
            break;

        case Cikis:
        case BankaTeminat:
            status.add(ChequeStatus.Portfoy);
            break;

        case KasaOdeme:
        case BankaOdeme:
            status.add(ChequeStatus.Cikis);
            break;

        case Kapandi:
            status.add(ChequeStatus.Portfoy);
            status.add(ChequeStatus.KasaOdeme);
            status.add(ChequeStatus.BankaOdeme);
            break;

        }

        if (status.size() == 0)
            status = null;

        return status;
    }

    public void selectedCheque(int rowKey) {

        Long id = null;

        try {
            id = (Long) chequeList.get(rowKey).getId();
        } catch (Exception e) {
            e.printStackTrace();
        }

        if (id != null) {
            cheque = entityManager.find(Cheque.class, id);
        }

        if (callerObserveString != null) {
            events.raiseTransactionSuccessEvent(callerObserveString, cheque);
            log.debug("Event raised!");
        } else {
            log.debug("Event did not raise!");
        }

    }

    public void setCallerObserveString(String callerString) {
        this.callerObserveString = callerString;
    }

    public String getSerialNo() {
        return serialNo;
    }

    public void setSerialNo(String serialNo) {
        this.serialNo = serialNo;
    }

    public String getReferenceNo() {
        return referenceNo;
    }

    public void setReferenceNo(String referenceNo) {
        this.referenceNo = referenceNo;
    }

    public Date getEndDate() {
        return endDate;
    }

    public void setEndDate(Date endDate) {
        this.endDate = endDate;
    }

    public ChequeStatus getLastStatus() {
        return lastStatus;
    }

    public void setLastStatus(ChequeStatus lastStatus) {
        this.lastStatus = lastStatus;
    }

    public ChequeStatus getPreviousStatus() {
        return previousStatus;
    }

    public void setPreviousStatus(ChequeStatus previousStatus) {
        this.previousStatus = previousStatus;
    }

    public ChequeStatus getTargetStatus() {
        return targetStatus;
    }

    public void setTargetStatus(ChequeStatus targetStatus) {
        this.targetStatus = targetStatus;
    }

    public String getChequeOwner() {
        return chequeOwner;
    }

    public void setChequeOwner(String chequeOwner) {
        this.chequeOwner = chequeOwner;
    }

    public String getBankName() {
        return bankName;
    }

    public void setBankName(String bankName) {
        this.bankName = bankName;
    }

    public String getBankBranch() {
        return bankBranch;
    }

    public void setBankBranch(String bankBranch) {
        this.bankBranch = bankBranch;
    }

    public String getBankAccount() {
        return bankAccount;
    }

    public void setBankAccount(String bankAccount) {
        this.bankAccount = bankAccount;
    }

    public Cheque getCheque() {
        return cheque;
    }

    public void setCheque(Cheque cheque) {
        this.cheque = cheque;
    }

    public Boolean getClientCheque() {
        return clientCheque;
    }

    public void setClientCheque(Boolean clientCheque) {
        this.clientCheque = clientCheque;
    }

    public Contact getContact() {
        return contact;
    }

    public void setContact(Contact contact) {
        this.contact = contact;
    }

    public Date getBeginDate() {
        return beginDate;
    }

    public void setBeginDate(Date beginDate) {
        this.beginDate = beginDate;
    }

    public Date getIssueDate() {
        return issueDate;
    }

    public void setIssueDate(Date issueDate) {
        this.issueDate = issueDate;
    }

    public List<Cheque> getChequeList() {
        return chequeList;
    }

    public void setChequeList(List<Cheque> chequeList) {
        this.chequeList = chequeList;
    }

    @Remove
    @Destroy
    public void destroy() {

    }

    public Date getHistoryBeginDate() {
        return historyBeginDate;
    }

    public void setHistoryBeginDate(Date historyBeginDate) {
        this.historyBeginDate = historyBeginDate;
    }

    public Date getHistoryEndDate() {
        return historyEndDate;
    }

    public void setHistoryEndDate(Date historyEndDate) {
        this.historyEndDate = historyEndDate;
    }

    public BankAccount getBankAccountId() {
        return bankAccountId;
    }

    public void setBankAccountId(BankAccount bankAccountId) {
        this.bankAccountId = bankAccountId;
    }
}