From aa4a2a6ebb96d0732a9fa2842e2c78a024978d87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Zieli=C5=84ski?= Date: Thu, 25 Sep 2025 22:33:49 +0200 Subject: [PATCH] import apilo invoices --- .../importApiloInvoices.php | 67 ++++++++++++++++--- modules/Schedulers/_AddJobsHere.php | 10 +++ 2 files changed, 66 insertions(+), 11 deletions(-) diff --git a/modules/EcmInvoiceOuts/BimIT-eCommerceInvoices/importApiloInvoices.php b/modules/EcmInvoiceOuts/BimIT-eCommerceInvoices/importApiloInvoices.php index b848eddc..d9ba41d9 100644 --- a/modules/EcmInvoiceOuts/BimIT-eCommerceInvoices/importApiloInvoices.php +++ b/modules/EcmInvoiceOuts/BimIT-eCommerceInvoices/importApiloInvoices.php @@ -1,5 +1,4 @@ documents)); + $platforms = loadApiloPlatformsList($apilo_config['token']); + if (isset($invoices->documents) && count($invoices->documents) > 0) { foreach ($invoices->documents as $invoice) { - addapiloInvoice($invoice); + addapiloInvoice($invoice, $platforms, $apilo_config['token']); } } - return true; } @@ -40,13 +40,12 @@ function loadApiloConfiguration() } return $config; } - function loadApiloInvoices($token, $offset) { $url = "https://twinpol.apilo.com/rest/api/finance/documents/"; $params = [ 'type' => 1, - 'limit' => 100, + 'limit' => 50, 'offset' => $offset ]; $url .= '?' . http_build_query($params); @@ -68,7 +67,6 @@ function loadApiloInvoices($token, $offset) } return json_decode($response); } - function refreshApiloToken($refreshToken, $clientId, $clientSecret) { $url = "https://api.apilo.com/oauth/token"; @@ -116,11 +114,21 @@ function refreshApiloToken($refreshToken, $clientId, $clientSecret) return false; } - -function addApiloInvoice($invoice) +function addApiloInvoice($invoice, $platforms, $token) { $db = $GLOBALS['db']; + $platformId = loadApiloOrderPlatformId($token, $invoice->orderId); + $platformDescription = 'ERROR'; + foreach ($platforms as $platform) { + if ($platform->id == $platformId) { + $platformDescription = $platform->description; + break; + } + } + + $orderSource = 'Apilo | '.$platformDescription; + $invoiceType = 'normal'; if (isset($invoice->type)) { switch ($invoice->type) { @@ -134,6 +142,7 @@ function addApiloInvoice($invoice) } } + $customerName = ''; $customerNip = ''; $customerCity = ''; @@ -167,7 +176,6 @@ function addApiloInvoice($invoice) $currency = isset($invoice->originalCurrency) ? $invoice->originalCurrency : 'PLN'; - // Daty $issueDate = isset($invoice->invoicedAt) ? date("Y-m-d", strtotime(substr($invoice->invoicedAt, 0, 10))) : date("Y-m-d"); $saleDate = isset($invoice->soldAt) ? date("Y-m-d", strtotime(substr($invoice->soldAt,0,10))) : $issueDate; @@ -182,7 +190,7 @@ function addApiloInvoice($invoice) $invoiceType, $issueDate, $saleDate, - 'apilo', + $orderSource, isset($invoice->orderId) ? $invoice->orderId : '', $db->quote($customerName), $customerNip, @@ -267,7 +275,44 @@ function addApiloInvoiceProduct($invoiceId, $item) error_log("Błąd dodawania pozycji faktury apilo: " . $db->last_error); } } - +function loadApiloPlatformsList($token) { + $url = "https://twinpol.apilo.com/rest/api/orders/platform/map/"; + $headers = [ + 'Authorization: Bearer ' . $token, + 'Content-Type: application/json', + 'Accept: application/json' + ]; + $curl = curl_init($url); + curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); + curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl, CURLOPT_TIMEOUT, 30); + $response = curl_exec($curl); + $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); + curl_close($curl); + if ($httpCode !== 200) { + return (object)['error' => 'HTTP Error: ' . $httpCode]; + } + return json_decode($response); +} +function loadApiloOrderPlatformId($token, $orderId) { + $url = "https://twinpol.apilo.com/rest/api/orders/".$orderId."/"; + $headers = [ + 'Authorization: Bearer ' . $token, + 'Content-Type: application/json', + 'Accept: application/json' + ]; + $curl = curl_init($url); + curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); + curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl, CURLOPT_TIMEOUT, 30); + $response = curl_exec($curl); + $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); + curl_close($curl); + if ($httpCode !== 200) { + return (object)['error' => 'HTTP Error: ' . $httpCode]; + } + return json_decode($response)->platformAccountId; +} function brecho($msg) { echo '
';
diff --git a/modules/Schedulers/_AddJobsHere.php b/modules/Schedulers/_AddJobsHere.php
index 4fe6e959..8b5971ef 100644
--- a/modules/Schedulers/_AddJobsHere.php
+++ b/modules/Schedulers/_AddJobsHere.php
@@ -68,6 +68,16 @@ $job_strings = array(
     2 => 'importBaselinkerCorrectingInvoices'
 );
 
+function importApiloInvoices() {
+    try {
+        $GLOBALS['db']->query("USE preDb_0dcc87940d3655fa574b253df04ca1c3;");
+        require_once('modules/EcmInvoiceOuts/BimIT-eCommerceInvoices/importApiloInvoices.php');
+        importApiloInvoices();
+        return true;
+    } catch (Exception $e) {
+        return false;
+    }
+}
 function importBaselinkerInvoices()
 {
     try {