Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Валюта + % на курс ?


sys

Recommended Posts

Кстати не понимаю зачем вообще VQMOD, если с часть файлов с заменой!

Я же писал:

Есть два варианта установки:

1. Через vqmod - тогда просто копируете xml в папку скриптов vqmod

2. Заменой файлов. Перезаписываете вложенные файлы в папке admin.

И в том, и в другом случае, нужно дописать текст в файлы языков. Пример текста для русского и английского, и в какие файлы писать - есть в readme

После этого в админке появится указанное поле. Значение задается как коэффициент (т.е. если хотите увеличить на 2%, то надо ввести 1.02).

И, для лучшего понимания,- коэффициент идет не к стоимости товара, а к курсу конвертации валют (хотя, результат и одинаковый).

Надіслати
Поділитися на інших сайтах


  • 1 year later...

Здравствуйте. Столкнулся с такой же задачей. Необходимо добавить некий коэфициент к курсу, что бы компенсировать разницу между официальным и рыночным.

Я ипользовал как вариант от JohnnyVega, так и от freelancer. Оба рабочие. Но, в обеих случаях проблема с автоматическим обновлением курса валюты - он не обновляется. Точнее, обновляется валюта по умолчанию (курс которой 1.00000), а второстепенная валюта не обновляется.

 

