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'];
|
|
}
|
|
}
|