Jump to content

Extension fonctionnalités transport


Recommended Posts

Bonjour à tous,
J'espère poster dans la bonne section.
A ce jour , j'ai implémenté sur une boutique une extension du module transport.
La problèmatique était la suivante :
La plupart des pays doivent être tarifés en fonction du poids.
En france , mon client tarife un prix fixe pour l'ensemble des commandes, et offre le transport à partir d'un seuil de commande.
Facile me direz vous ?
2 tranches de prix 0 à x et x à 1000000.... , le tarif pour la premiere et 0 pour la seconde
Seulement tous les autres transports doivent se baser sur le poids et non le prix ( ce choix est malheureusement effectué pour tous les transporteurs)
Facile alors, me direz vous ?
Il suffit de mettre le transport offert à partir de ... € dans la config générale .
Seulement là aussi le paramètre est global...

J'ai donc modifié deux classes qui me permettent d'avoir des paramètres indépendants de tranche (poids ou prix) , pour chaque transporteur.

Je ne sais pas si ceci intéresse du monde, mais à ce stade ma modif fonctionne mais n'est encore qu'un tweak , j'entends par là que rien dans l'admin ne permet de configurer quel transporteur utilise telle ou telle tranche , que le module n'est pas encore 'installable' etc...
J'attends donc de savoir si une telle extension peux interesser du monde avant d'aller au delà de ce qui satisfait déja mon client en terme de fonctionnement et passer du temps à la rendre 'portable et installable'.

Merci de vos avis et encouragements,
Cdt
Broceliande

Link to comment
Share on other sites

JE recherche egalement ce type de module car j'envoie en fonction du prix et non du poids. J'avais trouve un maniere de regler ceci en arrangant zones et tranches et en recreant les zone comme pays et autantde transporteurs par pays...complexe qd meme...malheureusement j ai l impression que le module shipping n est pas tres stable et tout s est deregle tout seul... as tu une explication a cela? car avant le shipping se calculait bien en fonction du prix...merci

Link to comment
Share on other sites

Salut,
Content d'avoir au moins une réponse à mon post ;)
Je ne crois pas que le transport soit instable sur presta, pas une seconde.
Si tes calculs se font désormais selon le poids et non par rapport au prix , c'est que tu as changé ce fameux paramètre 'global' à tous les transporteurs
Ce paramètre se règle lorsque tu cliques sur l'onglet transport dans ton admin.
il y a deux champs :
En fonction du prix total
En fonction du poids total
Ma modif permet justement d'avoir une gestion distincte par transporteur et non un seul paramètre partagé pour l'ensemble des transporteurs.
Un exemple simple :
- tu offres le transport en france à partir de 30€ de commande :
1) tu règles un transporteur à priori 'colissimo france' pour se comporter comme tel
de 0 à 30€ de commande , 5.50€
de 30 à xxxxxxxx , 0€
- Dans le système presta actuel tous tes tranporteurs devront utiliser des tranches de prix : pas glop
- avec la modif que je propose , chaque transporteur peut se comporter différement.

Comme je l'ai dis , je n'ai rien à ce jour d'installable, ni d'administrable , mais en cas de besoin , pas de problème pour que je poste ici les modifs que j'ai effectuées (très peu en fait ) , et le modus opérandi pour configurer pour que cela fonctionne tout le temps (car chaque fois qu'un paramètre de transporteur est modifié , presta duplique ce dernier dans la table avec les nouveaux paramètres. Ce qui te fais perdre à chaque fois la config 'individuelle' du comportement par tranches et par transporteur .
C'est la raison pour laquelle je demandais si cela valait la peine d'implémenter ma modif plus en fond ou non. car en l'état elle suffit à mon client.
Just let me know.

Link to comment
Share on other sites

ok easybizness , voici brièvement mais exactement ce que j'ai fais sur presta 1.2.5 :
1) Ajout dans la table [ps_]carrier d'un champ ps_shipping_method tinyint 1
2) Modif de la classe Carrier /classes/Carrier.php :
Ligne 44 juste après

    /** @var boolean Carrier module */
   public        $is_module;



Ajout de :

    /** @var boolean Carrier ps_shipping_method*/
   public        $ps_shipping_method;