Помогите, пожалуйста, разобраться. Магазин на ocStore 1.5.5.1.2. Сейчас использую такой вариант кода (в currency.php) для умножения на коэфициент:

            foreach ($lines as $line) {
                $currency = utf8_substr($line, 4, 3);
                $value = utf8_substr($line, 11, 6);
                if ((float)$value) {
                    $this->db->query("UPDATE " . DB_PREFIX . "currency SET value = '" . (float)$value * 1.15 . "', date_modified = '" .  $this->db->escape(date('Y-m-d H:i:s')) . "' WHERE code = '" . $this->db->escape($currency) . "'");
                }
Надіслати
Поділитися на інших сайтах


 

Здравствуйте. Столкнулся с такой же задачей. Необходимо добавить некий коэфициент к курсу, что бы компенсировать разницу между официальным и рыночным.

Я ипользовал как вариант от JohnnyVega, так и от freelancer. Оба рабочие. Но, в обеих случаях проблема с автоматическим обновлением курса валюты - он не обновляется. Точнее, обновляется валюта по умолчанию (курс которой 1.00000), а второстепенная валюта не обновляется.

 

Помогите, пожалуйста, разобраться. Магазин на ocStore 1.5.5.1.2. Сейчас использую такой вариант кода (в currency.php) для умножения на коэфициент:

            foreach ($lines as $line) {
                $currency = utf8_substr($line, 4, 3);
                $value = utf8_substr($line, 11, 6);
                if ((float)$value) {
                    $this->db->query("UPDATE " . DB_PREFIX . "currency SET value = '" . (float)$value * 1.15 . "', date_modified = '" .  $this->db->escape(date('Y-m-d H:i:s')) . "' WHERE code = '" . $this->db->escape($currency) . "'");
                }

 

Проблема решена.

Надіслати
Поділитися на інших сайтах


Спасибо. Зачетный модуль. надо прикупить. а вот интересно при выгрузке прайса с сайта с помощью модуля поставщики 7,2 в экселе будут отдельные колонки для цены в валютах? или в се водной колонке будет и потом разбирайся что в какой валюте. 

Надіслати
Поділитися на інших сайтах


  • 2 months later...

Установил currency_fee от mrvira. 

У меня вопрос. Как привязать фикс к файлу currency_uah.php ? Обновление идет с нужно мне банка. Файл размещается в корне сайта и запускается по расписанию. При этом отключается автоматическое обновление курсов в админке.

/**
* @Author Spy-Reality
* @Date of creation 14.03.2014
* @Date of renovation 16.08.2014
* @Site http://spy-reality.in.ua
* Парсер керса валют с ПРИВАТ 24 в OPENCART
*/


// Подключение к БД
include 'config.php';
$dbhost = DB_HOSTNAME;
$dbuser = DB_USERNAME;
$dbpass = DB_PASSWORD;
$dbname = DB_DATABASE;
$sqlchar='utf8';


$db = new PDO ( 'mysql:host=' . $dbhost . ';dbname=' . $dbname, $dbuser, $dbpass);
$db->query ( 'SET character_set_connection = '.$sqlchar );
$db->query ( 'SET character_set_client = '.$sqlchar );
$db->query ( 'SET character_set_results = '.$sqlchar );

$default=$db->query("SELECT code FROM " . DB_PREFIX . "currency WHERE value='1.00000000'")->fetch(PDO::FETCH_ASSOC);

if($default['code']== 'UAH'){
$xml = simplexml_load_file('https://api.privatbank.ua/p24api/pubinfo?exchange&coursid=4');

$price=1; // одна гривна;

$eur=$xml->xpath('//exchangerate[@ccy=EUR]');
$codEUR=$eur[0]->attributes()->ccy;
$valEUR=$eur[0]->attributes()->sale;
$conEUR=$price/$valEUR; // Корвентация в евро;

$usd=$xml->xpath('//exchangerate[@ccy=USD]');
$codUSD=$usd[0]->attributes()->ccy;
$valUSD=$usd[0]->attributes()->sale;
$conUSD=$price/$valUSD; // Конвертация в доллар;

$rub=$xml->xpath('//exchangerate[@ccy=RUR]');
$codRUB=$rub[0]->attributes()->ccy;
$valRUB=$rub[0]->attributes()->sale;
$conRUB=$price/$valRUB; // Конвертация в рубль;

$pln=$xml->xpath('//exchangerate[@ccy=PLZ]');
$codPLN=$pln[0]->attributes()->ccy;
$valPLN=$pln[0]->attributes()->sale;
$conPLN=$price/$valPLN; // Корвентация в злотый;


date_default_timezone_set('Europe/Kiev');
$date=date('Y-m-d H:i:s');

$stmt = $db->query("SELECT code FROM " . DB_PREFIX . "currency");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
//echo $row['code'] ;
switch ($row['code']){
case 'UAH':
$db->exec("UPDATE " . DB_PREFIX . "currency SET value = '1.00000000', date_modified = '" . $date . "' WHERE code = 'UAH'");
break;
case $codEUR:
if($valEUR==true){
$db->exec("UPDATE " . DB_PREFIX . "currency SET value = '" . number_format($conEUR, 8, '.', '') . "', date_modified = '" . $date . "' WHERE code = '" . $codEUR . "'");
}else{
echo "Валюта EUR не обновлена (нет курса)
";
}
break;
case $codRUB:
if($valRUB==true){
$db->exec("UPDATE " . DB_PREFIX . "currency SET value = '" . number_format($conRUB, 8, '.', '') . "', date_modified = '" . $date . "' WHERE code = '" . $codRUB . "'");
}else{
echo "Валюта RUB не обновлена (нет курса)
";
}
break;
case $codUSD:
if($valUSD==true){
$db->exec("UPDATE " . DB_PREFIX . "currency SET value = '" . number_format($conUSD, 8, '.', '') . "', date_modified = '" . $date . "' WHERE code = '" . $codUSD . "'");
}else{
echo "Валюта USD не обновлена (нет курса)
";
}
break;
case $codPLN:
if($valPLN==true){
$db->exec("UPDATE " . DB_PREFIX . "currency SET value = '" . number_format($conEUR, 8, '.', '') . "', date_modified = '" . $date . "' WHERE code = '" . $codEUR . "'");
}else{
echo "Валюта PLN не обновлена (нет курса)
";
}
break;
}

}
$defaultd=$db->query("SELECT date_modified FROM " . DB_PREFIX . "currency WHERE code='UAH'")->fetch(PDO::FETCH_ASSOC);
echo 'Курс обновился в ('.$defaultd['date_modified'].')';

}elseif($default['code']== 'USD'){
$xml = simplexml_load_file('https://api.privatbank.ua/p24api/pubinfo?exchange&coursid=4');

$usd=$xml->xpath('//exchangerate[@ccy=USD]');
$valUSD=$usd[0]->attributes()->sale;

$eur=$xml->xpath('//exchangerate[@ccy=EUR]');
$valEUR=$eur[0]->attributes()->sale;
$euro=$valUSD/$valEUR;

date_default_timezone_set('Europe/Kiev');
$date=date('Y-m-d H:i:s');

$stmt = $db->query("SELECT code FROM " . DB_PREFIX . "currency");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
switch ($row['code']){
case 'USD':
$db->exec("UPDATE " . DB_PREFIX . "currency SET value = '1.00000000', date_modified = '" . $date . "' WHERE code = 'USD'");
break;
case 'UAH':
if($valUSD==true){
$db->exec("UPDATE " . DB_PREFIX . "currency SET value = '" . $valUSD . "', date_modified = '" . $date . "' WHERE code = 'UAH'");
}else{
echo "Валюта UAH не обновлена (нет курса)
";
}
break;
case 'EUR':
if($euro==true){
$db->exec("UPDATE " . DB_PREFIX . "currency SET value = '" . number_format($euro, 8, '.', '') . "', date_modified = '" . $date . "' WHERE code = 'EUR'");
}else{
echo "Валюта EUR не обновлена (нет курса)
";
}
break;
}
}
$defaultd=$db->query("SELECT date_modified FROM " . DB_PREFIX . "currency WHERE code='USD'")->fetch(PDO::FETCH_ASSOC);
echo 'Курс обновился в ('.$defaultd['date_modified'].')';

}elseif($default['code']== 'EUR'){

$xml = simplexml_load_file('https://api.privatbank.ua/p24api/pubinfo?exchange&coursid=4');

$eur=$xml->xpath('//exchangerate[@ccy=EUR]');
$valEUR=$eur[0]->attributes()->sale;

$usd=$xml->xpath('//exchangerate[@ccy=USD]');
$valUSD=$usd[0]->attributes()->sale;
$dollar=$valEUR/$valUSD;

date_default_timezone_set('Europe/Kiev');
$date=date('Y-m-d H:i:s');

$stmt = $db->query("SELECT code FROM " . DB_PREFIX . "currency");

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {

switch ($row['code']){

case 'EUR':
$db->exec("UPDATE " . DB_PREFIX . "currency SET value = '1.00000000', date_modified = '" . $date . "' WHERE code = 'EUR'");
break;
case 'UAH':
if($valEUR==true){
$db->exec("UPDATE " . DB_PREFIX . "currency SET value = '" . $valEUR . "', date_modified = '" . $date . "' WHERE code = 'UAH'");
}else{
echo "Валюта UAH не обновлена (нет курса)
";
}
case 'USD':
if($valEUR==true){
$db->exec("UPDATE " . DB_PREFIX . "currency SET value = '" . number_format($dollar, 8, '.', '') . "', date_modified = '" . $date . "' WHERE code = 'USD'");
}else{
echo "Валюта USD не обновлена (нет курса)
";
}
break;
}

}

$defaultd=$db->query("SELECT date_modified FROM " . DB_PREFIX . "currency WHERE code='EUR'")->fetch(PDO::FETCH_ASSOC);
echo 'Курс обновился в ('.$defaultd['date_modified'].')';

}else{
echo 'Курс не обновился!';
}

