Files
crm.clientright.ru/modules/Workflow2/tasks/WfTaskAdjustProductValue.php
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

117 lines
4.2 KiB
PHP

<?php
require_once(realpath(dirname(__FILE__).'/../autoload_wf.php'));
class WfTaskAdjustProductValue extends \Workflow\Task
{
/**
* @param \Workflow\VTInventoryEntity $context
* @return string
* @throws Exception
*/
public function handleTask(&$context) {
/* Insert here source code to execute the task */
$adb = \PearDatabase::getInstance();
$productSrc = $this->get('productsrc');
if(empty($productSrc) || $productSrc == -1) {
$productSrc = 'single';
}
$filterProduct = array();
$tmp = explode(',',$this->get('products'));
foreach($tmp as $productId) {
$filterProduct[$productId] = true;
}
$inventory = $context->exportInventory();
foreach($inventory['listitems'] as $index => $product) {
if($productSrc == 'all' || isset($filterProduct[$product['productid']])) {
$item = $inventory['listitems'][$index];
$productObj = \Workflow\VTEntity::getForId($product['productid']);
$context->setEnvironment('item', $productObj->getData());
if($this->get('adjustquantity') == 'yes') {
$item['quantity'] = $this->get('quantity', $context);
}
if($this->get('adjustunitprice') == 'yes') {
$item['unitprice'] = $this->get('unitprice', $context);
}
if($this->get('adjustdescription') == 'yes') {
$item['comment'] = $this->get('description', $context);
}
if($this->get('adjusttax') == 'yes') {
$taxes = getAllTaxes("available");
$taxConfig = $this->get('tax', $context);
foreach($taxes as $tax) {
if(isset($taxConfig[$tax['taxname']])) {
if(empty($taxConfig[$tax['taxname']]['enable'])) {
$item[$tax['taxname']] = 0;
} else {
$item[$tax['taxname']] = $taxConfig[$tax['taxname']]['value'];
}
}
}
}
if($this->get('adjustdiscount') == 'yes') {
$value = $this->get('discountvalue', $context);
switch($this->get('discount')) {
default:
case 'none':
$item['discount_percent'] = 0;
$item['discount_amount'] = 0;
break;
case 'percent':
$item['discount_percent'] = $value['percent'];
$item['discount_amount'] = 0;
break;
case 'amount':
$item['discount_percent'] = 0;
$item['discount_amount'] = $value['amount'];
break;
}
}
//var_dump($item);exit();
$inventory['listitems'][$index] = $item;
}
}
$context->setEnvironment('item', array());
$context->importInventory($inventory);
$context->save();
return "yes";
}
public function beforeGetTaskform($viewer) {
$product = $this->get('products');
if(!empty($product)) {
//$dataObj = \Vtiger_Record_Model::getInstanceById($product);
$parts = explode(',', $product);
$productCache = array();
foreach($parts as $id) {
$productCache[$id] = array(
'label' => \Vtiger_Functions::getCRMRecordLabel($id),
);
}
$viewer->assign('productCache', $productCache);
} else {
$viewer->assign('productCache', array());
}
$viewer->assign("availTaxes", getAllTaxes("available"));
/* Insert here source code to create custom configurations pages */
}
public function beforeSave(&$values) {
/* Insert here source code to modify the values the user submit on configuration */
}
}