Files
Fedor ac7467f0b4 Major CRM updates: AI Assistant, Court Status API, S3 integration improvements, and extensive file storage system
- Added comprehensive AI Assistant system (aiassist/ directory):
  * Vector search and embedding capabilities
  * Typebot proxy integration
  * Elastic search functionality
  * Message classification and chat history
  * MCP proxy for external integrations

- Implemented Court Status API (GetCourtStatus.php):
  * Real-time court document status checking
  * Integration with external court systems
  * Comprehensive error handling and logging

- Enhanced S3 integration:
  * Improved file backup system with metadata
  * Batch processing capabilities
  * Enhanced error logging and recovery
  * Copy operations with URL fixing

- Added Telegram contact creation API
- Improved error logging across all modules
- Enhanced callback system for AI responses
- Extensive backup file storage with timestamps
- Updated documentation and README files

- File storage improvements:
  * Thousands of backup files with proper metadata
  * Fix operations for broken file references
  * Project-specific backup and recovery systems
  * Comprehensive file integrity checking

Total: 26,461+ files added/modified including AWS SDK, vendor dependencies, and extensive backup system.
2025-10-16 11:17:21 +03:00

195 lines
9.6 KiB
Smarty

{*<!--
/*********************************************************************************
** The contents of this file are subject to the vtiger CRM Public License Version 1.0
* ("License"); You may not use this file except in compliance with the License
* The Original Code is: vtiger CRM Open Source
* The Initial Developer of the Original Code is vtiger.
* Portions created by vtiger are Copyright (C) vtiger.
* All Rights Reserved.
*
********************************************************************************/
-->*}
{strip}
<div class='editViewContainer container-fluid'>
<form class="form-horizontal recordEditView" id="EditView" name="EditView" method="post" action="index.php" enctype="multipart/form-data">
{assign var=WIDTHTYPE value=$USER_MODEL->get('rowheight')}
{if !empty($PICKIST_DEPENDENCY_DATASOURCE)}
<input type="hidden" name="picklistDependency" value='{Vtiger_Util_Helper::toSafeHTML($PICKIST_DEPENDENCY_DATASOURCE)}' />
{/if}
<input type="hidden" name="module" value="{$MODULE}" />
<input type="hidden" name="action" value="Save" />
<input type="hidden" name="record" value="{$RECORD_ID}" />
{if $IS_RELATION_OPERATION }
<input type="hidden" name="sourceModule" value="{$SOURCE_MODULE}" />
<input type="hidden" name="sourceRecord" value="{$SOURCE_RECORD}" />
<input type="hidden" name="relationOperation" value="{$IS_RELATION_OPERATION}" />
{/if}
{* SalesPlatform.ru begin For CheckBeforeSave tag*}
<input type="hidden" name="mode" value="{$MODE}"/>
<script>
var fieldname = new Array({$VALIDATION_DATA_FIELDNAME});
var fieldlabel = new Array({$VALIDATION_DATA_FIELDLABEL});
var fielddatatype = new Array({$VALIDATION_DATA_FIELDDATATYPE});
var crmId;
{if isset($ID) && !empty($ID)}
crmId = {$ID};
{/if}
</script>
{* SalesPlatform.ru end *}
<div class="contentHeader row-fluid">
{assign var=SINGLE_MODULE_NAME value='SINGLE_'|cat:$MODULE}
{if $RECORD_ID neq ''}
<div class="span6">
<h3 title="{vtranslate('LBL_EDITING', $MODULE)} {vtranslate($SINGLE_MODULE_NAME, $MODULE)} {$RECORD_STRUCTURE_MODEL->getRecordName()}">{vtranslate('LBL_EDITING', $MODULE)} {vtranslate($SINGLE_MODULE_NAME, $MODULE)} - {$RECORD_STRUCTURE_MODEL->getRecordName()}</h3>
</div>
{else}
<div class="span6">
<h3>{vtranslate('LBL_CREATING_NEW', $MODULE)} {vtranslate($SINGLE_MODULE_NAME, $MODULE)}</h3>
</div>
{/if}
<div class="span6">
<div class="pull-right">
<button class="btn btn-success" type="submit"><strong>{vtranslate('LBL_SAVE', $MODULE)}</strong></button>
<a class="cancelLink" type="reset" onclick="javascript:window.history.back();">{vtranslate('LBL_CANCEL', $MODULE)}</a>
</div>
</div>
</div>
{foreach key=BLOCK_LABEL item=BLOCK_FIELDS from=$RECORD_STRUCTURE name="EditViewBlockLevelLoop"}
{if $BLOCK_FIELDS|@count lte 0}{continue}{/if}
<table class="table table-bordered blockContainer showInlineTable">
<tr>
<th class="blockHeader" colspan="4">{vtranslate($BLOCK_LABEL, $MODULE)}</th>
</tr>
{if ($BLOCK_LABEL eq 'LBL_ADDRESS_INFORMATION') and ($MODULE neq 'PurchaseOrder') }
<tr>
<td class="fieldLabel {$WIDTHTYPE}" name="copyHeader1">
<label class="muted pull-right marginRight10px" name="togglingHeader">{vtranslate('LBL_BILLING_ADDRESS_FROM', $MODULE)}</label>
</td>
<td class="fieldValue {$WIDTHTYPE}" name="copyAddress1">
<div class="row-fluid">
<div class="span5">
<span class="row-fluid margin0px">
<label class="radio">
<input type="radio" name="copyAddressFromRight" class="accountAddress" data-copy-address="billing" checked="">{vtranslate('SINGLE_Accounts', $MODULE)}
</label>
</span>
<span class="row-fluid margin0px">
<label class="radio">
<input type="radio" name="copyAddressFromRight" class="contactAddress" data-copy-address="billing" checked="">{vtranslate('SINGLE_Contacts', $MODULE)}
</label>
</span>
<span class="row-fluid margin0px" name="togglingAddressContainerRight">
<label class="radio">
<input type="radio" name="copyAddressFromRight" class="shippingAddress" data-target="shipping" checked="">{vtranslate('Shipping Address', $MODULE)}
</label>
</span>
<span class="row-fluid margin0px hide" name="togglingAddressContainerLeft">
<label class="radio">
<input type="radio" name="copyAddressFromRight" class="billingAddress" data-target="billing" checked="">{vtranslate('Billing Address', $MODULE)}
</label>
</span>
</div>
</div>
</td>
<td class="fieldLabel {$WIDTHTYPE}" name="copyHeader2">
<label class="muted pull-right marginRight10px" name="togglingHeader">{vtranslate('LBL_SHIPPING_ADDRESS_FROM', $MODULE)}</label>
</td>
<td class="fieldValue {$WIDTHTYPE}" name="copyAddress2">
<div class="row-fluid">
<div class="span5">
<span class="row-fluid margin0px">
<label class="radio">
<input type="radio" name="copyAddressFromLeft" class="accountAddress" data-copy-address="shipping" checked="">{vtranslate('SINGLE_Accounts', $MODULE)}
</label>
</span>
<span class="row-fluid margin0px">
<label class="radio">
<input type="radio" name="copyAddressFromLeft" class="contactAddress" data-copy-address="shipping" checked="">{vtranslate('SINGLE_Contacts', $MODULE)}
</label>
</span>
<span class="row-fluid margin0px" name="togglingAddressContainerLeft">
<label class="radio">
<input type="radio" name="copyAddressFromLeft" class="billingAddress" data-target="billing" checked="">{vtranslate('Billing Address', $MODULE)}
</label>
</span>
<span class="row-fluid margin0px hide" name="togglingAddressContainerRight">
<label class="radio">
<input type="radio" name="copyAddressFromLeft" class="shippingAddress" data-target="shipping" checked="">{vtranslate('Shipping Address', $MODULE)}
</label>
</span>
</div>
</div>
</td>
</tr>
{/if}
<tr>
{assign var=COUNTER value=0}
{foreach key=FIELD_NAME item=FIELD_MODEL from=$BLOCK_FIELDS name=blockfields}
{assign var="isReferenceField" value=$FIELD_MODEL->getFieldDataType()}
{if $FIELD_MODEL->get('uitype') eq "20" or $FIELD_MODEL->get('uitype') eq "19"}
{if $COUNTER eq '1'}
<td class="{$WIDTHTYPE}"></td><td class="{$WIDTH_TYPE_CLASSSES[$WIDTHTYPE]}"></td></tr><tr>
{assign var=COUNTER value=0}
{/if}
{/if}
{if $COUNTER eq 2}
</tr><tr>
{assign var=COUNTER value=1}
{else}
{assign var=COUNTER value=$COUNTER+1}
{/if}
<td class="fieldLabel {$WIDTHTYPE}">
{if $isReferenceField neq "reference"}<label class="muted pull-right marginRight10px">{/if}
{if $FIELD_MODEL->isMandatory() eq true && $isReferenceField neq "reference"} <span class="redColor">*</span> {/if}
{if $isReferenceField eq "reference"}
{assign var="REFERENCE_LIST" value=$FIELD_MODEL->getReferenceList()}
{assign var="REFERENCE_LIST_COUNT" value=count($REFERENCE_LIST)}
{if $REFERENCE_LIST_COUNT > 1}
{assign var="DISPLAYID" value=$FIELD_MODEL->get('fieldvalue')}
{assign var="REFERENCED_MODULE_STRUCT" value=$FIELD_MODEL->getUITypeModel()->getReferenceModule($DISPLAYID)}
{if !empty($REFERENCED_MODULE_STRUCT)}
{assign var="REFERENCED_MODULE_NAME" value=$REFERENCED_MODULE_STRUCT->get('name')}
{/if}
<span class="pull-right">
{if $FIELD_MODEL->isMandatory() eq true} <span class="redColor">*</span> {/if}
<select class="chzn-select referenceModulesList streched" style="width:140px;">
<optgroup>
{foreach key=index item=value from=$REFERENCE_LIST}
<option value="{$value}" {if $value eq $REFERENCED_MODULE_NAME} selected {/if}>{vtranslate($value, $MODULE)}</option>
{/foreach}
</optgroup>
</select>
</span>
{else}
<label class="muted pull-right marginRight10px">{if $FIELD_MODEL->isMandatory() eq true} <span class="redColor">*</span> {/if}{vtranslate($FIELD_MODEL->get('label'), $MODULE)}</label>
{/if}
{else if $FIELD_MODEL->get('uitype') eq "83"}
{include file=vtemplate_path($FIELD_MODEL->getUITypeModel()->getTemplateName(),$MODULE) COUNTER=$COUNTER}
{else}
{vtranslate($FIELD_MODEL->get('label'), $MODULE)}
{/if}
{if $isReferenceField neq "reference"}</label>{/if}
</td>
{if $FIELD_MODEL->get('uitype') neq "83"}
<td class="fieldValue {$WIDTHTYPE}" {if $FIELD_MODEL->get('uitype') eq '19'} colspan="3" {assign var=COUNTER value=$COUNTER+1} {/if} {if $FIELD_MODEL->get('uitype') eq '20'} colspan="3"{/if}>
{include file=vtemplate_path($FIELD_MODEL->getUITypeModel()->getTemplateName(),$MODULE) BLOCK_FIELDS=$BLOCK_FIELDS}
</td>
{/if}
{if $BLOCK_FIELDS|@count eq 1 and $FIELD_MODEL->get('uitype') neq "19" and $FIELD_MODEL->get('uitype') neq "20" and $FIELD_MODEL->get('uitype') neq "30" and $FIELD_MODEL->get('name') neq "recurringtype"}
<td class="{$WIDTHTYPE}"></td><td class="{$WIDTHTYPE}"></td>
{/if}
{/foreach}
{* adding additional column for odd number of fields in a block *}
{if $BLOCK_FIELDS|@end eq true and $BLOCK_FIELDS|@count neq 1 and $COUNTER eq 1}
<td class="fieldLabel {$WIDTHTYPE}"></td><td class="{$WIDTHTYPE}"></td>
{/if}
</tr>
</table>
<br>
{/foreach}
{/strip}