Bienvenue, Invité
Nom d'utilisateur : Mot de passe : Se souvenir de moi

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

Générer un Bon de Livraison depuis une URL il y a 4 semaines 1 heure #114071

  • chaibialaa
  • Portrait de chaibialaa
  • Hors ligne
  • Fresh Boarder
  • Messages : 3
  • Karma: 0
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
L'administrateur a désactivé l'accès en écriture pour le public.

Générer un Bon de Livraison depuis une URL il y a 3 semaines 6 jours #114072

  • regis
  • Portrait de regis
  • Hors ligne
  • Administrateur
  • Messages : 2067
  • Remerciements reçus 101
  • Karma: 140
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 !
L'administrateur a désactivé l'accès en écriture pour le public.

Générer un Bon de Livraison depuis une URL il y a 3 semaines 6 jours #114094

  • chaibialaa
  • Portrait de chaibialaa
  • Hors ligne
  • Fresh Boarder
  • Messages : 3
  • Karma: 0
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)
L'administrateur a désactivé l'accès en écriture pour le public.

Générer un Bon de Livraison depuis une URL il y a 3 semaines 6 jours #114120

  • chaibialaa
  • Portrait de chaibialaa
  • Hors ligne
  • Fresh Boarder
  • Messages : 3
  • Karma: 0
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'
            )
        );

    }
L'administrateur a désactivé l'accès en écriture pour le public.

Générer un Bon de Livraison depuis une URL il y a 3 semaines 5 jours #114138

  • philazerty
  • Portrait de philazerty
  • Hors ligne
  • Gold Boarder
  • Intégrateur Mon-Dolibarr.fr Hébergement Infogéré
  • Messages : 5829
  • Remerciements reçus 882
  • Karma: 113
@chaibialaa

Bonjour,
Les proposition de code et/ou corrections sont à faire sur github.com/Dolibarr
@+
L'administrateur a désactivé l'accès en écriture pour le public.