Files
kupshop/bundles/External/SprintBundle/Util/InvoicesDownloader.php
2025-08-02 16:30:27 +02:00

124 lines
3.1 KiB
PHP

<?php
namespace External\SprintBundle\Util;
use FTP\Connection;
use KupShop\KupShopBundle\Util\System\PathFinder;
use Query\Operator;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class InvoicesDownloader
{
public static $baseDir = '/';
private $ftpconn;
public static $username = 'sprint_XML30';
public static $password = 'bwhCAm4C';
public static $server = 'ftp.sprint.cz';
private $pathFinder;
/** @var HeliosAPI */
private $heliosAPI;
public function getDocumentIdFromOrder($order_id)
{
return sqlQueryBuilder()->select('id_money')->from('money_orders')->where(
Operator::equals([
'id_order' => $order_id,
])
)->execute()->fetchOne();
}
public function hasOdd(int $id_order): bool
{
$order = new \Order();
if (!$order->createFromDB($id_order)) {
return false;
}
if (!$id_document = $this->getDocumentIdFromOrder($id_order)) {
return false;
}
if ($this->getOddFileName($id_document)) {
return true;
}
return false;
}
public function getInvoiceFileName($id_invoice): ?string
{
return $this->heliosAPI->getOrderInvoice((int) $id_invoice);
}
public function getOddFileName($id_invoice): ?string
{
return $this->heliosAPI->getOrderODD((int) $id_invoice);
}
public function processData(string $invoiceFile)
{
$result = $this->ftpDownload($invoiceFile);
if ($result) {
$response = new StreamedResponse(function () use ($result) {
echo file_get_contents($result);
});
$response->headers->set('Content-Type', 'application/pdf; charset=utf8');
return $response;
}
throw new NotFoundHttpException('Order does not have invoice');
}
private function getFTP(): false|Connection
{
if (!$this->ftpconn) {
$this->ftpconn = ftp_connect(self::$server, '21');
ftp_login($this->ftpconn, static::$username, static::$password);
ftp_pasv($this->ftpconn, true);
ftp_chdir($this->ftpconn, static::$baseDir);
}
return $this->ftpconn;
}
private function ftpDownload($filename)
{
$pathFinder = $this->getPathFinder();
$lDir = $pathFinder->getDataDir().'/';
$lPath = $lDir.$filename;
$rPath = '/'.$filename;
if (file_exists($lPath)) {
return $lPath;
}
if (!file_exists($lDir)) {
mkdir($lDir, 0777, true);
}
if (ftp_get($this->getFTP(), $lPath, $rPath)) {
return $lPath;
}
return false;
}
private function getPathFinder()
{
if (!$this->pathFinder) {
$this->pathFinder = PathFinder::getService();
}
return $this->pathFinder;
}
/**
* @required
*/
public function setHeliosAPI(HeliosAPI $heliosAPI): void
{
$this->heliosAPI = $heliosAPI;
}
}