setAccountId($data['account_id']); } if (!empty($data['amount'])) { $this->setAmount($this->factoryAmount($data['amount'])); } if (!empty($data['platform_fee_amount'])) { $this->setPlatformFeeAmount($this->factoryAmount($data['platform_fee_amount'])); } } } /** * @inheritDoc */ public function setAccountId($value) { if ($value === null || $value === '') { throw new EmptyPropertyValueException( 'Empty value for "accountId" parameter in Source', 0, 'source.accountId' ); } elseif (!TypeCast::canCastToString($value)) { throw new InvalidPropertyValueTypeException( 'Invalid value type for "accountId" parameter in Source', 0, 'source.accountId' ); } else { $this->_accountId = (string)$value; } } /** * @inheritDoc */ public function getAccountId() { return $this->_accountId; } /** * @inheritDoc */ public function getAmount() { return $this->_amount; } /** * @inheritDoc */ public function hasAmount() { return !empty($this->_amount); } /** * @inheritDoc */ public function setAmount($value) { if ($value === null || $value === '') { throw new EmptyPropertyValueException( 'Empty value for "amount" parameter in Source', 0, 'source.amount' ); } elseif (is_array($value)) { $this->_amount = $this->factoryAmount($value); } elseif ($value instanceof AmountInterface) { $this->_amount = $value; } else { throw new InvalidPropertyValueTypeException( 'Invalid value type for "amount" parameter in Source', 0, 'source.amount', $value ); } } /** * @inheritDoc */ public function getPlatformFeeAmount() { return $this->_platform_fee_amount; } /** * @inheritDoc */ public function hasPlatformFeeAmount() { return !empty($this->_platform_fee_amount); } /** * @inheritDoc */ public function setPlatformFeeAmount($value) { if ($value === null || $value === '') { throw new EmptyPropertyValueException( 'Empty value for "platform_fee_amount" parameter in Source', 0, 'source.platform_fee_amount' ); } elseif (is_array($value)) { $this->_platform_fee_amount = $this->factoryAmount($value); } elseif ($value instanceof AmountInterface) { $this->_platform_fee_amount = $value; } else { throw new InvalidPropertyValueTypeException( 'Invalid value type for "platform_fee_amount" parameter in Source', 0, 'source.platform_fee_amount', $value ); } } /** * Фабричный метод создания суммы * * @param array $options Сумма в виде ассоциативного массива * * @return AmountInterface Созданный инстанс суммы */ private function factoryAmount($options) { $amount = new MonetaryAmount(null, $options['currency']); if ($options['value'] > 0) { $amount->setValue($options['value']); } return $amount; } }