forum.bitel.ru http://forum.bitel.ru/ |
|
Подкрашивание договоров в поиске http://forum.bitel.ru/viewtopic.php?f=1&t=7640 |
Страница 4 из 4 |
Автор: | nik247 [ 29 апр 2013, 14:57 ] |
Заголовок сообщения: | Re: Подкрашивание договоров в поиске |
Jimm писал(а): с субдоговорами разобрался, теперь при нажатии на вкладку "Иерархия договоров" подсвечивает все активные/неактивные договора соответствующими цветами. кому интересно, код могу показать. Интересно. Можете показать код? |
Автор: | Cromeshnic [ 29 апр 2013, 15:02 ] |
Заголовок сообщения: | Re: Подкрашивание договоров в поиске |
2 nik247 Отвечу за автора: Код: package ru.dsi.bgbilling.kernel.scripts.action;
import bitel.billing.common.TimeUtils; import org.w3c.dom.Element; import ru.bitel.bgbilling.common.BGException; import ru.bitel.common.Utils; import ru.bitel.common.XMLUtils; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Date; public class ActionContractInfo extends bitel.billing.server.contract.hierarchy.action.ActionContractInfo { @Override public void doAction() throws SQLException, BGException { super.doAction(); for ( Element itemElement : XMLUtils.selectElements( rootNode, "/data/contract/sub" ) ) { Date date2=null; Date date1=null; int cid = Utils.parseInt(itemElement.getAttribute( "id" )); String query ="select date1, date2, status from contract where id="+cid; PreparedStatement ps = con.prepareStatement(query); ps.executeQuery(); ResultSet rs = ps.executeQuery(); while (rs.next()) { date1 = rs.getDate(1); date2 = rs.getDate(2); } Date today = new Date(System.currentTimeMillis()); ps.close(); String color = (date2 == null || TimeUtils.dateBeforeOrEq(today, date2)) ? "black" : "gray"; itemElement.setAttribute("title", "<html><font style='color: " + color + ";'>" + itemElement.getAttribute( "title" )+"</font> <font style='color: #8080C0;' size='2'>("+(date1==null ? "..." : TimeUtils.format(date1, "dd.MM.yyyy"))+" - "+(date2==null ? "..." : TimeUtils.format(date2, "dd.MM.yyyy"))+")</font></html>"); } } } |
Автор: | nik247 [ 29 апр 2013, 15:13 ] |
Заголовок сообщения: | Re: Подкрашивание договоров в поиске |
to Cromeshnic - Спасибо. А не подскажете, как вывести дополнительный параметр в результат строки поиска? |
Автор: | Cromeshnic [ 29 апр 2013, 15:19 ] |
Заголовок сообщения: | Re: Подкрашивание договоров в поиске |
Да так же, как и здесь. В данном случае выводятся date1 и date2. |
Автор: | skn [ 29 апр 2013, 15:35 ] |
Заголовок сообщения: | Re: Подкрашивание договоров в поиске |
код не очень оптимален, если результат поиска много строк: 1) todate хорошобы вынести за цикл 2) отдельный sql запрос на каждую строку не есть гуд, правильнее было бы собрать строку с id всех договоров и одним запросов выбрать данные для всех договоров, правда код будет раза в два длинее, но работать должно быстрее. |
Автор: | Cromeshnic [ 29 апр 2013, 16:03 ] |
Заголовок сообщения: | Re: Подкрашивание договоров в поиске |
Это к Jimm, хотя он вряд ли тут появится... |
Автор: | nik247 [ 17 май 2016, 18:56 ] |
Заголовок сообщения: | Re: Подкрашивание договоров в поиске |
А для 6.2 (7.0) никто не переделывал раскраску поиска через dynservice? |
Автор: | Phricker [ 17 май 2016, 19:08 ] |
Заголовок сообщения: | Re: Подкрашивание договоров в поиске |
А мне вообще интересно что в 7.0 за кнопочка и что с ней можно сделать. |
Автор: | skn [ 17 май 2016, 20:44 ] |
Заголовок сообщения: | Re: Подкрашивание договоров в поиске |
Phricker писал(а): А мне вообще интересно что в 7.0 за кнопочка и что с ней можно сделать. просто табличный режим отображения результатов поиска, сделать в данный момент навряд ли, что нибудь получится... |
Автор: | Phricker [ 18 май 2016, 00:28 ] |
Заголовок сообщения: | Re: Подкрашивание договоров в поиске |
skn писал(а): Phricker писал(а): А мне вообще интересно что в 7.0 за кнопочка и что с ней можно сделать. просто табличный режим отображения результатов поиска, сделать в данный момент навряд ли, что нибудь получится... А было бы удобно, что то сделать. Т.к. дебаг лог показывает что там все равно куча параметров дергается, просто не выводится Код: <return id="155760" title="testtesttest">
<balanceLimit>-50.00</balanceLimit> <balanceMode>1</balanceMode> <balanceSubMode>0</balanceSubMode> <comment/> <dateFrom>2014-08-04T00:00:00+04:00</dateFrom> <dependSubList/> <groups>32</groups> <hidden>false</hidden> <paramGroupId>2</paramGroupId> <password>123</password> <personType>0</personType> <status>0</status> <statusTimeChange>2016-01-29T00:00:00+03:00</statusTimeChange> <superCid>0</superCid> <titlePatternId>1</titlePatternId> </return> |
Автор: | nik247 [ 18 май 2016, 19:07 ] |
Заголовок сообщения: | Re: Подкрашивание договоров в поиске |
skn писал(а): Phricker писал(а): А мне вообще интересно что в 7.0 за кнопочка и что с ней можно сделать. просто табличный режим отображения результатов поиска, сделать в данный момент навряд ли, что нибудь получится... Так, а в 6.2 можно сделать раскраску поиска? Сервис нашел, переопределил, но пишет или html теги, или пустые строки, хотя там данные есть. Похоже форматирование сейчас на стороне клиента формируется. P.S. Нашел в клиенте 6.2 формирование поиска - bitel.billing.module.contract.ContractOpen.class String titleComm = ((Contract)list.get(i)).getTitle() + " [ " + ((Contract)list.get(i)).getComment() + " ]"; P.S. для 6.2 вопрос с раскраской решен - все раскрашивается, даже проще оказалось, чем для 6.0. |
Автор: | Bazhutyan [ 19 май 2016, 04:25 ] |
Заголовок сообщения: | Re: Подкрашивание договоров в поиске |
Делаю через dynservice:ru.bitel.bgbilling.kernel.contract.api.ContractService Я для своих подкрашиваю VIP-клиентов: Код: package ru.iks.dyn; import java.sql.*; import java.util.Date; import java.util.List; import java.util.ArrayList; import javax.jws.WebService; import javax.xml.ws.Holder; import java.sql.SQLException; import org.apache.log4j.Logger; import ru.bitel.bgbilling.common.BGException; import ru.bitel.bgbilling.common.BGMessageException; import ru.bitel.bgbilling.kernel.contract.api.common.service.ContractService; import ru.bitel.common.Utils; import bitel.billing.common.TimeUtils; import ru.bitel.common.model.Page; import bitel.billing.server.contract.bean.*; import ru.bitel.oss.kernel.entity.common.bean.filter.FilterEntityAttr; import ru.bitel.bgbilling.kernel.contract.api.common.bean.Contract; @WebService(endpointInterface = "ru.bitel.bgbilling.kernel.contract.api.common.service.ContractService") public class myContractServiceImpl extends ru.bitel.bgbilling.kernel.contract.api.server.service.ContractServiceImpl implements ContractService { private static final Logger logger = Logger.getLogger( myContractServiceImpl.class ); @Override public List<Contract> contractList(String title, String comment, int fc, long groupMask, List<FilterEntityAttr> entityFilter, boolean subContracts, boolean closed, boolean hidden, Holder<Page> pageHolder) throws BGException { List<Contract> list = super.contractList(title, comment, fc, groupMask, entityFilter, subContracts, closed, hidden, pageHolder); List<Integer> myCids = new ArrayList<Integer>(); Page page; if(pageHolder == null || (page = (Page)pageHolder.value) == null) page = new Page(1, 25); StringBuilder sb = new StringBuilder(150); StringBuilder where = new StringBuilder("1=1"); sb.append("select c.id FROM contract c left join contract_parameter_type_1 cpt1 on cpt1.cid=c.id and cpt1.pid=30 "); if(groupMask > 0L) where.append(" AND c.gr&?=?"); if(closed) where.append(" AND (c.date2 IS NULL OR ?<=c.date2) "); if(title != null && title.trim().length() > 0) where.append(" AND (UPPER(c.title) REGEXP ? or cpt1.val REGEXP ?) "); if(comment != null && comment.trim().length() > 0) where.append(" AND UPPER(c.comment) REGEXP ?"); if(fc == 1 || fc == 0) where.append(" AND c.fc=?"); if(groupMask == 0L && title == null && comment == null && fc == -1) where.append(" AND c.gr=0"); if(!subContracts) where.append(" AND c.scid IN ( 0, -1 )"); if(where.length() > 0) { sb.append(" WHERE "); sb.append(where); } sb.append(" ORDER BY c.title"); if(page.getPageSize() > 0) sb.append(" LIMIT ?, ?"); int i = 1; try { PreparedStatement ps = (getConnection()).prepareStatement(sb.toString()); if(groupMask > 0L) { ps.setLong(i++, groupMask); ps.setLong(i++, groupMask); } if(closed) ps.setDate(i++, TimeUtils.convertDateToSqlDate(new Date())); if(title != null && title.trim().length() > 0) { ps.setString(i++, title.toUpperCase()); ps.setString(i++, title.toUpperCase()); } if(comment != null && comment.trim().length() > 0) ps.setString(i++, comment.toUpperCase()); if(fc == 1 || fc == 0) ps.setInt(i++, fc); if(page.getPageSize() > 0) { ps.setInt(i++, page.getPageFirstRecordNumber()); ps.setInt(i++, page.getPageSize()); } ResultSet rs; for( rs = ps.executeQuery(); rs.next(); ) myCids.add(rs.getInt(1)); rs.close(); ps.close(); } catch(SQLException e) { throw new BGException(e); } for( i=0; i<list.size(); i++ ) { if( myCids.contains(list.get(i).getId()) ) myCids.remove((Integer)list.get(i).getId()); } for( i=0; i<myCids.size(); i++ ) list.add(contractGet(myCids.get(i))); for( i=0; i<list.size(); i++ ) { if( (list.get(i).getGroups() & Utils.enumToMask("53")) != 0L ) { String sTitle = list.get(i).getTitle(); list.get(i).setTitle("<html><div style='color: red; font-weight: bold'>!!! VIP !!! " + sTitle); } list.get(i).setComment(list.get(i).getComment()+" {"+(new ContractParameterManager(getConnection())).getStringParam(list.get(i).getId(), 30)+"}"); } return list; } } Плюс там еще выводится в конце в фигурных скобках значение параметра договора с id=30, это у нас Лицевой счет. Чтобы раскрашивать внутри договора: dynaction:contract.ActionContractInfo=ru.iks.dyn.myContractInfo Код: package ru.iks.dyn; import java.sql.*; import org.w3c.dom.*; import ru.bitel.common.*; import java.util.Date; import java.math.BigDecimal; import bitel.billing.common.TimeUtils; import ru.bitel.bgbilling.common.BGException; import ru.bitel.bgbilling.modules.npay.server.bean.DebetStatusManageConfig; import ru.bitel.bgbilling.server.util.Setup; import bitel.billing.server.contract.bean.*; import bitel.billing.server.npay.bean.ServiceObjectManager; import bitel.billing.server.contract.bean.*; public class myContractInfo extends bitel.billing.server.contract.action.ActionContractInfo { @Override public void doAction() throws SQLException, BGException { super.doAction(); int NPAY_MID = 3; int NO_MONEY_STATUS_ID = 7; int W_TARIFF_NO_MONEY_STATUS_ID = 9; int F_TARIFF_NO_MONEY_STATUS_ID = 10; ContractManager cm = new ContractManager(con); Contract c = new Contract(); Element itemElement = XMLUtils.selectElement( rootNode, (new StringBuilder("/data/info/modules/item[@id=")).append(3).append("]").toString() ); if( itemElement != null ) { String status = itemElement.getAttribute("status"); if( status.length() == 0 ) { DebetStatusManageConfig config = new DebetStatusManageConfig(Setup.getSetup().getModuleSetup(Integer.valueOf(NPAY_MID))); if(config.isEnable()) { ContractManager contractManager = new ContractManager(con); Contract contract = contractManager.getContractById(super.cid); contractManager.recycle(); if(config.isEnableForContract(contract) && (new ServiceObjectManager(con, NPAY_MID)).getServiceObjectList(cid, null).size() > 0) { if( contract.getStatus() == W_TARIFF_NO_MONEY_STATUS_ID || contract.getStatus() == F_TARIFF_NO_MONEY_STATUS_ID ) { contract.setStatus(NO_MONEY_STATUS_ID); } BigDecimal unlockSumm = config.getSummaForUnlock(con, NPAY_MID, contract); if(unlockSumm != null) { itemElement.setAttribute( "status", unlockSumm.toString() ); } } } } } c = cm.getContractById(cid); cm.recycle(); if( (c.getGroups() & Utils.enumToMask("53")) != 0L ) { Element itemElementVIPGroup = XMLUtils.selectElement( rootNode, (new StringBuilder("/data/info/groups/item[@id=")).append(53).append("]").toString() ); if( itemElementVIPGroup != null ) { itemElementVIPGroup.setAttribute( "title", "<html><div style='color: red; font-weight: bold'>" + itemElementVIPGroup.getAttribute( "title" ) + "</div/></html>" ); } Element itemElementVIPTitle = XMLUtils.selectElement( rootNode, "/data/contract" ); if( itemElementVIPTitle != null ) { itemElementVIPTitle.setAttribute( "title", "<html><div style='color: red; font-weight: bold'>" + itemElementVIPTitle.getAttribute( "title" ) ); itemElementVIPTitle.setAttribute( "comment", itemElementVIPTitle.getAttribute( "comment" ) + " ]</div/></html>" ); } } } } В последнем коде у меня там еще суммы разблокировки для дебет-договоров со статусами 9 и 10 выводятся, я не стал это убирать, как для примера может кому пригодиться. Код писал для 5.2 и с небольшими изменениями он кочует по всем версиям. Сегодня проверил на 7.0 - работает. |
Автор: | nik247 [ 19 май 2016, 14:56 ] |
Заголовок сообщения: | Re: Подкрашивание договоров в поиске |
Bazhutyan писал(а): Делаю через dynservice:ru.bitel.bgbilling.kernel.contract.api.ContractService .... Код писал для 5.2 и с небольшими изменениями он кочует по всем версиям. Сегодня проверил на 7.0 - работает. Спасибо за пример. Держите "+". Я таким же способом решил для 6.2 Вот только меня смущает, что переопределяя глобально contractList в ContractService, точнее меняем в нем "title" и "comment", не вылезет ли это в других местах где-то боком? |
Автор: | Jimson [ 19 май 2016, 15:44 ] |
Заголовок сообщения: | Re: Подкрашивание договоров в поиске |
nik247 писал(а): Вот только меня смущает, что переопределяя глобально contractList в ContractService, точнее меняем в нем "title" и "comment", не вылезет ли это в других местах где-то боком? Есть подозрения что "вылезет" в новом личном кабинете, который JavaEE. Наверно правильнее все же наладить обновление клиенских third-party jar и глобального клиентского конфига (где будут строчки с dynservice) и править GUI интерфейс таки с клиентской стороны, а не перекрывая webservices api. |
Автор: | nik247 [ 19 май 2016, 16:04 ] |
Заголовок сообщения: | Re: Подкрашивание договоров в поиске |
Jimson писал(а): nik247 писал(а): Вот только меня смущает, что переопределяя глобально contractList в ContractService, точнее меняем в нем "title" и "comment", не вылезет ли это в других местах где-то боком? Есть подозрения что "вылезет" в новом личном кабинете, который JavaEE. Наверно правильнее все же наладить обновление клиентских third-party jar и глобального клиентского конфига (где будут строчки с dynservice) и править GUI интерфейс таки с клиентской стороны, а не перекрывая webservices api. И я вот так тоже думаю, что может вылезти "боком" не только в кабинете.... В 6.0 там было понятно... Интересно, а что скажут разработчики? Конечно, было бы правильнее переопределить со стороны клинета, вопрос только как? |
Автор: | Cromeshnic [ 19 апр 2017, 09:21 ] |
Заголовок сообщения: | Re: Подкрашивание договоров в поиске |
Только сейчас прочитал, дико плюсую все вопросы и фичу. |
Автор: | Cromeshnic [ 21 сен 2017, 12:56 ] |
Заголовок сообщения: | Re: Подкрашивание договоров в поиске |
Я так понимаю, собственная раскраска в поиске через переопределённый dynservice не работает для табличного режима. Вообще, табличный режим поиска - круто. Но я удивлён, что список полей жёстко зашит в клиенте. Просьба к разработчикам: сделайте более кастомизируемый табличный поиск: - кастомный список полей (как со стороны клиента, так и сервера) - раскраска некоторых полей разными цветами (текста/фона) При этом, чтобы не ломать стандартный веб-сервис поиска через переопределение (мало ли где может использоваться ещё), можно предусмотреть отдельный пользовательский метод или класс (через динкод), возвращающий массив полей с форматированием. А в конфиге сервера, скажем, включать его. |
Автор: | Cromeshnic [ 21 сен 2017, 13:57 ] |
Заголовок сообщения: | Re: Подкрашивание договоров в поиске |
Немного наврал - в табличном режиме тоже раскраска через переопределённый динсервис работает, нужно было правильно подобрать html-теги. Но свой вопрос не снимаю |
Страница 4 из 4 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |