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
*/
protected $processId;
/**
* @var null|array
*/
protected $transactions = null;

Henning Leutz
committed
/**
* @var null|QUI\ERP\Comments
*/
protected $History = null;
/**
* Process constructor.
*
* @param string $processId - the global process id
*/
public function __construct($processId)
{
$this->processId = $processId;
}
/**

Henning Leutz
committed
* Return the db table name
*

Henning Leutz
committed
* @return string
*/

Henning Leutz
committed
protected function table()
{

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($message, $time = false)
{
$this->getHistory()->addComment($message, $time);
QUI::getDataBase()->update(

Henning Leutz
committed
$this->table(),
['history' => $this->getHistory()->toJSON()],
['id' => $this->processId]
);
}
/**

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
*/
public function getHistory()
{

Henning Leutz
committed
if ($this->History === null) {
$result = QUI::getDataBase()->fetch([
'from' => $this->table(),
'where' => [
'id' => $this->processId
],
'limit' => 1
]);
$history = '';
if (isset($result[0]['history'])) {
$history = $result[0]['history'];
}
$this->History = QUI\ERP\Comments::unserialize($history);
}

Henning Leutz
committed
return $this->History;
}

Henning Leutz
committed
/**
* Return a complete history of all process objects
* invoices invoices and orders
*
* @return Comments
*/
public function getCompleteHistory()
{
$History = $this->getHistory();
$invoices = $this->getInvoices();
$orders = $this->getOrders();
foreach ($invoices as $Invoice) {
$History->import($Invoice->getHistory());
}
foreach ($orders as $Order) {
$History->import($Order->getHistory());
}
return $History;
}
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
//endregion
//region invoice
/**
* Return if the process has invoices or not
*
* @return bool
*/
public function hasInvoice()
{
$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
*/
public function hasTemporaryInvoice()
{
$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[]
*/
public function getInvoices()
{
$Handler = QUI\ERP\Accounting\Invoice\Handler::getInstance();
$invoices = $Handler->getInvoicesByGlobalProcessId($this->processId);
return $invoices;
}
//endregion
//region order
/**
* @return bool
*/
public function hasOrder()
{
return !($this->getOrder() === null);
}
/**

Henning Leutz
committed
* Return the first order of the process
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
*
* @return null|Order\Order|Order\OrderInProcess|Order\Order|Order\Order
*/
public function getOrder()
{
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
*/
public function getOrders()
{
try {
QUI::getPackage('quiqqer/order');
} catch (QUI\Exception $Exception) {
return [];
}
return QUI\ERP\Order\Handler::getInstance()->getOrdersByGlobalProcessId($this->processId);
}
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
//endregion
//region transactions
/**
* @return bool
*/
public function hasTransactions()
{
$transactions = $this->getTransactions();
return !!count($transactions);
}
/**
* Return all related transactions
*
* @return QUI\ERP\Accounting\Payments\Transactions\Transaction[];
*/
public function getTransactions()
{
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
}