Générer un Bon de Livraison depuis une URL

Bonjour,

Je galère ces derniers jours avec le module expédition, puis il s’est avéré que le problème auquel je fais face est relié avec Dolibar en global.

Je vous explique :
J’ai développé un système en PHP Laravel qui me permet de gérer plusieurs points d’une usine relié avec Dolibar. Une des fonctions sert a générer plusieurs expéditions et bien évidement leurs BL (bons de livraisons). La création dans la base de données se fait sans soucis depuis Laravel (Insertion dans llx_expedition, expeditiondet, mouvement_stock …) puis le problème est que j’essaye de générer aussi les BL en pdf avec le modèle infraS, la langue FR et avec un ID que je passe en paramètres. Le problème est que quand je lance une commande CURL pour faire un POST a l’URL reliée au générateur de BL, je recois en retour la page de connexion de Dolibar alors que je suis connecté !

Le problème aussi est que comme je l’ai attaché, et que quand j’essaye le même CURL mais avec le client RESTClient de Firefox, tout fonctionne sans soucis !

Capturedecran2019-08-19a00.47.00.png

PS : au début j’ai un problème avec CSRF et j’ai du le désactiver depuis la config.

Voici mon code CURL PHP :

$pdf = "http://localhost/projects/dlb/htdocs/expedition/card.php?id=" . $expedition->rowid;

            $ch = curl_init();

            curl_setopt($ch, CURLOPT_URL, $pdf);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, "action=builddoc&model=InfraS_expedition&lang_id=fr_FR");
            curl_setopt($ch, CURLOPT_POST, 1);

            $headers = array();
            $headers[] = 'Content-Type: application/x-www-form-urlencoded';
            $headers[] = 'x-content-type-options: nosniff';
            $headers[] = 'x-frame-options: SAMEORIGIN';

            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

            $res = curl_exec($ch);
            if (curl_errno($ch)) {
                echo 'Error:' . curl_error($ch);
            }
            curl_close($ch);
            return ($res);

Toute aide ou idée est la bienvenue.
Merci

c’est « normal » ! Curl est considéré comme un navigateur, si tu l’utilises depuis un module Firefox et que tu as déjà ouvert une session sur Dolibarr depuis ce Firefox, curl va considérer que la session est ouverte. Mais si tu utilises curl depuis un autre endroit la session sera fermée et tu auras la page de connexion.

Il serait préférable d’utiliser le module REST API de Dolibarr et d’interroger Dolibarr en REST via curl !

Oui j’ai déjà songé a cela, et le Rest API de folibarr ne comporte pas la generation de bon de livraison. Il s’arrête a l’étape de validation de livraison (expédition)

Avec dolibar RESTAPI, voila le code nécessaire a ajouter dans api sous class de expédition:

function generate($id, $model, $lang)
    {

        $result = $this->shipment->fetch($id);
        if( ! $result ) {
            throw new RestException(404, 'Shipment not found');
        }

        if( ! DolibarrApi::_checkAccessToResource('expedition',$this->shipment->id)) {
            throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
        }
        $this->shipment->setDocModel(DolibarrApiAccess::$user, $model);

        $langs = $GLOBALS['langs'];
        $langs->load("donations");
        $outputlangs = $langs;

        $conf = new Conf();

        $newlang='';
        if ($conf->global->MAIN_MULTILANGS && empty($newlang) && $lang) $newlang=$lang;
        if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$this->shipment->thirdparty->default_lang;
        if (! empty($newlang))
        {
            $outputlangs = new Translate("",$conf);
            $outputlangs->setDefaultLang($newlang);
        }

        $this->shipment->generateDocument($result->modelpdf, $outputlangs, 0, 0, 0);

        return array(
            'success' => array(
                'code' => 200,
                'message' => 'Shipment Generated'
            )
        );

    }

@chaibialaa

Bonjour,
Les proposition de code et/ou corrections sont à faire sur https://github.com/Dolibarr
@+