Счет на оплату безналичным расчетом для JoomShopping

JoomShopping компании MAXX marketing достойный компонент для создания интернет-магазинов. Но как и любой другой компонент, он имеет свои недостатки и порой требует немалых правок и изменений. В этой статье поговорим о том, как реализовать способ оплаты «Счет на оплату безналичным расчетом».

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

Совет: Прежде чем производить какие-либо изменения, сделайте резервные копии файлов, с которыми работаете.

Совет: Если у Вас нет никакого опыта редактирования кода, Вы можете купить полноценное дополнение со всеми изменениями, описанными в данной статье.

Как это работает?

Имеется два варианта решения вопроса.

1 — Свой вариант шаблона PDF

Для начала скачайте файл шаблона PDF (generete_pdf_order.php) из вложения в конце статьи, либо, если Вы не плохо обладаете знаниями PHP можете сами отредактировать имеющийся шаблон.

Итак, скачанный файл загрузите в директорию сайта /components/com_jshopping/lib/ заменив имеющийся.

В административной части сайта в разделе «Опции» создайте новый способ оплаты, если это необходимо.

Перейдите в настройки магазина на вкладку «Заказ» и установите галочку напротив значения «Присылать PDF-счет для заказчика», для того, чтобы счет приходил на почту заказчику в виде вложения.

Также в настройках магазина перейдите на вкладку «Информация о магазине» и заполните все поля в соответствии с пояснениями на изображении ниже

"Счет на оплату безналичным расчетом" для JoomShopping. Способ 1-ый.
«Счет на оплату безналичным расчетом» для JoomShopping. Способ 1-ый.

После сохранения всех данных, там же на вкладке «Информация о магазине» в самом низу, кликнув на ссылку «Просмотреть PDF», Вы сможете увидеть как примерно будет выглядеть Ваш счет.

Прежде, чем переходить к другим настройкам, давайте разберем второй способ.

2 — Addon RUS Invoice

Данный метод более оптимален, т.к. Вы спокойно сможете обновлять компонент JoomShopping.

Разработчики позаботились и о русскоязычном населении, предложив дополнение для компонента. Скачайте это дополнение по ссылке или из вложения в конце статьи. Установите его с помощью «Установка и обновление» внутри компонента JoomShopping.

Перейдите в «Опции → Дополнения» и нажмите кнопку редактирования напротив установленного дополнения. Укажите все необходимые данные в открывшемся окне.

В административной части сайта в разделе «Опции» создайте новый способ оплаты, если это необходимо.

Перейдите в настройки магазина на вкладку «Заказ» и установите галочку напротив значения «Присылать PDF-счет для заказчика», для того, чтобы счет приходил на почту заказчику в виде вложения.

Также в настройках магазина перейдите на вкладку «Информация о магазине» и заполните все поля в соответствии с пояснениями на изображении ниже

"Счет на оплату безналичным расчетом" для JoomShopping. Способ 2-ой.
«Счет на оплату безналичным расчетом» для JoomShopping. Способ 2-ой.

Как добавить подпись и штамп (печать)?

Вариант, который использую я — в настройках магазина на вкладке «Информация о магазине» в самом низу есть возможность указать изображения для верхнего и нижнего колонтитула. Добавьте в верхний колонтитул изображение штампа (печати), а в нижний — изображение подписи. Изображения должны быть на белом фоне и в формате JPG.

Теперь необходимо отредактировать файл шаблона PDF. Если Вы воспользовались первым способом, тогда Вам необходимо редактировать файл /components/com_jshopping/lib/generete_pdf_order.pdf, если же второй — /plugins/jshoppingorder/addon_rus_invoices_for_payment/ addon_rus_invoices_for_payment.php

Я использую второй метод, думаю им воспользуются большинство, поэтому опишу как править этот шаблон.

В файле addon_rus_invoices_for_payment.php найдите и закомментируйте следующие строки:

$pdf->Image($jshopConfig->path.'images/header.jpg',1,1,$jshopConfig->pdf_header_width,$jshopConfig->pdf_header_height);
$pdf->Image($jshopConfig->path.'images/footer.jpg',1,265,$jshopConfig->pdf_footer_width,$jshopConfig->pdf_footer_height);

Поднимитесь и найдите следующие строки

$pdf->MultiCell(180, 1 , $this->mb_ucfirst($this->SumProp($this->formatprice($order->order_total),$order->currency_code)),'0','L');
$y = $y + 20;

Эта строка выводит итоговую стомость в счет и делает отступ до подписей директора и бухгалтера. После отступа сделайте вывод изображений:

