Jump to content

Сумма заказа с конвертацией в списке заказов (orders) не конвертируется


Recommended Posts

53 минуты назад, phukortsin сказал:

Очевидным образом направление уже дано. В частности, если в результате валюты должны быть РАЗНЫМИ, а метод предлагает ОДНУ, то и надо исправлять это место.

Если под "правильный ответ" понимаете полное рабочее решение, то оно требует некоторых трудозатрат. К чему приводит попытка дать решение с наскоку, в этой теме уже видели. Если Вам это действительно нужно и готовы оплачивать, обращайтесь в личку...

Как выше и сказали, Уважаемый Корс, сотрясать воздух, критикуя попытки исправить недоработку системы это не сюда. Если бы нужна была платная доработка зашел бы на фриланс. Либо предлагайте решение, либо не беспокойте людей попыткой самоутвердится за чужой счет и ищите заработок на отведенных для этого ресурсах. 

Link to post
Share on other sites
4 часа назад, alexivchenko сказал:

Напишу еще раз...

Имеем 2 валюты

1. карта - 1.03 = 1.00

метод оплаты - Оплата картой банка 

2. банк - 1.06 = 1.00

метод оплаты - Оплата по квитанции

Есть 2 заказа

1. сумма 19200₽ - оплата картой - должны получить вывод с +6% - 20352₽

2. сумма 16154₽ - оплата квитанцией - должны получить вывод с +3% - 17123,24₽

 

в simpla/ OrdersAdmin.php

меняем 


// Отображение
		$orders = array();
		foreach($this->orders->get_orders($filter) as $o)
			$orders[$o->id] = $o;

на


		// Отображение
		$orders = array();
		$payment_method = array();
		foreach($this->orders->get_orders($filter) as $o) {
			$orders[$o->id] = $o;
			$payment_method[] = $orders[$o->id]->payment_method_id;
		}

после 


		// Метки заказов
		$orders_labels = array();
	  	foreach($this->orders->get_order_labels(array_keys($orders)) as $ol)
	  		$orders[$ol->order_id]->labels[] = $ol;

добавляем 


		// Способ оплаты
		$payment_methods = $this->payment->get_payment_method(
			$payment_method
		);
		
		$payment_currency = $this->money->get_currency(
				intval($payment_methods->currency_id)
		);

после 


$this->design->assign('orders', $orders);

добавляем


$this->design->assign('payment_currency', $payment_currency);

https://prnt.sc/10f32e7

вывод

{$order->total_price|convert:$payment_currency->id} {$payment_currency->sign}

Уважаемый Алекс, мне кажется нужно добавлять payment_currency как label добавляются, к каждому заказу вот так ->

$orders_labels = array();
        foreach($this->orders->get_order_labels(array_keys($orders)) as $ol) {
            $orders[$ol->order_id]->labels[] = $ol;
        }

Вот что передается в шаблон через {debug} -> https://ibb.co/z7HMzc8

 

Link to post
Share on other sites
1 час назад, Asilis сказал:

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

Если подходить формально, то именно сюда, ибо форум и предназначен для обсуждения вопросов, связанных с Simpla, в частности, с доработками.

Есди подходить неформально, то с моей стороны были найдены и точно описаны две ошибки. Одну из них уважаемый разработчик даже поправил (хотя не до конца верно).

Обычно разработчики понимают, что нахождение ошибок - непростая задача, и благодарят за указания на ошибку, так как понимают, что ее исправление только сделает разработку лучше. Но c Вашей стороны несколько иначе.

А если считаете, что найти ошибку - это ерунда, то возьмите предложенное решение и найдите там все ошибки...  И исправьте...

Link to post
Share on other sites
1 час назад, Asilis сказал:

Уважаемый Алекс, мне кажется нужно добавлять payment_currency как label добавляются, к каждому заказу вот так ->


$orders_labels = array();
        foreach($this->orders->get_order_labels(array_keys($orders)) as $ol) {
            $orders[$ol->order_id]->labels[] = $ol;
        }

