function formulaires_adresser_commande_charger_dist($id_commande, $url_suite = '', $titre_suite = '') { // il faut avoir une commande en cours if (!$id_commande or !($commande = sql_fetsel("*", "spip_commandes", "id_commande=" . intval($id_commande)))) { return false; } $valeurs = array('livraison_nom' => $commande['livraison_nom'], 'livraison_societe' => $commande['livraison_societe'], 'livraison_adresse' => $commande['livraison_adresse'], 'livraison_adresse_cp' => $commande['livraison_adresse_cp'], 'livraison_adresse_ville' => $commande['livraison_adresse_ville'], 'livraison_adresse_pays' => $commande['livraison_adresse_pays'], 'livraison_telephone' => $commande['livraison_telephone'], 'modif' => ''); // si une des infos est manquante, ouvrir le formulaire en edition de l'adresse $search_adresse = false; if (!$valeurs['livraison_nom'] or !$valeurs['livraison_adresse'] or !$valeurs['livraison_adresse_cp'] or !$valeurs['livraison_adresse_ville'] or !$valeurs['livraison_adresse_pays']) { $valeurs['modif'] = ' '; $search_adresse = true; } // si aucune info adresse est renseignee dans la commande, // on recupere l'adresse depuis l'auteur si possible pour pre-remplir le formulaire if ($search_adresse and $commande['id_auteur'] and $renseigner_adresse_auteur = charger_fonction("renseigner_adresse_auteur", "inc", true)) { if ($adresse = $renseigner_adresse_auteur($commande['id_auteur'])) { foreach (array('nom', 'societe', 'adresse', 'adresse_cp', 'adresse_ville', 'adresse_pays', 'telephone') as $champ) { if (isset($adresse[$champ]) and $adresse[$champ]) { $valeurs["livraison_" . $champ] = $adresse[$champ]; } } } } // sinon chercher dans une commande precedente ? if ($search_adresse and (!$valeurs['livraison_nom'] or !$valeurs['livraison_adresse'] or !$valeurs['livraison_adresse_cp'] or !$valeurs['livraison_adresse_ville'] or !$valeurs['livraison_adresse_pays']) and $commande['id_auteur'] and $row = sql_fetsel('livraison_nom,livraison_societe,livraison_adresse,livraison_adresse_cp,livraison_adresse_ville,livraison_adresse_pays,livraison_telephone', 'spip_commandes', 'id_auteur=' . intval($commande['id_auteur']) . " AND livraison_adresse<>''", "", "date DESC", "0,1")) { foreach ($row as $k => $v) { if (isset($row[$k]) and $row[$k]) { $valeurs[$k] = $row[$k]; } } } // l'adresse de facturation, qui peut etre vide // (dans ce cas on considere qu'elle est identique a la livraison) $valeurs['facturation_nom'] = $commande['facturation_nom']; $valeurs['facturation_societe'] = $commande['facturation_societe']; $valeurs['facturation_adresse'] = $commande['facturation_adresse']; $valeurs['facturation_adresse_cp'] = $commande['facturation_adresse_cp']; $valeurs['facturation_adresse_ville'] = $commande['facturation_adresse_ville']; $valeurs['facturation_adresse_pays'] = $commande['facturation_adresse_pays']; $valeurs['facturation_telephone'] = $commande['facturation_telephone']; $valeurs['facturation_identique_livraison'] = ''; if (!trim($valeurs['facturation_nom'])) { $valeurs['facturation_identique_livraison'] = 'oui'; } $valeurs['_id_commande'] = $id_commande; $valeurs['_url_suite'] = $url_suite; $valeurs['_titre_suite'] = $titre_suite; $valeurs['_id_livraisonmode'] = array(); include_spip('inc/livraison'); $valeurs['_livraison_necessaire'] = commande_livraison_necessaire($id_commande) ? ' ' : ''; if (!$valeurs['modif'] and $valeurs['_livraison_necessaire']) { // trouver les modes de livraison dispo et leurs prix, en fonction de l'adresse include_spip('inc/livraison'); $ids = sql_allfetsel("id_livraisonmode", "spip_livraisonmodes", "statut=" . sql_quote('publie')); $ids = array_map('reset', $ids); foreach ($ids as $id) { if ($cout = livraison_calculer_cout($id_commande, $id, $valeurs['livraison_adresse_pays'], $valeurs['livraison_adresse_cp'])) { list($prix_ht, $taxe) = $cout; $valeurs['_id_livraisonmode'][$id] = round($prix_ht + $prix_ht * $taxe, 2); } } // si un seul mode possible l'affecter directement sans passer par l'etape choix du mode if (count($valeurs['_id_livraisonmode']) == 1 and !$valeurs['modif']) { include_spip('inc/livraison'); $arg = array_keys($valeurs['_id_livraisonmode']); fixer_livraison_commande($id_commande, reset($arg)); } } // gestion du cache $valeurs['_hash'] = md5(serialize(sql_allfetsel("id_commandes_detail,prix_unitaire_ht,taxe,objet,id_objet,quantite", "spip_commandes_details", "id_commande=" . intval($id_commande)))); return $valeurs; }
/** * Ajouter/mettre a jout le mode et le cout de livraison de la commande * @param int $id_commande * @param int $id_livraisonmode * si pas fourni on reprend celui deja existant pour une mise a jour du cout * @return bool */ function fixer_livraison_commande($id_commande, $id_livraisonmode = 0) { $where = "id_commande=" . intval($id_commande) . " AND objet=" . sql_quote('livraisonmode'); if (!$id_commande or !($commande = sql_fetsel("*", "spip_commandes", "id_commande=" . intval($id_commande)))) { return false; } if (!$id_livraisonmode and !($id_livraisonmode = sql_getfetsel("id_objet", "spip_commandes_details", $where))) { return false; } $cout = livraison_calculer_cout($id_commande, $id_livraisonmode, $commande['livraison_adresse_pays'], $commande['livraison_adresse_cp']); $n = sql_countsel("spip_commandes_details", $where); // enlever les modes de livraison deja existant si en trop // ou si le mode de livraison demande n'est pas possible (incompatible avec l'adresse de la commande) if (!$cout or $n > 1) { sql_delete("spip_commandes_details", $where); $n = 0; } // si ce mode de livraison n'est pas possible on ne fait rien d'autre if (!$cout) { return false; } $mode = sql_getfetsel("titre", "spip_livraisonmodes", "id_livraisonmode=" . intval($id_livraisonmode)); // et en inserer 1 si besoin if (!$n) { $set = array('id_commande' => $id_commande, 'descriptif' => _T('livraison:info_livraison_par', array('mode' => $mode)), 'quantite' => 1, 'prix_unitaire_ht' => 0, 'taxe' => 0, 'objet' => 'livraisonmode', 'id_objet' => $id_livraisonmode, 'statut' => 'attente'); sql_insertq("spip_commandes_details", $set); } // mettre a jour le prix du mode de livraison restant $id_commandes_detail = sql_getfetsel("id_commandes_detail", "spip_commandes_details", $where, '', 'id_commandes_detail', '0,1'); $set = array('descriptif' => _T('livraison:info_livraison_par', array('mode' => $mode)), 'quantite' => 1, 'prix_unitaire_ht' => reset($cout), 'taxe' => end($cout), 'statut' => 'attente', 'id_objet' => $id_livraisonmode); sql_updateq("spip_commandes_details", $set, "id_commandes_detail=" . intval($id_commandes_detail)); return true; }