$pdf->MultiCell(180, 1 , $this->mb_ucfirst($this->SumProp($this->formatprice($order->order_total),$order->currency_code)),'0','L');
$y = $y + 20; 
$pdf->Image($jshopConfig->path.'images/header.jpg',120,$y-13,$jshopConfig->pdf_header_width,$jshopConfig->pdf_header_height);
$pdf->Image($jshopConfig->path.'images/footer.jpg',70,$y-17,$jshopConfig->pdf_footer_width,$jshopConfig->pdf_footer_height);

Где первое изображение — это верхний колонтитул (штамп), а второе — нижний колонтитул (подпись). Откалибруйте позицию для изображений по горизонтали (у меня это 120 и 70, для первого и второго изображений соответственно) и по вертикали (у меня это $y-13 и $y-17).

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

Как отправлять счет только при определенных способах оплаты?

Может получиться так, что Вы не намерены отправлять PDF счет по всем способам оплаты, тогда Вам достаточно отредактировать файл /components/com_jshopping/models/checkout.php

Найдите строки:

$pdfsend = 1;
if ($jshopConfig->send_invoice_manually && !$manuallysend) $pdfsend = 0;

И замените их наследующие:

$pdfsend = 1;
if (($jshopConfig->send_invoice_manually && !$manuallysend) || $order->payment_method_id != 8) $pdfsend = 0;

Где $order->payment_method_id != 8 означает в моём случае, что не нужно отсылать PDF счет, если выбран способ оплаты с ID 8. Узнать свои идентификаторы оплаты Вы можете в административной части сайта, перейдя в «Опции → Способы оплаты» магазина, и просмотрев поле «id» напротив интересующих Вас способов оплаты.

UPDATE:

Начиная с версии 4.11 в Joomshopping была переделана структура функций и моделей, поэтому описанный выше код для отправки счета при определенных методах оплаты отсутствует. Для того, чтобы решить этот вопрос, необходимо открыть файл ordermail.php, расположенный в каталоге /components/com_jshopping/models и найти в нем следующий код:

if ($pdfsendtype){
	$mailer->addAttachment($jshopConfig->pdf_orders_path."/".$this->order->pdf_file);
}

Здесь необходимо исправить условие отправки PDF-счета следующим образом:

if ($pdfsendtype && $this->order->payment_method_id != 8){
	$mailer->addAttachment($jshopConfig->pdf_orders_path."/".$this->order->pdf_file);
}

Как и выше, с помощью $this->order->payment_method_id != 8 мы указали ID метода оплаты, для которого не нужно отправлять PDF-счет.

В результате всех проделанных манипуляций получаем примерный результат, изображенный ниже

"Счет на оплату безналичным расчетом" для JoomShopping. PDF счет.
«Счет на оплату безналичным расчетом» для JoomShopping. PDF счет.

Как выводить правильные единицы измерения?

Те, кто решил воспользоваться дополнением Addon RUS Invoice, обратили внимание, что независимо от настроек в PDF-счете единица измерения остается неизменной, постоянно килограммы. Дело в том, что разработчики не позаботились о корректном отображении единиц измерения.

Итак, у нас уже установлен Joomshopping, Addon RUS Invoice и всё настроено должным образом. В Joomshopping в настройках имеется возможность изменить единицы измерения, но они применяются ко всем товарам, хотя нам необходимо, чтобы у разного типа товаров были свои единицы измерения.

Для этого переходим в «Joomshopping -> Настройки -> Функции магазина». Отмечаем галочки «Базовая цена» и «Единицы измерения». Также, в настройках необходимо перейти на вкладку «Заказ» и убедиться, что установлена галочка напротив поля «Базовая цена», иначе в таблицу заказов не будет заноситься информация о базовой цене и единицах измерения.

В «Joomshopping –> Опции» появится раздел «Единицы измерения», где мы можем добавить нужные для нас. Теперь переходим в карточку товара и на вкладке «Информация о товаре» в самом низу выбираем необходимую нам единицу измерения. Учитывая, что базовая цена рассчитывается как цена/базовая цена, то в поле «базовая цена» указываем единицу (1). Вам не обязательно работать с базовой ценой товара, этот функционал необходим нам исключительно для единиц измерения.

После того, как мы настроили все товары. Открываем файл /plugins/jshoppingorder/addon_rus_invoices_for_payment/ addon_rus_invoices_for_payment.php и находим следующую строчку:

$pdf->MultiCell(20, 1, _JSHOP_ADDON_RUS_INVOICES_PAYMENT_CHT, 0 , 'C');

