mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-12-27 07:00:29 +01:00
86 lines
2.2 KiB
PHP
86 lines
2.2 KiB
PHP
|
<?php
|
||
|
|
||
|
declare(strict_types=1);
|
||
|
|
||
|
namespace Xentral\Modules\CopperSurcharge\Service;
|
||
|
|
||
|
use DateTimeInterface;
|
||
|
use Xentral\Components\Database\Database;
|
||
|
use Xentral\Modules\CopperSurcharge\Exception\EmptyResultException;
|
||
|
|
||
|
final class PurchasePriceGateway
|
||
|
{
|
||
|
|
||
|
/** @var Database $db */
|
||
|
private $db;
|
||
|
|
||
|
/**
|
||
|
* @param Database $db
|
||
|
*/
|
||
|
public function __construct(Database $db)
|
||
|
{
|
||
|
$this->db = $db;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param DateTimeInterface $calcDate
|
||
|
* @param int $copperArticleId
|
||
|
*
|
||
|
* @throws EmptyResultException
|
||
|
*
|
||
|
* @return float
|
||
|
*/
|
||
|
public function getDelCopperPriceByDate(DateTimeInterface $calcDate, int $copperArticleId): float
|
||
|
{
|
||
|
$sql =
|
||
|
"SELECT data.price, data.valid_to FROM(
|
||
|
SELECT
|
||
|
e.preis AS `price`,
|
||
|
IF(
|
||
|
e.gueltig_bis = '0000-00-00',
|
||
|
CURDATE(),
|
||
|
e.gueltig_bis
|
||
|
) AS `valid_to`
|
||
|
FROM `einkaufspreise` AS `e`
|
||
|
WHERE e.artikel = :copper_article_id
|
||
|
) AS `data`
|
||
|
WHERE data.valid_to <= :calc_date
|
||
|
ORDER BY data.valid_to DESC
|
||
|
LIMIT 1";
|
||
|
|
||
|
$result = $this->db->fetchAll(
|
||
|
$sql,
|
||
|
[
|
||
|
'copper_article_id' => $copperArticleId,
|
||
|
'calc_date' => $calcDate->format('Y-m-d'),
|
||
|
]
|
||
|
);
|
||
|
|
||
|
if (empty($result)) {
|
||
|
$sql =
|
||
|
"SELECT
|
||
|
e.preis AS `price`
|
||
|
FROM `einkaufspreise` AS `e`
|
||
|
WHERE id = (
|
||
|
SELECT
|
||
|
MIN(e2.id)
|
||
|
FROM `einkaufspreise` AS `e2`
|
||
|
WHERE e2.artikel = :copper_article_id
|
||
|
)";
|
||
|
|
||
|
$result = $this->db->fetchAll(
|
||
|
$sql,
|
||
|
[
|
||
|
'copper_article_id' => $copperArticleId,
|
||
|
]
|
||
|
);
|
||
|
|
||
|
if (empty($result)) {
|
||
|
throw new EmptyResultException('No prices found for article: ' . $copperArticleId);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return (float)$result[0]['price'];
|
||
|
}
|
||
|
}
|