Newer
Older
<?php
/**
* This file contains QUI\ERP\Accounting\ArticleList
*/
namespace QUI\ERP\Accounting;
/**
* Class ArticleList
*
* @package QUI\ERP\Accounting
*/
class ArticleList extends ArticleListUnique implements \IteratorAggregate
/**
* is the article list calculated?
* @var bool
*/
protected $calculated = false;
/**
* @var int|float|double
*/
protected $sum;
/**
* @var QUI\Interfaces\Users\User
*/
protected $User = null;
/**
* @var QUI\ERP\Currency\Currency
*/
protected $Currency = null;
/**
* @var int|float|double
*/
protected $subSum;
/**
* @var int|float|double
*/
protected $nettoSum;
/**
* @var int|float|double
*/
protected $nettoSubSum;
/**
* key 19% value[sum] = sum value[text] = text value[display_sum] formatiert
* @var array
*/
/**
* key 19% value[sum] = sum value[text] = text value[display_sum] formatiert
* @var array()
*/
protected $vatText;
/**
* Prüfen ob EU Vat für den Benutzer in Frage kommt
* @var
*/
protected $isEuVat = false;
/**
* Wird Brutto oder Netto gerechnet
* @var bool
*/
protected $isNetto = true;
/**
* Currency information
* @var array
*/
'currency_sign' => '',
'currency_code' => '',
'user_currency' => '',
'currency_rate' => ''
/**
* ArticleList constructor.
public function __construct(array $attributes = [])
{
if (!isset($attributes['calculations'])) {
}
if (!isset($attributes['articles'])) {
$attributes['articles'] = [];
}
if (!isset($attributes['priceFactors'])) {
$attributes['priceFactors'] = [];
}
parent::__construct($attributes);
}
/**
* Set the user for the list
* User for calculation
*
* @param QUI\Interfaces\Users\User $User
*/
public function setUser(QUI\Interfaces\Users\User $User)
{
$this->calculated = false;
$this->User = $User;
foreach ($this->articles as $Article) {
/* @var $Article Article */
$Article->setUser($User);
}
$this->calc();
}
/**
* Return the list user
*
* @return QUI\Interfaces\Users\User|QUI\Users\User
*/
public function getUser()
{
return $this->User;
}
/**
* Return the currency
*
* @return QUI\ERP\Currency\Currency
*/
public function getCurrency()
{

Henning Leutz
committed
return $this->Currency;
}
if (\is_array($this->currencyData) && !empty($this->currencyData['currency_code'])) {

Henning Leutz
committed
try {
$this->Currency = QUI\ERP\Currency\Handler::getCurrency(
$this->currencyData['currency_code']
);
return $this->Currency;
} catch (QUI\Exception $Exception) {
}
}
return QUI\ERP\Defaults::getCurrency();
}
/**
* Set the currency for the list
*
* @param QUI\ERP\Currency\Currency $Currency
*/
public function setCurrency(QUI\ERP\Currency\Currency $Currency)
{
$this->Currency = $Currency;
$this->currencyData = [
'currency_sign' => $this->Currency->getSign(),
'currency_code' => $this->Currency->getCode(),
'user_currency' => '',
'currency_rate' => $this->Currency->getExchangeRate()
];
if (isset($this->calculations['currencyData'])) {
$this->calculations['currencyData'] = [
'code' => $this->Currency->getCode(),
'sign' => $this->Currency->getSign(),
'rate' => $this->Currency->getExchangeRate()
];
}
if (\count($this->articles)) {
foreach ($this->articles as $Article) {
$Article->setCurrency($Currency);
}
}
}
/**
* Return the list as an array
*
* @return array
*/
public function toArray()
{
$data = parent::toArray();
if (empty($data['calculations'])) {
return $data;
}
$Currency = $this->getCurrency();
// format
$articles = $data['articles'];
$calculations = $data['calculations'];
$calculations['currencyData'] = $Currency->toArray();
$calculations['vatSum'] = QUI\ERP\Accounting\Calc::calculateTotalVatOfInvoice(
$calculations['vatArray']
);
$calculations['display_subSum'] = $Currency->format($calculations['subSum']);
$calculations['display_sum'] = $Currency->format($calculations['sum']);
$calculations['display_vatSum'] = $Currency->format($calculations['vatSum']);
foreach ($articles as $key => $article) {
$articles[$key]['display_sum'] = $Currency->format($article['sum']);
$articles[$key]['display_unitPrice'] = $Currency->format($article['unitPrice']);
}
$data['articles'] = $articles;
$data['calculations'] = $calculations;
/* @var $Factor PriceFactors\Factor */
foreach ($this->PriceFactors as $Factor) {
if (!$Factor->isVisible()) {
continue;
}
$result['attributes'][] = [
'title' => $Factor->getTitle(),
/**
* Parse this ArticleList to an ArticleListUnique
*
* @return ArticleListUnique
*/
public function toUniqueList()
{
$this->calc();
return new ArticleListUnique($this->toArray());
}
/**
* @return $this
*/
public function calc($Calc = null)
{
if ($this->calculated) {
return $this;
}
$self = $this;
if (!$Calc) {
$Calc = Calc::getInstance();
if ($this->User) {
$Calc->setUser($this->User);
}
}
$Calc->calcArticleList($this, function ($data) use ($self) {
$self->sum = $data['sum'];
$self->subSum = $data['subSum'];
$self->nettoSum = $data['nettoSum'];
$self->nettoSubSum = $data['nettoSubSum'];
$self->vatArray = $data['vatArray'];
$self->vatText = $data['vatText'];
$self->isEuVat = $data['isEuVat'];
$self->isNetto = $data['isNetto'];
$self->currencyData = $data['currencyData'];
'sum' => $self->sum,
'subSum' => $self->subSum,
'nettoSum' => $self->nettoSum,
'nettoSubSum' => $self->nettoSubSum,
'vatArray' => $self->vatArray,
'vatText' => $self->vatText,
'isEuVat' => $self->isEuVat,
'isNetto' => $self->isNetto,
'currencyData' => $self->currencyData
$self->setCurrency($self->getCurrency());
$self->calculated = true;
});
return $this;
}
//region Article Management
/**
* Add an article to the list
*
* @param Article $Article
*/
public function addArticle(Article $Article)
{
$this->articles[] = $Article;
if ($this->User) {
$Article->setUser($this->User);
}
if ($this->Currency) {
$Article->setCurrency($this->Currency);
}
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
}
/**
* Remove an article by its index position
*
* @param integer $index
*/
public function removeArticle($index)
{
if (isset($this->articles[$index])) {
unset($this->articles[$index]);
}
}
/**
* Replace an article at a specific position
*
* @param Article $Article
* @param integer $index
*/
public function replaceArticle(Article $Article, $index)
{
$this->articles[$index] = $Article;
}
/**
* Clears the list
*/
public function clear()
{
}
/**
//region Price Factors
/**
* Import a price factor list
*
* @param QUI\ERP\Accounting\PriceFactors\FactorList $PriceFactors
public function importPriceFactors(QUI\ERP\Accounting\PriceFactors\FactorList $PriceFactors)
{
$this->PriceFactors = $PriceFactors;
}
//endregion