Skip to content

Commit

Permalink
Merge pull request #90 from rarus/task#69061
Browse files Browse the repository at this point in the history
Добавлен метод получения транзакции по ИД..
  • Loading branch information
artsapiens authored Mar 25, 2024
2 parents 2e71098 + 7e9b325 commit bd1c158
Show file tree
Hide file tree
Showing 11 changed files with 172 additions and 27 deletions.
22 changes: 19 additions & 3 deletions src/Rarus/BonusServer/Discounts/DTO/Estimate.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,15 @@ final class Estimate
*/
private $discountItems;
/**
* @var \Rarus\BonusServer\Cards\DTO\PaymentDistribution\PaymentDistributionCollection|null
* @var PaymentDistributionCollection|null
*/
private $paymentDistributionCollection;

/**
* @var DiscountItemCollection
*/
private $chequeDiscounts;

/**
* @var int|null
*/
Expand Down Expand Up @@ -74,7 +79,7 @@ public function setDocumentItems(DocumentItemCollection $documentItems): Estimat
}

/**
* @param \Rarus\BonusServer\Cards\DTO\PaymentDistribution\PaymentDistributionCollection $paymentDistributionCollection
* @param PaymentDistributionCollection $paymentDistributionCollection
*
* @return Estimate
*/
Expand All @@ -86,7 +91,7 @@ public function setPaymentDistributionCollection(
}

/**
* @return \Rarus\BonusServer\Cards\DTO\PaymentDistribution\PaymentDistributionCollection|null
* @return PaymentDistributionCollection|null
*/
public function getPaymentDistributionCollection(): ?PaymentDistributionCollection
{
Expand All @@ -111,4 +116,15 @@ public function getMaxPayment(): ?int
{
return $this->maxPayment;
}

public function getChequeDiscounts(): DiscountItemCollection
{
return $this->chequeDiscounts;
}

public function setChequeDiscounts(DiscountItemCollection $chequeDiscounts): Estimate
{
$this->chequeDiscounts = $chequeDiscounts;
return $this;
}
}
8 changes: 8 additions & 0 deletions src/Rarus/BonusServer/Discounts/DTO/Fabric.php
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,14 @@ public static function initEstimateFromServerResponse(Currency $currency, array
$est->setPaymentDistributionCollection($paymentDistributionCollection);
}

$chequeItemCollection = new Discounts\DTO\DiscountItems\DiscountItemCollection();
if (!empty($arEstimate['cheque_discounts'])) {
foreach ($arEstimate['cheque_discounts'] as $discountItem) {
$chequeItemCollection->attach(Discounts\DTO\DiscountItems\Fabric::initFromServerResponse($currency, $discountItem));
}
}
$est->setChequeDiscounts($chequeItemCollection);

if (!empty($arEstimate['max_payment'])) {
$est->setMaxPayment((int)$arEstimate['max_payment']);
}
Expand Down
10 changes: 10 additions & 0 deletions src/Rarus/BonusServer/Discounts/Formatters/DiscountRow.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
use Money\Formatter\DecimalMoneyFormatter;
use Rarus\BonusServer\Discounts\DTO\DiscountItems\DiscountItem;
use Rarus\BonusServer\Transactions;
use Rarus\BonusServer\Util\MoneyParser;

/**
* Class DiscountRow
Expand All @@ -29,4 +30,13 @@ public static function toArray(DiscountItem $discountItem): array
'discount_value' => $discountItem->getValue(),
];
}

public static function toCalculateHistory(DiscountItem $discountItem): array
{
return [
'line_number' => $discountItem->getLineNumber(),
'discount_id' => $discountItem->getDiscountId()->getId() ?: '',
'discount_summ' => (float)MoneyParser::convertMoneyToString($discountItem->getSum())
];
}
}
36 changes: 27 additions & 9 deletions src/Rarus/BonusServer/Transactions/DTO/AbstractTransaction.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
use Rarus\BonusServer\Holds\DTO\HoldId;
use Rarus\BonusServer\Shops\DTO\ShopId;
use Rarus\BonusServer\Transactions\DTO\CashRegister\CashRegister;
use Rarus\BonusServer\Transactions\DTO\CertPayments\CertPaymentCollection;
use Rarus\BonusServer\Transactions\DTO\ChequeRows\ChequeRowCollection;
use Rarus\BonusServer\Transactions\DTO\Document\Document;
use Rarus\BonusServer\Transactions\DTO\PaymentTypes\PaymentTypeCollection;
Expand Down Expand Up @@ -67,13 +68,18 @@ abstract class AbstractTransaction
*/
protected $discountItemCollection;
/**
* @var \Rarus\BonusServer\Transactions\DTO\PaymentTypes\PaymentTypeCollection|null
* @var PaymentTypeCollection|null
*/
protected $paymentTypeCollection;
/**
* @var \Rarus\BonusServer\Transactions\DTO\CertPayments\CertPaymentCollection|null
* @var CertPaymentCollection|null
*/
protected $certPaymentCollection;

