Newer
Older
<?php
/**
* This file contains QUI\ERP\Accounting\ArticleList
*/
namespace QUI\ERP\Accounting;
/**
* Class ArticleList
*
* @package QUI\ERP\Accounting
*/
class ArticleList extends ArticleListUnique
{
/**
* 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
if (!is_null($this->Currency)) {
return $this->Currency;
}
if (is_array($this->currencyData) && !empty($this->currencyData['currency_code'])) {
try {
$this->Currency = QUI\ERP\Currency\Handler::getCurrency(
$this->currencyData['currency_code']
);
return $this->Currency;
} catch (QUI\Exception $Exception) {
}
}
return QUI\ERP\Defaults::getCurrency();
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
}
/**
* Set the currency for the list
*
* @param QUI\ERP\Currency\Currency $Currency
*/
public function setCurrency(QUI\ERP\Currency\Currency $Currency)
{
$this->Currency = $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['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 QUI\ERP\Products\Utils\PriceFactor */
foreach ($this->PriceFactors->sort() as $Factor) {
if (!$Factor->isVisible()) {
continue;
}
$result['attributes'][] = [
'title' => $Factor->getTitle(),
'valueText' => $Factor->getValueText(),
];
}
/**
* Parse this ArticleList to an ArticleListUnique
*
* @return ArticleListUnique
*/
public function toUniqueList()
{
$this->calc();
return new ArticleListUnique($this->toArray());
}
/**
*/
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->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);
}
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
}
/**
* 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\Products\Utils\PriceFactors $PriceFactors
*/
public function importPriceFactors($PriceFactors)
{
$this->PriceFactors = $PriceFactors;
}
//endregion