- 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.
96 lines
4.0 KiB
PHP
96 lines
4.0 KiB
PHP
<?php
|
|
/*+***********************************************************************************
|
|
* 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.
|
|
*************************************************************************************/
|
|
|
|
class PriceBooks_Relation_Model extends Vtiger_Relation_Model{
|
|
|
|
/**
|
|
* Function returns the Query for the relationhips
|
|
* @param <Vtiger_Record_Model> $recordModel
|
|
* @param type $actions
|
|
* @return <String>
|
|
*/
|
|
public function getQuery($recordModel, $actions=false){
|
|
$parentModuleModel = $this->getParentModuleModel();
|
|
$relatedModuleModel = $this->getRelationModuleModel();
|
|
$relatedModuleName = $relatedModuleModel->get('name');
|
|
$parentModuleName = $parentModuleModel->get('name');
|
|
$functionName = $this->get('name');
|
|
$focus = CRMEntity::getInstance($parentModuleName);
|
|
$focus->id = $recordModel->getId();
|
|
if(method_exists($parentModuleModel, $functionName)) {
|
|
$query = $parentModuleModel->$functionName($recordModel, $relatedModuleModel);
|
|
} else {
|
|
$result = $focus->$functionName($recordModel->getId(), $parentModuleModel->getId(),
|
|
$relatedModuleModel->getId(), $actions);
|
|
$query = $result['query'];
|
|
}
|
|
|
|
//modify query if any module has summary fields, those fields we are displayed in related list of that module
|
|
$relatedListFields = $relatedModuleModel->getConfigureRelatedListFields();
|
|
if(count($relatedListFields) > 0) {
|
|
$currentUser = Users_Record_Model::getCurrentUserModel();
|
|
$queryGenerator = new QueryGenerator($relatedModuleName, $currentUser);
|
|
$queryGenerator->setFields($relatedListFields);
|
|
$selectColumnSql = $queryGenerator->getSelectClauseColumnSQL();
|
|
$newQuery = preg_split('/FROM/i', $query);
|
|
$selectColumnSql = 'SELECT DISTINCT vtiger_crmentity.crmid,'.$selectColumnSql;
|
|
}
|
|
if(($functionName == 'get_pricebook_products') || ($functionName == 'get_pricebook_services')){
|
|
$selectColumnSql = $selectColumnSql.', vtiger_pricebookproductrel.listprice';
|
|
}
|
|
if(!empty($selectColumnSql)) {
|
|
$query = $selectColumnSql.' FROM '.$newQuery[1];
|
|
}
|
|
|
|
if($relatedModuleName == 'Calendar') {
|
|
$nonAdminQuery = Users_Privileges_Model::getNonAdminAccessControlQuery($relatedModuleName);
|
|
|
|
if (trim($nonAdminQuery)) {
|
|
$query = appendFromClauseToQuery($query, $nonAdminQuery);
|
|
|
|
$moduleFocus = CRMEntity::getInstance('Calendar');
|
|
$condition = $moduleFocus->buildWhereClauseConditionForCalendar();
|
|
if($condition) {
|
|
$query .= ' AND '.$condition;
|
|
}
|
|
}
|
|
}
|
|
return $query;
|
|
}
|
|
|
|
/**
|
|
* Function to add PriceBook-Products/Services Relation
|
|
* @param <Integer> $sourceRecordId
|
|
* @param <Integer> $destinationRecordId
|
|
* @param <Integer> $listPrice
|
|
*/
|
|
public function addListPrice($sourceRecordId, $destinationRecordId, $listPrice) {
|
|
$sourceModuleName = $this->getParentModuleModel()->get('name');
|
|
|
|
$priceBookModel = Vtiger_Record_Model::getInstanceById($sourceRecordId, $sourceModuleName);
|
|
$priceBookModel->updateListPrice($destinationRecordId, $listPrice);
|
|
}
|
|
|
|
/**
|
|
* Function that deletes PriceBooks related records information
|
|
* @param <Integer> $sourceRecordId - PriceBook Id
|
|
* @param <Integer> $relatedRecordId - Related Record Id
|
|
*/
|
|
public function deleteRelation($sourceRecordId, $relatedRecordId){
|
|
$sourceModuleName = $this->getParentModuleModel()->get('name');
|
|
$destinationModuleName = $this->getRelationModuleModel()->get('name');
|
|
if($sourceModuleName == 'PriceBooks' && ($destinationModuleName == 'Products' || $destinationModuleName == 'Services')) {
|
|
$priceBookModel = Vtiger_Record_Model::getInstanceById($sourceRecordId, $sourceModuleName);
|
|
$priceBookModel->deleteListPrice($relatedRecordId);
|
|
} else {
|
|
parent::deleteRelation($sourceRecordId, $relatedRecordId);
|
|
}
|
|
}
|
|
} |