41if (!defined(
'NOLOGIN')) {
44if (!defined(
'NOCSRFCHECK')) {
45 define(
"NOCSRFCHECK", 1);
47if (!defined(
'NOIPCHECK')) {
48 define(
'NOIPCHECK',
'1');
50if (!defined(
'NOBROWSERNOTIF')) {
51 define(
'NOBROWSERNOTIF',
'1');
54if (!defined(
'XFRAMEOPTIONS_ALLOWALL')) {
55 define(
'XFRAMEOPTIONS_ALLOWALL',
'1');
61$entity = (!empty($_GET[
'entity']) ? (int) $_GET[
'entity'] : (!empty($_POST[
'entity']) ? (int) $_POST[
'entity'] : (!empty($_GET[
'e']) ? (int) $_GET[
'e'] : (!empty($_POST[
'e']) ? (int) $_POST[
'e'] : 1))));
62if (is_numeric($entity)) {
63 define(
"DOLENTITY", $entity);
67require
'../../main.inc.php';
78require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
79require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
80require_once DOL_DOCUMENT_ROOT.
'/core/lib/payments.lib.php';
81require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
82require_once DOL_DOCUMENT_ROOT.
'/core/lib/security2.lib.php';
83require_once DOL_DOCUMENT_ROOT.
'/eventorganization/class/conferenceorboothattendee.class.php';
84require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
85require_once DOL_DOCUMENT_ROOT.
'/societe/class/societeaccount.class.php';
86require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
87require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
90$langs->loadLangs(array(
"main",
"other",
"dict",
"bills",
"companies",
"errors",
"paypal",
"stripe"));
94$hookmanager->initHooks(array(
'newpayment'));
100$action =
GETPOST(
'action',
'aZ09');
109$suffix =
GETPOST(
"suffix",
'aZ09');
111if (!
GETPOST(
"currency",
'alpha')) {
114 $currency =
GETPOST(
"currency",
'aZ09');
117$getpostlang =
GETPOST(
'lang',
'aZ09');
121 if (!
GETPOST(
"amount",
'alpha') && !$source) {
122 print $langs->trans(
'ErrorBadParameters').
" - amount or source";
125 if (is_numeric($amount) && !
GETPOST(
"tag",
'alpha') && !$source) {
126 print $langs->trans(
'ErrorBadParameters').
" - tag or source";
129 if ($source && !
GETPOST(
"ref",
'alpha')) {
130 print $langs->trans(
'ErrorBadParameters').
" - ref";
138$paymentintent =
null;
142if ($source ==
'organizedeventregistration') {
149 $resultinvoice = $invoice->fetch($invoiceid);
151 if ($resultinvoice <= 0) {
164 $sql =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"eventorganization_conferenceorboothattendee";
165 $sql .=
" WHERE fk_invoice = ".((int) $invoiceid);
167 $resql =
$db->query($sql);
169 $obj =
$db->fetch_object($resql);
171 $attendeeid = $obj->rowid;
175 if ($attendeeid > 0) {
176 $resultattendee = $attendee->fetch($attendeeid);
178 if ($resultattendee <= 0) {
181 $attendee->fetch_projet();
183 $amount =
price2num($invoice->total_ttc);
186 $resultthirdparty = $thirdparty->fetch($invoice->socid);
187 if ($resultthirdparty <= 0) {
194} elseif ($source ==
'boothlocation') {
198 $resultinvoice = $invoice->fetch($invoiceid);
199 if ($resultinvoice <= 0) {
202 $amount =
price2num($invoice->total_ttc);
205 $resultthirdparty = $thirdparty->fetch($invoice->socid);
206 if ($resultthirdparty <= 0) {
214$paymentmethod =
GETPOST(
'paymentmethod',
'alphanohtml') ?
GETPOST(
'paymentmethod',
'alphanohtml') :
'';
215$validpaymentmethod = array();
218foreach ($_POST as $key => $val) {
220 if (preg_match(
'/^dopayment_(.*)$/', $key, $reg)) {
221 $paymentmethod = $reg[1];
227$ref = $REF =
GETPOST(
'ref',
'alpha');
229$FULLTAG =
GETPOST(
"fulltag",
'alpha');
230$SECUREKEY =
GETPOST(
"securekey");
233$PAYPAL_API_SANDBOX =
"";
234$PAYPAL_API_USER =
"";
235$PAYPAL_API_PASSWORD =
"";
236$PAYPAL_API_SIGNATURE =
"";
239if (empty($ws) && preg_match(
'/WS=([^=&]+)/', $FULLTAG, $reg)) {
246$urlwithroot = DOL_MAIN_URL_ROOT;
248$urlok = $urlwithroot.
'/public/payment/paymentok.php?';
249$urlko = $urlwithroot.
'/public/payment/paymentko.php?';
251if ($ws && !defined(
'USEDOLIBARRSERVER') && !defined(
'USEDOLIBARREDITOR')) {
252 if (!empty($_SERVER[
"HTTP_X_FORWARDED_HOST"])) {
254 $tmphosts = explode(
',', $_SERVER[
"HTTP_X_FORWARDED_HOST"]);
255 $tmphosts = array_map(
'trim', $tmphosts);
256 $lastproxy = end($tmphosts);
258 include_once DOL_DOCUMENT_ROOT.
'/website/class/website.class.php';
260 $tmpwebsite->fetch(0, $ws);
262 if (preg_replace(
'/https?:\/\//i',
'', $tmpwebsite->virtualhost) == $lastproxy) {
264 $urlok = $tmpwebsite->virtualhost.
'/public/payment/paymentok.php?';
265 $urlko = $tmpwebsite->virtualhost.
'/public/payment/paymentko.php?';
270if ($paymentmethod && !preg_match(
'/'.preg_quote(
'PM='.$paymentmethod,
'/').
'/', $FULLTAG)) {
271 $FULLTAG .= ($FULLTAG ?
'.' :
'').
'PM='.$paymentmethod;
274if ($ws && !preg_match(
'/'.preg_quote(
'WS='.$ws,
'/').
'/', $FULLTAG)) {
275 $FULLTAG .= ($FULLTAG ?
'.' :
'').
'WS='.$ws;
278if (!empty($suffix)) {
279 $urlok .=
'suffix='.urlencode($suffix).
'&';
280 $urlko .=
'suffix='.urlencode($suffix).
'&';
283 $urlok .=
's='.urlencode($source).
'&';
284 $urlko .=
's='.urlencode($source).
'&';
287 $urlok .=
'ref='.urlencode($REF).
'&';
288 $urlko .=
'ref='.urlencode($REF).
'&';
291 $urlok .=
'tag='.urlencode($TAG).
'&';
292 $urlko .=
'tag='.urlencode($TAG).
'&';
294if (!empty($FULLTAG)) {
295 $urlok .=
'fulltag='.urlencode($FULLTAG).
'&';
296 $urlko .=
'fulltag='.urlencode($FULLTAG).
'&';
298if (!empty($SECUREKEY)) {
299 $urlok .=
'securekey='.urlencode($SECUREKEY).
'&';
300 $urlko .=
'securekey='.urlencode($SECUREKEY).
'&';
302if (!empty($entity)) {
303 $urlok .=
'e='.urlencode((
string) ($entity)).
'&';
304 $urlko .=
'e='.urlencode((
string) ($entity)).
'&';
306if (!empty($getpostlang)) {
307 $urlok .=
'lang='.urlencode($getpostlang).
'&';
308 $urlko .=
'lang='.urlencode($getpostlang).
'&';
310$urlok = preg_replace(
'/&$/',
'', $urlok);
311$urlko = preg_replace(
'/&$/',
'', $urlko);
318@phan-var-force string $PAYPAL_API_SANDBOX
319@phan-var-force string $PAYPAL_API_OK
320@phan-var-force string $PAYPAL_API_KO
323if ((empty($paymentmethod) || $paymentmethod ==
'paypal') &&
isModEnabled(
'paypal')) {
324 global $PAYPAL_API_SANDBOX, $PAYPAL_API_OK, $PAYPAL_API_KO, $PAYPAL_API_USER, $PAYPAL_API_PASSWORD, $PAYPAL_API_SIGNATURE;
325 require_once DOL_DOCUMENT_ROOT.
'/paypal/lib/paypal.lib.php';
326 require_once DOL_DOCUMENT_ROOT.
'/paypal/lib/paypalfunctions.lib.php';
332 $PAYPAL_API_OK = $urlok;
336 $PAYPAL_API_KO = $urlko;
338 if (empty($PAYPAL_API_USER)) {
339 print
'Paypal parameter PAYPAL_API_USER is not defined. Please <a href="'.DOL_URL_ROOT.
'/paypal/admin/paypal.php">complete the setup of module PayPal first</a>.';
342 if (empty($PAYPAL_API_PASSWORD)) {
343 print
'Paypal parameter PAYPAL_API_PASSWORD is not defined. Please <a href="'.DOL_URL_ROOT.
'/paypal/admin/paypal.php">complete the setup of module PayPal first</a>.';
346 if (empty($PAYPAL_API_SIGNATURE)) {
347 print
'Paypal parameter PAYPAL_API_SIGNATURE is not defined. Please <a href="'.DOL_URL_ROOT.
'/paypal/admin/paypal.php">complete the setup of module PayPal first</a>.';
351if ((empty($paymentmethod) || $paymentmethod ==
'stripe') &&
isModEnabled(
'stripe')) {
352 require_once DOL_DOCUMENT_ROOT.
'/stripe/config.php';
361$validpaymentmethod = getValidOnlinePaymentMethods($paymentmethod);
365if ($tmpsource ==
'membersubscription') {
366 $tmpsource =
'member';
371 if ($tmpsource && $REF) {
375 if ($tmpsource != $source) {
384 dol_syslog(
"Warning: PAYMENT_SECURITY_ACCEPT_ANY_TOKEN is on", LOG_WARNING);
385 dol_syslog(
"Warning: PAYMENT_SECURITY_ACCEPT_ANY_TOKEN is on", LOG_WARNING, 0,
'_payment');
390 print
'<div class="error">Bad value for key.</div>';
396if (!empty($paymentmethod) && empty($validpaymentmethod[$paymentmethod])) {
397 print
'Payment module for payment method '.$paymentmethod.
' is not active';
400if (empty($validpaymentmethod)) {
401 print
'No active payment module (Paypal, Stripe, Paybox, ...)';
407$paramcreditor =
'ONLINE_PAYMENT_CREDITOR';
408$paramcreditorlong =
'ONLINE_PAYMENT_CREDITOR_'.$suffix;
423dol_syslog(
"--- newpayment.php action=".$action.
" paymentmethod=".$paymentmethod.
' amount='.$amount.
' newamount='.
GETPOST(
"newamount",
'alpha'), LOG_DEBUG, 0,
'_payment');
425dol_syslog(
"fulltag=".
GETPOST(
"fulltag",
'alpha').
" ws=".$ws.
" urlok=".$urlok, LOG_DEBUG, 0,
'_payment');
428if ($action ==
'dopayment') {
431 if ($paymentmethod ==
'paybox') {
434 if ($paymentmethod ==
'paypal') {
437 if ($paymentmethod ==
'stripe') {
442 'paymentmethod' => $paymentmethod,
444 $reshook = $hookmanager->executeHooks(
'getBankAccountPaymentMethod', $parameters, $object, $action);
446 if (isset($hookmanager->resArray[
'bankaccountid'])) {
447 dol_syslog(
'accountid overwrite by hook return with value='.$hookmanager->resArray[
'bankaccountid'], LOG_DEBUG, 0,
'_payment');
448 $accountid = $hookmanager->resArray[
'bankaccountid'];
452 $mesg =
'Setup of bank account to use for payment is not correctly done for payment method '.$paymentmethod;
456 if ($paymentmethod ==
'paypal') {
458 $PAYPAL_PAYMENT_TYPE =
'Sale';
461 $origfulltag =
GETPOST(
"fulltag",
'alpha');
462 $shipToName =
GETPOST(
"shipToName",
'alpha');
463 $shipToStreet =
GETPOST(
"shipToStreet",
'alpha');
464 $shipToCity =
GETPOST(
"shipToCity",
'alpha');
465 $shipToState =
GETPOST(
"shipToState",
'alpha');
466 $shipToCountryCode =
GETPOST(
"shipToCountryCode",
'alpha');
467 $shipToZip =
GETPOST(
"shipToZip",
'alpha');
468 $shipToStreet2 =
GETPOST(
"shipToStreet2",
'alpha');
469 $phoneNum =
GETPOST(
"phoneNum",
'alpha');
470 $email =
GETPOST(
"email",
'alpha');
471 $desc =
GETPOST(
"desc",
'alpha');
475 if ($shipToCountryCode ==
'ID' && !preg_match(
'/\-/', $shipToState)) {
476 $shipToState =
'ID-'.$shipToState;
479 if (empty($PAYPAL_API_PRICE) || !is_numeric($PAYPAL_API_PRICE)) {
480 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Amount"));
484 } elseif (!$origfulltag) {
485 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"PaymentCode"));
490 dol_syslog(
"newpayment.php call paypal api and do redirect", LOG_DEBUG);
491 dol_syslog(
"newpayment.php call paypal api and do redirect", LOG_DEBUG, 0,
'_payment');
494 $PAYPAL_API_DEVISE =
"USD";
495 if (!empty($currency)) {
496 $PAYPAL_API_DEVISE = $currency;
501 dol_syslog(
"Submit Paypal form", LOG_DEBUG, 0,
'_payment');
503 dol_syslog(
"PAYPAL_API_USER: $PAYPAL_API_USER", LOG_DEBUG, 0,
'_payment');
504 dol_syslog(
"PAYPAL_API_PASSWORD: ".preg_replace(
'/./',
'*', $PAYPAL_API_PASSWORD), LOG_DEBUG, 0,
'_payment');
505 dol_syslog(
"PAYPAL_API_SIGNATURE: $PAYPAL_API_SIGNATURE", LOG_DEBUG, 0,
'_payment');
506 dol_syslog(
"PAYPAL_API_SANDBOX: $PAYPAL_API_SANDBOX", LOG_DEBUG, 0,
'_payment');
507 dol_syslog(
"PAYPAL_API_OK: $PAYPAL_API_OK", LOG_DEBUG, 0,
'_payment');
508 dol_syslog(
"PAYPAL_API_KO: $PAYPAL_API_KO", LOG_DEBUG, 0,
'_payment');
509 dol_syslog(
"PAYPAL_API_PRICE: $PAYPAL_API_PRICE", LOG_DEBUG, 0,
'_payment');
510 dol_syslog(
"PAYPAL_API_DEVISE: $PAYPAL_API_DEVISE", LOG_DEBUG, 0,
'_payment');
512 dol_syslog(
"shipToName: $shipToName", LOG_DEBUG, 0,
'_payment');
513 dol_syslog(
"shipToStreet: $shipToStreet", LOG_DEBUG, 0,
'_payment');
514 dol_syslog(
"shipToCity: $shipToCity", LOG_DEBUG, 0,
'_payment');
515 dol_syslog(
"shipToState: $shipToState", LOG_DEBUG, 0,
'_payment');
516 dol_syslog(
"shipToCountryCode: $shipToCountryCode", LOG_DEBUG, 0,
'_payment');
517 dol_syslog(
"shipToZip: $shipToZip", LOG_DEBUG, 0,
'_payment');
518 dol_syslog(
"shipToStreet2: $shipToStreet2", LOG_DEBUG, 0,
'_payment');
519 dol_syslog(
"phoneNum: $phoneNum", LOG_DEBUG, 0,
'_payment');
520 dol_syslog(
"email: $email", LOG_DEBUG, 0,
'_payment');
521 dol_syslog(
"desc: $desc", LOG_DEBUG, 0,
'_payment');
523 dol_syslog(
"SCRIPT_URI: ".(empty($_SERVER[
"SCRIPT_URI"]) ?
'' : $_SERVER[
"SCRIPT_URI"]), LOG_DEBUG, 0,
'_payment');
526 $mesg =
print_paypal_redirect((
float) $PAYPAL_API_PRICE, $PAYPAL_API_DEVISE, $PAYPAL_PAYMENT_TYPE, $PAYPAL_API_OK, $PAYPAL_API_KO, $FULLTAG);
533 if ($paymentmethod ==
'stripe') {
534 if (
GETPOST(
'newamount',
'alpha')) {
537 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Amount")),
null,
'errors');
548 $amountstripe = (float) $amount;
552 $arrayzerounitcurrency = array(
'BIF',
'CLP',
'DJF',
'GNF',
'JPY',
'KMF',
'KRW',
'MGA',
'PYG',
'RWF',
'VND',
'VUV',
'XAF',
'XOF',
'XPF');
553 if (!in_array($currency, $arrayzerounitcurrency)) {
554 $amountstripe *= 100;
557 dol_syslog(
"newpayment.php execute action = ".$action.
" STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION=".
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION'), LOG_DEBUG, 0,
'_payment');
561 $stripeToken =
GETPOST(
"stripeToken",
'alpha');
562 $email =
GETPOST(
"email",
'alpha');
566 $vatnumber =
GETPOST(
'vatnumber',
'alpha');
569 dol_syslog(
"POST stripeToken = ".$stripeToken, LOG_DEBUG, 0,
'_payment');
570 dol_syslog(
"POST email = ".$email, LOG_DEBUG, 0,
'_payment');
571 dol_syslog(
"POST thirdparty_id = ".$thirdparty_id, LOG_DEBUG, 0,
'_payment');
572 dol_syslog(
"POST vatnumber = ".$vatnumber, LOG_DEBUG, 0,
'_payment');
579 $paymentintent =
null;
582 if (!
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION')) {
585 'dol_version' => DOL_VERSION,
586 'dol_entity' =>
$conf->entity,
587 'dol_company' =>
$mysoc->name,
588 'dol_tax_num' => $vatnumber,
592 if (!empty($thirdparty_id)) {
593 $metadata[
"dol_thirdparty_id"] = $thirdparty_id;
596 if ($thirdparty_id > 0) {
597 dol_syslog(
"Search existing Stripe customer profile for thirdparty_id=".$thirdparty_id, LOG_DEBUG, 0,
'_payment');
599 $service =
'StripeTest';
602 $service =
'StripeLive';
607 $thirdparty->fetch($thirdparty_id);
610 include_once DOL_DOCUMENT_ROOT.
'/stripe/class/stripe.class.php';
612 $stripeacc = $stripe->getStripeAccount($service);
613 $customer = $stripe->customerStripe($thirdparty, $stripeacc, $servicestatus, 1);
614 if (empty($customer)) {
616 dol_syslog(
'Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.
' and servicestatus = '.$servicestatus.
': '.$stripe->error, LOG_ERR, 0,
'_payment');
617 setEventMessages(
'Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.
' and servicestatus = '.$servicestatus.
': '.$stripe->error,
null,
'errors');
624 $card = $customer->sources->create(array(
"source" => $stripeToken,
"metadata" => $metadata));
626 $card = $stripeToken;
631 dol_syslog(
'Failed to create card record', LOG_WARNING, 0,
'_payment');
635 if (!empty($FULLTAG)) {
636 $metadata[
"FULLTAG"] = $FULLTAG;
638 if (!empty($dol_id)) {
639 $metadata[
"dol_id"] = $dol_id;
641 if (!empty($dol_type)) {
642 $metadata[
"dol_type"] = $dol_type;
645 dol_syslog(
"Create charge on card ".$card->id, LOG_DEBUG, 0,
'_payment');
646 $charge = \Stripe\Charge::create(array(
647 'amount' =>
price2num($amountstripe,
'MU'),
648 'currency' => $currency,
650 'description' =>
'Stripe payment: '.$FULLTAG.
' ref='.$ref,
651 'metadata' => $metadata,
652 'customer' => $customer->id,
654 'statement_descriptor' =>
dol_trunc($FULLTAG, 22,
'right',
'UTF-8', 1),
655 'statement_descriptor_suffix' =>
dol_trunc($FULLTAG, 12,
'right',
'UTF-8', 1),
656 ), array(
"idempotency_key" =>
"$FULLTAG",
"stripe_account" =>
"$stripeacc"));
658 if (empty($charge)) {
660 dol_syslog(
'Failed to charge card', LOG_WARNING, 0,
'_payment');
667 $vatcleaned = $vatnumber ? $vatnumber :
null;
678 dol_syslog(
"Create anonymous customer card profile", LOG_DEBUG, 0,
'_payment');
680 $customer = \Stripe\Customer::create(array(
682 'description' => ($email ?
'Anonymous customer for '.$email :
'Anonymous customer'),
683 'metadata' => $metadata,
684 'source' => $stripeToken
702 if (!empty($FULLTAG)) {
703 $metadata[
"FULLTAG"] = $FULLTAG;
705 if (!empty($dol_id)) {
706 $metadata[
"dol_id"] = $dol_id;
708 if (!empty($dol_type)) {
709 $metadata[
"dol_type"] = $dol_type;
714 dol_syslog(
"Create charge", LOG_DEBUG, 0,
'_payment');
715 $charge = \Stripe\Charge::create(array(
716 'customer' => $customer->id,
717 'amount' =>
price2num($amountstripe,
'MU'),
718 'currency' => $currency,
720 'description' =>
'Stripe payment: '.$FULLTAG.
' ref='.$ref,
721 'metadata' => $metadata,
722 'statement_descriptor' =>
dol_trunc($FULLTAG, 22,
'right',
'UTF-8', 1),
723 'statement_descriptor_suffix' =>
dol_trunc($FULLTAG, 12,
'right',
'UTF-8', 1),
724 ), array(
"idempotency_key" => (
string) $FULLTAG,
"stripe_account" => (
string) $stripeacc));
726 if (empty($charge)) {
728 dol_syslog(
'Failed to charge card', LOG_WARNING, 0,
'_payment');
735 $body = $e->getJsonBody();
736 $err = $body[
'error'];
738 print(
'Status is:'.$e->getHttpStatus().
"\n");
739 print(
'Type is:'.$err[
'type'].
"\n");
740 print(
'Code is:'.$err[
'code'].
"\n");
742 print(
'Param is:'.$err[
'param'].
"\n");
743 print(
'Message is:'.$err[
'message'].
"\n");
746 $errormessage =
"ErrorCard ".$e->getMessage().
" err=".
formatLogObject($err);
747 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
753 $errormessage =
"ErrorRateLimit ".$e->getMessage();
754 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
760 $errormessage =
"ErrorInvalidRequest ".$e->getMessage();
761 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
768 $errormessage =
"ErrorAuthentication ".$e->getMessage();
769 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
775 $errormessage =
"ErrorApiConnection ".$e->getMessage();
776 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
783 $errormessage =
"ErrorBase ".$e->getMessage();
784 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
790 $errormessage =
"ErrorException ".$e->getMessage();
791 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
798 $_SESSION[
'paymentkosessioncode'] = $randomseckey;
800 $urlko .=
'&paymentkosessioncode='.urlencode($randomseckey);
803 $_SESSION[
'paymentoksessioncode'] = $randomseckey;
805 $urlok .=
'&paymentoksessioncode='.urlencode($randomseckey);
810 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION')) {
811 $service =
'StripeTest';
814 $service =
'StripeLive';
817 include_once DOL_DOCUMENT_ROOT.
'/stripe/class/stripe.class.php';
819 $stripeacc = $stripe->getStripeAccount($service);
823 $paymentintent_id =
GETPOST(
"paymentintent_id",
"alpha");
826 global $stripearrayofkeysbyenv;
827 \Stripe\Stripe::setApiKey($stripearrayofkeysbyenv[$servicestatus][
'secret_key']);
830 if (empty($stripeacc)) {
831 $paymentintent = \Stripe\PaymentIntent::retrieve($paymentintent_id);
833 $paymentintent = \Stripe\PaymentIntent::retrieve($paymentintent_id, array(
"stripe_account" => $stripeacc));
837 $errormessage =
"CantRetrievePaymentIntent ".$e->getMessage();
838 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
847 $paymentintentalreadyused = 0;
848 if (!$error && is_object($paymentintent) && $paymentintent->status ==
'succeeded') {
849 $sql =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"paiement";
850 $sql .=
" WHERE ext_payment_id = '".$db->escape($paymentintent_id).
"'";
851 $sql .=
" OR ext_payment_id LIKE '".$db->escape($paymentintent_id).
":%'";
852 $resql =
$db->query($sql);
854 if (
$db->num_rows($resql) > 0) {
855 $paymentintentalreadyused = 1;
861 if ($paymentintent->status !=
'succeeded' || $paymentintentalreadyused) {
863 if ($paymentintentalreadyused) {
864 $errormessage =
"PaymentIntent ".$paymentintent_id.
" was already used to record a payment, it cannot be reused for another object";
866 $errormessage =
"StatusOfRetrievedIntent is not succeeded: ".$paymentintent->status;
868 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
873 $_SESSION[
'paymentkosessioncode'] = $randomseckey;
875 $urlko .=
'&paymentkosessioncode='.urlencode($randomseckey);
883 $amount = $paymentintent->amount;
886 if (!empty($paymentintent->currency)) {
887 $currency = strtoupper($paymentintent->currency);
891 $arrayzerounitcurrency = array(
'BIF',
'CLP',
'DJF',
'GNF',
'JPY',
'KMF',
'KRW',
'MGA',
'PYG',
'RWF',
'VND',
'VUV',
'XAF',
'XOF',
'XPF');
892 if (!in_array($currency, $arrayzerounitcurrency)) {
897 dol_syslog(
"StatusOfRetrievedIntent is succeeded for amount = ".$amount.
" currency = ".$currency, LOG_DEBUG, 0,
'_payment');
900 $_SESSION[
'paymentoksessioncode'] = $randomseckey;
902 $urlok .=
'&paymentoksessioncode='.urlencode($randomseckey);
909 $_SESSION[
"onlinetoken"] = $stripeToken;
910 $_SESSION[
"FinalPaymentAmt"] = $amount;
911 $_SESSION[
"currencyCodeType"] = $currency;
912 $_SESSION[
"paymentType"] =
'';
913 $_SESSION[
'ipaddress'] = ($remoteip ? $remoteip :
'unknown');
914 $_SESSION[
'TRANSACTIONID'] = (($charge && is_object($charge)) ? $charge->id : (is_object($paymentintent) ? $paymentintent->id :
''));
915 $_SESSION[
'errormessage'] = $errormessage;
916 if (!
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION')) {
917 $_SESSION[
'payerID'] = is_object($customer) ? $customer->id :
'';
919 $_SESSION[
'payerID'] =
'';
922 dol_syslog(
"Action charge stripe STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION=".
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION').
" ip=".$remoteip, LOG_DEBUG, 0,
'_payment');
923 dol_syslog(
"_SERVER[HTTP_X_FORWARDED_HOST] = ".(empty($_SERVER[
"HTTP_X_FORWARDED_HOST"]) ?
'' :
dol_escape_htmltag($_SERVER[
"HTTP_X_FORWARDED_HOST"])), LOG_DEBUG, 0,
'_payment');
924 dol_syslog(
"_SERVER[SERVER_NAME] = ".(empty($_SERVER[
"SERVER_NAME"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_NAME"])), LOG_DEBUG, 0,
'_payment');
925 dol_syslog(
"_SERVER[SERVER_ADDR] = ".(empty($_SERVER[
"SERVER_ADDR"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_ADDR"])), LOG_DEBUG, 0,
'_payment');
926 dol_syslog(
"session_id=".session_id(), LOG_DEBUG, 0,
'_payment');
927 dol_syslog(
"onlinetoken=".$_SESSION[
"onlinetoken"].
" paymentoksessioncode=".$_SESSION[
"paymentoksessioncode"].
" paymentkosessioncode=".($_SESSION[
"paymentkosessioncode"] ??
''), LOG_DEBUG, 0,
'_payment');
928 dol_syslog(
"FinalPaymentAmt=".$_SESSION[
"FinalPaymentAmt"].
" currencyCodeType=".$_SESSION[
"currencyCodeType"].
" payerID=".$_SESSION[
'payerID'].
" TRANSACTIONID=".$_SESSION[
'TRANSACTIONID'], LOG_DEBUG, 0,
'_payment');
929 dol_syslog(
"FULLTAG=".$FULLTAG, LOG_DEBUG, 0,
'_payment');
930 dol_syslog(
"error=".$error.
" errormessage=".$errormessage, LOG_DEBUG, 0,
'_payment');
931 dol_syslog(
"Now call the redirect to paymentok or paymentko, URL = ".($error ? $urlko : $urlok), LOG_DEBUG, 0,
'_payment');
934 header(
"Location: ".$urlko);
937 header(
"Location: ".$urlok);
944 'paymentmethod' => $paymentmethod,
945 'validpaymentmethod' => &$validpaymentmethod
947$reshook = $hookmanager->executeHooks(
'doPayment', $parameters, $object, $action);
950} elseif ($reshook > 0) {
951 print $hookmanager->resPrint;
964 $head =
'<link rel="stylesheet" type="text/css" href="' .
getDolGlobalString(
'ONLINE_PAYMENT_CSS_URL').
'?lang='.(!empty($getpostlang) ? $getpostlang : $langs->defaultlang).
'">'.
"\n";
967$conf->dol_hide_topmenu = 1;
968$conf->dol_hide_leftmenu = 1;
970$replacemainarea = (empty(
$conf->dol_hide_leftmenu) ?
'<div>' :
'').
'<div>';
971llxHeader($head, $langs->trans(
"PaymentForm"),
'',
'', 0, 0,
'',
'',
'',
'onlinepaymentbody', $replacemainarea);
973dol_syslog(
"newpayment.php show page source=".$source.
" paymentmethod=".$paymentmethod.
' amount='.$amount.
' newamount='.
GETPOST(
"newamount",
'alpha').
" ref=".$ref, LOG_DEBUG, 0,
'_payment');
974dol_syslog(
"_SERVER[HTTP_X_FORWARDED_HOST] = ".(empty($_SERVER[
"HTTP_X_FORWARDED_HOST"]) ?
'' :
dol_escape_htmltag($_SERVER[
"HTTP_X_FORWARDED_HOST"])), LOG_DEBUG, 0,
'_payment');
975dol_syslog(
"_SERVER[SERVER_NAME] = ".(empty($_SERVER[
"SERVER_NAME"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_NAME"])), LOG_DEBUG, 0,
'_payment');
976dol_syslog(
"_SERVER[SERVER_ADDR] = ".(empty($_SERVER[
"SERVER_ADDR"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_ADDR"])), LOG_DEBUG, 0,
'_payment');
977dol_syslog(
"session_id=".session_id(), LOG_DEBUG, 0,
'_payment');
980if ($source && in_array($ref, array(
'member_ref',
'contractline_ref',
'invoice_ref',
'order_ref',
'donation_ref',
''))) {
981 $langs->load(
"errors");
982 dol_print_error_email(
'BADREFINPAYMENTFORM', $langs->trans(
"ErrorBadLinkSourceSetButBadValueForRef", $source, $ref));
992 dol_htmloutput_mesg($langs->trans(
'YouAreCurrentlyInSandboxMode',
'Paypal'), array(),
'warning');
995 dol_htmloutput_mesg($langs->trans(
'YouAreCurrentlyInSandboxMode',
'Stripe'), array(),
'warning');
999print
'<span id="dolpaymentspan"></span>'.
"\n";
1000print
'<div class="center">'.
"\n";
1001print
'<form id="dolpaymentform" class="center" name="paymentform" action="'.$_SERVER[
"PHP_SELF"].
'" method="POST">'.
"\n";
1002print
'<input type="hidden" name="token" value="'.newToken().
'">'.
"\n";
1003print
'<input type="hidden" name="action" value="dopayment">'.
"\n";
1004print
'<input type="hidden" name="tag" value="'.GETPOST(
"tag",
'alpha').
'">'.
"\n";
1005print
'<input type="hidden" name="suffix" value="'.dol_escape_htmltag($suffix).
'">'.
"\n";
1006print
'<input type="hidden" name="securekey" value="'.dol_escape_htmltag($SECUREKEY).
'">'.
"\n";
1007print
'<input type="hidden" name="e" value="'.$entity.
'" />';
1009print
'<input type="hidden" name="lang" value="'.$getpostlang.
'">';
1010print
'<input type="hidden" name="ws" value="'.$ws.
'">';
1011print
'<input type="hidden" name="reload" id="reload" value="0">';
1017$logosmall =
$mysoc->logo_small;
1019$paramlogo =
'ONLINE_PAYMENT_LOGO_'.$suffix;
1029if (!empty($logosmall) && is_readable(
$conf->mycompany->dir_output.
'/logos/thumbs/'.$logosmall)) {
1030 $urllogo = DOL_URL_ROOT.
'/viewimage.php?modulepart=mycompany&entity='.
$conf->entity.
'&file='.urlencode(
'logos/thumbs/'.$logosmall);
1031 $urllogofull =
$dolibarr_main_url_root.
'/viewimage.php?modulepart=mycompany&entity='.
$conf->entity.
'&file='.urlencode(
'logos/thumbs/'.$logosmall);
1032} elseif (!empty($logo) && is_readable(
$conf->mycompany->dir_output.
'/logos/'.$logo)) {
1033 $urllogo = DOL_URL_ROOT.
'/viewimage.php?modulepart=mycompany&entity='.
$conf->entity.
'&file='.urlencode(
'logos/'.$logo);
1040 $filehtmlheader =
dol_sanitizePathName(DOL_DATA_ROOT . (
$conf->entity > 1 ?
'/' .
$conf->entity :
'') .
'/website/' . $ws .
'/htmlheaderpayment.html');
1042 print file_get_contents(
dol_osencode($filehtmlheader));
1046if ($urllogo && !$ws) {
1047 print
'<div class="backgreypublicpayment">';
1048 print
'<div class="logopublicpayment">';
1049 print
'<img id="dolpaymentlogo" src="'.$urllogo.
'"';
1053 print
'<div class="poweredbypublicpayment opacitymedium right"><a class="poweredbyhref" href="https://www.dolibarr.org?utm_medium=website&utm_source=poweredby" target="dolibarr" rel="noopener">'.$langs->trans(
"PoweredBy").
'<br><img class="poweredbyimg" src="'.DOL_URL_ROOT.
'/theme/dolibarr_logo.svg" width="80px"></a></div>';
1056} elseif ($creditor && !$ws) {
1057 print
'<div class="backgreypublicpayment">';
1058 print
'<div class="logopublicpayment">';
1064 print
'<div class="backimagepublicpayment">';
1065 print
'<img id="idMAIN_IMAGE_PUBLIC_PAYMENT" src="'.getDolGlobalString(
'MAIN_IMAGE_PUBLIC_PAYMENT').
'">';
1072print
'<!-- Form to send a payment -->'.
"\n";
1073print
'<!-- creditor = '.dol_escape_htmltag((
string) $creditor).
' -->'.
"\n";
1076 print
'<!-- PAYPAL_API_SANDBOX = '.getDolGlobalString(
'PAYPAL_API_SANDBOX').
' -->'.
"\n";
1077 print
'<!-- PAYPAL_API_INTEGRAL_OR_PAYPALONLY = '.getDolGlobalString(
'PAYPAL_API_INTEGRAL_OR_PAYPALONLY').
' -->'.
"\n";
1080 print
'<!-- STRIPE_LIVE = '.getDolGlobalString(
'STRIPE_LIVE').
' -->'.
"\n";
1081 print
'<!-- STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION = '.getDolGlobalString(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION').
' -->'.
"\n";
1083print
'<!-- urlok = '.$urlok.
' -->'.
"\n";
1084print
'<!-- urlko = '.$urlko.
' -->'.
"\n";
1088print
'<table id="dolpublictable" summary="Payment form" class="center">'.
"\n";
1093 $langs->load(
"members");
1095 if (preg_match(
'/^\((.*)\)$/',
getDolGlobalString(
'PAYMENT_NEWFORM_TEXT'), $reg)) {
1096 $text .= $langs->trans($reg[1]).
"<br>\n";
1100 $text =
'<tr><td class="center"><br>'.$text.
'<br></td></tr>'.
"\n";
1103 $text .=
'<tr><td class="textpublicpayment"><br><strong>'.$langs->trans(
"WelcomeOnPaymentPage").
'</strong></td></tr>'.
"\n";
1104 $text .=
'<tr><td class="textpublicpayment"><span class="opacitymedium">'.$langs->trans(
"ThisScreenAllowsYouToPay", (
string) $creditor).
'</span><br><br></td></tr>'.
"\n";
1109print
'<tr><td align="center">';
1110print
'<table class="centpercent left" id="tablepublicpayment">';
1111print
'<tr class="hideonsmartphone"><td colspan="2" class="opacitymedium">'.$langs->trans(
"ThisIsInformationOnPayment").
'...<br><br></td></tr>'.
"\n";
1123 dol_syslog(
"newpayment.php no source", LOG_DEBUG);
1126 $tag =
GETPOST(
"tag",
'alpha');
1127 if (
GETPOST(
'fulltag',
'alpha')) {
1128 $fulltag =
GETPOST(
'fulltag',
'alpha');
1130 $fulltag =
"TAG=".$tag;
1134 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1135 print
'</td><td class="CTableRow2">';
1136 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1137 print
'<b>'.$creditor.
'</b>';
1138 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1139 print
'</td></tr>'.
"\n";
1142 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
1143 if (empty($amount)) {
1144 print
' ('.$langs->trans(
"ToComplete").
')';
1146 print
'</td><td class="CTableRow2">';
1147 if (empty($amount) || !is_numeric($amount)) {
1148 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1149 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1151 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1153 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1154 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1155 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1157 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1158 print
'</td></tr>'.
"\n";
1161 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1162 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1163 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
1164 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1165 print
'</td></tr>'.
"\n";
1173if ($source ==
'order') {
1174 dol_syslog(
"newpayment.php source=order", LOG_DEBUG);
1177 $langs->load(
"orders");
1179 require_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
1182 $result = $order->fetch(0, $ref);
1184 $mesg = $order->error;
1187 $result = $order->fetch_thirdparty($order->socid);
1195 if ($action !=
'dopayment') {
1196 $amount = $order->total_ttc;
1197 if (
GETPOST(
"amount",
'alpha')) {
1198 $amount =
GETPOST(
"amount",
'alpha');
1204 if (
GETPOST(
'fulltag',
'alpha')) {
1205 $fulltag =
GETPOST(
'fulltag',
'alpha');
1207 $fulltag =
'ORD='.$order->id.
'.CUS='.$order->thirdparty->id;
1210 $fulltag .=
'.TAG='.$TAG;
1216 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1217 print
'</td><td class="CTableRow2"';
1218 print
' title="'.dolPrintHTMLForAttribute($langs->transnoentitiesnoconv(
"Country").
'='.
$mysoc->country_code.
' - '.$langs->transnoentitiesnoconv(
"VATIntra").
'='.
$mysoc->tva_intra).
'"';
1220 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1221 print
'<b>'.$creditor.
'</b>';
1222 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1223 print
'</td></tr>'.
"\n";
1226 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
1227 print
'</td><td class="CTableRow2"';
1228 print
' title="'.dolPrintHTMLForAttribute($langs->transnoentitiesnoconv(
"Country").
'='.$order->thirdparty->country_code.
' - '.$langs->transnoentitiesnoconv(
"VATIntra").
'='.$order->thirdparty->tva_intra).
'"';
1230 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1231 print
'<b>'.$order->thirdparty->name.
'</b>';
1232 print
'</td></tr>'.
"\n";
1235 $text =
'<b>'.$langs->trans(
"PaymentOrderRef", $order->ref).
'</b>';
1236 if (
GETPOST(
'desc',
'alpha')) {
1237 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1239 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1240 print
'</td><td class="CTableRow2">'.$text;
1241 print
'<input type="hidden" name="s" value="'.dol_escape_htmltag($source).
'">';
1242 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($order->ref).
'">';
1243 print
'<input type="hidden" name="dol_id" value="'.dol_escape_htmltag((
string) $order->id).
'">';
1244 $directdownloadlink = $order->getLastMainDocLink(
'commande');
1245 if ($directdownloadlink) {
1246 print
'<br><a href="'.$directdownloadlink.
'" rel="nofollow noopener">';
1247 print
img_mime($order->last_main_doc,
'');
1248 print $langs->trans(
"DownloadDocument").
'</a>';
1250 print
'</td></tr>'.
"\n";
1253 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
1254 if (empty($amount)) {
1255 print
' ('.$langs->trans(
"ToComplete").
')';
1257 print
'</td><td class="CTableRow2">';
1258 if (empty($amount) || !is_numeric($amount)) {
1259 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1260 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1262 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1264 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1265 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1266 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1268 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1269 print
'</td></tr>'.
"\n";
1272 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1273 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1274 print
'<input type="hidden" name="tag" value="'.dol_escape_htmltag($tag).
'">';
1275 print
'<input type="hidden" name="fulltag" value="'.dol_escape_htmltag($fulltag).
'">';
1276 print
'</td></tr>'.
"\n";
1279 $shipToName = $order->thirdparty->name;
1280 $shipToStreet = $order->thirdparty->address;
1281 $shipToCity = $order->thirdparty->town;
1282 $shipToState = $order->thirdparty->state_code;
1283 $shipToCountryCode = $order->thirdparty->country_code;
1284 $shipToZip = $order->thirdparty->zip;
1285 $shipToStreet2 =
'';
1286 $phoneNum = $order->thirdparty->phone;
1287 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
1288 print
'<input type="hidden" name="shipToName" value="'.dol_escape_htmltag($shipToName).
'">'.
"\n";
1289 print
'<input type="hidden" name="shipToStreet" value="'.dol_escape_htmltag($shipToStreet).
'">'.
"\n";
1290 print
'<input type="hidden" name="shipToCity" value="'.dol_escape_htmltag($shipToCity).
'">'.
"\n";
1291 print
'<input type="hidden" name="shipToState" value="'.dol_escape_htmltag($shipToState).
'">'.
"\n";
1292 print
'<input type="hidden" name="shipToCountryCode" value="'.dol_escape_htmltag($shipToCountryCode).
'">'.
"\n";
1293 print
'<input type="hidden" name="shipToZip" value="'.dol_escape_htmltag($shipToZip).
'">'.
"\n";
1294 print
'<input type="hidden" name="shipToStreet2" value="'.dol_escape_htmltag($shipToStreet2).
'">'.
"\n";
1295 print
'<input type="hidden" name="phoneNum" value="'.dol_escape_htmltag($phoneNum).
'">'.
"\n";
1297 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
1299 if (is_object($order->thirdparty)) {
1300 print
'<input type="hidden" name="thirdparty_id" value="'.$order->thirdparty->id.
'">'.
"\n";
1302 print
'<input type="hidden" name="email" value="'.$order->thirdparty->email.
'">'.
"\n";
1303 print
'<input type="hidden" name="vatnumber" value="'.dol_escape_htmltag($order->thirdparty->tva_intra).
'">'.
"\n";
1304 $labeldesc = $langs->trans(
"Order").
' '.$order->ref;
1305 if (
GETPOST(
'desc',
'alpha')) {
1306 $labeldesc =
GETPOST(
'desc',
'alpha');
1308 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
1313if ($source ==
'invoice') {
1314 dol_syslog(
"newpayment.php source=invoice", LOG_DEBUG);
1317 $langs->load(
"bills");
1318 $form->load_cache_types_paiements();
1320 require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
1323 $result = $invoice->fetch(0, $ref);
1325 $mesg = $invoice->error;
1328 $result = $invoice->fetch_thirdparty($invoice->socid);
1332 if ($action !=
'dopayment') {
1333 $amount =
price2num($invoice->total_ttc - ($invoice->getSommePaiement() + $invoice->getSumCreditNotesUsed() + $invoice->getSumDepositsUsed()));
1334 if (
GETPOST(
"amount",
'alpha')) {
1335 $amount =
GETPOST(
"amount",
'alpha');
1340 if (
GETPOST(
'fulltag',
'alpha')) {
1341 $fulltag =
GETPOST(
'fulltag',
'alpha');
1343 $fulltag =
'INV='.$invoice->id.
'.CUS='.$invoice->thirdparty->id;
1346 $fulltag .=
'.TAG='.$TAG;
1352 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1353 print
'</td><td class="CTableRow2"';
1354 print
' title="'.dolPrintHTMLForAttribute($langs->transnoentitiesnoconv(
"Country").
'='.
$mysoc->country_code.
' - '.$langs->transnoentitiesnoconv(
"VATIntra").
'='.
$mysoc->tva_intra).
'"';
1356 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1357 print
'<b>'.$creditor.
'</b>';
1358 print
'<input type="hidden" name="creditor" value="'.dol_escape_htmltag((
string) $creditor).
'">';
1359 print
'</td></tr>'.
"\n";
1362 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
1363 print
'</td><td class="CTableRow2"';
1364 print
' title="'.dolPrintHTMLForAttribute($langs->transnoentitiesnoconv(
"Country").
'='.$invoice->thirdparty->country_code.
' - '.$langs->transnoentitiesnoconv(
"VATIntra").
'='.$invoice->thirdparty->tva_intra).
'"';
1366 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1367 print
'<b>'.$invoice->thirdparty->name.
'</b>';
1368 print
'</td></tr>'.
"\n";
1371 $text =
'<b>'.$langs->trans(
"PaymentInvoiceRef", $invoice->ref).
'</b>';
1372 if (
GETPOST(
'desc',
'alpha')) {
1373 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1375 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1376 print
'</td><td class="CTableRow2">'.$text;
1377 print
'<input type="hidden" name="s" value="'.dol_escape_htmltag($source).
'">';
1378 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($invoice->ref).
'">';
1379 print
'<input type="hidden" name="dol_id" value="'.dol_escape_htmltag((
string) $invoice->id).
'">';
1380 $directdownloadlink = $invoice->getLastMainDocLink(
'facture');
1381 if ($directdownloadlink) {
1382 print
'<br><a href="'.$directdownloadlink.
'">';
1383 print
img_mime($invoice->last_main_doc,
'');
1384 print $langs->trans(
"DownloadDocument").
'</a>';
1386 print
'</td></tr>'.
"\n";
1389 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentAmount");
1390 if (empty($amount) && empty(
$object->paye)) {
1391 print
' ('.$langs->trans(
"ToComplete").
')';
1393 print
'</td><td class="CTableRow2">';
1394 if (
$object->type == $object::TYPE_CREDIT_NOTE) {
1395 print
'<b>'.$langs->trans(
"CreditNote").
'</b>';
1396 } elseif (empty(
$object->paye)) {
1397 if (empty($amount) || !is_numeric($amount)) {
1398 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1399 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1400 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1402 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1403 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1404 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1407 print
'<b class="amount">'.price(
$object->total_ttc, 1, $langs, 1, -1, -1, $currency).
'</b>';
1409 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1410 print
'</td></tr>'.
"\n";
1413 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1414 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1415 print
'<input type="hidden" name="tag" value="'.(empty($tag) ?
'' : $tag).
'">';
1416 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1417 print
'</td></tr>'.
"\n";
1420 if ($invoice->status == $invoice::STATUS_VALIDATED && $invoice->mode_reglement_id > 0 && $form->cache_types_paiements[$invoice->mode_reglement_id][
"code"] ==
"VIR") {
1421 print
'<tr class="CTableRow2 center"><td class="CTableRow2" colspan="2">';
1422 print
'<div class="warning maxwidth1000">';
1423 print $langs->trans(
"PayOfBankTransferInvoice");
1425 print
'</td></tr>'.
"\n";
1429 $shipToName = $invoice->thirdparty->name;
1430 $shipToStreet = $invoice->thirdparty->address;
1431 $shipToCity = $invoice->thirdparty->town;
1432 $shipToState = $invoice->thirdparty->state_code;
1433 $shipToCountryCode = $invoice->thirdparty->country_code;
1434 $shipToZip = $invoice->thirdparty->zip;
1435 $shipToStreet2 =
'';
1436 $phoneNum = $invoice->thirdparty->phone;
1437 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
1438 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
1439 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
1440 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
1441 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
1442 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
1443 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
1444 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
1445 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
1447 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
1449 if (is_object($invoice->thirdparty)) {
1450 print
'<input type="hidden" name="thirdparty_id" value="'.$invoice->thirdparty->id.
'">'.
"\n";
1452 print
'<input type="hidden" name="email" value="'.$invoice->thirdparty->email.
'">'.
"\n";
1453 print
'<input type="hidden" name="vatnumber" value="'.$invoice->thirdparty->tva_intra.
'">'.
"\n";
1454 $labeldesc = $langs->trans(
"Invoice").
' '.$invoice->ref;
1455 if (
GETPOST(
'desc',
'alpha')) {
1456 $labeldesc =
GETPOST(
'desc',
'alpha');
1458 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
1462if ($source ==
'contractline') {
1463 dol_syslog(
"newpayment.php source=contractline", LOG_DEBUG);
1466 $langs->load(
"contracts");
1468 require_once DOL_DOCUMENT_ROOT.
'/contrat/class/contrat.class.php';
1473 $result = $contractline->fetch(0, $ref);
1475 $mesg = $contractline->error;
1478 if ($contractline->fk_contrat > 0) {
1479 $result = $contract->fetch($contractline->fk_contrat);
1481 $result = $contract->fetch_thirdparty($contract->socid);
1483 $mesg = $contract->error;
1487 $mesg =
'ErrorRecordNotFound';
1493 if ($action !=
'dopayment') {
1494 $amount = $contractline->total_ttc;
1496 if ($contractline->fk_product &&
getDolGlobalString(
'PAYMENT_USE_NEW_PRICE_FOR_CONTRACTLINES')) {
1498 $result = $product->fetch($contractline->fk_product);
1502 $pu_ht = $product->multiprices[$contract->thirdparty->price_level];
1503 $pu_ttc = $product->multiprices_ttc[$contract->thirdparty->price_level];
1504 $price_base_type = $product->multiprices_base_type[$contract->thirdparty->price_level];
1506 $pu_ht = $product->price;
1507 $pu_ttc = $product->price_ttc;
1508 $price_base_type = $product->price_base_type;
1512 if (empty($amount)) {
1518 if (
GETPOST(
"amount",
'alpha')) {
1519 $amount =
GETPOST(
"amount",
'alpha');
1524 if (
GETPOST(
'fulltag',
'alpha')) {
1525 $fulltag =
GETPOST(
'fulltag',
'alpha');
1527 $fulltag =
'COL='.$contractline->id.
'.CON='.$contract->id.
'.CUS='.$contract->thirdparty->id.
'.DAT='.
dol_print_date(
dol_now(),
'%Y%m%d%H%M%S');
1530 $fulltag .=
'.TAG='.$TAG;
1541 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1542 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
1543 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1544 print
'</td></tr>'.
"\n";
1547 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
1548 print
'</td><td class="CTableRow2"><b>'.$contract->thirdparty->name.
'</b>';
1549 print
'</td></tr>'.
"\n";
1552 $text =
'<b>'.$langs->trans(
"PaymentRenewContractId", $contract->ref, $contractline->ref).
'</b>';
1553 if ($contractline->fk_product > 0) {
1554 $contractline->fetch_product();
1555 $text .=
'<br>'.$contractline->product->ref.($contractline->product->label ?
' - '.$contractline->product->label :
'');
1557 if ($contractline->description) {
1558 $text .=
'<br>'.dol_htmlentitiesbr($contractline->description);
1560 if ($contractline->date_end) {
1561 $text .=
'<br>'.$langs->trans(
"ExpiredSince").
': '.
dol_print_date($contractline->date_end);
1563 if (
GETPOST(
'desc',
'alpha')) {
1564 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1566 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1567 print
'</td><td class="CTableRow2">'.$text;
1568 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($source).
'">';
1569 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($contractline->ref).
'">';
1570 print
'<input type="hidden" name="dol_id" value="'.dol_escape_htmltag((
string) $contractline->id).
'">';
1571 $directdownloadlink = $contract->getLastMainDocLink(
'contract');
1572 if ($directdownloadlink) {
1573 print
'<br><a href="'.$directdownloadlink.
'">';
1574 print
img_mime($contract->last_main_doc,
'');
1575 print $langs->trans(
"DownloadDocument").
'</a>';
1577 print
'</td></tr>'.
"\n";
1580 $label = $langs->trans(
"Quantity");
1583 if ($contractline->fk_product) {
1584 if ($contractline->product->isService() && $contractline->product->duration_value > 0) {
1585 $label = $langs->trans(
"Duration");
1588 if ($contractline->product->duration_value > 1) {
1589 $dur = array(
"h" => $langs->trans(
"Hours"),
"d" => $langs->trans(
"DurationDays"),
"w" => $langs->trans(
"DurationWeeks"),
"m" => $langs->trans(
"DurationMonths"),
"y" => $langs->trans(
"DurationYears"));
1591 $dur = array(
"h" => $langs->trans(
"Hour"),
"d" => $langs->trans(
"DurationDay"),
"w" => $langs->trans(
"DurationWeek"),
"m" => $langs->trans(
"DurationMonth"),
"y" => $langs->trans(
"DurationYear"));
1593 $duration = $contractline->product->duration_value.
' '.$dur[$contractline->product->duration_unit];
1596 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$label.
'</td>';
1597 print
'<td class="CTableRow2"><b>'.($duration ? $duration : $qty).
'</b>';
1598 print
'<input type="hidden" name="newqty" value="'.dol_escape_htmltag((
string) $qty).
'">';
1599 print
'</b></td></tr>'.
"\n";
1602 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
1603 if (empty($amount)) {
1604 print
' ('.$langs->trans(
"ToComplete").
')';
1606 print
'</td><td class="CTableRow2">';
1607 if (empty($amount) || !is_numeric($amount)) {
1608 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1609 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1611 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1613 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1614 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1615 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1617 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1618 print
'</td></tr>'.
"\n";
1621 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1622 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1623 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
1624 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1625 print
'</td></tr>'.
"\n";
1628 $shipToName = $contract->thirdparty->name;
1629 $shipToStreet = $contract->thirdparty->address;
1630 $shipToCity = $contract->thirdparty->town;
1631 $shipToState = $contract->thirdparty->state_code;
1632 $shipToCountryCode = $contract->thirdparty->country_code;
1633 $shipToZip = $contract->thirdparty->zip;
1634 $shipToStreet2 =
'';
1635 $phoneNum = $contract->thirdparty->phone;
1636 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
1637 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
1638 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
1639 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
1640 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
1641 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
1642 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
1643 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
1644 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
1646 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
1648 if (is_object($contract->thirdparty)) {
1649 print
'<input type="hidden" name="thirdparty_id" value="'.$contract->thirdparty->id.
'">'.
"\n";
1651 print
'<input type="hidden" name="email" value="'.$contract->thirdparty->email.
'">'.
"\n";
1652 print
'<input type="hidden" name="vatnumber" value="'.$contract->thirdparty->tva_intra.
'">'.
"\n";
1653 $labeldesc = $langs->trans(
"Contract").
' '.$contract->ref;
1654 if (
GETPOST(
'desc',
'alpha')) {
1655 $labeldesc =
GETPOST(
'desc',
'alpha');
1657 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
1661if ($source ==
'member' || $source ==
'membersubscription') {
1662 dol_syslog(
"newpayment.php source=".$source, LOG_DEBUG);
1664 $newsource =
'member';
1668 $langs->load(
"members");
1670 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent.class.php';
1671 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent_type.class.php';
1672 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/subscription.class.php';
1677 $result = $member->fetch(0, $ref, 0,
'',
true,
true);
1679 $mesg = $member->error;
1682 $member->fetch_thirdparty();
1684 $adht->fetch($member->typeid);
1688 if ($action !=
'dopayment') {
1689 $amount = $member->last_subscription_amount;
1690 if (
GETPOST(
"amount",
'alpha')) {
1694 if (empty($amount)) {
1695 $amount = $adht->amount;
1698 $amount = max(0,
price2num($amount,
'MT'));
1701 if (
GETPOST(
'fulltag',
'alpha')) {
1702 $fulltag =
GETPOST(
'fulltag',
'alpha');
1707 $fulltag .=
'.TAG='.$TAG;
1713 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1714 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
1715 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1716 print
'</td></tr>'.
"\n";
1719 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Member");
1720 print
'</td><td class="CTableRow2">';
1722 if ($member->morphy ==
'mor' && !empty($member->company)) {
1723 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1724 print $member->company;
1726 print
img_picto(
'',
'member',
'class="pictofixedwidth"');
1727 print $member->getFullName($langs);
1730 print
'</td></tr>'.
"\n";
1733 $text =
'<b>'.$langs->trans(
"PaymentSubscription").
'</b>';
1734 if (
GETPOST(
'desc',
'alpha')) {
1735 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1737 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1738 print
'</td><td class="CTableRow2">'.$text;
1739 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($newsource).
'">';
1740 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($member->ref).
'">';
1741 print
'</td></tr>'.
"\n";
1744 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"DateEndSubscription");
1745 print
'</td><td class="CTableRow2">'.dol_print_date($member->datefin,
'day');
1746 print
'</td></tr>'.
"\n";
1749 if ($member->last_subscription_date || $member->last_subscription_amount) {
1752 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"LastSubscriptionDate");
1753 print
'</td><td class="CTableRow2">'.dol_print_date($member->last_subscription_date,
'day');
1754 print
'</td></tr>'.
"\n";
1758 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"LastSubscriptionAmount");
1759 print
'</td><td class="CTableRow2">'.price($member->last_subscription_amount);
1760 print
'</td></tr>'.
"\n";
1762 if (empty($amount) && !
GETPOST(
'newamount',
'alpha')) {
1763 $_GET[
'newamount'] = $member->last_subscription_amount;
1764 $_GET[
'amount'] = $member->last_subscription_amount;
1766 if (!empty($member->last_subscription_amount) && !
GETPOSTISSET(
'newamount') && is_numeric($amount)) {
1767 $amount = max($member->last_subscription_amount, $amount);
1771 $amountbytype = $adht->amountByType(1);
1773 $typeid = $adht->id;
1774 $caneditamount = $adht->caneditamount;
1776 if ($member->type) {
1777 $oldtypeid = $member->typeid;
1780 $typeid = $newtypeid;
1781 $adht->fetch($typeid);
1784 $caneditamount = $adht->caneditamount;
1788 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"LastMemberType");
1789 print
'</td><td class="CTableRow2">'.dol_escape_htmltag($member->type);
1790 print
"</td></tr>\n";
1793 $member->typeid = $newtypeid;
1800 $amount = (!empty($amountbytype[$member->typeid])) ? $amountbytype[$member->typeid] : $member->last_subscription_amount;
1802 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"NewSubscription");
1803 print
'</td><td class="CTableRow2">';
1804 print $form->selectarray(
"typeid", $adht->liste_array(1), $member->typeid, 0, 0, 0,
'onchange="window.location.replace(\''.$urlwithroot.
'/public/payment/newpayment.php?source='.urlencode($source).
'&ref='.urlencode($ref).
'&amount='.urlencode($amount).
'&typeid=\' + this.value + \'&securekey='.urlencode($SECUREKEY).
'\');
"', 0, 0, 0, '', '', 1);
1805 print "</td></tr>\n
";
1806 } elseif ($action == 'dopayment') {
1807 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("NewMemberType
");
1808 print '</td><td class="CTableRow2
">'.dol_escape_htmltag($member->type);
1809 print '<input type="hidden
" name="membertypeid
" value="'.$member->typeid.'">';
1810 print "</td></tr>\n
";
1813 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("MemberType
");
1814 print '</td><td class="CTableRow2
">'.dol_escape_htmltag($member->type);
1815 print "</td></tr>\n
";
1820 // Add hook to complete the form
1821 $parameters = array('mode' => 'renewal');
1822 $reshook = $hookmanager->executeHooks('membershipNewSubscriptionPublicForm', $parameters, $object, $action);
1824 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
1828 // TODO Move this into previous hook
1829 if (getDolGlobalString('MEMBER_NEWFORM_DOLIBARRTURNOVER') && $action != 'dopayment') {
1831 if ($member->thirdparty instanceof Societe) {
1832 $country_id = $member->thirdparty->country_id;
1834 $checkednature = $member->morphy;
1835 print '<input type="hidden
" name="moralinput
" id="moralinput
" value="'.$checkednature.'">';
1837 // Is it a Preferred Partner
1839 include_once DOL_DOCUMENT_ROOT.'/partnership/class/partnership.class.php';
1840 $partnership = new Partnership($db);
1841 // @phan-suppress-next-line PhanPluginSuspiciousParamPosition
1842 $result = $partnership->fetch(0, '', 0, (int) $member->thirdparty->id);
1847 $s = $langs->trans("AreYouAPreferredPartner
", '<a href="https:
1848 $s = str_replace(
'{s1}',
'Preferred Partner', $s);
1849 print
'<tr id="trbudget" class="trcompany"><td><label for="pp" class="small">'.$s.
'</label></td><td>';
1850 print
'<input type="checkbox" name="pp" id="pp" value="1"'.((GETPOST(
'reload') ?
GETPOST(
'pp') : $pp) ?
' checked="checked"' :
'').
' class="reposition">';
1853 print
'<tr id="trbudget" class="trcompany"><td class=""><span class="small">'.$langs->trans(
"TurnoverOrBudget").
'</span></td><td>';
1856 if ($country_code ===
'FR' && $checkednature ===
'mor' && (
GETPOST(
'reload') ?
GETPOST(
'pp') : $pp)) {
1857 print
'<input type="text" name="budget" id="budget" class="flat turnover right width100" value="'.GETPOST(
'budget').
'"'.($action !=
'dopayment' ?
' required autofocus' :
'').
'>';
1859 $arraybudget = array(
'50' =>
'<= 100 000',
'100' =>
'<= 200 000',
'200' =>
'<= 500 000',
'300' =>
'<= 1 500 000',
'600' =>
'<= 3 000 000',
'1000' =>
'<= 5 000 000',
'2000' =>
'5 000 000+');
1860 print $form->selectarray(
'budget', $arraybudget,
GETPOSTINT(
'budget'), 1, 0, 0, ($checkednature ===
'mor' ?
'required' :
''), 0, 0, 0,
'');
1864 print
'<script type="text/javascript">
1865 jQuery(document).ready(function() {
1868 newamount = initturnover();
1869 jQuery("#amount").val(newamount);
1870 jQuery("#newamount").val(newamount);
1874 jQuery("#selectcountry_id").change(function() {
1875 console.log("We change country (code added for association, replace common code), so we reload page");
1876 jQuery("#budget").val(\'\');
1877 jQuery("#amount").val(\'\');
1878 jQuery("#newamount").val(\'\');
1879 jQuery("#amounthidden").val(\'\');
1881 jQuery("#pp").change(function() {
1882 console.log("We change the preferred partner status");
1883 selectcountry_id = jQuery("#selectcountry_id").val();
1884 morphy = jQuery("#moralinput").is(\':checked\') ? \'mor\' : \'phy\';
1885 jQuery("#budget").val(\'\');
1886 jQuery("#amount").val(\'\');
1887 jQuery("#amounthidden").val(\'\');
1888 jQuery("#newamount").val(\'\');
1889 jQuery("#reload").val(\'1\');
1890 document.paymentform.action.value="";
1891 jQuery("#dolpaymentform").submit();
1893 jQuery("#budget").change(function() {
1894 console.log("Turnover amount has been modified on change");
1895 newamount = initturnover();
1896 jQuery("#amount").val(newamount);
1897 jQuery("#amounthidden").val(newamount);
1898 jQuery("#newamount").val(newamount);
1900 jQuery("#budget").keyup(function() {
1901 console.log("Turnover amount has been modified on keyup");
1902 newamount = initturnover();
1903 jQuery("#amount").val(newamount);
1904 jQuery("#amounthidden").val(newamount);
1905 jQuery("#newamount").val(newamount);
1908 function initturnover() {
1911 //morphy = jQuery("#moralinput").is(\':checked\') ? \'mor\' : \'phy\';
1912 morphy = jQuery("#moralinput").val();
1913 selectcountry_id = '.((int) $country_id).
';
1914 pp = jQuery("#pp").is(\':checked\') ? true : false;
1915 console.log("Set fields according to nature and other properties");
1916 console.log("morphy="+morphy);
1917 console.log("selectcountry_id="+selectcountry_id);
1918 console.log("pp="+pp);
1920 if (morphy == \'phy\') {
1921 jQuery(".amount").val('.((float) $amount).
');
1922 jQuery("#trbirth").show();
1923 jQuery(".trcompany").hide();
1924 jQuery(".trbudget").hide();
1925 newamount = '.((float) $amount).
';
1927 jQuery(".amount").val(\'\');
1928 jQuery("#trbirth").hide();
1929 jQuery(".trcompany").show();
1930 jQuery(".trbudget").show();
1931 jQuery(".hideifautoturnover").hide();
1933 jQuery("#budget").val(\'\');
1936 if (selectcountry_id == 1) {
1937 if (jQuery("#budget").val() == \'\') {
1941 console.log("value selected in input text field is "+jQuery("#budget").val());
1942 newamount = Math.max(Math.round(price2numjs(jQuery("#budget").val()) * 0.005), 50);
1943 console.log("newamount = "+newamount);
1945 console.log("not a pp");
1946 if (jQuery("#budget").val() > 0) {
1947 console.log("value found in budget is "+jQuery("#budget").val());
1948 newamount = jQuery("#budget").val();
1950 jQuery("#budget").val(\'\');
1955 if (jQuery("#budget").val() > 0) {
1956 newamount = jQuery("#budget").val();
1958 jQuery("#budget").val(\'\');
1968 print
'</td></tr>'.
"\n";
1974 $amount = ($member->last_subscription_amount ? $member->last_subscription_amount : (empty($amountbytype[$typeid]) ? 0 : $amountbytype[$typeid]));
1985 $amount = max(0, (
float) $amount, (
float)
getDolGlobalInt(
"MEMBER_MIN_AMOUNT"));
1988 $caneditamount = $adht->caneditamount;
1990 $amountformuladescriptionbytype = $adht->amountformuladescriptionbytype(1);
1991 $amountformuladescription = $amountformuladescriptionbytype[$typeid];
1992 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
1995 print
' - <a href="' .
getDolGlobalString(
'MEMBER_EXT_URL_SUBSCRIPTION_INFO').
'" rel="external" target="_blank" rel="noopener noreferrer">'.
img_picto(
'',
'url',
'class="pictofixedwidth"').$langs->trans(
"SeeHere").
'</a>';
1997 if ($amountformuladescription) {
1998 print
'</td><td class="CTableRow2">'.$amountformuladescription;
1999 print
'</td></tr>'.
"\n";
2000 print
'<tr class="CTableRow2"><td class="CTableRow2">';
2001 print
'</td><td class="CTableRow2">';
2003 print
'</td><td class="CTableRow2">';
2006 if ($caneditamount && ($action !=
'dopayment' ||
GETPOST(
'reload'))) {
2008 print
'<input type="text" class="width75 amount" name="newamount" id="newamount" value="'.price(
price2num(
GETPOST(
'newamount'),
'', 2), 1, $langs, 1, -1, -1).
'">';
2010 print
'<input type="text" class="width75 amount" name="newamount" id="newamount" value="'.price($amount, 1, $langs, 1, -1, -1).
'">';
2012 print $langs->trans(
"Currency".
$conf->currency);
2014 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
2015 if ($minimumamount > $amount) {
2016 print
' <span class="opacitymedium small">'. $langs->trans(
"AmountIsLowerToMinimumNotice",
price($minimumamount, 1, $langs, 1, -1, -1, $currency)).
'</span>';
2018 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
2020 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
2021 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
2022 print
'</td></tr>'.
"\n";
2025 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
2026 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
2027 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
2028 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
2029 print
'</td></tr>'.
"\n";
2032 $shipToName = $member->getFullName($langs);
2033 $shipToStreet = $member->address;
2034 $shipToCity = $member->town;
2035 $shipToState = $member->state_code;
2036 $shipToCountryCode = $member->country_code;
2037 $shipToZip = $member->zip;
2038 $shipToStreet2 =
'';
2039 $phoneNum = $member->phone;
2040 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
2041 print
'<!-- Shipping address information -->';
2042 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
2043 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
2044 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
2045 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
2046 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
2047 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
2048 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
2049 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
2051 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
2053 if (is_object($member->thirdparty)) {
2054 print
'<input type="hidden" name="thirdparty_id" value="'.$member->thirdparty->id.
'">'.
"\n";
2056 print
'<input type="hidden" name="email" value="'.$member->email.
'">'.
"\n";
2057 $labeldesc = $langs->trans(
"PaymentSubscription");
2058 if (
GETPOST(
'desc',
'alpha')) {
2059 $labeldesc =
GETPOST(
'desc',
'alpha');
2061 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
2065if ($source ==
'donation') {
2066 dol_syslog(
"newpayment.php source=donation", LOG_DEBUG);
2069 $langs->load(
"don");
2071 require_once DOL_DOCUMENT_ROOT.
'/don/class/don.class.php';
2075 $result = $don->fetch((
int) $ref);
2077 $mesg = $don->error;
2080 $don->fetch_thirdparty();
2084 if ($action !=
'dopayment') {
2085 if (
GETPOST(
"amount",
'alpha')) {
2086 $amount =
GETPOST(
"amount",
'alpha');
2088 $amount = $don->getRemainToPay();
2093 if (
GETPOST(
'fulltag',
'alpha')) {
2094 $fulltag =
GETPOST(
'fulltag',
'alpha');
2099 $fulltag .=
'.TAG='.$TAG;
2105 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
2106 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
2107 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
2108 print
'</td></tr>'.
"\n";
2111 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
2112 print
'</td><td class="CTableRow2"><b>';
2113 if (!empty($don->societe)) {
2114 print $don->societe;
2116 print $don->getFullName($langs);
2119 print
'</td></tr>'.
"\n";
2122 $text =
'<b>'.$langs->trans(
"PaymentDonation").
'</b>';
2123 if (
GETPOST(
'desc',
'alpha')) {
2124 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
2126 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
2127 print
'</td><td class="CTableRow2">'.$text;
2128 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($source).
'">';
2129 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($don->ref).
'">';
2130 print
'</td></tr>'.
"\n";
2133 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
2134 if (empty($amount)) {
2136 print
' ('.$langs->trans(
"ToComplete");
2139 print
' - <a href="' .
getDolGlobalString(
'DONATION_EXT_URL_SUBSCRIPTION_INFO').
'" rel="external" target="_blank" rel="noopener noreferrer">'.$langs->trans(
"SeeHere").
'</a>';
2145 print
'</td><td class="CTableRow2">';
2147 if (empty($amount) || !is_numeric($amount)) {
2150 if (empty($valtoshow)) {
2162 if (empty($amount) || !is_numeric($amount)) {
2167 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
2168 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.$valtoshow.
'">';
2170 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
2172 $valtoshow = $amount;
2175 $amount = $valtoshow;
2177 print
'<b class="amount">'.price($valtoshow, 1, $langs, 1, -1, -1, $currency).
'</b>';
2178 print
'<input type="hidden" name="amount" value="'.$valtoshow.
'">';
2179 print
'<input type="hidden" name="newamount" value="'.$valtoshow.
'">';
2181 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
2182 print
'</td></tr>'.
"\n";
2185 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
2186 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
2187 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
2188 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
2189 print
'</td></tr>'.
"\n";
2192 $shipToName = $don->getFullName($langs);
2193 $shipToStreet = $don->address;
2194 $shipToCity = $don->town;
2195 $shipToState = $don->state_code;
2196 $shipToCountryCode = $don->country_code;
2197 $shipToZip = $don->zip;
2198 $shipToStreet2 =
'';
2199 $phoneNum = $don->phone;
2200 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
2201 print
'<!-- Shipping address information -->';
2202 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
2203 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
2204 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
2205 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
2206 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
2207 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
2208 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
2209 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
2211 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
2213 if (is_object($don->thirdparty)) {
2214 print
'<input type="hidden" name="thirdparty_id" value="'.$don->thirdparty->id.
'">'.
"\n";
2216 print
'<input type="hidden" name="email" value="'.$don->email.
'">'.
"\n";
2217 $labeldesc = $langs->trans(
"PaymentSubscription");
2218 if (
GETPOST(
'desc',
'alpha')) {
2219 $labeldesc =
GETPOST(
'desc',
'alpha');
2221 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
2224if ($source ==
'organizedeventregistration' && is_object($thirdparty)) {
2225 dol_syslog(
"newpayment.php source=organizedeventregistration", LOG_DEBUG);
2228 $langs->loadLangs(array(
"members",
"eventorganization"));
2230 if (
GETPOST(
'fulltag',
'alpha')) {
2231 $fulltag =
GETPOST(
'fulltag',
'alpha');
2236 $fulltag .=
'.TAG='.$TAG;
2242 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
2243 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
2244 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
2245 print
'</td></tr>'.
"\n";
2248 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Attendee");
2249 print
'</td><td class="CTableRow2"><b>';
2250 print $attendee->email;
2251 print($thirdparty->name ?
' ('.$thirdparty->name.
')' :
'');
2253 print
'</td></tr>'.
"\n";
2255 if (! is_object($attendee->project)) {
2256 $text =
'ErrorProjectNotFound';
2258 $text = $langs->trans(
"PaymentEvent").
' - '.$attendee->project->title;
2262 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
2263 print
'</td><td class="CTableRow2"><b>'.$text.
'</b>';
2264 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($source).
'">';
2265 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag((
string) $invoice->id).
'">';
2266 print
'</td></tr>'.
"\n";
2269 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
2270 print
'</td><td class="CTableRow2">';
2271 $valtoshow = $amount;
2272 print
'<b class="amount">'.price($valtoshow, 1, $langs, 1, -1, -1, $currency).
'</b>';
2273 print
'<input type="hidden" name="amount" value="'.$valtoshow.
'">';
2274 print
'<input type="hidden" name="newamount" value="'.$valtoshow.
'">';
2275 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
2276 print
'</td></tr>'.
"\n";
2279 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
2280 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
2281 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
2282 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
2283 print
'</td></tr>'.
"\n";
2286 $shipToName = $thirdparty->getFullName($langs);
2287 $shipToStreet = $thirdparty->address;
2288 $shipToCity = $thirdparty->town;
2289 $shipToState = $thirdparty->state_code;
2290 $shipToCountryCode = $thirdparty->country_code;
2291 $shipToZip = $thirdparty->zip;
2292 $shipToStreet2 =
'';
2293 $phoneNum = $thirdparty->phone;
2294 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
2295 print
'<!-- Shipping address information -->';
2296 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
2297 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
2298 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
2299 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
2300 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
2301 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
2302 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
2303 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
2305 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
2307 print
'<input type="hidden" name="thirdparty_id" value="'.$thirdparty->id.
'">'.
"\n";
2308 print
'<input type="hidden" name="email" value="'.$thirdparty->email.
'">'.
"\n";
2309 $labeldesc = $langs->trans(
"PaymentSubscription");
2310 if (
GETPOST(
'desc',
'alpha')) {
2311 $labeldesc =
GETPOST(
'desc',
'alpha');
2313 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
2316if ($source ==
'boothlocation') {
2317 dol_syslog(
"newpayment.php source=boothlocation", LOG_DEBUG);
2320 $langs->load(
"members");
2322 if (
GETPOST(
'fulltag',
'alpha')) {
2323 $fulltag =
GETPOST(
'fulltag',
'alpha');
2328 $fulltag .=
'.TAG='.$TAG;
2334 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
2335 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
2336 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
2337 print
'</td></tr>'.
"\n";
2340 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Attendee");
2341 print
'</td><td class="CTableRow2"><b>';
2342 print $thirdparty->name;
2344 print
'</td></tr>'.
"\n";
2347 $text =
'<b>'.$langs->trans(
"PaymentBoothLocation").
'</b>';
2348 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
2349 print
'</td><td class="CTableRow2">'.$text;
2350 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($source).
'">';
2351 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag((
string) $invoice->id).
'">';
2352 print
'</td></tr>'.
"\n";
2355 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
2356 print
'</td><td class="CTableRow2">';
2357 $valtoshow = $amount;
2358 print
'<b class="amount">'.price($valtoshow, 1, $langs, 1, -1, -1, $currency).
'</b>';
2359 print
'<input type="hidden" name="amount" value="'.$valtoshow.
'">';
2360 print
'<input type="hidden" name="newamount" value="'.$valtoshow.
'">';
2361 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
2362 print
'</td></tr>'.
"\n";
2365 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
2366 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
2367 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
2368 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
2369 print
'</td></tr>'.
"\n";
2372 $shipToName = $thirdparty->getFullName($langs);
2373 $shipToStreet = $thirdparty->address;
2374 $shipToCity = $thirdparty->town;
2375 $shipToState = $thirdparty->state_code;
2376 $shipToCountryCode = $thirdparty->country_code;
2377 $shipToZip = $thirdparty->zip;
2378 $shipToStreet2 =
'';
2379 $phoneNum = $thirdparty->phone;
2380 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
2381 print
'<!-- Shipping address information -->';
2382 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
2383 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
2384 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
2385 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
2386 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
2387 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
2388 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
2389 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
2391 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
2393 print
'<input type="hidden" name="thirdparty_id" value="'.$thirdparty->id.
'">'.
"\n";
2394 print
'<input type="hidden" name="email" value="'.$thirdparty->email.
'">'.
"\n";
2395 $labeldesc = $langs->trans(
"PaymentSubscription");
2396 if (
GETPOST(
'desc',
'alpha')) {
2397 $labeldesc =
GETPOST(
'desc',
'alpha');
2399 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
2402if (!$found && !$mesg) {
2403 $mesg = $langs->trans(
"ErrorBadParameters");
2407 print
'<tr><td align="center" colspan="2"><br><div class="warning">'.dol_escape_htmltag($mesg, 1, 1,
'br').
'</div></td></tr>'.
"\n";
2410print
'</table>'.
"\n";
2415if ($action !=
'dopayment') {
2416 dol_syslog(
"newpayment.php action is not dopayment so we show all payment modes", LOG_DEBUG);
2418 if ($found && !$error) {
2421 'source' => $source,
2425 $reshook = $hookmanager->executeHooks(
'doCheckStatus', $parameters, $object, $action);
2428 } elseif ($reshook > 0) {
2429 print $hookmanager->resPrint;
2432 if ($source ==
'order' &&
$object->billed) {
2433 print
'<br><br><div class="amountpaymentcomplete size12x wrapimp">'.$langs->trans(
"OrderBilled").
'</div>';
2434 } elseif ($source ==
'invoice' &&
$object->paye) {
2435 print
'<br><br><div class="amountpaymentcomplete size12x wrapimp">'.$langs->trans(
"InvoicePaid").
'</div>';
2444 print
'<br><br><div class="amountpaymentcomplete size12x wrapimp">'.$langs->trans(
"Abandoned").
'</div>';
2445 } elseif ($source ==
'donation' &&
$object->paid) {
2446 print
'<br><br><div class="amountpaymentcomplete size12x wrapimp">'.$langs->trans(
"DonationPaid").
'</div>';
2449 if (($source ==
'member' || $source ==
'membersubscription') &&
$object->datefin >
dol_now()) {
2450 $langs->load(
"members");
2451 print
'<br><div class="amountpaymentcomplete size12x wrapimp">';
2452 $s = $langs->trans(
"MembershipPaid",
'{s1}');
2453 print str_replace(
'{s1}',
'<span class="nobold">'.
dol_print_date(
$object->datefin,
'day').
'</span>', $s);
2455 print
'<div class="opacitymedium margintoponly">'.$langs->trans(
"PaymentWillBeRecordedForNextPeriod").
'</div>';
2463 'paymentmethod' => $paymentmethod
2465 $reshook = $hookmanager->executeHooks(
'doAddButton', $parameters, $object, $action);
2468 } elseif ($reshook >= 0) {
2469 print $hookmanager->resPrint;
2472 if ((empty($paymentmethod) || $paymentmethod ==
'stripe') &&
isModEnabled(
'stripe')) {
2483 print
'<div class="button buttonpayment" id="div_dopayment_stripe">';
2484 print
'<span class="fa fa-credit-card"></span> ';
2485 print
'<input class="" type="submit" id="dopayment_stripe" name="dopayment_stripe" value="'.$langs->trans(
"StripeDoPayment").
'">';
2486 print
'<input type="hidden" name="noidempotency" value="'.$noidempotency_key.
'">';
2488 print
'<span class="buttonpaymentsmall">'.$langs->trans(
"CreditOrDebitCard").
'</span>';
2491 $( document ).ready(function() {
2492 $("#div_dopayment_stripe").click(function(){
2493 $("#dopayment_stripe").click();
2495 $("#dopayment_stripe").click(function(e){
2496 $("#div_dopayment_stripe").css( \'cursor\', \'wait\' );
2497 e.stopPropagation();
2506 if ((empty($paymentmethod) || $paymentmethod ==
'paypal') &&
isModEnabled(
'paypal')) {
2508 $conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY =
'integral';
2517 print
'<div class="button buttonpayment" id="div_dopayment_paypal">';
2519 print
'<div style="line-height: 1em"> </div>';
2521 print
'<span class="fab fa-paypal"></span> <input class="" type="submit" id="dopayment_paypal" name="dopayment_paypal" value="'.$langs->trans(
"PaypalDoPayment").
'">';
2524 print
'<span class="buttonpaymentsmall">'.$langs->trans(
"CreditOrDebitCard").
'</span><span class="buttonpaymentsmall"> - </span>';
2525 print
'<span class="buttonpaymentsmall">'.$langs->trans(
"PayPalBalance").
'</span>';
2533 $( document ).ready(function() {
2534 $("#div_dopayment_paypal").click(function(){
2535 $("#dopayment_paypal").click();
2537 $("#dopayment_paypal").click(function(e){
2538 $("#div_dopayment_paypal").css( \'cursor\', \'wait\' );
2539 e.stopPropagation();
2555print
'</td></tr>'.
"\n";
2557print
'</table>'.
"\n";
2559print
'</form>'.
"\n";
2567if (preg_match(
'/^dopayment/', $action)) {
2568 dol_syslog(
"newpayment.php action is dopayment... because we clicked on a payment mode - amount = ".$amount);
2572 $_SESSION[
"currencyCodeType"] = $currency;
2573 $_SESSION[
"FinalPaymentAmt"] = $amount;
2574 $_SESSION[
'ipaddress'] = ($remoteip ? $remoteip :
'unknown');
2575 $_SESSION[
"paymentType"] =
'';
2580 if (
GETPOST(
'dopayment_stripe',
'alpha')) {
2588 background-color: white;
2591 border: 1px solid transparent;
2592 box-shadow: 0 1px 3px 0 #e6ebf1;
2593 -webkit-transition: box-shadow 150ms ease;
2594 transition: box-shadow 150ms ease;
2597 .StripeElement--focus {
2598 box-shadow: 0 1px 3px 0 #cfd7df;
2601 .StripeElement--invalid {
2602 border-color: #fa755a;
2605 .StripeElement--webkit-autofill {
2606 background-color: #fefde5 !important;
2612 print
'<!-- Show Stripe form payment-form STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION = ' .
getDolGlobalString(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION').
' STRIPE_USE_NEW_CHECKOUT = ' .
getDolGlobalString(
'STRIPE_USE_NEW_CHECKOUT').
' -->'.
"\n";
2613 print
'<form action="'.$_SERVER[
'REQUEST_URI'].
'" method="POST" id="payment-form">'.
"\n";
2615 print
'<input type="hidden" name="token" value="'.newToken().
'">'.
"\n";
2616 print
'<input type="hidden" name="dopayment_stripe" value="1">'.
"\n";
2617 print
'<input type="hidden" name="action" value="charge">'.
"\n";
2618 print
'<input type="hidden" name="tag" value="'.$TAG.
'">'.
"\n";
2619 print
'<input type="hidden" name="s" value="'.$source.
'">'.
"\n";
2620 print
'<input type="hidden" name="ref" value="'.$REF.
'">'.
"\n";
2621 print
'<input type="hidden" name="fulltag" value="'.$FULLTAG.
'">'.
"\n";
2622 print
'<input type="hidden" name="suffix" value="'.$suffix.
'">'.
"\n";
2623 print
'<input type="hidden" name="securekey" value="'.$SECUREKEY.
'">'.
"\n";
2624 print
'<input type="hidden" name="e" value="'.$entity.
'" />'.
"\n";
2625 print
'<input type="hidden" name="amount" value="'.$amount.
'">'.
"\n";
2626 print
'<input type="hidden" name="currency" value="'.$currency.
'">'.
"\n";
2628 print
'<input type="hidden" name="email" value="'.GETPOST(
'email',
'alpha').
'" />';
2629 print
'<input type="hidden" name="thirdparty_id" value="'.GETPOSTINT(
'thirdparty_id').
'" />';
2630 print
'<input type="hidden" name="lang" value="'.$getpostlang.
'">';
2636 if (array_key_exists(
'ORD', $tmptag) && (
int) $tmptag[
'ORD'] > 0) {
2637 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
2639 $result =
$object->fetch((
int) $tmptag[
'ORD']);
2641 if (
$object->total_ttc != $amount) {
2648 if (!$checkamount) {
2649 dol_syslog(
"Hack attempt detected", LOG_WARNING);
2650 setEventMessages(
'Bad value for amount. Reported as a hack attempt.',
null,
'errors');
2654 require_once DOL_DOCUMENT_ROOT.
'/stripe/class/stripe.class.php';
2656 $service =
'StripeLive';
2659 $service =
'StripeTest';
2664 $stripeacc = $stripe->getStripeAccount($service);
2665 if (is_object($object) && is_object(
$object->thirdparty)) {
2666 $stripecu = $stripe->customerStripe(
$object->thirdparty, $stripeacc, $servicestatus, 1);
2670 dol_syslog(
"newpayment.php Create a Paymentintent for amount=".$amount, LOG_DEBUG);
2676 $paymentintent = $stripe->getPaymentIntent($amount, $currency, ($tag ? $tag : $fulltag),
'Stripe payment: '.$fulltag.(is_object(
$object) ?
' ref='.
$object->
ref :
''),
$object, $stripecu, $stripeacc, $servicestatus, 0,
'automatic', false, null, 0, $noidempotency_key);
2679 if ($stripe->error) {
2690 <table id="dolpaymenttable" summary="Payment form" class="center centpercent">
2691 <tbody><tr><td class="textpublicpayment">';
2694 print
'<div id="payment-request-button"><!-- A Stripe Element will be inserted here. --></div>';
2697 print
'<div class="form-row '.(getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2 ?
'center' :
'left').
'">';
2698 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 1) {
2699 print
'<label for="card-element">'.$langs->trans(
"CreditOrDebitCard").
'</label>';
2700 print
'<br><input id="cardholder-name" class="marginbottomonly" name="cardholder-name" value="" type="text" placeholder="'.$langs->trans(
"CardOwner").
'" autocomplete="off" spellcheck="false" autofocus required>';
2703 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 1) {
2704 print
'<div id="card-element">
2705 <!-- a Stripe Element will be inserted here. -->
2708 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2) {
2709 print
'<div id="payment-element">
2710 <!-- a Stripe Element will be inserted here. -->
2714 print
'<!-- Used to display form errors -->
2715 <div id="card-errors" role="alert"></div>
2719 print
'<button class="button buttonpayment" style="text-align: center; padding-left: 0; padding-right: 0;" id="buttontopay" data-secret="'.(is_object($paymentintent) ? $paymentintent->client_secret :
'').
'">'.$langs->trans(
"ValidatePayment").
'</button>';
2720 print
'<img id="hourglasstopay" class="hidden" src="'.DOL_URL_ROOT.
'/theme/'.
$conf->theme.
'/img/working.gif">';
2722 print
'</td></tr></tbody>';
2727 if (empty($paymentintent)) {
2728 print
'<center>'.$langs->trans(
"Error").
' - Failed to get PaymentIntent</center>';
2730 print
'<input type="hidden" name="paymentintent_id" value="'.$paymentintent->id.
'">';
2735 print
'</form>'.
"\n";
2739 if (empty($stripearrayofkeys[
'publishable_key'])) {
2740 $langs->load(
"errors");
2741 print
info_admin($langs->trans(
"ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv(
"Stripe")), 0, 0,
'error marginleftonly marginrightonly');
2743 print
'<!-- JS Code for Stripe components -->';
2744 print
'<script src="https://js.stripe.com/v3/"></script>'.
"\n";
2745 print
'<!-- urllogofull = '.$urllogofull.
' -->'.
"\n";
2748 print
'<script type="text/javascript">'.
"\n";
2751 $amountstripe = $amount;
2755 $arrayzerounitcurrency = array(
'BIF',
'CLP',
'DJF',
'GNF',
'JPY',
'KMF',
'KRW',
'MGA',
'PYG',
'RWF',
'VND',
'VUV',
'XAF',
'XOF',
'XPF');
2756 if (!in_array($currency, $arrayzerounitcurrency)) {
2757 $amountstripe *= 100;
2761 $metadata = array(
'dol_version' => DOL_VERSION,
'dol_entity' =>
$conf->entity,
'ipaddress' => $ipaddress);
2762 if (is_object($object)) {
2763 $metadata[
'dol_type'] =
$object->element;
2764 $metadata[
'dol_id'] =
$object->id;
2770 $arrayforpaymentintent = array(
2771 'description' =>
'Stripe payment: '.$FULLTAG.($ref ?
' ref='.$ref :
''),
2772 "metadata" => $metadata
2775 $arrayforpaymentintent[
"statement_descriptor"] =
dol_trunc($TAG, 22,
'right',
'UTF-8', 1);
2778 $arrayforcheckout = array(
2779 'payment_method_types' => array(
'card'),
2780 'line_items' => array(array(
2781 'price_data' => array(
2782 'currency' => $currency,
2783 'unit_amount' => $amountstripe,
2784 'product_data' => array(
2785 'name' => $langs->transnoentitiesnoconv(
"Payment").
' '.$TAG,
2786 'description' =>
'Stripe payment: '.$FULLTAG.($ref ?
' ref='.$ref :
''),
2792 'mode' =>
'payment',
2793 'client_reference_id' => $FULLTAG,
2794 'success_url' => $urlok,
2795 'cancel_url' => $urlko,
2796 'payment_intent_data' => $arrayforpaymentintent
2799 $arrayforcheckout[
'customer'] = $stripecu;
2801 $arrayforcheckout[
'customer_email'] =
GETPOST(
'email',
'alpha');
2804 dol_syslog(
"We create a stripe session with \Stripe\Checkout\Session::create for amountstripe=".$amountstripe);
2806 $sessionstripe = \Stripe\Checkout\Session::create($arrayforcheckout);
2808 dol_syslog(
"sessionstripe=".$sessionstripe->id);
2814 $_SESSION[
"currencyCodeType"] = $currency;
2815 $_SESSION[
"paymentType"] =
'';
2816 $_SESSION[
"FinalPaymentAmt"] = $amount;
2817 $_SESSION[
'ipaddress'] = ($remoteip ? $remoteip :
'unknown');
2818 $_SESSION[
'payerID'] = is_object($stripecu) ? $stripecu->id :
'';
2819 $_SESSION[
'TRANSACTIONID'] = $sessionstripe->id;
2821 print $e->getMessage();
2827 if (empty($stripeacc)) {
2829 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php?>');
2833 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php?>', { stripeAccount:
'<?php echo $stripeacc; ?>' });
2838 var elements = stripe.elements();
2846 fontFamily:
'"Helvetica Neue", Helvetica, sans-serif',
2847 fontSmoothing:
'antialiased',
2855 iconColor:
'#fa755a'
2859 var cardElement = elements.create(
'card', {style: style});
2861 <?php
if (!empty($sessionstripe)) { ?>
2863 stripe.redirectToCheckout({
2867 sessionId:
'<?php print $sessionstripe->id; ?>'
2868 }).then(
function (result) {
2875 console.error(
'Failed to create Stripe Checkout Session');
2886 if (empty($stripeacc)) {
2888 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php?>');
2892 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php?>', { stripeAccount:
'<?php echo $stripeacc; ?>' });
2897 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2) {
2899 var cardButton = document.getElementById(
'buttontopay');
2900 var clientSecret = cardButton.dataset.secret;
2901 var options = { clientSecret: clientSecret };
2904 var elements = stripe.elements(options);
2909 var elements = stripe.elements();
2919 fontFamily:
'"Helvetica Neue", Helvetica, sans-serif',
2920 fontSmoothing:
'antialiased',
2928 iconColor:
'#fa755a'
2933 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2) {
2935 var paymentElement = elements.create(
"payment");
2938 paymentElement.mount(
"#payment-element");
2941 var cardButton = document.getElementById(
'buttontopay');
2943 cardButton.addEventListener(
'click',
function(event) {
2944 console.log(
"We click on buttontopay");
2945 event.preventDefault();
2948 jQuery(
'#hourglasstopay').show();
2949 jQuery(
'#buttontopay').hide();
2951 stripe.confirmPayment({
2952 elements,confirmParams: {
2953 return_url:
'<?php echo $urlok; ?>',
2954 payment_method_data: {
2957 <?php
if (
GETPOST(
'email',
'alpha') || (is_object($object) && is_object(
$object->thirdparty) && !empty(
$object->thirdparty->email))) {
2958 ?>, email:
'<?php echo dol_escape_js(GETPOST('email
', 'alpha
') ? GETPOST('email
', 'alpha
') : $object->thirdparty->email); ?>'<?php
2960 <?php
if (is_object($object) && is_object(
$object->thirdparty) && !empty(
$object->thirdparty->phone)) {
2961 ?>, phone:
'<?php echo dol_escape_js($object->thirdparty->phone); ?>'<?php
2963 <?php
if (is_object($object) && is_object(
$object->thirdparty)) {
2965 city:
'<?php echo dol_escape_js($object->thirdparty->town); ?>',
2966 <?php if ($object->thirdparty->country_code) {
2967 ?>country:
'<?php echo dol_escape_js($object->thirdparty->country_code); ?>',<?php
2969 line1:
'<?php echo dol_escape_js(preg_replace('/\s\s+/
', ' ', $object->thirdparty->address)); ?>',
2970 postal_code:
'<?php echo dol_escape_js($object->thirdparty->zip); ?>'
2976 save_payment_method:<?php
if ($stripecu) {
2983 ).then(
function(result) {
2984 console.log(result);
2986 console.log(
"Error on result of handleCardPayment");
2987 jQuery(
'#buttontopay').show();
2988 jQuery(
'#hourglasstopay').hide();
2990 var errorElement = document.getElementById(
'card-errors');
2991 console.log(result);
2992 errorElement.textContent = result.error.message;
2995 console.log(
"No error on result of handleCardPayment, so we submit the form");
2997 jQuery(
'#buttontopay').hide();
2998 jQuery(
'#hourglasstopay').show();
3000 jQuery(
'#payment-form').submit();
3008 var cardElement = elements.create(
'card', {style: style});
3011 cardElement.mount(
'#card-element');
3014 cardElement.addEventListener(
'change',
function(event) {
3015 var displayError = document.getElementById(
'card-errors');
3017 console.log(
"Show event error (like 'Incorrect card number', ...)");
3018 displayError.textContent =
event.error.message;
3020 console.log(
"Reset error message");
3021 displayError.textContent =
'';
3026 var cardholderName = document.getElementById(
'cardholder-name');
3027 var cardButton = document.getElementById(
'buttontopay');
3028 var clientSecret = cardButton.dataset.secret;
3030 cardButton.addEventListener(
'click',
function(event) {
3031 console.log(
"We click on buttontopay");
3032 event.preventDefault();
3034 if (cardholderName.value ==
'')
3036 console.log(
"Field Card holder is empty");
3037 var displayError = document.getElementById(
'card-errors');
3038 displayError.textContent =
'<?php print dol_escape_js($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("CardOwner"))); ?>';
3043 jQuery(
'#hourglasstopay').show();
3044 jQuery(
'#buttontopay').hide();
3046 stripe.handleCardPayment(
3047 clientSecret, cardElement, {
3048 payment_method_data: {
3050 name: cardholderName.value
3051 <?php
if (
GETPOST(
'email',
'alpha') || (is_object($object) && is_object(
$object->thirdparty) && !empty(
$object->thirdparty->email))) {
3052 ?>, email:
'<?php echo dol_escape_js(GETPOST('email
', 'alpha
') ? GETPOST('email
', 'alpha
') : $object->thirdparty->email); ?>'<?php
3054 <?php
if (is_object($object) && is_object(
$object->thirdparty) && !empty(
$object->thirdparty->phone)) {
3055 ?>, phone:
'<?php echo dol_escape_js($object->thirdparty->phone); ?>'<?php
3057 <?php
if (is_object($object) && is_object(
$object->thirdparty)) {
3059 city:
'<?php echo dol_escape_js($object->thirdparty->town); ?>',
3060 <?php if ($object->thirdparty->country_code) {
3061 ?>country:
'<?php echo dol_escape_js($object->thirdparty->country_code); ?>',<?php
3063 line1:
'<?php echo dol_escape_js(preg_replace('/\s\s+/
', ' ', $object->thirdparty->address)); ?>',
3064 postal_code:
'<?php echo dol_escape_js($object->thirdparty->zip); ?>'
3070 save_payment_method:<?php
if ($stripecu) {
3076 ).then(
function(result) {
3077 console.log(result);
3079 console.log(
"Error on result of handleCardPayment");
3080 jQuery(
'#buttontopay').show();
3081 jQuery(
'#hourglasstopay').hide();
3083 var errorElement = document.getElementById(
'card-errors');
3084 errorElement.textContent = result.error.message;
3087 console.log(
"No error on result of handleCardPayment, so we submit the form");
3089 jQuery(
'#buttontopay').hide();
3090 jQuery(
'#hourglasstopay').show();
3092 jQuery(
'#payment-form').submit();
3110 'paymentmethod' => $paymentmethod,
3111 'amount' => $amount,
3112 'currency' => $currency,
3113 'tag' =>
GETPOST(
"tag",
'alpha'),
3114 'dopayment' =>
GETPOST(
'dopayment',
'alpha')
3117 $reshook = $hookmanager->executeHooks(
'doPayment', $parameters, $object, $action);
3120 } elseif ($reshook > 0) {
3121 print $hookmanager->resPrint;
if(! $sortfield) if(! $sortorder) $object
global $dolibarr_main_url_root
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Class to manage members of a foundation.
Class to manage members type.
Class to manage customers orders.
Class for ConferenceOrBoothAttendee.
Class to manage lines of contracts.
Class to manage donations.
Class to manage invoices.
const STATUS_ABANDONED
Classified abandoned and no payment done.
Class to manage products or services.
Class to manage third parties objects (customers, suppliers, prospects...)
Stripe class @TODO No reason to extend CommonObject.
htmlPrintOnlineFooter($fromcompany, $langs, $addformmessage=0, $suffix='', $object=null)
Show footer of company in HTML public pages.
dol_is_file($pathoffile)
Return if path is a file.
dol_now($mode='gmt')
Return date for now.
dol_getIdFromCode($db, $key, $tablename, $fieldkey='code', $fieldid='id', $entityfilter=0, $filters='', $useCache=true)
Return an id or code from a code or id.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
dolExplodeIntoArray($string, $delimiter=';', $kv='=')
Split a string with 2 keys into key array.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
dol_osencode($str)
Return a string encoded into OS filesystem encoding.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dol_sanitizePathName($str, $newstr='_', $unaccent=0, $allowdash=0)
Clean a string to use it as a path name.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
img_mime($file, $titlealt='', $morecss='')
Show MIME img of a file.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_string_unaccent($str)
Clean a string from all accent characters to be used as ref, login or by dol_sanitizeFileName.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0, $nodefault=0)
Return value of a param into GET or POST supervariable.
GETPOSTFLOAT($paramname, $rounding='', $option=2)
Return the value of a $_GET or $_POST supervariable, converted into float.
getDolCurrency()
Return the main currency ('EUR', 'USD', ...)
GETPOSTINT($paramname, $method=0, $nodefault=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_print_error_email($prefixcode, $errormessage='', $errormessages=array(), $morecss='error', $email='')
Show a public email and error code to contact if technical error.
if(!function_exists( 'utf8_encode')) if(!function_exists('utf8_decode')) if(!function_exists( 'str_starts_with')) if(!function_exists('str_ends_with')) if(!function_exists( 'str_contains')) formatLogObject($data)
Return a string serialized to be output on log with dol_syslog() An option allow to output log in one...
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false, $decorate=0)
Output date in a string format according to outputlangs (or langs if not defined).
dol_htmloutput_mesg($mesgstring='', $mesgarray=array(), $style='ok', $keepembedded=0)
Print formatted messages to output (Used to show messages on html output).
getUserRemoteIP($trusted=0)
Return the real IP of remote user.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_trunc($string, $size=40, $trunc='right', $stringencoding='UTF-8', $nodot=0, $display=0)
Truncate a string to a particular length adding '...' if string larger than length.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
isValidEmail($address, $acceptsupervisorkey=0, $acceptuserkey=0)
Return true if email syntax is ok.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='', $textonpictotooltip='', $cssfordropdown='info_admin')
Show information in HTML for admin users or standard users.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
if(!defined( 'CSRFCHECK_WITH_TOKEN'))
print $langs trans("Show") . '< td style="' . $timeColor . '" align="center"> s</td > badge status0 badge status4 badge status3 Error badge status8< td align="center">< span class="badge ' . $badge . '"></span ></td >< td align="center">< a href="#" class="button button-small" onclick="openLogModal(this)" data-req="' . dol_escape_htmltag($reqSafe) . '" data-res="' . dol_escape_htmltag($resSafe) . '" data-err="' . dol_escape_htmltag($errSafe) . '">< span class="fa fa-search-plus"></span ></a ></td ></tr >< tr >< td colspan="' . $colspan . '" class="opacitymedium"></td ></tr ></table ></div ></form > logModal none logModal none s a JSON string
buildzip.php
print_paypal_redirect($paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL, $tag)
Send redirect to paypal to browser.
$conf db name
Only used if Module[ID]Name translation string is not found.
getRandomPassword($generic=false, $replaceambiguouschars=null, $length=32)
Return a generated password using default module.
dol_verifyHash($chain, $hash, $type='0')
Compute a hash and compare it to the given one For backward compatibility reasons,...