1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
<?php
/* --------------------------------------------------------------
InvoiceArchiveReadService.inc.php 2016-10-06
Gambio GmbH
http://www.gambio.de
Copyright (c) 2016 Gambio GmbH
Released under the GNU General Public License (Version 2)
[http://www.gnu.org/licenses/gpl-2.0.html]
--------------------------------------------------------------
*/
/**
* Class InvoiceListArchiveReadService
*
* @category System
* @package Invoice
*/
class InvoiceArchiveReadService implements InvoiceArchiveReadServiceInterface
{
/**
* @var InvoiceListGeneratorInterface
*/
protected $invoiceListGenerator;
/**
* @var InvoiceServiceSettingsInterface
*/
protected $invoiceServiceSettings;
/**
* InvoiceListArchiveReadService constructor.
*
* @param InvoiceListGeneratorInterface $invoiceListGenerator
* @param InvoiceServiceSettingsInterface $invoiceServiceSettings
*/
public function __construct(InvoiceListGeneratorInterface $invoiceListGenerator,
InvoiceServiceSettingsInterface $invoiceServiceSettings)
{
$this->invoiceListGenerator = $invoiceListGenerator;
$this->invoiceServiceSettings = $invoiceServiceSettings;
}
/**
* Returns an invoice list item collection by the given conditions.
*
* The other arguments helps to control fetched data.
*
* @param array $conditions (Optional) Conditions for tht where clause.
* @param IntType|null $startIndex (Optional) Start index for the limit clause.
* @param IntType|null $maxCount (Optional) Max count for the limit clause.
* @param StringType|null $orderBy (Optional) Sort order of fetched data.
*
* @return InvoiceListItemCollection
*/
public function getInvoiceListByConditions(array $conditions = [],
IntType $startIndex = null,
IntType $maxCount = null,
StringType $orderBy = null)
{
return $this->invoiceListGenerator->getInvoiceListByConditions($conditions, $startIndex, $maxCount, $orderBy);
}
/**
* Returns the invoice file download information.
*
* @param IdType $invoiceId invoice_id of expected entry.
*
* @return FileDownloadInformation
*/
public function getInvoiceFileDownloadInfoByInvoiceId(IdType $invoiceId)
{
$invoiceListItem = $this->getInvoiceListItemById($invoiceId);
$filePath = $this->invoiceServiceSettings->getInvoicesDirPath() . $invoiceListItem->getInvoiceFilename();
$preparedFilename = preg_replace('/_[a-z0-9]{32}/', '', $invoiceListItem->getInvoiceFilename());
return MainFactory::create('FileDownloadInformation',
MainFactory::create('ExistingFile', new NonEmptyStringType($filePath)),
new FilenameStringType($preparedFilename));
}
/**
* Returns the invoice to the given id
*
* @param IdType $invoiceId
*
* @throws UnexpectedValueException if invoice does not exist
*
* @return InvoiceListItem
*/
public function getInvoiceListItemById(IdType $invoiceId)
{
$itemCollection = $this->getInvoiceListByConditions(['invoice_id' => $invoiceId->asInt()]);
if($itemCollection->isEmpty())
{
throw new UnexpectedValueException('The requested invoice was not found in database (ID:'
. $invoiceId->asInt() . ')');
}
return $itemCollection->getItem(0);
}
/**
* Filter the invoice records with specific conditions.
*
* Provide the filtering values in the conditions array in order to fetch a filtered result set.
*
* @param array $filterParameters Contains an array of the GET parameters to be used for filtering the order
* records.
* @param IntType $startIndex Start index of order list item collections which should be returned.
* @param IntType $maxCount Maximum amount of collections.
* @param StringType $orderBy Argument to specify the order.
*
* @return InvoiceListItemCollection
*/
public function filterInvoiceList(array $filterParameters,
IntType $startIndex = null,
IntType $maxCount = null,
StringType $orderBy = null)
{
return $this->invoiceListGenerator->filterInvoiceList($filterParameters, $startIndex, $maxCount, $orderBy);
}
/**
* Get the filtered invoices count.
*
* @param array $filterParameters
*
* @return int
*/
public function filterInvoiceListCount(array $filterParameters)
{
return $this->invoiceListGenerator->filterInvoiceListCount($filterParameters);
}
}