ligne 49

     protected     $fieldsValidate = array('id_tax' => 'isInt', 'name' => 'isCarrierName', 'active' => 'isBool', 'url' => 'isAbsoluteUrl', 'shipping_handling' => 'isBool', 'range_behavior' => 'isBool');



devient :

     protected     $fieldsValidate = array('id_tax' => 'isInt', 'name' => 'isCarrierName', 'active' => 'isBool', 'url' => 'isAbsoluteUrl', 'shipping_handling' => 'isBool', 'range_behavior' => 'isBool', 'ps_shipping_method' => 'isBool');



ligne 71 , juste après

$fields['is_module'] = intval($this->is_module);



ajout de

        $fields['ps_shipping_method'] = intval($this->ps_shipping_method);



Ensuite on s'attaque à /classes/Cart.php

ligne 719 le bloc if devient :

        // Get shipping cost using correct method
       if ($carrier->range_behavior)
       {
           // Get id zone
           if (isset($this->id_address_delivery) AND $this->id_address_delivery)
               $id_zone = Address::getZoneById(intval($this->id_address_delivery));
           else
               $id_zone = intval($defaultCountry->id_zone);
           if (($carrier->ps_shipping_method AND (!Carrier::checkDeliveryPriceByWeight($carrier->id, $this->getTotalWeight(), $id_zone)))
               OR (!$carrier->ps_shipping_method AND (!Carrier::checkDeliveryPriceByPrice($carrier->id, $this->getOrderTotal(true, 4), $id_zone))))
               $shipping_cost += 0;
           else {
               if (intval($carrier->ps_shipping_method))
                   $shipping_cost += $carrier->getDeliveryPriceByWeight($this->getTotalWeight(), $id_zone);
               else
                   $shipping_cost += $carrier->getDeliveryPriceByPrice($orderTotal, $id_zone);
           }
       }



update du 9/03 , un oubli ...

Fichier /order.php
fonction function displayCarrier()
juste après la ligne

$resultsArray = array();



remplacer la boucle foreach par

foreach ($result AS $k => $row)
   {
       $carrier = new Carrier(intval($row['id_carrier']));
       if (($carrier->ps_shipping_method AND $carrier->getMaxDeliveryPriceByWeight($id_zone) === false)
       OR (!$carrier->ps_shipping_method AND $carrier->getMaxDeliveryPriceByPrice($id_zone) === false))
       {
           unset($result[$k]);
           continue ;
       }
       if ($row['range_behavior'])
       {
           // Get id zone
           if (isset($cart->id_address_delivery) AND $cart->id_address_delivery)
               $id_zone = Address::getZoneById(intval($cart->id_address_delivery));
           else
               $id_zone = intval($defaultCountry->id_zone);
           if (($carrier->ps_shipping_method AND (!Carrier::checkDeliveryPriceByWeight($row['id_carrier'], $cart->getTotalWeight(), $id_zone)))
           OR (!$carrier->ps_shipping_method AND (!Carrier::checkDeliveryPriceByPrice($row['id_carrier'], $cart->getOrderTotal(true, 4), $id_zone))))
               {
                   unset($result[$k]);
                   continue ;
               }
       }
       $row['name'] = (strval($row['name']) != '0' ? $row['name'] : Configuration::get('PS_SHOP_NAME'));
       $row['price'] = $cart->getOrderShippingCost(intval($row['id_carrier']));
       $row['price_tax_exc'] = $cart->getOrderShippingCost(intval($row['id_carrier']), false);
       $row['img'] = file_exists(_PS_SHIP_IMG_DIR_.intval($row['id_carrier']).'.jpg') ? _THEME_SHIP_DIR_.intval($row['id_carrier']).'.jpg' : '';
       $resultsArray[] = $row;
   }




Voilà , donc il suffit après de renseigner le champ ps_shipping_method de la table [ps_]carrier selon le comportement souhaité : 0 = par tranche de prix , 1 = par tranche de poids , une fois qu'on a configuré les tranches adéquates dans l'admin bien sûr.

Update : quelques posts plus bas vous trouverez le fichier à remplacer dans l'admin pour la gestion directe de ces valeurs dans le BO

La limitation du truc , à cette heure , est que malheureusement, chaque fois qu'on enregistre une modif sur un transporteur (nom ou autre) alors le champ est à renseigner de nouveau , car presta crée un nouveau transporteur chaque fois et désactive le précédent . je n'ai pas eu encore le temps d'adapter la partie admin .

