Skip to content

Commit

Permalink
[ADD] Currencies configure.
Browse files Browse the repository at this point in the history
  • Loading branch information
Seiger committed Dec 3, 2024
1 parent 7ffaf40 commit 5939a3a
Show file tree
Hide file tree
Showing 12 changed files with 943 additions and 109 deletions.
632 changes: 632 additions & 0 deletions config/currencies.php

Large diffs are not rendered by default.

16 changes: 14 additions & 2 deletions lang/en/global.php
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
<?php return [
"add" => "Add",
"add_attribute_help" => "Add a new attribute.",
"add_block" => "Add a block",
"add_currency" => "Add a currency",
"add_product_help" => "Add a new product.",
"additional_fields_main_product_tab" => "Additional fields for the main product tab",
"additional_fields_to_products_tab" => "Additional fields",
"additional_fields_to_products_tab_help" => "Additional fields for the products tab.",
"after_sum" => "After the amount",
"all_products" => "All products",
"alternative_text" => "Alternative text",
"are_you_sure" => "Are you sure?",
"as_filter" => "As a filter",
"as_filter_help" => "Use this attribute to filter products in the store catalog.",
"attention" => "Attention",
"attribute" => "Attribute",
"attribute_help" => "An additional field that expands the possibilities of describing products or orders. Used as a feature and/or filter.",
"attribute_icon" => "fa fas fa-paperclip",
Expand All @@ -26,7 +30,8 @@
"availability" => "Availability",
"availability_help" => "Determine the availability status of the product on the site.",
"available_currencies" => "Available currencies",
"available_currencies_help" => "List of prices that are available for store operation.",
"available_currencies_help" => "List of currencies that are available for store operation.",
"before_sum" => "Before the sum",
"canceled" => "Cancelled.",
"caption" => "Caption",
"catalog_root" => "Catalog root",
Expand All @@ -45,6 +50,10 @@
"currencies_help" => "Список доступних валют магазину та їх відношення одна до одної",
"currencies_icon" => "fa fa-coins",
"currency_conversion" => "Currency Conversion",
"currency_name" => "Currency name",
"currency_name_help" => "Currency name that can be displayed on the frontend if needed <strong><code>sCommerce::getCurrencies(['UAH'])->first()['name']</code></strong>",
"currency_price_configuration" => "Currency settings and price format",
"currency_symbol_help" => "The currency symbol is used to display the price.",
"deleted" => "Item deleted.",
"deleted_irretrievably" => "If you press the delete button, the item will be irretrievably deleted.",
"description" => "<strong>sCommerce</strong> allows you to manage products and orders on the site.",
Expand Down Expand Up @@ -83,6 +92,7 @@
"new_attribute" => "New Attribute",
"new_product" => "New product",
"new_review" => "New review",
"no_data_found" => "No data found",
"no_text" => "No text added",
"not_available" => "Not available",
"not_writable" => "The file ../core/custom/config/seiger/settings/sCommerce.php is not writable.",
Expand All @@ -97,11 +107,12 @@
"price_configuration" => "Price configuration",
"price_decimal_separator" => "Decimal separator for price",
"price_decimal_separator_help" => "Sets the separator for the fractional part of the price.",
"price_decimals" => "Number of decimal places in price",
"price_decimals" => "Number of decimal places in the price",
"price_decimals_help" => "Sets the number of decimal places in the price. The fractional part is not specified if the value is 0.",
"price_help" => "The main price of the product is in the currency of the store.",
"price_opt" => "Wholesale price",
"price_opt_special" => "Special wholesale price",
"price_position_help" => "The position of the currency symbol when displaying the price.",
"price_special" => "Special Price",
"price_special_help" => "Special Price of the product is in the currency of the store.",
"price_symbol" => "Show symbol",
Expand Down Expand Up @@ -152,6 +163,7 @@
"sortproducts" => "Sort by position",
"sortproducts_help" => "Sorting products by position in a category",
"sortproducts_icon" => "fa fa-sort",
"symbol" => "Symbol",
"text_block" => "Text block",
"technical_parameter_for_delivery" => "technical parameter of the product that can be taken into account during delivery.",
"title" => "Commerce",
Expand Down
16 changes: 14 additions & 2 deletions lang/ru/global.php
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
<?php return [
"add" => "Добавить",
"add_attribute_help" => "Добавить новый атрибут.",
"add_block" => "Добавить блок",
"add_currency" => "Добавить валюту",
"add_product_help" => "Добавить новый товар.",
"additional_fields_main_product_tab" => "Дополнительные поля для главного таба продукта",
"additional_fields_to_products_tab" => "Дополнительные поля",
"additional_fields_to_products_tab_help" => "Дополнительные поля для списка товаров.",
"after_sum" => "После суммы",
"all_products" => "Все товары",
"alternative_text" => "Альтернативный текст",
"are_you_sure" => "Вы уверены?",
"as_filter" => "Как фильтр",
"as_filter_help" => "Используйте этот атрибут для фильтрации продуктов в каталоге магазина.",
"attention" => "Внимание",
"attribute" => "Атрибут",
"attribute_help" => "Дополнительное поле расширяет возможности описания продуктов или заказов. Используется как характеристика и/или фильтр.",
"attribute_icon" => "fa fas fa-paperclip",
Expand All @@ -26,7 +30,8 @@
"availability" => "Доступность",
"availability_help" => "Определите статус доступности товара на сайте.",
"available_currencies" => "Доступные валюты",
"available_currencies_help" => "Список цен, доступных для работы магазина.",
"available_currencies_help" => "Список валют, доступных для работы магазина.",
"before_sum" => "Перед суммой",
"canceled" => "Отменено.",
"caption" => "Подпись",
"catalog_root" => "Корень каталога",
Expand All @@ -45,6 +50,10 @@
"currencies_help" => "Список доступных валют магазина и их отношение друг к другу.",
"currencies_icon" => "fa fa-coins",
"currency_conversion" => "Обмен валют",
"currency_name" => "Название валюты",
"currency_name_help" => "Название валюты, которую можно отразить на фронтенд при необходимости <strong><code>sCommerce::getCurrencies(['UAH'])->first()['name']</code></strong>",
"currency_price_configuration" => "Настройка валют и формат цены",
"currency_symbol_help" => "Символ валюты используется для отображения цены.",
"deleted" => "Запись удалена.",
"deleted_irretrievably" => "Если вы нажмете кнопку удалить, элемент будет удален безвозвратно.",
"description" => "<strong>sCommerce</strong> позволяет осуществлять управление товарами и заказами на сайте.",
Expand Down Expand Up @@ -83,6 +92,7 @@
"new_attribute" => "Новый атрибут",
"new_product" => "Новый товар",
"new_review" => "Новый отзыв",
"no_data_found" => "Данные не найдены",
"no_text" => "Текст не добавлен",
"not_available" => "Нет в наличии",
"not_writable" => "Файл ../core/custom/config/seiger/settings/sCommerce.php не доступен для записи.",
Expand All @@ -97,11 +107,12 @@
"price_configuration" => "Настройка цены",
"price_decimal_separator" => "Десятичный разделитель цены",
"price_decimal_separator_help" => "Устанавливает разделитель дробной части цены.",
"price_decimals" => "Количество знаков после запятой в цене",
"price_decimals" => "Количество десятичных знаков в цене",
"price_decimals_help" => "Задаёт количество десятичных знаков цены. Дробная часть не указывается если значение 0.",
"price_help" => "Основная стоимость товара в валюте магазина.",
"price_opt" => "Оптовая цена",
"price_opt_special" => "Специальная оптовая цена",
"price_position_help" => "Позиция символа валюты при отображении цены.",
"price_special" => "Специальная цена",
"price_special_help" => "Специальная цена товара в валюте магазина.",
"price_symbol" => "Показать символ",
Expand Down Expand Up @@ -152,6 +163,7 @@
"sortproducts" => "Сортировка по позиции",
"sortproducts_help" => "Сортировка товаров по позиции в категории",
"sortproducts_icon" => "fa fa-sort",
"symbol" => "Символ",
"text_block" => "Текстовый блок",
"technical_parameter_for_delivery" => "технический параметр товара, который можно учитывать при доставке.",
"title" => "Коммерция",
Expand Down
16 changes: 14 additions & 2 deletions lang/uk/global.php
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
<?php return [
"add" => "Додати",
"add_attribute_help" => "Додати новий атрибут.",
"add_block" => "Додати блок",
"add_currency" => "Додати валюту",
"add_product_help" => "Додати новий товар.",
"additional_fields_main_product_tab" => "Додаткові поля для головного таба продукта",
"additional_fields_to_products_tab" => "Додаткові поля",
"additional_fields_to_products_tab_help" => "Додаткові поля для списка товарів.",
"after_sum" => "Після суми",
"all_products" => "Всі товари",
"alternative_text" => "Альтернативний текст",
"are_you_sure" => "Ви впевнені?",
"as_filter" => "Як фільтр",
"as_filter_help" => "Використовувати цей атрибут для фільтрації продуктів в каталозі магазину.",
"attention" => "Увага",
"attribute" => "Атрибут",
"attribute_help" => "Додаткове поле, що розширюе можливості опису продуктів чи замовлень. Використовуюється як характеристика та/або фільтр.",
"attribute_icon" => "fa fas fa-paperclip",
Expand All @@ -26,7 +30,8 @@
"availability" => "Доступність",
"availability_help" => "Визначте статус доступності товару на сайті.",
"available_currencies" => "Доступні валюти",
"available_currencies_help" => "Список цін, що доступні для роботи магазину.",
"available_currencies_help" => "Список валют, що доступні для роботи магазину.",
"before_sum" => "Перед сумою",
"canceled" => "Скасовано.",
"caption" => "Підпис",
"catalog_root" => "Корінь каталогу",
Expand All @@ -45,6 +50,10 @@
"currencies_help" => "Список доступних валют магазину та їх відношення одна до одної.",
"currencies_icon" => "fa fa-coins",
"currency_conversion" => "Конвертація валют",
"currency_name" => "Назва валюти",
"currency_name_help" => "Назва валюти, яку можна відобразити на фронтенд за потреби <strong><code>sCommerce::getCurrencies(['UAH'])->first()['name']</code></strong>",
"currency_price_configuration" => "Налаштування валют та формат ціни",
"currency_symbol_help" => "Символ валюти використовується для відображення ціни.",
"deleted" => "Запис видалено.",
"deleted_irretrievably" => "Якщо Ви натиснете кнопку видалити, елемент буде видалено безповоротно.",
"description" => "<strong>sCommerce</strong> дозволяє здійснювати управління товарами та замовленнями на сайті.",
Expand Down Expand Up @@ -83,6 +92,7 @@
"new_attribute" => "Новий атрибут",
"new_product" => "Новий товар",
"new_review" => "Новий відгук",
"no_data_found" => "Даних не знайдено",
"no_text" => "Текст не додано",
"not_available" => "Немає в наявності",
"not_writable" => "Файл ../core/custom/config/seiger/settings/sCommerce.php не доступний для запису.",
Expand All @@ -97,11 +107,12 @@
"price_configuration" => "Налаштування ціни",
"price_decimal_separator" => "Десятковий роздільник ціни",
"price_decimal_separator_help" => "Встановлює роздільник дробової частини ціни.",
"price_decimals" => "Кількість знаків після коми в ціні",
"price_decimals" => "Кількість десяткових знаків в ціні",
"price_decimals_help" => "Вказує кількість десяткових знаків ціни. Дробова частина не вказується, якщо значення 0.",
"price_help" => "Основна ціна товару в валюті магазину.",
"price_opt" => "Оптова ціна",
"price_opt_special" => "Спеціальна оптова ціна",
"price_position_help" => "Позиція символа валюти при відображенні ціни.",
"price_special" => "Спеціальна ціна",
"price_special_help" => "Спеціальна ціна товару в валюті магазину.",
"price_symbol" => "Показати символ",
Expand Down Expand Up @@ -152,6 +163,7 @@
"sortproducts" => "Сортування за позицією",
"sortproducts_help" => "Сортування товарів за позицією в категорії ",
"sortproducts_icon" => "fa fa-sort",
"symbol" => "Символ",
"technical_parameter_for_delivery" => "технічний параметр товару, який можна враховувати під час доставки.",
"text_block" => "Текстовий блок",
"title" => "Комерція",
Expand Down
11 changes: 11 additions & 0 deletions module/sCommerceModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -1154,6 +1154,17 @@
| Settings
|--------------------------------------------------------------------------
*/
case "getCurrencyItem":
$data['success'] = 0;
$item = request()->string('item')->trim()->value();
if ($item) {
$currency = sCommerce::getCurrencies([$item]);
if ($currency) {
$data['success'] = 1;
$data['view'] = $sCommerceController->view('partials.settingsCurrencyItem', $currency->first())->render();
}
}
die(json_encode($data));
case "settings":
if (!evo()->hasPermission('settings')) {
$back = request()->back ?? '&get=orders';
Expand Down
8 changes: 4 additions & 4 deletions src/Models/sProduct.php
Original file line number Diff line number Diff line change
Expand Up @@ -441,7 +441,7 @@ public function getPriceAttribute(): string
*/
public function priceTo($currency): string
{
return sCommerce::convertPice($this->price_regular, $this->currency, $currency);
return sCommerce::convertPrice($this->price_regular, $this->currency, $currency);
}

/**
Expand All @@ -453,7 +453,7 @@ public function priceTo($currency): string
*/
public function priceToNumber($currency): float
{
return sCommerce::convertPiceNumber($this->price_regular, $this->currency, $currency);
return sCommerce::convertPriceNumber($this->price_regular, $this->currency, $currency);
}

/**
Expand Down Expand Up @@ -481,7 +481,7 @@ public function getSpecialPriceAttribute(): string
*/
public function specialPriceTo($currency): string
{
return sCommerce::convertPice($this->price_special, $this->currency, $currency);
return sCommerce::convertPrice($this->price_special, $this->currency, $currency);
}

/**
Expand All @@ -493,6 +493,6 @@ public function specialPriceTo($currency): string
*/
public function specialPriceToNumber($currency): float
{
return sCommerce::convertPiceNumber($this->price_special, $this->currency, $currency);
return sCommerce::convertPriceNumber($this->price_special, $this->currency, $currency);
}
}
37 changes: 24 additions & 13 deletions src/sCommerce.php
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,13 @@ public function getCurrencies(null|array $where = null): Collection
if (!$this->currencies) {
$this->currencies = Cache::remember('currencies', 2629743, function () {
$reflector = new \ReflectionClass(self::class);
return include_once str_replace('src/sCommerce.php', 'config/currencies.php', $reflector->getFileName());
$list = include_once str_replace('src/sCommerce.php', 'config/currencies.php', $reflector->getFileName());
return $list->map(function ($item) {
if ($this->config('currencies.'.$item['alpha'])) {
$item = array_merge($item, $this->config('currencies.'.$item['alpha']));
}
return $item;
});
});
}

Expand All @@ -155,22 +161,27 @@ public function getCurrencies(null|array $where = null): Collection
* @param string $currencyTo The currency to convert to.
* @return string The converted price as a formatted string.
*/
public function convertPice($price, $currencyFrom, $currencyTo): string
public function convertPrice($price, $currencyFrom, $currencyTo): string
{
$curr = $this->getCurrencies([$currencyTo])->first();

$price = number_format(
$this->convertPiceNumber($price, $currencyFrom, $currencyTo),
$this->config('basic.price_decimals', 2),
$this->config('basic.price_decimal_separator', '.'),
$this->config('basic.price_thousands_separator', "&nbsp;")
$this->convertPriceNumber($price, $currencyFrom, $currencyTo),
($curr['exp'] ?? 2),
($curr['decimals'] ?? '.'),
str_replace('&nbsp;', ' ', trim($curr['thousands'] ?? '&nbsp;'))
);
$symbol = '';
if ($this->config('basic.price_symbol', 1)) {
$s = $this->getCurrencies([$currencyTo])->first()['symbol'];
if (trim($s) && $s != $currencyTo) {
$symbol = $s;

if ($curr['show'] ?? 1) {
$symbol = str_replace('&nbsp;', ' ', trim($curr['symbol'] ?? '&nbsp;'));
if (($curr['position'] ?? 'before') == 'after') {
$price = $price . $symbol;
} else {
$price = $symbol . $price;
}
}
return $symbol . $price;

return $price;
}

/**
Expand All @@ -182,7 +193,7 @@ public function convertPice($price, $currencyFrom, $currencyTo): string
*
* @return float The converted price.
*/
public function convertPiceNumber($price, $currencyFrom, $currencyTo): float
public function convertPriceNumber($price, $currencyFrom, $currencyTo): float
{
$rate = config('seiger.settings.sCommerceCurrencies.' . $currencyFrom . '_' . $currencyTo, 1);
return floatval($price) * $rate;
Expand Down
Loading

0 comments on commit 5939a3a

Please sign in to comment.