Обработка события создания договора

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

(Различия между версиями)
Перейти к: навигация, поиск
(Новая: Все приведенные ниже скрипты привязываются к событию ядра "Договор создан". == Модуль Dialup == === Создани...)
 
(8 промежуточных версий не показаны.)
Строка 1: Строка 1:
Все приведенные ниже скрипты привязываются к событию ядра "Договор создан".
Все приведенные ниже скрипты привязываются к событию ядра "Договор создан".
-
== Модуль Dialup ==
+
== Создание алиаса к логину DialUp равному номеру договора ==
-
 
+
-
=== Создание алиаса для договора ===
+
Все создаваемые договора должны иметь алиас идеинтичный номеру договора.
Все создаваемые договора должны иметь алиас идеинтичный номеру договора.
Строка 23: Строка 21:
stmnt.executeUpdate();
stmnt.executeUpdate();
</source>
</source>
-
=== Пароль на доступ к статистике из логина ===
+
 
 +
== Пароль на доступ к статистике из логина DialUp ==
Все создаваемые договора должны иметь пароль на доступ к статистике идеинтичный паролю логина.
Все создаваемые договора должны иметь пароль на доступ к статистике идеинтичный паролю логина.
Строка 45: Строка 44:
--[[Участник:Snark|snark]]
--[[Участник:Snark|snark]]
 +
 +
== Вставка контрольной суммы в номер договора ==
 +
Контрольная сумма может быть полезна для предотвращения случайного ввода пользователем не своего номера договора при оплате услуг. Простейшая контрольная сумма для договоров вида 102-X{N6}, где {N6} - шестизначный порядковый номер, а X - собственно контрольная сумма, может быть вычислена как последний десятичный разряд суммы цифр за исключением контрольной суммы.
 +
 +
<pre>
 +
При создании нового договора присваивать номер согласно шаблона для данной группы, следующий по порядку.
 +
Префикс для каждого шаблона будет содержать три цифры.
 +
Под порядковый номер отводится последние шесть цифр.
 +
Четвертая цифра - контрольная сумма. Вычисляется путем сложения всех цифр номера договора, старший разряд отбрасывается.
 +
Пример:
 +
префикс на группу задан в шаблоне 202-
 +
следующий по порядку номер присваивается 001072
 +
складываем все цифры: 2+0+2+0+0+1+0+7+2=14
 +
отбрасываем десятки
 +
остается 4
 +
получаем номер договора 202-4001072
 +
</pre>
 +
 +
Для реализации вышеуказанной схемы в шаблоне договора прописывается шаблон имени '''102-${time:F}${N6}'''. Вместо контрольной суммы вставляется некое число, равное в нашем случае первому дню в месяце создания или что-то вроде этого ) Что конкретно - не суть важно, главное чтобы это было одна цифра, не учавствующая в порядковом номере. Далее на событие '''Договор создан''' вешается скрипт, изменяющий номер.
 +
 +
<source lang="java">
 +
import bitel.billing.server.util.*;
 +
 +
title = event.getContract().getTitle();
 +
pos = title.indexOf('-');
 +
 +
print( "title=" + title );
 +
 +
// имя вида  202-001072
 +
if( pos == 3 )
 +
{
 +
print( "inserting control digit" );
 +
 +
sum = 0;
 +
 +
length = title.length();
 +
for( i = 0; i < length; i++ )
 +
{
 +
if( i == 4 )
 +
{
 +
continue;
 +
}
 +
sum += Utils.parseIntString( title.substring( i, i + 1 ) );
 +
}
 +
 +
sum = sum % 10;
 +
title = title.substring( 0, 4) + sum + title.substring( 5 );
 +
 +
print( "title after =" + title );
 +
 +
query = "UPDATE contract SET title=? WHERE id=?";
 +
psUpdate = con.prepareStatement( query );
 +
psUpdate.setString( 1, title );
 +
psUpdate.setInt( 2, event.getContractID() );
 +
psUpdate.executeUpdate();
 +
}
 +
</source>
 +
 +
В результате данной манипуляции банк или иное лицо, принимающее платежи в пользу провайдера имеет возможность первичной проверки номера договора на контрольную сумму, ошибки в одну цифру исключатся.
 +
 +
--[[Участник:babay951|babay951]]
 +
== Генерация случайного номера договора ==
 +
 +
Предположим мы решили генерировать номер договора или часть номера случайным образом. Заходим сервис - автоматизация - функции скриптов поведения. В параметрах выбираем событие "Договор создан" и задаем любое имя функции, например "Создание случайного номера договора". В "код функции" вставляем код.
 +
<source lang="java">
 +
import bitel.billing.server.util.*;
 +
import bitel.billing.server.contract.bean.ContractManager;
 +
import java.util.*;
 +
 +
 +
ContrF= new ContractManager ( con );
 +
ContrC= event.getContract();
 +
title = ContrC.getTitle();
 +
print( "title=" + title );
 +
 +
N="";
 +
a=1000001;
 +
check=1;
 +
 +
 +
while (check!=null || a > 1000000 ) {
 +
a = Math.floor((Math.random()+0.1) * 1000000);
 +
b = (int)a;
 +
N=String.valueOf(b);
 +
check = ContrF.getContractByTitle(N);
 +
}
 +
 +
 +
ContrC.setTitle(N);
 +
ContrF.updateContract(ContrC);
 +
print( "title after =" + N );
 +
</source>
 +
Далее в шаблоне договора , включаем наш скрипт на закладке "Скрипт поведения". Здесь приведен пример генерации 6 значного номера от 100 000 до 999 999.
 +
 +