Вот что передается в шаблон через {debug} -> https://ibb.co/z7HMzc8

 

@Asilis, вам не проще будет на момент заказа к итоговой сумме прибавлять % от выбранного метода оплаты и записывать эту сумму в базу как итоговую?

Link to post
Share on other sites

В стандартной Simpla заказ создается БЕЗ указания метода оплаты. Метод оплаты выбирается позже к УЖЕ имеющемуся заказу. Поэтому предложение выглядит бессмысленно...

Можно, конечно, прибавлять % в момент выбора (или изменения) метода оплаты, но это, скорее всего, создаст добавочные сложности...

Link to post
Share on other sites
12 минут назад, phukortsin сказал:

В стандартной Simpla заказ создается БЕЗ указания метода оплаты. Метод оплаты выбирается позже к УЖЕ имеющемуся заказу. Поэтому предложение выглядит бессмысленно...

Можно, конечно, прибавлять % в момент выбора (или изменения) метода оплаты, но это, скорее всего, создаст добавочные сложности...

знаю, что стандартно вывод методов на странице order.

но можно вывести методы оплаты на станицу cart и во все прибавлять % к сумме при выборе метода

сумма заказа: 19000₽

выбранный способ оплаты: картой банка (+3%)

итого: 19570₽

Link to post
Share on other sites
21 минуту назад, alexivchenko сказал:

знаю, что стандартно вывод методов на странице order.

но можно вывести методы оплаты на станицу cart и во все прибавлять % к сумме при выборе метода

сумма заказа: 19000₽

выбранный способ оплаты: картой банка (+3%)

итого: 19570₽

Конечно, можно. Но зачем? Чтоб еще сложнее стало? Редко когда на форуме появлялись решения, аккуратно работающие с изменением цен в заказе, обычно в изменениях такого функционала ошибок бывает немерено...

Первоначальный вариант, когда надо только ПОКАЗАТЬ текущие данные в админке на странице заказов, по-моему, в разы проще...

Link to post
Share on other sites
15 часов назад, phukortsin сказал:

Конечно, можно. Но зачем? Чтоб еще сложнее стало? Редко когда на форуме появлялись решения, аккуратно работающие с изменением цен в заказе, обычно в изменениях такого функционала ошибок бывает немерено...

Первоначальный вариант, когда надо только ПОКАЗАТЬ текущие данные в админке на странице заказов, по-моему, в разы проще...

Всё верно! Лучше ничего не обрабатывать лишний раз, всех возможных вариантов такой обработки можно не учесть, а потом пожинать плоды внедрения такой обработки. По поводу моего вопроса, то он не настолько острый. Работе магазина не мешает, я лишь хотел чтоб правильно отображал там где из коробки должен. Но маркеры которые я леплю что это безнал или карта мне точно показывают что это. Поэтому вопрос не спешный, странно правда что раньше это никого не смущало))))) Впринципе очередная задача толкающая на продолжение освоения ООП скучными вечерами или в редкие минуты свободного времени.

Link to post
Share on other sites

в simpla/OrdersAdmin.php

заменить

		// Отображение
		$orders = array();
		foreach($this->orders->get_orders($filter) as $o)
			$orders[$o->id] = $o;

на 

		// Отображение
		$orders = array();
		foreach($this->orders->get_orders($filter) as $o) {
			$orders[$o->id] = $o;
			
			$payment_method = $this->payment->get_payment_method($o->payment_method_id);
			$payment_currency = $this->money->get_currency(intval($payment_method->currency_id));
			$orders[$o->id]->payment_currency = $payment_currency;
		}

вывод в шаблоне 

{$order->total_price|convert:$order->payment_currency->id} {$order->payment_currency->sign}

 

Edited by alexivchenko
Link to post
Share on other sites
12 минут назад, phukortsin сказал:

Такое работать будет, результат даст верный, то ужас как нерационально.

Жду рационального решения))

Link to post
Share on other sites