/**
* @var DiscountItemCollection|null
*/
protected $calculateHistoryCollection;
/**
* @var HoldId|null
*/
Expand Down Expand Up @@ -180,20 +186,21 @@ public function getDiscountItemCollection(): ?DiscountItemCollection
/**
* @param DiscountItemCollection $discountItemCollection
*/
public function setDiscountItemCollection(DiscountItemCollection $discountItemCollection): void
public function setDiscountItemCollection(DiscountItemCollection $discountItemCollection): AbstractTransaction
{
$this->discountItemCollection = $discountItemCollection;
return $this;
}
/**
* @return \Rarus\BonusServer\Transactions\DTO\PaymentTypes\PaymentTypeCollection
* @return PaymentTypeCollection
*/
public function getPaymentTypeCollection(): ?PaymentTypeCollection
{
return $this->paymentTypeCollection;
}

/**
* @param \Rarus\BonusServer\Transactions\DTO\PaymentTypes\PaymentTypeCollection $paymentTypeCollection
* @param PaymentTypeCollection $paymentTypeCollection
*/
public function setPaymentTypeCollection(
PaymentTypeCollection $paymentTypeCollection
Expand All @@ -202,19 +209,30 @@ public function setPaymentTypeCollection(
}

/**
* @return \Rarus\BonusServer\Transactions\DTO\CertPayments\CertPaymentCollection|null
* @return CertPaymentCollection|null
*/
public function getCertPaymentCollection(): ?\Rarus\BonusServer\Transactions\DTO\CertPayments\CertPaymentCollection
public function getCertPaymentCollection(): ?CertPaymentCollection
{
return $this->certPaymentCollection;
}

/**
* @param \Rarus\BonusServer\Transactions\DTO\CertPayments\CertPaymentCollection|null $certPaymentCollection
* @param CertPaymentCollection|null $certPaymentCollection
*/
public function setCertPaymentCollection(
?\Rarus\BonusServer\Transactions\DTO\CertPayments\CertPaymentCollection $certPaymentCollection
?CertPaymentCollection $certPaymentCollection
): void {
$this->certPaymentCollection = $certPaymentCollection;
}

public function getCalculateHistoryCollection(): ?DiscountItemCollection
{
return $this->calculateHistoryCollection;
}

public function setCalculateHistoryCollection(?DiscountItemCollection $calculateHistoryCollection
): AbstractTransaction {
$this->calculateHistoryCollection = $calculateHistoryCollection;
return $this;
}
}
15 changes: 15 additions & 0 deletions src/Rarus/BonusServer/Transactions/DTO/ChequeRows/ChequeRow.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ final class ChequeRow
* @var Money
*/
private $discount;
/**
* @var Money|null
*/
private $bonusPaymentSum;

