forum.bitel.ru
http://forum.bitel.ru/

Как правильно сделать
http://forum.bitel.ru/viewtopic.php?f=23&t=10409
Страница 1 из 1

Автор:  avk [ 13 апр 2015, 18:01 ]
Заголовок сообщения:  Как правильно сделать

Есть компания, у которой несколько объектов подключения интернета.
У нас ними один договор, а каждый объект оформлен через приложение к договору.
В биллинге один договор. На каждый объект своя услуга и свой тариф.

Получается в плагине Documents:
- бланк договора 1шт
- бланк приложения 1 шт

Как имея один шаблон, печатать разные приложения ?
Делать договор на каждый объект, мне кажется, избыточным. Как правильно это оформить ?

Автор:  Phricker [ 13 апр 2015, 18:06 ]
Заголовок сообщения:  Re: Как правильно сделать

Договора как нибудь различаются?
Если да - то можно набросать скрипт который будет в зависимости от этих данных подставлять что-то свое туда куда нужно.

Автор:  avk [ 13 апр 2015, 19:08 ]
Заголовок сообщения:  Re: Как правильно сделать

Phricker писал(а):
Договора как нибудь различаются?
Если да - то можно набросать скрипт который будет в зависимости от этих данных подставлять что-то свое туда куда нужно.

Договор один и куда скрипт применять не понял что-то.
Поясню немного. В приложении находятся данные:
    Адрес услуги
    Скорость канала
    Стоимость услуги
    Стоимость инсталяции
Этих приложений может быть штук 10.
Вот куда мне прописать эти параметры, чтобы потом можно было распечатать приложение ?

Автор:  avk [ 13 апр 2015, 19:15 ]
Заголовок сообщения:  Re: Как правильно сделать

Мне кажется, для этих целей подошли бы объекты договора, но их нельзя выбрать в плагине Documents.
Если только SQL запросом. Но как передать нужный ID объекта ?

Автор:  Phricker [ 13 апр 2015, 19:47 ]
Заголовок сообщения:  Re: Как правильно сделать

Еще раз.
Как вы видите разницу между
Цитата:
Есть компания, у которой несколько объектов подключения интернета.
У нас ними один договор, а каждый объект оформлен через приложение к договору.

В договоре, который в биллинге, есть какой-то параметр в котором прописан объект подключения или что?
Или номера договоров в биллинге разнятся?

В зависимости от этих данных вы можете
Цитата:
Динамический Java-класс реализует интерфейс ru.bitel.bgbilling.plugins.documents.server.bean.pattern.PatternDataExtractor, содержащий метод extractData( Connection con, int contractId, DocumentPattern pattern, DocumentType type, DocumentJournal journal, Map<String, String> apiMap ), который должен возвращать объект типа Map<String, String> - список переменных в формате "ключ=>значение переменной". Здесь в качестве ключа выступает название переменной, соответствующей переменной в файле шаблона документа.


И в зависимости от этих данных подставляйте те значения переменных которые вам нужны.

Автор:  Phricker [ 13 апр 2015, 19:52 ]
Заголовок сообщения:  Re: Как правильно сделать

Как пример
Код:
public Map extractData( Connection con, int cid, DocumentPattern pattern, DocumentType type, DocumentJournal journal, Map<String, String> apiMap )
            throws BGException
    {
        ContractManager cm = new ContractManager(con);
      ContractParameterManager cpm = new ContractParameterManager(con);
        Contract contract = cm.getContractById(cid);
        Map<String, String> result = new HashMap<String, String>();

        //Получение параметров договора
        result.put("contractTitle", contract.getTitle());
        result.put("contractDate", TimeUtils.formatDate(contract.getDateFrom()));
        result.put("contractPassword", contract.getPswd());
      if(contract.getFc() == 0){
         result.put("fio", getContractParameterData(cpm.getStringParam(1)));
        }
      else if(contract.getFc() == 1){
         result.put("fio", getContractParameterData(cpm.getStringParam(2)));
        }
       
        return result;
    }

Автор:  Phricker [ 13 апр 2015, 19:56 ]
Заголовок сообщения:  Re: Как правильно сделать

Хотя если у вас приложения в корне разнятся (а не просто значениями переменных либо тем что можно заменить переменными), то тогда да - засада.
Навскидку ничего не назову.

Автор:  Phricker [ 13 апр 2015, 19:58 ]
Заголовок сообщения:  Re: Как правильно сделать

И в карточках договора была удобная фишка как "Получения списка карточек договора".
Самому ее не хватает в плагине Documents
Можно просить разрабов запилить подобное - и тогда заводить кучу шаблонов, но их список для конкретных договоров вы будете сами редактировать скриптом.

Автор:  avk [ 13 апр 2015, 21:24 ]
Заголовок сообщения:  Re: Как правильно сделать

Как я понял, в вашем примере берется параметр договора по id в зависимости от типа договора.
Чем мне это поможет не могу понять. Тип то у меня один.
Сейчас объекты подключения нигде не прописаны. Я пытаюсь разобраться как правильно их прописать в договоре.
Первая мысль - прописать в параметры таким образом:
    [Услуга №1] Адрес
    [Услуга №1] Скорость канала
    [Услуга №1] Стоимость

    [Услуга №2] Адрес
    [Услуга №2] Скорость канала
    [Услуга №2] Стоимость

И на каждую услугу в плагине Documents создать свой шаблон приложения. По сути, один и тот же, только берется из разных параметров. Но такой подход выглядит костылем. Вот я и спрашиваю, как правильно такое организовывать?
p.s.
Пока писал сообщение, пришла мысль - а что если в параметре договора указывать ID объекта, который хочешь распечатать и через SQL получить данные по нужному объекту. Тоже костыль, но зато не надо городить кучу параметров.

Автор:  avk [ 14 апр 2015, 12:58 ]
Заголовок сообщения:  Re: Как правильно сделать

Получилось.
Добавил в договор параметр "ID объекта для печати"
В Documents в настройки шаблона приложения добавил переменные типа SQL.
address:
Код:
SELECT B.address FROM `object` A
JOIN `object_param_value_address` B ON A.id = B.object_id
WHERE A.cid = ${cid}
AND A.id = (SELECT val
            FROM `contract_parameter_type_1` P
            WHERE P.cid=A.cid
            AND P.pid=60)

Где pid=60 - это ID параметра в договоре "ID объекта для печати".

date:
Код:
SELECT B.value FROM `object` A
JOIN `object_param_value_date` B ON A.id = B.object_id
WHERE A.cid = ${cid}
AND B.param_id=7
AND A.id = (SELECT val
             FROM `contract_parameter_type_1` P
            WHERE P.cid=A.cid
            AND P.pid=60)

Где B.param_id=7 - ID параметра объекта "Дата подключения"

speed:
Код:
SELECT B.value FROM `object` A
JOIN `object_param_value_text` B ON A.id = B.object_id
WHERE A.cid = ${cid}
AND B.param_id=4
AND A.id = (SELECT val
             FROM `contract_parameter_type_1` P
             WHERE P.cid=A.cid
             AND P.pid=60)

Где B.param_id=4 - ID параметра объекта "Скорость канала"
Ну и так далее по всем параметрам объекта.

Теперь, если у клиента появляется новый точка подключения, я просто добавляю объект, заполняю параметры объекта. В параметрах договора указываю "ID объекта для печати" и генерирую приложение к договору. Результатом доволен.

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/