Ваше решение выполняет для заказа ДВА запроса к базе - один для получения данных по методу платежа, другой по валюте. Если на странице 5 заказов, то будет 10 однотипных запросов. Если 50 заказов -то 100 запросов. Встречались админы, которые и 1000 заказов выводят. И если на странице применяются 2-3 разработки, подобных Вашей, то иногда и вообще сервер намертво зависает...

А правильное решение рядом - в том же файле смотрите, например, как извлекаются данные по меткам для заказов...

 

Link to post
Share on other sites
45 минут назад, phukortsin сказал:

Ваше решение выполняет для заказа ДВА запроса к базе - один для получения данных по методу платежа, другой по валюте. Если на странице 5 заказов, то будет 10 однотипных запросов. Если 50 заказов -то 100 запросов. Встречались админы, которые и 1000 заказов выводят. И если на странице применяются 2-3 разработки, подобных Вашей, то иногда и вообще сервер намертво зависает...

А правильное решение рядом - в том же файле смотрите, например, как извлекаются данные по меткам для заказов...

 

То есть проще написать 482 символа, 408 пробелов и 75 слова, вместо рационального решения.

Link to post
Share on other sites
1 час назад, alexivchenko сказал:

То есть проще написать 482 символа, 408 пробелов и 75 слова, вместо рационального решения.

Написать вам готовое решение, это значит забрать у вас часть опыта, вы просто забудете и все. Вам дают хорошую подсказку, если ей воспользуйтесь то и решение сделаете и свой скилл прокачаете.

Link to post
Share on other sites
6 минут назад, Kami сказал:

Написать вам готовое решение, это значит забрать у вас часть опыта, вы просто забудете и все. Вам дают хорошую подсказку, если ей воспользуйтесь то и решение сделаете и свой скилл прокачаете.

Тут полностью солидарен))

Link to post
Share on other sites
6 часов назад, alexivchenko сказал:

в simpla/OrdersAdmin.php

заменить


		// Отображение
		$orders = array();
		foreach($this->orders->get_orders($filter) as $o)
			$orders[$o->id] = $o;

на 


		// Отображение
		$orders = array();
		foreach($this->orders->get_orders($filter) as $o) {
			$orders[$o->id] = $o;
			
			$payment_method = $this->payment->get_payment_method($o->payment_method_id);
			$payment_currency = $this->money->get_currency(intval($payment_method->currency_id));
			$orders[$o->id]->payment_currency = $payment_currency;
		}

вывод в шаблоне 


{$order->total_price|convert:$order->payment_currency->id} {$order->payment_currency->sign}

 

Всё работает отлично! Единственное у меня наименование валюты не показывал пока я не передал в шаблон payment_currency. Итоговый вариант у меня --> 

// Отображение
		$orders = array();
		foreach($this->orders->get_orders($filter) as $o) {
			$orders[$o->id] = $o;
			$orders[$o->id]->purchases = $this->orders->get_purchases(array('order_id'=>$o->id)); //Здесь у меня список товаров по клику выводятся в каджом заказе
			$payment_method = $this->payment->get_payment_method($o->payment_method_id);
			$payment_currency = $this->money->get_currency(intval($payment_method->currency_id));
			$orders[$o->id]->payment_currency = $payment_currency;
			$this->design->assign('payment_currency', $payment_currency);
		}

Прошу прислать номер карты в личку для персональной благодарности. Благодарю за бескорыстную помощь!

Link to post
Share on other sites
9 часов назад, Asilis сказал:

Всё работает отлично! Единственное у меня наименование валюты не показывал пока я не передал в шаблон payment_currency.

Переменную $payment_currency нет смысла передавать в шаблон, да еще и в цикле. Очевидно же, что она должна иметь не одно значение, а индивидуальное значение у каждого заказа.

Если у Вас работает верно, то либо Вы ее в шаблоне не используете, либо Вы пока еще не обнаружили тот случай, когда работает неправильно.

А еще в коде добываются данные по покупкам каждого заказа В ЦИКЛЕ, что есть  добавочная нерациональность.

Но если Вас все устраивает, то примите мои поздравления...

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...