/** * TNTConcept Easy Enterprise Management by Autentia Real Bussiness Solution S.L. * Copyright (C) 2007 Autentia Real Bussiness Solution S.L. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.autentia.tnt.bean.account; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.Hashtable; import java.util.List; import java.util.Locale; import java.util.ResourceBundle; import javax.faces.component.UIComponent; import javax.faces.component.html.HtmlDataTable; import javax.faces.context.FacesContext; import javax.faces.event.ValueChangeEvent; import javax.faces.model.SelectItem; import org.acegisecurity.acls.domain.BasePermission; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.autentia.tnt.bean.BaseBean; import com.autentia.tnt.bean.NavigationResults; import com.autentia.tnt.bean.billing.BillBean; import com.autentia.tnt.businessobject.Account; import com.autentia.tnt.businessobject.AccountEntry; import com.autentia.tnt.businessobject.AccountEntryType; import com.autentia.tnt.businessobject.Bill; import com.autentia.tnt.businessobject.BillState; import com.autentia.tnt.dao.SortCriteria; import com.autentia.tnt.dao.search.AccountEntrySearch; import com.autentia.tnt.manager.account.AccountEntryManager; import com.autentia.tnt.manager.account.AccountEntryTypeManager; import com.autentia.tnt.manager.account.AccountManager; import com.autentia.tnt.manager.billing.BillManager; import com.autentia.tnt.manager.security.Permission; import com.autentia.tnt.upload.Uploader; import com.autentia.tnt.upload.UploaderFactory; import com.autentia.tnt.util.ConfigurationUtil; import com.autentia.tnt.util.FacesUtils; import com.autentia.tnt.util.SpringUtils; public class AccountEntryBean extends BaseBean { private BigDecimal costs; private BigDecimal incomes; private BigDecimal total; private BigDecimal costsType; private BigDecimal incomesType; private BigDecimal totalType; private boolean hideInitialEntry = false; private static final int ALL_YEARS = 0; private static final BillManager billMgr = BillManager.getDefault(); public boolean isHideInitialEntry() { return hideInitialEntry; } public void setHideInitialEntry(boolean hideInitialEntry) { this.hideInitialEntry = hideInitialEntry; } /** * Reset search criteria * @return forward to LIST page */ public String reset(){ search.reset(); return list(); } private void calcTotals(List<AccountEntry> res) { costs = new BigDecimal(0); incomes = new BigDecimal(0); costsType = new BigDecimal(0); incomesType = new BigDecimal(0); Hashtable mapaCajaTotales = new Hashtable(); for (AccountEntry elem : res) { Integer accountAct = elem.getAccount().getId(); BigDecimal accountValueAct = null; if (!mapaCajaTotales.containsKey(accountAct)) { mapaCajaTotales.put(accountAct, new BigDecimal(0)); } accountValueAct = (BigDecimal) mapaCajaTotales.get(accountAct); BigDecimal actual = elem.getAmount(); BigDecimal resul = accountValueAct.add(actual); elem.setAmountAccountNow(resul); mapaCajaTotales.remove(accountAct); mapaCajaTotales.put(accountAct, resul); if (actual.signum() >= 0) { setIncomes(incomes.add(actual)); } else { setCosts(costs.add(actual)); } if(elem.getType().getGroup().getId()==ConfigurationUtil.getDefault().getCostId()) { setCostsType(costsType.add(actual)); } else { setIncomesType(incomesType.add(actual)); } } setTotal(incomes.add(costs)); setTotalType(incomesType.add(costsType)); } public BigDecimal getCostsType() { return costsType; } public void setCostsType(BigDecimal costsType) { this.costsType = costsType; } public BigDecimal getIncomesType() { return incomesType; } public void setIncomesType(BigDecimal incomesType) { this.incomesType = incomesType; } public BigDecimal getCosts() { return costs; } public void setCosts(BigDecimal costs) { this.costs = costs; } public BigDecimal getIncomes() { return incomes; } public void setIncomes(BigDecimal incomes) { this.incomes = incomes; } public BigDecimal getTotal() { return total; } public void setTotal(BigDecimal total) { this.total = total; } public String select() { Integer id = Integer.parseInt(FacesUtils.getRequestParameter(ROW_ID)); accountEntry = manager.getEntityById(id); BillBean bean = (BillBean) FacesUtils.getBean("billBean"); accountEntry.getBills().add(bean.getBill()); bean.getBill().getEntries().add(accountEntry); return NavigationResults.BILL_SEARCH_ENTRIES; } public List<AccountEntry> getAllMinusBill() { return manager.getAllMinusBill(year, bill, new SortCriteria(sortColumn, sortAscending)); } private int year = Calendar.getInstance().get(Calendar.YEAR); private int accountSelected = ALL_ACCOUNTS; private Bill bill; public static int ALL_ACCOUNTS = -1; public int getYear() { return year; } public void setYear(int year) { this.year = year; } public int getAccountSelected() { return accountSelected; } public void setAccountSelected(int accountSelected) { this.accountSelected = accountSelected; } public List<SelectItem> getAllAccounts() { FacesContext context = FacesContext.getCurrentInstance(); Locale locale = context.getViewRoot().getLocale(); ResourceBundle bundle = ResourceBundle.getBundle( "com.autentia.tnt.resources.messages", locale); ArrayList<SelectItem> ret = new ArrayList<SelectItem>(); ret.add(new SelectItem(Integer.valueOf(ALL_ACCOUNTS), bundle .getString("accountEntry.allaccounts"))); List<Account> refs = AccountManager.getDefault().getAllEntities(null, new SortCriteria("name")); for (Account ref : refs) { ret.add(new SelectItem(ref.getId(), ref.getName())); } return ret; } public static int getMaximumYears() { return ConfigurationUtil.getDefault().getAccountEntryMaximumYears(); } public List<SelectItem> getYears() { ArrayList<SelectItem> ret = new ArrayList<SelectItem>(); FacesContext context = FacesContext.getCurrentInstance(); Locale locale = context.getViewRoot().getLocale(); ResourceBundle bundle = ResourceBundle.getBundle( "com.autentia.tnt.resources.messages", locale); Date fecha = new Date(); Calendar cal = Calendar.getInstance(); cal.setTime(fecha); int actual = cal.get(Calendar.YEAR); ret.add(new SelectItem(Integer.valueOf(actual), bundle .getString("accountEntry.fiscalYear.now"))); ret.add(new SelectItem(Integer.valueOf(ALL_YEARS), bundle .getString("accountEntry.fiscalYear.all"))); for (int i = 1; i < getMaximumYears(); i++) { ret.add(new SelectItem(Integer.valueOf(actual - i), "" + (actual - i))); } return ret; } public Bill getBill() { return bill; } public void setBill(Bill bill) { this.bill = bill; } /* accountEntry - generated by stajanov (do not edit/delete) */ /** Active search object */ private AccountEntrySearch search = new AccountEntrySearch(); /** Manager */ private static AccountEntryManager manager = AccountEntryManager .getDefault(); /** Logger */ private static final Log log = LogFactory.getLog(AccountEntryBean.class); /** Quick search letter for ABC pager control */ private Character letter; /** Upload service */ private static final Uploader uploader = UploaderFactory .getInstance("accountEntry"); /** Active AccountEntry object */ private AccountEntry accountEntry; /** Default sort column */ private String sortColumn = "date"; /** Default sort order */ private boolean sortAscending = false; /** * List accountEntrys. Order depends on Faces parameter sort. * * @return the list of all accountEntrys sorted by requested criterion */ public List<AccountEntry> getAll() { if (year == ALL_YEARS) { search.unsetYear(); } else { search.setYear(year); } search.setHideInitialEntry(hideInitialEntry); if (accountSelected != ALL_ACCOUNTS) { search.setAccount(AccountManager.getDefault().getEntityById( accountSelected)); } else { search.unsetAccount(); } List<AccountEntry> res = manager.getAllEntities(search, new SortCriteria(sortColumn, sortAscending)); calcTotals(res); return res; } // Getters to list possible values of related (one-to-one or many-to-many) // entities /** * Get the list of all accounts * * @return the list of all accounts */ public List<SelectItem> getAccounts() { ArrayList<SelectItem> ret = new ArrayList<SelectItem>(); List<Account> refs = AccountManager.getDefault().getAllEntities(null, new SortCriteria("name")); for (Account ref : refs) { ret.add(new SelectItem(ref, ref.getName())); } return ret; } /** * Get the list of all types * * @return the list of all types */ public List<SelectItem> getTypes() { ArrayList<SelectItem> ret = new ArrayList<SelectItem>(); List<AccountEntryType> refs = AccountEntryTypeManager.getDefault() .getAllEntities(null, new SortCriteria("name")); for (AccountEntryType ref : refs) { ret.add(new SelectItem(ref, ref.getName())); } ret.add(0, new SelectItem("")); return ret; } // Getters to list possible values of enum fields // Methods to create/remove instances of one-to-many entities (slave // entities) /** * Go to create page * * @return forward to CREATE page */ public String create() { accountEntry = new AccountEntry(); accountEntry.setDate(new Date()); accountEntry.setAmountDate(new Date()); return NavigationResults.CREATE; } /** * Go to edit page * * @return forward to EDIT page */ public String edit() { Integer id = Integer.parseInt(FacesUtils.getRequestParameter(ROW_ID)); accountEntry = manager.getEntityById(id); return NavigationResults.EDIT; } /** * Go to detail page * * @return forward to DETAIL page */ public String detail() { Integer id = Integer.parseInt(FacesUtils.getRequestParameter(ROW_ID)); accountEntry = manager.getEntityById(id); return SpringUtils.isAclPermissionGranted(accountEntry, BasePermission.WRITE) ? NavigationResults.EDIT : NavigationResults.DETAIL; } /** * Save bean and stay on it * * @return forward to list page */ public String save() { if (accountEntry.getId() == null) { manager.insertEntity(accountEntry); } else { manager.updateEntity(accountEntry); } return NavigationResults.LIST; } /** * Delete bean and go back to beans list * * @return forward to LIST page */ public String delete() { manager.deleteEntity(accountEntry); accountEntry = null; return NavigationResults.LIST; } /** * Go back to beans list * * @return forward to LIST page */ public String list() { return NavigationResults.LIST; } /** * Go to search page * * @return forward to SEARCH page */ public String search() { return NavigationResults.SEARCH; } /** * Check if we have an active object. * * @return true is an object is selected */ public boolean isAccountEntrySelected() { return accountEntry != null; } // Getters and setters to manipulate sorting public boolean isSortAscending() { return sortAscending; } public void setSortAscending(boolean sortAscending) { this.sortAscending = sortAscending; } public String getSortColumn() { return sortColumn; } public void setSortColumn(String sortColumn) { this.sortColumn = sortColumn; } // Getters and setters to handle search public Date getSearchStartDate() { return search.getStartDate(); } public void setSearchStartDate(Date val) { if (val != null) { search.setStartDate(val); } else { search.unsetStartDate(); } } public boolean isSearchStartDateValid() { return search.isStartDateSet(); } public void setSearchStartDateValid(boolean val) { if (val) { search.setStartDate(search.getStartDate()); } else { search.unsetStartDate(); } } public Date getSearchEndDate() { return search.getEndDate(); } public void setSearchEndDate(Date val) { if (val != null) { search.setEndDate(val); } else { search.unsetEndDate(); } } public boolean isSearchEndDateValid() { return search.isEndDateSet(); } public void setSearchEndDateValid(boolean val) { if (val) { search.setEndDate(search.getEndDate()); } else { search.unsetEndDate(); } } public Date getSearchStartAmountDate() { return search.getStartAmountDate(); } public void setSearchStartAmountDate(Date val) { if (val != null) { search.setStartAmountDate(val); } else { search.unsetStartAmountDate(); } } public boolean isSearchStartAmountDateValid() { return search.isStartAmountDateSet(); } public void setSearchStartAmountDateValid(boolean val) { if (val) { search.setStartAmountDate(search.getStartAmountDate()); } else { search.unsetStartAmountDate(); } } public Date getSearchEndAmountDate() { return search.getEndAmountDate(); } public void setSearchEndAmountDate(Date val) { if (val != null) { search.setEndAmountDate(val); } else { search.unsetEndAmountDate(); } } public boolean isSearchEndAmountDateValid() { return search.isEndAmountDateSet(); } public void setSearchEndAmountDateValid(boolean val) { if (val) { search.setEndAmountDate(search.getEndAmountDate()); } else { search.unsetEndAmountDate(); } } public String getSearchConcept() { return search.getConcept(); } public void setSearchConcept(String val) { if (search.isConceptSet()) { search.setConcept(val); } } public boolean isSearchConceptValid() { return search.isConceptSet(); } public void setSearchConceptValid(boolean val) { if (val) { search.setConcept(search.getConcept()); } else { search.unsetConcept(); } } public BigDecimal getSearchStartAmount() { return search.getStartAmount(); } public void setSearchStartAmount(BigDecimal val) { if (search.isStartAmountSet()) { search.setStartAmount(val); } } public boolean isSearchStartAmountValid() { return search.isStartAmountSet(); } public void setSearchStartAmountValid(boolean val) { if (val) { search.setStartAmount(search.getStartAmount()); } else { search.unsetStartAmount(); } } public BigDecimal getSearchEndAmount() { return search.getEndAmount(); } public void setSearchEndAmount(BigDecimal val) { if (search.isEndAmountSet()) { search.setEndAmount(val); } } public boolean isSearchEndAmountValid() { return search.isEndAmountSet(); } public void setSearchEndAmountValid(boolean val) { if (val) { search.setEndAmount(search.getEndAmount()); } else { search.unsetEndAmount(); } } public String getSearchEntryNumber() { return search.getEntryNumber(); } public void setSearchEntryNumber(String val) { if (search.isEntryNumberSet()) { search.setEntryNumber(val); } } public boolean isSearchEntryNumberValid() { return search.isEntryNumberSet(); } public void setSearchEntryNumberValid(boolean val) { if (val) { search.setEntryNumber(search.getEntryNumber()); } else { search.unsetEntryNumber(); } } public String getSearchDocNumber() { return search.getDocNumber(); } public void setSearchDocNumber(String val) { if (search.isDocNumberSet()) { search.setDocNumber(val); } } public boolean isSearchDocNumberValid() { return search.isDocNumberSet(); } public void setSearchDocNumberValid(boolean val) { if (val) { search.setDocNumber(search.getDocNumber()); } else { search.unsetDocNumber(); } } public String getSearchObservations() { return search.getObservations(); } public void setSearchObservations(String val) { if (val != null) { search.setObservations(val); } else { search.unsetObservations(); } } public boolean isSearchObservationsValid() { return search.isObservationsSet(); } public void setSearchObservationsValid(boolean val) { if (val) { search.setObservations(search.getObservations()); } else { search.unsetObservations(); } } public Account getSearchAccount() { return search.getAccount(); } public void setSearchAccount(Account val) { if (val != null) { search.setAccount(val); } else { search.unsetAccount(); } } public boolean isSearchAccountValid() { return search.isAccountSet(); } public void setSearchAccountValid(boolean val) { if (val) { search.setAccount(search.getAccount()); } else { search.unsetAccount(); } } public AccountEntryType getSearchType() { return search.getType(); } public void setSearchType(AccountEntryType val) { if (val != null) { search.setType(val); } else { search.unsetType(); } } public boolean isSearchTypeValid() { return search.isTypeSet(); } public void setSearchTypeValid(boolean val) { if (val) { search.setType(search.getType()); } else { search.unsetType(); } } // Getters and setters to handle uploads // Getters and setters to manipulate active AccountEntry object public java.lang.Integer getId() { return accountEntry.getId(); } public Date getDate() { return accountEntry.getDate(); } public void setDate(Date date) { accountEntry.setDate(date); } public Date getAmountDate() { return accountEntry.getAmountDate(); } public void setAmountDate(Date amountDate) { accountEntry.setAmountDate(amountDate); } public String getConcept() { return accountEntry.getConcept(); } public void setConcept(String concept) { accountEntry.setConcept(concept); } public BigDecimal getAmount() { return accountEntry.getAmount(); } public void setAmount(BigDecimal amount) { accountEntry.setAmount(amount); } public String getEntryNumber() { return accountEntry.getEntryNumber(); } public void setEntryNumber(String entryNumber) { accountEntry.setEntryNumber(entryNumber); } public String getDocNumber() { return accountEntry.getDocNumber(); } public void setDocNumber(String docNumber) { accountEntry.setDocNumber(docNumber); } public String getObservations() { return accountEntry.getObservations(); } public void setObservations(String observations) { accountEntry.setObservations(observations); } public Account getAccount() { return accountEntry.getAccount(); } public void setAccount(Account account) { accountEntry.setAccount(account); } public AccountEntryType getType() { return accountEntry.getType(); } public void setType(AccountEntryType type) { accountEntry.setType(type); } /** * Handle an ABC pager letter click: filter objects by specified starting * letter */ public void letterClicked() { if (letter != null) { UIComponent comp = FacesUtils.getComponent("accountEntrys:list"); HtmlDataTable tabla = (HtmlDataTable) comp; tabla.setFirst(0); search.setConcept(letter + "%"); } else { search.unsetConcept(); } } public Character getLetter() { return letter; } public void setLetter(Character letter) { this.letter = letter; } /** * Whether or not create button is available for user * * @return true if user can create objects of type AccountEntry */ public boolean isCreateAvailable() { return SpringUtils.isRolePermissionGranted(Permission .Entity_Create(AccountEntry.class)); } /** * Whether or not edit button is available for user * * @return true if user can edit current object */ public boolean isEditAvailable() { return SpringUtils.isAclPermissionGranted(accountEntry, BasePermission.WRITE); } /** * Whether or not delete button is available for user * * @return true if user can delete current object */ public boolean isDeleteAvailable() { return (accountEntry.getId() != null) && SpringUtils.isAclPermissionGranted(accountEntry, BasePermission.DELETE); } /* accountEntry - generated by stajanov (do not edit/delete) */ public void valueTypeChanged(ValueChangeEvent event) { this.setType((AccountEntryType) event.getNewValue()); FacesUtils.renderResponse(); } public AccountEntrySearch getSearch() { return search; } public boolean getCanCopy() { return (accountEntry.getId() != null); } public BigDecimal getTotalType() { return totalType; } public void setTotalType(BigDecimal totalType) { this.totalType = totalType; } }