STOCK ET FACTURE FOURNISSEUR

BONSOIR

J’UTILISE LA VERSION 3.9 DE DOLIBARR. MAIS JE CONSTATE QU’APRÈS LA MODIFICATION, SUIVI DE LA VALIDATION D’UNE FACTURE FOURNISSEUR, LE STOCK S’INCRÉMENTE ET CECI AUTANT DE FOIS QUE JE MODIFIE ET VALIDE LA FACTURE.
JE M’AIMERAI SAVOIR S’IL EST POSSIBLE DE REMETTRE TOUT LE CONTENU DE LA FACTURE DE L’ENTREPOT APRES AVOIR CLIQUER SUR MODIFIER COMME AVEC LA FACTURE CLIENT. MERCI

1 « J'aime »

Bonjourn vous avez un problème de clavier ou j’ai un probleme de vision ?

Vouspouvezactiverlaréceptionetventilationmanuelledesproduitsverslesstocksdanslaconfigurationdumodulestockouproduit

Dés que je modifie une facture fournisseur, le système rajoute les mêmes quantités de produits de la facture dans le stock. (j’ai activé l’incrémentation automatique du stock pendant la validation des factures fournisseurs).

Avec les factures clients, il n’y a pas de problème de ce genre : car en ouvrant la facture en mode modification, le système remet tous les produits de la facture en stock. Dés qu’on valide à nouveau la facture, il décrémente le stock.

1 « J'aime »

La réponse votre problème est là : incrémentation des stocks à la validation de la facture : chaque fois que vous validez, vous incrémentez. Logique.
Vous devriez passer à l’incrémentation des stocks à la réception vers stocks, vous n’aurez plus le problème.

Il y a bien un bug dans la gestion des stocks fournisseurs, celui-ci encore présent sur la version 4.0.3

Lorsque qu’on modifie une facture fournisseur et qu’on la valide à nouveau, Dolibarr au travers d’un message pop-up demande quel stock est concerné.
Il ajoute alors les quantités de la facture au stock.

Le problème étant qu’il n’a pas décrémenté le stock lors de l’ouverture de la modification. Ainsi à chaque modification, se voit ajouter de nouveau tous les produits de la facture.

1 « J'aime »

J’ai fait le code correspondant

Je ne sais pas comment le proposer à la communauté, mais voici les motifs à faire dans les fichier.

Le comportement est le même que pour les factures clients quand on ouvre la modification il va décrémenter le stock. Par contre j’ai été obligé de faire un pop up pour demander quel stock il faut décrémenter. Il y a peut-être quelque chose à améliorer de ce côté.

Il faut coller le code aux fichiers et lignes suivantes

///////////////////////////////////////// fourn/facture/card.php ////////////////////////////////// Colller à la ligne 252 //////
if ($action == ‹ update_stock ›)
{
$idwarehouse=GETPOST(‹ idwarehouse ›);

    $object-\>fetch($id);
    $object-\>fetch_thirdparty();

    $qualified_for_stock_change=0;
    if (empty($conf-\>global-\>STOCK_SUPPORTS_SERVICES))
    {
    	$qualified_for_stock_change=$object-\>hasProductsOrServices(2);
    }
    else
    {
    	$qualified_for_stock_change=$object-\>hasProductsOrServices(1);
    }

    // Check parameters
    if (! empty($conf-\>stock-\>enabled) && ! empty($conf-\>global-\>STOCK_CALCULATE_ON_SUPPLIER_BILL) && $qualified_for_stock_change)
    {
        $langs-\>load("stocks");
        if (! $idwarehouse || $idwarehouse == -1)
        {
            $error++;
	        setEventMessage($langs-\>trans('ErrorFieldRequired',$langs-\>transnoentitiesnoconv("Warehouse")), 'errors');
            $action='';
        }
    }

    if (! $error)
    {
        $result = $object-\>update_stock($user,$idwarehouse);
        if ($result < 0)
        {
            setEventMessages($object-\>error,$object-\>errors,'errors');
        }
    }   
}

