mirror of
https://github.com/valitydev/rbkmoney-cms-netcat.git
synced 2024-11-06 09:45:20 +00:00
обновлен readme, добавлена обработка платежей без НДС
This commit is contained in:
parent
f9aa3e1c49
commit
68c5438339
10
README.md
10
README.md
@ -8,5 +8,15 @@
|
||||
4. Перейдите в настройки модуля Интернет-магазин (Настройки>Интернетмагазин),
|
||||
в меню слева выберите пункт Настройки->Оплата.
|
||||
Добавьте новый способ оплаты с указанием платежной системы RBKmoney (кнопка "Добавить" внизу страницы).
|
||||
5. Для работы модуля необходимо проставить всем товарам ставки НДС, допустимые значения:
|
||||
0 (соответствует 0%);
|
||||
10 (соответствует 10%);
|
||||
18 (соответствует 18%);
|
||||
10110 (соответствует 10/110);
|
||||
18118 (соответствует 18/118).
|
||||
Пустое поле = без НДС.
|
||||
6. Настроить частоту работы рекуррентов можно в разделе Инструменты->Управление задачами.
|
||||
Для того, чтоб интервал выполнения скрипта нажмите на шестеренку напротив записи со ссылкой /netcat/modules/rbkmoney/recurrentCron.php
|
||||
Для того, чтоб запустить скрипт вручную нажмите на ссылку /netcat/modules/rbkmoney/recurrentCron.php, которая находится в этом разделе.
|
||||
|
||||
Настройка окончена, теперь при оплате товаров среди способов оплаты будет выводится RBKmoney
|
@ -403,6 +403,18 @@ class nc_payment_system_rbkmoney extends nc_payment_system
|
||||
if ($fiscalization) {
|
||||
$sourceItemId = $item->get('source_item_id');
|
||||
|
||||
$cart = new Cart(
|
||||
"$itemName ($quantity)",
|
||||
$quantity,
|
||||
$this->prepareAmount($item->get('item_price'))
|
||||
);
|
||||
|
||||
if (null === $item->get('vat_rate') && !empty($sourceItemId)) {
|
||||
$carts[] = $cart;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (empty($sourceItemId)) {
|
||||
$vat = DELIVERY_VAT_SETTING;
|
||||
} else {
|
||||
@ -417,12 +429,7 @@ class nc_payment_system_rbkmoney extends nc_payment_system
|
||||
throw new WrongDataException(ERROR_TAX_RATE_IS_NOT_VALID . $itemName, 400);
|
||||
}
|
||||
|
||||
$carts[] = new Cart(
|
||||
"$itemName ($quantity)",
|
||||
$quantity,
|
||||
$this->prepareAmount($item->get('item_price')),
|
||||
$taxMode
|
||||
);
|
||||
$carts[] = $cart->setTaxMode($taxMode);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
use src\Api\Exceptions\WrongDataException;
|
||||
use src\Api\Exceptions\WrongRequestException;
|
||||
use src\Api\Invoices\CreateInvoice\Cart;
|
||||
use src\Api\Invoices\CreateInvoice\Carts;
|
||||
use src\Api\Invoices\CreateInvoice\Request\CreateInvoiceRequest;
|
||||
use src\Api\Invoices\CreateInvoice\Response\CreateInvoiceResponse;
|
||||
use src\Api\Invoices\CreateInvoice\TaxMode;
|
||||
@ -52,6 +53,17 @@ class Recurrent
|
||||
*/
|
||||
private $sender;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $vat_map = [
|
||||
0 => '0%',
|
||||
10 => '10%',
|
||||
18 => '18%',
|
||||
10110 => '10/110',
|
||||
18118 => '18/118',
|
||||
];
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
include dirname(__DIR__) . '/rbkmoney/settings.php';
|
||||
@ -190,23 +202,25 @@ class Recurrent
|
||||
);
|
||||
|
||||
if (FISCALIZATION_USE === $this->settings['fiscalization']) {
|
||||
$tax = $payment->vat_rate;
|
||||
$taxSlash = $this->getTaxSlash($tax);
|
||||
|
||||
if (in_array($taxSlash, TaxMode::$validValues)) {
|
||||
$taxMode = new TaxMode($taxSlash);
|
||||
} elseif (in_array("$tax%", TaxMode::$validValues)) {
|
||||
$taxMode = new TaxMode("$tax%");
|
||||
} else {
|
||||
throw new WrongDataException(ERROR_TAX_RATE_IS_NOT_VALID . $payment->name, 400);
|
||||
}
|
||||
|
||||
$createInvoice->addCart(new Cart(
|
||||
$cart = new Cart(
|
||||
"{$invoiceItem->get('name')} ({$invoiceItem->get('qty')})",
|
||||
$invoiceItem->get('qty'),
|
||||
$this->prepareAmount($invoiceItem->get('item_price')),
|
||||
$taxMode
|
||||
));
|
||||
$this->prepareAmount($invoiceItem->get('item_price'))
|
||||
);
|
||||
$vat = $payment->vat_rate;
|
||||
|
||||
if (!empty($vat)) {
|
||||
$vatRate = $this->getVatRate($vat);
|
||||
|
||||
if (in_array($vatRate, TaxMode::$validValues)) {
|
||||
$taxMode = new TaxMode($vatRate);
|
||||
} else {
|
||||
throw new WrongDataException(ERROR_TAX_RATE_IS_NOT_VALID . $payment->name, 400);
|
||||
}
|
||||
$cart->setTaxMode($taxMode);
|
||||
}
|
||||
|
||||
$createInvoice->addCart($cart);
|
||||
} else {
|
||||
$createInvoice->setAmount($this->prepareAmount($invoice->get_amount('%0.2F')));
|
||||
}
|
||||
@ -214,6 +228,20 @@ class Recurrent
|
||||
return $this->sender->sendCreateInvoiceRequest($createInvoice);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $vat_rate
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getVatRate($vat_rate)
|
||||
{
|
||||
if (isset($this->vat_map[$vat_rate])) {
|
||||
return $this->vat_map[$vat_rate];
|
||||
}
|
||||
|
||||
return $vat_rate;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param float $price
|
||||
*
|
||||
@ -224,16 +252,6 @@ class Recurrent
|
||||
return number_format($price, 2, '', '');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $tax
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function getTaxSlash($tax)
|
||||
{
|
||||
return substr_replace($tax, '/', 2, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param CreateInvoiceResponse $invoice
|
||||
* @param string $customerId
|
||||
|
@ -35,21 +35,18 @@ class Cart extends RBKmoneyDataObject
|
||||
/**
|
||||
* @var TaxMode | null
|
||||
*/
|
||||
public $taxMode = null;
|
||||
public $taxMode;
|
||||
|
||||
/**
|
||||
* @param string $product
|
||||
* @param int $quantity
|
||||
* @param int $price
|
||||
* @param TaxMode | null $taxMode
|
||||
*/
|
||||
public function __construct($product, $quantity, $price, $taxMode = null)
|
||||
public function __construct($product, $quantity, $price)
|
||||
{
|
||||
$this->product = $product;
|
||||
$this->quantity = (int) $quantity;
|
||||
$this->price = (int) $price;
|
||||
|
||||
$this->taxMode = $taxMode;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -64,4 +61,20 @@ class Cart extends RBKmoneyDataObject
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function toArray()
|
||||
{
|
||||
$properties = [];
|
||||
|
||||
foreach ($this as $property => $value) {
|
||||
if (null !== $value) {
|
||||
$properties[$property] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
return $properties;
|
||||
}
|
||||
|
||||
}
|
@ -149,7 +149,15 @@ class CreateInvoiceRequest extends RBKmoneyDataObject implements PostRequestInte
|
||||
|
||||
foreach ($this as $property => $value) {
|
||||
if (!empty($value)) {
|
||||
$properties[$property] = (is_object($value)) ? $value->toArray() : $value;
|
||||
if (is_array($value)) {
|
||||
foreach ($value as $cart) {
|
||||
$properties['cart'][] = $cart->toArray();
|
||||
}
|
||||
} elseif (is_object($value)) {
|
||||
$properties[$property] = $value->toArray();
|
||||
} else {
|
||||
$properties[$property] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user