?>

 

Подскажите, пожалуйста, как решить задачку.

Спасибо.

Надіслати
Поділитися на інших сайтах


  • 2 weeks later...

Проверить не могу, поэтому попробуйте и напишите, что получилось.
1. Уберите изменения, сделанные по моему коду в admin/model/localisation/currency.php
2. В Ваш модуль перед

$default=$db->query("SELECT code FROM " . DB_PREFIX . "currency WHERE value='1.00000000'")->fetch(PDO::FETCH_ASSOC);

добавьте строки

$currency_fee = $this->config->get('config_currency_fee');
if (!isset($currency_fee)) {  $currency_fee = 1.0;}

Если всё правильно, то в этой переменной будет введенный коэффициент конвертации.
3. Дальше используйте этот коэффициент в строках, где получаете соответствующие курсы

$conEUR = $price / $valEUR * $currency_fee; // Конвертация в евро;
......
$conUSD = $price / $valUSD * $currency_fee; // Конвертация в доллар;

Если написать так и коэффициент больше единицы, то вы "повысите" курс гривны. Остальное - по аналогии.

Надіслати
Поділитися на інших сайтах


Проверить не могу, поэтому попробуйте и напишите, что получилось.

1. Уберите изменения, сделанные по моему коду в admin/model/localisation/currency.php