Voilà c'est pas grand chose comme modif, mais ça marche , on peut mixer tranches de poids et prix , et je n'hesiterais pas à poster les modifs côté admin dès que j'aurais 5 mn devant moi pour les faire, surtout si ça interesse du monde

Link to comment
Share on other sites

Bonsoir à tous

Je suis intéresser pour tes modifs mais comme je suis limitée dans l'écriture des codes une question toute bête :

où trouves-tu la table ps_carrier ?

Le reste j'ai tout trouvé.

je pourrais tester sur ma version 1.2.0.8

merci

1m22

Link to comment
Share on other sites

La table est en fait la table carrier dans la base de données, à laquelle tu pourras facilement ajouter un champ en utilisant par exemple phpmyadmin
Lorsque j'ai noté [ps_]carrier, j'ai juste mis entre crochets le préfixe par défaut de la table , généralement ps_
Selon le cas donc la table sera juste 'carrier' ou 'xxx_carrier' , selon ton installation et le préfixe de table que tu auras choisi .
Dans tous les cas et ne serait-ce que pour ajouter le champ , il te faut une interface type phpmyadmin (la plus courante) pour arriver à tes fins.
Tu auras également besoin de cette même interface pour passer les champs ps_shipping_method à 0 ou 1 selon la méthode désirée, puisque je le rappelle je n'ai encore effectué aucune modif de l'admin pour gérer ça facile , je garde l'enrobage pour plus tard si cette fonctionnalité vous intéresse.
Autre rappel , chaque modification effectuée sur un transporteur implique de re-renseigner ce champ (sic!) car presta duplique le transporteur à chaque modif pour il me semble garder la config précédente dans les commandes déja passées, il passe le champ 'active' de l'ancien à 0 et celui du nouveau à 1 (plus facile pour toit donc de se repérer).

Link to comment
Share on other sites

Bonsoir

je pense aussi qu'un module serai le bien venu, la manip n'est pas aisée pour des novices en informatique comme moi par exemple. Je n'est pas testé tes modifs car les amis qui pouvaient m'aider son sur de belles pentes enneigées.


1m22

Link to comment
Share on other sites

moi je serais intéressé par un module de ce type parce que sur mon site j'aurai besoin du tarif aux prix et aux poids.

Fera tu le module ou pas?

merci à toi


C'est dans mes projets oui, sauf si ... sauf que ....
Sauf que cette modif est plus une extension du code existant qu'un module en soi.
Sauf donc , si la prestateam elle même passait par ici et décidait que oui , pourquoi pas , au vu de la simplicité de la modif et du bénéfice que l'on en retire , rendre ce paramètre individuel et donc intégrer plutôt ceci dans presta nativement.
Celà sous entends que je devrais sous peu compléter mes modifs ci dessus par celles qui en découlent dans l'admin, espérant que personne n'y verra quelque chose de bloquant.
Du coup nous n'aurions plus besoin d'un 'module' ou plutot un module de patch, que pour les versions antérieures.
Link to comment
Share on other sites

Bonsoir

je pense aussi qu'un module serai le bien venu, la manip n'est pas aisée pour des novices en informatique comme moi par exemple. Je n'est pas testé tes modifs car les amis qui pouvaient m'aider son sur de belles pentes enneigées.


1m22


Je reconnais que cette manip demande à l'heure actuelle de mettre les mains dans le cambouis , en même temps ces dernières ne sont pas non plus véritablement niveau expert. Un peu de doc sur phpmyadmin et les bases de données et même seul tu devrais pouvoir t'en sortir...ou attendre que tes potes reviennent du ski :D
Link to comment
Share on other sites

Ok , voilà un bout de plus : le code qui rend administrable par transporteur dans votre BO
Je manque énormément de temps pour faire un "package" , mais si vous avez déja effectué les modifs précédemment décrites, alors updatez juste votre fichier /votreadmin/tabs/AdminShipping.php et remplacez le par le fichier attaché à ce post:
Attention !!! , si vous avez installé un module type mondial relay , alors une ligne diffère, adaptez ou postez ici ...
Dans tous les cas , faites en une sauvegarde avant...

AdminShipping.php

Link to comment
Share on other sites

