diff --git a/ui-ngx/src/app/modules/home/components/sms/smpp-sms-provider-configuration.component.html b/ui-ngx/src/app/modules/home/components/sms/smpp-sms-provider-configuration.component.html
index e8c3de5943..55f3d9c892 100644
--- a/ui-ngx/src/app/modules/home/components/sms/smpp-sms-provider-configuration.component.html
+++ b/ui-ngx/src/app/modules/home/components/sms/smpp-sms-provider-configuration.component.html
@@ -1,101 +1,145 @@
diff --git a/ui-ngx/src/app/modules/home/components/sms/smpp-sms-provider-configuration.component.ts b/ui-ngx/src/app/modules/home/components/sms/smpp-sms-provider-configuration.component.ts
index 2cb7d8cbfb..68e8f7a85e 100644
--- a/ui-ngx/src/app/modules/home/components/sms/smpp-sms-provider-configuration.component.ts
+++ b/ui-ngx/src/app/modules/home/components/sms/smpp-sms-provider-configuration.component.ts
@@ -1,9 +1,19 @@
import { Component, forwardRef, Input, OnInit } from '@angular/core';
import { ControlValueAccessor, FormBuilder, FormGroup, NG_VALUE_ACCESSOR, Validators } from '@angular/forms';
import {
- AwsSnsSmsProviderConfiguration, SmppSmsProviderConfiguration,
+ AwsSnsSmsProviderConfiguration,
+ BindTypes,
+ bindTypesTranslationMap,
+ CodingSchemes,
+ codingSchemesMap,
+ NumberingPlanIdentification,
+ numberingPlanIdentificationMap,
+ SmppSmsProviderConfiguration,
+ smppVersions,
SmsProviderConfiguration,
- SmsProviderType
+ SmsProviderType,
+ TypeOfNumber,
+ typeOfNumberMap
} from '@shared/models/settings.models';
import { isDefinedAndNotNull } from '@core/utils';
import { coerceBooleanProperty } from '@angular/cdk/coercion';
@@ -18,6 +28,7 @@ import { coerceBooleanProperty } from '@angular/cdk/coercion';
multi: true
}]
})
+
export class SmppSmsProviderConfigurationComponent implements ControlValueAccessor, OnInit{
constructor(private fb: FormBuilder) {
}
@@ -35,73 +46,20 @@ export class SmppSmsProviderConfigurationComponent implements ControlValueAcces
disabled: boolean;
smppSmsProviderConfigurationFormGroup: FormGroup;
- bindTypes = [
- {value: 'TX', name: 'Transmitter'},
- {value: 'RX', name: 'Receiver'},
- {value: 'TRX', name: 'Transciever'},
- ]
-
- sourcesTon = [
- {value: 0, name: 'Unknown'},
- {value: 1, name: 'International'},
- {value: 2, name: 'National'},
- {value: 3, name: 'Network Specific'},
- {value: 4, name: 'Subscriber Number'},
- {value: 5, name: 'Alphanumeric'},
- {value: 6, name: 'Abbreviated'}
- ]
-
- sourcesNpi = [
- {value: 0, name: 'Unknown'},
- {value: 1, name: 'ISDN/telephone numbering plan (E163/E164)'},
- {value: 3, name: 'Data numbering plan (X.121)'},
- {value: 4, name: 'Telex numbering plan (F.69)'},
- {value: 5, name: 'Land Mobile (E.212)'},
- {value: 8, name: 'National numbering plan'},
- {value: 9, name: 'Private numbering plan'},
- {value: 10, name: 'ERMES numbering plan (ETSI DE/PS 3 01-3)'},
- {value: 13, name: 'Internet (IP)'},
- {value: 18, name: 'WAP Client Id (to be defined by WAP Forum)'},
- ]
-
- destinationsTon = [
- {value: 0, name: 'Unknown'},
- {value: 1, name: 'International'},
- {value: 2, name: 'National'},
- {value: 3, name: 'Network Specific'},
- {value: 4, name: 'Subscriber Number'},
- {value: 5, name: 'Alphanumeric'},
- {value: 6, name: 'Abbreviated'},
- ]
-
- destinationsNpi = [
- {value: 0, name: 'Unknown'},
- {value: 1, name: 'ISDN/telephone numbering plan (E163/E164)'},
- {value: 3, name: 'Data numbering plan (X.121)'},
- {value: 4, name: 'Telex numbering plan (F.69)'},
- {value: 6, name: 'Land Mobile (E.212)'},
- {value: 8, name: 'National numbering plan'},
- {value: 9, name: 'Private numbering plan'},
- {value: 10, name: 'ERMES numbering plan (ETSI DE/PS 3 01-3)'},
- {value: 13, name: 'Internet (IP)'},
- {value: 18, name: 'WAP Client Id (to be defined by WAP Forum)'},
- ]
-
- codingSchemes = [
- {value: 0, name: 'SMSC Default Alphabet (ASCII for short and long code and to GSM for toll-free)'},
- {value: 1, name: 'IA5 (ASCII for short and long code, Latin 9 for toll-free (ISO-8859-9))'},
- {value: 2, name: 'Octet Unspecified (8-bit binary)'},
- {value: 3, name: 'Latin 1 (ISO-8859-1)'},
- {value: 4, name: 'Octet Unspecified (8-bit binary)'},
- {value: 5, name: 'JIS (X 0208-1990)'},
- {value: 6, name: 'Cyrillic (ISO-8859-5)'},
- {value: 7, name: 'Latin/Hebrew (ISO-8859-8)'},
- {value: 8, name: 'UCS2/UTF-16 (ISO/IEC-10646)'},
- {value: 9, name: 'Pictogram Encoding'},
- {value: 10, name: 'Music Codes (ISO-2022-JP)'},
- {value: 13, name: 'Extended Kanji JIS (X 0212-1990)'},
- {value: 14, name: 'Korean Graphic Character Set (KS C 5601/KS X 1001)'},
- ]
+
+ smppVersions = smppVersions;
+
+ bindTypes = Object.keys(BindTypes);
+ bindTypesTranslation = bindTypesTranslationMap;
+
+ typeOfNumber = Object.keys(TypeOfNumber);
+ typeOfNumberMap = typeOfNumberMap;
+
+ numberingPlanIdentification = Object.keys(NumberingPlanIdentification);
+ numberingPlanIdentificationMap = numberingPlanIdentificationMap;
+
+ codingSchemes = Object.keys(CodingSchemes);
+ codingSchemesMap = codingSchemesMap;
private propagateChange = (v: any) => { };
diff --git a/ui-ngx/src/app/shared/models/settings.models.ts b/ui-ngx/src/app/shared/models/settings.models.ts
index ede42bc033..1c1485f3a2 100644
--- a/ui-ngx/src/app/shared/models/settings.models.ts
+++ b/ui-ngx/src/app/shared/models/settings.models.ts
@@ -97,25 +97,215 @@ export interface TwilioSmsProviderConfiguration {
}
export interface SmppSmsProviderConfiguration {
- protocolVersion?: string,
- host?: string,
- port?: number,
- systemId?: string,
- password?: string,
- systemType?: string,
- bindType?: string,
- serviceType?: string,
- sourceAddress?: string,
- sourceTon?: number,
- sourceNpi?: number,
- destinationTon?: number,
- destinationNpi?: number,
- addressRange?: string,
- codingScheme?: number
-}
-
-
-export type SmsProviderConfigurations = SmppSmsProviderConfiguration & AwsSnsSmsProviderConfiguration & TwilioSmsProviderConfiguration;
+ protocolVersion: number;
+ host: string;
+ port: number;
+ systemId: string;
+ password: string;
+ systemType?: string;
+ bindType?: string;
+ serviceType?: string;
+ sourceAddress?: string;
+ sourceTon?: number;
+ sourceNpi?: number;
+ destinationTon?: number;
+ destinationNpi?: number;
+ addressRange?: string;
+ codingScheme?: number;
+}
+
+export const smppVersions = [
+ {value: 3.3},
+ {value: 3.4}
+];
+
+export enum BindTypes {
+ TX = 'TX',
+ RX = 'RX',
+ TRX = 'TRX'
+}
+
+export const bindTypesTranslationMap = new Map([
+ [BindTypes.TX, 'admin.smpp-provider.bind-type-tx'],
+ [BindTypes.RX, 'admin.smpp-provider.bind-type-rx'],
+ [BindTypes.TRX, 'admin.smpp-provider.bind-type-trx']
+]);
+
+export enum TypeOfNumber {
+ Unknown = 'Unknown',
+ International = 'International',
+ National = 'National',
+ NetworkSpecific = 'NetworkSpecific',
+ SubscriberNumber = 'SubscriberNumber',
+ Alphanumeric = 'Alphanumeric',
+ Abbreviated = 'Abbreviated'
+}
+
+interface TypeDescriptor {
+ name: string;
+ value: number;
+}
+
+export const typeOfNumberMap = new Map([
+ [TypeOfNumber.Unknown, {
+ name: 'admin.smpp-provider.ton-unknown',
+ value: 0
+ }],
+ [TypeOfNumber.International, {
+ name: 'admin.smpp-provider.ton-international',
+ value: 1
+ }],
+ [TypeOfNumber.National, {
+ name: 'admin.smpp-provider.ton-national',
+ value: 2
+ }],
+ [TypeOfNumber.NetworkSpecific, {
+ name: 'admin.smpp-provider.ton-network-specific',
+ value: 3
+ }],
+ [TypeOfNumber.SubscriberNumber, {
+ name: 'admin.smpp-provider.ton-subscriber-number',
+ value: 4
+ }],
+ [TypeOfNumber.Alphanumeric, {
+ name: 'admin.smpp-provider.ton-alphanumeric',
+ value: 5
+ }],
+ [TypeOfNumber.Abbreviated, {
+ name: 'admin.smpp-provider.ton-abbreviated',
+ value: 6
+ }],
+]);
+
+export enum NumberingPlanIdentification {
+ Unknown = 'Unknown',
+ ISDN = 'ISDN',
+ DataNumberingPlan = 'DataNumberingPlan',
+ TelexNumberingPlan = 'TelexNumberingPlan',
+ LandMobile = 'LandMobile',
+ NationalNumberingPlan = 'NationalNumberingPlan',
+ PrivateNumberingPlan = 'PrivateNumberingPlan',
+ ERMESNumberingPlan = 'ERMESNumberingPlan',
+ Internet = 'Internet',
+ WAPClientId = 'WAPClientId',
+}
+
+export const numberingPlanIdentificationMap = new Map([
+ [NumberingPlanIdentification.Unknown, {
+ name: 'admin.smpp-provider.npi-unknown',
+ value: 0
+ }],
+ [NumberingPlanIdentification.ISDN, {
+ name: 'admin.smpp-provider.npi-isdn',
+ value: 1
+ }],
+ [NumberingPlanIdentification.DataNumberingPlan, {
+ name: 'admin.smpp-provider.npi-data-numbering-plan',
+ value: 3
+ }],
+ [NumberingPlanIdentification.TelexNumberingPlan, {
+ name: 'admin.smpp-provider.npi-telex-numbering-plan',
+ value: 4
+ }],
+ [NumberingPlanIdentification.LandMobile, {
+ name: 'admin.smpp-provider.npi-land-mobile',
+ value: 5
+ }],
+ [NumberingPlanIdentification.NationalNumberingPlan, {
+ name: 'admin.smpp-provider.npi-national-numbering-plan',
+ value: 8
+ }],
+ [NumberingPlanIdentification.PrivateNumberingPlan, {
+ name: 'admin.smpp-provider.npi-private-numbering-plan',
+ value: 9
+ }],
+ [NumberingPlanIdentification.ERMESNumberingPlan, {
+ name: 'admin.smpp-provider.npi-ermes-numbering-plan',
+ value: 10
+ }],
+ [NumberingPlanIdentification.Internet, {
+ name: 'admin.smpp-provider.npi-internet',
+ value: 13
+ }],
+ [NumberingPlanIdentification.WAPClientId, {
+ name: 'admin.smpp-provider.npi-wap-client-id',
+ value: 18
+ }],
+]);
+
+export enum CodingSchemes {
+ SMSC = 'SMSC',
+ IA5 = 'IA5',
+ OctetUnspecified2 = 'OctetUnspecified2',
+ Latin1 = 'Latin1',
+ OctetUnspecified4 = 'OctetUnspecified4',
+ JIS = 'JIS',
+ Cyrillic = 'Cyrillic',
+ LatinHebrew = 'LatinHebrew',
+ UCS2UTF16 = 'UCS2UTF16',
+ PictogramEncoding = 'PictogramEncoding',
+ MusicCodes = 'MusicCodes',
+ ExtendedKanjiJIS = 'ExtendedKanjiJIS',
+ KoreanGraphicCharacterSet = 'KoreanGraphicCharacterSet',
+}
+
+export const codingSchemesMap = new Map([
+ [CodingSchemes.SMSC, {
+ name: 'admin.smpp-provider.scheme-smsc',
+ value: 0
+ }],
+ [CodingSchemes.IA5, {
+ name: 'admin.smpp-provider.scheme-ia5',
+ value: 1
+ }],
+ [CodingSchemes.OctetUnspecified2, {
+ name: 'admin.smpp-provider.scheme-octet-unspecified-2',
+ value: 2
+ }],
+ [CodingSchemes.Latin1, {
+ name: 'admin.smpp-provider.scheme-latin-1',
+ value: 3
+ }],
+ [CodingSchemes.OctetUnspecified4, {
+ name: 'admin.smpp-provider.scheme-octet-unspecified-4',
+ value: 4
+ }],
+ [CodingSchemes.JIS, {
+ name: 'admin.smpp-provider.scheme-jis',
+ value: 5
+ }],
+ [CodingSchemes.Cyrillic, {
+ name: 'admin.smpp-provider.scheme-cyrillic',
+ value: 6
+ }],
+ [CodingSchemes.LatinHebrew, {
+ name: 'admin.smpp-provider.scheme-latin-hebrew',
+ value: 7
+ }],
+ [CodingSchemes.UCS2UTF16, {
+ name: 'admin.smpp-provider.scheme-ucs-utf',
+ value: 8
+ }],
+ [CodingSchemes.PictogramEncoding, {
+ name: 'admin.smpp-provider.scheme-pictogram-encoding',
+ value: 9
+ }],
+ [CodingSchemes.MusicCodes, {
+ name: 'admin.smpp-provider.scheme-music-codes',
+ value: 10
+ }],
+ [CodingSchemes.ExtendedKanjiJIS, {
+ name: 'admin.smpp-provider.scheme-extended-kanji-jis',
+ value: 13
+ }],
+ [CodingSchemes.KoreanGraphicCharacterSet, {
+ name: 'admin.smpp-provider.scheme-korean-graphic-character-set',
+ value: 14
+ }],
+]);
+
+export type SmsProviderConfigurations =
+ Partial & AwsSnsSmsProviderConfiguration & TwilioSmsProviderConfiguration;
export interface SmsProviderConfiguration extends SmsProviderConfigurations {
type: SmsProviderType;
@@ -140,9 +330,9 @@ export function smsProviderConfigurationValidator(required: boolean): ValidatorF
&& isNotEmptyStr(twilioConfiguration.accountToken);
break;
case SmsProviderType.SMPP:
- const smppConfiguration: SmppSmsProviderConfiguration = configuration;
- valid = isNotEmptyStr(smppConfiguration.protocolVersion) && isNotEmptyStr(smppConfiguration.host)
- && isNumber(smppConfiguration.port) && isNotEmptyStr(smppConfiguration.systemId) && isNotEmptyStr(smppConfiguration.password);
+ const smppConfiguration = configuration as SmppSmsProviderConfiguration;
+ valid = isNotEmptyStr(smppConfiguration.host) && isNumber(smppConfiguration.port)
+ && isNotEmptyStr(smppConfiguration.systemId) && isNotEmptyStr(smppConfiguration.password);
break;
}
}
@@ -184,7 +374,7 @@ export function createSmsProviderConfiguration(type: SmsProviderType): SmsProvid
break;
case SmsProviderType.SMPP:
const smppSmsProviderConfiguration: SmppSmsProviderConfiguration = {
- protocolVersion: '',
+ protocolVersion: 3.3,
host: '',
port: null,
systemId: '',
diff --git a/ui-ngx/src/assets/locale/locale.constant-en_US.json b/ui-ngx/src/assets/locale/locale.constant-en_US.json
index 988722d3b5..303ca2752f 100644
--- a/ui-ngx/src/assets/locale/locale.constant-en_US.json
+++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json
@@ -253,6 +253,64 @@
"platform-ios": "iOS",
"all-platforms": "All platforms",
"allowed-platforms": "Allowed platforms"
+ },
+ "smpp-provider": {
+ "smpp-version": "SMPP version",
+ "smpp-host": "SMPP host",
+ "smpp-host-required": "SMPP host is required",
+ "smpp-port": "SMPP port",
+ "smpp-port-required": "SMPP port is required",
+ "system-id": "System ID",
+ "system-id-required": "System ID is required",
+ "password": "Password",
+ "password-required": "Password is required",
+ "type-settings": "Type settings",
+ "source-settings": "Source settings",
+ "destination-settings": "Destination settings",
+ "additional-settings": "Additional settings",
+ "system-type": "System type",
+ "bind-type": "Bind type",
+ "service-type": "Service type",
+ "source-address": "Source address",
+ "source-ton": "Source TON",
+ "source-npi": "Source NPI",
+ "destination-ton": "Destination TON (Type of Number)",
+ "destination-npi": "Destination NPI (Numbering Plan Identification)",
+ "address-range": "Address range",
+ "coding-scheme": "Coding scheme",
+ "bind-type-tx": "Transmitter",
+ "bind-type-rx": "Receiver",
+ "bind-type-trx": "Transciever",
+ "ton-unknown": "Unknown",
+ "ton-international": "International",
+ "ton-national": "National",
+ "ton-network-specific": "Network Specific",
+ "ton-subscriber-number": "Subscriber Number",
+ "ton-alphanumeric": "Alphanumeric",
+ "ton-abbreviated": "Abbreviated",
+ "npi-unknown": "0 - Unknown",
+ "npi-isdn": "1 - ISDN/telephone numbering plan (E163/E164)",
+ "npi-data-numbering-plan": "3 - Data numbering plan (X.121)",
+ "npi-telex-numbering-plan": "4 - Telex numbering plan (F.69)",
+ "npi-land-mobile": "6 - Land Mobile (E.212)",
+ "npi-national-numbering-plan": "8 - National numbering plan",
+ "npi-private-numbering-plan": "9 - Private numbering plan",
+ "npi-ermes-numbering-plan": "10 - ERMES numbering plan (ETSI DE/PS 3 01-3)",
+ "npi-internet": "13 - Internet (IP)",
+ "npi-wap-client-id": "18 - WAP Client Id (to be defined by WAP Forum)",
+ "scheme-smsc": "0 - SMSC Default Alphabet (ASCII for short and long code and to GSM for toll-free)",
+ "scheme-ia5": "1 - IA5 (ASCII for short and long code, Latin 9 for toll-free (ISO-8859-9))",
+ "scheme-octet-unspecified-2": "2 - Octet Unspecified (8-bit binary)",
+ "scheme-latin-1": "3 - Latin 1 (ISO-8859-1)",
+ "scheme-octet-unspecified-4": "4 - Octet Unspecified (8-bit binary)",
+ "scheme-jis": "5 - JIS (X 0208-1990)",
+ "scheme-cyrillic": "6 - Cyrillic (ISO-8859-5)",
+ "scheme-latin-hebrew": "7 - Latin/Hebrew (ISO-8859-8)",
+ "scheme-ucs-utf": "8 - UCS2/UTF-16 (ISO/IEC-10646)",
+ "scheme-pictogram-encoding": "9 - Pictogram Encoding",
+ "scheme-music-codes": "10 - Music Codes (ISO-2022-JP)",
+ "scheme-extended-kanji-jis": "13 - Extended Kanji JIS (X 0212-1990)",
+ "scheme-korean-graphic-character-set": "14 - Korean Graphic Character Set (KS C 5601/KS X 1001)"
}
},
"alarm": {
diff --git a/ui-ngx/src/assets/locale/locale.constant-ru_RU.json b/ui-ngx/src/assets/locale/locale.constant-ru_RU.json
index 6acb91c7c5..0ebc985ef0 100644
--- a/ui-ngx/src/assets/locale/locale.constant-ru_RU.json
+++ b/ui-ngx/src/assets/locale/locale.constant-ru_RU.json
@@ -107,8 +107,33 @@
"general-policy": "Общая политика",
"max-failed-login-attempts": "Максимальное количество неудачных попыток входа в систему, прежде чем учетная запись заблокирована",
"minimum-max-failed-login-attempts-range": "Максимальное количество неудачных попыток входа в систему не может быть отрицательным",
- "user-lockout-notification-email": "В случае блокировки учетной записи пользователя отправьте уведомление на электронную почту"
- },
+ "user-lockout-notification-email": "В случае блокировки учетной записи пользователя отправьте уведомление на электронную почту",
+ "smpp-provider": {
+ "smpp-version": "SMPP версия",
+ "smpp-host": "SMPP хост",
+ "smpp-host-required": "SMPP хост обязателен.",
+ "smpp-port": "SMPP порт",
+ "smpp-port-required": "SMPP порт обязателен.",
+ "system-id": "ИД системи",
+ "system-id-required": "ИД системи обязателен.",
+ "password": "Пароль",
+ "password-required": "Пароль обязателен.",
+ "type-settings": "Настройки типов",
+ "source-settings": "Настройки источника",
+ "destination-settings": "Настройки назначения",
+ "additional-settings": "Дополнительные настройки",
+ "system-type": "Тип системы",
+ "bind-type": "Тип привязки",
+ "service-type": "Тип обслуживания",
+ "source-address": "Адрес источника",
+ "source-ton": "Тип номера источника",
+ "source-npi": "Идентификация плана нумерации источника",
+ "destination-ton": "Тип номера назничения",
+ "destination-npi": "Идентификация плана нумерации назначения",
+ "address-range": "Диапазон адресов",
+ "coding-scheme": "Схема кодирования"
+ }
+ },
"alarm": {
"alarm": "Оповещение",
"alarms": "Оповещения",
diff --git a/ui-ngx/src/assets/locale/locale.constant-uk_UA.json b/ui-ngx/src/assets/locale/locale.constant-uk_UA.json
index 943598baef..657336d034 100644
--- a/ui-ngx/src/assets/locale/locale.constant-uk_UA.json
+++ b/ui-ngx/src/assets/locale/locale.constant-uk_UA.json
@@ -123,7 +123,32 @@
"general-policy": "Загальна політика",
"max-failed-login-attempts": "Максимальна кількість невдалих спроб входу, перш ніж обліковий запис заблоковано",
"minimum-max-failed-login-attempts-range": "Максимальна кількість невдалих спроб входу не може бути негативною",
- "user-lockout-notification-email": "У разі блокування облікового запису користувача, надішліть сповіщення на електронну пошту"
+ "user-lockout-notification-email": "У разі блокування облікового запису користувача, надішліть сповіщення на електронну пошту",
+ "smpp-provider": {
+ "smpp-version": "SMPP верія",
+ "smpp-host": "SMPP хост",
+ "smpp-host-required": "Хост SMPP обов'язковий.",
+ "smpp-port": "SMPP порт",
+ "smpp-port-required": "Порт SMPP обов'язковий.",
+ "system-id": "Id системи",
+ "system-id-required": "Id системи обязателен.",
+ "password": "Пароль",
+ "password-required": "Пароль обязателен.",
+ "type-settings": "Налаштування типів",
+ "source-settings": "Налаштування джерела",
+ "destination-settings": "Налаштування призначення",
+ "additional-settings": "Додаткові налаштування",
+ "system-type": "Тип системи",
+ "bind-type": "Тип зв'язування",
+ "service-type": "Тип обслуговування",
+ "source-address": "Адреса джерела",
+ "source-ton": "Тип номера джерела",
+ "source-npi": "Идентификация плана нумерации джерела",
+ "destination-ton": "Тип номера призначення",
+ "destination-npi": "Ідентифікація плану нумерації призначення",
+ "address-range": "Діапазон адрес",
+ "coding-scheme": "Схема кодування"
+ }
},
"alarm": {
"alarm": "Сигнал тривоги",