Skip to content
Code-Schnipsel Gruppen Projekte
Commit 4d058d2f erstellt von Henning Leutz's avatar Henning Leutz :martial_arts_uniform:
Dateien durchsuchen

feat: txid intecration

Übergeordneter eb3cfd6a
Keine zugehörigen Branchen gefunden
Keine zugehörigen Tags gefunden
Keine zugehörigen Merge Requests gefunden
......@@ -7,4 +7,8 @@
<event on="onRequest"
fire="\QUI\ERP\Order\EventHandling::onRequest"
/>
<event on="onTransactionCreate"
fire="\QUI\ERP\Order\EventHandling::onTransactionCreate"
/>
</events>
\ No newline at end of file
......@@ -12,6 +12,7 @@
use QUI\ERP\Accounting\Payments\Api\PaymentsInterface;
use QUI\ERP\Money\Price;
use QUI\Permissions\Permission;
use QUI\ERP\Accounting\Payments\Transactions\Transaction;
/**
* Class AbstractOrder
......@@ -651,6 +652,8 @@ public function setPayment($paymentId)
* @param PaymentsInterface $PaymentMethod
* @param bool $date
* @param null $PermissionUser
*
* @deprecated use transaction oder eine tx anlegen
*/
public function addPayment(
$amount,
......@@ -754,17 +757,131 @@ public function addPayment(
'quiqqerOrderAddPaymentEnd',
array($this, $amount, $PaymentMethod, $date)
);
}
/**
* @param Transaction $Transaction
*/
public function addTransaction(Transaction $Transaction)
{
QUI\ERP\Debug::getInstance()->log('Order:: add transaction');
// if invoice exists, add payment, too
if (method_exists($this, 'getInvoice')) {
try {
/* @var $Invoice QUI\ERP\Accounting\Invoice\Invoice */
$Invoice = $this->getInvoice();
$Invoice->addPayment($amount, $PaymentMethod);
} catch (QUI\ERP\Accounting\Invoice\Exception $Exception) {
if ($this->getHash() !== $Transaction->getHash()) {
return;
}
if ($this->getAttribute('paid_status') == self::PAYMENT_STATUS_PAID ||
$this->getAttribute('paid_status') == self::PAYMENT_STATUS_CANCELED
) {
return;
}
QUI\ERP\Debug::getInstance()->log('Order:: add transaction start');
$User = QUI::getUserBySession();
$paidData = $this->getAttribute('paid_data');
$amount = Price::validatePrice($Transaction->getAmount());
$date = $Transaction->getDate();
QUI::getEvents()->fireEvent(
'quiqqerOrderAddTransactionBegin',
array($this, $amount, $Transaction, $date)
);
if (!$amount) {
return;
}
if (!is_array($paidData)) {
$paidData = json_decode($paidData, true);
}
if (!is_array($paidData)) {
$paidData = array();
}
function isTxAlreadyAdded($txid, $paidData)
{
foreach ($paidData as $paidEntry) {
if (!isset($paidEntry['txid'])) {
continue;
}
if ($paidEntry['txid'] == $txid) {
return true;
}
}
return false;
}
// already added
if (isTxAlreadyAdded($Transaction->getTxId(), $paidData)) {
return;
}
$isValidTimeStamp = function ($timestamp) {
return ((string)(int)$timestamp === $timestamp)
&& ($timestamp <= PHP_INT_MAX)
&& ($timestamp >= ~PHP_INT_MAX);
};
if ($isValidTimeStamp($date) === false) {
$date = strtotime($date);
if ($isValidTimeStamp($date) === false) {
$date = time();
}
}
$paidData[] = array(
'amount' => $amount,
'txid' => $Transaction->getTxId(),
'date' => $date
);
$this->setAttribute('paid_data', json_encode($paidData));
$this->setAttribute('paid_date', $date);
// calculations
$this->Articles->calc();
$listCalculations = $this->Articles->getCalculations();
$this->setAttributes(array(
'currency_data' => json_encode($listCalculations['currencyData']),
'nettosum' => $listCalculations['nettoSum'],
'subsum' => $listCalculations['subSum'],
'sum' => $listCalculations['sum'],
'vat_array' => json_encode($listCalculations['vatArray'])
));
$this->addHistory(
QUI::getLocale()->get(
'quiqqer/order',
'history.message.addTransaction',
array(
'username' => $User->getName(),
'uid' => $User->getId(),
'txid' => $Transaction->getTxId()
)
)
);
QUI::getEvents()->fireEvent(
'addTransaction',
array($this, $amount, $Transaction, $date)
);
$this->calculatePayments();
QUI::getEvents()->fireEvent(
'quiqqerOrderAddTransactionEnd',
array($this, $amount, $Transaction, $date)
);
}
/**
......
......@@ -7,10 +7,12 @@
namespace QUI\ERP\Order;
use DusanKasan\Knapsack\Collection;
use QUI;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Tracy\Debugger;
use QUI;
use QUI\ERP\Accounting\Payments\Transactions\Transaction;
/**
* Class EventHandling
*
......@@ -87,6 +89,7 @@ public static function onRequest(QUI\Rewrite $Rewrite, $requestedUrl)
$Process->setAttribute('step', $parts[1]);
}
// #locale
$Site = new QUI\Projects\Site\Virtual(array(
'id' => 1,
'title' => 'Bestellungen',
......@@ -99,4 +102,22 @@ public static function onRequest(QUI\Rewrite $Rewrite, $requestedUrl)
$Rewrite->setSite($Site);
}
/**
* event: on transaction create
* assign to the order
*
* @param Transaction $Transaction
*/
public static function onTransactionCreate(Transaction $Transaction)
{
$hash = $Transaction->getHash();
try {
$Order = Handler::getInstance()->getOrderByHash($hash);
$Order->addTransaction($Transaction);
} catch (Exception $Exception) {
QUI\System\Log::writeException($Exception);
}
}
}
......@@ -38,11 +38,12 @@ public function create($PermissionUser = null)
$table = $Orders->table();
QUI::getDataBase()->insert($table, array(
'c_user' => $User->getId(),
'c_date' => date('Y-m-d H:i:s'),
'hash' => QUI\Utils\Uuid::get(),
'status' => AbstractOrder::STATUS_CREATED,
'customerId' => 0
'c_user' => $User->getId() ? $User->getId() : 0,
'c_date' => date('Y-m-d H:i:s'),
'hash' => QUI\Utils\Uuid::get(),
'status' => AbstractOrder::STATUS_CREATED,
'customerId' => 0,
'paid_status' => AbstractOrder::PAYMENT_STATUS_OPEN
));
$orderId = QUI::getDataBase()->getPDO()->lastInsertId();
......@@ -74,11 +75,12 @@ public function createOrderProcess($PermissionUser = null)
// @todo set default from customer
QUI::getDataBase()->insert($table, array(
'c_user' => $User->getId(),
'c_date' => date('Y-m-d H:i:s'),
'hash' => QUI\Utils\Uuid::get(),
'customerId' => $User->getId(),
'status' => AbstractOrder::STATUS_CREATED
'c_user' => $User->getId(),
'c_date' => date('Y-m-d H:i:s'),
'hash' => QUI\Utils\Uuid::get(),
'customerId' => $User->getId(),
'status' => AbstractOrder::STATUS_CREATED,
'paid_status' => AbstractOrder::PAYMENT_STATUS_OPEN
));
$orderId = QUI::getDataBase()->getPDO()->lastInsertId();
......
......@@ -265,6 +265,8 @@ public function update($PermissionUser = null)
*/
protected function calculatePayments()
{
QUI\ERP\Debug::getInstance()->log('Order:: Calculate Payments');
$User = QUI::getUserBySession();
// old status
......@@ -306,10 +308,14 @@ protected function calculatePayments()
array('id' => $this->getId())
);
QUI\ERP\Debug::getInstance()->log(
'Order:: Paid Status changed to '.$this->getAttribute('paid_status')
);
// Payment Status has changed
if ($oldPaidStatus != $this->getAttribute('paid_status')) {
QUI::getEvents()->fireEvent(
'onQuiqqerOrderAddComment',
'onQuiqqerOrderPaymentChanged',
array($this, $this->getAttribute('paid_status'), $oldPaidStatus)
);
}
......
......@@ -33,6 +33,7 @@ public function __construct($orderId)
$this->orderId = (int)$data['order_id'];
// check if a order for the processing order exists
try {
Handler::getInstance()->get($this->orderId);
} catch (QUI\ERP\Order\Exception $Exception) {
......@@ -95,6 +96,8 @@ public function update($PermissionUser = null)
*/
protected function calculatePayments()
{
QUI\ERP\Debug::getInstance()->log('OrderInProcess:: Calculate Payments');
$User = QUI::getUserBySession();
// old status
......@@ -136,12 +139,29 @@ protected function calculatePayments()
array('id' => $this->getId())
);
QUI\ERP\Debug::getInstance()->log('old status');
QUI\ERP\Debug::getInstance()->log($oldPaidStatus);
QUI\ERP\Debug::getInstance()->log('new status');
QUI\ERP\Debug::getInstance()->log($this->getAttribute('paid_status'));
// Payment Status has changed
if ($oldPaidStatus != $this->getAttribute('paid_status')) {
QUI::getEvents()->fireEvent(
'onQuiqqerOrderAddComment',
array($this, $this->getAttribute('paid_status'), $oldPaidStatus)
);
if ($oldPaidStatus == $this->getAttribute('paid_status')) {
return;
}
QUI::getEvents()->fireEvent(
'onQuiqqerOrderPaymentStatusChanged',
array($this, $this->getAttribute('paid_status'), $oldPaidStatus)
);
QUI\ERP\Debug::getInstance()->log(
'OrderInProcess:: Paid Status changed to '.$this->getAttribute('paid_status')
);
// create order, if the payment status is paid and no order exists
if ($this->getAttribute('paid_status') === self::PAYMENT_STATUS_PAID
&& !$this->orderId) {
$this->createOrder(QUI::getUsers()->getSystemUser());
}
}
......@@ -186,6 +206,8 @@ public function isPosted()
*/
public function createOrder($PermissionUser = null)
{
QUI\ERP\Debug::getInstance()->log('OrderInProcess:: Create Order');
if ($this->hasPermissions($PermissionUser) === false) {
throw new QUI\Permissions\Exception(
QUI::getLocale()->get('quiqqer/system', 'exception.no.permission'),
......@@ -208,7 +230,7 @@ public function createOrder($PermissionUser = null)
Handler::getInstance()->tableOrderProcess(),
array(
'order_id' => $Order->getId(),
'hash' => $Order->getHash()
'hash' => $this->getHash()
),
array('id' => $this->getId())
);
......@@ -218,6 +240,9 @@ public function createOrder($PermissionUser = null)
// copy the data to the order
$data = $this->getDataForSaving();
$data['order_process_id'] = $this->getId();
$data['hash'] = $this->getHash();
$data['c_user'] = $this->cUser;
$data['paid_status'] = $this->getAttribute('paid_status');
QUI::getDataBase()->update(
Handler::getInstance()->table(),
......@@ -225,6 +250,8 @@ public function createOrder($PermissionUser = null)
array('id' => $Order->getId())
);
QUI\ERP\Debug::getInstance()->log('OrderInProcess:: Order created');
return $Order;
}
......@@ -244,6 +271,10 @@ protected function hasPermissions($PermissionUser = null)
return true;
}
if (QUI::getUsers()->isSystemUser($PermissionUser)) {
return true;
}
//@todo permissoins prüfen
return false;
......
<?php
// include quiqqer bootstrap for tests
require dirname(dirname(dirname(__FILE__))) . '/quiqqer/tests/bootstrap.php';
<?php
define('SYSTEM_INTERN', true);
require_once 'bootstrap.php';
// Order
$Order = QUI\ERP\Order\Handler::getInstance()->get('115');
echo $Order->getType();
echo PHP_EOL;
echo $Order->getId();
echo PHP_EOL;
// Payment
$Payment = QUI\ERP\Accounting\Payments\Payments::getInstance()->getPayment(23);
$Order->addPayment(1, $Payment->getPaymentType());
echo PHP_EOL;
echo PHP_EOL;
echo PHP_EOL;
\ No newline at end of file
0% Lade oder .
You are about to add 0 people to the discussion. Proceed with caution.
Bearbeitung dieser Nachricht zuerst beenden!
Bitte registrieren oder zum Kommentieren