Changeset 110618 in spip-zone
- Timestamp:
- Jun 11, 2018, 3:03:20 PM (3 years ago)
- Location:
- _plugins_/coupons/trunk
- Files:
-
- 2 added
- 1 deleted
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
_plugins_/coupons/trunk/base/coupons.php
r110096 r110618 27 27 function coupons_declarer_tables_interfaces($interfaces) { 28 28 29 $interfaces['table_des_tables']['coupons'] = 'coupons'; 29 $interfaces['table_des_tables']['coupons'] = 'coupons'; 30 $interfaces['table_des_tables']['coupons_commandes'] = 'coupons_commandes'; 30 31 31 32 return $interfaces; … … 49 50 'principale' => 'oui', 50 51 'field' => array( 51 'id_coupon' => 'bigint(21) NOT NULL', 52 'titre' => 'text', 53 'code' => 'varchar(25) NOT NULL DEFAULT ""', 54 'montant' => 'decimal(20,6)', 55 'id_commandes_detail_origine' => 'bigint(21) NOT NULL DEFAULT 0', 56 'id_commande' => 'bigint(21) NOT NULL DEFAULT 0', 57 'actif' => 'varchar(3) DEFAULT "" NOT NULL', 58 'restriction_taxe' => 'decimal(20,6)', 59 'date' => 'datetime NOT NULL DEFAULT "0000-00-00 00:00:00"', 60 'maj' => 'TIMESTAMP', 52 'id_coupon' => 'bigint(21) NOT NULL', 53 'titre' => 'text', 54 'code' => 'varchar(25) NOT NULL DEFAULT ""', 55 'montant' => 'decimal(20,6)', 56 'id_commandes_detail' => 'bigint(21) NOT NULL DEFAULT 0', 57 'id_produit' => 'bigint(21) NULL', 58 'actif' => 'varchar(3) DEFAULT "" NOT NULL', 59 'date_validite' => 'datetime NULL DEFAULT NULL', 60 'restriction_taxe' => 'decimal(20,6)', 61 'date' => 'datetime NOT NULL DEFAULT "0000-00-00 00:00:00"', 62 'maj' => 'TIMESTAMP', 61 63 ), 62 64 'key' => array( … … 70 72 'code', 71 73 'montant', 72 'id_commandes_detail_origine', 73 'id_commande', 74 'id_produit', 75 'actif', 76 'date_validite', 74 77 'restriction_taxe', 75 78 ), … … 78 81 'code', 79 82 'montant', 80 'id_commandes_detail_origine', 81 'id_commande', 83 'id_produit', 84 'id_commandes_detail', 85 'actif', 86 'date_validite', 82 87 'restriction_taxe', 83 88 ), … … 85 90 'tables_jointures' => array(), 86 91 'texte_changer_statut' => 'coupon:texte_changer_statut_coupon', 87 88 92 ); 89 93 90 94 return $tables; 95 } 96 97 /** 98 * Une table qui contient les différentes utilisations d'un coupon 99 * une ligne par utilisation / par commande, avec le montant utilisé pour la commande 100 * 101 * @param $tables_auxiliaires 102 * 103 * @return array 104 */ 105 function coupons_declarer_tables_auxiliaires($tables_auxiliaires) { 106 107 $spip_coupons_commandes = array( 108 'id_coupon' => 'bigint(21) DEFAULT "0" NOT NULL', 109 'id_commande' => 'bigint(21) DEFAULT "0" NOT NULL', 110 'id_auteur' => 'bigint(21) DEFAULT "0" NOT NULL', 111 'montant' => 'decimal(20,6)', 112 'maj' => 'TIMESTAMP', 113 ); 114 115 $spip_coupons_commandes_cles = array( 116 'PRIMARY KEY' => 'id_coupon, id_commande', 117 ); 118 119 $tables_auxiliaires['spip_coupons_commandes'] = array( 120 'field' => &$spip_coupons_commandes, 121 'key' => &$spip_coupons_commandes_cles, 122 ); 123 124 return $tables_auxiliaires; 91 125 } 92 126 -
_plugins_/coupons/trunk/coupons_administrations.php
r110096 r110618 30 30 **/ 31 31 function coupons_upgrade($nom_meta_base_version, $version_cible) { 32 32 33 $maj = array(); 33 34 34 35 $maj['create'] = array(array('maj_tables', array('spip_coupons'))); 35 $maj['1.3.0'] = array(36 $maj['1.3.0'] = array( 36 37 array('maj_tables', array('spip_coupons')), 37 array('coupons_update_statut') 38 array('coupons_update_statut'), 39 ); 40 $maj['1.4.0'] = array( 41 array('maj_tables', array('spip_coupons')), 42 array('coupons_update_date_validite'), 43 ); 44 $maj['2.0.0'] = array( 45 array('maj_tables', array('spip_coupons', 'spip_coupons_commandes')), 46 array('coupons_update_coupons_commandes'), 47 ); 48 $maj['2.0.1'] = array( 49 array('maj_tables', array('spip_coupons')), 50 array('coupons_update_coupons_id_commandes'), 51 ); 52 $maj['2.1.0'] = array( 53 array('maj_tables', array('spip_coupons')), 38 54 ); 39 55 … … 57 73 58 74 cextras_api_vider_tables(coupons_declarer_champs_extras()); 59 75 60 76 effacer_meta($nom_meta_base_version); 61 77 } 62 78 63 function coupons_update_statut(){ 64 sql_updateq( 65 'spip_coupons', 66 array( 67 'actif' => 'on' 68 ), 69 'id_commande = 0' 70 ); 71 sql_updateq( 72 'spip_coupons', 73 array( 74 'actif' => '' 75 ), 76 'id_commande <> 0' 77 ); 79 /** 80 * Mettre à jour le nouveau champ "actif" sur les coupons pas encore utilisés 81 */ 82 function coupons_update_statut() { 83 $trouver_table = charger_fonction('trouver_table', 'base'); 84 $desc = $trouver_table('coupons'); 85 if($desc['field']['id_commande']) { 86 sql_updateq( 87 'spip_coupons', 88 array( 89 'actif' => 'on', 90 ), 91 'id_commande = 0' 92 ); 93 sql_updateq( 94 'spip_coupons', 95 array( 96 'actif' => '', 97 ), 98 'id_commande <> 0' 99 ); 100 } 78 101 } 102 103 /** 104 * Mettre à jour le nouveau champ "date_validite" (par défaut +365 jours) 105 */ 106 function coupons_update_date_validite() { 107 // durée de validite de 365 jours par défaut 108 ecrire_config('coupons/duree_validite', 365); 109 // on met à jour les dates de validité de tous les coupons 110 sql_query('update spip_coupons set date_validite = DATE_ADD(DATE,INTERVAL 365 DAY)'); 111 } 112 113 /** 114 * Créer une ligne dans coupons_commandes par utilisation du coupon 115 */ 116 function coupons_update_coupons_commandes() { 117 $trouver_table = charger_fonction('trouver_table', 'base'); 118 $desc = $trouver_table('coupons'); 119 if($desc['field']['id_commande']) { 120 $coupons = sql_allfetsel('*', 'spip_coupons', 'id_commande <> 0'); 121 foreach ($coupons as $coupon) { 122 $data = array( 123 'id_coupon' => $coupon['id_coupon'], 124 'id_commande' => $coupon['id_commande'], 125 //'id_auteur' => '', 126 'montant' => $coupon['montant'], 127 'maj' => $coupon['maj'], 128 ); 129 sql_insertq('spip_coupons_commandes', $data); 130 } 131 sql_query('ALTER TABLE spip_coupons DROP id_commande'); 132 } 133 } 134 135 /** 136 * Renommer id_commandes_detail en id_commandes_detail 137 */ 138 function coupons_update_coupons_id_commandes() { 139 sql_query('update spip_coupons set id_commandes_detail = id_commandes_detail_origine'); 140 sql_query('ALTER TABLE spip_coupons DROP id_commandes_detail_origine'); 141 } -
_plugins_/coupons/trunk/coupons_fonctions.php
r110096 r110618 17 17 * Une fonction qui indique si un coupon est utilisable ou pas (i.e. pas encore utilisé) 18 18 * 19 * @deprecated utiliser le champ "actif" pour déterminer si un coupon est valide20 *21 19 * @param $id_coupon 22 20 * … … 24 22 */ 25 23 function coupon_utilisable($id_coupon) { 26 $id_coupon = sql_getfetsel('id_coupon', 'spip_coupons', 'id_coupon = '.$id_coupon.' and actif = '.sql_quote('on')); 27 return ($id_coupon ? false : true); 24 $utilisable = false; 25 if ($id_coupon = sql_getfetsel( 26 'id_coupon', 27 'spip_coupons', 28 array( 29 'id_coupon = ' . intval($id_coupon), 30 'actif = ' . sql_quote('on'), 31 'date_validite >= ' . sql_quote(date('Y-m-d H:i:s')), 32 ) 33 )) { 34 $utilisable = true; 35 } 36 37 if ($id_coupon && !coupon_montant_utilisable($id_coupon)) { 38 $utilisable = false; 39 } 40 41 return $utilisable; 28 42 } 29 43 30 44 /** 31 * Génère un code coupon aléatoire 32 * On évite les I et O et 1 et 0 qui se ressemblent trop 45 * Une fonction qui retourne le montant qui reste à utiliser sur un coupon 46 * 47 * @param $id_coupon 48 * 49 * @return float 50 */ 51 function coupon_montant_utilisable($id_coupon) { 52 $montant_coupon = sql_getfetsel( 53 'montant', 54 'spip_coupons', 55 'id_coupon = ' . intval($id_coupon) 56 ); 57 $montant_utilise = sql_getfetsel( 58 'sum(montant) as total', 59 'spip_coupons_commandes', 60 'id_coupon = ' . intval($id_coupon) 61 ); 62 63 return $montant_coupon - $montant_utilise; 64 } 65 66 /** 67 * Calculer le montant de la réduction d'un coupon sur une commande 68 * en fonction des taxes des objets 33 69 * 34 70 * @return string 35 71 */ 36 function coupon_generer_code() { 72 function coupons_calculer_reduction_commande($id_coupon, $id_commande = null) { 73 if (!$id_commande) { 74 $id_commande = intval(session_get('id_commande')); 75 } 37 76 77 $montant_reduction = coupon_montant_utilisable($id_coupon); 78 $infos_coupon = sql_fetsel('id_produit, restriction_taxe', 'spip_coupons', 'id_coupon = ' . $id_coupon); 79 $restriction_taxe = $infos_coupon['restriction_taxe']; 80 $id_produit = $infos_coupon['id_produit']; 81 82 // calculer le total des produits dans la commande 83 // avec une éventuelle restriction sur la taxe 84 $where = array('id_commande = ' . $id_commande); 85 if (floatval($restriction_taxe)) { 86 $where[] = 'taxe = ' . $restriction_taxe; 87 } 88 // ou sur un produit 89 if($id_produit) { 90 $where[] = 'objet="produit" and id_objet = ' . $id_produit; 91 } 92 $details = sql_allfetsel('*', 'spip_commandes_details', $where); 93 94 $total_commande = 0; 95 foreach ($details as $detail) { 96 if (!in_array($detail['objet'], array('expedition', 'coupon'))) { 97 $total_produit = $detail['prix_unitaire_ht'] * $detail['quantite'] * (1 + $detail['taxe']); 98 if (floatval($detail['reduction']) > 0) { 99 $reduction = min(floatval($detail['reduction']), 1.0); // on peut pas faire une reduction de plus de 100%; 100 $total_produit = $total_produit * (1.0 - $reduction); 101 } 102 $total_commande += $total_produit; 103 } 104 } 105 106 // vérifier si le montant de la réduction est supérieur au total des produits 107 if ($montant_reduction > $total_commande) { 108 $montant_reduction = $total_commande; 109 } 110 111 return $montant_reduction; 112 } 113 114 /** 115 * Génère un code coupon aléatoire et unique, avec un préfixe en option 116 * On évite les I et O et 1 et 0 qui se ressemblent trop 117 * 118 * @param $prefixe string 119 * @param $longueur int 120 * 121 * @return string 122 */ 123 function coupon_generer_code($prefixe = '', $longueur = 10) { 38 124 $chars = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789"; 39 return substr(str_shuffle($chars),0,10); 125 126 $code = ($prefixe ? $prefixe . '-' : '') . substr(str_shuffle($chars), 0, $longueur); 127 while ($id_coupon = sql_getfetsel('id_coupon', 'spip_coupons', 'code = ' . sql_quote($code))) { 128 $code = ($prefixe ? $prefixe . '-' : '') . substr(str_shuffle($chars), 0, $longueur); 129 } 130 131 return $code; 40 132 } -
_plugins_/coupons/trunk/coupons_pipelines.php
r110096 r110618 14 14 } 15 15 16 /** 17 * Enregistrer la date d'inscription lors de l'insertion d'un auteur en base 18 * 19 * @param array $flux 20 * @return array 21 */ 22 function coupons_pre_insertion($flux){ 23 if ($flux['args']['table']=='spip_coupons' && !trim($flux['data']['code'])){ 24 $flux['data']['code'] = coupon_generer_code(); 25 } 26 return $flux; 27 } 28 16 29 function coupons_post_edition($flux) { 17 30 … … 23 36 $id_commande = intval($flux['args']['id_objet']); 24 37 25 // 1 - au paiement de la commande, marquer les coupons commeutilisés38 // 1 - au paiement de la commande, traiter les coupons utilisés 26 39 27 40 $infos_coupons = sql_allfetsel( 28 'id_objet ',41 'id_objet, prix_unitaire_ht', 29 42 'spip_commandes_details', 30 43 'id_commande = ' . $id_commande . ' AND objet = "coupon"'); 31 44 32 45 foreach ($infos_coupons as $coupon) { 33 sql_ updateq(34 'spip_coupons ',46 sql_insertq( 47 'spip_coupons_commandes', 35 48 array( 49 'id_coupon' => $coupon['id_objet'], 36 50 'id_commande' => $id_commande, 37 ' actif' => '',38 ),39 'id_coupon = ' . $coupon['id_objet']40 );41 spip_log('coupon ' . $coupon['id_objet'] . ' utilisé par commande ' . $id_commande,'coupons');51 'id_auteur' => $GLOBALS['visiteur_session']['id_auteur'], 52 'montant' => abs($coupon['prix_unitaire_ht']), 53 )); 54 spip_log('coupon ' . $coupon['id_objet'] . ' utilisé par commande ' . $id_commande . ' - montant : ' . $coupon['prix_unitaire_ht'], 55 'coupons'); 42 56 } 43 57 44 // 2 - générer un coupon pour chaque bon d'achatdans la commande58 // 2 - générer un coupon pour chaque produit "bon d'achat" dans la commande 45 59 46 60 $infos_bon_cadeau = sql_allfetsel( … … 58 72 $id_coupon = objet_inserer('coupon'); 59 73 $valeurs_coupon = array( 60 'montant' => $montant_coupon, 61 'restriction_taxe' => $bon['taxe'], 62 'id_commandes_detail_origine' => $bon['id_commandes_detail'], 63 'titre' => $bon['titre'], 64 'code' => coupon_generer_code(), 65 'actif' => 'on', 74 'montant' => $montant_coupon, 75 'restriction_taxe' => $bon['taxe'], 76 'id_commandes_detail' => $bon['id_commandes_detail'], 77 'titre' => $bon['titre'], 78 'code' => coupon_generer_code(), 79 'actif' => 'on', 80 'date_validite' => date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s') . ' + ' . lire_config('coupons/duree_validite') . ' days')), 66 81 ); 67 82 objet_modifier('coupon', $id_coupon, $valeurs_coupon); … … 101 116 'prive/objets/liste/coupons', 102 117 array( 103 'where' => 'id_commandes_detail _origineIN (' . join(',', $id_commandes_details) . ')',118 'where' => 'id_commandes_detail IN (' . join(',', $id_commandes_details) . ')', 104 119 ) 105 120 ); … … 113 128 } 114 129 130 if ($flux['args']['exec'] == 'produit' && $flux['args']['id_produit']) { 131 132 $texte = recuperer_fond( 133 'prive/objets/liste/coupons', 134 array( 135 'id_produit' => $flux['args']['id_produit'], 136 ) 137 ); 138 if (($p = strpos($flux['data'], '<!--afficher_fiche_objet-->')) !== false) { 139 $flux['data'] = substr_replace($flux['data'], $texte, $p, 0); 140 } else { 141 $flux['data'] .= $texte; 142 } 143 144 } 145 115 146 return $flux; 116 147 } -
_plugins_/coupons/trunk/formulaires/configurer_coupons.html
r107889 r110618 10 10 #ACTION_FORMULAIRE{#ENV{action}} 11 11 12 [(#SAISIE{input, duree_validite, 13 label=<:coupons:label_duree_validite_notifications:>, 14 explication=<:coupons:explication_duree_validite_notifications:>, defaut=365})] 15 12 16 [(#SAISIE{input, emails_notifications, 13 17 label=<:coupons:label_emails_notifications:>, -
_plugins_/coupons/trunk/formulaires/editer_coupon.html
r110096 r110618 13 13 14 14 [(#SAISIE{case, actif, 15 label _case=<:coupon:champ_actif_label:>})]15 label=<:coupon:champ_actif_label:>, defaut=on})] 16 16 17 [(#SAISIE{input, code, obligatoire=oui, 18 label=<:coupon:champ_code_label:>})] 17 [(#SAISIE{date, date_validite, 18 label=<:coupon:champ_date_validite_label:>})] 19 20 21 [(#SAISIE{input, code, 22 label=<:coupon:champ_code_label:>,explication=<:coupon:explication_code_label:>})] 19 23 20 24 [(#SAISIE{input, montant, obligatoire=oui, 21 25 label=<:coupon:champ_montant_label:>})] 26 27 [(#SAISIE{input, id_produit, 28 label=<:coupon:champ_restriction_produit_label:>})] 22 29 23 30 [(#SAISIE{input, restriction_taxe, -
_plugins_/coupons/trunk/formulaires/editer_coupon.php
r107058 r110618 24 24 * @param string $retour 25 25 * URL de redirection après le traitement 26 * @param int $lier_trad27 * Identifiant éventuel d'un coupon source d'une traduction28 * @param string $config_fonc29 * Nom de la fonction ajoutant des configurations particulières au formulaire30 * @param array $row31 * Valeurs de la ligne SQL du coupon, si connu32 * @param string $hidden33 * Contenu HTML ajouté en même temps que les champs cachés du formulaire.34 26 * 35 27 * @return string 36 28 * Hash du formulaire 37 29 */ 38 function formulaires_editer_coupon_identifier_dist( 39 $id_coupon = 'new', 40 $retour = '', 41 $lier_trad = 0, 42 $config_fonc = '', 43 $row = array(), 44 $hidden = '' 45 ) { 30 function formulaires_editer_coupon_identifier_dist($id_coupon = 'new', $retour = '') { 46 31 return serialize(array(intval($id_coupon))); 47 32 } … … 58 43 * @param string $retour 59 44 * URL de redirection après le traitement 60 * @param int $lier_trad61 * Identifiant éventuel d'un coupon source d'une traduction62 * @param string $config_fonc63 * Nom de la fonction ajoutant des configurations particulières au formulaire64 * @param array $row65 * Valeurs de la ligne SQL du coupon, si connu66 * @param string $hidden67 * Contenu HTML ajouté en même temps que les champs cachés du formulaire.68 45 * 69 46 * @return array 70 47 * Environnement du formulaire 71 48 */ 72 function formulaires_editer_coupon_charger_dist( 73 $id_coupon = 'new', 74 $retour = '', 75 $lier_trad = 0, 76 $config_fonc = '', 77 $row = array(), 78 $hidden = '' 79 ) { 80 $valeurs = formulaires_editer_objet_charger('coupon', $id_coupon, '', $lier_trad, $retour, $config_fonc, $row, 81 $hidden); 49 function formulaires_editer_coupon_charger_dist($id_coupon = 'new', $retour = '') { 50 $valeurs = formulaires_editer_objet_charger('coupon', $id_coupon, '', 0, $retour, ''); 82 51 52 if (!intval($id_coupon)) { 53 $valeurs['actif'] = 'on'; 54 $valeurs['date_validite'] = date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s') . ' + ' . lire_config('coupons/duree_validite') . ' days')); 55 } 83 56 return $valeurs; 84 57 } … … 95 68 * @param string $retour 96 69 * URL de redirection après le traitement 97 * @param int $lier_trad98 * Identifiant éventuel d'un coupon source d'une traduction99 * @param string $config_fonc100 * Nom de la fonction ajoutant des configurations particulières au formulaire101 * @param array $row102 * Valeurs de la ligne SQL du coupon, si connu103 * @param string $hidden104 * Contenu HTML ajouté en même temps que les champs cachés du formulaire.105 70 * 106 71 * @return array 107 72 * Tableau des erreurs 108 73 */ 109 function formulaires_editer_coupon_verifier_dist( 110 $id_coupon = 'new', 111 $retour = '', 112 $lier_trad = 0, 113 $config_fonc = '', 114 $row = array(), 115 $hidden = '' 116 ) { 117 $erreurs = array(); 74 function formulaires_editer_coupon_verifier_dist($id_coupon = 'new', $retour = '') { 118 75 119 $erreurs = formulaires_editer_objet_verifier('coupon', $id_coupon, array('titre', 'code', 'montant')); 76 $erreurs = formulaires_editer_objet_verifier('coupon', $id_coupon, array('titre', 'montant')); 77 78 $verifier = charger_fonction('verifier', 'inc'); 79 foreach (array('date_validite') AS $champ) { 80 $normaliser = null; 81 if ($erreur = $verifier(_request($champ), 'date', array('normaliser' => 'datetime'), $normaliser)) { 82 $erreurs[$champ] = $erreur; 83 // si une valeur de normalisation a ete transmis, la prendre. 84 } elseif (!is_null($normaliser)) { 85 set_request($champ, $normaliser); 86 // si pas de normalisation ET pas de date soumise, il ne faut pas tenter d'enregistrer '' 87 } else { 88 set_request($champ, null); 89 } 90 } 91 if (intval($id_coupon)){ 92 if (_request('code') && sql_getfetsel('id_coupon', 'spip_coupons', 'id_coupon <> '.intval($id_coupon).' and code = ' . sql_quote(_request('code')))) { 93 $erreurs['code'] = _T('coupon:erreur_code_deja_utilise'); 94 } 95 } else { 96 if (_request('code') && sql_getfetsel('id_coupon', 'spip_coupons', 'code = ' . sql_quote(_request('code')))) { 97 $erreurs['code'] = _T('coupon:erreur_code_deja_utilise'); 98 } 99 } 120 100 121 101 return $erreurs; … … 133 113 * @param string $retour 134 114 * URL de redirection après le traitement 135 * @param int $lier_trad136 * Identifiant éventuel d'un coupon source d'une traduction137 * @param string $config_fonc138 * Nom de la fonction ajoutant des configurations particulières au formulaire139 * @param array $row140 * Valeurs de la ligne SQL du coupon, si connu141 * @param string $hidden142 * Contenu HTML ajouté en même temps que les champs cachés du formulaire.143 115 * 144 116 * @return array 145 117 * Retours des traitements 146 118 */ 147 function formulaires_editer_coupon_traiter_dist( 148 $id_coupon = 'new', 149 $retour = '', 150 $lier_trad = 0, 151 $config_fonc = '', 152 $row = array(), 153 $hidden = '' 154 ) { 155 $retours = formulaires_editer_objet_traiter('coupon', $id_coupon, '', $lier_trad, $retour, $config_fonc, $row, 156 $hidden); 119 function formulaires_editer_coupon_traiter_dist($id_coupon = 'new', $retour = '') { 157 120 121 if (!_request('code')) { 122 $code = coupon_generer_code(); 123 set_request('code',$code); 124 } 125 126 $retours = formulaires_editer_objet_traiter('coupon', $id_coupon, '', 0, $retour, ''); 127 158 128 return $retours; 159 129 } -
_plugins_/coupons/trunk/formulaires/utiliser_coupon.php
r110096 r110618 15 15 $code_coupon = trim(_request('code_coupon')); 16 16 17 // pas de code saisi ? 18 if (!$code_coupon) { 19 return array('code_coupon' => _T('info_obligatoire_02')); 20 } 21 22 $coupon = sql_fetsel( 17 // supprimer les occurences de coupons déjà présentes dans la commande 18 $id_commande = intval(session_get('id_commande')); 19 sql_delete( 20 'spip_commandes_details', 21 'id_commande=' . $id_commande . ' and objet="coupon"'); 22 23 $id_coupon = sql_getfetsel( 23 24 'id_coupon', 24 25 'spip_coupons', 25 ' actif=' . sql_quote('on') . ' andcode = ' . sql_quote($code_coupon)26 'code = ' . sql_quote($code_coupon) 26 27 ); 27 28 28 29 // coupon inconnu ou déjà utilisé ? 29 if (!$ coupon['id_coupon']) {30 if (!$id_coupon || !coupon_utilisable($id_coupon)) { 30 31 return array('code_coupon' => _T('coupons:code_invalide')); 31 32 } … … 38 39 39 40 $code_coupon = trim(_request('code_coupon')); 40 $coupon = sql_fetsel('*', 'spip_coupons', 'code = ' . sql_quote($code_coupon) . ' and id_commande = 0');41 $coupon = sql_fetsel('*', 'spip_coupons', 'code = ' . sql_quote($code_coupon)); 41 42 42 if ($coupon['id_coupon']) { 43 $id_commande = sql_getfetsel( 44 'id_commande', 45 'spip_commandes', 46 'id_auteur = ' . $GLOBALS['visiteur_session']['id_auteur'] . ' AND statut = "encours"', 47 '', 48 'date DESC' 49 ); 50 51 $montant_reduction = $coupon['montant']; 52 53 // calculer le total des produits dans la commande, avec une éventuelle restriction sur la taxe 54 $where = array('id_commande = ' . $id_commande); 55 if (floatval($coupon['restriction_taxe'])) { 56 $where[] = 'taxe = ' . $coupon['restriction_taxe']; 57 } 58 $details = sql_allfetsel('*', 'spip_commandes_details', $where); 59 60 $total_commande = 0; 61 foreach ($details as $detail) { 62 if (!in_array($detail['objet'], array('expedition', 'coupon'))) { 63 $total_produit = $detail['prix_unitaire_ht'] * $detail['quantite'] * (1 + $detail['taxe']); 64 if (floatval($detail['reduction']) > 0) { 65 $reduction = min(floatval($detail['reduction']), 1.0); // on peut pas faire une reduction de plus de 100%; 66 $total_produit = $total_produit * (1.0 - $reduction); 67 } 68 $total_commande += $total_produit; 69 } 70 } 71 72 // vérifier si le montant de la réduction est supérieur au total des produits 73 if ($montant_reduction > $total_commande) { 74 $montant_reduction = $total_commande; 75 } 76 77 // supprimer les occurences de ce coupon déjà présentes dans la commande 78 sql_delete( 79 'spip_commandes_details', 80 'id_commande=' . $id_commande . ' and objet="coupon" and id_objet = ' . $coupon['id_coupon']); 43 if ($id_coupon = $coupon['id_coupon']) { 44 45 $id_commande = intval(session_get('id_commande')); 46 $montant_reduction = coupons_calculer_reduction_commande($id_coupon, $id_commande); 81 47 82 48 $id_commandes_detail = objet_inserer('commandes_detail'); -
_plugins_/coupons/trunk/lang/coupon_fr.php
r110096 r110618 9 9 10 10 // A 11 'ajouter_lien_coupon' 11 'ajouter_lien_coupon' => 'Ajouter ce coupon de réduction', 12 12 13 13 // C 14 'champ_actif_label' => 'Coupon activé ?', 15 'champ_code_label' => 'Code', 16 'champ_id_commande_label' => 'Utilisé dans la commande', 17 'champ_id_commandes_detail_origine_label' => 'Généré par la commande', 18 'champ_montant_label' => 'Montant', 19 'champ_restriction_taxe_label' => 'Restreint aux objets de la taxe', 20 'champ_titre_label' => 'Titre', 21 'confirmer_supprimer_coupon' => 'Confirmez-vous la suppression de cet coupon de réduction ?', 22 'coupon_utilise' => 'Coupon utilisé', 14 'champ_actif_label' => 'Coupon activé', 15 'champ_code_label' => 'Code', 16 'champ_date_validite_label' => 'Date de fin de validité', 17 'champ_id_commandes_detail_label' => 'Généré par la commande', 18 'champ_montant_label' => 'Montant', 19 'champ_restriction_produit_label' => 'Restreint au produit n°', 20 'champ_restriction_produit_titre_label' => 'Restreint au produit', 21 'champ_restriction_taxe_label' => 'Restreint aux objets de la taxe', 22 'champ_titre_label' => 'Titre', 23 'confirmer_supprimer_coupon' => 'Confirmez-vous la suppression de cet coupon de réduction ?', 24 'coupon_genere' => 'Coupon généré', 25 'coupon_utilise' => 'Coupon utilisé', 26 'coupon_utilisable' => 'Coupon utilisable', 27 28 // E 29 'explication_code_label' => 'Laisser vide pour le générer aléatoirement', 30 'erreur_code_deja_utilise' => 'Ce code est déjà utilisé par un coupon', 23 31 24 32 // I 25 'icone_creer_coupon' => 'Créer un coupon de réduction', 26 'icone_modifier_coupon' => 'Modifier ce coupon de réduction', 27 'info_1_coupon' => 'Un coupon de réduction', 28 'info_aucun_coupon' => 'Aucun coupon de réduction', 29 'info_coupons_auteur' => 'Les coupons de réduction de cet auteur', 30 'info_nb_coupons' => '@nb@ coupons de réduction', 33 'icone_creer_coupon' => 'Créer un coupon de réduction', 34 'icone_modifier_coupon' => 'Modifier ce coupon de réduction', 35 'info_1_coupon' => 'Un coupon de réduction', 36 'info_aucun_coupon' => 'Aucun coupon de réduction', 37 'info_coupons_auteur' => 'Les coupons de réduction de cet auteur', 38 'info_nb_coupons' => '@nb@ coupons de réduction', 39 40 // M 41 'montant_utilisable' => 'Montant restant à utilise', 31 42 32 43 // R 33 'retirer_lien_coupon' 34 'retirer_tous_liens_coupons' 44 'retirer_lien_coupon' => 'Retirer ce coupon de réduction', 45 'retirer_tous_liens_coupons' => 'Retirer tous les coupons de réduction', 35 46 36 47 // S 37 'supprimer_coupon' 48 'supprimer_coupon' => 'Supprimer cet coupon de réduction', 38 49 39 50 // T 40 'texte_ajouter_coupon' => 'Ajouter un coupon de réduction', 41 'texte_changer_statut_coupon' => 'Ce coupon de réduction est :', 42 'texte_creer_associer_coupon' => 'Créer et associer un coupon de réduction', 43 'texte_definir_comme_traduction_coupon' => 'Ce coupon de réduction est une traduction du coupon de réduction numéro :', 44 'titre_coupon' => 'Coupon de réduction', 45 'titre_coupons' => 'Coupons de réduction', 46 'titre_coupons_rubrique' => 'Coupons de réduction de la rubrique', 47 'titre_langue_coupon' => 'Langue de ce coupon de réduction', 48 'titre_logo_coupon' => 'Logo de ce coupon de réduction', 49 'titre_objets_lies_coupon' => 'Liés à ce coupon de réduction', 51 'texte_ajouter_coupon' => 'Ajouter un coupon de réduction', 52 'texte_changer_statut_coupon' => 'Ce coupon de réduction est :', 53 'texte_creer_associer_coupon' => 'Créer et associer un coupon de réduction', 54 'texte_definir_comme_traduction_coupon' => 'Ce coupon de réduction est une traduction du coupon de réduction numéro :', 55 'titre_coupon' => 'Coupon de réduction', 56 'titre_coupons' => 'Coupons de réduction', 57 'titre_coupons_rubrique' => 'Coupons de réduction de la rubrique', 58 'titre_langue_coupon' => 'Langue de ce coupon de réduction', 59 'titre_logo_coupon' => 'Logo de ce coupon de réduction', 60 'titre_objets_lies_coupon' => 'Liés à ce coupon de réduction', 61 62 // U 63 'utilise_dans_commandes' => 'Utilisé dans les commandes', 50 64 ); -
_plugins_/coupons/trunk/lang/coupons_fr.php
r107889 r110618 18 18 // E 19 19 'explication_emails_notifications' => 'Séparés par une virgule', 20 'explication_duree_validite_notifications' => 'En nombre de jours', 20 21 21 22 // L 22 23 'label_emails_notifications' => 'Emails à notifier de la création d\'un coupon', 24 'label_duree_validite_notifications' => 'Durée de validité d\'un nouveau coupon créé', 23 25 24 26 // U -
_plugins_/coupons/trunk/notifications/notification_coupon.html
r107995 r110618 2 2 <p><strong><:coupon:champ_montant_label:></strong> [(#MONTANT|prix_formater)] 3 3 <p><strong><:coupon:champ_code_label:></strong> [(#CODE)] 4 <BOUCLE_commandes_details(COMMANDES_DETAILS){id_commandes_detail =#ID_COMMANDES_DETAIL_ORIGINE}>4 <BOUCLE_commandes_details(COMMANDES_DETAILS){id_commandes_detail}> 5 5 <p><a href="[(#VAL{commande}|generer_url_ecrire{id_commande})]">Voir la commande n° #ID_COMMANDE</a></p> 6 6 </BOUCLE_commandes_details> -
_plugins_/coupons/trunk/paquet.xml
r110096 r110618 2 2 prefix="coupons" 3 3 categorie="divers" 4 version=" 1.3.0"4 version="2.1.0" 5 5 etat="test" 6 6 compatibilite="[3.1.0;3.2.*]" 7 7 logo="prive/themes/spip/images/coupons-64.png" 8 8 documentation="" 9 schema=" 1.3.0"9 schema="2.1.0" 10 10 > 11 11 <nom>Coupons de réduction</nom> … … 22 22 <pipeline nom="declarer_tables_objets_sql" inclure="base/coupons.php" /> 23 23 <pipeline nom="declarer_tables_interfaces" inclure="base/coupons.php" /> 24 <pipeline nom="declarer_tables_auxiliaires" inclure="base/coupons.php" /> 24 25 <pipeline nom="declarer_champs_extras" inclure="base/coupons.php" /> 25 26 <pipeline nom="autoriser" inclure="coupons_autorisations.php" /> 26 27 28 <pipeline nom="pre_insertion" inclure="coupons_pipelines.php" /> 27 29 <pipeline nom="post_edition" inclure="coupons_pipelines.php" /> 28 30 <pipeline nom="affiche_milieu" inclure="coupons_pipelines.php" /> -
_plugins_/coupons/trunk/prive/objets/contenu/coupon.html
r110096 r110618 1 1 <BOUCLE_coupon(COUPONS){id_coupon}> 2 2 3 < divclass="champ">4 < label><:coupon:champ_actif_label:> : </label>5 [(#ACTIF|?{<:item_ non:>,<:item_oui:>})]6 </ div>3 <p class="champ"> 4 <strong><:coupon:champ_actif_label:> : </strong> 5 [(#ACTIF|?{<:item_oui:>,<:item_non:>})] 6 </p> 7 7 8 [<div class="champ"> 9 <label><:coupon:champ_code_label:> : </label> 8 <p class="champ"> 9 <strong><:coupon:champ_date_validite_label:> : </strong> 10 [(#DATE_VALIDITE|affdate)] 11 </p> 12 13 [<p class="champ"> 14 <strong><:coupon:champ_code_label:> : </strong> 10 15 (#CODE) 11 </ div>]16 </p>] 12 17 13 [< divclass="champ">14 < label><:coupon:champ_montant_label:> : </label>18 [<p class="champ"> 19 <strong><:coupon:champ_montant_label:> : </strong> 15 20 (#MONTANT|prix_formater) 16 </ div>]21 </p>] 17 22 18 <BOUCLE_commande_detail_origine(COMMANDES_DETAILS){id_commandes_detail=#ID_COMMANDES_DETAIL_ORIGINE}> 23 [<p class="champ"> 24 <strong><:coupon:montant_utilisable:> : </strong> 25 (#ID_COUPON|coupon_montant_utilisable|prix_formater) 26 </p>] 27 28 [<p class="champ">(#ID_PRODUIT|oui) 29 <strong><:coupon:champ_restriction_produit_titre_label:> : </strong> 30 <a href="[(#ID_PRODUIT|generer_url_entite{produit})]">[(#INFO_TITRE{produit,#ID_PRODUIT})]</a> 31 </p>] 32 33 [<p class="champ">(#RESTRICTION_TAXE|>{0}|oui) 34 <strong><:coupon:champ_restriction_taxe_label:> : </strong> 35 [(#RESTRICTION_TAXE|mult{100})%] 36 </p>] 37 38 39 [(#BOITE_OUVRIR{<:coupon:coupon_utilisable:>,'statut'})] 40 [(#ID_COUPON|coupon_utilisable|?{Oui,Non})] 41 #BOITE_FERMER 42 43 <BOUCLE_commande_detail_origine(COMMANDES_DETAILS){id_commandes_detail}> 19 44 <BOUCLE_commande_origine(COMMANDES){id_commande}> 20 <div class="champ"> 21 <label><:coupon:champ_id_commandes_detail_origine_label:> : </label> 45 [(#BOITE_OUVRIR{<:coupon:champ_id_commandes_detail_label:>,'info'})] 22 46 <a href="[(#ID_COMMANDE|generer_url_entite{commande})]">#REFERENCE</a> 23 </div> 47 #BOITE_FERMER 24 48 </BOUCLE_commande_origine> 25 49 </BOUCLE_commande_detail_origine> 26 50 27 <BOUCLE_commande(COMMANDES){id_commande=#ID_COMMANDE}> 28 <div class="champ"> 29 <label><:coupon:champ_id_commande_label:> : </label> 30 <a href="[(#ID_COMMANDE|generer_url_entite{commande})]">#REFERENCE</a> 31 </div> 32 </BOUCLE_commande> 51 <B_commandes> 52 [(#BOITE_OUVRIR{<:coupon:utilise_dans_commandes:>,'info'})] 53 <BOUCLE_commandes(COUPONS_COMMANDES){id_coupon}> 33 54 34 [<div class="champ">(#RESTRICTION_TAXE|>{0}|oui) 35 <label><:coupon:champ_restriction_taxe_label:> : </label> 36 [(#RESTRICTION_TAXE|mult{100})%] 37 </div>] 55 <p> 56 <a href="[(#ID_COMMANDE|generer_url_entite{commande})]">#INFO_REFERENCE{commande,#ID_COMMANDE}</a> : [(#MONTANT|prix_formater)] - [(#MAJ|affdate_heure)] 57 </p> 58 59 </BOUCLE_commandes> 60 #BOITE_FERMER 61 </B_commandes> 62 38 63 39 64 </BOUCLE_coupon> -
_plugins_/coupons/trunk/prive/objets/liste/coupons.html
r110096 r110618 11 11 <thead> 12 12 <tr class="first_row"> 13 <th class="picto" scope="col"></th>14 13 <th class="titre" scope="col">[(#TRI{titre,<:coupon:champ_titre_label:>,ajax})]</th> 15 14 <th class="" scope="col">[(#TRI{code,<:coupon:champ_code_label:>,ajax})]</th> 16 <th class="" scope="col">[(#TRI{id_commandes_detail_origine,<:commandes:commande_titre:>,ajax})]</th>17 15 <th class="" scope="col"><:coupon:coupon_utilisable:></th> 18 16 <th class="date" scope="col">[(#TRI{date,<:date:>,ajax})]</th> … … 22 20 <tbody> 23 21 <BOUCLE_liste_coupons(COUPONS) 24 {id_commandes_detail _origine?}{id_mot?}{id_auteur?}{where?}{recherche?}22 {id_commandes_detail?}{id_mot?}{id_auteur?}{where?}{code?}{id_produit?}{recherche?} 25 23 {tri #ENV{par,date},#GET{defaut_tri}}{par titre}{pagination #ENV{nb,10}}> 26 24 <tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]"> 27 <td class="picto">[(#CHEMIN_IMAGE{coupon-16.png}|balise_img)]</td>28 25 <td class="titre principale">[(#LOGO_COUPON|image_reduire{20,26})]<a href="[(#ID_COUPON|generer_url_entite{coupon})]" title="<:info_numero_abbreviation|attribut_html:> #ID_COUPON">[(#RANG). ]#TITRE</a></td> 29 26 <td class="">#CODE</td> 30 <td class=""><BOUCLE_commande(COMMANDES_DETAILS){id_commandes_detail=#ID_COMMANDES_DETAIL_ORIGINE}><a href="#URL_ECRIRE{commande,id_commande=#ID_COMMANDE}">#ID_COMMANDE</a></BOUCLE_commande></td> 31 <td class="">[(#ACTIF|?{<:item_non:>,<:item_oui:>})]</td> 27 <td class="">[(#ID_COUPON|coupon_utilisable|?{Oui,Non})]</td> 32 28 <td class="date secondaire">[(#DATE|affdate_jourcourt)]</td> 33 29 <td class="id">[(#AUTORISER{modifier,coupon,#ID_COUPON}|?{ -
_plugins_/coupons/trunk/prive/squelettes/contenu/coupons.html
r107058 r110618 2 2 <div class="nettoyeur"></div> 3 3 4 <INCLURE{fond=prive/objets/liste/coupons, env, ajax , sinon=<:coupon:info_aucun_coupon:>}>4 <INCLURE{fond=prive/objets/liste/coupons, env, ajax=liste-objets, nb=25, sinon=<:coupon:info_aucun_coupon:>}> 5 5 6 6 [(#AUTORISER{creer,coupon})
Note: See TracChangeset
for help on using the changeset viewer.