Свой список шаблонов договоров

Материал из BiTel WiKi

(Различия между версиями)
Перейти к: навигация, поиск
SinTeZWh1te (Обсуждение | вклад)
(Новая страница: «''Спасибо [http://forum.bgbilling.ru/memberlist.php?mode=viewprofile&u=3161 nik247] за предоставленный пример'' 1) в конфигур…»)
Следующая правка →

Версия 13:22, 21 мая 2013

Спасибо 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 );
      //считывание фильтров шаблонов с конфигурации
      String tmplIds = "";
      for (int t = 1; tmplIds != null; 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
Личные инструменты