Valider 59c4581a rédigé par cedric@yterium.com's avatar cedric@yterium.com
Parcourir les fichiers

Ne pas recopier systematiquement le panier en cours sur la commande via le...

Ne pas recopier systematiquement le panier en cours sur la commande via le pipeline, car on peut vouloir creer une commande indepandante du panier (achat immediat d'un produit)
Du coup on utilise une fonction dediee qu'on appelle explicitement lorsqu'on cree la commande d'apres le panier
parent 25e81b6a
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+0 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -3,5 +3,4 @@ action/commandes_paniers.php -text
images/panier2commande-32.png -text
lang/paquet-panier2commande_fr.php -text
/panier2commande_options.php -text
/panier2commande_pipelines.php -text
/paquet.xml -text
+61 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -63,7 +63,11 @@ function action_commandes_paniers_dist($arg=null){
	// cas du bouton "Achat immediat de ce produit" qui va direct au paiement
	// ne doit pas remplir la commande avec le panier en cours
	include_spip('inc/commandes');
	$id_commande = creer_commande_encours();

	if ($id_commande = creer_commande_encours()){
		panier2commande_remplir_commande($id_commande,$id_panier);
	}


	// Supprimer le panier ?
	if (!$keep){
@@ -76,3 +80,59 @@ function action_commandes_paniers_dist($arg=null){
		$GLOBALS['redirect'] = generer_url_public('commande','id_commande='.$id_commande,true);
	}
}



/**
 * Remplir une commande d'apres un panier
 *
 * @param  int $id_commande
 * @param  int $id_panier
 */
function panier2commande_remplir_commande($id_commande,$id_panier){

	include_spip('action/editer_objet');
	include_spip('inc/filtres');
	include_spip('inc/paniers');

	// noter le panier source dans le champ source de la commande
	objet_modifier('commande',$id_commande,array('source'=>"panier#$id_panier"));

	// recopier le contenu du panier dans la commande
	// On récupère le contenu du panier
	$panier = sql_allfetsel(
		'*',
		'spip_paniers_liens',
		'id_panier = '.intval($id_panier)
	);

	// Pour chaque élément du panier, on va remplir la commande
	if ($panier and is_array($panier)){
		include_spip('spip_bonux_fonctions');
		$fonction_prix = charger_fonction('prix', 'inc/');
		$fonction_prix_ht = charger_fonction('ht', 'inc/prix');
		foreach($panier as $emplette){
			$prix_ht = $fonction_prix_ht($emplette['objet'], $emplette['id_objet'],3);
			$prix = $fonction_prix($emplette['objet'], $emplette['id_objet'],3);
			if($prix_ht > 0)
				$taxe = round(($prix - $prix_ht) / $prix_ht, 3);
			else
				$taxe = 0;
			// création du détail de la commande
			if ($id_commandes_detail = objet_inserer('commandes_detail')) {
				$set = array(
					'id_commande' => $id_commande,
					'objet' => $emplette['objet'],
					'id_objet' => $emplette['id_objet'],
					'descriptif' => generer_info_entite($emplette['id_objet'], $emplette['objet'], 'titre', '*'),
					'quantite' => $emplette['quantite'],
					'prix_unitaire_ht' => $prix_ht,
					'taxe' => $taxe,
					'statut' => 'attente'
				);
				objet_modifier('commandes_detail', $id_commandes_detail, $set);
			}
		}
	}

}
 No newline at end of file

panier2commande_pipelines.php

supprimé100644 → 0
+0 −73
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<?php
/**
 * Pipelines utilisées par le plugin Commandes de paniers
 *
 * @plugin     Commandes de Paniers
 * @copyright  2014
 * @author     Les Développements Durables
 * @licence    GNU/GPL
 * @package    SPIP\Panier2commande\Pipelines
 */

// Sécurité
if (!defined('_ECRIRE_INC_VERSION')) return;

/**
 * Actions effectuées après l'insertion d'un objet dans la base de donnée
 *
 * @pipeline affiche_milieu
 * @param  array $flux Données du pipeline
 * @return array       Données du pipeline
 */
function panier2commande_post_insertion($flux){
	// Après insertion d'une commande "encours" et s'il y a un panier en cours
	if (
		$flux['args']['table'] == 'spip_commandes'
		and ($id_commande = intval($flux['args']['id_objet'])) > 0
		and $flux['data']['statut'] == 'encours'
		and include_spip('inc/paniers')
		and $id_panier = paniers_id_panier_encours()
		and include_spip('inc/filtres')
	){
		// On récupère le contenu du panier
		$panier = sql_allfetsel(
			'*',
			'spip_paniers_liens',
			'id_panier = '.$id_panier
		);

		// Pour chaque élément du panier, on va remplir la commande
		if ($panier and is_array($panier)){
			include_spip('spip_bonux_fonctions');
			$fonction_prix = charger_fonction('prix', 'inc/');
			$fonction_prix_ht = charger_fonction('ht', 'inc/prix');
			foreach($panier as $emplette){
				$prix_ht = $fonction_prix_ht($emplette['objet'], $emplette['id_objet'],3);
				$prix = $fonction_prix($emplette['objet'], $emplette['id_objet'],3);
				if($prix_ht > 0)
					$taxe = round(($prix - $prix_ht) / $prix_ht, 3);
				else
					$taxe = 0;
				// création du détail de la commande
				include_spip('action/editer_objet');
				if ($id_commandes_detail = objet_inserer('commandes_detail')) {
					$set = array(
						'id_commande' => $id_commande,
						'objet' => $emplette['objet'],
						'id_objet' => $emplette['id_objet'],
						'descriptif' => generer_info_entite($emplette['id_objet'], $emplette['objet'], 'titre', '*'),
						'quantite' => $emplette['quantite'],
						'prix_unitaire_ht' => $prix_ht,
						'taxe' => $taxe,
						'statut' => 'attente'
					);
					objet_modifier('commandes_detail', $id_commandes_detail, $set);
				}
			}
		}
	}

	return $flux;
}

?>
+2 −4
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<paquet
	prefix="panier2commande"
	categorie="divers"
	version="1.0.2"
	version="1.1.0"
	etat="test"
	compatibilite="[3.0.0;3.1.*]"
	logo="images/panier2commande-32.png"
@@ -17,6 +17,4 @@
	<necessite nom="paniers" compatibilite="[1.0.0;]" />
	<necessite nom="spip_bonux" compatibilite="[3.0.0;]" />
	
	<pipeline nom="post_insertion" inclure="panier2commande_pipelines.php" />

</paquet>