2. В Ваш модуль перед

$default=$db->query("SELECT code FROM " . DB_PREFIX . "currency WHERE value='1.00000000'")->fetch(PDO::FETCH_ASSOC);

добавьте строки

$currency_fee = $this->config->get('config_currency_fee');
if (!isset($currency_fee)) {  $currency_fee = 1.0;}

Если всё правильно, то в этой переменной будет введенный коэффициент конвертации.

3. Дальше используйте этот коэффициент в строках, где получаете соответствующие курсы

$conEUR = $price / $valEUR * $currency_fee; // Конвертация в евро;
......
$conUSD = $price / $valUSD * $currency_fee; // Конвертация в доллар;

Если написать так и коэффициент больше единицы, то вы "повысите" курс гривны. Остальное - по аналогии.

 

 

Ругается на изменения по второму пункту:

 

1ba119a6fc.png

Надіслати
Поділитися на інших сайтах


Ругается на изменения по второму пункту

Замените вставку в п.2 на следующее:

$config_currency_fee=$db->query("SELECT config_currency_fee FROM " . DB_PREFIX . "setting WHERE store_id = '0'")->fetch(PDO::FETCH_ASSOC);
$currency_fee = 1.0;
if (!isset($config_currency_fee['config_currency_fee'])) { $currency_fee = $config_currency_fee['config_currency_fee']; }

Чтобы это работало, нужно сначала в админской панели задать коэффициент и, возможно, уточнить идентификатор магазина (store_id в таблице setting)

Надіслати
Поділитися на інших сайтах


Замените вставку в п.2 на следующее:

$config_currency_fee=$db->query("SELECT config_currency_fee FROM " . DB_PREFIX . "setting WHERE store_id = '0'")->fetch(PDO::FETCH_ASSOC);
$currency_fee = 1.0;
if (!isset($config_currency_fee['config_currency_fee'])) { $currency_fee = $config_currency_fee['config_currency_fee']; }

Чтобы это работало, нужно сначала в админской панели задать коэффициент и, возможно, уточнить идентификатор магазина (store_id в таблице setting)

 

Сделал все как сказали. Для надежности все испытывал на свеже-установленном магазине.

При переходе по ссылке ocstore.loc/currency_uah.php (для обновления курсов) выдает ошибку

96e6d5a953.png

коэффициент:

715f8ae26c.png

 

store_id в таблице setting имеет значение "0" везде (смотрел через phpMyAdmin, если я вас правильно понял).

Может имеет значение расположение файла currency_uah.php ?

Вот конечный файл currency_uah.php

/**

* @Author Spy-Reality

* @Date of creation 14.03.2014

* @Date of renovation 16.08.2014

* @Site http://spy-reality.in.ua

* Парсер керса валют с ПРИВАТ 24 в OPENCART

*/

// Подключение к БД

include 'config.php';

$dbhost = DB_HOSTNAME;

$dbuser = DB_USERNAME;

$dbpass = DB_PASSWORD;

$dbname = DB_DATABASE;

$sqlchar='utf8';

$db = new PDO ( 'mysql:host=' . $dbhost . ';dbname=' . $dbname, $dbuser, $dbpass);

$db->query ( 'SET character_set_connection = '.$sqlchar );

$db->query ( 'SET character_set_client = '.$sqlchar );

$db->query ( 'SET character_set_results = '.$sqlchar );

