diff --git a/htdocs/langs/en_US/paypal.lang b/htdocs/langs/en_US/paypal.lang
index 56093e07a74..ca63c9488a7 100644
--- a/htdocs/langs/en_US/paypal.lang
+++ b/htdocs/langs/en_US/paypal.lang
@@ -34,6 +34,7 @@ PaypalCreateInvoiceEnabled=Enable the ability to create customer invoices
UseThePriceDefinedInPaypal=Use the price defined in Paypal instead of the one defined in Dolibarr
DefaultProductShippingCosts=Select the product to be used for adding shipping costs.
DefaultPaypalAccount=Select the bank account to be used as a Paypal account, this will deduct the Paypal fee when adding a payment.
+ErrorProductWithRefNotSamePrice=The price set for the reference "%s" does not match the price Paypal
# Paypal transaction fields
PAYERID=Payer ID
diff --git a/htdocs/langs/fr_FR/paypal.lang b/htdocs/langs/fr_FR/paypal.lang
index 6e74ebcaceb..8abbc46b4eb 100644
--- a/htdocs/langs/fr_FR/paypal.lang
+++ b/htdocs/langs/fr_FR/paypal.lang
@@ -34,6 +34,7 @@ PaypalCreateInvoiceEnabled=Activer la possibilité de créer des factures client
UseThePriceDefinedInPaypal=Utiliser le prix défini dans Paypal au lieu de celui défini dans Dolibarr
DefaultProductShippingCosts=Sélectionnez le produit qui sera utilisé pour l'ajout des frais de port.
DefaultPaypalAccount=Sélectionner le compte bancaire qui sera utilisé comme compte Paypal, ceci permettra de déduire les frais Paypal lors de l'ajout d'un paiement.
+ErrorProductWithRefNotSamePrice=Le prix défini pour la référence "%s" ne correspond pas au prix Paypal
# Paypal transaction fields
PAYERID=ID du payeur
diff --git a/htdocs/paypal/ajaxtransaction.php b/htdocs/paypal/ajaxtransaction.php
index 52322aabf34..45ba83969e6 100644
--- a/htdocs/paypal/ajaxtransaction.php
+++ b/htdocs/paypal/ajaxtransaction.php
@@ -60,6 +60,8 @@ dol_syslog(join(',',$_GET));
if (isset($_GET['action']) && ! empty($_GET['action']) && isset($_GET['transaction_id']) && ! empty($_GET['transaction_id']) )
{
+ $langs->load("paypal");
+
if ($_GET['action'] == 'add')
{
$soc = new Societe($db);
@@ -176,27 +178,27 @@ if (isset($_GET['action']) && ! empty($_GET['action']) && isset($_GET['transacti
if ($ret > 0)
{
$qty=$_SESSION[$_GET['transaction_id']]["L_QTY".$i];
+ if ($_SESSION[$_GET['transaction_id']]["L_AMT".$i]) $amount_ht = ($_SESSION[$_GET['transaction_id']]["L_AMT".$i] - $_SESSION[$_GET['transaction_id']]["L_SHIPPINGAMT".$i]);
+ else $amount_ht = ($_SESSION[$_GET['transaction_id']]["AMT"] - $_SESSION[$_GET['transaction_id']]["SHIPAMOUNT"] - $_SESSION[$_GET['transaction_id']]["L_TAXAMT".$i]);
+ $unitprice_ht = ($amount_ht / $qty);
if ($conf->global->PAYPAL_USE_PRICE_DEFINED_IN_PAYPAL)
{
- if ($_SESSION[$_GET['transaction_id']]["L_AMT".$i])
- {
- $amount_ht = ($_SESSION[$_GET['transaction_id']]["L_AMT".$i] - $_SESSION[$_GET['transaction_id']]["L_SHIPPINGAMT".$i]);
- }
- else
- {
- $amount_ht = ($_SESSION[$_GET['transaction_id']]["AMT"] - $_SESSION[$_GET['transaction_id']]["SHIPAMOUNT"] - $_SESSION[$_GET['transaction_id']]["L_TAXAMT".$i]);
- }
-
- $unitprice_ht = ($amount_ht / $qty);
+ $price=$unitprice_ht;
}
else
{
- $unitprice_ht = $product->price;
+ $price=$product->price;
+ if ($price != $unitprice_ht)
+ {
+ $error++;
+ $return_arr['error'].= $langs->trans('ErrorProductWithRefNotSamePrice', $_SESSION[$_GET['transaction_id']]["L_NUMBER".$i]).'
';
+ break;
+ }
}
- if ($subelement == 'commande') $fields = array($object_id,$product->description,$unitprice_ht,$qty,$product->tva_tx,$product->localtax1_tx,$product->localtax2_tx,$product->id,0,0,0,$product->price_base_type,0,'','',$product->product_type);
- if ($subelement == 'facture') $fields = array($object_id,$product->description,$unitprice_ht,$qty,$product->tva_tx,$product->localtax1_tx,$product->localtax2_tx,$product->id,0,'','',0,0,0,$product->price_base_type,0,$product->product_type);
+ if ($subelement == 'commande') $fields = array($object_id,$product->description,$price,$qty,$product->tva_tx,$product->localtax1_tx,$product->localtax2_tx,$product->id,0,0,0,$product->price_base_type,0,'','',$product->product_type);
+ if ($subelement == 'facture') $fields = array($object_id,$product->description,$price,$qty,$product->tva_tx,$product->localtax1_tx,$product->localtax2_tx,$product->id,0,'','',0,0,0,$product->price_base_type,0,$product->product_type);
$result = $object->addline($fields[0],$fields[1],$fields[2],$fields[3],$fields[4],$fields[5],$fields[6],$fields[7],$fields[8],$fields[9],$fields[10],$fields[11],$fields[12],$fields[13],$fields[14],$fields[15],$fields[16]);
@@ -219,7 +221,7 @@ if (isset($_GET['action']) && ! empty($_GET['action']) && isset($_GET['transacti
}
// Add shipping costs
- if ($shipamount > 0)
+ if (! $error && $shipamount > 0)
{
if ($conf->global->PAYPAL_PRODUCT_SHIPPING_COSTS)
{
@@ -258,7 +260,7 @@ if (isset($_GET['action']) && ! empty($_GET['action']) && isset($_GET['transacti
}
// Add contact customer
- if ($contact->id > 0)
+ if (! $error && $contact->id > 0)
{
$result=$object->add_contact($contact->id,'CUSTOMER','external');
if ($result < 0)
@@ -292,7 +294,6 @@ if (isset($_GET['action']) && ! empty($_GET['action']) && isset($_GET['transacti
}
else if ($_GET['action'] == 'showdetails')
{
- $langs->load('paypal');
$langs->load('orders');
$langs->load('bills');