feat: добавлен выбор банка для СБП выплат

Frontend:
- Динамическая загрузка 226 банков из NSPK API
- Выбор банка добавлен в Step3Payment (новая заявка)
- Выбор банка добавлен в generateConfirmationFormHTML (редактирование)
- Поля: bank_id (ID из NSPK) и bank_name (название для отображения)

Backend:
- Добавлено поле bank_id в ClaimCreateRequest

API:
- http://212.193.27.93/api/payouts/dictionaries/nspk-banks

Изменения:
- ticket_form/frontend/src/components/form/Step3Payment.tsx
- ticket_form/frontend/src/components/form/generateConfirmationFormHTML.ts
- ticket_form/frontend/src/pages/ClaimForm.tsx
- ticket_form/backend/app/api/models.py
This commit is contained in:
Fedor
2025-12-02 11:06:15 +03:00
parent 834520a045
commit ee1c4af5c3
33 changed files with 10175 additions and 74 deletions

View File

@@ -61,5 +61,21 @@
"url": "http://185.197.75.249:9000/sse"
}
,
"n8n-mcp2": {
"command": "npx",
"args": [
"-y",
"supergateway",
"--streamableHttp",
"https://n8n.clientright.pro/mcp-server/http",
"--header",
"authorization:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI5MzMwYWVjZC1hYjExLTQxODEtOWIyYy1iMDZhZWEzMTNmNzQiLCJpc3MiOiJuOG4iLCJhdWQiOiJtY3Atc2VydmVyLWFwaSIsImp0aSI6Ijc5MTQzNDU5LTM0NzMtNDQ2Mi05MzU1LTZmMTAzZTdlMzAxNCIsImlhdCI6MTc2NDU3OTI0N30.g-WQpgWMjdFWVpUMaRP023MCQqfk_e3ollLyPpcE_Io"
]
}
}
}

Binary file not shown.

View File

@@ -1 +1 @@
2025-11-29 14:45:09
2025-12-01 14:55:09

View File

@@ -0,0 +1,28 @@
<?php /* Smarty version Smarty-3.1.7, created on 2025-12-01 14:36:18
compiled from "/var/www/fastuser/data/www/crm.clientright.ru/includes/runtime/../../layouts/v7/modules/Settings/ITS4YouInstaller/Index.tpl" */ ?>
<?php /*%%SmartyHeaderCode:1443819957692d7db2bd1137-92239728%%*/if(!defined('SMARTY_DIR')) exit('no direct access allowed');
$_valid = $_smarty_tpl->decodeProperties(array (
'file_dependency' =>
array (
'141d5b34bab8346f501a2d93e572a982ccfc3e9e' =>
array (
0 => '/var/www/fastuser/data/www/crm.clientright.ru/includes/runtime/../../layouts/v7/modules/Settings/ITS4YouInstaller/Index.tpl',
1 => 1715158481,
2 => 'file',
),
),
'nocache_hash' => '1443819957692d7db2bd1137-92239728',
'function' =>
array (
),
'variables' =>
array (
'QUALIFIED_MODULE' => 0,
),
'has_nocache_code' => false,
'version' => 'Smarty-3.1.7',
'unifunc' => 'content_692d7db2bd2a8',
),false); /*/%%SmartyHeaderCode%%*/?>
<?php if ($_valid && !is_callable('content_692d7db2bd2a8')) {function content_692d7db2bd2a8($_smarty_tpl) {?>
<div class="main-container clearfix"><div class="ExtensionscontentsDiv contentsDiv"><div class="col-sm-12 col-xs-12" id="importModules"><div class="contents tabbable row"><div class="col-sm-12 col-xs-12" id="extensionContainer"><?php echo $_smarty_tpl->getSubTemplate (vtemplate_path('ExtensionModules.tpl',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value), $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, null, null, array(), 0);?>
</div></div></div></div></div><?php }} ?>

View File

@@ -0,0 +1,89 @@
<?php /* Smarty version Smarty-3.1.7, created on 2025-12-01 14:36:15
compiled from "/var/www/fastuser/data/www/crm.clientright.ru/includes/runtime/../../layouts/v7/modules/Settings/ITS4YouInstaller/SettingsMenuStart.tpl" */ ?>
<?php /*%%SmartyHeaderCode:1410852820692d7daf66df77-69442568%%*/if(!defined('SMARTY_DIR')) exit('no direct access allowed');
$_valid = $_smarty_tpl->decodeProperties(array (
'file_dependency' =>
array (
'2bc8eb2937af9ee9437981d35434991a2b9f7b51' =>
array (
0 => '/var/www/fastuser/data/www/crm.clientright.ru/includes/runtime/../../layouts/v7/modules/Settings/ITS4YouInstaller/SettingsMenuStart.tpl',
1 => 1715158481,
2 => 'file',
),
),
'nocache_hash' => '1410852820692d7daf66df77-69442568',
'function' =>
array (
),
'variables' =>
array (
'QUALIFIED_MODULE' => 0,
'FIELDS_INFO' => 0,
'USER_MODEL' => 0,
),
'has_nocache_code' => false,
'version' => 'Smarty-3.1.7',
'unifunc' => 'content_692d7daf6b4c5',
),false); /*/%%SmartyHeaderCode%%*/?>
<?php if ($_valid && !is_callable('content_692d7daf6b4c5')) {function content_692d7daf6b4c5($_smarty_tpl) {?>
<?php echo $_smarty_tpl->getSubTemplate ("modules/Vtiger/partials/Topbar.tpl", $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, null, null, array(), 0);?>
<div class="container-fluid app-nav">
<div class="row">
<?php echo $_smarty_tpl->getSubTemplate (vtemplate_path("partials/SidebarHeader.tpl",$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value), $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, null, null, array(), 0);?>
<?php echo $_smarty_tpl->getSubTemplate (vtemplate_path("ModuleHeader.tpl",$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value), $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, null, null, array(), 0);?>
</div>
</div>
</nav>
<div id='overlayPageContent' class='fade modal overlayPageContent content-area overlay-container-300' tabindex='-1' role='dialog' aria-hidden='true'>
<div class="data">
</div>
<div class="modal-dialog">
</div>
</div>
<?php if ($_smarty_tpl->tpl_vars['FIELDS_INFO']->value!=null){?>
<script type="text/javascript">
var uimeta = (function() {
var fieldInfo = <?php echo $_smarty_tpl->tpl_vars['FIELDS_INFO']->value;?>
;
return {
field: {
get: function(name, property) {
if(name && property === undefined) {
return fieldInfo[name];
}
if(name && property) {
return fieldInfo[name][property]
}
},
isMandatory : function(name){
if(fieldInfo[name]) {
return fieldInfo[name].mandatory;
}
return false;
},
getType : function(name){
if(fieldInfo[name]) {
return fieldInfo[name].type
}
return false;
}
},
};
})();
</script>
<?php }?>
<div class="main-container clearfix">
<?php $_smarty_tpl->tpl_vars['LEFTPANELHIDE'] = new Smarty_variable($_smarty_tpl->tpl_vars['USER_MODEL']->value->get('leftpanelhide'), null, 0);?>
<div class="module-nav clearfix settingsNav" id="modnavigator">
<div class="hidden-xs hidden-sm height100Per">
<?php echo $_smarty_tpl->getSubTemplate ("modules/Settings/Vtiger/Sidebar.tpl", $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, null, null, array(), 0);?>
</div>
</div>
<div class="settingsPageDiv content-area clearfix">
<?php }} ?>

View File

