%PDF- %PDF- 403WebShell
403Webshell
Server IP : 37.220.80.31  /  Your IP : 18.217.193.85
Web Server : Apache/2.4.52 (Ubuntu)
System : Linux 3051455-guretool.twc1.net 5.15.0-107-generic #117-Ubuntu SMP Fri Apr 26 12:26:49 UTC 2024 x86_64
User : www-root ( 1010)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /var/www/www-root/data/www/dev.artlot24.ru/bitrix/modules/sale/lib/cashbox/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/www-root/data/www/dev.artlot24.ru/bitrix/modules/sale/lib/cashbox//cashboxbitrixv2.php
<?php

namespace Bitrix\Sale\Cashbox;

use Bitrix\Main;
use Bitrix\Catalog;
use Bitrix\Main\Localization;

Localization\Loc::loadMessages(__FILE__);

/**
 * Class CashboxBitrixV2
 * @package Bitrix\Sale\Cashbox
 */
class CashboxBitrixV2 extends CashboxBitrix
{
	const CODE_VAT_0 = 'vat0';
	const CODE_VAT_10 = 'vat10';
	const CODE_VAT_20 = 'vat20';
	const CODE_CALC_VAT_10 = 'vat110';
	const CODE_CALC_VAT_20 = 'vat120';

	/**
	 * @param Check $check
	 * @return array
	 * @throws Main\ArgumentException
	 * @throws Main\ArgumentNullException
	 * @throws Main\ArgumentOutOfRangeException
	 * @throws Main\ArgumentTypeException
	 * @throws Main\LoaderException
	 * @throws Main\NotImplementedException
	 * @throws Main\ObjectException
	 * @throws Main\ObjectPropertyException
	 * @throws Main\SystemException
	 */
	public function buildCheckQuery(Check $check)
	{
		$data = $check->getDataForCheck();

		/** @var Main\Type\DateTime $dateTime */
		$dateTime = $data['date_create'];

		$phone = \NormalizePhone($data['client_phone']);
		if (is_string($phone))
		{
			if ($phone[0] === '7')
				$phone = '+'.$phone;
		}
		else
		{
			$phone = '';
		}

		$client = $data['client_email'];
		if ($this->getValueFromSettings('CLIENT', 'INFO') === 'PHONE'
			&& $phone
		)
		{
			$client = $phone;
		}

		$result = [
			'type' => $check::getCalculatedSign() === Check::CALCULATED_SIGN_INCOME ? 'sell' : 'sellReturn',
			'timestamp' => $dateTime->format('d.m.Y H:i:s'),
			'external_id' => static::buildUuid(static::UUID_TYPE_CHECK, $data['unique_id']),
			'taxationType' => $this->getValueFromSettings('TAX', 'SNO'),
			'zn' => (string)$this->getField('NUMBER_KKM'),
			'clientInfo' => [
				'emailOrPhone' => $client,
			],
			'payments' => [],
			'items' => [],
			'total' => (float)$data['total_sum']
		];

		foreach ($data['payments'] as $payment)
		{
			$result['payments'][] = [
				'type' => $this->getValueFromSettings('PAYMENT_TYPE', $payment['type']),
				'sum' => (float)$payment['sum']
			];
		}

		foreach ($data['items'] as $item)
		{
			$result['items'][] = $this->buildPosition($data, $item);
		}

		return $result;
	}

	protected function buildPosition(array $checkData, array $item)
	{
		$checkTypeMap = $this->getCheckTypeMap();
		$paymentObjectMap = $this->getPaymentObjectMap();

		$vat = $this->getValueFromSettings('VAT', $item['vat']);
		if ($vat === null)
		{
			$vat = $this->getValueFromSettings('VAT', 'NOT_VAT');
		}

		$position = [
			'type' => 'position',
			'name' => $item['name'],
			'price' => (float)$item['price'],
			'quantity' => $item['quantity'],
			'amount' => (float)$item['sum'],
			'paymentMethod' => $checkTypeMap[$checkData['type']],
			'paymentObject' => $paymentObjectMap[$item['payment_object']],
			'tax' => [
				'type' => $this->mapVatValue($checkData['type'], $vat)
			],
		];

		if (isset($item['supplier_info']))
		{
			$position['supplierInfo'] = [
				'phones' => $item['supplier_info']['phones'],
				'name' => $item['supplier_info']['name'],
				'vatin' => $item['supplier_info']['inn']
			];
		}

		if (isset($item['nomenclature_code']))
		{
			$position['nomenclatureCode'] = base64_encode($item['nomenclature_code']);
		}

		return $position;
	}