$config_currency_fee=$db->query("SELECT config_currency_fee FROM " . DB_PREFIX . "setting WHERE store_id = '0'")->fetch(PDO::FETCH_ASSOC);

$currency_fee = 1.0;

if (!isset($config_currency_fee['config_currency_fee'])) { $currency_fee = $config_currency_fee['config_currency_fee']; }

$default=$db->query("SELECT code FROM " . DB_PREFIX . "currency WHERE value='1.00000000'")->fetch(PDO::FETCH_ASSOC);

if($default['code']== 'UAH'){

$xml = simplexml_load_file('https://api.privatbank.ua/p24api/pubinfo?exchange&coursid=4');

$price=1; // одна гривна;

$eur=$xml->xpath('//exchangerate[@ccy=EUR]');

$codEUR=$eur[0]->attributes()->ccy;

$valEUR=$eur[0]->attributes()->sale;

$conEUR = $price / $valEUR * $currency_fee; // Корвентация в евро;

$usd=$xml->xpath('//exchangerate[@ccy=USD]');

$codUSD=$usd[0]->attributes()->ccy;

$valUSD=$usd[0]->attributes()->sale;

$conUSD = $price / $valUSD * $currency_fee; // Конвертация в доллар;

$rub=$xml->xpath('//exchangerate[@ccy=RUR]');

$codRUB=$rub[0]->attributes()->ccy;

$valRUB=$rub[0]->attributes()->sale;

$conRUB=$price/$valRUB; // Конвертация в рубль;

$pln=$xml->xpath('//exchangerate[@ccy=PLZ]');

$codPLN=$pln[0]->attributes()->ccy;

$valPLN=$pln[0]->attributes()->sale;

$conPLN=$price/$valPLN; // Корвентация в злотый;

date_default_timezone_set('Europe/Kiev');

$date=date('Y-m-d H:i:s');

$stmt = $db->query("SELECT code FROM " . DB_PREFIX . "currency");

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {

//echo $row['code'] ;

switch ($row['code']){

case 'UAH':

$db->exec("UPDATE " . DB_PREFIX . "currency SET value = '1.00000000', date_modified = '" . $date . "' WHERE code = 'UAH'");

break;

case $codEUR:

if($valEUR==true){

$db->exec("UPDATE " . DB_PREFIX . "currency SET value = '" . number_format($conEUR, 8, '.', '') . "', date_modified = '" . $date . "' WHERE code = '" . $codEUR . "'");

}else{

echo "Валюта EUR не обновлена (нет курса)

";

}

break;

case $codRUB:

if($valRUB==true){

$db->exec("UPDATE " . DB_PREFIX . "currency SET value = '" . number_format($conRUB, 8, '.', '') . "', date_modified = '" . $date . "' WHERE code = '" . $codRUB . "'");

}else{

echo "Валюта RUB не обновлена (нет курса)

";

}

break;

case $codUSD:

if($valUSD==true){

$db->exec("UPDATE " . DB_PREFIX . "currency SET value = '" . number_format($conUSD, 8, '.', '') . "', date_modified = '" . $date . "' WHERE code = '" . $codUSD . "'");

}else{

echo "Валюта USD не обновлена (нет курса)

";

}

break;

case $codPLN:

if($valPLN==true){

$db->exec("UPDATE " . DB_PREFIX . "currency SET value = '" . number_format($conEUR, 8, '.', '') . "', date_modified = '" . $date . "' WHERE code = '" . $codEUR . "'");

}else{

echo "Валюта PLN не обновлена (нет курса)

";

}

break;

}

}

$defaultd=$db->query("SELECT date_modified FROM " . DB_PREFIX . "currency WHERE code='UAH'")->fetch(PDO::FETCH_ASSOC);

echo 'Курс обновился в ('.$defaultd['date_modified'].')';

}elseif($default['code']== 'USD'){

$xml = simplexml_load_file('https://api.privatbank.ua/p24api/pubinfo?exchange&coursid=4');

$usd=$xml->xpath('//exchangerate[@ccy=USD]');

$valUSD=$usd[0]->attributes()->sale;

$eur=$xml->xpath('//exchangerate[@ccy=EUR]');

$valEUR=$eur[0]->attributes()->sale;

$euro=$valUSD/$valEUR;

date_default_timezone_set('Europe/Kiev');

$date=date('Y-m-d H:i:s');

$stmt = $db->query("SELECT code FROM " . DB_PREFIX . "currency");

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {

switch ($row['code']){

case 'USD':

$db->exec("UPDATE " . DB_PREFIX . "currency SET value = '1.00000000', date_modified = '" . $date . "' WHERE code = 'USD'");

break;

case 'UAH':

if($valUSD==true){

$db->exec("UPDATE " . DB_PREFIX . "currency SET value = '" . $valUSD . "', date_modified = '" . $date . "' WHERE code = 'UAH'");

}else{

echo "Валюта UAH не обновлена (нет курса)

";

}

break;

case 'EUR':

if($euro==true){

$db->exec("UPDATE " . DB_PREFIX . "currency SET value = '" . number_format($euro, 8, '.', '') . "', date_modified = '" . $date . "' WHERE code = 'EUR'");

}else{

echo "Валюта EUR не обновлена (нет курса)

";

}

break;

}

}

$defaultd=$db->query("SELECT date_modified FROM " . DB_PREFIX . "currency WHERE code='USD'")->fetch(PDO::FETCH_ASSOC);

echo 'Курс обновился в ('.$defaultd['date_modified'].')';

}elseif($default['code']== 'EUR'){

$xml = simplexml_load_file('https://api.privatbank.ua/p24api/pubinfo?exchange&coursid=4');

$eur=$xml->xpath('//exchangerate[@ccy=EUR]');

$valEUR=$eur[0]->attributes()->sale;

$usd=$xml->xpath('//exchangerate[@ccy=USD]');

$valUSD=$usd[0]->attributes()->sale;

$dollar=$valEUR/$valUSD;

date_default_timezone_set('Europe/Kiev');

$date=date('Y-m-d H:i:s');

$stmt = $db->query("SELECT code FROM " . DB_PREFIX . "currency");

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {

switch ($row['code']){

case 'EUR':

$db->exec("UPDATE " . DB_PREFIX . "currency SET value = '1.00000000', date_modified = '" . $date . "' WHERE code = 'EUR'");

break;

case 'UAH':

if($valEUR==true){

$db->exec("UPDATE " . DB_PREFIX . "currency SET value = '" . $valEUR . "', date_modified = '" . $date . "' WHERE code = 'UAH'");

}else{

echo "Валюта UAH не обновлена (нет курса)

";

}

case 'USD':

if($valEUR==true){

$db->exec("UPDATE " . DB_PREFIX . "currency SET value = '" . number_format($dollar, 8, '.', '') . "', date_modified = '" . $date . "' WHERE code = 'USD'");

}else{

echo "Валюта USD не обновлена (нет курса)

";

}

break;

}

}

$defaultd=$db->query("SELECT date_modified FROM " . DB_PREFIX . "currency WHERE code='EUR'")->fetch(PDO::FETCH_ASSOC);

echo 'Курс обновился в ('.$defaultd['date_modified'].')';

}else{

echo 'Курс не обновился!';

}

?>

Надіслати
Поділитися на інших сайтах


Для памяти. Вот верный код для п.2:

$config_currency_fee=$db->query("SELECT `value` FROM " . DB_PREFIX . "setting WHERE `store_id` = '0' AND `key`='config_currency_fee'")->fetch(PDO::FETCH_ASSOC);
$currency_fee = 1.0;
if (isset($config_currency_fee['value'])) { $currency_fee = $config_currency_fee['value']; }
Надіслати
Поділитися на інших сайтах


  • 1 year later...
  • 2 years later...

Вопрос если теме еще кто то живет )))

А как на основе этого можно под каждую валюту свой коэфициент сделать?

Очень нужно для Версии ocStore 2.3.0.2.1

Или может кто другое решение посоветует?

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.