Свой список шаблонов договоров
Материал из BiTel WiKi
Спасибо nik247 за предоставленный пример
1) в конфигурации сервера указываем список фильтров с id шаблонов, которые нужно показывать:
user.template.filter.1=1 user.template.filter.2=2 user.template.filter.3=1,2,3
Важно: id шаблонов указывать через "," - так как потом используется прямо в SQL (пока сделал так) 2) в конфигурации пользователя указываем нужный фильтр:
user.template.filterId=1
Важно: если фильтр не указать, то выведется пустой список шаблонов. Мне так нужно было, для явного указания шаблонов для пользователей. Кому нужно - измените код. Если указан user.template.filterId=0, то фильтр вообще не используется - выводит все шаблоны, включая шаблон "По умолчанию" Ну и сам код:
package ru.bitel.bgbilling.modules.contract.action; import java.sql.*; import org.w3c.dom.Element; import ru.bitel.bgbilling.common.BGException; import ru.bitel.bgbilling.kernel.module.common.bean.User; import ru.bitel.bgbilling.kernel.module.server.bean.UserManager; import ru.bitel.bgbilling.server.util.UserMap; import ru.bitel.common.Preferences; import java.security.AccessController; import javax.security.auth.Subject; import bitel.billing.server.admin.bgsecure.bean.UserLoginModule.UserPrincipal; import ru.bitel.bgbilling.server.util.Setup; public class GetPatternList extends bitel.billing.server.contract.action.ActionGetPatternList { @Override public void doAction() throws SQLException, BGException { //получаем id текущего пользователя Integer currentUserId = getCurrentUserId(); //получаем ID фильтра шаблонов с конфигурации пользователя. int filterId = getTemplateFilterId( currentUserId ); String SqlTemplateFilter = ""; switch ( filterId ) { case -1: { //вывод пустого списка шаблонов, если в конфиге не указан фильтр. log.debug("Custom TEMPLATES: filterId not set:" + filterId ); SqlTemplateFilter = " WHERE id = -1 "; break; } case 0: { //вывод всех шаблонов - для администраторов. log.debug("Custom TEMPLATES: admin filterId=" + filterId ); SqlTemplateFilter = " "; break; } default: { log.debug("Custom TEMPLATES: iserId=" + currentUserId + " filterId=" + filterId ); //считывание фильтров шаблонов с конфигурации от 1 до 99 String tmplIds = ""; for (int t = 1; t < 100; t++) { tmplIds = this.setup.get("user.template.filter." + t, null); //вывод пустого списка шаблонов по умолчанию SqlTemplateFilter = " WHERE id = -1 "; //поиск IDs шаблонов договоров if ( t == filterId ) { log.debug("Custom TEMPLATES: found tmplIds=" + tmplIds ); SqlTemplateFilter = " WHERE id IN (" + tmplIds + ") "; break; } } } } //формирование списка шаблона договоров Element patterns = createElement(rootNode, "patterns"); //вывод шаблона "по умолчанию" - включаем для Админов if ( filterId == 0 ) { if(request.getParameter("nondef") == null) addListItem(patterns, "0", "\u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E"); } String query = "SELECT id, title FROM contract_pattern " + SqlTemplateFilter + " ORDER BY title"; //log.debug("Custom TEMPLATES: sql=" + query ); Statement st = con.createStatement(); ResultSet rs; for(rs = st.executeQuery(query); rs.next(); addListItem(patterns, rs.getString(1), rs.getString(2))); rs.close(); st.close(); } public int getTemplateFilterId (int userId) throws BGException { User user = UserMap.getUser(Integer.valueOf(userId)); String user_config = user.getConfig(); Preferences userConfig = new Preferences(user_config, "\r\n"); int TemplateFilterId = userConfig.getInt("user.template.filterId", -1); return TemplateFilterId; } public Integer getCurrentUserId() { Subject subject = Subject.getSubject( AccessController.getContext() ); if( subject != null ) { for( UserPrincipal userPrincipal : subject.getPrincipals( UserPrincipal.class ) ) { return userPrincipal.getUser().getId(); } } return null; } }
Ну и не забываем в конфиге сервера переопределить action:
dynaction:contract.ActionGetPatternList=ru.bitel.bgbilling.modules.contract.action.GetPatternList