	/**
	 * @param $checkType
	 * @param $vat
	 * @return mixed
	 */
	protected function mapVatValue($checkType, $vat)
	{
		$map = [
			self::CODE_VAT_10 => [
				PrepaymentCheck::getType() => self::CODE_CALC_VAT_10,
				PrepaymentReturnCheck::getType() => self::CODE_CALC_VAT_10,
				PrepaymentReturnCashCheck::getType() => self::CODE_CALC_VAT_10,
				FullPrepaymentCheck::getType() => self::CODE_CALC_VAT_10,
				FullPrepaymentReturnCheck::getType() => self::CODE_CALC_VAT_10,
				FullPrepaymentReturnCashCheck::getType() => self::CODE_CALC_VAT_10,
			],
			self::CODE_VAT_20 => [
				PrepaymentCheck::getType() => self::CODE_CALC_VAT_20,
				PrepaymentReturnCheck::getType() => self::CODE_CALC_VAT_20,
				PrepaymentReturnCashCheck::getType() => self::CODE_CALC_VAT_20,
				FullPrepaymentCheck::getType() => self::CODE_CALC_VAT_20,
				FullPrepaymentReturnCheck::getType() => self::CODE_CALC_VAT_20,
				FullPrepaymentReturnCashCheck::getType() => self::CODE_CALC_VAT_20,
			],
		];

		return $map[$vat][$checkType] ?? $vat;
	}

	/**
	 * @return array
	 */
	protected function getPaymentObjectMap()
	{
		return [
			Check::PAYMENT_OBJECT_COMMODITY => 'commodity',
			Check::PAYMENT_OBJECT_SERVICE => 'service',
			Check::PAYMENT_OBJECT_JOB => 'job',
			Check::PAYMENT_OBJECT_EXCISE => 'excise',
			Check::PAYMENT_OBJECT_PAYMENT => 'payment',
			Check::PAYMENT_OBJECT_GAMBLING_BET => 'gamblingBet',
			Check::PAYMENT_OBJECT_GAMBLING_PRIZE => 'gamblingPrize',
			Check::PAYMENT_OBJECT_LOTTERY => 'lottery',
			Check::PAYMENT_OBJECT_LOTTERY_PRIZE => 'lotteryPrize',
			Check::PAYMENT_OBJECT_INTELLECTUAL_ACTIVITY => 'intellectualActivity',
			Check::PAYMENT_OBJECT_AGENT_COMMISSION => 'agentCommission',
			Check::PAYMENT_OBJECT_COMPOSITE => 'composite',
			Check::PAYMENT_OBJECT_ANOTHER => 'another',
			Check::PAYMENT_OBJECT_PROPERTY_RIGHT => 'proprietaryLaw',
			Check::PAYMENT_OBJECT_NON_OPERATING_GAIN => 'nonOperatingIncome',
			Check::PAYMENT_OBJECT_SALES_TAX => 'merchantTax',
			Check::PAYMENT_OBJECT_RESORT_FEE => 'resortFee',
			Check::PAYMENT_OBJECT_COMMODITY_MARKING_NO_MARKING_EXCISE => 'excise',
			Check::PAYMENT_OBJECT_COMMODITY_MARKING_EXCISE => 'excise',
			Check::PAYMENT_OBJECT_COMMODITY_MARKING_NO_MARKING => 'commodity',
			Check::PAYMENT_OBJECT_COMMODITY_MARKING => 'commodity',
		];
	}

	/**
	 * @return string
	 */
	public static function getName()
	{
		return Localization\Loc::getMessage('SALE_CASHBOX_BITRIX_V2_TITLE');
	}


	/**
	 * @return array
	 */
	protected function getCheckTypeMap()
	{
		return [
			SellCheck::getType() => 'fullPayment',
			SellReturnCashCheck::getType() => 'fullPayment',
			SellReturnCheck::getType() => 'fullPayment',
			AdvancePaymentCheck::getType() => 'advance',
			AdvanceReturnCashCheck::getType() => 'advance',
			AdvanceReturnCheck::getType() => 'advance',
			CreditCheck::getType() => 'credit',
			CreditReturnCheck::getType() => 'credit',
			CreditPaymentCheck::getType() => 'creditPayment',
			CreditPaymentReturnCashCheck::getType() => 'creditPayment',
			CreditPaymentReturnCheck::getType() => 'creditPayment',
			PrepaymentCheck::getType() => 'prepayment',
			PrepaymentReturnCheck::getType() => 'prepayment',
			PrepaymentReturnCashCheck::getType() => 'prepayment',
			FullPrepaymentCheck::getType() => 'fullPrepayment',
			FullPrepaymentReturnCheck::getType() => 'fullPrepayment',
			FullPrepaymentReturnCashCheck::getType() => 'fullPrepayment',
		];
	}