/**
* @return int
Expand Down Expand Up @@ -182,4 +186,15 @@ public function setDiscount(Money $discount): ChequeRow

return $this;
}

public function getBonusPaymentSum(): ?Money
{
return $this->bonusPaymentSum;
}

public function setBonusPaymentSum(?Money $bonusPaymentSum): ChequeRow
{
$this->bonusPaymentSum = $bonusPaymentSum;
return $this;
}
}
2 changes: 1 addition & 1 deletion src/Rarus/BonusServer/Transactions/DTO/Products/Fabric.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public static function initProductRowFromServerResponse(Currency $currency, arra
->setName((string)$arResponse['item_name'])
->setQuantity((int)$arResponse['quantity'])
->setPrice($moneyParser->parse((string)$arResponse['price'], $currency->getCode()))
->setDiscount($moneyParser->parse((string)$arResponse['price'], $currency->getCode()));
->setDiscount($moneyParser->parse((string)$arResponse['discount'], $currency->getCode()));

return $productRow;
}
Expand Down
19 changes: 8 additions & 11 deletions src/Rarus/BonusServer/Transactions/DTO/SalesHistory/Fabric.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,12 @@
use Money\Currencies\ISOCurrencies;
use Money\Parser\DecimalMoneyParser;
use Rarus\BonusServer\Cards\DTO\CardId;
use Rarus\BonusServer\Exceptions\ApiClientException;
use Rarus\BonusServer\Shops\DTO\ShopId;
use Rarus\BonusServer\Transactions\DTO\Document\DocumentId;
use Rarus\BonusServer\Transactions\DTO\CashRegister\CashRegisterId;
use Rarus\BonusServer\Transactions;
use Rarus\BonusServer\Util\DateTimeParser;

/**
* Class Fabric
Expand All @@ -23,16 +25,13 @@ class Fabric
{
/**
* @param Currency $currency
* @param array $arResponse
*
* @param array $arResponse
* @param \DateTimeZone $dateTimeZone
* @return HistoryItem
* @throws \Rarus\BonusServer\Exceptions\ApiClientException
* @throws ApiClientException
*/
public static function initHistoryItemFromServerResponse(Currency $currency, array $arResponse): HistoryItem
public static function initHistoryItemFromServerResponse(Currency $currency, array $arResponse, \DateTimeZone $dateTimeZone): HistoryItem
{
$operationDate = new \DateTime();
$operationDate->setTimestamp((int)$arResponse['date']);

$moneyParser = new DecimalMoneyParser(new ISOCurrencies());

$productRowCollection = new Transactions\DTO\Products\ProductRowCollection();
Expand All @@ -43,7 +42,7 @@ public static function initHistoryItemFromServerResponse(Currency $currency, arr
$operation = new HistoryItem();
$operation
->setLineNumber((int)$arResponse['row_number'])
->setDate($operationDate)
->setDate(DateTimeParser::parseTimestampFromServerResponse((string)$arResponse['date'], $dateTimeZone))
->setDocumentId(new DocumentId((string)$arResponse['doc_id']))
->setCardId(new CardId((string)$arResponse['card_id']))
->setShopId(new ShopId((string)$arResponse['shop_id']))
Expand All @@ -57,9 +56,7 @@ public static function initHistoryItemFromServerResponse(Currency $currency, arr
->setProducts($productRowCollection);

if ($arResponse['date_calculate_local'] !== 0) {
$operationDate = new \DateTime();
$operationDate->setTimestamp((int)$arResponse['date_calculate_local']);
$operation->setDateCalculate($operationDate);
$operation->setDateCalculate(DateTimeParser::parseTimestampFromServerResponse((string)$arResponse['date_calculate_local'], $dateTimeZone));
}

return $operation;
Expand Down
3 changes: 3 additions & 0 deletions src/Rarus/BonusServer/Transactions/Formatters/ChequeRow.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ public static function toArray(Transactions\DTO\ChequeRows\ChequeRow $chequeRow)
'price' => (float)MoneyParser::convertMoneyToString($chequeRow->getPrice()),
'summ' => (float)MoneyParser::convertMoneyToString($chequeRow->getSum()),
'discount_summ' => (float)MoneyParser::convertMoneyToString($chequeRow->getDiscount()),
'bonus_payment_sum' => $chequeRow->getBonusPaymentSum() ? (float)MoneyParser::convertMoneyToString(
$chequeRow->getBonusPaymentSum()
) : null
];
}
}
10 changes: 9 additions & 1 deletion src/Rarus/BonusServer/Transactions/Formatters/Sale.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,13 @@ public static function toArray(Transactions\DTO\Sale $saleTrx): array
}
}

$arCalculateHistory = [];
if ($saleTrx->getCalculateHistoryCollection()) {
foreach ($saleTrx->getCalculateHistoryCollection() as $discount) {
$arCalculateHistory[] = DiscountRow::toCalculateHistory($discount);
}
}

