6cnitymi
-
Публикаций
9 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные 6cnitymi
-
-
В 06.04.2023 в 03:31, shooroop сказал:
есть
Можете поделиться, пожалуйста?
-
В 31.03.2023 в 16:15, Dmitry86 сказал:
Ни у кого не найдётся архива с файлами для этого решения?
тоже интересует.. вдруг у кого-нибудь остался?
-
1 час назад, alexivchenko сказал:
strtolower - преобразует все символы в нижний регистр
Да, благодарю!
Функция взята с просторов гитхаба, потому не особо всматривался в неё
-
Приветствую, друзья!
На форуме уже присутствует старая тема "Объединение товаров в варианты":На днях столкнулся с аналогичной проблемой, в связи с чем и отправился на поиски решения, найдя эту тему.
В моём случае, решение оказалось муторным и не совсем удобным, т.к. каждое объединение необходимо вручную исправлять, потому решил его немного расширить, может кому-то тоже понадобится.
Собственно, к сути - при выборе нескольких товаров, с одним, по сути, названием (например, "Термос Супер (Black)", "Термос Супер (White)", "Термос Супер (Yellow)"),
при объединении, мы получим товар "Термос Супер" и три варианта - Black, White и Yellow.
Понимаю, что формат выгрузки прайсов у кого-то может быть специфическим, но по моему опыту, чаще всего это именно вид "Категория Производитель Модель (Модификация)".
Само решение:
1. В ProductsAdmin добавляем новую функцию (перед последней закрывающей фигурной скобкой):function longest_common_substring($words) { $words = array_map('strtolower', array_map('trim', $words)); $sort_by_strlen = create_function('$a, $b', 'if (strlen($a) == strlen($b)) { return strcmp($a, $b); } return (strlen($a) < strlen($b)) ? -1 : 1;'); usort($words, $sort_by_strlen); $longest_common_substring = array(); $shortest_string = str_split(array_shift($words)); while (sizeof($shortest_string)) { array_unshift($longest_common_substring, ''); foreach ($shortest_string as $ci => $char) { foreach ($words as $wi => $word) { if (!strstr($word, $longest_common_substring[0] . $char)) { break 2; } } $longest_common_substring[0].= $char; } array_shift($shortest_string); } usort($longest_common_substring, $sort_by_strlen); return array_pop($longest_common_substring); }
2. Немного меняем механику в блоке "combine":
case 'combine': { $combine_id = $ids[0]; $parent_name = array(); $sub_variants = $this->variants->get_variants(array('product_id'=>$ids)); foreach ($sub_variants as $variant) { $native_product = $this->products->get_product((int)$variant->product_id); array_push($parent_name, $native_product->name); } $honor_name = $this->longest_common_substring($parent_name); foreach ($sub_variants as $variant) { $native_product = $this->products->get_product((int)$variant->product_id); $variant->product_id = $combine_id; $n = $native_product->name; $n = str_ireplace($honor_name, '', $n); $n = str_ireplace(')', '', $n); if (empty($variant->name)) $variant->name = $n; unset($variant->infinity); $this->variants->update_variant($variant->id, $variant); if (is_object($native_product) && ($native_product->id != $combine_id)) { $products_to_delete[] = $native_product; } } foreach ($products_to_delete as $p) { $this->products->delete_product((int)$p->id);} $this->products->update_product($combine_id, array('name'=>rtrim($honor_name," ("))); break; }
Собственно, на этом все изменения. Код можно оптимизировать, например, убрав два цикла перебора вариантов в один, и тд
Из явных минусов только один - родительский товар теряет регистр, вместо "Термос Супер Пупер М-1 (Black)" мы получаем "Термос супер пупер м-1", но это мелочи, не влияющие на работу.
Надеюсь, решение кому-нибудь окажется полезным. -
Добрый день, давно стояла необходимость в учете остатков и себестоимости товара.
Решил попробовать реализовать в самой симпле. По аналогии с заказами и продажами (таблица с перечнем товаров заказа), создал еще две таблицы- поставки и закупки (перечень товаров в поставке). Механику и api реализовал по аналогии с продажами (Orders). В админке сделал отдельное окно для поставок. Так же, добавил таблицу для складов, и в таблицы поставок и заказов добавил столбец warehouse_id, для контроля склада.
всё работает хорошо - поставки сохраняются в поставки, заказы клиентов в заказы клиентов.
Задумка в следующем - реализовать механику,подобную сервису МойСклад: что бы остатки и себестоимость товара просчитывались и выводились динамически, а не хранились в базе данных.Набросал код запроса:
SELECT DATE, amount, price, order_id, stock - amount AS stock from (select DATE, product, variant, amount, price, order_id, (case when product=@prod then @costnew:=(case when amount>0 then (@costnew*@ost+amount*price)/(@stock+amount) else @costnew end) else @costnew:=price END) costnew, (case when product=@prod then @stock:=@stock+amount else @stock:=amount END) stock, @prod:=product FROM ((SELECT pu.product_id AS product, pu.variant_id AS variant, pu.amount AS amount, pu.price AS price, pr.date, pr.warehouse_id, 0 AS order_id FROM s_purchases AS pu LEFT JOIN s_procurements AS pr ON pr.id=pu.order_id WHERE pr.date<(SELECT DATE FROM s_orders WHERE id=3)) UNION (SELECT s.product_id AS product, s.variant_id AS variant, -s.amount AS amount, s.price AS price, o.date, o.warehouse_id, order_id FROM s_sales AS s LEFT JOIN s_orders AS o ON o.id=s.order_id WHERE o.date<=(SELECT DATE FROM s_orders WHERE id=3))) dat,(select @prod:=0, @stock:=0, @costnew:=0.0) u order by product,DATE) d ORDER BY DATE DESC LIMIT 10
Логика запроса - соединить таблицу закупок товаров и таблицу продаж товаров, и на основе этой общей таблицы получить остаток и себестоимость товара в заказе на конкретную дату (дату заказа).
Хотелось бы услышать мнение местных профессионалов - на сколько это хорошее решение, и не аукнится ли оно мне со временем/ростом количества заказов? Если же решение не из лучших, быть может кто-то сможет предложить более грамотное решение?
И, да, я понимаю, что симпла это CMS, и может не совсем рационально пихать в нее CRM и WMS механики, но почему бы и нет? Система простая, открытая, а иметь все под рукой было бы идеально.
Заранее, спасибо! -
Добрый день!
Пытаюсь сделать ограничение для скидки, т.к. она может суммироваться исходя из разных аспектов (скидка пользователя, скидка от суммы, скидка по купону и тд), может выходить так, что скидка на заказ будет больше допустимой (цена с учетом скидки будет ниже чем себестоимость товара).
Добавил к товарам в БД и в симплу поле с себестоимостью товара. Хотелось бы при работе с корзиной\заказом, суммировать стоимость и себестоимость товаров, и исходя из этих значений просчитывать максимальную скидку, которая может быть.
Например, есть товар с себестоимостью 600р, и розницей 1000р и клиент со скидкой 20%. Соответственно скидка максимальная может быть лишь 40%.
Клиент добавил его в корзину, перешёл на страницу оформления заказа, видит - заказ на 1000р, со скидкой 200р, итоговая цена 800р. 20%
Клиент выставил количество в 20 штук, ему добавилась скидка от суммы, 10% - заказ на 1000р, со скидкой 300р, итоговая цена 700р. 30%
Ввел купон на скидку в 15%, ему выставилась еще скидка 10% - заказ на 1000р, со скидкой 400р, итоговая цена 600р. 40% (5% получается просто не учитываются)
Клиент добавил низкомаржинальный товар, потолок скидки еще упал, например, до 35%, или наоборот, вырос до 45% и тд
Подскажите, в сторону каких файлов копать?
View вроде отвечает только за сохранение этого всего и внесения в базу. Можно и на этом уровне, конечно, понижать скидку, но это некрасиво - клиент оформляет заказ, там скидка 50%, нажимает Оформить - открывается оформленный заказ а в нем уже скидка 30%. -
7 часов назад, phukortsin сказал:
В строке 131.
Благодарю, вопрос решен!
-
Коллеги, столкнулся с необходимостью синхронизации товаров между сайтом и самописной программой учета.
Самым доступным вариантом посчитал штатный импорт из csv - программа учета выгружает прайс со всей информацией о товарах в файл export.csv, в ручном режиме сайт данный файл полностью принимает и успешно импортирует.
Задача показалась простой - создал в корне сайта папку rest, туда скопировал файл import.php (ajax'овский) из админки, туда же по FTP выгружаю export.csv, и через CURL вызываю http://сайт/rest/import.php.
В import.php переписал все пути, убрал проверки прав, файл export.csv он видит, читает, но товары не импортирует. В ответе выдаёт {"end":false,"from":50035,"totalsize":102471,"items":0}
Подскажите, где я допустил ошибку?
Файл import.php
Файл export.csv
[2.*] Прикрепленные файлы
в Готовые решения
Опубликовано
Добрый день!
Есть у кого-нибудь возможность залить повторно?
Или выложить содержимое файла Files.php?
Спасибо!