///////////////////////////////////////// Fin ////// fourn/facture/card.php //////////////////////////////////

///////////////////////////////////////// fourn/facture/card.php ////////////////////////////////// Colller à la ligne 915 //////
$form = new Form($db);
$formquestion=array();
$qualified_for_stock_change = 0;
if (empty($conf->global->STOCK_SUPPORTS_SERVICES)) {
$qualified_for_stock_change = $object->hasProductsOrServices(2);
} else {
$qualified_for_stock_change = $object->hasProductsOrServices(1);
}

	if (! empty($conf-\>global-\>STOCK_CALCULATE_ON_SUPPLIER_BILL) && $qualified_for_stock_change) 
	{
		$langs-\>load("stocks");
		require_once DOL_DOCUMENT_ROOT . '/product/class/html.formproduct.class.php';
		$formproduct = new FormProduct($db);
        
        $value = $formproduct-\>selectWarehouses(GETPOST('idwarehouse')?GETPOST('idwarehouse'):'ifone', 'idwarehouse', '', 1);
		$label = $langs-\>trans("SelectWarehouseForStockDecrease");
		$formquestion = array(
							// 'text' =\> $langs-\>trans("ConfirmClone"),
							// array('type' =\> 'checkbox', 'name' =\> 'clone_content', 'label' =\> $langs-\>trans("CloneMainAttributes"), 'value' =\>
							// 1),
							// array('type' =\> 'checkbox', 'name' =\> 'update_prices', 'label' =\> $langs-\>trans("PuttingPricesUpToDate"), 'value'
							// =\> 1),
							//array('type' =\> 'other','name' =\> 'idwarehouse','label' =\> $label,'value' =\> $formproduct-\>selectWarehouses(GETPOST('idwarehouse'), 'idwarehouse', '', 1, 0, 0, $langs-\>trans("NoStockAction"))));
                            array('type' =\> 'other', 'name' =\> 'idwarehouse',   'label' =\> $langs-\>trans("SelectWarehouseForStockDecrease"),   'value' =\> $value));
        $formconfirm = $form-\>formconfirm($_SERVER["PHP_SELF"].'?id='.$object-\>id, 'Etes-vous sur de vouloir modifier la facture', 'Stock à modifier', 'update_stock', $formquestion, 0, 1);   
	}

///////////////////////////////////////// Fin ////// fourn/facture/card.php //////////////////////////////////

///////////////////////////////////////// fourn/class/fournisseur.facture.class.php ////////////////////////////////// Colller à la ligne 905 //////

 function update_stock($user, $idwarehouse=0)
 {
    global $conf,$langs;
     $num = $this-\>ref;
        if (! empty($conf-\>stock-\>enabled) && ! empty($conf-\>global-\>STOCK_CALCULATE_ON_SUPPLIER_BILL))
        {
            require_once DOL_DOCUMENT_ROOT.'/product/stock/class/mouvementstock.class.php';
            $langs-\>load("agenda");

            $cpt=count($this-\>lines);
            for ($i = 0; $i < $cpt; $i++)
            {
                if ($this-\>lines[$i]-\>fk_product \> 0)
                {
                    $now = date();   
                    $mouvP = new MouvementStock($this-\>db);
					$mouvP-\>origin = &$this;
                    // We decrease stock for product
                    $up_ht_disc=$this-\>lines[$i]-\>pu_ht;
                    if (! empty($this-\>lines[$i]-\>remise_percent) && empty($conf-\>global-\>STOCK_EXCLUDE_DISCOUNT_FOR_PMP)) $up_ht_disc=price2num($up_ht_disc \* (100 \- $this-\>lines[$i]-\>remise_percent) / 100, 'MU');
                    $result=$mouvP-\>livraison($user, $this-\>lines[$i]-\>fk_product, $idwarehouse, $this-\>lines[$i]-\>qty, $up_ht_disc, 'Facture fournisseur modifiée','',$num);
                    if ($result < 0) { $error++; }
                }
            }
        }
 }

///////////////////////////////////////// Fin ////// fourn/class/fournisseur.facture.class.php //////////////////////////////////