Люди мы все пишем скрипты, не жмитесь выкладывайте. '''Давайте вместе развивать WiKi.'''

Текущая версия на 03:37, 10 сентября 2010

Все приведенные ниже скрипты привязываются к событию ядра "Договор создан".

Содержание

Создание алиаса к логину DialUp равному номеру договора

Все создаваемые договора должны иметь алиас идеинтичный номеру договора.

Для этого необходимо:

  • В шаблоне, на основе которого создается договор, указать необходимость создания для него логина.
Изображение:Dialup_create_login.jpg
  • Создать скрипт следующего содержания:
import java.util.*;
import java.sql.*;
 
// код модуля dialup
RADIUS_MID = 1;
 
cid   = event.getContractID();
query = "INSERT INTO user_alias_" + RADIUS_MID + " SELECT ul.id, c.title FROM contract c LEFT JOIN user_login_" + RADIUS_MID + " ul ON (ul.cid = c.id) WHERE c.id = ?";
stmnt = con.prepareStatement(query);
stmnt.setInt(1, cid);
stmnt.executeUpdate();

Пароль на доступ к статистике из логина DialUp

Все создаваемые договора должны иметь пароль на доступ к статистике идеинтичный паролю логина.

Для этого необходимо:

  • В шаблоне, на основе которого создается договор, указать необходимость создания для него логина (см. изображение выше).
  • Создать скрипт следующего содержания:
import java.util.*;
import java.sql.*;
 
// код модуля dialup
RADIUS_MID = 1;
 
cid   = event.getContractID();
query = "UPDATE contract SET pswd = (SELECT pswd FROM user_login_" + RADIUS_MID + " WHERE cid = ?) WHERE id = ?";
stmnt = con.prepareStatement(query);
stmnt.setInt(1, cid);
stmnt.setInt(2, cid);
stmnt.executeUpdate();

--snark

Вставка контрольной суммы в номер договора

Контрольная сумма может быть полезна для предотвращения случайного ввода пользователем не своего номера договора при оплате услуг. Простейшая контрольная сумма для договоров вида 102-X{N6}, где {N6} - шестизначный порядковый номер, а X - собственно контрольная сумма, может быть вычислена как последний десятичный разряд суммы цифр за исключением контрольной суммы.

При создании нового договора присваивать номер согласно шаблона для данной группы, следующий по порядку. 
Префикс для каждого шаблона будет содержать три цифры.
Под порядковый номер отводится последние шесть цифр.
Четвертая цифра - контрольная сумма. Вычисляется путем сложения всех цифр номера договора, старший разряд отбрасывается.
Пример:
префикс на группу задан в шаблоне 202-
следующий по порядку номер присваивается 001072
складываем все цифры: 2+0+2+0+0+1+0+7+2=14
отбрасываем десятки
остается 4
получаем номер договора 202-4001072

Для реализации вышеуказанной схемы в шаблоне договора прописывается шаблон имени 102-${time:F}${N6}. Вместо контрольной суммы вставляется некое число, равное в нашем случае первому дню в месяце создания или что-то вроде этого ) Что конкретно - не суть важно, главное чтобы это было одна цифра, не учавствующая в порядковом номере. Далее на событие Договор создан вешается скрипт, изменяющий номер.

import bitel.billing.server.util.*;
 
title = event.getContract().getTitle();
pos = title.indexOf('-');
 
print( "title=" + title );
 
// имя вида  202-001072
if( pos == 3 )
{
	print( "inserting control digit" );
 
	sum = 0;
 
	length = title.length();
	for( i = 0; i < length; i++ )
	{
		if( i == 4 )
		{
			continue;
		}
		sum += Utils.parseIntString( title.substring( i, i + 1 ) );
	}
 
	sum = sum % 10;
	title = title.substring( 0, 4) + sum + title.substring( 5 );
 
	print( "title after =" + title );
 
	query = "UPDATE contract SET title=? WHERE id=?";
	psUpdate = con.prepareStatement( query );
	psUpdate.setString( 1, title );
	psUpdate.setInt( 2, event.getContractID() );
	psUpdate.executeUpdate();
}

В результате данной манипуляции банк или иное лицо, принимающее платежи в пользу провайдера имеет возможность первичной проверки номера договора на контрольную сумму, ошибки в одну цифру исключатся.

--babay951

Генерация случайного номера договора

Предположим мы решили генерировать номер договора или часть номера случайным образом. Заходим сервис - автоматизация - функции скриптов поведения. В параметрах выбираем событие "Договор создан" и задаем любое имя функции, например "Создание случайного номера договора". В "код функции" вставляем код.

import bitel.billing.server.util.*;
import bitel.billing.server.contract.bean.ContractManager;
import java.util.*;
 
 
ContrF= new ContractManager ( con );
ContrC= event.getContract();
title = ContrC.getTitle();
print( "title=" + title );
 
N="";
a=1000001;
check=1;
 
 
while (check!=null || a > 1000000 ) {
a = Math.floor((Math.random()+0.1) * 1000000);
b = (int)a;
N=String.valueOf(b);
check = ContrF.getContractByTitle(N);
}
 
 
ContrC.setTitle(N);
ContrF.updateContract(ContrC);
print( "title after =" + N );

Далее в шаблоне договора , включаем наш скрипт на закладке "Скрипт поведения". Здесь приведен пример генерации 6 значного номера от 100 000 до 999 999.

Люди мы все пишем скрипты, не жмитесь выкладывайте. Давайте вместе развивать WiKi.

Личные инструменты