PEEL Shopping
Open source ecommerce : PEEL Shopping
commande_html.php
Go to the documentation of this file.
1 <?php
2 // This file should be in UTF8 without BOM - Accents examples: éèê
3 // +----------------------------------------------------------------------+
4 // | Copyright (c) 2004-2015 Advisto SAS, service PEEL - contact@peel.fr |
5 // +----------------------------------------------------------------------+
6 // | This file is part of PEEL Shopping 8.0.0, which is subject to an |
7 // | opensource GPL license: you are allowed to customize the code |
8 // | for your own needs, but must keep your changes under GPL |
9 // | More information: https://www.peel.fr/lire/licence-gpl-70.html |
10 // +----------------------------------------------------------------------+
11 // | Author: Advisto SAS, RCS 479 205 452, France, https://www.peel.fr/ |
12 // +----------------------------------------------------------------------+
13 // $Id: commande_html.php 46935 2015-09-18 08:49:48Z gboussin $
14 include("../../configuration.inc.php");
15 if(!empty($GLOBALS['site_parameters']['require_login_for_html_bill'])) {
17 }
18 if (!check_if_module_active('factures', '/commande_html.php') || is_user_bot()) {
19  // This module is not activated or this user is a bot => we redirect to the homepage
20  redirect_and_die(get_url('/'));
21 }
22 
23 /* Charge les détails d'une commande et les affiche */
24 $auto_refresh = false;
25 if (!empty($_GET['code_facture'])) {
26  $code_facture = $_GET['code_facture'];
27  $sql = 'SELECT c.*, sp.technical_code AS statut_paiement
28  FROM peel_commandes c
29  LEFT JOIN peel_statut_paiement sp ON sp.id=c.id_statut_paiement AND ' . get_filter_site_cond('statut_paiement', 'sp') . '
30  WHERE HEX(c.code_facture) = HEX("' . nohtml_real_escape_string($code_facture) . '") AND ' . get_filter_site_cond('commandes', 'c') . '';
31 } elseif ((!empty($_GET['id']) && !empty($_GET['timestamp']))) {
32  $id = intval($_GET['id']);
33  $timestamp = $_GET['timestamp'];
34  $sql = 'SELECT c.*, sp.technical_code AS statut_paiement
35  FROM peel_commandes c
36  LEFT JOIN peel_statut_paiement sp ON sp.id=c.id_statut_paiement AND ' . get_filter_site_cond('statut_paiement', 'sp') . '
37  WHERE c.id = "' . intval($id) . '" AND c.o_timestamp = "' . nohtml_real_escape_string($timestamp) . '" AND ' . get_filter_site_cond('commandes', 'c') . '';
38 } else {
39  die();
40 }
41 
43 
44 if ($commande = fetch_object($qid_commande)) {
45  $_SESSION['session_last_bill_viewed'] = $commande->id;
46  $output = '';
47  $GLOBALS['site_parameters']['css'] = 'html_bill.css';
48  $order_infos = get_order_infos_array($commande);
49  $client = get_user_information($commande->id_utilisateur);
50  $id = intval($commande->id);
51  $numero = intval($commande->order_id);
52  if(empty($commande->o_timestamp) || substr($commande->o_timestamp, 0, 10) == '0000-00-00') {
53  // On a besoin d'une date à afficher par défaut : si pas de date de commande, alors on prend la date du jour
54  $commande->o_timestamp = date('Y-m-d H:i:s');
55  }
56  if (!empty($_GET['mode']) && $_GET['mode'] == 'bdc') {
57  $displayed_date = get_formatted_date($commande->o_timestamp, 'short', vb($GLOBALS['site_parameters']['order_hour_display_mode'], 'long'));
58  } else {
59  // On veut une date de facture si possible et pas de commande
60  if(!empty($commande->f_datetime) && String::substr($commande->f_datetime, 0, 10) != '0000-00-00') {
61  // Une date de facture est définie
62  $displayed_date = get_formatted_date($commande->f_datetime, 'short');
63  } else {
64  // Pas de date de facture, on indique la date de commande
65  $displayed_date = $GLOBALS['STR_ORDER_NAME'] . $GLOBALS["STR_BEFORE_TWO_POINTS"] . ': ' . get_formatted_date($commande->o_timestamp, 'short', vb($GLOBALS['site_parameters']['order_hour_display_mode'], 'long'));
66  }
67  }
68  if (!empty($_GET['partial'])) {
69  if (!empty($_GET['currency_rate'])) {
70  $amount_to_pay = get_float_from_user_input($_GET['partial']) / get_float_from_user_input(vn($_GET['currency_rate']));
71  } else {
72  $amount_to_pay = get_float_from_user_input($_GET['partial']);
73  }
74  } else {
75  $amount_to_pay = get_float_from_user_input($commande->montant);
76  }
77  if (!empty($_GET['mode']) && $_GET['mode'] == 'bdc') {
78  $libelle = $GLOBALS['STR_PROFORMA'];
79  } else {
80  $libelle = $GLOBALS['STR_INVOICE'];
81  }
82  $bill_address_title = $GLOBALS['STR_INVOICE_ADDRESS'];
83  if (!empty($commande->id_utilisateur)) {
84  $bill_address_title .= ' ' . $commande->id_utilisateur;
85  }
86 
87  $output .= '
88 <div class="total">
89  <table class="main_table">
90  <tr>
91  <td class="center">
92  <h1 property="name" class="bill_title">' . $libelle . " " . $GLOBALS['STR_NUMBER'] . " " . $numero . " - " . $displayed_date . "" . '</h1>
93  </td>
94  </tr>
95  <tr>
96  <td>
97  <table cellpadding="5" style="width:50%">
98  <tr>
99  <td>' . print_societe(true) . '</td>
100  </tr>
101  </table>
102  <table class="full_width">
103  <tr>
104  <td class="top" style="width:50%; padding-right:10px">
105  <table class="full_width" cellpadding="5">
106  <tr>
107  <td class="bill_cell_title">' . $bill_address_title . '</td>
108  </tr>
109  <tr>
110  <td class="bill_cell">' . nl2br($order_infos['client_infos_bill']) . '</td>
111  </tr>
112  </table>
113  </td>
114  <td class="top" style="width:50%">
115  ' . (!empty($order_infos['client_infos_ship'])?'
116  <table class="full_width" cellpadding="5">
117  <tr>
118  <td class="bill_cell_title">' . $GLOBALS['STR_SHIP_ADDRESS'] . '</td>
119  </tr>
120  <tr>
121  <td class="bill_cell">' . nl2br($order_infos['client_infos_ship']) . '</td>
122  </tr>
123  </table>':'') . '
124  </td>
125  </tr>
126  </table>
127  <br />
128  <table class="full_width" cellpadding="5">
129  <tr>
130  <td class="bill_cell_title">' . $GLOBALS['STR_REFERENCE'] . '</td>
131  <td class="bill_cell_title">' . $GLOBALS['STR_PRODUCT'] . '</td>
132  <td class="bill_cell_title">' . $GLOBALS['STR_MODULE_FACTURES_CATALOGUE_PRICE'] . ' ' . $GLOBALS['STR_TTC'] . '</td>
133  <td class="bill_cell_title">' . $GLOBALS['STR_SOLD_PRICE'] . ' ' . $GLOBALS['STR_TTC'] . '</td>
134  <td class="bill_cell_title">' . $GLOBALS['STR_QUANTITY'] . '</td>
135  <td class="bill_cell_title">' . $GLOBALS['STR_TOTAL_TTC'] . '</td>';
136  if (!check_if_module_active('micro_entreprise')) {
137  $output .= '
138  <td class="bill_cell_title">' .$GLOBALS['STR_VAT'] . '</td>';
139  }
140  $output .= '
141  </tr>
142  ';
143 
144  $product_infos_array = get_product_infos_array_in_order($id, $commande->devise, get_float_from_user_input(vn($commande->currency_rate)));
145  foreach ($product_infos_array as $this_ordered_product) {
146  $reference = $this_ordered_product["reference"];
147  $prix_cat = fprix($this_ordered_product["prix_cat"], true, $commande->devise, true, get_float_from_user_input(vn($commande->currency_rate)));
148  $prix = fprix($this_ordered_product["prix"], true, $commande->devise, true, get_float_from_user_input(vn($commande->currency_rate)));
149  $quantite = $this_ordered_product['quantite'];
150  if(empty($GLOBALS['site_parameters']['allow_float_quantity']) || intval($quantite) == floatval($quantite)) {
151  $quantite = intval($quantite);
152  }
153  $total_prix = fprix($this_ordered_product["total_prix"], true, $commande->devise, true, get_float_from_user_input(vn($commande->currency_rate)));
154  $tva = $this_ordered_product['tva_percent'];
155 
156  $output .= '
157  <tr>
158  <td style="width:90px" class="bill_cell center">' . $reference . '</td>
159  <td class="left bill_cell">' . str_replace("\n", '<br />', $this_ordered_product["product_text"]) . '</td>
160  <td style="width:90px" class="bill_cell right">' . $prix_cat . '</td>
161  <td style="width:70px" class="bill_cell right">' . $prix . '</td>
162  <td style="width:70px" class="bill_cell center">' . $quantite . '</td>
163  <td style="width:70px" class="bill_cell right">' . $total_prix . '</td>';
164  if (!check_if_module_active('micro_entreprise')) {
165  $output .= '
166  <td style="width:70px" class="bill_cell right">' . $tva . ' %</td>';
167  }
168  $output .= '
169  </tr>
170  ';
171  }
172  $output .= '
173  </table>
174  <table class="full_width" cellpadding="5">
175  <tr>
176  <td class="right" style="width:80%" >' . $GLOBALS['STR_SHIPPING_COST'] . '' . $GLOBALS['STR_BEFORE_TWO_POINTS'] . ':</td>
177  <td class="right">' . $order_infos['net_infos_array']['displayed_cout_transport'] . '</td>
178  </tr>
179  <tr>
180  <td class="right" style="width:80%">' . $GLOBALS['STR_TOTAL_HT'] . '' . $GLOBALS['STR_BEFORE_TWO_POINTS'] . ':</td>
181  <td class="right"><b>' . $order_infos['net_infos_array']['montant_ht'] . '</b></td>
182  </tr>
183  <tr>
184  <td class="right" style="width:80%" >' . $GLOBALS['STR_PDF_AVOIR'] . '' . $GLOBALS['STR_BEFORE_TWO_POINTS'] . ':</td>
185  <td class="right">' . $order_infos['net_infos_array']['avoir'] . '</td>
186  </tr>';
187 
188  if (!check_if_module_active('micro_entreprise')) {
189  $output .= '
190  <tr>
191  <td class="right" style="width:80%">' . $GLOBALS['STR_VAT'] . '' . $GLOBALS['STR_BEFORE_TWO_POINTS'] . ':</td>
192  <td class="right" ><b>' . $order_infos['net_infos_array']['total_tva'] . '</b></td>
193  </tr>';
194  }
195  if (floatval($order_infos['net_infos_array']['total_tva'])==0) {
196  if (check_if_module_active('micro_entreprise')) {
197  // Pour les entreprises bénéficiant du régime de franchise de base de TVA, il faut obligatoirement porter sur chaque facture la mention suivante : « TVA non applicable, article 293 B du CGI ».
198  $output .= '
199  <tr>
200  <td class="right" colspan="2">' . $GLOBALS['STR_NO_VAT_APPLIABLE'] . '</td>
201  </tr>';
202  } elseif(is_user_tva_intracom_for_no_vat($commande->id_utilisateur)) {
203  // Pour les livraisons de biens intracommunautaires, les factures doivent obligatoirement comporter la mention suivante : « Exonération de TVA, article 262 ter 1 du CGI ».
204  // Lorsqu'il s'agit de prestations de services intracommunautaires dont la taxe est autoliquidée par le preneur, il faudra faire figurer, à notre sens, les mentions « TVA due par le preneur, art. CGI 283-2, et art. 194 de la directive TVA 2006/112/CE »
205  // => Texte à définir en conséquence en fonction de votre site dans $GLOBALS['STR_INVOICE_BOTTOM_TEXT2']
206  $output .= '
207  <tr>
208  <td class="right" colspan="2">' . $GLOBALS['STR_INVOICE_BOTTOM_TEXT2'] . '</td>
209  </tr>';
210 
211  }
212  }
213  if ($commande->tarif_paiement > 0) {
214  $output .= '
215  <tr>
216  <td class="right" style="width:80%">' . $GLOBALS['STR_MODULE_FACTURES_PAY_COST'] . '' . $GLOBALS['STR_BEFORE_TWO_POINTS'] . ':</td>
217  <td class="right">+ ' . $order_infos['net_infos_array']['tarif_paiement'] . ' ' . $GLOBALS['site_parameters']['symbole'] . '</td>
218  </tr>
219  ';
220  }
221  $output .= '
222  <tr>
223  <td class="right" style="width:80%"><b>' . $GLOBALS['STR_NET'] . '</b>' . $GLOBALS['STR_BEFORE_TWO_POINTS'] . ':</td>
224  <td class="bill_cell_to_pay right"><b>' . $order_infos['net_infos_array']['montant'] . '</b></td>
225  </tr>
226  ';
227  if (!empty($commande->commentaires)) {
228  $output .= '
229  <tr>
230  <td colspan="2" class="titre" class="bill_cell_title"><b>' . $GLOBALS['STR_COMMENTS'] . '</b></td>
231  </tr>
232  <tr>
233  <td colspan="2">' . String::html_entity_decode_if_needed($commande->commentaires) . '</td>
234  </tr>
235  ';
236  }
237  $output .= '
238  </table>
239  ';
240  if (!empty($_GET['mode']) && $_GET['mode'] == 'bdc') {
241  // On raffraichit régulièrement la page pour éviter d'avoir un problème de timestamp entre le formulaire et la banque
242  $auto_refresh = true;
243  if (round($amount_to_pay, 2) != round($commande->montant, 2)) {
244  $output .= '
245  <p><b>' . $GLOBALS['STR_MODULE_FACTURES_WARNING_PARTIAL_PAYMENT'] . ' ' . fprix($amount_to_pay, true, vb($commande->devise), true, get_float_from_user_input(vn($commande->currency_rate))) . ' ' . $GLOBALS['STR_TTC'] . '</p>';
246  }
247  // Affichage du mode de paiement défini pour cette commande, ou de tous les modes de paiement si aucun défini (seulement si commande passée dans l'administration)
248  $output .= '
249  <table class="full_width" cellpadding="10">
250  <tr>
251  <td colspan="2">' . get_payment_form($commande->id, $commande->paiement, false, $amount_to_pay, false) . '</td>
252  </tr>
253  </table>
254 ';
255  }
256  $output .= '
257  </td>
258  </tr>
259  ';
260  if (!empty($_GET['mode']) && $_GET['mode'] == 'bdc') {
261  $output .= '
262  <tr>
263  <td class="center">
264  <table cellpadding="10" style="width:350px">
265  <tr>
266  <td class="bill_cell_title">' . $GLOBALS['STR_ACCORD'] . '</td>
267  </tr>
268  <tr>
269  <td class="bill_cell left">
270  <div class="left">
271  <p><i>' . $GLOBALS['STR_DATE'] . '' . $GLOBALS['STR_BEFORE_TWO_POINTS'] . ':</i></p>
272  </div>
273  <div class="left">
274  <p><i>' . $GLOBALS['STR_ACCORD_OK'] . '</i></p>
275  </div>
276  <div class="left">
277  <p><i>' . $GLOBALS['STR_SIGNATURE'] . '' . $GLOBALS['STR_BEFORE_TWO_POINTS'] . ':</i></p>
278  </div>
279  <div class="center" style="height:50px">
280  <p>&nbsp;</p>
281  </div>
282  </td>
283  </tr>
284  </table>
285  </td>
286  </tr>
287  ';
288  }
289  $output .= '
290  </table>
291 </div>
292 ';
293  $title = $libelle . " " . $GLOBALS['STR_NUMBER'] . " " . $numero . " - " . $displayed_date ;
294  output_light_html_page($output, $title, ($auto_refresh ? '<meta http-equiv="refresh" content="900; url='. get_current_url() . '" />' : ''));
295 } else {
296  echo '<h1 property="name">' . $GLOBALS['STR_NO_ORDER'] . '</h1>';
297 }
298 
get_user_information($user_id=null, $get_full_infos=false)
Chargement des détails de l'utilisateur.
Definition: user.php:906
get_current_url($with_get=true, $get_short_url=false, $take_away_get_args_array=null)
get_current_url()
Definition: fonctions.php:1743
get_product_infos_array_in_order($order_id, $devise=null, $currency_rate=null, $order_by=null, $add_total_prix_attribut=false)
get_product_infos_array_in_order()
Definition: order.php:1469
is_user_tva_intracom_for_no_vat($user_id=null)
is_user_tva_intracom_for_no_vat()
Definition: user.php:959
redirect_and_die($url, $permanent_redirection=false, $avoid_loop=false)
Redirige vers l'URL demandée et arrête le programme.
Definition: fonctions.php:1551
static html_entity_decode_if_needed($string)
String::html_entity_decode_if_needed()
Definition: String.php:533
$qid_commande
nohtml_real_escape_string($value, $allowed_tags=null)
Protège les données pour insertion dans MySQL ET supprime les tags HTML pour protéger de toute sorte ...
Definition: database.php:400
if(!function_exists('ipGet')) if(!function_exists('isPublicIP')) is_user_bot($ip=null, $user_agent=null)
Renvoie si le visiteur est un robot ou non.
Definition: fonctions.php:3083
get_float_from_user_input($string, $from_currency_rate=1)
Transforme tout nombre formaté en un float au format PHP Exemples : 12 004,34 ou 12,324.50.
Definition: format.php:196
get_filter_site_cond($table_technical_code, $table_alias=null, $use_strict_rights_if_in_admin=false, $specific_site_id=null, $exclude_public_items=false, $admin_force_multisite_if_allowed=false)
Retourne la condition SQL permettant de filtrer les données pour une table.
Definition: fonctions.php:4643
query($query, $die_if_error=false, $database_object=null, $silent_if_error=false, $security_sql_filter=true)
The query() function is meant to be called anywhere you want to make a query.
Definition: database.php:158
vb(&$var, $default=null)
Variable blanche if $var n'est pas défini, retourne $default, sinon retourne $var.
Definition: format.php:97
if(strlen($date2)== '10') if($type== 'users-by-age'&&a_priv('admin_users', true)) elseif($type== 'forums-count'&&a_priv('admin_content', true)) elseif($type== 'forums-categories'&&a_priv('admin_content', true)) elseif($type== 'users-count'&&a_priv('admin_users', true)) elseif($type== 'product-categories'&&a_priv('admin_products', true)) elseif($type== 'users-by-sex'&&a_priv('admin_users', true)) elseif($type== 'users-by-country'&&a_priv('admin_users', true)) elseif($type== 'sales'&&a_priv('admin_sales', true))
Definition: chart-data.php:160
necessite_identification()
Si l'utilisateur n'est pas connecté à un compte, on affiche une page d'identification et arrête le sc...
Definition: fonctions.php:1596
fetch_object($query_result)
fetch_object()
Definition: database.php:302
get_formatted_date($datetime_or_timestamp=null, $mode= 'short', $hour_minute=false)
Afficher une date formatée, en évitant les problèmes liés aux noms de mois sur les serveurs qui ne so...
Definition: format.php:440
get_payment_form($order_id, $forced_type=null, $send_admin_email=false, $amount_to_pay=0, $allow_autosend=true)
Renvoie le formulaire de paiement.
Definition: order.php:1534
if(!empty($GLOBALS['site_parameters']['require_login_for_html_bill'])) if(!check_if_module_active('factures', '/commande_html.php')||is_user_bot()) $auto_refresh
$GLOBALS['page_columns_count']
vn(&$var, $default=0)
Variable nulle if $var n'est pas défini, retourne $default, sinon retourne $var.
Definition: format.php:110
get_order_infos_array($order_object)
get_order_infos_array()
Definition: order.php:1320
$id
Definition: articles.php:22
fprix($price, $display_currency=false, $currency_code_or_default=null, $convertion_needed_into_currency=true, $currency_rate=null, $display_iso_currency_code=false, $format=true, $force_format_separator=null, $add_rdfa_properties=false, $round_even_if_no_format=false)
fprix formatte le prix donné en le convertissant si nécessaire au préalable et en ajoutant éventuelle...
Definition: fonctions.php:242
static substr($string, $start, $length=null)
Returns the portion of string specified by the start and length parameters.
Definition: String.php:112
check_if_module_active($module_name, $specific_file_name=null)
Renvoie si un module est présent et activé ou non - Peut être appelé avant ou après le chargement d'u...
if(defined('IN_PEEL_ADMIN')||IN_INSTALLATION) $_SESSION['session_langue']

This documentation for Open ecommerce PEEL Shopping and PEEL.fr has been generated by Doxygen on Thu Oct 15 2015 14:41:31 - Peel ecommerce is a product of Agence web Advisto SAS. All rights reserved.