THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline

#1 Stock infini

(06-04-2021 11:56:35)


Salut tout le monde!

Est-il possible d'avoir des stocks infini ? (produit inépuisable)

Si oui, est-il possible de le faire produit par produit ? (par exemple un produit A en stock inépuisable et un produit B en stock épuisable)

Un module existant ?


Aide les autres, ils t'aideront en retour.

Offline

#2 Re: Stock infini

(06-04-2021 13:04:47)


Pas à ma connaissance.


OpenStudio Toulouse

Offline

#3 Re: Stock infini

(06-04-2021 13:19:26)


roadster31 wrote:

Pas à ma connaissance.

Bon bah encore un module à développer ^^


Aide les autres, ils t'aideront en retour.

Offline

#4 Re: Stock infini

(07-04-2021 15:13:50)


Simple curiosité : à quoi correspond ce besoin ? Que est/sont le/les cas d'usage ?
N'est-pas "contournable" en indiquant une valeur de stock très grande ? Comment imagine-tu qu'un éventuel module fonctionnerait ?

Last edited by Nog (08-04-2021 10:29:43)

Offline

#5 Re: Stock infini

(08-04-2021 09:48:03)


Nog wrote:

Simple curiosité : à quoi correspond ce besoin ? Que est/sont le/les cas d'usage ?
N'est-pas "contournable" en indiquant une valeur de stock très grand ? Comment imagine-tu qu'un éventuel module fonctionnerait ?

En fait, la boutique fonctionne avec des produits :
- internes
- externes

Les produits externes sont livrés par le biais d'un fournisseur partenaire qui gère lui même ses stocks donc impossible pour nous de gérer le stock de ces produits et le fournisseur nous indique quand il y a rupture (cas rare apparemment).

Du coup, le module permettra d'indiquer que ces produits ont un stock infini et donc aucune décrémentation lors de commande et le produit reste toujours visible "en stock".

Je pourrais contourner le problème en mettant un "gros stock" mais un jour ou l'autre il faudra le ressaisir ... et quand y'a beaucoup de produits... ça va vite devenir "compliqué" ... ^^'


Aide les autres, ils t'aideront en retour.

Offline

#6 Re: Stock infini

(08-04-2021 19:27:28)


Je viens d'implémenter un truc similaire pour une boutique qui ne veut gérer les stocks que pour quelques produits seulement. J'ai fait un truc très simple, avec le module Tag (https://github.com/roadster31/Tags) et un override de la classe \Thelia\Model\ProductSaleElements

En un mot, si le produit a le tag "stock-infini", alors on va renvoyer le stock "par defaut". SInon, on renvoie le stock réel. Et normalement ça suffit pour que Thelia croie que le stock est infini.

class ProductSaleElements extends BaseProductSaleElements
{
    /**
     * Pour un produit ou on doit checker le stock, on retourne le stock réel.
     * Sinon, on retourne le 'stock par defaut'
     *
     * @return float
     */
    public function getQuantity()
    {
        if (TagsQuery::create()
            ->filterBySource('product')
            ->filterBySourceId($this->getProductId())
            ->filterByTag('stock-infini')
            ->count() > 0
        ) {
            return (float) ConfigQuery::read('default-available-stock', 100);
        }
        
        return parent::getQuantity();
    }

    ...

Et voilà !

Mais c'est quoi un override ? C'est un moyen de surcharger une classe du core en utilisant composer.

    "autoload": {
        "psr-4": {
            "Thelia\\": "core/lib/Thelia",
            "Thelia\\Model\\": "override/Thelia/Model"      <---- l'override est là !
        },
        "psr-0": {
            "": "local/modules/"
        },
        "files": [
            "core/bootstrap.php"
        ]
    },

Je crée à la racine de Thelia un répertoire "override", j'y met le fichier  ProductSaleElements.php dans "override/Thelia/Model".

Je fais un "composer install" dans ma console pour regénérer l'autoloader, et grande magie de PSR-4, c'est mon fichier qui sera pris en compte plutôt que celui de Thelia.

Cool non ?


OpenStudio Toulouse

Offline

#7 Re: Stock infini

(09-04-2021 07:53:39)


Ok merci!

Je vais regarder ça parce que dans l'idée j'aimerais le coupler avec mon module AdditionalPseField (ça évite d'avoir plein de module qui gère des champs supplémentaires produit) et je vais devoir aussi gérer un mode de livraison particulier selon si le produit est livré par le fournisseur ou non...

Du coup, on fait comment pour créer des dépendances inter-modules ?
Est-ce que c'est possible de le faire aussi sous forme de condition ? (Exemple : importProduits, si y'a une colonne nommé addField_BIDULE je sais que le module AdditionalPseField doit être installé et donc utilisé)


Aide les autres, ils t'aideront en retour.

Offline

#8 Re: Stock infini

(09-04-2021 13:29:21)


Du coup, on fait comment pour créer des dépendances inter-modules ?

On utilise l'element "required" du module.xml

   ...
    <type>classic</type>
    <required>
        <module>OrderComment</module>
        <module>Bidule</module>
        <module>Machin</module>
    </required>
    <thelia>2.3.0</thelia>
   ...

OpenStudio Toulouse

Offline

#9 Re: Stock infini

(12-04-2021 08:10:57)


Merci!

Pas possible de rendre ça conditionnel ?


Aide les autres, ils t'aideront en retour.

Offline

#10 Re: Stock infini

(12-04-2021 20:04:43)


Conditionnel ? C'est à dire ?


OpenStudio Toulouse

Offline

#11 Re: Stock infini

(13-04-2021 08:33:35)


Par exemple :
-> Module importCsv (en cours de finition)
Si j'ai une colonne nommée "additionalField_1", alors je vérifie que le module correspondant existe, je charge et exécute le code sinon je ne traite pas.

Mais bon... je pense que ce module (additionalFieldPse) restera utile à tous...


Aide les autres, ils t'aideront en retour.

Offline

#12 Re: Stock infini

(13-04-2021 16:09:53)


$modulePresentEtActive = ModuleQuery::create()
            ->filterByCode('TonModule')
            ->filterByActivate(BaseModule::IS_ACTIVATED)
            ->count() > 0;

OpenStudio Toulouse

Offline

#13 Re: Stock infini

(14-04-2021 11:04:51)


Ok merci (je pense que je vais zapper ça)

Mais du coup, pour le "stock infini" pas moyen de faire autrement qu'un override ? Passer un module ?


Aide les autres, ils t'aideront en retour.

Offline

#14 Re: Stock infini

(14-04-2021 14:03:53)


Mais du coup, pour le "stock infini" pas moyen de faire autrement qu'un override ? Passer un module ?

Ça m’étonnerais qu'on puisse faire autrement.

Mais tu peux essayer, sachant qu'il y aura toujours des modules qui s'appuieront sur ProductSaleElements::geQuantity() pour récupérer le stock dispo.

C'est quoi qui te gène dans l'override ?


OpenStudio Toulouse

Offline

#15 Re: Stock infini

(15-04-2021 08:00:11)


Rien en particulier, je trouvais ça plus "pratique" de passer un module ^^'


Aide les autres, ils t'aideront en retour.