обновлен readme, добавлена обработка платежей без НДС

This commit is contained in:
detre30 2018-04-04 16:45:33 +03:00
parent f9aa3e1c49
commit 68c5438339
5 changed files with 93 additions and 37 deletions

View File

@ -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

View File

@ -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);
}
}

View File

@ -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

View File

@ -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;
}
}

View File

@ -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;
}
}
}