	/**
	 * @param int $modelId
	 * @return array
	 */
	public static function getSettings($modelId = 0)
	{
		$settings = parent::getSettings($modelId);

		$kkmList = static::getSupportedKkmModels();
		if (isset($kkmList[$modelId]))
		{
			$settings['TAX'] = [
				'LABEL' => Localization\Loc::getMessage('SALE_CASHBOX_BITRIX_V2_SETTINGS_SNO'),
				'REQUIRED' => 'Y',
				'ITEMS' => [
					'SNO' => [
						'TYPE' => 'ENUM',
						'LABEL' => Localization\Loc::getMessage('SALE_CASHBOX_BITRIX_V2_SETTINGS_SNO_LABEL'),
						'VALUE' => 'osn',
						'OPTIONS' => [
							'osn' => Localization\Loc::getMessage('SALE_CASHBOX_BITRIX_V2_SNO_OSN'),
							'usnIncome' => Localization\Loc::getMessage('SALE_CASHBOX_BITRIX_V2_SNO_UI'),
							'usnIncomeOutcome' => Localization\Loc::getMessage('SALE_CASHBOX_BITRIX_V2_SNO_UIO'),
							'envd' => Localization\Loc::getMessage('SALE_CASHBOX_BITRIX_V2_SNO_ENVD'),
							'esn' => Localization\Loc::getMessage('SALE_CASHBOX_BITRIX_V2_SNO_ESN'),
							'patent' => Localization\Loc::getMessage('SALE_CASHBOX_BITRIX_V2_SNO_PATENT')
						]
					]
				]
			];
		}

		$settings['CLIENT'] = [
			'LABEL' => Localization\Loc::getMessage('SALE_CASHBOX_BITRIX_V2_SETTINGS_CLIENT'),
			'ITEMS' => [
				'INFO' => [
					'TYPE' => 'ENUM',
					'VALUE' => 'NONE',
					'LABEL' => Localization\Loc::getMessage('SALE_CASHBOX_BITRIX_V2_SETTINGS_CLIENT_INFO'),
					'OPTIONS' => [
						'EMAIL' => Localization\Loc::getMessage('SALE_CASHBOX_BITRIX_V2_SETTINGS_CLIENT_EMAIL'),
						'PHONE' => Localization\Loc::getMessage('SALE_CASHBOX_BITRIX_V2_SETTINGS_CLIENT_PHONE'),
					]
				],
			]
		];

		return $settings;
	}

	/**
	 * @param Main\HttpRequest $request
	 * @return array
	 */
	public static function extractSettingsFromRequest(Main\HttpRequest $request)
	{
		return $request->get('SETTINGS');
	}

	/**
	 * @return array
	 */
	public static function getSupportedKkmModels()
	{
		return [
			'atol' => [
				'NAME' => 'ATOL',
				'SETTINGS' => [
					'VAT' => [
						'NOT_VAT' => 'none',
						0 => self::CODE_VAT_0,
						10 => self::CODE_VAT_10,
						20 => self::CODE_VAT_20
					],
					'PAYMENT_TYPE' => [
						Check::PAYMENT_TYPE_CASH => 'cash',
						Check::PAYMENT_TYPE_CASHLESS => 'electronically',
						Check::PAYMENT_TYPE_ADVANCE => 'prepaid',
						Check::PAYMENT_TYPE_CREDIT => 'credit'
					]
				]
			],
		];
	}

	/**
	 * @inheritDoc
	 */
	public static function getFfdVersion(): ?float
	{
		return 1.05;
	}

	/**
	 * @param array $data
	 * @return array
	 * @throws Main\ArgumentException
	 * @throws Main\LoaderException
	 * @throws Main\ObjectPropertyException
	 * @throws Main\SystemException
	 */
	public static function getCashboxList(array $data)
	{
		$result = parent::getCashboxList($data);

		foreach ($result as $zn => $cashbox)
		{
			if (!isset($cashbox['ID']))
			{
				continue;
			}

			$current = Manager::getCashboxFromCache($cashbox['ID']);

			if ($current['HANDLER'] !== '\\'.static::class)
			{
				$cashbox['HANDLER'] = '\\'.static::class;
				$cashbox['SETTINGS'] = static::convertSettings($cashbox['KKM_ID'], $cashbox['SETTINGS']);

				$result[$zn] = $cashbox;
			}
		}

		return $result;
	}

	/**
	 * @param $kkmId
	 * @param array $settings
	 * @return array
	 * @throws Main\ArgumentException
	 * @throws Main\LoaderException
	 * @throws Main\ObjectPropertyException
	 * @throws Main\SystemException
	 */
	protected static function convertSettings($kkmId, array $settings)
	{
		$result = [];

		$currentModel = static::getSupportedKkmModels()[$kkmId];

		foreach ($settings as $key => $setting)
		{
			if ($key === 'PAYMENT_TYPE')
			{
				$result[$key] = $currentModel['SETTINGS']['PAYMENT_TYPE'];
			}
			elseif ($key === 'VAT')
			{
				$result[$key]['NOT_VAT']= $currentModel['SETTINGS']['VAT']['NOT_VAT'];

				if (Main\Loader::includeModule('catalog'))
				{
					$dbRes = Catalog\VatTable::getList(array('filter' => array('ACTIVE' => 'Y')));
					$vatList = $dbRes->fetchAll();
					if ($vatList)
					{
						foreach ($vatList as $vat)
						{
							if (isset($currentModel['SETTINGS']['VAT'][(int)$vat['RATE']]))
							{
								$result[$key][(int)$vat['ID']] = $currentModel['SETTINGS']['VAT'][(int)$vat['RATE']];
							}
							else
							{
								$result[$key][(int)$vat['ID']] = $currentModel['SETTINGS']['VAT']['NOT_VAT'];
							}
						}
					}
				}
			}
			else
			{
				$result[$key] = $setting;
			}
		}

		return $result;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit