Jump to content

Insérer dans la facture PDF le nom et valeur des champs text de personnalisation


Recommended Posts

Bonjour,
Je souhaiterai afficher dans la facture éditée en pdf les valeurs des champs texte de personnalisation de produit.
exemple : j'ai deux champs de personnalisation hauteur et largeur d'un produit malheureusement dans la facture il n'ai juste marqué que le produit est personnalisé hors je voudrais afficher "hauteur" et "largeur" avec à coté la valeur saisit lors de l'achat.
auriez vous une idée ?? je ne sais pas comment faire car le fichier PDF.php est un peu brouillon pour moi.

Sinon dans la même idée, je voudrais dans le "panier" enfin quand on affiche le panier, affiche non pas texte n°1 texte n°2 et leur valeur mais "hauteur" et "largeur" ... comment m'y prendre ? il me semble que cela doit se développer dans la page order_details.php pour sur une qui s'y rapporte ... pourriez vous m'aider ? je suis sur que quelqu'un à une solution a me proposer !

merci

Link to comment
Share on other sites

  • 1 month later...

oui j'ai trouvé comment faire, le résultat est convenable, j'affiche désormais le nom de la personnalisation texte, dans le listing des produit du papier, de la commande et aussi sur les factures avec la valeur a coté bien entendu. ex: hauteur : XXX, largeur : XXX.

il faut que je reunisse les infos de mes modifs pour pouvoir les partager.

Link to comment
Share on other sites

Alors alors j'ai tenté de récupéré ce que j'avais fait, il est possible qu'il manque des choses mais on va déja déballer tout cela.
alors dans le fichier de classes Product.php il faut remplacer la fonction "getAllCustomizedDatas" par celle ci :