return [
'operation_type' => 'sale',
'level_up' => true,
Expand All @@ -69,7 +76,8 @@ public static function toArray(Transactions\DTO\Sale $saleTrx): array
'cert_payments' => $arCertPayments,
'hold_id' => $saleTrx->getHoldId() ? $saleTrx->getHoldId()->getId() : null,
'hold_used' => $saleTrx->isHoldUsed(),
'test' => $saleTrx->isTest()
'test' => $saleTrx->isTest(),
'calculate_history' => $arCalculateHistory
];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@
namespace Rarus\BonusServer\Transactions\Transport\Role\Organization;

use Rarus\BonusServer;
use Rarus\BonusServer\Exceptions\ApiClientException;
use Rarus\BonusServer\Exceptions\NetworkException;
use Rarus\BonusServer\Exceptions\UnknownException;
use Rarus\BonusServer\Transactions\DTO\Document\DocumentId;
use Rarus\BonusServer\Transactions\DTO\SalesHistory\HistoryItem;
use Rarus\BonusServer\Transport\DTO\Pagination;
use Rarus\BonusServer\Transactions\DTO\SalesHistory\HistoryItemCollection;
use Fig\Http\Message\RequestMethodInterface;
Expand Down Expand Up @@ -60,7 +65,8 @@ public function getSalesHistoryByCard(BonusServer\Cards\DTO\Card $card, ?\DateTi
foreach ((array)$requestResult['sales'] as $arSaleItem) {
$historySalesCollection->attach(BonusServer\Transactions\DTO\SalesHistory\Fabric::initHistoryItemFromServerResponse(
$this->getDefaultCurrency(),
$arSaleItem
$arSaleItem,
$this->apiClient->getTimezone()
));
}
$historySalesCollection->rewind();
Expand All @@ -77,6 +83,42 @@ public function getSalesHistoryByCard(BonusServer\Cards\DTO\Card $card, ?\DateTi
return $historySalesCollection;
}

/**
* @param DocumentId $documentId
* @return HistoryItem|null
* @throws ApiClientException
* @throws NetworkException
* @throws UnknownException
*/
public function getSaleHistoryByDocumentId(BonusServer\Transactions\DTO\Document\DocumentId $documentId): ?HistoryItem
{
$this->log->debug('rarus.bonus.server.transactions.transport.organization.getSaleHistoryByDocumentId.start', [
'documentId' => $documentId->getId()
]);

try {
$requestResult = $this->apiClient->executeApiRequest(
sprintf('/organization/sale_info?doc_id=%s&card_info=true&cheque_items_info=true&payment_info=true&transactions_not_accrued_info=true', $documentId->getId()),
RequestMethodInterface::METHOD_GET
);

if (!empty($requestResult['sales'])) {
return (BonusServer\Transactions\DTO\SalesHistory\Fabric::initHistoryItemFromServerResponse(
$this->getDefaultCurrency(),
$requestResult['sales'][0],
$this->apiClient->getTimezone()
));
}
} catch (BonusServer\Exceptions\ApiClientException $exception) {
// если транзакции не найдены, то сервер возвращает 404 статус выставив 114 код в данном случае мы его подавляем
if ($exception->getCode() !== 114) {
throw $exception;
}
}

return null;
}

/**
* @param BonusServer\Cards\DTO\Card $card
* @param \DateTime|null $dateFrom
Expand Down Expand Up @@ -159,7 +201,7 @@ public function addSaleTransaction(BonusServer\Transactions\DTO\Sale $saleTransa
'cardId' => $saleTransaction->getCardId()->getId(),
'shopId' => $saleTransaction->getShopId()->getId(),
'doc_id' => $saleTransaction->getDocument()->getId(),
'hold_id' => $saleTransaction->getHoldId()->getId(),
'hold_id' => $saleTransaction->getHoldId() ? $saleTransaction->getHoldId()->getId() : null,
'bonus_payment' => $saleTransaction->getBonusPayment(),
'kkm_id' => $saleTransaction->getCashRegister()->getId(),
'dateCalculate' => $dateCalculate === null ? null : $dateCalculate->format(\DATE_ATOM),
Expand Down
Loading

0 comments on commit bd1c158

Please sign in to comment.