Как видите, разработчики выводят единицу измерения обычной текстовой константой. Давайте исправим её на следующую:

$pdf->MultiCell(20, 1, $prod->basicpriceunit, 0 , 'C');

Совет: Для тех, кому интересно, последний символ в строке означает выравнивание и может принимать следующие значения: L – по левому краю; R – по правому краю; C – по центру.

Если Вы сейчас попробуете просмотреть PDF-счет из административной части («Joomshopping -> Настройки -> Информация о магазине»), то увидите, что поле «Единица» пустое. Это связано с тем, что в PDF-счет таким способом добавляются демо-данные. Поэтому, чтобы убедиться в правильности проделанных действий, необходимо с лицевой части сайта произвести покупку товара.

Важно: Помните, что сделанные заказы в Joomshopping заносятся в базу данных единожды. Если Вы произвели какие-либо изменения в товарах и хотите увидеть результат, Вам необходимо сделать новый заказ.

Ничего сложного!

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

Вложения

PHP файл для замены имеющегося файла генерации PDF счета
Аддон для компонента JoomShopping. Устанавливать через "Установка и обновления" самого JoomShopping

Комментарии

  • Виктор
    Вопрос по вставки подписей. Печать нормально вставляется подпись руководителя тоже. Решил вставить подпись главного бухгалтера, и тут затык. Делать один файл с двумя подписями? Или Каждая подпись отдельно? Что у меня ни так ни так не получилось. Если по отдельности, как его подключить, пробовал сразу две, отображается старый. Думал кэш, менял браузеры, не получается.
    • Blog About
      Т.к. в JoomShopping в настройках есть только 2 поля для картинок: верхний и нижний колонтитул, отсюда приходится одно поле выделить под печать, а второе под подпись.
      Но подписей две, потому их объединяем в одну картинку.
      Если Вы хотите разделить их, то загрузите в каталог /components/com_jshopping/images/ две картинки с подписями, например footer1.jpg и footer2.jpg

      После этого отредактируйте код
      $pdf->Image($jshopConfig->path.'images/header.jpg',120,$y-13,$jshopConfig->pdf_header_width,$jshopConfig->pdf_header_height);
      $pdf->Image($jshopConfig->path.'images/footer.jpg',70,$y-17,$jshopConfig->pdf_footer_width,$jshopConfig->pdf_footer_height);

      Например на такой, добавив третью картинку:
      $pdf->Image($jshopConfig->path.'images/header.jpg',120,$y-13,$jshopConfig->pdf_header_width,$jshopConfig->pdf_header_height);
      $pdf->Image($jshopConfig->path.'images/footer1.jpg',70,$y-17,$jshopConfig->pdf_footer_width,$jshopConfig->pdf_footer_height);
      $pdf->Image($jshopConfig->path.'images/footer2.jpg',70,$y-14,$jshopConfig->pdf_footer_width,$jshopConfig->pdf_footer_height);

      Возможно Вам придется подкорректировать ширину, высоту, позицию по x, y, собственно можете заменить переменные на конкретные значения $pdf->Image(PATH,X,Y,WIDTH,HEIGHT);

      Что касательно отображения старого - как проверяете? Обновляете страницу при просмотре PDF? Если да, то так не сработает, нужно каждый раз формировать новый, для этого либо нажмите "Просмотреть pdf" в разделе "Компоненты - JoomShopping - Настройки - Информация о магазине", либо "Отправить письмо" внутри заказа для которого смотрите счет.
      Если же всё так и делали, то проверьте, верная картинка отображается по адресу /components/com_jshopping/images/footer.jpg может не загрузилась.
      • Виктор
        Спасибо, получилось с 2 картинками. Со сдвоенной не получилось, отобрается старая, хотя удалил ее физически. Чистил кэш, менял браузеры, чистил папку pdf_orders. Но это наверное другая история.
  • Виктор
    После обновления версии магазина до 4.18.7 счет стал дублироваться. Версия из аддона отправляется, одновременно отправляется стандартная форма счета. Куда смотреть?
    • Blog About
      Добрый день. Что именно подразумеваете под "стандартная форма счета"? Стандартный PDF счет, т.е. Вам приходит 2 разных PDF файла? Или именно письма дублируются? Сейчас проверил на имеющихся сайтах и даже с нуля поднял чистый на JoomShopping 4.18.7, проблем никаких не возникает, ни с аддоном, ни без него, ни как-либо еще.
      Если у Вас дублируются письма, проверьте, что у Вас Email магазина не совпадает с Email в заказе, иначе да, Вы будете получать 2 письма, как админ и заказчик.
      • Виктор
        Приходят именно два разных файла. Один пдф из аддона, другой файл, который по идее не должен приходить, стандартный, называется счет на поставку. С информацией о товаре и картинкой товара. Два письма рядом, приходят одно за другим. Появилась проблема после обновления джумшопинг. Я пробовал переустанавливать аддон, но безрезультатно.
        • Blog About
          К сожалению воспроизвести подобную проблему не удалось. И я не уверен, что проблема может быть именно в этом аддоне, возможно еще что-то установлено? Здесь нужно разбираться конкретно с Вашим сайтом. Вы можете попробовать выслать бэкап файлов сайта и базы данных мне на почту info@blog-about.ru - в свободное время могу попробовать посмотреть, но ничего не обещаю.
  • 310
    Добрый день.
    А где взять сам способ оплаты "Выставить счет"?
    • Blog About
      Добрый день. Просто создаете обычный способ оплаты, а потом читаете блок статьи "Как отправлять счет только при определенных способах оплаты?"
  • Алексей
    Отличный способ высылать счет по определенной способу оплаты. Спасибо.
    Но не как не могу решить вопрос - Присылать PDF-счет по определенному статусу заказа.
    То есть, когда статус меняется на Ожидающий например, приходит счет. А при всех остальных статусах заказа не приходит. Это очень часто бывает нужно! Видел настройку вручную отправлять, но лучше бы автоматически при изменении статуса это происходило. Не знаю где копать.
    • Blog About
      Добрый день.

      Отправка сообщения вручную и смена статуса это совершенно две разные функции, которые отправляют разные типы писем.
      При смене статуса не прикрепляются никакие файлы.
      Когда вызываем отправку письма вручную, то вызывается модель checkout, в которой как раз и вносили изменения для отправки PDF по виду оплаты, эта же модель вызывается когда пользователь оформляет заказ, в ней как раз и прописаны все функции для генерации PDF и добавления вложения.
      А вот когда меняем статус, тут уже вызывается другая модель - orderChangeStatus, тут даже в коде не за что подцепиться и поправить, чтобы добавлялся файл.

      Могу лишь дать направление:
      При смене статуса вызывается функция _updateStatus (строка 212 файла orders.php в каталоге /administrator/components/com_jshopping/controllers/)
      Внутри этой функции подключается модель orderChangeStatus в которой задаются нужные данные - файл orderchangestatus.php в каталоге /components/com_jshopping/models/ именно в этом файле и нужно что-то и как-то будет реализовать для отправки.
      Но тут даже я не могу ничего подсказать.
      В идеале конечно же писать плагин, чтобы не вносить изменения в ядро, т.к. после обновления все изменения слетят.
      Я даже в принципе не могу сказать, возможно ли что-то подобное реализовать.

      По аналогии со способом оплаты, статус заказа можно получить $order->order_status
  • Эдуард
    Добрый день, не подскажите как решить проблему, письма не отправляются ни админу ни заказчику, правда сайт еще на локальном сервере, это может как то повлиять на результат? При этом в JoomShoping заказы отображаются и бланк счета есть и все устраивает.
    • Blog About
      Добрый день.
      Локальный сервер никуда не отправляет письма, они хранятся во временной папке на компьютере. Например OpenServer хранит письма в каталоге куда установили его в папке \userdata\temp\email
      В остальных не знаю, нужно смотреть документацию.
      • Эдуард
        Да с локальным сервером так и вышло, спасибо за консультацию. Но вот "клиенту" все равно письмо не приходит, может подскажете, те админу все приходит, и в течении минуты. Заранее спасибо
        • Blog About
          Тут уже нужно смотреть настройки сайт и сервера. Также зависит от почтового ящика, куда шлете. Если Вы шлете через обычный PHP mail(), то вероятнее всего письма падают в спам, либо спам-фильтр вообще их не пропускает. Тут нужно настраивать SMTP. Иногда может потребоваться DKIM запись.
          Может быть много причин, по которым письма не доходят.
  • Виктор
    Как добавить надпись без налога НДС ? Есть ли решение выводить на экран эту счет после оформления заказа? Готов оплатить работу.
    • Blog About
      Добрый день. Вообще Вы можете добавлять любые надписи прямо в файл, главное найти правильное место. Посмотрите этот комментарий https://blog-about.ru/blog/schet-na-oplatu-beznalichnym-raschetom-dlya-joomshopping/#comment-5243 в нем разбираем, как убрать надпись, Вы аналогично можете попробовать добавить свою. Если не получится, сообщите, посмотрю.
      По поводу перенаправления. Ни разу не пробовал, да и не сталкивался, сегодня/завтра посмотрю, попробую на тестовом, если что-то получится, сообщу.
      • Blog About
        Открываем файл /components/com_jshopping/controllers/checkout.php и находим функцию function finish(){ примерно в 535-ой строке.

        В этой функции необходимо сразу после строки:
        JDispatcher::getInstance()->trigger('onBeforeDisplayCheckoutFinish', array(&$text, &$order_id));

        Добавить свои:
        $order = JSFactory::getTable('order', 'jshop');
        $order->load($order_id);

        И после
        $view->assign('text', $text);

        Добавить строку
        $view->assign('pdf', $order->pdf_file);



        Теперь необходимо открыть файл /components/com_jshopping/templates/ВАШ_ШАБЛОН/checkout/finish.php
        В этом файле выводится фраза указаная в административной панели, либо фраза по умолчанию. Сразу после условия проверки (в конце файла) добавьте:
        <?php if (!empty($this->pdf)) { ?>
        <p><a href="/components/com_jshopping/files/pdf_orders/<?php echo $this- rel="nofollow ugc">pdf; ?>" target="_blank">Открыть счет в новом окне</a></p>
        <?php } ?>

        В этом случае пользователь увидит ссылку для перехода на счет сразу под текстом уведомления о соврешении заказа.

        Либо добьавьте код
        <?php if (!empty($this->pdf)) { ?>
        <script>location.replace("<?php echo '/components/com_jshopping/files/pdf_orders/' . $this->pdf; ?>");</script>
        <?php } ?>

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

        Протестировано, работает.
  • Виталий
    Круто, то что нужно.
    Подскадите, у меня валют не руб, а грн (UAH) и она вовсе в счете не выводится. Только сумма - 145.00

    Как поправить? (падежи рубль/я/ей это уже моя забота) но как вообще отобразит валюту?

    Заранее спасибо
    • Blog About
      Добрый день. В файле /plugins/jshoppingorder/addon_rus_invoices_for_payment/ addon_rus_invoices_for_payment.php в самом конце есть функция function SumProp($srcsumm,$val_rub='', $val_kop='')
      В этой функции есть проверка условий:
      if($val_rub=='RUR') {
      }elseif($val_rub=='USD') {
      }elseif($val_rub=='EUR') {
      Соответственно Вам необходимо прописать дополнительно своё условие на проверку для UAH.
      • Виталий
        Получается я могу изменить c USD на UAH?
        но все равно валюта не подставляется( хм
        • Blog About
          Вообще да. Но, я могу сейчас ошибаться, т.к. давно уже не пользовался этим методом. Посмотрите мой комментарий ниже https://blog-about.ru/blog/schet-na-oplatu-beznalichnym-raschetom-dlya-joomshopping/#comment-7026
          Если не поможет, попробую поднять у себя сайт и протестировать сам.
        • Blog About
          Перепроверил. Да, Вам действительно нужно в условие подставить значение из поля "Код" http://joxi.ru/RmzoPNBcRy7Wx2
          • Виталий
            Спасибо, что тратите время. Но знаете, я вообще, добавил в магазине валюты и дол и евро, но в счете ни одна валюта не подставляется.
            аддон последний - 1.0.7
            JoomShopping 4.18.4
            (в родном счете все ок)
            • Виталий
              Разобрался. В файле addon_rus_invoices_for_payment.php
              везде было закомментировано значение currency_code, разкоментил - все ОК
              Спасибо!
            • Blog About
              Вы производите оформление реального заказа для формирования счета? Или проверяете путем генерации тестового счета из настроек JoomShopping? Если второе, то вроде как там вообще никакую валюту не определяет.
              Вышлите мне бекап Вашего сайта на info@blog-about.ru проверю что может быть не так. По крайней мере в моей тестовой сборке всё корректно отрабатывает.
  • Илья
    Вы можете внести все изменения, что написаны в комментариях и прислать мне файл , чтобы он выводил данные Грузополучателя и отправителя отдельно
    при заполнении переносил строку если она выходит за рамки и убрать пробелы у плательщика... Я вам скину 500 руб. А то у меня почему то при внесении изменений Грузополучатель заменяет плательщика и пробелы остаются.
    Получается, когда я в админке вношу и плательщика и грузополучателя и они разные в счете выглядит:
    Плательщик: грузополучатель.
    Грузополучатель: грузополучатель.
    И пробелы остаются.
  • Илья
    Как в счете сделать перенос текста суммы товаров и перенос на новую строчку данных о плательщике и грузополучателе. и Как добавить почему не меняется адрес если пишу грузополучателе другой.
    • Blog About
      Перенос строки:

      Здесь всё сложнее, т.к. строка выводится с помощью текста, а он в PDF не переносится, придется менять функцию.
      Открываем файл /plugins/jshoppingorder/addon_rus_invoices_for_payment/addon_rus_invoices_for_payment.php и находим код примерно в 65-ой строке:
      $pdf->MultiCell(181, 1, _JSHOP_ADDON_RUS_INVOICES_PAYMENT_PAYER.implode(", ",$adress), 0, "L");
      Удаляем её или можно просто закомментировать и вместо этого пишем:
      $pdf->SetXY(18,93);
      $pdf->MultiCell(181, 1, _JSHOP_ADDON_RUS_INVOICES_PAYMENT_PAYER.implode(", ",$adress));

      Это сработает для плательщика, теперь смотрим ниже, примерно в 72-ой строке код:
      $pdf->text(13,98,_JSHOP_ADDON_RUS_INVOICES_PAYMENT_CUSTOMER.implode(", ",$adress));
      Аналогично удаляем или комментируем и пишем свой:
      $pdf->SetXY(18,$pdf->getY());
      $pdf->MultiCell(181, 1, _JSHOP_ADDON_RUS_INVOICES_PAYMENT_CUSTOMER.implode(", ",$adress), 0, "L");

      Здесь мы исправили перенос для грузополучателя, но из-за этого таблица со списком товаров может наехать на текст, поэтому чуть ниже, примерно в 74-ой строке находим задание позиции по вертикали:
      $y = 103;
      И меняем на определение позиции:
      $y = $pdf->getY();



      Юридический адрес:

      Перейдите в "Компоненты" - "JoomShopping" - "Настройки" - "Поля регистрации".
      Здесь есть возможность задать дополнительные поля (до 3х штук), активируйте к примеру "Дополнительное поле 1" в соответствующих разделах, где это нужно. Предположим, что это поле будет отвечать за юридический адрес.

      Открываем файл /components/com_jshopping/lang/ru-RU.php и находим строку:
      define('_JSHOP_EXT_FIELD_1', 'Дополнительное поле 1');
      Меняем на:
      define('_JSHOP_EXT_FIELD_1', 'Юридический адрес');

      Открываем файл /administrator/components/com_jshopping/lang/ru-RU.php и находим строку:
      define('_JSHOP_EXT_FIELD_1', 'Дополнительное поле 1');
      Меняем на:
      define('_JSHOP_EXT_FIELD_1', 'Юридический адрес');

      Теперь пользователь будет видеть поле "Юридический адрес" при оформлении заказа, и если заполнит его, то администратор в заказе также увидит это поле.

      Чтобы выводить юридический адрес в PDF, откройте файл /plugins/jshoppingorder/addon_rus_invoices_for_payment/addon_rus_invoices_for_payment.php и в нужном месте просто добавьте:
      $pdf->SetXY(18,$pdf->getY());
      $pdf->MultiCell(181, 1, 'Юридический адрес:' . $order->ext_field_1, 0, "L");

      ext_field_1 - указывает на поле "Дополнительное поле 1" для блока плащельщика. Если же нужно для грузополучателя, то d_ext_field_1



      Исправление данных о грузополучателе:

      Не знаю почему, но разработчики решили и в плательщике и грузополучателе выводить одинаковые данные, поэтому нужно исправить это. Откройте файл /plugins/jshoppingorder/addon_rus_invoices_for_payment/addon_rus_invoices_for_payment.php и найдите строку:
      $adress=array();
      Вы их встретите 2 в файле, первая отвечает за массив данных о плательщике, а вторая за массив данных о грузополучателе. Сразу после этой строки (второй), идет задание данных:
      if($order->d_firma_name)$adress[]=$order->firma_name;
      if($order->firma_code)$adress[]=_JSHOP_ADDON_RUS_INVOICES_PAYMENT_INN." ".$order->firma_code;
      if($order->d_city)$adress[] = _JSHOP_ADDON_RUS_INVOICES_PAYMENT_PRE_CITY.$order->city;
      if($order->d_street)$adress[] = $order->street;
      if($order->d_home)$adress[] = $order->home;
      Все 5 строк меняем на следующие:
      if($order->d_firma_name)
      $adress[]=$order->d_firma_name;
      else
      $adress[]=$order->firma_name;
      if($order->firma_code)
      $adress[]=_JSHOP_ADDON_RUS_INVOICES_PAYMENT_INN." ".$order->firma_code;
      else
      $adress[]=$order->firma_code;
      if($order->d_city)
      $adress[] = _JSHOP_ADDON_RUS_INVOICES_PAYMENT_PRE_CITY.$order->d_city;
      else
      $adress[]=$order->city;
      if($order->d_street)
      $adress[] = $order->d_street;
      else
      $adress[]=$order->street;
      if($order->d_home)
      $adress[] = $order->d_home;
      else
      $adress[]=$order->home;

      Здесь мы указали, что если заполнен раздел для доставки, то будем указывать адрес грузополучателя, а иначе адрес плательщика



      Длина поля адреса

      Разработчики поскупились на длину строки для адреса, поэтому какой бы длинный адрес Вы не ввели в поле "Адрес", он будет сохранен максимально 100 символов, поэтому здесь потребуется уже изменять базу данных.
      Открываем phpMyAdmin, переходим в Вашу базу данных, открываем таблицу #__jshopping_orders и переходим на вкладку "Структура", находим поле "street" и жмем карандаш справа для редактирования. В поле "Длина/Значения" укажите 255 и сохраните изменения. Аналогично сделайте для поля "d_street".

      Важное замечание. Некоторые из этих изменений будут утеряны после обновления версии Joomshopping.
      • Blog About
        Вообще, для подобных изменений очень советую ознакомиться с документацией по TCPDF https://tcpdf.org/docs/
      • Илья
        спасибо...подправил. Осталась одна проблема в вашем решении: Пробелы между словами адрес - дом - кв слишком большие становятся если короткий адрес. Это можно исправить? Получается так :
        Плательщик: Имя покупателя, Московская область, городской округ Мытищи, деревня Грибки,
        Коттеджный (пробел, пробел, пробел, пробел) Посёлок (пробел, пробел, пробел,)) Грибки-2
        А хотелось бы так:
        Плательщик: Имя или название фирмы, Московская область, городской округ Мытищи, деревня Грибки,
        коттеджный посёлок Грибки-2
        • Blog About
          Просто нужно делать проверку на наличие значения. Я писал Вам на скорую руку, а Вы в свою очередь должны были поправить как нужно.
          if ($order->d_firma_name) {
          $adress[] = $order->d_firma_name;
          } else {
          if ($order->firma_name) {
          $adress[] = $order->firma_name;
          }
          }
          if ($order->firma_code) {
          $adress[] = _JSHOP_ADDON_RUS_INVOICES_PAYMENT_INN . " " . $order->firma_code;
          }
          if ($order->d_city) {
          $adress[] = _JSHOP_ADDON_RUS_INVOICES_PAYMENT_PRE_CITY . $order->d_city;
          } else {
          if ($order->city) {
          $adress[] = _JSHOP_ADDON_RUS_INVOICES_PAYMENT_PRE_CITY . $order->city;
          }
          }
          if ($order->d_street) {
          $adress[] = $order->d_street;
          } else {
          if ($order->street) {
          $adress[] = $order->street;
          }
          }
          if ($order->d_home) {
          $adress[] = $order->d_home;
          } else {
          if ($order->home) {
          $adress[] = $order->home;
          }
          }
      • Илья
        И как убрать ИНН в грузополучателе или добавить ИНН только грузополучателя...А то он берет его из плательщика а могут быть разные фирмы.
        • Blog About
          Если обращали внимание, то для ИНН (код фирмы) доступен только в форме получателя. Отсюда - либо выводить в грузополучателе ИНН плательщика, либо убирать его совсем.
          Чтобы убрать, нужно просто удалить часть кода, который дал в комментарии выше:
          if ($order->firma_code) {
          $adress[] = _JSHOP_ADDON_RUS_INVOICES_PAYMENT_INN . " " . $order->firma_code;
          }
  • Илья
    Как сделать перенос строчки когда она вылезает за край листа, а то обрезает адрес. И как вывести дополнительные поля в счете и в админке : юридический адрес . Использовал 2 метод с модулем. Готов подкинуть денег.
  • Александр
    Добрый день.
    Не подскажете, как сделать, что бы в счете, где указана стоимость прописью, отображались копейки? Строка заканчивается валютой (руб в данном случае), однако если в сумме присутсвуют копейки, то в строке их нет.
    Спасибо.
    • Blog About
      Добрый день.
      Вы используете Аддон? Если да, то он должен выводить копейки. Скорей всего у Вас код валюты указан отличный от того, который в коде аддона.
      Откройте файл addon_rus_invoices_for_payment.php расположенный в каталоге /plugins/jshoppingorder/addon_rus_invoices_for_payment/
      Найдите примерно в 406-ой строке функцию:
      function SumProp($srcsumm,$val_rub='', $val_kop=''){
      и сразу после этой строки добавьте следующий код:
      $srcsumm = str_replace(' ', '', $srcsumm);
      это для перестраховки, на случай, если в качестве тысячного разделителя Вы будете использовать пробел. Теперь, чуть ниже найдите условие:
      if($val_rub=='RUR') {
      В этой строке RUR замените на код Вашей валюты, например "руб."
      Код валюты можно посмотреть в админке в списке валют в поле "код".
  • Михаил
    Добрый, поставил Addon RUS Invoice. как убрать НДС мелким шрифтом в 2 ух местах в шапке под количеством товара , и итоговой суммой.

    Достаточно того что он выводится внизу как это и положенно, я так понимаю это остатки встроенного шаблона по умолчанию.

    В вашем примере ндс не представлен
    • Blog About
      Добрый день.
      Вообще, в настройках JoomShopping должен быть параметр "Показывать налоги в корзине" или что-то в этом роде, почему-то сам не могу найти его, он как раз и отключает вывод.
      Если не получится найти, или Вам нужно показывать налоги, то Вы можете убрать их вывод путем редактирования файла /plugins/jshoppingorder/addon_rus_invoices_for_payment/ addon_rus_invoices_for_payment.php
      В 157 и 176 строках есть два блока условий вывода налогов
      if ($jshopConfig->show_tax_product_in_cart && $prod->product_tax>0){
      Закомментируйте полностью условие, проверьте, то что нужно Вам или нет.
      Налог под итоговой суммой меняется в 269 строке, закомментируйте блок условий
      if (!$jshopConfig->hide_tax){
      Должно пропасть.
      Сам проверить на данный момент не могу, т.к. не на чем.
  • Илья
    joomla 3.9 joomshoping 4* не работает аддон для изменения счета. В чем может быть причина?
    • Blog About
      Здравствуйте. Извините за столько долгий ответ.
      Произвёл тестирование компонентов. Joomla 3.9.1 + Joomshopping 4.18.2 + Addon Rus Invoice.
      Всё корректно работает, после установки аддона стандартный шаблон PDF счета заменяется на новый. Для тестирования использовалась версия аддона 1.0.5 из вложения к данной статье. Попробуйте скачать и установить более новую версию 1.0.7 https://www.webdesigner-profi.de/joomla-webdesign/shop/addons/rus-invoice.html?lang=ru
      Даже представить не могу, в чём может быть у Вас причина. Опишите конкретнее, как проявляется проблема? Именно шаблон PDF не изменяется на новый? Или вообще не отправляет PDF счета?
      "Joomshopping" - "Настройки" - "Информация о магазине", если нажать в самом низу "Просмотреть pdf" отображается старый или новый шаблон счета?
  • Илья
    Аддон не работает. Как был счет так и остался ...при установке изменений нет.
  • Антон
    доброго дня!
    спасибо за статью.
    методом тыка и опроса умных товарищей было выявлено, что не обязательно лезть в модель для сброса параметров отправки. создаем переопределение для уведомления
    \templates\ВАШ_ШАБЛОН\html\com_jshopping\checkout\orderemail.php
    и в нем сбрасываем переменные, в зависимости от ID оплаты.
    для ленивых, можно вообще дописывать к имени оплаты хвостик "_nopdf"
    и делать проверку на наличие подстроки, а не на ID

    if($this->order->payment_id == 1){
    $this->config->order_send_pdf_client=0; // не шлем счет клиенту
    $this->config->order_send_pdf_admin=1; // а шлем себе-любимому!
    }
  • Павел
    как заменить надпись Образец заполнения платёжного поручения на платёжное поручение
    • Blog About
      Для этого перейдите в /components/com_jshopping/lang/addon_rus_invoices_for_payment и откройте файл для редактирования ru-RU.php - самая первая языковая константа будет как раз то, что Вам нужно.
  • Xem
    Здравствуйте!
    Подскажите, а если не нужно отправлять PDF при нескольких вариантах?
    Можно как-то указать при 8 и 7 id не отправлять?
    • Blog About
      Да, конечно.
      if ($pdfsendtype && $this->order->payment_method_id != 7 && $this->order->payment_method_id != 8){
      Здесь по условию счет не будет отправлен, если выбран способ оплаты 7 или 8.

Добавить комментарий