static public function getAllCustomizedDatas($id_cart)
   {
       if (!$result = Db::getInstance()->ExecuteS('
           SELECT cd.`id_customization`, c.`id_product`, c.`id_product_attribute`, cd.`type`, cd.`index`, cd.`value`
           FROM `'._DB_PREFIX_.'customized_data` cd
           NATURAL JOIN `'._DB_PREFIX_.'customization` c
           WHERE c.`id_cart` = '.intval($id_cart).'
           ORDER BY `id_product`, `id_product_attribute`, `type`, `index`'))
           return false;
       $customizedDatas = array();
       $i=0;
       foreach ($result AS $row)
       {
           $customizedDatas[intval($row['id_product'])][intval($row['id_product_attribute'])][intval($row['id_customization'])]['datas'][intval($row['type'])][$i] = $row;


       if (($result2 = Db::getInstance()->ExecuteS('
           SELECT cfl.`name`
           FROM `'._DB_PREFIX_.'customization_field_lang` cfl
           INNER JOIN `'._DB_PREFIX_.'customization_field` cf ON (cf.`id_customization_field` = cfl.`id_customization_field`)

           WHERE cfl.`id_lang` = 2 AND cf.`id_customization_field` = '.intval($row['index']).'')) === false)
           return false;
       foreach ($result2 AS $row2)
           $customizedDatas[intval($row['id_product'])][intval($row['id_product_attribute'])][intval($row['id_customization'])]['datas'][intval($row['type'])][$i]['name'] = $row2['name'];
           $i++;
       }
       if (!$result = Db::getInstance()->ExecuteS('SELECT `id_product`, `id_product_attribute`, `id_customization`, `quantity`, `quantity_refunded`, `quantity_returned` FROM `'._DB_PREFIX_.'customization` WHERE `id_cart` = '.intval($id_cart)))
           return false;

       foreach ($result AS $row)
       {
           $customizedDatas[intval($row['id_product'])][intval($row['id_product_attribute'])][intval($row['id_customization'])]['quantity'] = intval($row['quantity']);
           $customizedDatas[intval($row['id_product'])][intval($row['id_product_attribute'])][intval($row['id_customization'])]['quantity_refunded'] = intval($row['quantity_refunded']);
           $customizedDatas[intval($row['id_product'])][intval($row['id_product_attribute'])][intval($row['id_customization'])]['quantity_returned'] = intval($row['quantity_returned']);
       }
       return $customizedDatas;
   }


ceci permet d'ajouter dans le tableau le nom de chaque custo textfield par contre pas dynamqieu pour le moment, on voit bien que la langue utilisée est 2, (francais) il va falloir modifier ça.

ensuite dans le fichier order-details.tpl :
à la ligne environ 150 il faut mettre ca :

>{elseif $type == $CUSTOMIZE_TEXTFIELD}
</pre>
<ul>{counter start=0 print=false}
                               {foreach from=$datas item='data'}
{$data.name}{l s=':'} {$data.value}
                               {/foreach}
</ul>
<br>                          


ceci affiche le nom et la valeur de chaque custo pour chaque produit detaillé dans le compte rendu de commande (panier) avant le paiement.

Link to comment
Share on other sites

enfin pour afficher la meme chose dans la faacture :
dans le fichier PDF.php dans classes il faut mettre à la ligne 600 environ, dans la partie "* Product table with price, quantities..." le code suivant : enfin remplacer tout le if(isset(customi .... par :

if (isset($customizedDatas[$product['product_id']][$product['product_attribute_id']]))
               {
                   $custProd ='';
                   foreach ($customizedDatas[intval($product['product_id'])][intval($product['product_attribute_id'])] AS $customizationId => $customization)
                   {
                       foreach ($customization['datas'] AS $type => $datas)
                           if ($type == _CUSTOMIZE_TEXTFIELD_)
                           {
                               foreach ($datas AS $data)
                               {    
                                   $custProd .= ', '.$data['name'].' : '.$data['value'];
                               }
                           }
                   }
                   $productQuantity = intval($product['product_quantity']) - intval($product['customizationQuantityTotal']);
                   if ($delivery)
                       $this->SetX(25);
                   $before = $this->GetY();
                   $this->MultiCell($w[++$i], 5, Tools::iconv('utf-8', self::encoding(), $product['product_name']).' - '.self::l('Customized').' - '.$custProd, 'B');
                   $lineSize = $this->GetY() - $before;
                   $this->SetXY($this->GetX() + $w[0] + ($delivery ? 15 : 0), $this->GetY() - $lineSize);
                   $this->Cell($w[++$i], $lineSize, $product['product_reference'], 'B');
                   if (!$delivery)
                       $this->Cell($w[++$i], $lineSize, self::convertSign(Tools::displayPrice($unit_without_tax, self::$currency, true, false)), 'B', 0, 'R');
                   $this->Cell($w[++$i], $lineSize, intval($product['customizationQuantityTotal']), 'B', 0, 'C');
                   if (!$delivery)
                   {
                       $this->Cell($w[++$i], $lineSize, self::convertSign(Tools::displayPrice($unit_without_tax * intval($product['customizationQuantityTotal']), self::$currency, true, false)), 'B', 0, 'R');
                       $this->Cell($w[++$i], $lineSize, self::convertSign(Tools::displayPrice($unit_with_tax * intval($product['customizationQuantityTotal']), self::$currency, true, false)), 'B', 0, 'R');
                   }
                   $this->Ln();
                   $i = -1;
                   $total_without_tax = $unit_without_tax * $productQuantity;
                   $total_with_tax = $unit_with_tax * $productQuantity;
               }


voila je pense que c'est tout.

Link to comment
Share on other sites

  • 4 weeks later...

1000000000 excuses !

je suis bêêêête !

c'est le fichier pdf de commande qu'on a modifié là, donc merci merci merci merci ça fonctionne nikel!

je cherchais à voir la modif dans mes emails de notification de commandes parce que j'aimerai aussi que les champs customization apparaissent là...

j'ai essayé de modifier les fichier du mailalert en ajoutant des id_custimization, calquée sur les lignes id_attribute mais ça marche po ... snif


encore désolée et merci pour le pdf

Link to comment
Share on other sites

le but de votre modification est quoi exactement ? vous voulez que lor d'une commande, le mail de confirmation de commande affiche les personnalisations textes ? car dans ce cas ce n'est pas dans le module mailalert enfin il me semble je regarde ca.

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour, je cherche également à insérer des champs personnalisés ou personnalisables (custom fields) dans la page d'accueil, est ce que par bonheur l'un d'entre vous aurais trouvé la solution?
Merci d'avance.

Link to comment
Share on other sites

bonjour,

sur mes produits j'ai un champs texte de personnalisation, et pas d'attributs car mes listes sont trop nombreuses et ça ne fonctionne pas (:trop de déclinaisons) alors je veux faire rentrer l'information par un champ texte, il s'agit d'une date de naissance.
cette date est déterminante pour choisir le produit que je vais envoyer.

quand je reçois mon email "une nouvelle commande" j'aimerai que dans la case article apparaisse la date saisie par la personne dans le champ de personnalisation !

je ne sais pas comment l'expliquer plus clairement.... :(

Link to comment
Share on other sites

Bonjour,

Voici quelques précisions...mon site a pour vocation de rechercher des produits pour le compte d'internautes qui eux doivent rentrer sur ma page d'accueil une (ou plusieurs) URL / Description / Prix (chaque information dans un champ différent) correspondants aux produits souhaités. Comment faire?

Merci,

Link to comment
Share on other sites

c'est tout à fait possible je l'ai fait, ma modif permet d'afficher le nom du champ text au lieu de "textfield" ainsi que la valeur de celui ci dans le recap de l commande, mais aussi dans le panier, et les factures et aussi dans le backoffice pour la gestion des commandes.

Link to comment
Share on other sites

Ah mais je n'ai pas dit le contraire, c'est la seule chose qui n'est pas gérée pour le moment mais je vais regarder tout cela. il faut juste que je trouve quelle fonction est utilisée pour envoyer automatiquement le mail apres je ferais le reste sans trop de souci

Link to comment
Share on other sites

Bonsoir
Si quelqu'un a une solution pour saisir autre chose que des champs textes dans les personnalisations..
Par exemple une selection dans un champ liste de choix, boutons radios, case a cocher .. etc
j'arrive a afficher graphiquement ces éléments de saisies, les valider a la premier mise en panier, mais en retournant sur l'article je peux le recommander sans etre obligé de saisir les infos a nouveaux ! même avec des champs obligatoires???
bref la cata !!!
j'ai déja poster sur deux autres forum .. mais helas sans success .
http://www.prestashop.com/forums/viewthread/51193/developpement/modification_du_champ_de_personnalisation

Merci pour toutes réponses utiles

Link to comment
Share on other sites

  • 4 months later...
  • 5 months later...
  • 3 months later...

Bonjour a tous
Ce que je cherche c'est d'ajouter un champ personnalisable dans la facture pdf, je m'explique bien : je veux ajouter un champ personnalisé Garantie dans la fiche de chaque commande en BO c a d dans le fichier AdminOrders.php.
J'ai une durée de garantie standard pour tous mes produits et qui sera affiché dans la facture pdf a l'aide du module développé sur mesure pour afficher les caractéristiques des produits sur facture pdf. Lorsque un client veut échanger son produit défectueux par un autre après un mois par exemple, sa nouvelle commande doit mentionnée une durée de garantie moins la période de garantie déjà consommée (1 mois) dés a la première acquisition donc c'est pour cela que je doit avoir ce champ personnalisable.
Ce champ personnalisé sera affiché dans la nouvelle facture Pdf dans la colonne "Description" sous le nom du produit.
Normalement il faut rajouter une colonne dans une des tables orders pour enregistrer ce champ pour chaque commande donc je opte pour un module pour cette tâche mais je suis pas un développeur expérimente pour achever cette tâche.
je galère encore mais s'il y'a une idée, je suis preneur :-)
Version 1.2.5
Merci

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...