package com.idega.block.finance.data;
import java.sql.Date;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Collection;
import javax.ejb.FinderException;
import com.idega.data.GenericEntity;
import com.idega.data.IDOException;
import com.idega.data.IDOQuery;
import com.idega.data.IDORelationshipException;
import com.idega.data.query.MatchCriteria;
import com.idega.data.query.SelectQuery;
import com.idega.data.query.SumColumn;
import com.idega.data.query.Table;
import com.idega.data.query.WildCardColumn;
import com.idega.user.data.User;
import com.idega.user.data.UserBMPBean;
import com.idega.util.IWTimestamp;
/**
* Title: Description: Copyright: Copyright (c) 2001 Company: idega multimedia
*
* @author <a href="mailto:aron@idega.is">Aron Birkir</a>
* @version 1.0
*/
public class AccountEntryBMPBean extends GenericEntity implements AccountEntry,
Entry {
public static final String STATUS_CREATED = "C";
public static final String STATUS_BILLED = "B";
public static final String STATUS_PAYED = "P";
private static final String COLUMN_DK_QUANTITY = "dk_quantity";
private static final String COLUMN_DK_ITEM_PRICE = "dk_item_price";
public AccountEntryBMPBean() {
super();
}
public AccountEntryBMPBean(int id) throws SQLException {
super(id);
}
public void initializeAttributes() {
addAttribute(getIDColumnName());
addManyToOneRelationship(getAccountIdColumnName(), Account.class);
addAttribute(getNameColumnName(), "Name", String.class);
addAttribute(getInfoColumnName(), "Info", String.class);
addManyToOneRelationship(getAccountKeyIdColumnName(), AccountKey.class);
addManyToOneRelationship(getEntryGroupIdColumnName(), EntryGroup.class);
addAttribute(getEntryTypeColumnName(), "Entry type", String.class);
addAttribute(getColumnNetto(), "Netto", Float.class);
addAttribute(getColumnVAT(), "VAT", Float.class);
addAttribute(getColumnTotal(), "Total", Float.class);
addAttribute(getPaymentDateColumnName(), "Payment date",
Timestamp.class);
addAttribute(getLastUpdatedColumnName(), "Last updated",
Timestamp.class);
addManyToOneRelationship(getCashierIdColumnName(), Cashier.class);
addManyToOneRelationship(getRoundIdColumnName(), AssessmentRound.class);
addAttribute(getColumnNameStatus(), "status", String.class);
addAttribute(getColumnNameDivisionForAccounting(),
"accounting division", String.class);
/* added 6/12/2004 - birna */
addAttribute(getColumnNameAccountBook(), "account book", Integer.class);
addAttribute(getColumnNameInvoiceNumber(), "invoice number",
Integer.class);
addAttribute(getColumnNameFinalDueDate(), "final due date",
Timestamp.class);
addManyToOneRelationship(getColumnNameUserId(), User.class);
addAttribute(getColumnNameDisallowanceDate(), "disallowance date",
Timestamp.class);
addManyToOneRelationship(getColumnNameBatchNumber(), Batch.class);
addAttribute(getColumnNameDueDate(), "due date", Date.class);
addAttribute(getColumnNamePenalIntrestCode(), "penal int code",
String.class);
addAttribute(getColumnNamePenalIntrestProsent(), "penal int prosent",
Double.class);
addAttribute(getColumnNamePenalIntrestRule(), "penal int rule",
String.class);
addAttribute(getColumnNamePaymentCode(), "payment code", String.class);
addAttribute(getColumnNameNotificationAndPaymentFee1(), "not pay fee1",
Double.class);
addAttribute(getColumnNameNotificationAndPaymentFee2(), "not pay fee2",
Double.class);
addAttribute(getColumnNameOtherCost(), "other cost", Double.class);
addAttribute(getColumnNameInvoiceStatus(), "invoice status",
String.class);
// added for
addAttribute(COLUMN_DK_QUANTITY, "Quatity", Double.class);
addAttribute(COLUMN_DK_ITEM_PRICE, "Item price", Double.class);
}
public static String getEntityTableName() {
return "FIN_ACC_ENTRY";
}
public static String getRoundIdColumnName() {
return "FIN_ASSESSMENT_ROUND_ID";
}
public static String getEntryGroupIdColumnName() {
return "FIN_ENTRY_GROUP_ID";
}
public static String getAccountIdColumnName() {
return "FIN_ACCOUNT_ID";
}
public static String getCashierIdColumnName() {
return "FIN_CASHIER_ID";
}
public static String getAccountKeyIdColumnName() {
return "FIN_ACC_KEY_ID";
}
public static String getEntryTypeColumnName() {
return "ENTRY_TYPE";
}
public static String getNameColumnName() {
return "NAME";
}
public static String getInfoColumnName() {
return "INFO";
}
public static String getColumnTotal() {
return "TOTAL";
}
public static String getColumnVAT() {
return "VAT";
}
public static String getColumnNetto() {
return "NETTO";
}
public static String getPaymentDateColumnName() {
return "PAYMENT_DATE";
}
public static String getLastUpdatedColumnName() {
return "LAST_UPDATED";
}
public static String getColumnNameStatus() {
return "STATUS";
}
public static String getColumnNameDivisionForAccounting() {
return "DIVISION";
}
/* added 6/12/2004 - birna */
public static String getColumnNameAccountBook() {
return "ACCOUNT_BOOK";
}
public static String getColumnNameInvoiceNumber() {
return "INVOICE_NUMBER";
}
public static String getColumnNameFinalDueDate() {
return "FINAL_DUE_DATE";
}
public static String getColumnNameUserId() {
return UserBMPBean.getColumnNameUserID();
}
public static String getColumnNameDisallowanceDate() {
return "DISALLOWANCE_DATE";
}
public static String getColumnNameBatchNumber() {
return "BATCH_NUMBER";
}
public static String getColumnNameDueDate() {
return "DUE_DATE";
}
public static String getColumnNamePenalIntrestCode() {
return "PENAL_INT_CODE";
}
public static String getColumnNamePenalIntrestProsent() {
return "PENAL_INT_PROS";
}
public static String getColumnNamePenalIntrestRule() {
return "PENAL_INT_RULE";
}
public static String getColumnNamePaymentCode() {
return "PAYMENT_CODE";
}
public static String getColumnNameNotificationAndPaymentFee1() {
return "NOT_PAY_FEE1";
}
public static String getColumnNameNotificationAndPaymentFee2() {
return "NOT_PAY_FEE2";
}
public static String getColumnNameOtherCost() {
return "OTHER_COST";
}
public static String getColumnNameInvoiceStatus() {
return "INVOICE_STATUS";
}
public String getEntityName() {
return getEntityTableName();
}
public int getAccountId() {
return getIntColumnValue(getAccountIdColumnName());
}
public void setAccountId(Integer account_id) {
setColumn(getAccountIdColumnName(), account_id);
}
public void setAccountId(int account_id) {
setColumn(getAccountIdColumnName(), account_id);
}
public int getEntryGroupId() {
return getIntColumnValue(getEntryGroupIdColumnName());
}
public void setEntryGroupId(int entry_group_id) {
setColumn(getEntryGroupIdColumnName(), entry_group_id);
}
public String getEntryType() {
return getStringColumnValue(getEntryTypeColumnName());
}
public void setEntryType(String entryType) {
setColumn(getEntryTypeColumnName(), entryType);
}
public AccountKey getAccountKey() {
return (AccountKey) getColumnValue(getAccountKeyIdColumnName());
}
public int getAccountKeyId() {
return getIntColumnValue(getAccountKeyIdColumnName());
}
public void setAccountKeyId(Integer account_key_id) {
setColumn(getAccountKeyIdColumnName(), account_key_id);
}
public void setAccountKeyId(int account_key_id) {
setColumn(getAccountKeyIdColumnName(), account_key_id);
}
public Timestamp getPaymentDate() {
return (Timestamp) getColumnValue(getPaymentDateColumnName());
}
public void setPaymentDate(Timestamp payment_date) {
setColumn(getPaymentDateColumnName(), payment_date);
}
public Timestamp getLastUpdated() {
return (Timestamp) getColumnValue(getLastUpdatedColumnName());
}
public void setLastUpdated(Timestamp last_updated) {
setColumn(getLastUpdatedColumnName(), last_updated);
}
public int getCashierId() {
return getIntColumnValue(getCashierIdColumnName());
}
public void setCashierId(Integer member_id) {
setColumn(getCashierIdColumnName(), member_id);
}
public void setCashierId(int member_id) {
setColumn(getCashierIdColumnName(), member_id);
}
public String getName() {
String name = getStringColumnValue(getNameColumnName());
if (name == null) {
name = this.getAccountKey().getTariffKey().getName();
}
return name;
}
public void setName(String name) {
setColumn(getNameColumnName(), name);
}
public String getInfo() {
String info = getStringColumnValue(getInfoColumnName());
if (info == null) {
info = this.getAccountKey().getTariffKey().getInfo();
}
return info;
}
public void setInfo(String info) {
setColumn(getInfoColumnName(), info);
}
public void setNetto(float netto) {
setColumn(getColumnNetto(), netto);
}
public float getNetto() {
return getFloatColumnValue(getColumnNetto());
}
public void setPrice(Float netto) {
setColumn(getColumnNetto(), netto);
}
public void setPrice(float netto) {
setColumn(getColumnNetto(), netto);
}
public float getVAT() {
return getFloatColumnValue(getColumnVAT());
}
public void setVAT(Float vat) {
setColumn(getColumnVAT(), vat);
}
public void setVAT(float vat) {
setColumn(getColumnVAT(), vat);
}
public float getTotal() {
return getFloatColumnValue(getColumnTotal());
}
public void setTotal(Float total) {
setColumn(getColumnTotal(), total);
}
public void setTotal(float total) {
setColumn(getColumnTotal(), total);
}
public int getRoundId() {
return getIntColumnValue(getRoundIdColumnName());
}
public void setRoundId(Integer round) {
setColumn(getRoundIdColumnName(), round);
}
public void setRoundId(int round) {
setColumn(getRoundIdColumnName(), round);
}
public String getStatus() {
return getStringColumnValue(getColumnNameStatus());
}
public void setDivisionForAccounting(String division) {
setColumn(getColumnNameDivisionForAccounting(), division);
}
public String getDivisionForAccounting() {
return getStringColumnValue(getColumnNameDivisionForAccounting());
}
/* added 6/12/2004 - birna */
public int getAccountBook() {
return getIntColumnValue(getColumnNameAccountBook());
}
public void setAccountBook(int accountBook) {
setColumn(getColumnNameAccountBook(), accountBook);
}
public Integer getInvoiceNumber() {
return getIntegerColumnValue(getColumnNameInvoiceNumber());
}
public void setInvoiceNumber(Integer invoiceNumber) {
setColumn(getColumnNameInvoiceNumber(), invoiceNumber);
}
public Timestamp getFinalDueDate() {
return getTimestampColumnValue(getColumnNameFinalDueDate());
}
public void setFinalDueDate(Timestamp finalDueDate) {
setColumn(getColumnNameFinalDueDate(), finalDueDate);
}
public int getUserId() {
return getIntColumnValue(getColumnNameUserId());
}
public void setUserId(int userId) {
setColumn(getColumnNameUserId(), userId);
}
public Timestamp getDisallowanceDate() {
return getTimestampColumnValue(getColumnNameDisallowanceDate());
}
public void setDisallowanceDate(Timestamp disallowanceDate) {
setColumn(getColumnNameDisallowanceDate(), disallowanceDate);
}
public int getBatchNumber() {
return getIntColumnValue(getColumnNameBatchNumber());
}
public void setBatchNumber(int batchNr) {
setColumn(getColumnNameBatchNumber(), batchNr);
}
public Date getDueDate() {
return getDateColumnValue(getColumnNameDueDate());
}
public void setDueDate(Date dueDate) {
setColumn(getColumnNameDueDate(), dueDate);
}
public String getPenalIntrestCode() {
return getStringColumnValue(getColumnNamePenalIntrestCode());
}
public void setPenalIntrestCode(String penalIntrestCode) {
setColumn(getColumnNamePenalIntrestCode(), penalIntrestCode);
}
public String getPenalIntrestRule() {
return getStringColumnValue(getColumnNamePenalIntrestRule());
}
public void setPenalIntrestRule(String penalIntrestRule) {
setColumn(getColumnNamePenalIntrestRule(), penalIntrestRule);
}
public double getPenalIntrestProsent() {
return getDoubleColumnValue(getColumnNamePenalIntrestProsent());
}
public void setPenalIntrestProsent(double penalIntrestProsent) {
setColumn(getColumnNamePenalIntrestProsent(), penalIntrestProsent);
}
public String getPaymentCode() {
return getStringColumnValue(getColumnNamePaymentCode());
}
public void setPaymentCode(String paymentCode) {
setColumn(getColumnNamePaymentCode(), paymentCode);
}
public double getNotificationAndPaymentFee1() {
return getDoubleColumnValue(getColumnNameNotificationAndPaymentFee1());
}
public void setNotificationAndPaymentFee1(double fee) {
setColumn(getColumnNameNotificationAndPaymentFee1(), fee);
}
public double getNotificationAndPaymentFee2() {
return getDoubleColumnValue(getColumnNameNotificationAndPaymentFee2());
}
public void setNotificationAndPaymentFee2(double fee) {
setColumn(getColumnNameNotificationAndPaymentFee2(), fee);
}
public double getOtherCost() {
return getDoubleColumnValue(getColumnNameOtherCost());
}
public void setOtherCost(double otherCost) {
setColumn(getColumnNameOtherCost(), otherCost);
}
public String getInvoiceStatus() {
return getStringColumnValue(getColumnNameInvoiceStatus());
}
public void setInvoiceStatus(String status) {
setColumn(getColumnNameInvoiceStatus(), status);
}
public void setStatus(String status) throws IllegalStateException {
if ((status.equalsIgnoreCase(STATUS_CREATED))
|| (status.equalsIgnoreCase(STATUS_CREATED))
|| (status.equalsIgnoreCase(STATUS_BILLED))) {
setColumn(getColumnNameStatus(), status);
setLastUpdated(com.idega.util.IWTimestamp.getTimestampRightNow());
} else {
throw new IllegalStateException("Undefined state : " + status);
}
}
public void setQuantity(double quantity) {
setColumn(COLUMN_DK_QUANTITY, quantity);
}
public double getQuantity() {
return getDoubleColumnValue(COLUMN_DK_QUANTITY);
}
public void setItemPrice(double itemPrice) {
setColumn(COLUMN_DK_ITEM_PRICE, itemPrice);
}
public double getItemPrice() {
return getDoubleColumnValue(COLUMN_DK_ITEM_PRICE);
}
// interface specific:
public String getType() {
return typeFinancial;
}
public String getFieldNameLastUpdated() {
return getLastUpdatedColumnName();
}
public String getFieldNameAccountId() {
return getAccountIdColumnName();
}
public String getTableName() {
return getEntityTableName();
}
public String getFieldNameStatus() {
return getColumnNameStatus();
}
public Collection ejbFindByAccountAndAssessmentRound(Integer accountID,
Integer assessmentRoundID) throws FinderException {
return super.idoFindPKsByQuery(super.idoQueryGetSelect()
.appendWhereEquals(getAccountIdColumnName(), accountID)
.appendAndEquals(getRoundIdColumnName(), assessmentRoundID));
}
public double ejbHomeGetTotalSumByAccountAndAssessmentRound(
Integer accountID, Integer assessmentRoundID) throws SQLException {
StringBuffer sql = new StringBuffer();
sql.append("select sum(").append(getColumnTotal()).append(") from ");
sql.append(getEntityTableName()).append(" where ").append(
getAccountIdColumnName()).append("=").append(accountID);
sql.append(" and ").append(getRoundIdColumnName()).append("=").append(
assessmentRoundID);
// select sum(total) from fin_acc_entry where fin_account_id = 165 and
// fin_assessment_round_id = 3187
return (super.getDoubleTableValue(sql.toString()));
}
public double ejbHomeGetTotalSumByAccount(Integer accountID)
throws SQLException {
return ejbHomeGetTotalSumByAccount(accountID, null);
}
public double ejbHomeGetTotalSumByAccount(Integer accountID,
String roundStatus) throws SQLException {
try {
Table entryTable = new Table(this);
Table roundTable = new Table(AssessmentRound.class);
SelectQuery query = new SelectQuery(entryTable);
query.addColumn(new SumColumn(entryTable, getColumnTotal()));
query.addCriteria(new MatchCriteria(entryTable
.getColumn(getAccountIdColumnName()), MatchCriteria.EQUALS,
accountID));
if (roundStatus != null) {
query.addJoin(entryTable, roundTable);
query.addCriteria(new MatchCriteria(
roundTable.getColumn(AssessmentRoundBMPBean
.getStatusColumnName()), MatchCriteria.EQUALS,
roundStatus, true));
}
/*
*
* StringBuffer sql = new StringBuffer(); sql.append("select
* sum(").append(getColumnTotal()).append(") from ");
* sql.append(getEntityTableName()).append( " where
* ").append(getAccountIdColumnName()).append("=").append(accountID);
*/
// select sum(total) from fin_acc_entry where fin_account_id = 165
// and fin_assessment_round_id = 3187
return (super.getDoubleTableValue(query.toString()));
} catch (IDORelationshipException e) {
throw new SQLException(e.getMessage());
}
}
public double ejbHomeGetTotalSumByAssessmentRound(Integer roundID)
throws SQLException {
StringBuffer sql = new StringBuffer();
sql.append("select sum(").append(getColumnTotal()).append(") from ");
sql.append(getEntityTableName()).append(" where ").append(
getRoundIdColumnName()).append("=").append(roundID);
return (super.getDoubleTableValue(sql.toString()));
}
public Collection ejbFindByAssessmentRound(Integer assessmentRoundID)
throws FinderException {
return super.idoFindPKsByQuery(super.idoQueryGetSelect()
.appendWhereEquals(getRoundIdColumnName(), assessmentRoundID));
}
public Collection ejbFindByAccountAndStatus(Integer accountID,
String status, Date fromDate, Date toDate, String assessmentStatus)
throws FinderException {
try {
Table entryTable = new Table(this);
Table roundTable = new Table(AssessmentRound.class);
SelectQuery query = new SelectQuery(entryTable);
query.addColumn(new WildCardColumn(entryTable));
if (assessmentStatus != null) {
query.addJoin(entryTable, roundTable);
}
query.addCriteria(new MatchCriteria(entryTable,
getFieldNameAccountId(), MatchCriteria.EQUALS, accountID));
if (status != null) {
query.addCriteria(new MatchCriteria(entryTable
.getColumn(getColumnNameStatus()),
MatchCriteria.EQUALS, status, true));
}
if (fromDate != null && toDate != null) {
IWTimestamp from = new IWTimestamp(fromDate);
IWTimestamp to = new IWTimestamp(toDate);
to.setTime(23, 59, 59);
query.addCriteria(new MatchCriteria(entryTable,
getFieldNameLastUpdated(), MatchCriteria.GREATEREQUAL,
from.getTimestamp()));
query.addCriteria(new MatchCriteria(entryTable,
getFieldNameLastUpdated(), MatchCriteria.LESSEQUAL, to
.getTimestamp()));
}
if (assessmentStatus != null) {
query.addCriteria(new MatchCriteria(
roundTable.getColumn(AssessmentRoundBMPBean
.getStatusColumnName()), MatchCriteria.EQUALS,
assessmentStatus, true));
}
return super.idoFindPKsBySQL(query.toString());
} catch (IDORelationshipException e) {
throw new FinderException(e.getMessage());
}
}
public int ejbHomeCountByGroup(Integer groupID) throws IDOException {
return super.idoGetNumberOfRecords(super.idoQueryGetSelectCount()
.appendWhereEquals(getEntryGroupIdColumnName(), groupID));
}
public Collection ejbFindUnGrouped(Date from, Date to)
throws FinderException {
IDOQuery query = super.idoQueryGetSelect();
query.appendWhereIsNull(getEntryGroupIdColumnName());
query.appendAnd();
query.appendWithinDates(getLastUpdatedColumnName(), from, to);
return super.idoFindPKsByQuery(query);
}
public Collection ejbFindByEntryGroup(Integer groupID)
throws FinderException {
return super.idoFindPKsByQuery(super.idoQueryGetSelect()
.appendWhereEquals(getEntryGroupIdColumnName(), groupID));
}
public Date ejbHomeGetMaxDateByAccount(Integer accountID)
throws IDOException {
IDOQuery query = super.idoQuery().appendSelect().append("max(").append(
getLastUpdatedColumnName()).append(")");
query.appendFrom().append(getEntityName());
query.appendWhereEquals(getAccountIdColumnName(), accountID);
try {
return getDateTableValue(query.toString());
} catch (SQLException e) {
throw new IDOException(e.getMessage());
}
}
public Integer ejbFindByInvoiceNumber(int invoiceNumber)
throws FinderException {
IDOQuery query = idoQueryGetSelect();
query.appendWhereEquals(getColumnNameInvoiceNumber(), invoiceNumber);
return (Integer) idoFindOnePKByQuery(query);
}
public Collection ejbFindByBatchNumber(int batchNumber) throws FinderException {
IDOQuery query = idoQueryGetSelect();
query.appendWhereEquals(getColumnNameBatchNumber(), batchNumber);
return super.idoFindPKsByQuery(query);
}
public Collection ejbFindInvoicesByBatchNumber(int batchNumber)
throws FinderException {
IDOQuery query = idoQueryGetSelect();
query.appendWhereEquals(getColumnNameBatchNumber(), batchNumber);
return super.idoFindPKsByQuery(query);
}
}