@@ -0,0 +1,114 @@
<?php /* Smarty version Smarty-3.1.7, created on 2025-12-01 14:36:18
compiled from "/var/www/fastuser/data/www/crm.clientright.ru/includes/runtime/../../layouts/v7/modules/Settings/ITS4YouInstaller/rows/Extension.tpl" */ ?>
<?php /*%%SmartyHeaderCode:956243993692d7db2e207e0-48983396%%*/if(!defined('SMARTY_DIR')) exit('no direct access allowed');
$_valid = $_smarty_tpl->decodeProperties(array (
'file_dependency' =>
array (
'58eb0daa998201e075def1c266567e9a204f8a1b' =>
array (
0 => '/var/www/fastuser/data/www/crm.clientright.ru/includes/runtime/../../layouts/v7/modules/Settings/ITS4YouInstaller/rows/Extension.tpl',
1 => 1715158481,
2 => 'file',
),
),
'nocache_hash' => '956243993692d7db2e207e0-48983396',
'function' =>
array (
),
'variables' =>
array (
'EXTENSION' => 0,
'IS_PACKAGE_INCLUDED' => 0,
'MODULE_NAME' => 0,
'QUALIFIED_MODULE' => 0,
'MODULE_MODEL' => 0,
'IS_AUTH' => 0,
'SETTINGS_LINKS' => 0,
'SETTINGS_LINK' => 0,
),
'has_nocache_code' => false,
'version' => 'Smarty-3.1.7',
'unifunc' => 'content_692d7db2e3458',
),false); /*/%%SmartyHeaderCode%%*/?>
<?php if ($_valid && !is_callable('content_692d7db2e3458')) {function content_692d7db2e3458($_smarty_tpl) {?>
<?php $_smarty_tpl->tpl_vars['MODULE_MODEL'] = new Smarty_variable($_smarty_tpl->tpl_vars['EXTENSION']->value->get('moduleModel'), null, 0);?>
<?php $_smarty_tpl->tpl_vars['MODULE_NAME'] = new Smarty_variable($_smarty_tpl->tpl_vars['EXTENSION']->value->get('name'), null, 0);?>
<?php $_smarty_tpl->tpl_vars['IS_PACKAGE_INCLUDED'] = new Smarty_variable($_smarty_tpl->tpl_vars['EXTENSION']->value->isPackageIncludedModule(), null, 0);?>
<tr class="installedModuleRow <?php if ($_smarty_tpl->tpl_vars['IS_PACKAGE_INCLUDED']->value){?>packageIncluded<?php }else{ ?>packageNotIncluded<?php }?>" data-cfmid="1" id="<?php echo $_smarty_tpl->tpl_vars['MODULE_NAME']->value;?>
" <?php if (!$_smarty_tpl->tpl_vars['IS_PACKAGE_INCLUDED']->value){?>title="<?php echo vtranslate('LBL_NOT_INCLUDED_IN_PACKAGE',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
"<?php }?>>
<td><a <?php if ($_smarty_tpl->tpl_vars['MODULE_MODEL']->value&&$_smarty_tpl->tpl_vars['MODULE_MODEL']->value->isActive()){?>href="<?php echo $_smarty_tpl->tpl_vars['MODULE_MODEL']->value->getDefaultUrl();?>
" target="_blank" <?php }else{ ?> href="#<?php echo $_smarty_tpl->tpl_vars['MODULE_NAME']->value;?>
" <?php }?>><?php echo vtranslate($_smarty_tpl->tpl_vars['EXTENSION']->value->get('label'),$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</a></td>
<td class="validateVersion"><?php echo $_smarty_tpl->tpl_vars['EXTENSION']->value->getVersion();?>
</td>
<td class="updateTime" title="<?php echo $_smarty_tpl->tpl_vars['EXTENSION']->value->getUpdateTimeRaw();?>
"><?php echo $_smarty_tpl->tpl_vars['EXTENSION']->value->getUpdateTime();?>
</td>
<td><?php echo $_smarty_tpl->tpl_vars['EXTENSION']->value->get('pkgVersion');?>
</td>
<td>
<span class="extension_container">
<?php if ($_smarty_tpl->tpl_vars['EXTENSION']->value->isVtigerCompatible()){?>
<input type="hidden" name="extensionName" value="<?php echo $_smarty_tpl->tpl_vars['EXTENSION']->value->get('name');?>
"/>
<input type="hidden" name="extensionUrl" value="<?php echo $_smarty_tpl->tpl_vars['EXTENSION']->value->get('downloadURL');?>
"/>
<input type="hidden" name="extensionId" value="<?php echo $_smarty_tpl->tpl_vars['EXTENSION']->value->get('id');?>
"/>
<input type="hidden" name="extensionType" value="Single"/>
<input type="hidden" name="moduleMode" value="showChangelog"/>
<?php if (!$_smarty_tpl->tpl_vars['EXTENSION']->value->isAlreadyExists()){?>
<input type="hidden" name="moduleAction" value="Install"/>
<button class="showChangeLog btn btn-primary <?php if ($_smarty_tpl->tpl_vars['IS_AUTH']->value){?>authenticated <?php }else{ ?> loginRequired<?php }?>">
<?php echo vtranslate('LBL_INSTALL',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</button>
<?php }elseif($_smarty_tpl->tpl_vars['EXTENSION']->value->isUpgradable()){?>
<input type="hidden" name="moduleAction" value="Upgrade"/>
<input type="hidden" name="moduleMessage" value="<?php echo $_smarty_tpl->tpl_vars['EXTENSION']->value->getUpdateMessage();?>
"/>
<button class="showChangeLog isUpdateBtn btn btn-success margin0px <?php if ($_smarty_tpl->tpl_vars['IS_AUTH']->value){?>authenticated <?php }else{ ?> loginRequired<?php }?>">
<?php echo vtranslate('LBL_UPDATE',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</button>
<?php }?>
<?php }?>
</span>
<?php if ($_smarty_tpl->tpl_vars['MODULE_MODEL']->value){?>
<?php $_smarty_tpl->tpl_vars['SETTINGS_LINKS'] = new Smarty_variable($_smarty_tpl->tpl_vars['MODULE_MODEL']->value->getSettingLinks(), null, 0);?>
<?php if ((count($_smarty_tpl->tpl_vars['SETTINGS_LINKS']->value)>0)){?>
<span class="btn-group pull-right <?php if (!$_smarty_tpl->tpl_vars['MODULE_MODEL']->value->isActive()){?>hide<?php }?>">
<button class="btn btn-default btn dropdown-toggle unpin hiden " data-toggle="dropdown">
<?php echo vtranslate('LBL_SETTINGS',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
&nbsp;<i class="caret"></i>
</button>
<ul class="dropdown-menu pull-right dropdownfields">
<?php $_smarty_tpl->tpl_vars['SETTINGS_LINK'] = new Smarty_Variable; $_smarty_tpl->tpl_vars['SETTINGS_LINK']->_loop = false;
$_from = $_smarty_tpl->tpl_vars['SETTINGS_LINKS']->value; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array');}
foreach ($_from as $_smarty_tpl->tpl_vars['SETTINGS_LINK']->key => $_smarty_tpl->tpl_vars['SETTINGS_LINK']->value){
$_smarty_tpl->tpl_vars['SETTINGS_LINK']->_loop = true;
?>
<li>
<a target="_blank" <?php if (stripos($_smarty_tpl->tpl_vars['SETTINGS_LINK']->value['linkurl'],'javascript:')===0){?>onclick='<?php echo substr($_smarty_tpl->tpl_vars['SETTINGS_LINK']->value['linkurl'],strlen("javascript:"));?>
'<?php }else{ ?>href='<?php echo $_smarty_tpl->tpl_vars['SETTINGS_LINK']->value['linkurl'];?>
'<?php }?>>
<?php echo vtranslate($_smarty_tpl->tpl_vars['SETTINGS_LINK']->value['linklabel'],$_smarty_tpl->tpl_vars['MODULE_NAME']->value,vtranslate("SINGLE_".($_smarty_tpl->tpl_vars['MODULE_NAME']->value),$_smarty_tpl->tpl_vars['MODULE_NAME']->value));?>
</a>
</li>
<?php } ?>
</ul>
</span>
<?php }?>
<?php }?>
<span class="pull-right">
<?php if ($_smarty_tpl->tpl_vars['EXTENSION']->value->get('website')!=''){?>
<button class="btn installExtension addButton" style="margin-right:5px;" data-url="<?php echo $_smarty_tpl->tpl_vars['EXTENSION']->value->get('website');?>
"><?php echo vtranslate('LBL_MORE_DETAILS',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</button>
<?php }?>
</span>
</td>
</tr><?php }} ?>

View File

@@ -0,0 +1,112 @@
<?php /* Smarty version Smarty-3.1.7, created on 2025-12-01 14:36:18
compiled from "/var/www/fastuser/data/www/crm.clientright.ru/includes/runtime/../../layouts/v7/modules/Settings/ITS4YouInstaller/InstalledModules.tpl" */ ?>
<?php /*%%SmartyHeaderCode:69184756692d7db2bdaaf3-57570336%%*/if(!defined('SMARTY_DIR')) exit('no direct access allowed');
$_valid = $_smarty_tpl->decodeProperties(array (
'file_dependency' =>
array (
'610249e3cc1cf41a635986a0f3a3cc3d32cd352d' =>
array (
0 => '/var/www/fastuser/data/www/crm.clientright.ru/includes/runtime/../../layouts/v7/modules/Settings/ITS4YouInstaller/InstalledModules.tpl',
1 => 1715158481,
2 => 'file',
),
),
'nocache_hash' => '69184756692d7db2bdaaf3-57570336',
'function' =>
array (
),
'variables' =>
array (
'ERROR_MESSAGES' => 0,
'ERROR_MESSAGE' => 0,
'QUALIFIED_MODULE' => 0,
'IS_AUTH' => 0,
'LICENSES_LIST' => 0,
'LICENSE' => 0,
'EMPTY_LICENSES' => 0,
'EMPTY_LICENSE' => 0,
'MODULE' => 0,
'HOSTING_MODEL' => 0,
'HOSTING_HEADER' => 0,
'HOSTING_FIELD' => 0,
'EXTENSIONS_LIST' => 0,
'EXTENSION' => 0,
'LANGUAGES_LIST' => 0,
),
'has_nocache_code' => false,
'version' => 'Smarty-3.1.7',
'unifunc' => 'content_692d7db2bfb12',
),false); /*/%%SmartyHeaderCode%%*/?>
<?php if ($_valid && !is_callable('content_692d7db2bfb12')) {function content_692d7db2bfb12($_smarty_tpl) {?>
<div class="tab-pane active" id="installedModules"><?php if ($_smarty_tpl->tpl_vars['ERROR_MESSAGES']->value){?><div class="col-md-12"><?php $_smarty_tpl->tpl_vars['ERROR_MESSAGE'] = new Smarty_Variable; $_smarty_tpl->tpl_vars['ERROR_MESSAGE']->_loop = false;
$_from = $_smarty_tpl->tpl_vars['ERROR_MESSAGES']->value; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array');}
foreach ($_from as $_smarty_tpl->tpl_vars['ERROR_MESSAGE']->key => $_smarty_tpl->tpl_vars['ERROR_MESSAGE']->value){
$_smarty_tpl->tpl_vars['ERROR_MESSAGE']->_loop = true;
?><div><div class="displayInlineBlock alert alert-danger"><?php echo vtranslate($_smarty_tpl->tpl_vars['ERROR_MESSAGE']->value,$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</div></div><?php } ?></div><?php }elseif(!$_smarty_tpl->tpl_vars['IS_AUTH']->value){?><div style="text-align: center;"><a href="index.php?module=ITS4YouInstaller&parent=Settings&view=Login"><div class="alert alert-danger displayInlineBlock extensionLoginAlert"><?php echo vtranslate('LBL_LOGIN_TO_INSTALLER',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</div></a><br></div><?php }else{ ?><div class="col-md-12"><h4><?php echo vtranslate('LBL_ACTIVATED_LICENSES',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</h4><hr><div><button class="btn btn-primary activateButton" type="button"><i class="fa fa-plus"></i>&nbsp;&nbsp;<div class="displayInlineBlock"><?php echo vtranslate('LBL_ACTIVATE',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
<?php echo vtranslate('LBL_LICENSE_KEY',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</div></button>&nbsp;&nbsp;<button class="btn btn-default updateButton" type="button"><i class="fa fa-refresh"></i>&nbsp;&nbsp;<div class="displayInlineBlock"><?php echo vtranslate('LBL_UPDATE_LICENSES',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</div></button></div><br><table class="table table-bordered licenseTable"><thead><tr><th><?php echo vtranslate('LBL_LICENSE_KEY',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</th><th><?php echo vtranslate('LBL_LICENSE_NAME',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</th><th><?php echo vtranslate('LBL_LICENSE_DUE_DATE',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</th><th><?php echo vtranslate('LBL_LICENSE_TYPE',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</th><th><?php echo vtranslate('LBL_ACTION',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</th></tr></thead><tbody><?php $_smarty_tpl->tpl_vars['LICENSE'] = new Smarty_Variable; $_smarty_tpl->tpl_vars['LICENSE']->_loop = false;
$_smarty_tpl->tpl_vars['LICENSE_KEY'] = new Smarty_Variable;
$_from = $_smarty_tpl->tpl_vars['LICENSES_LIST']->value; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array');}
foreach ($_from as $_smarty_tpl->tpl_vars['LICENSE']->key => $_smarty_tpl->tpl_vars['LICENSE']->value){
$_smarty_tpl->tpl_vars['LICENSE']->_loop = true;
$_smarty_tpl->tpl_vars['LICENSE_KEY']->value = $_smarty_tpl->tpl_vars['LICENSE']->key;
?><?php if (!$_smarty_tpl->tpl_vars['LICENSE']->value){?><?php continue 1?><?php }?><?php echo $_smarty_tpl->getSubTemplate (vtemplate_path("rows/License.tpl",$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value), $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, null, null, array(), 0);?>
<?php } ?><?php if (!empty($_smarty_tpl->tpl_vars['EMPTY_LICENSES']->value)){?><tr><td style="border-left:none;border-right:none;" colspan="4"><?php $_smarty_tpl->tpl_vars['EMPTY_LICENSE'] = new Smarty_Variable; $_smarty_tpl->tpl_vars['EMPTY_LICENSE']->_loop = false;
$_from = $_smarty_tpl->tpl_vars['EMPTY_LICENSES']->value; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array');}
foreach ($_from as $_smarty_tpl->tpl_vars['EMPTY_LICENSE']->key => $_smarty_tpl->tpl_vars['EMPTY_LICENSE']->value){
$_smarty_tpl->tpl_vars['EMPTY_LICENSE']->_loop = true;
?><div><?php echo $_smarty_tpl->tpl_vars['EMPTY_LICENSE']->value;?>
</div><br><?php } ?></td><td style="border-left:none;border-right:none;" title="<?php echo vtranslate('LBL_EMPTY_LICENSES_MESSAGE',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
"><form action="index.php" method="post"><input type="hidden" name="module" value="<?php echo $_smarty_tpl->tpl_vars['MODULE']->value;?>
"><input type="hidden" name="parent" value="Settings"><input type="hidden" name="action" value="Basic"><input type="hidden" name="mode" value="clearEmptyLicenses"><button class="btn btn-warning"><?php echo vtranslate('LBL_EMPTY_LICENSES_BUTTON',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</></form></td></tr><?php }?></tbody></table></div><?php if ($_smarty_tpl->tpl_vars['HOSTING_MODEL']->value){?><div class="col-md-12"><h4><?php echo vtranslate('LBL_HOSTING',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</h4><hr><table class="table table-bordered hostingTable"><thead><tr><?php $_smarty_tpl->tpl_vars['HOSTING_HEADER'] = new Smarty_Variable; $_smarty_tpl->tpl_vars['HOSTING_HEADER']->_loop = false;
$_smarty_tpl->tpl_vars['HOSTING_FIELD'] = new Smarty_Variable;
$_from = $_smarty_tpl->tpl_vars['HOSTING_MODEL']->value->getHeaders(); if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array');}
foreach ($_from as $_smarty_tpl->tpl_vars['HOSTING_HEADER']->key => $_smarty_tpl->tpl_vars['HOSTING_HEADER']->value){
$_smarty_tpl->tpl_vars['HOSTING_HEADER']->_loop = true;
$_smarty_tpl->tpl_vars['HOSTING_FIELD']->value = $_smarty_tpl->tpl_vars['HOSTING_HEADER']->key;
?><th><?php echo vtranslate($_smarty_tpl->tpl_vars['HOSTING_HEADER']->value,$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</th><?php } ?><th><?php echo vtranslate('LBL_ACTION',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</th></tr></thead><tbody><tr><?php $_smarty_tpl->tpl_vars['HOSTING_HEADER'] = new Smarty_Variable; $_smarty_tpl->tpl_vars['HOSTING_HEADER']->_loop = false;
$_smarty_tpl->tpl_vars['HOSTING_FIELD'] = new Smarty_Variable;
$_from = $_smarty_tpl->tpl_vars['HOSTING_MODEL']->value->getHeaders(); if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array');}
foreach ($_from as $_smarty_tpl->tpl_vars['HOSTING_HEADER']->key => $_smarty_tpl->tpl_vars['HOSTING_HEADER']->value){
$_smarty_tpl->tpl_vars['HOSTING_HEADER']->_loop = true;
$_smarty_tpl->tpl_vars['HOSTING_FIELD']->value = $_smarty_tpl->tpl_vars['HOSTING_HEADER']->key;
?><td><?php echo $_smarty_tpl->tpl_vars['HOSTING_MODEL']->value->get($_smarty_tpl->tpl_vars['HOSTING_FIELD']->value);?>
</td><?php } ?><td><div class="pull-right"><?php if ($_smarty_tpl->tpl_vars['HOSTING_MODEL']->value->isExpired()){?><div class="alert alert-danger displayInlineBlock" style="margin:0;"><?php echo vtranslate('LBL_HOSTING_INACTIVE',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</div><?php }else{ ?><div class="alert alert-info displayInlineBlock" style="margin:0;"><?php echo vtranslate('LBL_HOSTING_ACTIVE',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
<?php echo $_smarty_tpl->tpl_vars['HOSTING_MODEL']->value->getExpireString();?>
</div><?php }?></div></td></tr></tbody></table></div><?php }?><?php }?><div class="col-md-12"><div><h4><?php echo vtranslate('LBL_MODULES',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</h4><hr><div class="clearfix"><label class="pull-left searchModuleContainer"><i class="fa fa-search"></i><input type="text" class="inputElement searchModule" placeholder="<?php echo vtranslate('LBL_SEARCH_MODULES',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
"></label></div><table class="table table-bordered extensionsTable"><thead><tr><th style="width: 30%;"><?php echo vtranslate('Name',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</th><th style="width: 10%;"><?php echo vtranslate('LBL_INSTALLED_VERSION',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</th><th style="width: 10%;"><?php echo vtranslate('LBL_UPDATE_DATETIME',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</th><th style="width: 10%;"><?php echo vtranslate('LBL_NEWEST_VERSION',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</th><th><?php echo vtranslate('LBL_ACTION',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</th></tr></thead><tbody><?php $_smarty_tpl->tpl_vars['EXTENSION'] = new Smarty_Variable; $_smarty_tpl->tpl_vars['EXTENSION']->_loop = false;
$_from = $_smarty_tpl->tpl_vars['EXTENSIONS_LIST']->value; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array');}
foreach ($_from as $_smarty_tpl->tpl_vars['EXTENSION']->key => $_smarty_tpl->tpl_vars['EXTENSION']->value){
$_smarty_tpl->tpl_vars['EXTENSION']->_loop = true;
?><?php if (!$_smarty_tpl->tpl_vars['EXTENSION']->value->isVisible()){?><?php continue 1?><?php }?><?php if ($_smarty_tpl->tpl_vars['EXTENSION']->value->isMultiPackage()){?><?php echo $_smarty_tpl->getSubTemplate (vtemplate_path("rows/Package.tpl",$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value), $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, null, null, array(), 0);?>
<?php }else{ ?><?php echo $_smarty_tpl->getSubTemplate (vtemplate_path("rows/Extension.tpl",$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value), $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, null, null, array(), 0);?>
<?php }?><?php } ?></tbody></table></div><div><h4><?php echo vtranslate('LBL_AVAILABLE_LANGUAGES',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</h4><table class="table table-bordered"><thead><tr><th style="width: 30%;"><?php echo vtranslate('LBL_LANGUAGE_NAME',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</th><th style="width: 30%;" colspan="2"><?php echo vtranslate('LBL_DESCRIPTION',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</th><th><?php echo vtranslate('LBL_ACTION',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</th></tr></thead><tbody><?php $_smarty_tpl->tpl_vars['LANGUAGE'] = new Smarty_Variable; $_smarty_tpl->tpl_vars['LANGUAGE']->_loop = false;
$_from = $_smarty_tpl->tpl_vars['LANGUAGES_LIST']->value; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array');}
foreach ($_from as $_smarty_tpl->tpl_vars['LANGUAGE']->key => $_smarty_tpl->tpl_vars['LANGUAGE']->value){
$_smarty_tpl->tpl_vars['LANGUAGE']->_loop = true;
?><?php echo $_smarty_tpl->getSubTemplate (vtemplate_path("rows/Language.tpl",$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value), $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, null, null, array(), 0);?>
<?php } ?></tbody></table></div></div></div><?php }} ?>

View File

@@ -0,0 +1,109 @@
<?php /* Smarty version Smarty-3.1.7, created on 2025-12-01 14:36:18
compiled from "/var/www/fastuser/data/www/crm.clientright.ru/includes/runtime/../../layouts/v7/modules/Settings/ITS4YouInstaller/rows/License.tpl" */ ?>
<?php /*%%SmartyHeaderCode:486525976692d7db2bfdfd0-37690819%%*/if(!defined('SMARTY_DIR')) exit('no direct access allowed');
$_valid = $_smarty_tpl->decodeProperties(array (
'file_dependency' =>
array (
'677ad9e73c2ee4a58e253d74cb872caf7ce0b288' =>
array (
0 => '/var/www/fastuser/data/www/crm.clientright.ru/includes/runtime/../../layouts/v7/modules/Settings/ITS4YouInstaller/rows/License.tpl',
1 => 1715158481,
2 => 'file',
),
),
'nocache_hash' => '486525976692d7db2bfdfd0-37690819',
'function' =>
array (
),
'variables' =>
array (
'LICENSE' => 0,
'LICENSE_KEY' => 0,
'QUALIFIED_MODULE' => 0,
'EXTENSION_MODEL' => 0,
),
'has_nocache_code' => false,
'version' => 'Smarty-3.1.7',
'unifunc' => 'content_692d7db2c1102',
),false); /*/%%SmartyHeaderCode%%*/?>
<?php if ($_valid && !is_callable('content_692d7db2c1102')) {function content_692d7db2c1102($_smarty_tpl) {?>
<tr class="<?php echo $_smarty_tpl->tpl_vars['LICENSE']->value->getParentClass();?>
">
<td style="border-left:none;border-right:none;">
<a class="licenseColors" href="#<?php if ($_smarty_tpl->tpl_vars['LICENSE']->value->get('service_usageunit')!='Package'){?><?php echo $_smarty_tpl->tpl_vars['LICENSE']->value->get('cf_identifier');?>
<?php }?>">
<?php echo $_smarty_tpl->tpl_vars['LICENSE_KEY']->value;?>
</a>
</td>
<td style="border-left:none;border-right:none;">
<?php echo $_smarty_tpl->tpl_vars['LICENSE']->value->get('servicename');?>
</td>
<?php if ($_smarty_tpl->tpl_vars['LICENSE']->value->isHostingLicense()){?>
<td colspan="3" style="border-left:none;">
<?php echo vtranslate('LBL_HOSTING_LICENSE',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</td>
<?php }else{ ?>
<td style="border-left:none;border-right:none;">
<?php if ($_smarty_tpl->tpl_vars['LICENSE']->value->get('due_date')!=''){?>
<?php echo Vtiger_Util_Helper::formatDateIntoStrings($_smarty_tpl->tpl_vars['LICENSE']->value->get('due_date'));?>
<?php }?>
</td>
<td style="border-left:none;border-right:none;">
<?php if ($_smarty_tpl->tpl_vars['LICENSE']->value->hasParentLicense()){?>
<?php echo vtranslate('LBL_SUBLICENSE',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
<?php }elseif($_smarty_tpl->tpl_vars['LICENSE']->value->get('subscription')=="1"){?>
<?php echo vtranslate('LBL_SUBSCRIPTION',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
<?php }elseif($_smarty_tpl->tpl_vars['LICENSE']->value->get('demo_free')=="1"){?>
<?php echo vtranslate('LBL_DEMO_FREE',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
<?php }else{ ?>
<?php echo vtranslate('LBL_FULL',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
<?php }?>
</td>
<?php if ($_smarty_tpl->tpl_vars['LICENSE']->value->hasParentLicense()){?>
<td style="border-left:none;border-right:none;"></td>
<?php }else{ ?>
<td style="border-left:none;border-right:none;">
<?php if ($_smarty_tpl->tpl_vars['LICENSE']->value->isRenewReady()&&$_smarty_tpl->tpl_vars['EXTENSION_MODEL']->value->isAllowedBuyLicense()){?>
<?php if ($_smarty_tpl->tpl_vars['LICENSE']->value->get('subscription')=="1"){?>
<a class="btn btn-info" target="_blank" href="<?php echo $_smarty_tpl->tpl_vars['LICENSE']->value->getRenewUrl();?>
"><?php echo vtranslate('LBL_PROLONG_LICENSE',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</a>
<?php }elseif($_smarty_tpl->tpl_vars['LICENSE']->value->get('demo_free')==true){?>
<a class="btn btn-success" target="_blank" href="<?php echo $_smarty_tpl->tpl_vars['LICENSE']->value->getConvertUrl();?>
"><?php echo vtranslate('LBL_BUY_LICENSE',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</a>
<?php }else{ ?>
<a class="btn btn-primary" target="_blank" href="<?php echo $_smarty_tpl->tpl_vars['LICENSE']->value->getRenewUrl();?>
"><?php echo vtranslate('LBL_RENEW_LICENSE',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</a>
<?php }?>
&nbsp;&nbsp;
<?php }?>
<button class="btn btn-danger actionLicenses" type="button" data-mode="deactivate" data-license="<?php echo $_smarty_tpl->tpl_vars['LICENSE_KEY']->value;?>
"><?php echo vtranslate('LBL_DEACTIVATE_LICENSES',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</button>
<div class="pull-right">
<?php if ($_smarty_tpl->tpl_vars['LICENSE']->value->isExpired()){?>
<div class="alert alert-danger displayInlineBlock" style="margin:0;"><?php if ($_smarty_tpl->tpl_vars['LICENSE']->value->isTrial()){?><?php echo vtranslate('LBL_TRIAL_INACTIVE',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
<?php }else{ ?><?php echo vtranslate('LBL_MEMBERSHIP_INACTIVE',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
<?php }?><?php echo $_smarty_tpl->tpl_vars['LICENSE']->value->getExpireString();?>
</div>
<?php }else{ ?>
<div class="alert alert-<?php if ($_smarty_tpl->tpl_vars['LICENSE']->value->isRenewReady()){?>warning<?php }else{ ?>info<?php }?> displayInlineBlock" style="margin:0;"><?php if ($_smarty_tpl->tpl_vars['LICENSE']->value->isTrial()){?><?php echo vtranslate('LBL_TRIAL_ACTIVE',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
<?php }else{ ?><?php echo vtranslate('LBL_MEMBERSHIP_ACTIVE',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
<?php }?><?php echo $_smarty_tpl->tpl_vars['LICENSE']->value->getExpireString();?>
</div>
<?php }?>
</div>
</td>
<?php }?>
<?php }?>
</tr><?php }} ?>

View File

@@ -0,0 +1,78 @@
<?php /* Smarty version Smarty-3.1.7, created on 2025-12-01 14:36:19
compiled from "/var/www/fastuser/data/www/crm.clientright.ru/includes/runtime/../../layouts/v7/modules/Settings/ITS4YouInstaller/ModulesShop.tpl" */ ?>
<?php /*%%SmartyHeaderCode:395046373692d7db345a6a2-26094119%%*/if(!defined('SMARTY_DIR')) exit('no direct access allowed');
$_valid = $_smarty_tpl->decodeProperties(array (
'file_dependency' =>
array (
'7ad3dfd7921dbcaef33b7db917a006a250efd628' =>
array (
0 => '/var/www/fastuser/data/www/crm.clientright.ru/includes/runtime/../../layouts/v7/modules/Settings/ITS4YouInstaller/ModulesShop.tpl',
1 => 1715158481,
2 => 'file',
),
),
'nocache_hash' => '395046373692d7db345a6a2-26094119',
'function' =>
array (
),
'variables' =>
array (
'PACKAGES_LIST' => 0,
'PACKAGE' => 0,
'QUALIFIED_MODULE' => 0,
'imageSource' => 0,
'SHOP_LINK' => 0,
'EXTENSIONS_LIST' => 0,
'EXTENSION' => 0,
),
'has_nocache_code' => false,
'version' => 'Smarty-3.1.7',
'unifunc' => 'content_692d7db347b31',
),false); /*/%%SmartyHeaderCode%%*/?>
<?php if ($_valid && !is_callable('content_692d7db347b31')) {function content_692d7db347b31($_smarty_tpl) {?>
<div class="tab-pane col-lg-12" id="modulesShop"><div class="clearfix"><div class="grid-container-block-3"><div class="grid-container-3"><?php $_smarty_tpl->tpl_vars['PACKAGE'] = new Smarty_Variable; $_smarty_tpl->tpl_vars['PACKAGE']->_loop = false;
$_from = $_smarty_tpl->tpl_vars['PACKAGES_LIST']->value; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array');}
foreach ($_from as $_smarty_tpl->tpl_vars['PACKAGE']->key => $_smarty_tpl->tpl_vars['PACKAGE']->value){
$_smarty_tpl->tpl_vars['PACKAGE']->_loop = true;
?><?php if ($_smarty_tpl->tpl_vars['PACKAGE']->value->get('inshop')!="1"){?><?php continue 1?><?php }?><div class="grid-container-div-3"><div class="thumbnail extension_container extensionWidgetContainer padding10"><div class="contentHeader"><div style="margin-bottom: 5px;"><div class="extension_header"><div class="font-x-x-large boxSizingBorderBox" style="text-align: center;"><?php echo vtranslate($_smarty_tpl->tpl_vars['PACKAGE']->value->get('label'),$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</div></div></div></div><?php if ($_smarty_tpl->tpl_vars['PACKAGE']->value->get('thumbnailURLTop')!=null){?><?php $_smarty_tpl->tpl_vars['imageSource'] = new Smarty_variable($_smarty_tpl->tpl_vars['PACKAGE']->value->get('thumbnailURLTop'), null, 0);?><img src="<?php echo $_smarty_tpl->tpl_vars['imageSource']->value;?>
" class="thumbnailImage"/><?php }?><?php if ($_smarty_tpl->tpl_vars['PACKAGE']->value->get('description')!=''){?><div class="caption"><div class="font-x-x-large boxSizingBorderBox"><div style="text-align: center;"><strong><?php echo $_smarty_tpl->tpl_vars['PACKAGE']->value->get('description');?>
</strong></div></div></div><?php }?><?php if ($_smarty_tpl->tpl_vars['PACKAGE']->value->get('thumbnailURLCenterA')!=null){?><?php $_smarty_tpl->tpl_vars['imageSource'] = new Smarty_variable($_smarty_tpl->tpl_vars['PACKAGE']->value->get('thumbnailURLCenterA'), null, 0);?><img src="<?php echo $_smarty_tpl->tpl_vars['imageSource']->value;?>
" class="thumbnailImage"/><?php }?><div><div class="col-lg-12 col-md-12 col-sm-12" style="text-align: center;"><a href="<?php echo $_smarty_tpl->tpl_vars['SHOP_LINK']->value;?>
?q=true&addidtob=<?php echo $_smarty_tpl->tpl_vars['PACKAGE']->value->get('bid');?>
"><h2 class="summaryCount" style="padding:0px;margin:0px"><?php echo $_smarty_tpl->tpl_vars['PACKAGE']->value->get('price');?>
<?php echo $_smarty_tpl->tpl_vars['PACKAGE']->value->get('currency_symbol');?>
</h2></a></div></div><br><?php if ($_smarty_tpl->tpl_vars['PACKAGE']->value->get('thumbnailURLCenterB')!=null){?><?php $_smarty_tpl->tpl_vars['imageSource'] = new Smarty_variable($_smarty_tpl->tpl_vars['PACKAGE']->value->get('thumbnailURLCenterB'), null, 0);?><img src="<?php echo $_smarty_tpl->tpl_vars['imageSource']->value;?>
" class="thumbnailImage"/><?php }?><div class="caption"><hr><div class="font-x-x-large boxSizingBorderBox"><?php echo $_smarty_tpl->tpl_vars['PACKAGE']->value->getMoreInfo();?>
</div><?php if ($_smarty_tpl->tpl_vars['PACKAGE']->value->get('thumbnailURLBottom')!=null){?><?php $_smarty_tpl->tpl_vars['imageSource'] = new Smarty_variable($_smarty_tpl->tpl_vars['PACKAGE']->value->get('thumbnailURLBottom'), null, 0);?><div style="text-align: center;"><img src="<?php echo $_smarty_tpl->tpl_vars['imageSource']->value;?>
" class="thumbnailImage"/></div><?php }?><br><div class="row" style="padding: 10px 0 5px 0"><div class="col-md-12" style="text-align: right;"><span><?php if (!$_smarty_tpl->tpl_vars['PACKAGE']->value->isRegisteredUser()){?><button class="m0550 btn btn-secondary logintoInstaller" type="button"><?php echo vtranslate('LBL_TRIAL',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</button><?php }elseif($_smarty_tpl->tpl_vars['PACKAGE']->value->isTrialReady()){?><button class="m0550 btn btn-warning trialButton" data-trial="<?php echo $_smarty_tpl->tpl_vars['PACKAGE']->value->get('id');?>
"><?php echo vtranslate('LBL_TRIAL',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</button><?php }else{ ?><button class="m0550 btn btn-warning" disabled type="button"><?php echo vtranslate('LBL_TRIAL',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</button><?php }?><?php if ($_smarty_tpl->tpl_vars['PACKAGE']->value->get('price')!='Free'&&$_smarty_tpl->tpl_vars['PACKAGE']->value->get('price')!=0&&$_smarty_tpl->tpl_vars['PACKAGE']->value->get('bid')!=''){?><button class="m0550 btn btn-success buyButton" data-url="<?php echo $_smarty_tpl->tpl_vars['SHOP_LINK']->value;?>
?q=true&addidtob=<?php echo $_smarty_tpl->tpl_vars['PACKAGE']->value->get('bid');?>
" data-trial=false><?php echo vtranslate('LBL_BUY',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
<?php echo $_smarty_tpl->tpl_vars['PACKAGE']->value->get('price');?>
<?php echo $_smarty_tpl->tpl_vars['PACKAGE']->value->get('currency_symbol');?>
</button><?php }?><?php if ($_smarty_tpl->tpl_vars['PACKAGE']->value->get('website')!=''){?><button class="m0550 btn installExtension addButton" style="margin-right:5px;" data-url="<?php echo $_smarty_tpl->tpl_vars['PACKAGE']->value->get('website');?>
"><?php echo vtranslate('LBL_MORE_DETAILS',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</button><?php }?></span></div></div></div></div></div class="grid-container-div"><?php } ?></div></div></div><div class="clearfix"><div class="grid-container-block"><div class="grid-container grid-columns-4"><?php $_smarty_tpl->tpl_vars['EXTENSION'] = new Smarty_Variable; $_smarty_tpl->tpl_vars['EXTENSION']->_loop = false;
$_from = $_smarty_tpl->tpl_vars['EXTENSIONS_LIST']->value; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array');}
foreach ($_from as $_smarty_tpl->tpl_vars['EXTENSION']->key => $_smarty_tpl->tpl_vars['EXTENSION']->value){
$_smarty_tpl->tpl_vars['EXTENSION']->_loop = true;
?><?php if (!$_smarty_tpl->tpl_vars['EXTENSION']->value->isVtigerCompatible()||$_smarty_tpl->tpl_vars['EXTENSION']->value->get('inshop')!='1'){?><?php continue 1?><?php }?><div class="grid-container-div"><div class="thumbnail extension_container extensionWidgetContainer"><div class="contentHeader" style="margin-bottom: 10px;"><div class="col-sm-12 col-xs-12" style="margin-bottom: 5px;"><div style="margin-bottom: 5px;"><div class="extension_header"><div class="font-x-x-large boxSizingBorderBox"><?php echo vtranslate($_smarty_tpl->tpl_vars['EXTENSION']->value->get('label'),$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</div><input type="hidden" name="extensionName" value="<?php echo $_smarty_tpl->tpl_vars['EXTENSION']->value->get('name');?>
" /><input type="hidden" name="extensionUrl" value="<?php echo $_smarty_tpl->tpl_vars['EXTENSION']->value->get('downloadURL');?>
" /><input type="hidden" name="moduleAction" value="<?php if (($_smarty_tpl->tpl_vars['EXTENSION']->value->isAlreadyExists())){?><?php if ($_smarty_tpl->tpl_vars['EXTENSION']->value->isUpgradable()){?>Upgrade<?php }else{ ?>Installed<?php }?><?php }else{ ?>Install<?php }?>" /><input type="hidden" name="extensionId" value="<?php echo $_smarty_tpl->tpl_vars['EXTENSION']->value->get('id');?>
" /></div></div></div></div><?php if (null!=$_smarty_tpl->tpl_vars['EXTENSION']->value->get('thumbnailURL')){?><?php $_smarty_tpl->tpl_vars['imageSource'] = new Smarty_variable($_smarty_tpl->tpl_vars['EXTENSION']->value->get('thumbnailURL'), null, 0);?><img src="<?php echo $_smarty_tpl->tpl_vars['imageSource']->value;?>
" class="thumbnailImage"/><?php }?><div class="caption extensionDescription" ><div class="font-x-x-large boxSizingBorderBox"><?php if (''!=$_smarty_tpl->tpl_vars['EXTENSION']->value->get('description')){?><?php echo $_smarty_tpl->tpl_vars['EXTENSION']->value->get('description');?>
<?php }?></div><br><div class="row"><div class="col-md-12" style="text-align: right"><span><?php if ($_smarty_tpl->tpl_vars['EXTENSION']->value->isExtensionTrialReady()){?><button class="m0550 btn btn-warning trialButton" data-trial="<?php echo $_smarty_tpl->tpl_vars['EXTENSION']->value->get('id');?>
"><?php echo vtranslate('LBL_TRIAL',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</button><?php }?><?php if ('Free'!=$_smarty_tpl->tpl_vars['EXTENSION']->value->get('price')||0!=$_smarty_tpl->tpl_vars['EXTENSION']->value->get('price')){?><button class="m0550 btn btn-success buyButton" data-url="<?php echo $_smarty_tpl->tpl_vars['SHOP_LINK']->value;?>
?addidtob=<?php echo $_smarty_tpl->tpl_vars['EXTENSION']->value->get('bid');?>
" data-trial=false><?php echo vtranslate('LBL_BUY',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
<?php echo $_smarty_tpl->tpl_vars['EXTENSION']->value->get('currency_symbol');?>
<?php echo $_smarty_tpl->tpl_vars['EXTENSION']->value->get('price');?>
</button><?php }?><?php if (''!=$_smarty_tpl->tpl_vars['EXTENSION']->value->get('website')){?><button class="m0550 btn installExtension addButton" style="margin-right:5px;" data-url="<?php echo $_smarty_tpl->tpl_vars['EXTENSION']->value->get('website');?>
"><?php echo vtranslate('LBL_MORE_DETAILS',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</button><?php }?></span></div></div></div></div></div><?php } ?></div></div></div></div><?php }} ?>

View File

@@ -0,0 +1,112 @@
<?php /* Smarty version Smarty-3.1.7, created on 2025-12-01 14:36:18
compiled from "/var/www/fastuser/data/www/crm.clientright.ru/includes/runtime/../../layouts/v7/modules/Settings/ITS4YouInstaller/rows/Package.tpl" */ ?>
<?php /*%%SmartyHeaderCode:741769699692d7db2c21cf7-65812815%%*/if(!defined('SMARTY_DIR')) exit('no direct access allowed');
$_valid = $_smarty_tpl->decodeProperties(array (
'file_dependency' =>
array (
'7bcabbb756995e6b115346c946cf88844ea3fcfd' =>
array (
0 => '/var/www/fastuser/data/www/crm.clientright.ru/includes/runtime/../../layouts/v7/modules/Settings/ITS4YouInstaller/rows/Package.tpl',
1 => 1715158481,
2 => 'file',
),
),
'nocache_hash' => '741769699692d7db2c21cf7-65812815',
'function' =>
array (
),
'variables' =>
array (
'EXTENSION' => 0,
'MODULE_MODEL' => 0,
'MODULE_NAME' => 0,
'QUALIFIED_MODULE' => 0,
'IS_AUTH' => 0,
'SETTINGS_LINKS' => 0,
'SETTINGS_LINK' => 0,
),
'has_nocache_code' => false,
'version' => 'Smarty-3.1.7',
'unifunc' => 'content_692d7db2c32f6',
),false); /*/%%SmartyHeaderCode%%*/?>
<?php if ($_valid && !is_callable('content_692d7db2c32f6')) {function content_692d7db2c32f6($_smarty_tpl) {?>
<?php $_smarty_tpl->tpl_vars['MODULE_MODEL'] = new Smarty_variable($_smarty_tpl->tpl_vars['EXTENSION']->value->get('moduleModel'), null, 0);?>
<?php $_smarty_tpl->tpl_vars['MODULE_NAME'] = new Smarty_variable($_smarty_tpl->tpl_vars['EXTENSION']->value->get('name'), null, 0);?>
<tr>
<td>
<a <?php if ($_smarty_tpl->tpl_vars['MODULE_MODEL']->value&&$_smarty_tpl->tpl_vars['MODULE_MODEL']->value->isActive()){?>href="<?php echo $_smarty_tpl->tpl_vars['MODULE_MODEL']->value->getDefaultUrl();?>
" target="_blank" <?php }else{ ?> href="#<?php echo $_smarty_tpl->tpl_vars['MODULE_NAME']->value;?>
" <?php }?>><?php echo vtranslate($_smarty_tpl->tpl_vars['EXTENSION']->value->get('label'),$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</a>
</td>
<td class="validateVersion"><?php echo $_smarty_tpl->tpl_vars['EXTENSION']->value->getVersion();?>
</td>
<td class="updateTime" title="<?php echo $_smarty_tpl->tpl_vars['EXTENSION']->value->getUpdateTimeRaw();?>
"><?php echo $_smarty_tpl->tpl_vars['EXTENSION']->value->getUpdateTime();?>
</td>
<td><?php echo $_smarty_tpl->tpl_vars['EXTENSION']->value->get('pkgVersion');?>
</td>
<td>
<span class="extension_container">
<?php if ($_smarty_tpl->tpl_vars['EXTENSION']->value->isVtigerCompatible()){?>
<input type="hidden" name="extensionName" value="<?php echo $_smarty_tpl->tpl_vars['EXTENSION']->value->get('name');?>
"/>
<input type="hidden" name="extensionUrl" value="<?php echo $_smarty_tpl->tpl_vars['EXTENSION']->value->get('downloadURL');?>
"/>
<input type="hidden" name="extensionId" value="<?php echo $_smarty_tpl->tpl_vars['EXTENSION']->value->get('id');?>
"/>
<input type="hidden" name="extensionType" value="Package"/>
<input type="hidden" name="moduleMode" value="showChangelog"/>
<?php if (!$_smarty_tpl->tpl_vars['EXTENSION']->value->isAlreadyExists()){?>
<input type="hidden" name="moduleAction" value="Install"/>
<button class="showChangeLog btn btn-primary <?php if ($_smarty_tpl->tpl_vars['IS_AUTH']->value){?>authenticated <?php }else{ ?> loginRequired<?php }?>">
<?php echo vtranslate('LBL_INSTALL',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</button>
<?php }elseif($_smarty_tpl->tpl_vars['EXTENSION']->value->isUpgradableMulti()){?>
<input type="hidden" name="moduleAction" value="Upgrade"/>
<input type="hidden" name="moduleMessage" value="<?php echo $_smarty_tpl->tpl_vars['EXTENSION']->value->getUpdateMessage();?>
"/>
<button class="showChangeLog isUpdateBtn btn btn-success margin0px <?php if ($_smarty_tpl->tpl_vars['IS_AUTH']->value){?>authenticated <?php }else{ ?> loginRequired<?php }?>">
<?php echo vtranslate('LBL_UPDATE',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</button>
<?php }?>
<?php }?>
</span>
<?php if ($_smarty_tpl->tpl_vars['MODULE_MODEL']->value){?>
<?php $_smarty_tpl->tpl_vars['SETTINGS_LINKS'] = new Smarty_variable($_smarty_tpl->tpl_vars['MODULE_MODEL']->value->getSettingLinks(), null, 0);?>
<?php if ((count($_smarty_tpl->tpl_vars['SETTINGS_LINKS']->value)>0)){?>
<span class="btn-group pull-right <?php if (!$_smarty_tpl->tpl_vars['MODULE_MODEL']->value->isActive()){?>hide<?php }?>">
<button class="btn btn-default btn dropdown-toggle unpin hiden " data-toggle="dropdown">
<?php echo vtranslate('LBL_SETTINGS',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
&nbsp;<i class="caret"></i>
</button>
<ul class="dropdown-menu pull-right dropdownfields">
<?php $_smarty_tpl->tpl_vars['SETTINGS_LINK'] = new Smarty_Variable; $_smarty_tpl->tpl_vars['SETTINGS_LINK']->_loop = false;
$_from = $_smarty_tpl->tpl_vars['SETTINGS_LINKS']->value; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array');}
foreach ($_from as $_smarty_tpl->tpl_vars['SETTINGS_LINK']->key => $_smarty_tpl->tpl_vars['SETTINGS_LINK']->value){
$_smarty_tpl->tpl_vars['SETTINGS_LINK']->_loop = true;
?>
<li>
<a target="_blank" <?php if (stripos($_smarty_tpl->tpl_vars['SETTINGS_LINK']->value['linkurl'],'javascript:')===0){?>onclick='<?php echo substr($_smarty_tpl->tpl_vars['SETTINGS_LINK']->value['linkurl'],strlen("javascript:"));?>
'<?php }else{ ?>href='<?php echo $_smarty_tpl->tpl_vars['SETTINGS_LINK']->value['linkurl'];?>
'<?php }?>>
<?php echo vtranslate($_smarty_tpl->tpl_vars['SETTINGS_LINK']->value['linklabel'],$_smarty_tpl->tpl_vars['MODULE_NAME']->value,vtranslate("SINGLE_".($_smarty_tpl->tpl_vars['MODULE_NAME']->value),$_smarty_tpl->tpl_vars['MODULE_NAME']->value));?>
</a>
</li>
<?php } ?>
</ul>
</span>
<?php }?>
<?php }?>
<span class="pull-right">
<?php if ($_smarty_tpl->tpl_vars['EXTENSION']->value->get('website')!=''){?>
<button class="btn installExtension addButton" style="margin-right:5px;" data-url="<?php echo $_smarty_tpl->tpl_vars['EXTENSION']->value->get('website');?>
"><?php echo vtranslate('LBL_MORE_DETAILS',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</button>
<?php }?>
</span>
</td>
</tr><?php }} ?>

View File

@@ -0,0 +1,72 @@
<?php /* Smarty version Smarty-3.1.7, created on 2025-12-01 14:36:19
compiled from "/var/www/fastuser/data/www/crm.clientright.ru/includes/runtime/../../layouts/v7/modules/Settings/ITS4YouInstaller/rows/Language.tpl" */ ?>
<?php /*%%SmartyHeaderCode:1066466725692d7db34461f4-34181356%%*/if(!defined('SMARTY_DIR')) exit('no direct access allowed');
$_valid = $_smarty_tpl->decodeProperties(array (
'file_dependency' =>
array (
'932b8a57cc06d05687d59288f8f2987115ebac0a' =>
array (
0 => '/var/www/fastuser/data/www/crm.clientright.ru/includes/runtime/../../layouts/v7/modules/Settings/ITS4YouInstaller/rows/Language.tpl',
1 => 1715158481,
2 => 'file',
),
),
'nocache_hash' => '1066466725692d7db34461f4-34181356',
'function' =>
array (
),
'variables' =>
array (
'LANGUAGE' => 0,
'QUALIFIED_MODULE' => 0,
'LANG_KEY' => 0,
'ALL_LANGUAGES' => 0,
'EXTENSION' => 0,
'IS_AUTH' => 0,
),
'has_nocache_code' => false,
'version' => 'Smarty-3.1.7',
'unifunc' => 'content_692d7db34505c',
),false); /*/%%SmartyHeaderCode%%*/?>
<?php if ($_valid && !is_callable('content_692d7db34505c')) {function content_692d7db34505c($_smarty_tpl) {?>
<?php if ($_smarty_tpl->tpl_vars['LANGUAGE']->value->isVtigerCompatible()&&!$_smarty_tpl->tpl_vars['LANGUAGE']->value->isAlreadyExists()&&($_smarty_tpl->tpl_vars['LANGUAGE']->value->get('price')=='Free'||$_smarty_tpl->tpl_vars['LANGUAGE']->value->get('price')==0||$_smarty_tpl->tpl_vars['LANGUAGE']->value->get('available')==1)){?>
<tr class="" data-cfmid="1">
<td style="border-left:none;border-right:none;"><?php echo vtranslate($_smarty_tpl->tpl_vars['LANGUAGE']->value->get('label'),$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</td>
<td colspan="2" style="border-left:none;border-right:none;"><?php echo vtranslate($_smarty_tpl->tpl_vars['LANGUAGE']->value->get('description'),$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</td>
<td style="border-left:none;border-right:none;">
<span class="extension_container">
<input type="hidden" name="extensionName" value="<?php echo $_smarty_tpl->tpl_vars['LANGUAGE']->value->get('name');?>
"/>
<input type="hidden" name="extensionUrl" value="<?php echo $_smarty_tpl->tpl_vars['LANGUAGE']->value->get('downloadURL');?>
"/>
<input type="hidden" name="extensionId" value="<?php echo $_smarty_tpl->tpl_vars['LANGUAGE']->value->get('id');?>
"/>
<input type="hidden" name="moduleMode" value="oneClickInstall"/>
<span class="pull-left">
<?php if ($_smarty_tpl->tpl_vars['LANGUAGE']->value->get('website')!=''){?>
<button class="btn installExtension addButton" style="margin-right:5px;" data-url="<?php echo $_smarty_tpl->tpl_vars['LANGUAGE']->value->get('website');?>
"><?php echo vtranslate('LBL_MORE_DETAILS',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</button>
<?php }?>
<?php $_smarty_tpl->tpl_vars['LANG_KEY'] = new Smarty_variable($_smarty_tpl->tpl_vars['LANGUAGE']->value->get('name'), null, 0);?>
<?php if ($_smarty_tpl->tpl_vars['ALL_LANGUAGES']->value[$_smarty_tpl->tpl_vars['LANG_KEY']->value]!=''){?>
<?php if ($_smarty_tpl->tpl_vars['LANGUAGE']->value->isUpgradableLanguage()){?>
<input type="hidden" name="moduleAction" value="Update"/>
<input type="hidden" name="moduleMessage" value="<?php echo $_smarty_tpl->tpl_vars['EXTENSION']->value->getUpdateMessage();?>
"/>
<button class="oneClickInstall isUpdateBtn btn btn-success <?php if ($_smarty_tpl->tpl_vars['IS_AUTH']->value){?>authenticated <?php }else{ ?> loginRequired<?php }?>"><?php echo vtranslate('LBL_UPDATE',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</button>
<?php }?>
<?php }else{ ?>
<input type="hidden" name="moduleAction" value="Install"/>
<button class="oneClickInstall btn btn-primary <?php if ($_smarty_tpl->tpl_vars['IS_AUTH']->value){?>authenticated <?php }else{ ?> loginRequired<?php }?>"><?php echo vtranslate('LBL_INSTALL',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</button>
<?php }?>
</span>
</span>
</td>
</tr>
<?php }?><?php }} ?>

View File

@@ -0,0 +1,33 @@
<?php /* Smarty version Smarty-3.1.7, created on 2025-12-01 14:36:19
compiled from "/var/www/fastuser/data/www/crm.clientright.ru/includes/runtime/../../layouts/v7/modules/ITS4YouInstaller/Footer.tpl" */ ?>
<?php /*%%SmartyHeaderCode:1227403974692d7db34ea0c8-58741971%%*/if(!defined('SMARTY_DIR')) exit('no direct access allowed');
$_valid = $_smarty_tpl->decodeProperties(array (
'file_dependency' =>
array (
'9c5e9640e3931be8c48194db9b7adb210cfec3a1' =>
array (
0 => '/var/www/fastuser/data/www/crm.clientright.ru/includes/runtime/../../layouts/v7/modules/ITS4YouInstaller/Footer.tpl',
1 => 1715158481,
2 => 'file',
),
),
'nocache_hash' => '1227403974692d7db34ea0c8-58741971',
'function' =>
array (
),
'variables' =>
array (
'MODULE' => 0,
'QUALIFIED_MODULE' => 0,
),
'has_nocache_code' => false,
'version' => 'Smarty-3.1.7',
'unifunc' => 'content_692d7db34ecaa',
),false); /*/%%SmartyHeaderCode%%*/?>
<?php if ($_valid && !is_callable('content_692d7db34ecaa')) {function content_692d7db34ecaa($_smarty_tpl) {?>
<br><div class="small" style="color: rgb(153, 153, 153);text-align: center;"><?php echo vtranslate($_smarty_tpl->tpl_vars['MODULE']->value,$_smarty_tpl->tpl_vars['MODULE']->value);?>
<?php echo ITS4YouInstaller_Version_Helper::$version;?>
<?php echo vtranslate("COPYRIGHT",$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</div><?php echo $_smarty_tpl->getSubTemplate (vtemplate_path("Footer.tpl",'Vtiger'), $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, null, null, array(), 0);?>
<?php }} ?>

View File

@@ -0,0 +1,40 @@
<?php /* Smarty version Smarty-3.1.7, created on 2025-12-01 14:36:15
compiled from "/var/www/fastuser/data/www/crm.clientright.ru/includes/runtime/../../layouts/v7/modules/Settings/ITS4YouInstaller/ModuleHeader.tpl" */ ?>
<?php /*%%SmartyHeaderCode:1142951268692d7daf7327e8-89842811%%*/if(!defined('SMARTY_DIR')) exit('no direct access allowed');
$_valid = $_smarty_tpl->decodeProperties(array (
'file_dependency' =>
array (
'd6122821d12347e90db1f909ce8b741ebb02e65c' =>
array (
0 => '/var/www/fastuser/data/www/crm.clientright.ru/includes/runtime/../../layouts/v7/modules/Settings/ITS4YouInstaller/ModuleHeader.tpl',
1 => 1715158481,
2 => 'file',
),
),
'nocache_hash' => '1142951268692d7daf7327e8-89842811',
'function' =>
array (
),
'variables' =>
array (
'MODULE' => 0,
'REQUIREMENTS' => 0,
'MODULE_MODEL' => 0,
'PASSWORD_STATUS' => 0,
'QUALIFIED_MODULE' => 0,
'USER_NAME' => 0,
),
'has_nocache_code' => false,
'version' => 'Smarty-3.1.7',
'unifunc' => 'content_692d7daf73a4f',
),false); /*/%%SmartyHeaderCode%%*/?>
<?php if ($_valid && !is_callable('content_692d7daf73a4f')) {function content_692d7daf73a4f($_smarty_tpl) {?>
<div class="col-sm-12 col-xs-12 module-action-bar clearfix coloredBorderTop"><div class="module-action-content clearfix"><div class="col-lg-4 col-md-4"><h4 title="<?php echo strtoupper(vtranslate($_smarty_tpl->tpl_vars['MODULE']->value,$_smarty_tpl->tpl_vars['MODULE']->value));?>
" class="module-title pull-left text-uppercase"> <?php echo strtoupper(vtranslate($_smarty_tpl->tpl_vars['MODULE']->value,$_smarty_tpl->tpl_vars['MODULE']->value));?>
</h4></div><div class="col-lg-8 col-md-8"><div class="navbar-right"><ul class="nav navbar-nav"><li><?php if ($_smarty_tpl->tpl_vars['REQUIREMENTS']->value){?><a href="<?php echo $_smarty_tpl->tpl_vars['MODULE_MODEL']->value->getRequirementsUrl();?>
"><div class="requirements-alert btn btn-<?php echo $_smarty_tpl->tpl_vars['REQUIREMENTS']->value->getButtonType();?>
"><?php echo vtranslate('LBL_SYSTEM_REQUIREMENTS',$_smarty_tpl->tpl_vars['MODULE']->value);?>
</div></a>&nbsp;<?php if (!($_smarty_tpl->tpl_vars['PASSWORD_STATUS']->value)){?><a href="index.php?module=ITS4YouInstaller&parent=Settings&view=Login"><div class="btn btn-default"><div class="fa fa-sign-in" aria-hidden="true"></div>&nbsp;<?php echo vtranslate('LBL_LOGIN',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</div></a><?php }else{ ?><button class="btn btn-default module-buttons" type="button" style="text-transform:none"><?php echo $_smarty_tpl->tpl_vars['USER_NAME']->value;?>
</button>&nbsp;<button class="btn btn-danger" type="button" id="logoutInstaller"><span class="fa fa-power-off"></span>&nbsp;<?php echo vtranslate('LBL_LOGOUT',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</button><?php }?><?php }?></li></ul></div></div></div></div><?php }} ?>

View File

@@ -0,0 +1,34 @@
<?php /* Smarty version Smarty-3.1.7, created on 2025-12-01 14:36:18
compiled from "/var/www/fastuser/data/www/crm.clientright.ru/includes/runtime/../../layouts/v7/modules/Settings/ITS4YouInstaller/ExtensionModules.tpl" */ ?>
<?php /*%%SmartyHeaderCode:1675053873692d7db2bd44e0-71310479%%*/if(!defined('SMARTY_DIR')) exit('no direct access allowed');
$_valid = $_smarty_tpl->decodeProperties(array (
'file_dependency' =>
array (
'e9a6234e5493fa18cfea6a24c07420f0c3d84fbe' =>
array (
0 => '/var/www/fastuser/data/www/crm.clientright.ru/includes/runtime/../../layouts/v7/modules/Settings/ITS4YouInstaller/ExtensionModules.tpl',
1 => 1715158481,
2 => 'file',
),
),
'nocache_hash' => '1675053873692d7db2bd44e0-71310479',
'function' =>
array (
),
'variables' =>
array (
'REGISTRATION_STATUS' => 0,
'PASSWORD_STATUS' => 0,
'QUALIFIED_MODULE' => 0,
'IS_HOSTING_LICENSE' => 0,
),
'has_nocache_code' => false,
'version' => 'Smarty-3.1.7',
'unifunc' => 'content_692d7db2bd923',
),false); /*/%%SmartyHeaderCode%%*/?>
<?php if ($_valid && !is_callable('content_692d7db2bd923')) {function content_692d7db2bd923($_smarty_tpl) {?>
<?php $_smarty_tpl->tpl_vars['IS_AUTH'] = new Smarty_variable(($_smarty_tpl->tpl_vars['REGISTRATION_STATUS']->value&&$_smarty_tpl->tpl_vars['PASSWORD_STATUS']->value), null, 0);?><div class="col-lg-12"><br><ul class="nav nav-tabs layoutTabs massEditTabs"><li class="tab-item taxesTab active"><a data-toggle="tab" href="#installedModules"><strong><?php echo vtranslate('LBL_INSTALLED_AND_AVAILABLE_MODULES',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</strong></a></li><?php if (!$_smarty_tpl->tpl_vars['IS_HOSTING_LICENSE']->value){?><li class="tab-item chargesTab"><a data-toggle="tab" href="#modulesShop"><strong><?php echo vtranslate('LBL_MODULES_SHOP',$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value);?>
</strong></a></li><?php }?></ul><br></div><div class="tab-content layoutContent overflowVisible" style="height:100%"><?php echo $_smarty_tpl->getSubTemplate (vtemplate_path("InstalledModules.tpl",$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value), $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, null, null, array(), 0);?>
<?php if (!$_smarty_tpl->tpl_vars['IS_HOSTING_LICENSE']->value){?><?php echo $_smarty_tpl->getSubTemplate (vtemplate_path("ModulesShop.tpl",$_smarty_tpl->tpl_vars['QUALIFIED_MODULE']->value), $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, null, null, array(), 0);?>
<?php }?></div><?php }} ?>

View File

@@ -0,0 +1,34 @@
<?php /* Smarty version Smarty-3.1.7, created on 2025-12-01 14:36:15
compiled from "/var/www/fastuser/data/www/crm.clientright.ru/includes/runtime/../../layouts/v7/modules/Settings/ITS4YouInstaller/partials/SidebarHeader.tpl" */ ?>
<?php /*%%SmartyHeaderCode:1416440694692d7daf71c303-29829196%%*/if(!defined('SMARTY_DIR')) exit('no direct access allowed');
$_valid = $_smarty_tpl->decodeProperties(array (
'file_dependency' =>
array (
'ead00ec4d912cd21b4cc34cbb51b3d17303a2a15' =>
array (
0 => '/var/www/fastuser/data/www/crm.clientright.ru/includes/runtime/../../layouts/v7/modules/Settings/ITS4YouInstaller/partials/SidebarHeader.tpl',
1 => 1715158481,
2 => 'file',
),
),
'nocache_hash' => '1416440694692d7daf71c303-29829196',
'function' =>
array (
),
'has_nocache_code' => false,
'version' => 'Smarty-3.1.7',
'unifunc' => 'content_692d7daf71fc2',
),false); /*/%%SmartyHeaderCode%%*/?>
<?php if ($_valid && !is_callable('content_692d7daf71fc2')) {function content_692d7daf71fc2($_smarty_tpl) {?>
<?php $_smarty_tpl->tpl_vars['APP_IMAGE_MAP'] = new Smarty_variable(array('MARKETING'=>'fa-users','SALES'=>'fa-dot-circle-o','SUPPORT'=>'fa-life-ring','INVENTORY'=>'vicon-inventory','PROJECT'=>'fa-briefcase','TOOLS'=>'fa-wrench'), null, 0);?>
<div class="col-sm-12 col-xs-12 app-indicator-icon-container extensionstore app-MARKETING">
<div class="row" title="<?php echo vtranslate('LBL_EXTENSION_STORE','Settings:$QUALIFIED_MODULE');?>
">
<span class="app-indicator-icon cursorPointer fa fa-shopping-cart"></span>
</div>
</div>
<?php echo $_smarty_tpl->getSubTemplate ("modules/Vtiger/partials/SidebarAppMenu.tpl", $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, null, null, array(), 0);?>
<?php }} ?>

View File

@@ -0,0 +1,123 @@
<?php /* Smarty version Smarty-3.1.7, created on 2025-12-01 11:07:28
compiled from "/var/www/fastuser/data/www/crm.clientright.ru/includes/runtime/../../layouts/v7/modules/Vtiger/ComposeEmailForm.tpl" */ ?>
<?php /*%%SmartyHeaderCode:1677924967692d4cc048bb13-61147121%%*/if(!defined('SMARTY_DIR')) exit('no direct access allowed');
$_valid = $_smarty_tpl->decodeProperties(array (
'file_dependency' =>
array (
'fb6115f18c6b30e03a23a6d3b1181ded88013eb6' =>
array (
0 => '/var/www/fastuser/data/www/crm.clientright.ru/includes/runtime/../../layouts/v7/modules/Vtiger/ComposeEmailForm.tpl',
1 => 1711810494,
2 => 'file',
),
),
'nocache_hash' => '1677924967692d4cc048bb13-61147121',
'function' =>
array (
),
'variables' =>
array (
'MODULE' => 0,
'SELECTED_IDS' => 0,
'EXCLUDED_IDS' => 0,
'VIEWNAME' => 0,
'TOMAIL_INFO' => 0,
'TO' => 0,
'TOMAIL_NAMES_LIST' => 0,
'MAX_UPLOAD_SIZE' => 0,
'EMAIL_MODE' => 0,
'SOURCE_MODULE' => 0,
'PARENT_EMAIL_ID' => 0,
'PARENT_RECORD' => 0,
'RECORDID' => 0,
'SEARCH_KEY' => 0,
'OPERATOR' => 0,
'ALPHABET_VALUE' => 0,
'SEARCH_PARAMS' => 0,
'TO_EMAILS' => 0,
'RELATED_MODULES' => 0,
'MODULE_NAME' => 0,
'FIELD_MODULE' => 0,
'CC' => 0,
'BCC' => 0,
'SUBJECT' => 0,
'FILE_ATTACHED' => 0,
'DOCUMENTS_URL' => 0,
'ATTACHMENTS' => 0,
'ATTACHMENT' => 0,
'FILE_TYPE' => 0,
'DOCUMENT_ID' => 0,
'DESCRIPTION' => 0,
'RELATED_LOAD' => 0,
),
'has_nocache_code' => false,
'version' => 'Smarty-3.1.7',
'unifunc' => 'content_692d4cc04e2c1',
),false); /*/%%SmartyHeaderCode%%*/?>
<?php if ($_valid && !is_callable('content_692d4cc04e2c1')) {function content_692d4cc04e2c1($_smarty_tpl) {?>
<div class="SendEmailFormStep2 modal-dialog modal-lg" id="composeEmailContainer"><div class="modal-content"><form class="form-horizontal" id="massEmailForm" method="post" action="index.php" enctype="multipart/form-data" name="massEmailForm"><?php ob_start();?><?php echo vtranslate('LBL_COMPOSE_EMAIL',$_smarty_tpl->tpl_vars['MODULE']->value);?>
<?php $_tmp1=ob_get_clean();?><?php echo $_smarty_tpl->getSubTemplate (vtemplate_path("ModalHeader.tpl",$_smarty_tpl->tpl_vars['MODULE']->value), $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, null, null, array('TITLE'=>$_tmp1), 0);?>
<div class="modal-body"><input type="hidden" name="selected_ids" value='<?php echo ZEND_JSON::encode($_smarty_tpl->tpl_vars['SELECTED_IDS']->value);?>
' /><input type="hidden" name="excluded_ids" value='<?php echo ZEND_JSON::encode($_smarty_tpl->tpl_vars['EXCLUDED_IDS']->value);?>
' /><input type="hidden" name="viewname" value="<?php echo $_smarty_tpl->tpl_vars['VIEWNAME']->value;?>
" /><input type="hidden" name="module" value="<?php echo $_smarty_tpl->tpl_vars['MODULE']->value;?>
"/><input type="hidden" name="mode" value="massSave" /><input type="hidden" name="toemailinfo" value='<?php echo ZEND_JSON::encode($_smarty_tpl->tpl_vars['TOMAIL_INFO']->value);?>
' /><input type="hidden" name="view" value="MassSaveAjax" /><input type="hidden" name="to" value='<?php echo ZEND_JSON::encode($_smarty_tpl->tpl_vars['TO']->value);?>
' /><input type="hidden" name="toMailNamesList" value='<?php echo $_smarty_tpl->tpl_vars['TOMAIL_NAMES_LIST']->value;?>
'/><input type="hidden" id="flag" name="flag" value="" /><input type="hidden" id="maxUploadSize" value="<?php echo $_smarty_tpl->tpl_vars['MAX_UPLOAD_SIZE']->value;?>
" /><input type="hidden" id="documentIds" name="documentids" value="" /><input type="hidden" name="emailMode" value="<?php echo $_smarty_tpl->tpl_vars['EMAIL_MODE']->value;?>
" /><input type="hidden" name="source_module" value="<?php echo $_smarty_tpl->tpl_vars['SOURCE_MODULE']->value;?>
" /><?php if (!empty($_smarty_tpl->tpl_vars['PARENT_EMAIL_ID']->value)){?><input type="hidden" name="parent_id" value="<?php echo $_smarty_tpl->tpl_vars['PARENT_EMAIL_ID']->value;?>
" /><input type="hidden" name="parent_record_id" value="<?php echo $_smarty_tpl->tpl_vars['PARENT_RECORD']->value;?>
" /><?php }?><?php if (!empty($_smarty_tpl->tpl_vars['RECORDID']->value)){?><input type="hidden" name="record" value="<?php echo $_smarty_tpl->tpl_vars['RECORDID']->value;?>
" /><?php }?><input type="hidden" name="search_key" value= "<?php echo $_smarty_tpl->tpl_vars['SEARCH_KEY']->value;?>
" /><input type="hidden" name="operator" value="<?php echo $_smarty_tpl->tpl_vars['OPERATOR']->value;?>
" /><input type="hidden" name="search_value" value="<?php echo $_smarty_tpl->tpl_vars['ALPHABET_VALUE']->value;?>
" /><input type="hidden" name="search_params" value='<?php echo Vtiger_Util_Helper::toSafeHTML(ZEND_JSON::encode($_smarty_tpl->tpl_vars['SEARCH_PARAMS']->value));?>
' /><div class="row toEmailField"><div class="col-lg-12"><div class="col-lg-2"><span class="pull-right"><?php echo vtranslate('LBL_TO',$_smarty_tpl->tpl_vars['MODULE']->value);?>
&nbsp;<span class="redColor">*</span></span></div><div class="col-lg-6"><?php if (!empty($_smarty_tpl->tpl_vars['TO']->value)){?><?php $_smarty_tpl->tpl_vars['TO_EMAILS'] = new Smarty_variable(implode(",",$_smarty_tpl->tpl_vars['TO']->value), null, 0);?><?php }?><input id="emailField" style="width:100%" name="toEmail" type="text" class="autoComplete sourceField select2" data-rule-required="true" data-rule-multiEmails="true" value="<?php echo $_smarty_tpl->tpl_vars['TO_EMAILS']->value;?>
" placeholder="<?php echo vtranslate('LBL_TYPE_AND_SEARCH',$_smarty_tpl->tpl_vars['MODULE']->value);?>
"></div><div class="col-lg-4 input-group"><select style="width: 140px;" class="select2 emailModulesList pull-right"><?php $_smarty_tpl->tpl_vars['MODULE_NAME'] = new Smarty_Variable; $_smarty_tpl->tpl_vars['MODULE_NAME']->_loop = false;
$_from = $_smarty_tpl->tpl_vars['RELATED_MODULES']->value; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array');}
foreach ($_from as $_smarty_tpl->tpl_vars['MODULE_NAME']->key => $_smarty_tpl->tpl_vars['MODULE_NAME']->value){
$_smarty_tpl->tpl_vars['MODULE_NAME']->_loop = true;
?><option value="<?php echo $_smarty_tpl->tpl_vars['MODULE_NAME']->value;?>
" <?php if ($_smarty_tpl->tpl_vars['MODULE_NAME']->value==$_smarty_tpl->tpl_vars['FIELD_MODULE']->value){?> selected <?php }?>><?php echo vtranslate($_smarty_tpl->tpl_vars['MODULE_NAME']->value,$_smarty_tpl->tpl_vars['MODULE_NAME']->value);?>
</option><?php } ?></select><a href="#" class="clearReferenceSelection cursorPointer" name="clearToEmailField"> X </a><span class="input-group-addon"><span class="selectEmail cursorPointer"><i class="fa fa-search" title="<?php echo vtranslate('LBL_SELECT',$_smarty_tpl->tpl_vars['MODULE']->value);?>
"></i></span></span></div></div></div><div class="row <?php if (empty($_smarty_tpl->tpl_vars['CC']->value)){?> hide <?php }?> ccContainer"><div class="col-lg-12"><div class="col-lg-2"><span class="pull-right"><?php echo vtranslate('LBL_CC',$_smarty_tpl->tpl_vars['MODULE']->value);?>
</span></div><div class="col-lg-6"><input type="text" name="cc" data-rule-multiEmails="true" value="<?php if (!empty($_smarty_tpl->tpl_vars['CC']->value)){?><?php echo $_smarty_tpl->tpl_vars['CC']->value;?>
<?php }?>"/></div><div class="col-lg-4"></div></div></div><div class="row <?php if (empty($_smarty_tpl->tpl_vars['BCC']->value)){?> hide <?php }?> bccContainer"><div class="col-lg-12"><div class="col-lg-2"><span class="pull-right"><?php echo vtranslate('LBL_BCC',$_smarty_tpl->tpl_vars['MODULE']->value);?>
</span></div><div class="col-lg-6"><input type="text" name="bcc" data-rule-multiEmails="true" value="<?php if (!empty($_smarty_tpl->tpl_vars['BCC']->value)){?><?php echo $_smarty_tpl->tpl_vars['BCC']->value;?>
<?php }?>"/></div><div class="col-lg-4"></div></div></div><div class="row <?php if ((!empty($_smarty_tpl->tpl_vars['CC']->value))&&(!empty($_smarty_tpl->tpl_vars['BCC']->value))){?> hide <?php }?> "><div class="col-lg-12"><div class="col-lg-2"></div><div class="col-lg-6"><a href="#" class="cursorPointer <?php if ((!empty($_smarty_tpl->tpl_vars['CC']->value))){?>hide<?php }?>" id="ccLink"><?php echo vtranslate('LBL_ADD_CC',$_smarty_tpl->tpl_vars['MODULE']->value);?>
</a>&nbsp;&nbsp;<a href="#" class="cursorPointer <?php if ((!empty($_smarty_tpl->tpl_vars['BCC']->value))){?>hide<?php }?>" id="bccLink"><?php echo vtranslate('LBL_ADD_BCC',$_smarty_tpl->tpl_vars['MODULE']->value);?>
</a></div><div class="col-lg-4"></div></div></div><div class="row subjectField"><div class="col-lg-12"><div class="col-lg-2"><span class="pull-right"><?php echo vtranslate('LBL_SUBJECT',$_smarty_tpl->tpl_vars['MODULE']->value);?>
&nbsp;<span class="redColor">*</span></span></div><div class="col-lg-6"><input type="text" name="subject" value="<?php echo $_smarty_tpl->tpl_vars['SUBJECT']->value;?>
" data-rule-required="true" id="subject" spellcheck="true" class="inputElement"/></div><div class="col-lg-4"></div></div></div><div class="row attachment"><div class="col-lg-12"><div class="col-lg-2"><span class="pull-right"><?php echo vtranslate('LBL_ATTACHMENT',$_smarty_tpl->tpl_vars['MODULE']->value);?>
</span></div><div class="col-lg-9"><div class="row"><div class="col-lg-4 browse"><input type="file" <?php if ($_smarty_tpl->tpl_vars['FILE_ATTACHED']->value){?>class="removeNoFileChosen"<?php }?> id="multiFile" name="file[]"/>&nbsp;</div><div class="col-lg-4 brownseInCrm"><button type="button" class="btn btn-small btn-default" id="browseCrm" data-url="<?php echo $_smarty_tpl->tpl_vars['DOCUMENTS_URL']->value;?>
" title="<?php echo vtranslate('LBL_BROWSE_CRM',$_smarty_tpl->tpl_vars['MODULE']->value);?>
"><?php echo vtranslate('LBL_BROWSE_CRM',$_smarty_tpl->tpl_vars['MODULE']->value);?>
</button></div><div class="col-lg-4 insertTemplate"><button id="selectEmailTemplate" class="btn btn-success pull-right" data-url="module=EmailTemplates&view=Popup"><?php echo vtranslate('LBL_SELECT_EMAIL_TEMPLATE',$_smarty_tpl->tpl_vars['MODULE']->value);?>
</button></div></div><div id="attachments"><?php $_smarty_tpl->tpl_vars['ATTACHMENT'] = new Smarty_Variable; $_smarty_tpl->tpl_vars['ATTACHMENT']->_loop = false;
$_from = $_smarty_tpl->tpl_vars['ATTACHMENTS']->value; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array');}
foreach ($_from as $_smarty_tpl->tpl_vars['ATTACHMENT']->key => $_smarty_tpl->tpl_vars['ATTACHMENT']->value){
$_smarty_tpl->tpl_vars['ATTACHMENT']->_loop = true;
?><?php if ((array_key_exists('docid',$_smarty_tpl->tpl_vars['ATTACHMENT']->value))){?><?php $_smarty_tpl->tpl_vars['DOCUMENT_ID'] = new Smarty_variable($_smarty_tpl->tpl_vars['ATTACHMENT']->value['docid'], null, 0);?><?php $_smarty_tpl->tpl_vars['FILE_TYPE'] = new Smarty_variable("document", null, 0);?><?php }else{ ?><?php $_smarty_tpl->tpl_vars['FILE_TYPE'] = new Smarty_variable("file", null, 0);?><?php }?><div class="MultiFile-label customAttachment" data-file-id="<?php echo $_smarty_tpl->tpl_vars['ATTACHMENT']->value['fileid'];?>
" data-file-type="<?php echo $_smarty_tpl->tpl_vars['FILE_TYPE']->value;?>
" data-file-size="<?php echo $_smarty_tpl->tpl_vars['ATTACHMENT']->value['size'];?>
" <?php if ($_smarty_tpl->tpl_vars['FILE_TYPE']->value=="document"){?> data-document-id="<?php echo $_smarty_tpl->tpl_vars['DOCUMENT_ID']->value;?>
"<?php }?>><?php if ($_smarty_tpl->tpl_vars['ATTACHMENT']->value['nondeletable']!=true){?><a name="removeAttachment" class="cursorPointer">x </a><?php }?><span><?php echo $_smarty_tpl->tpl_vars['ATTACHMENT']->value['attachment'];?>
</span></div><?php } ?></div></div></div></div><div class="row"><div class="col-lg-12"><div class="col-lg-2"><span class="pull-right"><?php echo vtranslate('LBL_INCLUDE_SIGNATURE',$_smarty_tpl->tpl_vars['MODULE']->value);?>
</span></div><div class="item col-lg-9"><input class="" type="checkbox" name="signature" value="Yes" checked="checked" id="signature"></div></div></div><div class="container-fluid hide" id='emailTemplateWarning'><div class="alert alert-warning fade in"><a href="#" class="close" data-dismiss="alert">&times;</a><p><?php echo vtranslate('LBL_EMAILTEMPLATE_WARNING_CONTENT',$_smarty_tpl->tpl_vars['MODULE']->value);?>
</p></div></div><div class="row templateContent"><div class="col-lg-12"><textarea style="width:390px;height:200px;" id="description" name="description"><?php echo $_smarty_tpl->tpl_vars['DESCRIPTION']->value;?>
</textarea></div></div><?php if ($_smarty_tpl->tpl_vars['RELATED_LOAD']->value==true){?><input type="hidden" name="related_load" value=<?php echo $_smarty_tpl->tpl_vars['RELATED_LOAD']->value;?>
/><?php }?><input type="hidden" name="attachments" value='<?php echo ZEND_JSON::encode($_smarty_tpl->tpl_vars['ATTACHMENTS']->value);?>
' /><div id="emailTemplateWarningContent" style="display: none;"><?php echo vtranslate('LBL_EMAILTEMPLATE_WARNING_CONTENT',$_smarty_tpl->tpl_vars['MODULE']->value);?>
</div></div><div class="modal-footer"><div class="pull-right cancelLinkContainer"><a href="#" class="cancelLink" type="reset" data-dismiss="modal"><?php echo vtranslate('LBL_CANCEL',$_smarty_tpl->tpl_vars['MODULE']->value);?>
</a></div><button id="sendEmail" name="sendemail" class="btn btn-success" title="<?php echo vtranslate("LBL_SEND_EMAIL",$_smarty_tpl->tpl_vars['MODULE']->value);?>
" type="submit"><strong><?php echo vtranslate("LBL_SEND_EMAIL",$_smarty_tpl->tpl_vars['MODULE']->value);?>
</strong></button><button id="saveDraft" name="savedraft" class="btn btn-default" title="<?php echo vtranslate('LBL_SAVE_AS_DRAFT',$_smarty_tpl->tpl_vars['MODULE']->value);?>
" type="submit"><strong><?php echo vtranslate('LBL_SAVE_AS_DRAFT',$_smarty_tpl->tpl_vars['MODULE']->value);?>
</strong></button></div></form></div></div>
<?php }} ?>

View File

@@ -44,7 +44,8 @@ class ClaimCreateRequest(BaseModel):
# Шаг 3: Данные для выплаты
payment_method: str = "sbp" # "sbp", "card", "bank_transfer"
bank_name: Optional[str] = None
bank_id: Optional[str] = None # ID банка из NSPK API (bankid)
bank_name: Optional[str] = None # Название банка для отображения
card_number: Optional[str] = None
account_number: Optional[str] = None

View File

@@ -432,3 +432,7 @@ return [
- `ticket_form/frontend/src/components/form/generateConfirmationFormHTML.ts` — шаблон формы заявления

View File

@@ -98,3 +98,7 @@ check_all_ready (FALSE) → (конец)

View File

@@ -31,3 +31,7 @@

View File

@@ -18,3 +18,7 @@

View File

@@ -20,3 +20,7 @@

View File

@@ -19,3 +19,7 @@

8927
ticket_form/frontend/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,11 +1,17 @@
import { useState } from 'react';
import { useState, useEffect } from 'react';
import { Form, Input, Button, Select, message, Space, Divider } from 'antd';
import { PhoneOutlined, SafetyOutlined, QrcodeOutlined, MailOutlined, CopyOutlined } from '@ant-design/icons';
const API_BASE_URL = import.meta.env.VITE_API_URL || 'http://localhost:8200';
const NSPK_BANKS_API = 'http://212.193.27.93/api/payouts/dictionaries/nspk-banks';
const { Option } = Select;
interface Bank {
bankid: string;
bankname: string;
}
interface Props {
formData: any;
updateFormData: (data: any) => void;
@@ -31,6 +37,53 @@ export default function Step3Payment({
const [verifyLoading, setVerifyLoading] = useState(false);
const [submitting, setSubmitting] = useState(false);
const [debugCode, setDebugCode] = useState<string | null>(formData.smsDebugCode ?? null);
const [banks, setBanks] = useState<Bank[]>([]);
const [banksLoading, setBanksLoading] = useState(false);
// Загрузка списка банков при монтировании компонента
useEffect(() => {
const loadBanks = async () => {
try {
setBanksLoading(true);
addDebugEvent?.('banks', 'pending', '📋 Загружаю список банков СБП...');
const response = await fetch(NSPK_BANKS_API);
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
const banksData: Bank[] = await response.json();
// Сортируем по названию для удобства
banksData.sort((a, b) => a.bankname.localeCompare(b.bankname, 'ru'));
setBanks(banksData);
addDebugEvent?.('banks', 'success', `✅ Загружено ${banksData.length} банков`, { count: banksData.length });
// Если есть сохранённый bankName, но нет bankId - пытаемся найти по названию
if (formData.bankName && !formData.bankId) {
const foundBank = banksData.find(b =>
b.bankname.toLowerCase() === formData.bankName.toLowerCase() ||
b.bankname.toLowerCase().includes(formData.bankName.toLowerCase())
);
if (foundBank) {
updateFormData({ bankId: foundBank.bankid });
form.setFieldsValue({ bankId: foundBank.bankid });
}
}
} catch (error: any) {
console.error('Ошибка загрузки банков:', error);
addDebugEvent?.('banks', 'error', `❌ Ошибка загрузки банков: ${error.message}`, { error: error.message });
message.error('Не удалось загрузить список банков. Попробуйте обновить страницу.');
} finally {
setBanksLoading(false);
}
};
loadBanks();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []); // Загружаем банки только при монтировании
const sendCode = async () => {
try {
@@ -136,11 +189,21 @@ export default function Step3Payment({
}
};
// Инициализация формы с bankId если есть
useEffect(() => {
if (formData.bankId) {
form.setFieldsValue({ bankId: formData.bankId });
}
}, [formData.bankId, form]);
return (
<Form
form={form}
layout="vertical"
initialValues={formData}
initialValues={{
...formData,
bankId: formData.bankId || formData.bankName, // Fallback на bankName для совместимости
}}
style={{ marginTop: 24 }}
>
{/* Скрытые технические поля */}
@@ -316,31 +379,37 @@ export default function Step3Payment({
<Form.Item
label="Выберите ваш банк"
name="bankName"
name="bankId"
rules={[{ required: true, message: 'Выберите банк для получения выплаты' }]}
>
<Select
placeholder="Выберите банк"
placeholder={banksLoading ? "Загрузка списка банков..." : "Выберите банк"}
size="large"
showSearch
loading={banksLoading}
notFoundContent={banksLoading ? "Загрузка..." : "Банк не найден"}
filterOption={(input: string, option: any) => {
const children = option?.children;
if (typeof children === 'string') {
return children.toLowerCase().includes(input.toLowerCase());
const label = option?.label || option?.children;
if (typeof label === 'string') {
return label.toLowerCase().includes(input.toLowerCase());
}
return false;
}}
onChange={(value) => {
const selectedBank = banks.find(b => b.bankid === value);
if (selectedBank) {
updateFormData({
bankId: selectedBank.bankid,
bankName: selectedBank.bankname
});
}
}}
>
<Option value="sberbank">🟢 Сбербанк</Option>
<Option value="tinkoff">🟡 Тинькофф</Option>
<Option value="vtb">🔵 ВТБ</Option>
<Option value="alfabank">🔴 Альфа-Банк</Option>
<Option value="raiffeisen">🟡 Райффайзенбанк</Option>
<Option value="gazprombank">🔵 Газпромбанк</Option>
<Option value="rosbank">🔴 Росбанк</Option>
<Option value="sovcombank">🟢 Совкомбанк</Option>
<Option value="otkritie">🔵 Открытие</Option>
<Option value="other">💳 Другой банк</Option>
{banks.map((bank) => (
<Option key={bank.bankid} value={bank.bankid} label={bank.bankname}>
{bank.bankname}
</Option>
))}
</Select>
</Form.Item>
@@ -387,7 +456,8 @@ export default function Step3Payment({
email: 'test@test.ru',
phone: '+79991234567',
paymentMethod: 'sbp',
bankName: 'sberbank',
bankId: banks.length > 0 ? banks[0].bankid : '100000000111', // Сбербанк по умолчанию
bankName: banks.length > 0 ? banks[0].bankname : 'Сбербанк',
};
updateFormData(devData);
message.success('DEV: Телефон автоматически подтверждён');
@@ -407,7 +477,8 @@ export default function Step3Payment({
email: 'test@test.ru',
phone: '+79991234567',
paymentMethod: 'sbp',
bankName: 'sberbank',
bankId: banks.length > 0 ? banks[0].bankid : '100000000111', // Сбербанк по умолчанию
bankName: banks.length > 0 ? banks[0].bankname : 'Сбербанк',
};
updateFormData(devData);
onSubmit();

View File

@@ -773,6 +773,14 @@ export function generateConfirmationFormHTML(data: any): string {
return '<textarea class="inline-field bind full-width" data-root="' + esc(root) + '" data-key="' + esc(key) + '" id="' + id + '">' + esc(value || '') + '</textarea>';
}
function createBankSelect(root, key, value) {
var id = 'field_' + root + '_' + key + '_' + Math.random().toString(36).slice(2);
var selectHtml = '<select class="inline-field bind bank-select" data-root="' + esc(root) + '" data-key="' + esc(key) + '" id="' + id + '">';
selectHtml += '<option value="">Загрузка списка банков...</option>';
selectHtml += '</select>';
return selectHtml;
}
function createCheckbox(root, key, checked, labelText, required) {
var id = 'field_' + root + '_' + key + '_' + Math.random().toString(36).slice(2);
var checkedAttr = checked ? ' checked' : '';
@@ -900,6 +908,9 @@ export function generateConfirmationFormHTML(data: any): string {
// Возмещение
html += '<h3 style="font-size:16px;margin:0 0 16px;color:#1f2937">Возмещение:</h3>';
html += '<p>Выплата возмещения возможна по системе быстрых платежей (СБП) по номеру телефона заявителя: <strong id="phone-display">' + esc(u.mobile || '') + '</strong></p>';
html += '<p><strong>Банк для получения выплаты:</strong> ';
html += createBankSelect('user', 'bank_id', u.bank_id || '');
html += '</p>';
html += '<div class="section-break"></div>';
@@ -1424,6 +1435,59 @@ export function generateConfirmationFormHTML(data: any): string {
});
}
// Загрузка списка банков СБП
function loadBanks() {
var bankSelects = document.querySelectorAll('.bank-select');
if (bankSelects.length === 0) {
console.log('Bank select fields not found');
return;
}
console.log('Loading NSPK banks...');
fetch('http://212.193.27.93/api/payouts/dictionaries/nspk-banks')
.then(function(response) {
if (!response.ok) throw new Error('HTTP ' + response.status);
return response.json();
})
.then(function(banks) {
console.log('Loaded ' + banks.length + ' banks');
// Сортируем по названию
banks.sort(function(a, b) {
return a.bankname.localeCompare(b.bankname, 'ru');
});
// Заполняем все bank-select элементы
Array.prototype.forEach.call(bankSelects, function(select) {
var currentValue = select.getAttribute('data-selected') || state.user?.bank_id || '';
select.innerHTML = '<option value="">Выберите банк</option>';
banks.forEach(function(bank) {
var option = document.createElement('option');
option.value = bank.bankid;
option.textContent = bank.bankname;
if (bank.bankid === currentValue) {
option.selected = true;
}
select.appendChild(option);
});
// Если выбран банк, обновляем стиль
if (currentValue && select.value) {
select.classList.add('filled');
updateFieldStyle(select);
}
});
})
.catch(function(error) {
console.error('Error loading banks:', error);
Array.prototype.forEach.call(bankSelects, function(select) {
select.innerHTML = '<option value="">Ошибка загрузки банков. Обновите страницу.</option>';
});
});
}
function initialize() {
try {
console.log('=== НАЧАЛО ИНИЦИАЛИЗАЦИИ ===');
@@ -1451,6 +1515,12 @@ export function generateConfirmationFormHTML(data: any): string {
renderStatement();
console.log('renderStatement completed');
// Загружаем список банков СБП
console.log('Loading banks...');
setTimeout(function() {
loadBanks();
}, 100);
// Валидируем уже заполненные поля
setTimeout(function(){
console.log('Starting field validation...');

View File

@@ -76,7 +76,8 @@ interface FormData {
fullName?: string;
email?: string;
paymentMethod?: string;
bankName?: string;
bankId?: string; // ID банка из NSPK API
bankName?: string; // Название банка для отображения
cardNumber?: string;
accountNumber?: string;
}
@@ -989,7 +990,8 @@ export default function ClaimForm() {
email: formData.email,
event_type: formData.eventType,
payment_method: formData.paymentMethod,
bank_name: formData.bankName,
bank_id: formData.bankId, // ID банка из NSPK API
bank_name: formData.bankName, // Название банка для отображения
card_number: formData.cardNumber,
account_number: formData.accountNumber,

View File

@@ -9,7 +9,15 @@ export default defineConfig({
proxy: {
'/api': {
target: 'http://host.docker.internal:8200',
changeOrigin: true
changeOrigin: true,
// SSE support
configure: (proxy) => {
proxy.on('proxyRes', (proxyRes) => {
// Disable buffering for SSE
proxyRes.headers['cache-control'] = 'no-cache';
proxyRes.headers['x-accel-buffering'] = 'no';
});
}
},
'/events': {
target: 'http://host.docker.internal:8200',

View File

@@ -373,7 +373,7 @@ function getWebserviceSession($userName, $maxRetries = 3) {
curl_close($ch);
return ['error' => 'Authentication failed after ' . $maxRetries . ' attempts'];
}
}
// Основная функция для создания документов
function createDocumentsInCRM($filesArray, $userName = 'api') {