2016-01-04 12:49:26 +01:00
< ? php
include dirname ( __FILE__ ) . '/../../config/config.inc.php' ;
$laposte_modes = array (
'DOM' => 'SO à domicile' ,
'RDV' => 'SO sur RDV' ,
'BPR' => 'SO en bureau de poste' ,
'ACP' => 'SO en agence ColiPoste' ,
'CDI' => 'SO en centre de distribution' ,
'A2P' => 'SO en commerce de proximité' ,
'MRL' => 'SO à domicile (+?)' ,
'CIT' => 'SO en espace Cityssimo' ,
'DOS' => 'SO à domicile contre signature' ,
'COLI' => 'Colissimo Expert Inter' ,
'COL' => 'Colissimo Expert France' ,
'COM' => 'Colissimo Access OM' ,
'COLD' => 'Colissimo Access France' ,
'COE' => 'Colissimo Eco OM' ,
'CORE' => 'Colissimo Service France' ,
'CDS' => 'Colissimo Expert OM' ,
'COP' => 'Colissimo Expert Interne' ,
);
function stripaccents ( $str ) {
return preg_replace (
'~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml|caron);~i' ,
'$1' ,
htmlentities ( $str , ENT_NOQUOTES , 'UTF-8' )
);
}
if (( $id_order = ( int ) Tools :: getValue ( 'id_order' ))
&& ( Tools :: getValue ( 'token' ) === Tools :: getAdminToken ( 'AdminLogistics' . ( int ) Tab :: getIdFromClassName ( 'AdminLogistics' ) . ( int ) Tools :: getValue ( 'id_employee' )))) {
$order = new Order ( $id_order );
if ( Validate :: isLoadedObject ( $order )) {
$customer = Db :: getInstance () -> getRow ( '
SELECT `firstname` , `lastname` , `email`
FROM `'._DB_PREFIX_.'customer`
WHERE `id_customer` = '.(int) $order->id_customer.'
' );
if ( $order -> id_carrier == Configuration :: get ( 'SOCOLISSIMO_CARRIER_ID' )) {
$delivery_infos_laposte = Db :: getInstance () -> getRow ( '
SELECT i .* , cl . `name` AS `country_name`
FROM `'._DB_PREFIX_.'socolissimo_delivery_info` i
LEFT JOIN `'._DB_PREFIX_.'country` c
ON i . `cecountry` = c . `iso_code`
LEFT JOIN `'._DB_PREFIX_.'country_lang` cl
ON c . `id_country` = cl . `id_country`
WHERE i . `id_cart` = '.(int) $order->id_cart.'
AND cl . `id_lang` = 2
' );
} else {
$delivery_infos_laposte = FALSE ;
}
$delivery_infos_exapaq = Db :: getInstance () -> getRow ( '
SELECT *
FROM `'._DB_PREFIX_.'icirelais_selected`
WHERE `id_cart` = '.(int) $order->id_cart.'
' );
$status = Db :: getInstance () -> getRow ( '
SELECT `name`
FROM `'._DB_PREFIX_.'order_state_lang`
WHERE `id_order_state` = '.(int) $order->getCurrentState().'
AND `id_lang` = 2
' );
$locations = array ();
foreach ( Db :: getInstance () -> ExecuteS ( '
SELECT d . `product_id` , d . `product_attribute_id` , IF ( IFNULL ( a . `location` , " " ) = " " , p . `location` , a . `location` ) AS `location`
FROM `'._DB_PREFIX_.'order_detail` d
LEFT JOIN `'._DB_PREFIX_.'product` p
ON p . `id_product` = d . `product_id`
LEFT JOIN `'._DB_PREFIX_.'product_attribute` a
ON a . `id_product_attribute` = d . `product_attribute_id`
WHERE d . `id_order` = '.(int) $order->id.'
' ) as $row ) {
$locations [( int ) $row [ 'product_id' ] . '-' . ( int ) $row [ 'product_attribute_id' ]] = $row [ 'location' ];
}
$invoice_address = new Address ( $order -> id_address_invoice );
$delivery_address = new Address ( $order -> id_address_delivery );
/* if ( $delivery_address -> id_country == 8 ) {
$replace_tests = array (
'-S-' => ' SUR ' ,
'-SS-' => ' SOUS ' ,
' ST-' => ' SAINT ' ,
'-ST ' => ' SAINT ' ,
'-ST-' => ' SAINT ' ,
' STE-' => ' SAINTE ' ,
'-STE ' => ' SAINTE ' ,
'-STE ' => ' SAINTE ' ,
' MT-' => ' MONT ' ,
'-MT ' => ' MONT ' ,
'-MT-' => ' MONT ' ,
' BG-' => ' BOURG ' ,
'-BG ' => ' BOURG ' ,
'-BG-' => ' BOURG ' ,
' GD-' => ' GRAND ' ,
'-GD ' => ' GRAND ' ,
'-GD-' => ' GRAND ' ,
' GDE-' => ' GRANDE ' ,
'-GDE ' => ' GRANDE ' ,
'-GDE-' => ' GRANDE ' ,
' MTS-' => ' MONTS ' ,
'-MTS ' => ' MONTS ' ,
'-MTS-' => ' MONTS ' ,
' VX-' => ' VIEUX ' ,
'-VX ' => ' VIEUX ' ,
'-VX-' => ' VIEUX ' ,
' HT-' => ' HAUT ' ,
'-HT ' => ' HAUT ' ,
'-HT-' => ' HAUT ' ,
' BS-' => ' BAS ' ,
'-BS ' => ' BAS ' ,
'-BS-' => ' BAS ' ,
' S ' => ' SUR ' ,
' SS ' => ' SOUS ' ,
' ST ' => ' SAINT ' ,
' STE ' => ' SAINTE ' ,
' MT ' => ' MONT ' ,
' BG ' => ' BOURG ' ,
' GD ' => ' GRAND ' ,
' GDE ' => ' GRANDE ' ,
' MTS ' => ' MONTS ' ,
' VX ' => ' VIEUX ' ,
' HT ' => ' HAUT ' ,
' BS ' => ' BAS ' ,
' ST. ' => ' SAINT ' ,
);
$cities = array ();
foreach ( Db :: getInstance () -> ExecuteS ( '
SELECT `city`
FROM `'._DB_PREFIX_.'france_postcode`
WHERE `postcode` = " '.pSQL(trim( $delivery_address->postcode )).' "
' ) as $row ) {
$cities [] = $row [ 'city' ];
}
$found = FALSE ;
if ( $cities ) {
foreach ( $cities as $city ) {
if ( str_replace ( array ( '\\' , '-' , '_' , ' ' , '/' , '\'' , '"' , '«' , '»' , '’ ' , ' ' , '.' , ',' ,), '' , strtolower ( trim ( stripaccents ( $city )))) == str_replace ( array ( '\\' , '-' , '_' , ' ' , '/' , '\'' , '"' , '«' , '»' , '’ ' , ' ' , '.' , ',' ,), '' , strtolower ( trim ( stripaccents ( preg_replace ( '/ C(I|E)DEX(.*)$/i' , '' , $delivery_address -> city )))))) {
$found = TRUE ;
}
}
}
if ( ! $found ) {
foreach ( $cities as $city ) {
$clean_city = str_replace ( array ( '\\' , '-' , '_' , ' ' , '/' , '\'' , '"' , '«' , '»' , '’ ' , ' ' , '.' , ',' ,), '' , strtolower ( trim ( stripaccents ( $city ))));
$clean_customer_city = str_replace ( array ( '\\' , '-' , '_' , ' ' , '/' , '\'' , '"' , '«' , '»' , '’ ' , ' ' , '.' , ',' ,), '' , strtolower ( trim ( str_ireplace ( '/' , ' SUR ' , str_ireplace ( ' S/' , ' SUR ' , str_ireplace ( array_keys ( $replace_tests ), array_values ( $replace_tests ), stripaccents ( ' ' . preg_replace ( '/ C(I|E)DEX(.*)$/i' , '' , $delivery_address -> city ) . ' ' )))))));
if ( $clean_city === $clean_customer_city
|| $clean_city === 'le' . $clean_customer_city
|| $clean_city === 'la' . $clean_customer_city
|| $clean_city === 'les' . $clean_customer_city
|| $clean_city === 'l' . $clean_customer_city
|| 'le' . $clean_city === $clean_customer_city
|| 'la' . $clean_city === $clean_customer_city
|| 'les' . $clean_city === $clean_customer_city
|| 'l' . $clean_city === $clean_customer_city ) {
$found = TRUE ;
}
}
}
$france_address_error = ! $found ;
$france_address_suggestions = array ();
if ( $france_address_error ) {
$france_address_suggestions = Db :: getInstance () -> ExecuteS ( '
SELECT `postcode` , `city`
FROM `'._DB_PREFIX_.'france_postcode`
WHERE `postcode` = " '.pSQL( $delivery_address->postcode ).' "
OR `city` = " '.pSQL( $delivery_address->city ).' "
GROUP BY `postcode` , `city`
' );
}
} else { */
$france_address_error = FALSE ;
$france_address_suggestions = array ();
/*}*/
$id_order_details = array ();
$sales_carriers = array ();
$link = new Link ( 2 );
$products = array ();
foreach ( $order -> getProductsDetail () as $p ) {
$p [ 'product_quantity_sent' ] = ( int ) Db :: getInstance () -> getValue ( '
SELECT IFNULL ( SUM ( `quantity` ), 0 ) AS `total`
FROM `'._DB_PREFIX_.'lapostews`
WHERE `id_order_detail` = '.(int) $p[' id_order_detail '].'
') + (int) Db::getInstance()->getValue('
SELECT IFNULL ( SUM ( `quantity` ), 0 ) AS `total`
FROM `'._DB_PREFIX_.'exapaqws`
WHERE `id_order_detail` = '.(int) $p[' id_order_detail '].'
' );
$p [ 'id_image' ] = 0 ;
if (( int ) $p [ 'product_attribute_id' ] != 0 ) {
$img = Db :: getInstance () -> getRow ( '
SELECT `id_image`
FROM `'._DB_PREFIX_.'product_attribute_image`
WHERE `id_product_attribute` = '.(int) $p[' product_attribute_id '].'
' );
$p [ 'id_image' ] = $img [ 'id_image' ];
}
if ( $p [ 'id_image' ] == 0 ) {
$img = Db :: getInstance () -> getRow ( '
SELECT `id_image`
FROM `'._DB_PREFIX_.'image`
WHERE `cover` = 1
AND `id_product` = '.(int) $p[' product_id '].'
' );
$p [ 'id_image' ] = $img [ 'id_image' ];
}
$p [ 'image' ] = '//' . $link -> getImageLink ( 'image' , $p [ 'product_id' ] . '-' . $p [ 'id_image' ], 'home' );
/* $shipping = Db :: getInstance () -> getRow ( '
SELECT s . `id_shipping` , s . `id_sale`
FROM `'._DB_PREFIX_.'privatesale_shipping_sale` s
LEFT JOIN `'._DB_PREFIX_.'product_ps_cache` c
ON c . `id_sale` = s . `id_sale`
WHERE c . `id_product` = '.(int) $p[' product_id '].'
' );
if ( ! $shipping ) {
$p [ 'id_shipping' ] = 1 ; // PSS
$p [ 'id_sale' ] = 999999 ;
} else {
$p [ 'id_shipping' ] = $shipping [ 'id_shipping' ];
$p [ 'id_sale' ] = $shipping [ 'id_sale' ];
} */
$p [ 'id_shipping' ] = 1 ;
$p [ 'id_sale' ] = ( int ) Db :: getInstance () -> getValue ( '
SELECT `id_sale`
FROM `'._DB_PREFIX_.'product_ps_cache`
WHERE `id_product` = '.(int) $p[' product_id '].'
' );
2016-06-20 18:27:54 +02:00
$p [ 'is_pending' ] = Db :: getInstance () -> getValue ( '
SELECT COUNT ( id_product )
FROM `'._DB_PREFIX_.'logistics_pending`
WHERE `id_product` = '.(int) $p[' product_id '].' AND id_order = ' . ( int ) $id_order
);
2016-01-04 12:49:26 +01:00
if ( ! isset ( $sales_carriers [( int ) $p [ 'id_sale' ]])) {
$sales_carriers [( int ) $p [ 'id_sale' ]] = array ();
foreach ( Db :: getInstance () -> ExecuteS ( '
SELECT `id_carrier`
FROM `'._DB_PREFIX_.'privatesale_carrier`
WHERE `id_sale` = '.(int) $p[' id_sale '].'
' ) as $row ) {
$sales_carriers [( int ) $p [ 'id_sale' ]][] = ( int ) $row [ 'id_carrier' ];
}
}
$p [ 'carriers' ] = $sales_carriers [( int ) $p [ 'id_sale' ]];
$p [ 'location' ] = isset ( $locations [( int ) $p [ 'product_id' ] . '-' . ( int ) $p [ 'product_attribute_id' ]]) ? $locations [( int ) $p [ 'product_id' ] . '-' . ( int ) $p [ 'product_attribute_id' ]] : '' ;
$shipping_numbers = array ();
foreach ( Db :: getInstance () -> ExecuteS ( '
SELECT l . `shipping_number`
FROM `'._DB_PREFIX_.'lapostews` l
LEFT JOIN `'._DB_PREFIX_.'order_detail` d
ON d . `id_order_detail` = l . `id_order_detail`
LEFT JOIN `'._DB_PREFIX_.'order_history` h
ON h . `id_order` = d . `id_order`
WHERE h . `id_order` = '.(int) $order->id.'
' ) as $row ) {
$shipping_numbers [] = '"' . pSQL ( $row [ 'shipping_number' ]) . '"' ;
}
foreach ( Db :: getInstance () -> ExecuteS ( '
SELECT l . `shipping_number`
FROM `'._DB_PREFIX_.'exapaqws` e
LEFT JOIN `'._DB_PREFIX_.'order_detail` d
ON d . `id_order_detail` = e . `id_order_detail`
LEFT JOIN `'._DB_PREFIX_.'order_history` h
ON h . `id_order` = d . `id_order`
WHERE h . `id_order` = '.(int) $order->id.'
' ) as $row ) {
$shipping_numbers [] = '"' . pSQL ( $row [ 'shipping_number' ]) . '"' ;
}
if ((( int ) $p [ 'product_quantity_sent' ] === 0 )
&& Db :: getInstance () -> getRow ( '
SELECT h . `id_sale`
FROM `'._DB_PREFIX_.'shipping_history` h
WHERE h . `id_sale` = '.((int) $p[' id_sale '] === 999999? 0: (int) $p[' id_sale ']).'
AND h . `id_order` = '.(int) $order->id.'
'.(count($shipping_numbers) > 0? ' AND h . `shipping_number` NOT IN ( '.implode(' , ', $shipping_numbers).' ) ': ' ').'
' )) {
$p [ 'product_quantity_sent' ] = $p [ 'product_quantity' ] - ( $p [ 'product_quantity_return' ] > 0 ? $p [ 'product_quantity_return' ] : $p [ 'product_quantity_refunded' ]);
}
$products [] = $p ;
$id_order_details [] = ( int ) $p [ 'id_order_detail' ];
}
$id_carriers = array (( int ) $order -> id_carrier );
foreach ( array_values ( $sales_carriers ) as $c ) {
$id_carriers = array_merge ( $id_carriers , $c );
}
$carriers = array ();
foreach ( Db :: getInstance () -> ExecuteS ( '
SELECT `id_carrier` , `name`
FROM `'._DB_PREFIX_.'carrier`
WHERE `id_carrier` IN ( '.implode(' , ', array_unique($id_carriers)).' )
' ) as $row ) {
$carriers [( int ) $row [ 'id_carrier' ]] = $row [ 'name' ];
}
if ( count ( $id_order_details ) > 0 ) {
$logs = array ();
if ( $l = Db :: getInstance () -> ExecuteS ( '
SELECT l .* , d . `product_name` , d . `product_reference` , d . `product_supplier_reference` , e . `firstname` , e . `lastname` , " laposte " AS `carrier`
FROM `'._DB_PREFIX_.'lapostews` l
LEFT JOIN `'._DB_PREFIX_.'employee` e ON l . `id_employee` = e . `id_employee`
LEFT JOIN `'._DB_PREFIX_.'order_detail` d ON d . `id_order_detail` = l . `id_order_detail`
WHERE l . `id_order_detail` IN ( '.implode(' , ', $id_order_details).' )
AND l . `quantity` > 0
ORDER BY l . `date_add` DESC
' )) {
$logs = array_merge ( $logs , $l );
}
if ( $l = Db :: getInstance () -> ExecuteS ( '
SELECT l .* , d . `product_name` , d . `product_reference` , d . `product_supplier_reference` , e . `firstname` , e . `lastname` , " exapaq " AS `carrier`
FROM `'._DB_PREFIX_.'exapaqws` l
LEFT JOIN `'._DB_PREFIX_.'employee` e ON l . `id_employee` = e . `id_employee`
LEFT JOIN `'._DB_PREFIX_.'order_detail` d ON d . `id_order_detail` = l . `id_order_detail`
WHERE l . `id_order_detail` IN ( '.implode(' , ', $id_order_details).' )
AND l . `quantity` > 0
ORDER BY l . `date_add` DESC
' )) {
$logs = array_merge ( $logs , $l );
}
} else {
$logs = array ();
}
echo json_encode ( array (
'errors' => FALSE ,
'order' => $order ,
'products' => $products ,
'status' => $status [ 'name' ],
'carrier' => $carriers [ $order -> id_carrier ] . ( $delivery_infos_laposte
? ' (' . $laposte_modes [ $delivery_infos_laposte [ 'delivery_mode' ]] . ')'
: ( $delivery_infos_exapaq
? ' (ICI Relais)'
: ''
)
),
'carriers' => $carriers ,
'customer' => $customer [ 'firstname' ] . ' ' . $customer [ 'lastname' ] . ' (' . $customer [ 'email' ] . ')' ,
'invoice_address' => $invoice_address ,
'delivery_address' => $delivery_address ,
'delivery_infos_laposte' => $delivery_infos_laposte ,
'delivery_infos_exapaq' => $delivery_infos_exapaq ,
'weight' => $order -> getTotalWeight (),
'logs' => $logs ,
'france_address_error' => $france_address_error ,
'france_address_suggestions' => $france_address_suggestions ,
));
} else {
echo json_encode ( array ( 'errors' => 'not found' ));
}
}