Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
/**
 * 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;
}