<?php
namespace Oro\Bundle\CurrencyBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

use Oro\Bundle\DataAuditBundle\Metadata\Annotation as Oro;

class MultiCurrency
{
    use CurrencyAwareTrait;

    protected $value;
    protected $rate;
    protected $baseCurrencyValue;

    /**
     * @param string $value
     * @param string $currency
     * @param float $rate | null
     * @return MultiCurrency
     */
    public static function create($value, $currency, $rate = null)
    {
        /* @var $multiCurrency self */
        $multiCurrency = new static();
        $multiCurrency->setValue($value)
            ->setCurrency($currency)
            ->setRate($rate);

        return $multiCurrency;
    }

    /**
     * @return string
     */
    public function getValue()
    {
        return $this->value;
    }

    /**
     * @param string $value
     * @return $this
     */
    public function setValue($value)
    {
        $this->value = $value;

        return $this;
    }

    /**
     * @return float
     */
    public function getRate()
    {
        return $this->rate;
    }

    /**
     * @param float $rate
     * @return $this
     */
    public function setRate($rate)
    {
        $this->rate = $rate;

        return $this;
    }

    /**
     * @return mixed
     */
    public function getBaseCurrencyValue()
    {
        return $this->baseCurrencyValue;
    }

    /**
     * @param $baseCurrencyValue
     * @return $this
     */
    public function setBaseCurrencyValue($baseCurrencyValue)
    {
        $this->baseCurrencyValue = $baseCurrencyValue;

        return $this;
    }
}

<?php
namespace Oro\Bundle\CurrencyBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

use Oro\Bundle\DataAuditBundle\Metadata\Annotation as Oro;

class MultiCurrency
{
    use CurrencyAwareTrait;

    protected $value;
    protected $baseCurrencyValue = null;

    /**
     * @param string $value
     * @param string $currency
     * @param string | null $baseCurrencyValue
     * @return MultiCurrency
     */
    public static function create($value, $currency, $baseCurrencyValue = null)
    {
        /* @var $multiCurrency self */
        $multiCurrency = new static();
        $multiCurrency->setValue($value)
            ->setCurrency($currency)
            ->setBaseCurrencyValue($baseCurrencyValue);

        return $multiCurrency;
    }

    /**
     * @return string
     */
    public function getValue()
    {
        return $this->value;
    }

    /**
     * @param string $value
     * @return $this
     */
    public function setValue($value)
    {
        $this->value = $value;

        return $this;
    }

    /**
     * @return string|null
     */
    public function getBaseCurrencyValue()
    {
        return $this->baseCurrencyValue;
    }

    /**
     * @param $baseCurrencyValue
     * @return $this
     */
    public function setBaseCurrencyValue($baseCurrencyValue)
    {
        $this->baseCurrencyValue = $baseCurrencyValue;

        return $this;
    }
}

Update rate converter to support fixation logic - Add freeze case in unit tests - Rewrite converter for base currency amount usage instead of rate - Remove unused param from convert method
OEE-1075: Update rate converter to support fixation logic
- Add freeze case in unit tests
- Rewrite converter for base currency amount usage instead of rate
- Remove unused param from convert method
