wyyl/beike/Services/CurrencyService.php

100 lines
2.4 KiB
PHP

<?php
/*
* @copyright 2022 opencart.cn - All Rights Reserved.
* @link https://www.guangdawangluo.com
* @Author Pu Shuo <pushuo@opencart.cn>
* @Date 2022-08-02 19:19:52
* @LastEditTime 2022-08-06 12:52:21
*/
/**
* CurrencyService.php
*
* @copyright 2022 opencart.cn - All Rights Reserved
* @link http://www.guangdawangluo.com
* @author TL <mengwb@opencart.cn>
* @created 2022-07-28 16:29:54
* @modified 2022-07-28 16:29:54
*/
namespace Beike\Services;
use Beike\Models\Address;
use Beike\Models\TaxRate;
use Beike\Models\TaxRule;
use Beike\Repositories\CurrencyRepo;
class CurrencyService
{
private static $instance;
private $currencies = array();
public function __construct() {
foreach (CurrencyRepo::enabled() as $result) {
$this->currencies[$result->code] = $result;
}
}
public static function getInstance()
{
if (!self::$instance) {
self::$instance = new self();
}
return self::$instance;
}
public function format($amount, $currency, $value = '', $format = true)
{
$symbol_left = $this->currencies[$currency]->symbol_left;
$symbol_right = $this->currencies[$currency]->symbol_right;
$decimal_place = $this->currencies[$currency]->decimal_place;
if (!$value) {
$value = $this->currencies[$currency]->value;
}
$amount = $value ? (float)$amount * $value : (float)$amount;
$amount = round($amount, (int)$decimal_place);
if (!$format) {
return $amount;
}
$string = '';
if ($amount < 0) {
$string = '-';
}
if ($symbol_left) {
$string .= $symbol_left;
}
$string .= number_format(abs($amount), (int)$decimal_place, __('currency.decimal_point'), __('currency.thousand_point'));
if ($symbol_right) {
$string .= $symbol_right;
}
return $string;
}
public function convert($value, $from, $to) {
if (isset($this->currencies[$from])) {
$from = $this->currencies[$from]->value;
} else {
$from = 1;
}
if (isset($this->currencies[$to])) {
$to = $this->currencies[$to]->value;
} else {
$to = 1;
}
return $value * ($to / $from);
}
}