Bonjour à tous

Je viens de faire les modifs et ça ne fonctionne pas. Ma version de prestashop est la V.1.2.0.8 peut-être que ça vient de là.

J' ai peut-être aussi mal créé mon champ (c'est la première fois que je fait cette manip) je mets des images de la création du champ.

19694_GzSTUmSsZr79qVQGtSJB_t

19695_K2EMFCiz0U2IWoc11oSw_t

Link to comment
Share on other sites

Bonjour 1m22 , j'ai vu ton pm mais pas eu le temps d'y répondre encore . D'ailleurs c'est une bonne chose que tu aies posté ici car c'est valable pour d'autres , alors qu'en pm ...
Ton champ est bon , ( tiny int (1) etc ... ) , sauf que son nom n'est pas bon :
le nom du champ est ps_shipping_method et non shipping_method seul .
Du coup je vais revoir mes posts , peut être ais-je 'rippé' en mettant le nom du champ

Edit :

1) Ajout dans la table [ps_]carrier d’un champ ps_shipping_method tinyint 1
2) Modif de la classe Carrier .....


Mon indication était bonne.

Peut être donc as tu fais l'amalgame entre le ps_ du champ et le préfixe couramment identique de la table, en tout cas tu as tronqué le nom du champ ,
Pour info ce champ en tant que variable globale est bel et bien nommé PS_SHIPPING_METHOD dans la table configuration, j'ai donc repris la même syntaxe , mais en minuscule ( là c'est un nom de champ ) , pour la cohérence et d'eventuels débugs.
Link to comment
Share on other sites

Bonsoir Brocéliande

Aujourd'hui je me trouve très bête. J'ai fait les modifs et tout a l'air de fonctionner correctement.
Mais je n'arrive pas à mettre des francos de port pour chaque transporteur.

Par exemple j'aimerai :

un franco pour la France à 70 euros transporteur LA POSTE

un franco pour l'Europe à 120 euros transporteur UPS

J'ai rempli les tranches de poids selon les tarifs des transporteurs et tranches de prix selon deux critères (0 à 70 et 70 à infini pour la France même logique pour l'Europe)

Comment faire ?

Encore une petite chose lorsque je choisi "en fonction du poids total" ma grille de ne s'affiche pas je ne peux donc pas enregistrer les tarifs correspondants au poids.

Lorsque j'ai créé mon champ ps_shipping_method j'ai mis 1 dans la rubrique "Défaut". peut-être ai-je eu tord.

Par avance merci pour ton aide

1m22

Link to comment
Share on other sites

Salut,
Par défaut moi j'ai mis 0 à ps_shipping_method ....
Pour le transport , moi j'ai fais comme ça (pas les memes valeurs mais je l'adapte à ton cas ):
pour le transporteur La Poste :
tu crées deux tranches de pris pour ce transporteur : 0 à 70 et 70 à 10000....

Oups , je me rends compte à l'instant de ce que tu souhaites faire : avoir à la fois une tranche de poids et une tranche de prix (pour le franco de port) , pour le même transporteur .
Oulàlà ... je serais tenté de dire ...
Me suis-je mal exprimé ? Avec mon procédé il est désormais possible de choisir pour chaque transporteur un type de tranche (poids ou prix ) alors qu'auparavant , ce paramètre était global à tous les transporteurs.
Par contre inutile de penser pouvoir utiliser les deux tranches pour un même transporteur avec cette modif , désolé si tu as pu croire le contraire...
En revanche , il t'es possible de créer deux transporteurs "La poste", un utilisant les tranches de prix , l'autre le poids ....
C'est à creuser comme solution et là j'ai pas trop le temps , mais ça pourrait le faire.
C'est aussi à tester .
On en reparle ....

Link to comment
Share on other sites

Je vois en fait ce qu'il te manque à ce jour,
C'est la même chose que les tranches , mais appliqué cette fois à la gratuité .
En termes plus précis : avoir une gratuité de transport configurable par transporteur , et non pas globale.
C'est dans un sens le même type de modif , et ce que tu soulèves peut servir à mes clients, donc je pense que je vais vite plancher sur le sujet et upgrader mes modifs en ce sens .

Link to comment
Share on other sites

Errata :
Il y a une modif que j'ai oublié de répertorier , alors je vous la place ici , puis j'update mon post plus haut.
La modif en question concerne le fichier order.php , à la racine de votre presta

