Newer
Older
<?php
/**
* This file contains QUI\ERP\Process
*/
namespace QUI\ERP;
use QUI;
/**
* Class Process

Henning Leutz
committed
* - represents a complete erp process
*
* @package QUI\ERP
*/
class Process
{
/**
* @var string
*/
/**
* @var null|array
*/

Henning Leutz
committed
/**
* @var null|QUI\ERP\Comments
*/

Henning Leutz
committed
/**
* Process constructor.
*
* @param string $processId - the global process id
*/
{
$this->processId = $processId;
}
/**

Henning Leutz
committed
* Return the db table name
*

Henning Leutz
committed
* @return string
*/
{

Henning Leutz
committed
return QUI::getDBTableName('process');
}

Henning Leutz
committed
//region messages

Henning Leutz
committed
/**
* Add a comment to the history for the complete process
*
* @param string $message
* @param int|bool $time - optional, unix timestamp
*/
public function addHistory(string $message, $time = false)

Henning Leutz
committed
{
$this->getHistory()->addComment($message, $time);
try {
QUI::getDataBase()->update(
$this->table(),
['history' => $this->getHistory()->toJSON()],
['id' => $this->processId]
);
} catch (\QUI\Exception $Exception) {
QUI\System\Log::addError($Exception->getMessage());
}
}
/**

Henning Leutz
committed
* Return the history of the process
* This history only contains the process history
*
* If you want the complete history of all process objects, use getCompleteHistory()
*
* @return QUI\ERP\Comments
*/
{

Henning Leutz
committed
if ($this->History === null) {
$history = '';
'where' => [
'id' => $this->processId
],
'limit' => 1
if (isset($result[0]['history'])) {
$history = $result[0]['history'];
} else {
QUI::getDataBase()->insert($this->table(), [
'id' => $this->processId
]);
}
} catch (\QUI\Exception $Exception) {
QUI\System\Log::addError($Exception->getMessage());

Henning Leutz
committed
}
$this->History = QUI\ERP\Comments::unserialize($history);
}

Henning Leutz
committed
return $this->History;
}

Henning Leutz
committed
/**
* Return a complete history of all process objects

Henning Leutz
committed
*
* @return Comments
*/

Henning Leutz
committed
{
$History = $this->getHistory();
$invoices = $this->getInvoices();

Henning Leutz
committed
foreach ($invoices as $Invoice) {
$History->import($Invoice->getHistory());
}
foreach ($orders as $Order) {
$History->import($Order->getHistory());
}
try {
QUI::getEvents()->fireEvent('quiqqerErpGetCompleteHistory', [$this, $this->processId]);
} catch (\Exception $exception) {
QUI\System\Log::addError($exception->getMessage());
}
try {
QUI::getEvents()->fireEvent('quiqqerErpProcessHistory', [$this, $this->processId]);
} catch (\Exception $exception) {
QUI\System\Log::addError($exception->getMessage());
}

Henning Leutz
committed
return $History;
}
//endregion
//region invoice
/**
* Return if the process has invoices or not
*
* @return bool
*/
{
$invoices = $this->getInvoices();
foreach ($invoices as $Invoice) {
if ($Invoice instanceof QUI\ERP\Accounting\Invoice\Invoice) {
return true;
}
}
return false;
}
/**
* Return if the process has temporary invoices or not
*
* @return bool
*/
{
$invoices = $this->getInvoices();
foreach ($invoices as $Invoice) {
if ($Invoice instanceof QUI\ERP\Accounting\Invoice\InvoiceTemporary) {
return true;
}
}
return false;
}
/**

Henning Leutz
committed
* @return Accounting\Invoice\Invoice[]|Accounting\Invoice\InvoiceTemporary[]
*/
{
try {
return QUI\ERP\Accounting\Invoice\Handler::getInstance()->getInvoicesByGlobalProcessId($this->processId);
} catch (\QUI\Exception $Exception) {
return [];
}
}
//endregion
//region order
/**
* @return bool
*/
{
return !($this->getOrder() === null);
}
/**

Henning Leutz
committed
* Return the first order of the process
*
*/
public function getOrder(): Order\OrderInProcess|Order\Order|null
{
try {
QUI::getPackage('quiqqer/order');
} catch (QUI\Exception $Exception) {
return null;
}
$OrderHandler = QUI\ERP\Order\Handler::getInstance();
try {
return $OrderHandler->getOrderByGlobalProcessId($this->processId);
} catch (QUI\Exception $Exception) {
QUI\System\Log::writeDebugException($Exception);
}
try {
return $OrderHandler->getOrderByHash($this->processId);
} catch (QUI\Exception $Exception) {
QUI\System\Log::writeDebugException($Exception);
}
return null;
}

Henning Leutz
committed
/**
* Return all orders from the process
*
* @return array|Order\Order|Order\Order[]|Order\OrderInProcess[]

Henning Leutz
committed
*/
public function getOrders(): array

Henning Leutz
committed
{
try {
QUI::getPackage('quiqqer/order');
return QUI\ERP\Order\Handler::getInstance()->getOrdersByGlobalProcessId($this->processId);

Henning Leutz
committed
} catch (QUI\Exception $Exception) {
return [];
}
}
//endregion
//region transactions
/**
* @return bool
*/
{
$transactions = $this->getTransactions();
}
/**
* Return all related transactions
*
* @return QUI\ERP\Accounting\Payments\Transactions\Transaction[];
*/
{
try {
QUI::getPackage('quiqqer/payment-transactions');
} catch (QUI\Exception $Exception) {
return [];
}
if ($this->transactions !== null) {
return $this->transactions;
}
$Transactions = QUI\ERP\Accounting\Payments\Transactions\Handler::getInstance();
$this->transactions = $Transactions->getTransactionsByProcessId($this->processId);
return $this->transactions;
}
//endregion
}