/** * 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.contacts; import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.faces.event.ActionEvent; 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 org.apache.myfaces.custom.fileupload.UploadedFile; import com.autentia.tnt.bean.BaseBean; import com.autentia.tnt.bean.NavigationResults; import com.autentia.tnt.bean.billing.CreditTitleBean; import com.autentia.tnt.businessobject.Interaction; import com.autentia.tnt.businessobject.InteractionInterest; import com.autentia.tnt.businessobject.InteractionType; import com.autentia.tnt.businessobject.Offer; import com.autentia.tnt.businessobject.Organization; import com.autentia.tnt.businessobject.Project; import com.autentia.tnt.businessobject.User; import com.autentia.tnt.dao.SortCriteria; import com.autentia.tnt.dao.hibernate.OrganizationDAO; import com.autentia.tnt.dao.search.InteractionSearch; import com.autentia.tnt.dao.search.OrganizationSearch; import com.autentia.tnt.manager.admin.ProjectManager; import com.autentia.tnt.manager.admin.UserManager; import com.autentia.tnt.manager.contacts.InteractionManager; import com.autentia.tnt.manager.contacts.InteractionTypeManager; import com.autentia.tnt.manager.contacts.OfferManager; import com.autentia.tnt.manager.contacts.OrganizationManager; import com.autentia.tnt.manager.security.AuthenticationManager; 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.FileUtil; import com.autentia.tnt.util.SpringUtils; /** * UI bean for Interaction objects. * @author stajanov code generator */ public class InteractionBean extends BaseBean { /** Serial version field */ private static final long serialVersionUID = -1L; private OrganizationDAO organizationDAO = new OrganizationDAO(); private static AuthenticationManager authMgr = AuthenticationManager.getDefault(); /** * Get the list of all projects * @return the list of all projects */ public List<SelectItem> getOpenprojects(){ ArrayList<SelectItem> ret = new ArrayList<SelectItem>(); List<Project> refs = ProjectManager.getDefault().getOpenProjects(new SortCriteria("name")); for( Project proy : refs ){ ret.add( new SelectItem( proy, proy.getName() ) ); } return ret; } public List<Interaction> getAllMine(){ int actualUserId = authMgr.getCurrentPrincipal().getUser().getRole().getId(); if (actualUserId != ConfigurationUtil.getDefault().getRoleAdminId() && actualUserId != ConfigurationUtil.getDefault().getRoleSupervisorId()) { search.setUser(authMgr.getCurrentPrincipal().getUser()); } return manager.getAllEntities(search, new SortCriteria(sortColumn, sortAscending)); } /** * Get the list of all organizations * @return the list of all organizations */ public List<SelectItem> getOrganizations(){ ArrayList<SelectItem> ret = new ArrayList<SelectItem>(); List<Organization> refs = organizationDAO .search( new SortCriteria("name") ); for( Organization ref : refs ){ ret.add( new SelectItem( ref, ref.getName() ) ); } return ret; } /** Selected organization **/ private Organization selectedOrganization; public Organization getSelectedOrganization(){ if(interaction!=null && interaction.getProject()!=null) { if(selectedOrganization == null) { selectedOrganization = interaction.getProject().getClient(); } return selectedOrganization; } if(selectedOrganization==null) { OrganizationDAO organizationDAO = new OrganizationDAO(); selectedOrganization = organizationDAO.getById(ConfigurationUtil.getDefault().getIdOurCompany()); } return selectedOrganization; } public void setSelectedOrganization( Organization organization ){ selectedOrganization = organization; } public List<SelectItem> getProjectsBySelectedOrganization() { List<Project> refs = ProjectManager.getDefault().getProjectsByOrganization(getSelectedOrganization()); ArrayList<SelectItem> ret = new ArrayList<SelectItem>(); for( Object ref : refs ){ Project proy = (Project)ref; String asterisco = proy.isFinished()?"(*)":""; ret.add( new SelectItem( proy, proy.getName() + asterisco )); } return ret; } public void onSelectedOrganizationChanged( ValueChangeEvent event ){ setSelectedOrganization( (Organization)event.getNewValue() ); FacesUtils.renderResponse(); } public void onSelectedOrganizationSearchChanged( ValueChangeEvent event ){ Organization now = (Organization)event.getNewValue(); if(now==null) return; setSearchProjectValid(true); setSelectedOrganization( now ); FacesUtils.renderResponse(); } public void onEditSelected( ActionEvent event ){ setSelectedOrganization( null ); } /* interaction - generated by stajanov (do not edit/delete) */ /** Logger */ private static final Log log = LogFactory.getLog(InteractionBean.class); /** Active search object */ private InteractionSearch search = new InteractionSearch(); /** Manager */ private static InteractionManager manager = InteractionManager.getDefault(); /** Upload service */ private static final Uploader uploader = UploaderFactory.getInstance("interaction"); /** Temporary file field */ private String oldFile; /** Uploaded file object */ private UploadedFile uploadFile; /** Active Interaction object */ private Interaction interaction; /** Default sort column */ private String sortColumn = "creationDate"; /** Default sort order */ private boolean sortAscending = false; /** * List interactions. Order depends on Faces parameter sort. * @return the list of all interactions sorted by requested criterion */ public List<Interaction> getAll(){ return manager.getAllEntities(search, new SortCriteria(sortColumn, sortAscending) ); } // Getters to list possible values of related entities /** * Get the list of all projects * @return the list of all projects */ public List<SelectItem> getProjects(){ List<Project> refs = ProjectManager.getDefault().getAllEntities( null, new SortCriteria("name") ); ArrayList<SelectItem> ret = new ArrayList<SelectItem>(); for( Project 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(){ List<InteractionType> refs = InteractionTypeManager.getDefault().getAllEntities( null, new SortCriteria("name") ); ArrayList<SelectItem> ret = new ArrayList<SelectItem>(); for( InteractionType ref : refs ){ ret.add( new SelectItem( ref, ref.getName() ) ); } return ret; } /** * Get the list of all users * @return the list of all users */ public List<SelectItem> getUsers(){ List<User> refs = UserManager.getDefault().getAllEntities( null, new SortCriteria("name") ); ArrayList<SelectItem> ret = new ArrayList<SelectItem>(); for( User ref : refs ){ ret.add( new SelectItem( ref, ref.getName() ) ); } return ret; } /** * Get the list of all offers * @return the list of all offers */ public List<SelectItem> getOffers(){ List<Offer> refs = OfferManager.getDefault().getAllEntities( null, new SortCriteria("title") ); ArrayList<SelectItem> ret = new ArrayList<SelectItem>(); for( Offer ref : refs ){ ret.add( new SelectItem( ref, ref.getTitle() ) ); } return ret; } // Getters to list possible values of enum fields public String getInterestFormatted(){ if(this.getInterest()!=null) { return FacesUtils.formatMessage("InteractionInterest."+this.getInterest().name()); } else { return ""; } } /** * Get the list of all Interest values * @return the list of all Interest values */ public List<SelectItem> getInterests(){ ArrayList<SelectItem> ret = new ArrayList<SelectItem>(); InteractionInterest[] vals = InteractionInterest.values(); for( InteractionInterest val : vals ){ ret.add( new SelectItem( val, FacesUtils.formatMessage("InteractionInterest."+val.name()) ) ); } return ret; } // Methods to create/remove instances of one-to-many entities (slave entities) /** * Whether or not create button is available for user * @return true if user can create objects of type Interaction */ public boolean isCreateAvailable() { return SpringUtils.isRolePermissionGranted(Permission.Entity_Create(Interaction.class)); } /** * Whether or not edit button is available for user * @return true if user can edit current object */ public boolean isEditAvailable() { return SpringUtils.isAclPermissionGranted(interaction,BasePermission.WRITE); } /** * Whether or not delete button is available for user * @return true if user can delete current object */ public boolean isDeleteAvailable() { return (interaction.getId()!=null) && SpringUtils.isAclPermissionGranted(interaction,BasePermission.DELETE); } /** * Go to create page * @return forward to CREATE page */ public String create(){ interaction = new Interaction(); // Usuario if(getUser()==null) { setUser(authMgr.getCurrentPrincipal().getUser()); } interaction.setCreationDate(new Date()); return NavigationResults.CREATE; } /** * Go to detail page * @return forward to DETAIL page */ public String detail(){ Integer id = Integer.parseInt( FacesUtils.getRequestParameter(ROW_ID) ); interaction = manager.getEntityById(id); // Entramos a la edición de la interacción por lo que por defecto ponemos como // organización seleccionada a la de la organización if (interaction != null) { selectedOrganization = interaction.getProject().getClient(); } return SpringUtils.isAclPermissionGranted( interaction, BasePermission.WRITE ) ? NavigationResults.EDIT : NavigationResults.DETAIL; } /** * Save bean and stay on it * @return forward to list page */ public String save(){ doBeforeSave(); if( interaction.getId()==null ){ manager.insertEntity(interaction); } else { manager.updateEntity(interaction); } // Handle uploads for file field if( uploadFile!=null ){ try { uploader.replace( Integer.toString(interaction.getId()), oldFile, uploadFile ); } catch (IOException e) { log.error("save - exception uploading field file",e); FacesUtils.addErrorMessage("file","error.fileTransfer",e.getMessage()); } } // Calls an after save action String result = doAfterSave(NavigationResults.LIST); // Unselect object interaction = null; return result; } /** * Delete bean and go back to beans list * @return forward to LIST page */ public String delete(){ manager.deleteEntity(interaction); interaction = 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 isInteractionSelected(){ return interaction!=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 InteractionSearch getSearch(){ return search; } public Date getSearchStartCreationDate(){ return search.getStartCreationDate(); } public void setSearchStartCreationDate( Date val ){ if( val!=null ){ search.setStartCreationDate( val ); } else { search.unsetStartCreationDate(); } } public boolean isSearchStartCreationDateValid(){ return search.isStartCreationDateSet(); } public void setSearchStartCreationDateValid( boolean val ){ if( val ){ search.setStartCreationDate( search.getStartCreationDate() ); } else { search.unsetStartCreationDate(); } } public Date getSearchEndCreationDate(){ return search.getEndCreationDate(); } public void setSearchEndCreationDate( Date val ){ if( val!=null ){ search.setEndCreationDate( val ); } else { search.unsetEndCreationDate(); } } public boolean isSearchEndCreationDateValid(){ return search.isEndCreationDateSet(); } public void setSearchEndCreationDateValid( boolean val ){ if( val ){ search.setEndCreationDate( search.getEndCreationDate() ); } else { search.unsetEndCreationDate(); } } public InteractionInterest getSearchInterest(){ return search.getInterest(); } public void setSearchInterest( InteractionInterest val ){ if( search.isInterestSet() ) { search.setInterest( val ); } } public boolean isSearchInterestValid(){ return search.isInterestSet(); } public void setSearchInterestValid( boolean val ){ if( val ){ search.setInterest( search.getInterest() ); } else { search.unsetInterest(); } } public String getSearchDescription(){ return search.getDescription(); } public void setSearchDescription( String val ){ if( search.isDescriptionSet() ) { search.setDescription( val ); } } public boolean isSearchDescriptionValid(){ return search.isDescriptionSet(); } public void setSearchDescriptionValid( boolean val ){ if( val ){ search.setDescription( search.getDescription() ); } else { search.unsetDescription(); } } public String getSearchFile(){ return search.getFile(); } public void setSearchFile( String val ){ if( search.isFileSet() ) { search.setFile( val ); } } public boolean isSearchFileValid(){ return search.isFileSet(); } public void setSearchFileValid( boolean val ){ if( val ){ search.setFile( search.getFile() ); } else { search.unsetFile(); } } public String getSearchFileMime(){ return search.getFileMime(); } public void setSearchFileMime( String val ){ if( search.isFileMimeSet() ) { search.setFileMime( val ); } } public boolean isSearchFileMimeValid(){ return search.isFileMimeSet(); } public void setSearchFileMimeValid( boolean val ){ if( val ){ search.setFileMime( search.getFileMime() ); } else { search.unsetFileMime(); } } public Integer getSearchDepartmentId(){ return search.getDepartmentId(); } public void setSearchDepartmentId( Integer val ){ if( search.isDepartmentIdSet() ) { search.setDepartmentId( val ); } } public boolean isSearchDepartmentIdValid(){ return search.isDepartmentIdSet(); } public void setSearchDepartmentIdValid( boolean val ){ if( val ){ search.setDepartmentId( search.getDepartmentId() ); } else { search.unsetDepartmentId(); } } public Date getSearchStartInsertDate(){ return search.getStartInsertDate(); } public void setSearchStartInsertDate( Date val ){ if( val!=null ){ search.setStartInsertDate( val ); } else { search.unsetStartInsertDate(); } } public boolean isSearchStartInsertDateValid(){ return search.isStartInsertDateSet(); } public void setSearchStartInsertDateValid( boolean val ){ if( val ){ search.setStartInsertDate( search.getStartInsertDate() ); } else { search.unsetStartInsertDate(); } } public Date getSearchEndInsertDate(){ return search.getEndInsertDate(); } public void setSearchEndInsertDate( Date val ){ if( val!=null ){ search.setEndInsertDate( val ); } else { search.unsetEndInsertDate(); } } public boolean isSearchEndInsertDateValid(){ return search.isEndInsertDateSet(); } public void setSearchEndInsertDateValid( boolean val ){ if( val ){ search.setEndInsertDate( search.getEndInsertDate() ); } else { search.unsetEndInsertDate(); } } public Date getSearchStartUpdateDate(){ return search.getStartUpdateDate(); } public void setSearchStartUpdateDate( Date val ){ if( val!=null ){ search.setStartUpdateDate( val ); } else { search.unsetStartUpdateDate(); } } public boolean isSearchStartUpdateDateValid(){ return search.isStartUpdateDateSet(); } public void setSearchStartUpdateDateValid( boolean val ){ if( val ){ search.setStartUpdateDate( search.getStartUpdateDate() ); } else { search.unsetStartUpdateDate(); } } public Date getSearchEndUpdateDate(){ return search.getEndUpdateDate(); } public void setSearchEndUpdateDate( Date val ){ if( val!=null ){ search.setEndUpdateDate( val ); } else { search.unsetEndUpdateDate(); } } public boolean isSearchEndUpdateDateValid(){ return search.isEndUpdateDateSet(); } public void setSearchEndUpdateDateValid( boolean val ){ if( val ){ search.setEndUpdateDate( search.getEndUpdateDate() ); } else { search.unsetEndUpdateDate(); } } public Project getSearchProject(){ return search.getProject(); } public void setSearchProject( Project val ){ if( search.isProjectSet() ) { search.setProject( val ); } } public boolean isSearchProjectValid(){ return search.isProjectSet(); } public void setSearchProjectValid( boolean val ){ if( val ){ search.setProject( search.getProject() ); } else { search.unsetProject(); } } public InteractionType getSearchType(){ return search.getType(); } public void setSearchType( InteractionType val ){ if( search.isTypeSet() ) { search.setType( val ); } } public boolean isSearchTypeValid(){ return search.isTypeSet(); } public void setSearchTypeValid( boolean val ){ if( val ){ search.setType( search.getType() ); } else { search.unsetType(); } } public User getSearchUser(){ return search.getUser(); } public void setSearchUser( User val ){ if( search.isUserSet() ) { search.setUser( val ); } } public boolean isSearchUserValid(){ return search.isUserSet(); } public void setSearchUserValid( boolean val ){ if( val ){ search.setUser( search.getUser() ); } else { search.unsetUser(); } } public Offer getSearchOffer(){ return search.getOffer(); } public void setSearchOffer( Offer val ){ if( search.isOfferSet() ) { search.setOffer( val ); } } public boolean isSearchOfferValid(){ return search.isOfferSet(); } public void setSearchOfferValid( boolean val ){ if( val ){ search.setOffer( search.getOffer() ); } else { search.unsetOffer(); } } // Getters and setters to handle uploads public void setUploadFile( UploadedFile uploadFile ){ if( uploadFile!=null ){ oldFile = interaction.getFile(); this.uploadFile = uploadFile; setFile( FileUtil.getFileName(uploadFile.getName()) ); setFileMime( uploadFile.getContentType() ); } } public UploadedFile getUploadFile(){ return uploadFile; } // Getters and setters to manipulate active Interaction object public java.lang.Integer getId() { return interaction.getId(); } public Date getCreationDate() { return interaction.getCreationDate(); } public void setCreationDate( Date creationDate ) { interaction.setCreationDate( creationDate ); } public InteractionInterest getInterest() { return interaction.getInterest(); } public void setInterest( InteractionInterest interest ) { interaction.setInterest( interest ); } public String getDescription() { return interaction.getDescription(); } public void setDescription( String description ) { interaction.setDescription( description ); } public String getFile() { return interaction.getFile(); } public void setFile( String file ) { interaction.setFile( file ); } public String getFileMime() { return interaction.getFileMime(); } public void setFileMime( String fileMime ) { interaction.setFileMime( fileMime ); } public Integer getDepartmentId() { return interaction.getDepartmentId(); } public void setDepartmentId( Integer departmentId ) { interaction.setDepartmentId( departmentId ); } public Date getInsertDate() { return interaction.getInsertDate(); } public void setInsertDate( Date insertDate ) { interaction.setInsertDate( insertDate ); } public Date getUpdateDate() { return interaction.getUpdateDate(); } public void setUpdateDate( Date updateDate ) { interaction.setUpdateDate( updateDate ); } public Project getProject() { return interaction.getProject(); } public void setProject( Project project ) { interaction.setProject( project ); } public InteractionType getType() { return interaction.getType(); } public void setType( InteractionType type ) { interaction.setType( type ); } public User getUser() { return interaction.getUser(); } public void setUser( User user ) { interaction.setUser( user ); } public Offer getOffer() { return interaction.getOffer(); } public void setOffer( Offer offer ) { interaction.setOffer( offer ); } /** * Reset search criteria * @return forward to LIST page */ public String reset(){ search.reset(); return list(); } /* interaction - generated by stajanov (do not edit/delete) */ public void setInteractionFromOffer(Interaction i) { this.interaction = i; } /** * Save bean and stay on it * @return forward to list page */ public String saveFromOffer(){ if( interaction.getId()==null ){ manager.insertEntity(interaction); } else { manager.updateEntity(interaction); } // Handle uploads for file field if( uploadFile!=null ){ try { uploader.replace( Integer.toString(interaction.getId()), oldFile, uploadFile ); } catch (IOException e) { log.error("save - exception uploading field file",e); FacesUtils.addErrorMessage("file","error.fileTransfer",e.getMessage()); } } final OfferBean offerBean = (OfferBean) FacesUtils.getBean("offerBean"); final InteractionSearch search = new InteractionSearch(); search.setOffer(interaction.getOffer()); final List<Interaction> interactionList = InteractionManager.getDefault().getAllEntities(search, new SortCriteria("creationDate")); final Set<Interaction> interactions = new HashSet<Interaction>(interactionList.size()); for (Interaction interaction: interactionList) { interactions.add(interaction); } offerBean.setInteractions(interactions); restoreOffer (); return NavigationResults.OFFER_SAVE_INTERACTION; } public void restoreOffer () { final OfferBean offerBean = (OfferBean) FacesUtils.getBean("offerBean"); final OrganizationSearch orgSearch = new OrganizationSearch(); orgSearch.setName(offerBean.getOrganization().getName()); offerBean.setOrganization(OrganizationManager.getDefault().getAllEntities(orgSearch, new SortCriteria("id")).get(0)); interaction = null; } /** * Save bean and stay on it * @return forward to list page */ public String listFromOffer(){ restoreOffer (); return NavigationResults.OFFER_LIST_INTERACTION; } }