Dans ce fichier il faut modifier un peu la fonction function displayCarrier()

juste après la ligne

$resultsArray = array();



remplacez la boucle par le code suivant ( testé 1.2.5 , je sais pas pour les précédentes mais il est facile d'adapter)
L'idée de base est de remplacer les valeurs de configuration PS_SHIPPING_METHOD par le champ individuel du transporteur $carrier->ps_shipping_method.
Ce qui donne :

foreach ($result AS $k => $row)
   {
       $carrier = new Carrier(intval($row['id_carrier']));
       if (($carrier->ps_shipping_method AND $carrier->getMaxDeliveryPriceByWeight($id_zone) === false)
       OR (!$carrier->ps_shipping_method AND $carrier->getMaxDeliveryPriceByPrice($id_zone) === false))
       {
           unset($result[$k]);
           continue ;
       }
       if ($row['range_behavior'])
       {
           // Get id zone
           if (isset($cart->id_address_delivery) AND $cart->id_address_delivery)
               $id_zone = Address::getZoneById(intval($cart->id_address_delivery));
           else
               $id_zone = intval($defaultCountry->id_zone);
           if (($carrier->ps_shipping_method AND (!Carrier::checkDeliveryPriceByWeight($row['id_carrier'], $cart->getTotalWeight(), $id_zone)))
           OR (!$carrier->ps_shipping_method AND (!Carrier::checkDeliveryPriceByPrice($row['id_carrier'], $cart->getOrderTotal(true, 4), $id_zone))))
               {
                   unset($result[$k]);
                   continue ;
               }
       }
       $row['name'] = (strval($row['name']) != '0' ? $row['name'] : Configuration::get('PS_SHOP_NAME'));
       $row['price'] = $cart->getOrderShippingCost(intval($row['id_carrier']));
       $row['price_tax_exc'] = $cart->getOrderShippingCost(intval($row['id_carrier']), false);
       $row['img'] = file_exists(_PS_SHIP_IMG_DIR_.intval($row['id_carrier']).'.jpg') ? _THEME_SHIP_DIR_.intval($row['id_carrier']).'.jpg' : '';
       $resultsArray[] = $row;
   }

Link to comment
Share on other sites

Ok alors je vais tâcher de résumer une dernière fois , mais vraiment la der , car malheureusement je manque de temps pour aller au delà :

Aujourd'hui dans presta :
vous avez disons (là vous remplacez par ce qui vous chante...) 4 transporteurs.
vous avez pour ces transporteurs des tranches de prix ou de poids .
Un paramètre global vous permet dans l'admin d'indiquer si vous voulez utiliser l'une ou l'autre de ces tranches . seulement voilà : une fois ce paramètre choisi , il est valable pour l'ensemble de vos transporteurs, et non seulement pour celui que vous éditez.

Avec ce mod
Il est possible de spécifier pour chaque transporteur le type de tranche utilisée.
C'est à dire , encore une fois à titre d'exemple , que vous pouvez avoir ce type de configuration :
- Transporteur 1 : tranches de prix
- Transporteur 2 : tranches de poids
- Transporteur 3 : ........................................ (ad libitum)

Alors que , je le répète , à ce jour , si vous cochez poids dans l'admin transport , celà affecte l'ensemble des transporteurs.
Il en est de même si vous cochez prix ....

Un dernier exemple plus précis donc du mod ici présent , pour la compréhension (après c'est net je ne me répete plus )

Transporteur 1 Colissimo : tranches de prix de 0 à 27 et de 27 à 10000000 ,
- de 0 à 27 € de commande , 5.60€
- de 27 à plus : 0€ = frais de port offerts

Transporteur 2 Coliposte : tranche de 0 à 0.5 kg , de 05 à 1kg , de 1 à 2 kg etc ......
- tranche 1 poids de 0 à 500g : tarif xxx €
- tranche 2 poids de 500g à 1000g : tarif yyy €
etc....

Ceci n'étant donc pas possible à ce jour dans prestashop, et rendu possible par ce mod.

Voilà j'espère avoir été assez clair , cette fois , bien qu'il me semble avoir donné ce type d'exemple dans mon premier post .
Sur ce bons presta à tous !

Link to comment
Share on other sites

  • 4 weeks later...

Bonsoir,

Pourrais-tu poster tes fichiers modifiers (si tu as mis des commentaires type //Modif...)

Afin de pouvoir reproduire plus aisément tes manips ?

J'ai, pour ma part, bien du mal à reporter des fragments de code sans repère.

Merci.

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour,
merci Broceliande pour ces modifications et ces explications très utiles.
cela correspond exactement a ma problématique.

J'arrive bien a avoir la configuration de mes transporteurs en poids ou en prix et les zones sont bien attribuées.

Mon seul problème est que pour le transporteur gérée en poids, ce dernier n'ai pas applique.
C'est a dire que seul le prix des frais de port par défaut est affiche, sans majoration de ce qu'il y a dans le tableaux de poids.

J'ai bien vérifié les modifs et tout semble bon.

As tu rencontre ce problème lors de test modification ?

Merci

Link to comment
Share on other sites

Bonjour ,
Je vais essayer de reproduire ton problème , mais ici tout fonctionne bien.
Peut être pourrais tu me faire gagner du temps en regardant dans la bdd les valeurs de chaque champ pour le transporteur concerné ?
Il me semble avoir eu ce cas de figure au départ à cause d'un des champs shipping_handling ou range_behavior , je ne suis plus sûr.
Sur la boutique qui utilise cette modif , shipping handling est à 1 partout , et range_behavior à 0
Je me demande ce que tu entends par prix par défaut et majoration via le tableau de poids... En fait moi je gère mon tarif définitif via les tranches de poids ou de prix uniquement, sans frais de manut. Mais il me semble qu'ils sont correctement appliqués

Link to comment
Share on other sites

merci d'accorder du temps a mon problème.
shipping_handling est a 1 et range_behavior a 0
je te met une copie d'écran de ma BDD

Pour être sur, j'ai refait tes modifs sur une version vierge de prestashop 1.2.5

J'ai donc un affichage correct en back office avec un transporteur en fonction du prix total et un transporteur en fonction du poids total. Les zones et tranches sont bonnes.
j'ai mis les frais de manutention a 0€ (copies écran BO)

Malheureusement j'ai systématiquement des frais de port a 0€

Je dois forcement rater un truc quelque part...
merci de ton aide

21897_nEMSbFl1itEiyQzQFqdZ_t

21898_6E2uDBwn211RY70O5Jtm_t

21899_ZgtfC1mZGh36hhD0YW5l_t

Link to comment
Share on other sites

Ok, merci pour ces précisions ,
Pour moi cela ressemble plus à un problème de zône non ?

Si tu veux que je débug en live pour identifier le problème , c'est tout à fait possible, dans ce cas il me faudra un accès au BO et probablement à ton ftp, que tu peux m'envoyer en PM . Tu pourras les changer après coup histoire de rester serein .
Sinon , ben là j'avoue que je sèche un peu faute de plus : a part vérifier moi même directement , ça risque d'être un peu ardu par post interposé.
En debuguant je verrais très vite ce qui cloche

Edit - PS: j'ai moi-même reproduit cette modif sur un prsta tout neuf à partir de mon post ici présent, et n'ai rencontré aucun souci de ce type.
Par ailleurs mes modifs n'interviennent pas sur le calcul du prix , mais vont simplement chercher les infos concernant le type de tranche ailleurs.
A toi de voir donc si tu veux que je jette un oeil. Il va de soi que ce sera totalement gracieux ... j'ai pas pensé à le préciser

Link to comment
Share on other sites

alors j'ai repris tout cela pour la 3ème fois et effectivement, cela fonctionne.
je vois pas vraiment ce que j'ai fait de diffèrent, d'autant que les modifs sont relativement simples et bien expliquées.
Mon block cart reste a 0€ en expedition, lorsque je me connecte avec un compte acheteur hors du pays du transporteur par défaut.
En revanche lorsque je passe l'etape du choix de l'adresse et des frais de livraison, ceux-ci sont correctes et la somme est bonne a l'étape du paiement. Cela m'a l'air d'etre le comportement normal de prestashop.
Merci pour ton aide, Broceliande, et de ton offre de regarder la config de mon BO.
Je pense que je vais pouvoir m'en tirer pour les dernières modifs des frais de port.
Bonne soirée.

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...