Integrations DI refactor, remove Sellasist/Baselinker, fix product-edit encoding (0.263)
- New: Domain\Integrations\IntegrationsRepository + admin\Controllers\IntegrationsController (DI) - Cleanup: removed all Sellasist and Baselinker integrations from entire project - Fix: product-edit.php Polish characters (UTF-8/CP1250 double-encoding) - Update: factory\Integrations as facade (Apilo + ShopPRO only) - Tests: 212 tests, 577 assertions Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
404
cron.php
404
cron.php
@@ -53,10 +53,7 @@ $mdb = new medoo( [
|
||||
] );
|
||||
|
||||
$settings = \front\factory\Settings::settings_details();
|
||||
$baselinker_settings = \front\factory\Shop::baselinker_settings();
|
||||
$apilo_settings = \admin\factory\Integrations::apilo_settings();
|
||||
$baselinker_settings = \admin\factory\Integrations::baselinker_settings();
|
||||
$sellasist_settings = \admin\factory\Integrations::sellasist_settings();
|
||||
|
||||
function parsePaczkomatAddress($input)
|
||||
{
|
||||
@@ -113,48 +110,6 @@ function getImageUrlById($id) {
|
||||
return isset($data['img']) ? $data['img'] : null;
|
||||
}
|
||||
|
||||
// pobieranie informacji o produkcie z sellasist.pl
|
||||
if ( $sellasist_settings['enabled'] and $sellasist_settings['sync_products'] and $sellasist_settings['api_code'] )
|
||||
{
|
||||
if ( $result = $mdb -> query( 'SELECT id, sellasist_product_id, sellasist_get_data_date, sellasist_product_name FROM pp_shop_products WHERE sellasist_product_id IS NOT NULL AND sellasist_product_id != 0 AND ( sellasist_get_data_date IS NULL OR sellasist_get_data_date <= \'' . date( 'Y-m-d H:i:s', strtotime( '-10 minutes', time() ) ) . '\' ) ORDER BY sellasist_get_data_date ASC LIMIT 1' ) -> fetch( \PDO::FETCH_ASSOC ) )
|
||||
{
|
||||
$url = "https://projectpro.sellasist.pl/api/v1/products/" . $result['sellasist_product_id'] . "/";
|
||||
|
||||
$api_code = \admin\factory\Integrations::sellasist_settings( 'api_code' );
|
||||
|
||||
$ch = curl_init( $url );
|
||||
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
|
||||
curl_setopt( $ch, CURLOPT_HTTPHEADER, [
|
||||
"apiKey: " . $api_code,
|
||||
"accept: application/json"
|
||||
] );
|
||||
|
||||
$response = curl_exec( $ch );
|
||||
$responseData = json_decode( $response, true );
|
||||
|
||||
if ( $responseData['id'] )
|
||||
{
|
||||
$price_brutto = $responseData['price'];
|
||||
$vat = $mdb -> get( 'pp_shop_products', 'vat', [ 'apilo_product_id' => $result['apilo_product_id'] ] );
|
||||
$price_netto = $price_brutto / ( ( 100 + $vat ) / 100 );
|
||||
|
||||
$mdb -> update( 'pp_shop_products', [ 'price_netto' => \S::normalize_decimal( $price_netto, 2 ), 'price_brutto' => \S::normalize_decimal( $price_brutto, 2 ) ], [ 'sellasist_product_id' => $result['sellasist_product_id'] ] );
|
||||
|
||||
\admin\factory\ShopProduct::update_product_combinations_prices( (int)$result['id'], $price_brutto, $vat, null );
|
||||
}
|
||||
|
||||
// aktualizowanie stanu magazynowego
|
||||
$mdb -> update( 'pp_shop_products', [ 'quantity' => $responseData['storages'][0]['quantity'] ], [ 'sellasist_product_id' => $result['sellasist_product_id'] ] );
|
||||
|
||||
$mdb -> update( 'pp_shop_products', [ 'sellasist_get_data_date' => date( 'Y-m-d H:i:s' ) ], [ 'sellasist_product_id' => $result['sellasist_product_id'] ] );
|
||||
|
||||
// Czyszczenie cache produktu
|
||||
\S::clear_product_cache( (int)$result['id'] );
|
||||
|
||||
echo '<p>Zaktualizowałem dane produktu <b>' . $result['sellasist_product_name'] . ' #' . $result['id'] . '</b></p>';
|
||||
}
|
||||
}
|
||||
|
||||
// pobieranie informacji o produkcie z apilo.com
|
||||
if ( $apilo_settings['enabled'] and $apilo_settings['sync_products'] and $apilo_settings['access-token'] )
|
||||
{
|
||||
@@ -230,233 +185,6 @@ if ( $apilo_settings['enabled'] and $apilo_settings['access-token'] and ( !$apil
|
||||
echo '<p>Zaktualizowałem ceny produktów (APILO)</p>';
|
||||
}
|
||||
|
||||
// pobieranie informachji o produkcie w tym: cen, cen promocyjnych, wagi, stanów magazynowych
|
||||
if ( $baselinker_settings['enabled'] and $baselinker_settings['sync_products'] and $baselinker_settings['api_code'] )
|
||||
{
|
||||
if ( $result = $mdb -> query( 'SELECT id, baselinker_product_id, baselinker_get_data_date FROM pp_shop_products WHERE baselinker_product_id IS NOT NULL AND baselinker_product_id != 0 AND ( baselinker_get_data_date IS NULL OR baselinker_get_data_date <= \'' . date( 'Y-m-d H:i:s', strtotime( '-1440 minutes', time() ) ) . '\' ) ORDER BY baselinker_get_data_date ASC LIMIT 1' ) -> fetch( \PDO::FETCH_ASSOC ) )
|
||||
{
|
||||
$methodParams = '{
|
||||
"inventory_id": "' . $baselinker_settings['inventory_id'] . '",
|
||||
"products": [' . $result['baselinker_product_id'] . ']
|
||||
}';
|
||||
|
||||
$apiParams = [
|
||||
"token" => $baselinker_settings['api_code'],
|
||||
"method" => "getInventoryProductsData",
|
||||
"parameters" => $methodParams
|
||||
];
|
||||
|
||||
$curl = curl_init( "https://api.baselinker.com/connector.php" );
|
||||
curl_setopt( $curl, CURLOPT_POST, 1 );
|
||||
curl_setopt( $curl, CURLOPT_POSTFIELDS, http_build_query( $apiParams ) );
|
||||
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true );
|
||||
$response = json_decode( curl_exec( $curl ), true );
|
||||
|
||||
$i = 0;
|
||||
|
||||
if ( $response['status'] == 'SUCCESS' and count( $response['products'] ) )
|
||||
{
|
||||
foreach ( $response['products'] as $baselinker_product_id => $baselinker_product )
|
||||
{
|
||||
// aktualizowanie ceny
|
||||
if ( $vat = $mdb -> get( 'pp_shop_products', 'vat', [ 'baselinker_product_id' => $baselinker_product_id ] ) )
|
||||
{
|
||||
$price_brutto = $baselinker_product['prices'][$baselinker_settings['price_group']];
|
||||
$price_netto = $baselinker_product['prices'][$baselinker_settings['price_group']] / ( ( 100 + $vat ) / 100 );
|
||||
|
||||
$price_brutto_promo = $baselinker_product['prices'][ $baselinker_settings['price_group_promo'] ];
|
||||
|
||||
if ( $price_brutto_promo and $price_brutto_promo != $price_brutto )
|
||||
{
|
||||
$price_netto_promo = $baselinker_product['prices'][$baselinker_settings['price_group_promo']] / ( ( 100 + $vat ) / 100 );
|
||||
$mdb -> update( 'pp_shop_products', [ 'price_netto_promo' => \S::normalize_decimal( $price_netto_promo, 2 ), 'price_brutto_promo' => \S::normalize_decimal( $price_brutto_promo, 2 ) ], [ 'baselinker_product_id' => $baselinker_product_id ] );
|
||||
}
|
||||
else
|
||||
$mdb -> update( 'pp_shop_products', [ 'price_netto_promo' => null, 'price_brutto_promo' => null ], [ 'baselinker_product_id' => $baselinker_product_id ] );
|
||||
|
||||
$mdb -> update( 'pp_shop_products', [ 'price_netto' => \S::normalize_decimal( $price_netto, 2 ), 'price_brutto' => \S::normalize_decimal( $price_brutto, 2 ) ], [ 'baselinker_product_id' => $baselinker_product_id ] );
|
||||
|
||||
$product_id = $mdb -> get( 'pp_shop_products', 'id', [ 'baselinker_product_id' => $baselinker_product_id ] );
|
||||
$vat = $mdb -> get( 'pp_shop_products', 'vat', [ 'baselinker_product_id' => $baselinker_product_id ] );
|
||||
|
||||
\admin\factory\ShopProduct::update_product_combinations_prices( (int)$product_id, $price_brutto, $vat, $price_brutto_promo );
|
||||
}
|
||||
|
||||
// aktualizowanie wagi
|
||||
$mdb -> update( 'pp_shop_products', [ 'weight' => $baselinker_product['weight'] ], [ 'baselinker_product_id' => $baselinker_product_id ] );
|
||||
|
||||
// aktualizowanie stanu magazynowego
|
||||
$mdb -> update( 'pp_shop_products', [ 'quantity' => $baselinker_product['stock'][$baselinker_settings['stock_id']] ], [ 'baselinker_product_id' => $baselinker_product_id ] );
|
||||
|
||||
$mdb -> update( 'pp_shop_products', [ 'baselinker_get_data_date' => date( 'Y-m-d H:i:s' ) ], [ 'baselinker_product_id' => $baselinker_product_id ] );
|
||||
|
||||
// Czyszczenie cache produktu
|
||||
\S::clear_product_cache( (int)$result['id'] );
|
||||
|
||||
echo '<p>Zaktualizowałem dane produktu <b>' . $baselinker_product['text_fields']['name'] . ' #' . $result['id'] . '</b></p>';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$mdb -> update( 'pp_shop_products', [ 'baselinker_get_data_date' => date( 'Y-m-d H:i:s' ) ], [ 'baselinker_product_id' => $baselinker_product_id ] );
|
||||
echo '<p>Z powodu błędu pominąłem produkt o ID: <b>' . $result['id'] . '</b></p>';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// sprawdzanie statusów zamówień w sellasist.pl jeżeli zamówienie nie jest zrealizowane, anulowane lub nieodebrane
|
||||
if ( $sellasist_settings['enabled'] and $sellasist_settings['sync_orders'] and $sellasist_settings['api_code'] and $sellasist_settings['sync_orders_date_start'] <= date( 'Y-m-d H:i:s' ) )
|
||||
{
|
||||
$order = $mdb -> query( 'SELECT id, sellasist_order_id, sellasist_order_status_date, number FROM pp_shop_orders WHERE sellasist_order_id IS NOT NULL AND sellasist_order_id != 0 AND ( status != 6 AND status != 8 AND status != 9 ) AND ( sellasist_order_status_date IS NULL OR sellasist_order_status_date <= \'' . date( 'Y-m-d H:i:s', strtotime( '-30 minutes', time() ) ) . '\' ) ORDER BY sellasist_order_status_date ASC LIMIT 1' ) -> fetch( \PDO::FETCH_ASSOC );
|
||||
if ( $order['sellasist_order_id'] )
|
||||
{
|
||||
$url = "https://projectpro.sellasist.pl/api/v1/orders/" . $order['sellasist_order_id'] . "/";
|
||||
|
||||
$api_code = \admin\factory\Integrations::sellasist_settings( 'api_code' );
|
||||
|
||||
$ch = curl_init( $url );
|
||||
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
|
||||
curl_setopt( $ch, CURLOPT_HTTPHEADER, [
|
||||
"apiKey: " . $api_code,
|
||||
"accept: application/json"
|
||||
] );
|
||||
|
||||
$response = curl_exec( $ch );
|
||||
$responseData = json_decode( $response, true );
|
||||
|
||||
if ( $responseData['id'] and $responseData['status']['id'] ) {
|
||||
$shop_status_id = \front\factory\ShopStatuses::get_shop_status_by_integration_status_id( 'sellasist', $responseData['status']['id'] );
|
||||
$mdb -> update( 'pp_shop_orders', [ 'status' => $shop_status_id, 'sellasist_order_status_date' => date( 'Y-m-d H:i:s' ) ], [ 'id' => $order['id'] ] );
|
||||
echo '<p>Zaktualizowałem status zamówienia <b>' . $order['number'] . '</b></p>';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// wysyłanie zamówień do sellasist.pl
|
||||
if ( $sellasist_settings['enabled'] and $sellasist_settings['sync_orders'] and $sellasist_settings['api_code'] and $sellasist_settings['sync_orders_date_start'] <= date( 'Y-m-d H:i:s' ) )
|
||||
{
|
||||
$orders = $mdb -> select( 'pp_shop_orders', '*', [ 'AND' => [ 'sellasist_order_id' => null, 'date_order[<=]' => date( 'Y-m-d H:i:s', strtotime( '-1 minutes', time() ) ), 'date_order[>=]' => $sellasist_settings['sync_orders_date_start'] ], 'ORDER' => [ 'date_order' => 'ASC' ], 'LIMIT' => 1 ] );
|
||||
foreach ( $orders as $order )
|
||||
{
|
||||
$z = 0;
|
||||
|
||||
$products = $mdb -> select( 'pp_shop_order_products', '*', [ 'order_id' => $order['id'] ] );
|
||||
$products_array = [];
|
||||
foreach ( $products as $product )
|
||||
{
|
||||
$json_data['carts'][] = [
|
||||
'id' => $product['product_id'],
|
||||
'product_id' => \front\factory\ShopProduct::get_sellasist_product_id( $product['product_id'] ),
|
||||
'name' => $product['name'],
|
||||
'quantity' => $product['quantity'],
|
||||
'price' => $product['price_brutto_promo'] ? $product['price_brutto_promo'] : $product['price_brutto'],
|
||||
'message' => strip_tags( $product['attributes'] ) . ' | ' . $product['message']
|
||||
];
|
||||
}
|
||||
|
||||
$json_data['id'] = $order['id'];
|
||||
$json_data['currency'] = 'pln';
|
||||
$json_data['payment_status'] = $order['paid'] ? 'paid' : 'unpaid';
|
||||
$json_data['paid'] = $order['paid'] ? str_replace( ',', '.', $order['summary'] ) : 0;
|
||||
$json_data['status'] = \front\factory\ShopStatuses::get_sellasist_status_id( $order['status'] );
|
||||
$json_data['email'] = $order['client_email'];
|
||||
// date
|
||||
$json_data['date'] = date( 'Y-m-d H:i:s', strtotime( $order['date_order'] ) );
|
||||
// shipment_price
|
||||
$json_data['shipment_price'] = $order['transport_cost'];
|
||||
// payment_id
|
||||
$json_data['payment_id'] = \front\factory\ShopPaymentMethod::get_sellasist_payment_method_id( $order['payment_method_id'] );
|
||||
// payment_name
|
||||
$json_data['payment_name'] = $order['payment_method'];
|
||||
// shipment_id
|
||||
$json_data['shipment_id'] = \front\factory\ShopTransport::get_sellasist_transport_id( $order['transport_id'] );
|
||||
// shipment_name
|
||||
$json_data['shipment_name'] = strip_tags( $order['transport'] );
|
||||
// invoice
|
||||
$json_data['invoice'] = 0;
|
||||
// comment
|
||||
$json_data['comment'] = $order['message'];
|
||||
// bill_address
|
||||
$json_data['bill_address'] = [
|
||||
'name' => $order['client_name'],
|
||||
'surname' => $order['client_surname'],
|
||||
'street' => $order['client_street'],
|
||||
'city' => $order['client_city'],
|
||||
'postcode' => $order['client_postal_code'],
|
||||
'phone' => $order['client_phone'],
|
||||
'email' => $order['client_email'],
|
||||
'country' => [
|
||||
'id' => 170,
|
||||
'name' => 'Poland',
|
||||
'code' => 'PL'
|
||||
]
|
||||
];
|
||||
// shipment_address
|
||||
$json_data['shipment_address'] = [
|
||||
'name' => $order['client_name'],
|
||||
'surname' => $order['client_surname'],
|
||||
'street' => $order['client_street'],
|
||||
'city' => $order['client_city'],
|
||||
'postcode' => $order['client_postal_code'],
|
||||
'phone' => $order['client_phone'],
|
||||
'email' => $order['client_email'],
|
||||
'country' => [
|
||||
'id' => 170,
|
||||
'name' => 'Poland',
|
||||
'code' => 'PL'
|
||||
]
|
||||
];
|
||||
|
||||
// pickup_point
|
||||
if ( $order['inpost_paczkomat'] )
|
||||
{
|
||||
$pickup = explode( ' | ', $order['inpost_paczkomat'] );
|
||||
$pickup_code = $pickup[0];
|
||||
$pickup_address = $pickup[1];
|
||||
|
||||
$json_data['pickup_point'] = [
|
||||
'code' => $pickup_code,
|
||||
'type' => 'inpost',
|
||||
'address' => $pickup_address
|
||||
];
|
||||
}
|
||||
|
||||
// URL docelowe
|
||||
$url = "https://projectpro.sellasist.pl/api/v1/orders";
|
||||
|
||||
// Nagłówki
|
||||
$headers = array(
|
||||
"accept: application/json",
|
||||
"apiKey: " . $sellasist_settings['api_code'],
|
||||
"Content-Type: application/json"
|
||||
);
|
||||
|
||||
$ch = curl_init();
|
||||
curl_setopt($ch, CURLOPT_URL, $url);
|
||||
curl_setopt($ch, CURLOPT_POST, 1);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($json_data) );
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
$response = curl_exec($ch);
|
||||
if (curl_errno($ch)) {
|
||||
echo 'Błąd cURL: ' . curl_error($ch);
|
||||
}
|
||||
curl_close($ch);
|
||||
$response = json_decode( $response, true );
|
||||
|
||||
if ( $response['status'] == 'exist' ) {
|
||||
|
||||
$mdb -> update( 'pp_shop_orders', [ 'sellasist_order_id' => $response['order_id'] ], [ 'id' => $order['id'] ] );
|
||||
|
||||
} else if ( $response['id'] ) {
|
||||
|
||||
$mdb -> update( 'pp_shop_orders', [ 'sellasist_order_id' => $response['id'] ], [ 'id' => $order['id'] ] );
|
||||
echo '<p>Wysłałem zamówienie do sellasist.pl</p>';
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// wysyłanie zamówień do apilo
|
||||
if ( $apilo_settings['enabled'] and $apilo_settings['sync_orders'] and $apilo_settings['access-token'] and $apilo_settings['sync_orders_date_start'] <= date( 'Y-m-d H:i:s' ) )
|
||||
{
|
||||
@@ -796,138 +524,6 @@ if ( $apilo_settings['enabled'] and $apilo_settings['sync_orders'] and $apilo_se
|
||||
}
|
||||
}
|
||||
|
||||
// sprawdzanie statusów zamówień w baselinker.com jeżeli zamówienie nie jest zrealizowane, anulowane lub nieodebrane
|
||||
if ( $baselinker_settings['enabled'] and $baselinker_settings['sync_orders'] and $baselinker_settings['api_code'] and $baselinker_settings['sync_orders_date_start'] <= date( 'Y-m-d H:i:s' ) )
|
||||
{
|
||||
$order = $mdb -> query( 'SELECT id, baselinker_order_id, baselinker_order_status_date, number FROM pp_shop_orders WHERE baselinker_order_id IS NOT NULL AND baselinker_order_id != 0 AND ( status != 6 AND status != 8 AND status != 9 ) AND ( baselinker_order_status_date IS NULL OR baselinker_order_status_date <= \'' . date( 'Y-m-d H:i:s', strtotime( '-30 minutes', time() ) ) . '\' ) ORDER BY baselinker_order_status_date ASC LIMIT 1' ) -> fetch( \PDO::FETCH_ASSOC );
|
||||
if ( $order['baselinker_order_id'] )
|
||||
{
|
||||
$methodParams = '{
|
||||
"order_id": ' . $order['baselinker_order_id'] . '
|
||||
}';
|
||||
|
||||
$apiParams = [
|
||||
"token" => $baselinker_settings['api_code'],
|
||||
"method" => "getOrders",
|
||||
"parameters" => $methodParams
|
||||
];
|
||||
|
||||
$curl = curl_init( "https://api.baselinker.com/connector.php" );
|
||||
curl_setopt( $curl, CURLOPT_POST, 1 );
|
||||
curl_setopt( $curl, CURLOPT_POSTFIELDS, http_build_query( $apiParams ) );
|
||||
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true );
|
||||
$response = json_decode( curl_exec( $curl ), true );
|
||||
|
||||
if ( $response['status'] == 'SUCCESS' and count( $response['orders'] ) )
|
||||
{
|
||||
$shop_status_id = \shop\ShopStatus::get_shop_status_by_baselinker_status( (int) $response['orders'][0]['order_status_id'] );
|
||||
|
||||
$order_tmp = new Order( $order['id'] );
|
||||
$order_tmp -> update_status( $shop_status_id, false );
|
||||
$order_tmp -> update_baselinker_order_status_date( date( 'Y-m-d H:i:s' ) );
|
||||
echo '<p>Zaktualizowałem status zamówienia <b>' . $order['number'] . '</b></p>';
|
||||
}
|
||||
else
|
||||
{
|
||||
$mdb -> update( 'pp_shop_orders', [ 'baselinker_order_status_date' => date( 'Y-m-d H:i:s' ) ], [ 'id' => $order['id'] ] );
|
||||
echo '<p>Z powodu błędu pominąłem zamówienie o ID: <b>' . $order['id'] . '</b></p>';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// wysyłanie zamówień do baselinker
|
||||
if ( $baselinker_settings['enabled'] and $baselinker_settings['sync_orders'] and $baselinker_settings['api_code'] and $baselinker_settings['sync_orders_date_start'] <= date( 'Y-m-d H:i:s' ) )
|
||||
{
|
||||
$orders = $mdb -> select( 'pp_shop_orders', '*', [ 'AND' => [ 'baselinker_order_id' => null, 'date_order[<=]' => date( 'Y-m-d H:i:s', strtotime( '-1 minutes', time() ) ), 'date_order[>=]' => $baselinker_settings['sync_orders_date_start'] ], 'ORDER' => [ 'date_order' => 'ASC' ], 'LIMIT' => 1 ] );
|
||||
foreach ( $orders as $order )
|
||||
{
|
||||
if ( $order['transport_id'] == 2 )
|
||||
{
|
||||
$pickup = explode( ' | ', $order['inpost_paczkomat'] );
|
||||
$pickup_name = $pickup[0];
|
||||
$pickup_address = $pickup[1];
|
||||
}
|
||||
|
||||
$methodParams = '{
|
||||
"order_status_id": "' . \front\factory\ShopStatuses::get_baselinker_order_status_id( $order['status'] ) . '",
|
||||
"date_add": "' . strtotime( $order['date_order'] ) . '",
|
||||
"user_comments": "' . preg_replace('/\s+/', ' ', \S::remove_special_chars( $order['message'] ) ) . '",
|
||||
"admin_comments": "' . $order['notes'] . '",
|
||||
"phone": "' . $order['client_phone'] . '",
|
||||
"email": "' . $order['client_email'] . '",
|
||||
"user_login": "' . $order['client_name'] . ' ' . $order['client_surname'] . '",
|
||||
"currency": "PLN",
|
||||
"payment_method": "' . $order['payment_method'] . '",
|
||||
"payment_method_cod": "' . ( $order['payment_method_id'] == 3 ? 1 : 0 ) . '",
|
||||
"paid": "' . $order['paid'] . '",
|
||||
"delivery_method": "' . strip_tags( $order['transport'] ) . '",
|
||||
"delivery_price": "' . $order['transport_cost'] . '",
|
||||
"delivery_fullname": "' . $order['client_name'] . ' ' . $order['client_surname'] . '",
|
||||
"delivery_company": "' . $order['client_firm'] . '",
|
||||
"delivery_address": "' . $order['client_street'] . '",
|
||||
"delivery_city": "' . $order['client_city'] . '",
|
||||
"delivery_postcode": "' . $order['client_postal_code'] . '",
|
||||
"delivery_country_code": "PL",
|
||||
"delivery_point_id": "' . $pickup_name . '",
|
||||
"delivery_point_name": "' . ( $pickup_name != '' ? 'Paczkomat ' . $pickup_name : '' ) . '",
|
||||
"delivery_point_address": "' . $pickup_address . '",
|
||||
"delivery_point_postcode": "",
|
||||
"delivery_point_city": "",
|
||||
"invoice_fullname": "",
|
||||
"invoice_company": "",
|
||||
"invoice_nip": "",
|
||||
"invoice_address": "",
|
||||
"invoice_city": "",
|
||||
"invoice_postcode": "",
|
||||
"invoice_country_code": "",
|
||||
"want_invoice": "0",
|
||||
"extra_field_1": "",
|
||||
"extra_field_2": "",
|
||||
"products": [';
|
||||
$products = $mdb -> select( 'pp_shop_order_products', '*', [ 'order_id' => $order['id'] ] );
|
||||
foreach ( $products as $product )
|
||||
{
|
||||
$methodParams .= '{
|
||||
"storage": "db",
|
||||
"storage_id": 0,
|
||||
"product_id": "' .\shop\Product::get_baselinker_product_id( (int)$product['product_id'] ) . '",
|
||||
"variant_id": "",
|
||||
"name": "' . htmlspecialchars( $product['name'] ) . '",
|
||||
"sku": "' . \shop\Product::get_product_sku( (int)$product['product_id'] ) . '",
|
||||
"ean": "",
|
||||
"attributes": "' . strip_tags( $product['attributes'] ) . ' | ' . strip_tags( str_replace( '<br>', ' | ', preg_replace( '/\s+/', ' ', $product['custom_fields'] ) ) ) . ' | ' . preg_replace( '/\s+/', ' ', htmlspecialchars( $product['message'] ) ) . '",
|
||||
"price_brutto": ' . ( $product['price_brutto_promo'] ? $product['price_brutto_promo'] : $product['price_brutto'] ) . ',
|
||||
"tax_rate": ' . $product['vat'] . ',
|
||||
"quantity": ' . $product['quantity'] . ',
|
||||
"weight": 1
|
||||
}';
|
||||
|
||||
if ( $product != end( $products ) )
|
||||
$methodParams .= ',';
|
||||
}
|
||||
$methodParams .= ']
|
||||
}';
|
||||
|
||||
$apiParams = [
|
||||
"token" => $baselinker_settings['api_code'],
|
||||
"method" => "addOrder",
|
||||
"parameters" => $methodParams
|
||||
];
|
||||
|
||||
$curl = curl_init( "https://api.baselinker.com/connector.php" );
|
||||
curl_setopt( $curl, CURLOPT_POST, 1 );
|
||||
curl_setopt( $curl, CURLOPT_POSTFIELDS, http_build_query( $apiParams ) );
|
||||
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true );
|
||||
$response = json_decode( curl_exec( $curl ), true );
|
||||
|
||||
if ( $response['status'] == 'SUCCESS' )
|
||||
{
|
||||
$mdb -> update( 'pp_shop_orders', [ 'baselinker_order_id' => $response['order_id'] ], [ 'id' => $order['id'] ] );
|
||||
echo '<p>Wysłałem zamówienie do Baselinker <b>' . $order['number'] . '</b></p>';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* zapisywanie historii cen produktów */
|
||||
$results = $mdb -> select( 'pp_shop_products', [ 'id', 'price_brutto', 'price_brutto_promo' ], [ 'OR' => [ 'price_history_date[!]' => date( 'Y-m-d' ), 'price_history_date' => null ], 'ORDER' => [ 'price_history_date' => 'ASC' ], 'LIMIT' => 100 ] );
|
||||
foreach ( $results as $row )
|
||||
|
||||
Reference in New Issue
Block a user