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') {
429 if ($paymentmethod ==
'paypal') {
431 $PAYPAL_PAYMENT_TYPE =
'Sale';
434 $origfulltag =
GETPOST(
"fulltag",
'alpha');
435 $shipToName =
GETPOST(
"shipToName",
'alpha');
436 $shipToStreet =
GETPOST(
"shipToStreet",
'alpha');
437 $shipToCity =
GETPOST(
"shipToCity",
'alpha');
438 $shipToState =
GETPOST(
"shipToState",
'alpha');
439 $shipToCountryCode =
GETPOST(
"shipToCountryCode",
'alpha');
440 $shipToZip =
GETPOST(
"shipToZip",
'alpha');
441 $shipToStreet2 =
GETPOST(
"shipToStreet2",
'alpha');
442 $phoneNum =
GETPOST(
"phoneNum",
'alpha');
443 $email =
GETPOST(
"email",
'alpha');
444 $desc =
GETPOST(
"desc",
'alpha');
448 if ($shipToCountryCode ==
'ID' && !preg_match(
'/\-/', $shipToState)) {
449 $shipToState =
'ID-'.$shipToState;
452 if (empty($PAYPAL_API_PRICE) || !is_numeric($PAYPAL_API_PRICE)) {
453 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Amount"));
457 } elseif (!$origfulltag) {
458 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"PaymentCode"));
463 dol_syslog(
"newpayment.php call paypal api and do redirect", LOG_DEBUG);
464 dol_syslog(
"newpayment.php call paypal api and do redirect", LOG_DEBUG, 0,
'_payment');
467 $PAYPAL_API_DEVISE =
"USD";
468 if (!empty($currency)) {
469 $PAYPAL_API_DEVISE = $currency;
474 dol_syslog(
"Submit Paypal form", LOG_DEBUG, 0,
'_payment');
476 dol_syslog(
"PAYPAL_API_USER: $PAYPAL_API_USER", LOG_DEBUG, 0,
'_payment');
477 dol_syslog(
"PAYPAL_API_PASSWORD: ".preg_replace(
'/./',
'*', $PAYPAL_API_PASSWORD), LOG_DEBUG, 0,
'_payment');
478 dol_syslog(
"PAYPAL_API_SIGNATURE: $PAYPAL_API_SIGNATURE", LOG_DEBUG, 0,
'_payment');
479 dol_syslog(
"PAYPAL_API_SANDBOX: $PAYPAL_API_SANDBOX", LOG_DEBUG, 0,
'_payment');
480 dol_syslog(
"PAYPAL_API_OK: $PAYPAL_API_OK", LOG_DEBUG, 0,
'_payment');
481 dol_syslog(
"PAYPAL_API_KO: $PAYPAL_API_KO", LOG_DEBUG, 0,
'_payment');
482 dol_syslog(
"PAYPAL_API_PRICE: $PAYPAL_API_PRICE", LOG_DEBUG, 0,
'_payment');
483 dol_syslog(
"PAYPAL_API_DEVISE: $PAYPAL_API_DEVISE", LOG_DEBUG, 0,
'_payment');
485 dol_syslog(
"shipToName: $shipToName", LOG_DEBUG, 0,
'_payment');
486 dol_syslog(
"shipToStreet: $shipToStreet", LOG_DEBUG, 0,
'_payment');
487 dol_syslog(
"shipToCity: $shipToCity", LOG_DEBUG, 0,
'_payment');
488 dol_syslog(
"shipToState: $shipToState", LOG_DEBUG, 0,
'_payment');
489 dol_syslog(
"shipToCountryCode: $shipToCountryCode", LOG_DEBUG, 0,
'_payment');
490 dol_syslog(
"shipToZip: $shipToZip", LOG_DEBUG, 0,
'_payment');
491 dol_syslog(
"shipToStreet2: $shipToStreet2", LOG_DEBUG, 0,
'_payment');
492 dol_syslog(
"phoneNum: $phoneNum", LOG_DEBUG, 0,
'_payment');
493 dol_syslog(
"email: $email", LOG_DEBUG, 0,
'_payment');
494 dol_syslog(
"desc: $desc", LOG_DEBUG, 0,
'_payment');
496 dol_syslog(
"SCRIPT_URI: ".(empty($_SERVER[
"SCRIPT_URI"]) ?
'' : $_SERVER[
"SCRIPT_URI"]), LOG_DEBUG, 0,
'_payment');
499 $mesg =
print_paypal_redirect((
float) $PAYPAL_API_PRICE, $PAYPAL_API_DEVISE, $PAYPAL_PAYMENT_TYPE, $PAYPAL_API_OK, $PAYPAL_API_KO, $FULLTAG);
506 if ($paymentmethod ==
'stripe') {
507 if (
GETPOST(
'newamount',
'alpha')) {
510 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Amount")),
null,
'errors');
521 $amountstripe = (float) $amount;
525 $arrayzerounitcurrency = array(
'BIF',
'CLP',
'DJF',
'GNF',
'JPY',
'KMF',
'KRW',
'MGA',
'PYG',
'RWF',
'VND',
'VUV',
'XAF',
'XOF',
'XPF');
526 if (!in_array($currency, $arrayzerounitcurrency)) {
527 $amountstripe *= 100;
530 dol_syslog(
"newpayment.php execute action = ".$action.
" STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION=".
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION'), LOG_DEBUG, 0,
'_payment');
534 $stripeToken =
GETPOST(
"stripeToken",
'alpha');
535 $email =
GETPOST(
"email",
'alpha');
539 $vatnumber =
GETPOST(
'vatnumber',
'alpha');
540 $savesource = GETPOSTISSET(
'savesource') ?
GETPOSTINT(
'savesource') : 1;
542 dol_syslog(
"POST stripeToken = ".$stripeToken, LOG_DEBUG, 0,
'_payment');
543 dol_syslog(
"POST email = ".$email, LOG_DEBUG, 0,
'_payment');
544 dol_syslog(
"POST thirdparty_id = ".$thirdparty_id, LOG_DEBUG, 0,
'_payment');
545 dol_syslog(
"POST vatnumber = ".$vatnumber, LOG_DEBUG, 0,
'_payment');
552 if (!
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION')) {
555 'dol_version' => DOL_VERSION,
556 'dol_entity' =>
$conf->entity,
557 'dol_company' =>
$mysoc->name,
558 'dol_tax_num' => $vatnumber,
562 if (!empty($thirdparty_id)) {
563 $metadata[
"dol_thirdparty_id"] = $thirdparty_id;
566 if ($thirdparty_id > 0) {
567 dol_syslog(
"Search existing Stripe customer profile for thirdparty_id=".$thirdparty_id, LOG_DEBUG, 0,
'_payment');
569 $service =
'StripeTest';
572 $service =
'StripeLive';
577 $thirdparty->fetch($thirdparty_id);
580 include_once DOL_DOCUMENT_ROOT.
'/stripe/class/stripe.class.php';
582 $stripeacc = $stripe->getStripeAccount($service);
583 $customer = $stripe->customerStripe($thirdparty, $stripeacc, $servicestatus, 1);
584 if (empty($customer)) {
586 dol_syslog(
'Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.
' and servicestatus = '.$servicestatus.
': '.$stripe->error, LOG_ERR, 0,
'_payment');
587 setEventMessages(
'Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.
' and servicestatus = '.$servicestatus.
': '.$stripe->error,
null,
'errors');
594 $card = $customer->sources->create(array(
"source" => $stripeToken,
"metadata" => $metadata));
596 $card = $stripeToken;
601 dol_syslog(
'Failed to create card record', LOG_WARNING, 0,
'_payment');
605 if (!empty($FULLTAG)) {
606 $metadata[
"FULLTAG"] = $FULLTAG;
608 if (!empty($dol_id)) {
609 $metadata[
"dol_id"] = $dol_id;
611 if (!empty($dol_type)) {
612 $metadata[
"dol_type"] = $dol_type;
615 dol_syslog(
"Create charge on card ".$card->id, LOG_DEBUG, 0,
'_payment');
616 $charge = \Stripe\Charge::create(array(
617 'amount' =>
price2num($amountstripe,
'MU'),
618 'currency' => $currency,
620 'description' =>
'Stripe payment: '.$FULLTAG.
' ref='.$ref,
621 'metadata' => $metadata,
622 'customer' => $customer->id,
624 'statement_descriptor' =>
dol_trunc($FULLTAG, 22,
'right',
'UTF-8', 1),
625 'statement_descriptor_suffix' =>
dol_trunc($FULLTAG, 12,
'right',
'UTF-8', 1),
626 ), array(
"idempotency_key" =>
"$FULLTAG",
"stripe_account" =>
"$stripeacc"));
628 if (empty($charge)) {
630 dol_syslog(
'Failed to charge card', LOG_WARNING, 0,
'_payment');
637 $vatcleaned = $vatnumber ? $vatnumber :
null;
648 dol_syslog(
"Create anonymous customer card profile", LOG_DEBUG, 0,
'_payment');
650 $customer = \Stripe\Customer::create(array(
652 'description' => ($email ?
'Anonymous customer for '.$email :
'Anonymous customer'),
653 'metadata' => $metadata,
654 'source' => $stripeToken
672 if (!empty($FULLTAG)) {
673 $metadata[
"FULLTAG"] = $FULLTAG;
675 if (!empty($dol_id)) {
676 $metadata[
"dol_id"] = $dol_id;
678 if (!empty($dol_type)) {
679 $metadata[
"dol_type"] = $dol_type;
684 dol_syslog(
"Create charge", LOG_DEBUG, 0,
'_payment');
685 $charge = \Stripe\Charge::create(array(
686 'customer' => $customer->id,
687 'amount' =>
price2num($amountstripe,
'MU'),
688 'currency' => $currency,
690 'description' =>
'Stripe payment: '.$FULLTAG.
' ref='.$ref,
691 'metadata' => $metadata,
692 'statement_descriptor' =>
dol_trunc($FULLTAG, 22,
'right',
'UTF-8', 1),
693 'statement_descriptor_suffix' =>
dol_trunc($FULLTAG, 12,
'right',
'UTF-8', 1),
694 ), array(
"idempotency_key" => (
string) $FULLTAG,
"stripe_account" => (
string) $stripeacc));
696 if (empty($charge)) {
698 dol_syslog(
'Failed to charge card', LOG_WARNING, 0,
'_payment');
705 $body = $e->getJsonBody();
706 $err = $body[
'error'];
708 print(
'Status is:'.$e->getHttpStatus().
"\n");
709 print(
'Type is:'.$err[
'type'].
"\n");
710 print(
'Code is:'.$err[
'code'].
"\n");
712 print(
'Param is:'.$err[
'param'].
"\n");
713 print(
'Message is:'.$err[
'message'].
"\n");
716 $errormessage =
"ErrorCard ".$e->getMessage().
" err=".
formatLogObject($err);
717 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
723 $errormessage =
"ErrorRateLimit ".$e->getMessage();
724 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
730 $errormessage =
"ErrorInvalidRequest ".$e->getMessage();
731 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
738 $errormessage =
"ErrorAuthentication ".$e->getMessage();
739 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
745 $errormessage =
"ErrorApiConnection ".$e->getMessage();
746 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
753 $errormessage =
"ErrorBase ".$e->getMessage();
754 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
760 $errormessage =
"ErrorException ".$e->getMessage();
761 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
768 $_SESSION[
'paymentkosessioncode'] = $randomseckey;
770 $urlko .=
'&paymentkosessioncode='.urlencode($randomseckey);
773 $_SESSION[
'paymentoksessioncode'] = $randomseckey;
775 $urlok .=
'&paymentoksessioncode='.urlencode($randomseckey);
780 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION')) {
781 $service =
'StripeTest';
784 $service =
'StripeLive';
787 include_once DOL_DOCUMENT_ROOT.
'/stripe/class/stripe.class.php';
789 $stripeacc = $stripe->getStripeAccount($service);
793 $paymentintent_id =
GETPOST(
"paymentintent_id",
"alpha");
796 global $stripearrayofkeysbyenv;
797 \Stripe\Stripe::setApiKey($stripearrayofkeysbyenv[$servicestatus][
'secret_key']);
800 if (empty($stripeacc)) {
801 $paymentintent = \Stripe\PaymentIntent::retrieve($paymentintent_id);
803 $paymentintent = \Stripe\PaymentIntent::retrieve($paymentintent_id, array(
"stripe_account" => $stripeacc));
807 $errormessage =
"CantRetrievePaymentIntent ".$e->getMessage();
808 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
813 if ($paymentintent->status !=
'succeeded') {
815 $errormessage =
"StatusOfRetrievedIntent is not succeeded: ".$paymentintent->status;
816 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
821 $_SESSION[
'paymentkosessioncode'] = $randomseckey;
823 $urlko .=
'&paymentkosessioncode='.urlencode($randomseckey);
831 $amount = $paymentintent->amount;
834 if (!empty($paymentintent->currency)) {
835 $currency = strtoupper($paymentintent->currency);
839 $arrayzerounitcurrency = array(
'BIF',
'CLP',
'DJF',
'GNF',
'JPY',
'KMF',
'KRW',
'MGA',
'PYG',
'RWF',
'VND',
'VUV',
'XAF',
'XOF',
'XPF');
840 if (!in_array($currency, $arrayzerounitcurrency)) {
845 dol_syslog(
"StatusOfRetrievedIntent is succeeded for amount = ".$amount.
" currency = ".$currency, LOG_DEBUG, 0,
'_payment');
848 $_SESSION[
'paymentoksessioncode'] = $randomseckey;
850 $urlok .=
'&paymentoksessioncode='.urlencode($randomseckey);
857 $_SESSION[
"onlinetoken"] = $stripeToken;
858 $_SESSION[
"FinalPaymentAmt"] = $amount;
859 $_SESSION[
"currencyCodeType"] = $currency;
860 $_SESSION[
"paymentType"] =
'';
861 $_SESSION[
'ipaddress'] = ($remoteip ? $remoteip :
'unknown');
862 $_SESSION[
'TRANSACTIONID'] = (($charge && is_object($charge)) ? $charge->id : (is_object($paymentintent) ? $paymentintent->id :
''));
863 $_SESSION[
'errormessage'] = $errormessage;
864 if (!
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION')) {
865 $_SESSION[
'payerID'] = is_object($customer) ? $customer->id :
'';
867 $_SESSION[
'payerID'] =
'';
870 dol_syslog(
"Action charge stripe STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION=".
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION').
" ip=".$remoteip, LOG_DEBUG, 0,
'_payment');
871 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');
872 dol_syslog(
"_SERVER[SERVER_NAME] = ".(empty($_SERVER[
"SERVER_NAME"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_NAME"])), LOG_DEBUG, 0,
'_payment');
873 dol_syslog(
"_SERVER[SERVER_ADDR] = ".(empty($_SERVER[
"SERVER_ADDR"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_ADDR"])), LOG_DEBUG, 0,
'_payment');
874 dol_syslog(
"session_id=".session_id(), LOG_DEBUG, 0,
'_payment');
875 dol_syslog(
"onlinetoken=".$_SESSION[
"onlinetoken"].
" paymentoksessioncode=".$_SESSION[
"paymentoksessioncode"].
" paymentkosessioncode=".($_SESSION[
"paymentkosessioncode"] ??
''), LOG_DEBUG, 0,
'_payment');
876 dol_syslog(
"FinalPaymentAmt=".$_SESSION[
"FinalPaymentAmt"].
" currencyCodeType=".$_SESSION[
"currencyCodeType"].
" payerID=".$_SESSION[
'payerID'].
" TRANSACTIONID=".$_SESSION[
'TRANSACTIONID'], LOG_DEBUG, 0,
'_payment');
877 dol_syslog(
"FULLTAG=".$FULLTAG, LOG_DEBUG, 0,
'_payment');
878 dol_syslog(
"error=".$error.
" errormessage=".$errormessage, LOG_DEBUG, 0,
'_payment');
879 dol_syslog(
"Now call the redirect to paymentok or paymentko, URL = ".($error ? $urlko : $urlok), LOG_DEBUG, 0,
'_payment');
882 header(
"Location: ".$urlko);
885 header(
"Location: ".$urlok);
892 'paymentmethod' => $paymentmethod,
893 'validpaymentmethod' => &$validpaymentmethod
895$reshook = $hookmanager->executeHooks(
'doPayment', $parameters, $object, $action);
898} elseif ($reshook > 0) {
899 print $hookmanager->resPrint;
912 $head =
'<link rel="stylesheet" type="text/css" href="' .
getDolGlobalString(
'ONLINE_PAYMENT_CSS_URL').
'?lang='.(!empty($getpostlang) ? $getpostlang : $langs->defaultlang).
'">'.
"\n";
915$conf->dol_hide_topmenu = 1;
916$conf->dol_hide_leftmenu = 1;
918$replacemainarea = (empty(
$conf->dol_hide_leftmenu) ?
'<div>' :
'').
'<div>';
919llxHeader($head, $langs->trans(
"PaymentForm"),
'',
'', 0, 0,
'',
'',
'',
'onlinepaymentbody', $replacemainarea);
921dol_syslog(
"newpayment.php show page source=".$source.
" paymentmethod=".$paymentmethod.
' amount='.$amount.
' newamount='.
GETPOST(
"newamount",
'alpha').
" ref=".$ref, LOG_DEBUG, 0,
'_payment');
922dol_syslog(
"_SERVER[HTTP_X_FORWARDED_HOST] = ".(empty($_SERVER[
"HTTP_X_FORWARDED_HOST"]) ?
'' :
dol_escape_htmltag($_SERVER[
"HTTP_X_FORWARDED_HOST"])), LOG_DEBUG, 0,
'_payment');
923dol_syslog(
"_SERVER[SERVER_NAME] = ".(empty($_SERVER[
"SERVER_NAME"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_NAME"])), LOG_DEBUG, 0,
'_payment');
924dol_syslog(
"_SERVER[SERVER_ADDR] = ".(empty($_SERVER[
"SERVER_ADDR"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_ADDR"])), LOG_DEBUG, 0,
'_payment');
925dol_syslog(
"session_id=".session_id(), LOG_DEBUG, 0,
'_payment');
928if ($source && in_array($ref, array(
'member_ref',
'contractline_ref',
'invoice_ref',
'order_ref',
'donation_ref',
''))) {
929 $langs->load(
"errors");
930 dol_print_error_email(
'BADREFINPAYMENTFORM', $langs->trans(
"ErrorBadLinkSourceSetButBadValueForRef", $source, $ref));
940 dol_htmloutput_mesg($langs->trans(
'YouAreCurrentlyInSandboxMode',
'Paypal'), array(),
'warning');
943 dol_htmloutput_mesg($langs->trans(
'YouAreCurrentlyInSandboxMode',
'Stripe'), array(),
'warning');
947print
'<span id="dolpaymentspan"></span>'.
"\n";
948print
'<div class="center">'.
"\n";
949print
'<form id="dolpaymentform" class="center" name="paymentform" action="'.$_SERVER[
"PHP_SELF"].
'" method="POST">'.
"\n";
950print
'<input type="hidden" name="token" value="'.newToken().
'">'.
"\n";
951print
'<input type="hidden" name="action" value="dopayment">'.
"\n";
952print
'<input type="hidden" name="tag" value="'.GETPOST(
"tag",
'alpha').
'">'.
"\n";
953print
'<input type="hidden" name="suffix" value="'.dol_escape_htmltag($suffix).
'">'.
"\n";
954print
'<input type="hidden" name="securekey" value="'.dol_escape_htmltag($SECUREKEY).
'">'.
"\n";
955print
'<input type="hidden" name="e" value="'.$entity.
'" />';
957print
'<input type="hidden" name="lang" value="'.$getpostlang.
'">';
958print
'<input type="hidden" name="ws" value="'.$ws.
'">';
959print
'<input type="hidden" name="reload" id="reload" value="0">';
965$logosmall =
$mysoc->logo_small;
967$paramlogo =
'ONLINE_PAYMENT_LOGO_'.$suffix;
977if (!empty($logosmall) && is_readable(
$conf->mycompany->dir_output.
'/logos/thumbs/'.$logosmall)) {
978 $urllogo = DOL_URL_ROOT.
'/viewimage.php?modulepart=mycompany&entity='.
$conf->entity.
'&file='.urlencode(
'logos/thumbs/'.$logosmall);
979 $urllogofull =
$dolibarr_main_url_root.
'/viewimage.php?modulepart=mycompany&entity='.
$conf->entity.
'&file='.urlencode(
'logos/thumbs/'.$logosmall);
980} elseif (!empty($logo) && is_readable(
$conf->mycompany->dir_output.
'/logos/'.$logo)) {
981 $urllogo = DOL_URL_ROOT.
'/viewimage.php?modulepart=mycompany&entity='.
$conf->entity.
'&file='.urlencode(
'logos/'.$logo);
988 $filehtmlheader =
dol_sanitizePathName(DOL_DATA_ROOT . (
$conf->entity > 1 ?
'/' .
$conf->entity :
'') .
'/website/' . $ws .
'/htmlheaderpayment.html');
994if ($urllogo && !$ws) {
995 print
'<div class="backgreypublicpayment">';
996 print
'<div class="logopublicpayment">';
997 print
'<img id="dolpaymentlogo" src="'.$urllogo.
'"';
1001 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>';
1004} elseif ($creditor && !$ws) {
1005 print
'<div class="backgreypublicpayment">';
1006 print
'<div class="logopublicpayment">';
1012 print
'<div class="backimagepublicpayment">';
1013 print
'<img id="idMAIN_IMAGE_PUBLIC_PAYMENT" src="'.getDolGlobalString(
'MAIN_IMAGE_PUBLIC_PAYMENT').
'">';
1020print
'<!-- Form to send a payment -->'.
"\n";
1021print
'<!-- creditor = '.dol_escape_htmltag((
string) $creditor).
' -->'.
"\n";
1024 print
'<!-- PAYPAL_API_SANDBOX = '.getDolGlobalString(
'PAYPAL_API_SANDBOX').
' -->'.
"\n";
1025 print
'<!-- PAYPAL_API_INTEGRAL_OR_PAYPALONLY = '.getDolGlobalString(
'PAYPAL_API_INTEGRAL_OR_PAYPALONLY').
' -->'.
"\n";
1028 print
'<!-- STRIPE_LIVE = '.getDolGlobalString(
'STRIPE_LIVE').
' -->'.
"\n";
1029 print
'<!-- STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION = '.getDolGlobalString(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION').
' -->'.
"\n";
1031print
'<!-- urlok = '.$urlok.
' -->'.
"\n";
1032print
'<!-- urlko = '.$urlko.
' -->'.
"\n";
1036print
'<table id="dolpublictable" summary="Payment form" class="center">'.
"\n";
1041 $langs->load(
"members");
1043 if (preg_match(
'/^\((.*)\)$/',
getDolGlobalString(
'PAYMENT_NEWFORM_TEXT'), $reg)) {
1044 $text .= $langs->trans($reg[1]).
"<br>\n";
1048 $text =
'<tr><td class="center"><br>'.$text.
'<br></td></tr>'.
"\n";
1051 $text .=
'<tr><td class="textpublicpayment"><br><strong>'.$langs->trans(
"WelcomeOnPaymentPage").
'</strong></td></tr>'.
"\n";
1052 $text .=
'<tr><td class="textpublicpayment"><span class="opacitymedium">'.$langs->trans(
"ThisScreenAllowsYouToPay", (
string) $creditor).
'</span><br><br></td></tr>'.
"\n";
1057print
'<tr><td align="center">';
1058print
'<table class="centpercent left" id="tablepublicpayment">';
1059print
'<tr class="hideonsmartphone"><td colspan="2" class="opacitymedium">'.$langs->trans(
"ThisIsInformationOnPayment").
'...<br><br></td></tr>'.
"\n";
1071 dol_syslog(
"newpayment.php no source", LOG_DEBUG);
1074 $tag =
GETPOST(
"tag",
'alpha');
1075 if (
GETPOST(
'fulltag',
'alpha')) {
1076 $fulltag =
GETPOST(
'fulltag',
'alpha');
1078 $fulltag =
"TAG=".$tag;
1082 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1083 print
'</td><td class="CTableRow2">';
1084 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1085 print
'<b>'.$creditor.
'</b>';
1086 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1087 print
'</td></tr>'.
"\n";
1090 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
1091 if (empty($amount)) {
1092 print
' ('.$langs->trans(
"ToComplete").
')';
1094 print
'</td><td class="CTableRow2">';
1095 if (empty($amount) || !is_numeric($amount)) {
1096 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1097 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1099 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1101 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1102 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1103 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1105 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1106 print
'</td></tr>'.
"\n";
1109 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1110 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1111 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
1112 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1113 print
'</td></tr>'.
"\n";
1121if ($source ==
'order') {
1122 dol_syslog(
"newpayment.php source=order", LOG_DEBUG);
1125 $langs->load(
"orders");
1127 require_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
1130 $result = $order->fetch(0, $ref);
1132 $mesg = $order->error;
1135 $result = $order->fetch_thirdparty($order->socid);
1143 if ($action !=
'dopayment') {
1144 $amount = $order->total_ttc;
1145 if (
GETPOST(
"amount",
'alpha')) {
1146 $amount =
GETPOST(
"amount",
'alpha');
1152 if (
GETPOST(
'fulltag',
'alpha')) {
1153 $fulltag =
GETPOST(
'fulltag',
'alpha');
1155 $fulltag =
'ORD='.$order->id.
'.CUS='.$order->thirdparty->id;
1158 $fulltag .=
'.TAG='.$TAG;
1164 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1165 print
'</td><td class="CTableRow2"';
1166 print
' title="'.dolPrintHTMLForAttribute($langs->transnoentitiesnoconv(
"Country").
'='.
$mysoc->country_code.
' - '.$langs->transnoentitiesnoconv(
"VATIntra").
'='.
$mysoc->tva_intra).
'"';
1168 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1169 print
'<b>'.$creditor.
'</b>';
1170 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1171 print
'</td></tr>'.
"\n";
1174 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
1175 print
'</td><td class="CTableRow2"';
1176 print
' title="'.dolPrintHTMLForAttribute($langs->transnoentitiesnoconv(
"Country").
'='.$order->thirdparty->country_code.
' - '.$langs->transnoentitiesnoconv(
"VATIntra").
'='.$order->thirdparty->tva_intra).
'"';
1178 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1179 print
'<b>'.$order->thirdparty->name.
'</b>';
1180 print
'</td></tr>'.
"\n";
1183 $text =
'<b>'.$langs->trans(
"PaymentOrderRef", $order->ref).
'</b>';
1184 if (
GETPOST(
'desc',
'alpha')) {
1185 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1187 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1188 print
'</td><td class="CTableRow2">'.$text;
1189 print
'<input type="hidden" name="s" value="'.dol_escape_htmltag($source).
'">';
1190 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($order->ref).
'">';
1191 print
'<input type="hidden" name="dol_id" value="'.dol_escape_htmltag((
string) $order->id).
'">';
1192 $directdownloadlink = $order->getLastMainDocLink(
'commande');
1193 if ($directdownloadlink) {
1194 print
'<br><a href="'.$directdownloadlink.
'" rel="nofollow noopener">';
1195 print
img_mime($order->last_main_doc,
'');
1196 print $langs->trans(
"DownloadDocument").
'</a>';
1198 print
'</td></tr>'.
"\n";
1201 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
1202 if (empty($amount)) {
1203 print
' ('.$langs->trans(
"ToComplete").
')';
1205 print
'</td><td class="CTableRow2">';
1206 if (empty($amount) || !is_numeric($amount)) {
1207 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1208 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1210 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1212 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1213 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1214 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1216 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1217 print
'</td></tr>'.
"\n";
1220 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1221 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1222 print
'<input type="hidden" name="tag" value="'.dol_escape_htmltag($tag).
'">';
1223 print
'<input type="hidden" name="fulltag" value="'.dol_escape_htmltag($fulltag).
'">';
1224 print
'</td></tr>'.
"\n";
1227 $shipToName = $order->thirdparty->name;
1228 $shipToStreet = $order->thirdparty->address;
1229 $shipToCity = $order->thirdparty->town;
1230 $shipToState = $order->thirdparty->state_code;
1231 $shipToCountryCode = $order->thirdparty->country_code;
1232 $shipToZip = $order->thirdparty->zip;
1233 $shipToStreet2 =
'';
1234 $phoneNum = $order->thirdparty->phone;
1235 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
1236 print
'<input type="hidden" name="shipToName" value="'.dol_escape_htmltag($shipToName).
'">'.
"\n";
1237 print
'<input type="hidden" name="shipToStreet" value="'.dol_escape_htmltag($shipToStreet).
'">'.
"\n";
1238 print
'<input type="hidden" name="shipToCity" value="'.dol_escape_htmltag($shipToCity).
'">'.
"\n";
1239 print
'<input type="hidden" name="shipToState" value="'.dol_escape_htmltag($shipToState).
'">'.
"\n";
1240 print
'<input type="hidden" name="shipToCountryCode" value="'.dol_escape_htmltag($shipToCountryCode).
'">'.
"\n";
1241 print
'<input type="hidden" name="shipToZip" value="'.dol_escape_htmltag($shipToZip).
'">'.
"\n";
1242 print
'<input type="hidden" name="shipToStreet2" value="'.dol_escape_htmltag($shipToStreet2).
'">'.
"\n";
1243 print
'<input type="hidden" name="phoneNum" value="'.dol_escape_htmltag($phoneNum).
'">'.
"\n";
1245 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
1247 if (is_object($order->thirdparty)) {
1248 print
'<input type="hidden" name="thirdparty_id" value="'.$order->thirdparty->id.
'">'.
"\n";
1250 print
'<input type="hidden" name="email" value="'.$order->thirdparty->email.
'">'.
"\n";
1251 print
'<input type="hidden" name="vatnumber" value="'.dol_escape_htmltag($order->thirdparty->tva_intra).
'">'.
"\n";
1252 $labeldesc = $langs->trans(
"Order").
' '.$order->ref;
1253 if (
GETPOST(
'desc',
'alpha')) {
1254 $labeldesc =
GETPOST(
'desc',
'alpha');
1256 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
1261if ($source ==
'invoice') {
1262 dol_syslog(
"newpayment.php source=invoice", LOG_DEBUG);
1265 $langs->load(
"bills");
1266 $form->load_cache_types_paiements();
1268 require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
1271 $result = $invoice->fetch(0, $ref);
1273 $mesg = $invoice->error;
1276 $result = $invoice->fetch_thirdparty($invoice->socid);
1280 if ($action !=
'dopayment') {
1281 $amount =
price2num($invoice->total_ttc - ($invoice->getSommePaiement() + $invoice->getSumCreditNotesUsed() + $invoice->getSumDepositsUsed()));
1282 if (
GETPOST(
"amount",
'alpha')) {
1283 $amount =
GETPOST(
"amount",
'alpha');
1288 if (
GETPOST(
'fulltag',
'alpha')) {
1289 $fulltag =
GETPOST(
'fulltag',
'alpha');
1291 $fulltag =
'INV='.$invoice->id.
'.CUS='.$invoice->thirdparty->id;
1294 $fulltag .=
'.TAG='.$TAG;
1300 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1301 print
'</td><td class="CTableRow2"';
1302 print
' title="'.dolPrintHTMLForAttribute($langs->transnoentitiesnoconv(
"Country").
'='.
$mysoc->country_code.
' - '.$langs->transnoentitiesnoconv(
"VATIntra").
'='.
$mysoc->tva_intra).
'"';
1304 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1305 print
'<b>'.$creditor.
'</b>';
1306 print
'<input type="hidden" name="creditor" value="'.dol_escape_htmltag((
string) $creditor).
'">';
1307 print
'</td></tr>'.
"\n";
1310 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
1311 print
'</td><td class="CTableRow2"';
1312 print
' title="'.dolPrintHTMLForAttribute($langs->transnoentitiesnoconv(
"Country").
'='.$invoice->thirdparty->country_code.
' - '.$langs->transnoentitiesnoconv(
"VATIntra").
'='.$invoice->thirdparty->tva_intra).
'"';
1314 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1315 print
'<b>'.$invoice->thirdparty->name.
'</b>';
1316 print
'</td></tr>'.
"\n";
1319 $text =
'<b>'.$langs->trans(
"PaymentInvoiceRef", $invoice->ref).
'</b>';
1320 if (
GETPOST(
'desc',
'alpha')) {
1321 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1323 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1324 print
'</td><td class="CTableRow2">'.$text;
1325 print
'<input type="hidden" name="s" value="'.dol_escape_htmltag($source).
'">';
1326 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($invoice->ref).
'">';
1327 print
'<input type="hidden" name="dol_id" value="'.dol_escape_htmltag((
string) $invoice->id).
'">';
1328 $directdownloadlink = $invoice->getLastMainDocLink(
'facture');
1329 if ($directdownloadlink) {
1330 print
'<br><a href="'.$directdownloadlink.
'">';
1331 print
img_mime($invoice->last_main_doc,
'');
1332 print $langs->trans(
"DownloadDocument").
'</a>';
1334 print
'</td></tr>'.
"\n";
1337 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentAmount");
1338 if (empty($amount) && empty(
$object->paye)) {
1339 print
' ('.$langs->trans(
"ToComplete").
')';
1341 print
'</td><td class="CTableRow2">';
1342 if (
$object->type == $object::TYPE_CREDIT_NOTE) {
1343 print
'<b>'.$langs->trans(
"CreditNote").
'</b>';
1344 } elseif (empty(
$object->paye)) {
1345 if (empty($amount) || !is_numeric($amount)) {
1346 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1347 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1348 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1350 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1351 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1352 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1355 print
'<b class="amount">'.price(
$object->total_ttc, 1, $langs, 1, -1, -1, $currency).
'</b>';
1357 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1358 print
'</td></tr>'.
"\n";
1361 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1362 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1363 print
'<input type="hidden" name="tag" value="'.(empty($tag) ?
'' : $tag).
'">';
1364 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1365 print
'</td></tr>'.
"\n";
1368 if ($invoice->status == $invoice::STATUS_VALIDATED && $invoice->mode_reglement_id > 0 && $form->cache_types_paiements[$invoice->mode_reglement_id][
"code"] ==
"VIR") {
1369 print
'<tr class="CTableRow2 center"><td class="CTableRow2" colspan="2">';
1370 print
'<div class="warning maxwidth1000">';
1371 print $langs->trans(
"PayOfBankTransferInvoice");
1373 print
'</td></tr>'.
"\n";
1377 $shipToName = $invoice->thirdparty->name;
1378 $shipToStreet = $invoice->thirdparty->address;
1379 $shipToCity = $invoice->thirdparty->town;
1380 $shipToState = $invoice->thirdparty->state_code;
1381 $shipToCountryCode = $invoice->thirdparty->country_code;
1382 $shipToZip = $invoice->thirdparty->zip;
1383 $shipToStreet2 =
'';
1384 $phoneNum = $invoice->thirdparty->phone;
1385 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
1386 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
1387 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
1388 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
1389 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
1390 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
1391 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
1392 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
1393 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
1395 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
1397 if (is_object($invoice->thirdparty)) {
1398 print
'<input type="hidden" name="thirdparty_id" value="'.$invoice->thirdparty->id.
'">'.
"\n";
1400 print
'<input type="hidden" name="email" value="'.$invoice->thirdparty->email.
'">'.
"\n";
1401 print
'<input type="hidden" name="vatnumber" value="'.$invoice->thirdparty->tva_intra.
'">'.
"\n";
1402 $labeldesc = $langs->trans(
"Invoice").
' '.$invoice->ref;
1403 if (
GETPOST(
'desc',
'alpha')) {
1404 $labeldesc =
GETPOST(
'desc',
'alpha');
1406 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
1410if ($source ==
'contractline') {
1411 dol_syslog(
"newpayment.php source=contractline", LOG_DEBUG);
1414 $langs->load(
"contracts");
1416 require_once DOL_DOCUMENT_ROOT.
'/contrat/class/contrat.class.php';
1421 $result = $contractline->fetch(0, $ref);
1423 $mesg = $contractline->error;
1426 if ($contractline->fk_contrat > 0) {
1427 $result = $contract->fetch($contractline->fk_contrat);
1429 $result = $contract->fetch_thirdparty($contract->socid);
1431 $mesg = $contract->error;
1435 $mesg =
'ErrorRecordNotFound';
1441 if ($action !=
'dopayment') {
1442 $amount = $contractline->total_ttc;
1444 if ($contractline->fk_product &&
getDolGlobalString(
'PAYMENT_USE_NEW_PRICE_FOR_CONTRACTLINES')) {
1446 $result = $product->fetch($contractline->fk_product);
1450 $pu_ht = $product->multiprices[$contract->thirdparty->price_level];
1451 $pu_ttc = $product->multiprices_ttc[$contract->thirdparty->price_level];
1452 $price_base_type = $product->multiprices_base_type[$contract->thirdparty->price_level];
1454 $pu_ht = $product->price;
1455 $pu_ttc = $product->price_ttc;
1456 $price_base_type = $product->price_base_type;
1460 if (empty($amount)) {
1466 if (
GETPOST(
"amount",
'alpha')) {
1467 $amount =
GETPOST(
"amount",
'alpha');
1472 if (
GETPOST(
'fulltag',
'alpha')) {
1473 $fulltag =
GETPOST(
'fulltag',
'alpha');
1475 $fulltag =
'COL='.$contractline->id.
'.CON='.$contract->id.
'.CUS='.$contract->thirdparty->id.
'.DAT='.
dol_print_date(
dol_now(),
'%Y%m%d%H%M%S');
1478 $fulltag .=
'.TAG='.$TAG;
1489 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1490 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
1491 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1492 print
'</td></tr>'.
"\n";
1495 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
1496 print
'</td><td class="CTableRow2"><b>'.$contract->thirdparty->name.
'</b>';
1497 print
'</td></tr>'.
"\n";
1500 $text =
'<b>'.$langs->trans(
"PaymentRenewContractId", $contract->ref, $contractline->ref).
'</b>';
1501 if ($contractline->fk_product > 0) {
1502 $contractline->fetch_product();
1503 $text .=
'<br>'.$contractline->product->ref.($contractline->product->label ?
' - '.$contractline->product->label :
'');
1505 if ($contractline->description) {
1506 $text .=
'<br>'.dol_htmlentitiesbr($contractline->description);
1508 if ($contractline->date_end) {
1509 $text .=
'<br>'.$langs->trans(
"ExpiredSince").
': '.
dol_print_date($contractline->date_end);
1511 if (
GETPOST(
'desc',
'alpha')) {
1512 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1514 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1515 print
'</td><td class="CTableRow2">'.$text;
1516 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($source).
'">';
1517 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($contractline->ref).
'">';
1518 print
'<input type="hidden" name="dol_id" value="'.dol_escape_htmltag((
string) $contractline->id).
'">';
1519 $directdownloadlink = $contract->getLastMainDocLink(
'contract');
1520 if ($directdownloadlink) {
1521 print
'<br><a href="'.$directdownloadlink.
'">';
1522 print
img_mime($contract->last_main_doc,
'');
1523 print $langs->trans(
"DownloadDocument").
'</a>';
1525 print
'</td></tr>'.
"\n";
1528 $label = $langs->trans(
"Quantity");
1531 if ($contractline->fk_product) {
1532 if ($contractline->product->isService() && $contractline->product->duration_value > 0) {
1533 $label = $langs->trans(
"Duration");
1536 if ($contractline->product->duration_value > 1) {
1537 $dur = array(
"h" => $langs->trans(
"Hours"),
"d" => $langs->trans(
"DurationDays"),
"w" => $langs->trans(
"DurationWeeks"),
"m" => $langs->trans(
"DurationMonths"),
"y" => $langs->trans(
"DurationYears"));
1539 $dur = array(
"h" => $langs->trans(
"Hour"),
"d" => $langs->trans(
"DurationDay"),
"w" => $langs->trans(
"DurationWeek"),
"m" => $langs->trans(
"DurationMonth"),
"y" => $langs->trans(
"DurationYear"));
1541 $duration = $contractline->product->duration_value.
' '.$dur[$contractline->product->duration_unit];
1544 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$label.
'</td>';
1545 print
'<td class="CTableRow2"><b>'.($duration ? $duration : $qty).
'</b>';
1546 print
'<input type="hidden" name="newqty" value="'.dol_escape_htmltag((
string) $qty).
'">';
1547 print
'</b></td></tr>'.
"\n";
1550 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
1551 if (empty($amount)) {
1552 print
' ('.$langs->trans(
"ToComplete").
')';
1554 print
'</td><td class="CTableRow2">';
1555 if (empty($amount) || !is_numeric($amount)) {
1556 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1557 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1559 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1561 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1562 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1563 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1565 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1566 print
'</td></tr>'.
"\n";
1569 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1570 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1571 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
1572 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1573 print
'</td></tr>'.
"\n";
1576 $shipToName = $contract->thirdparty->name;
1577 $shipToStreet = $contract->thirdparty->address;
1578 $shipToCity = $contract->thirdparty->town;
1579 $shipToState = $contract->thirdparty->state_code;
1580 $shipToCountryCode = $contract->thirdparty->country_code;
1581 $shipToZip = $contract->thirdparty->zip;
1582 $shipToStreet2 =
'';
1583 $phoneNum = $contract->thirdparty->phone;
1584 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
1585 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
1586 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
1587 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
1588 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
1589 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
1590 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
1591 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
1592 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
1594 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
1596 if (is_object($contract->thirdparty)) {
1597 print
'<input type="hidden" name="thirdparty_id" value="'.$contract->thirdparty->id.
'">'.
"\n";
1599 print
'<input type="hidden" name="email" value="'.$contract->thirdparty->email.
'">'.
"\n";
1600 print
'<input type="hidden" name="vatnumber" value="'.$contract->thirdparty->tva_intra.
'">'.
"\n";
1601 $labeldesc = $langs->trans(
"Contract").
' '.$contract->ref;
1602 if (
GETPOST(
'desc',
'alpha')) {
1603 $labeldesc =
GETPOST(
'desc',
'alpha');
1605 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
1609if ($source ==
'member' || $source ==
'membersubscription') {
1610 dol_syslog(
"newpayment.php source=".$source, LOG_DEBUG);
1612 $newsource =
'member';
1616 $langs->load(
"members");
1618 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent.class.php';
1619 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent_type.class.php';
1620 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/subscription.class.php';
1625 $result = $member->fetch(0, $ref, 0,
'',
true,
true);
1627 $mesg = $member->error;
1630 $member->fetch_thirdparty();
1632 $adht->fetch($member->typeid);
1636 if ($action !=
'dopayment') {
1637 $amount = $member->last_subscription_amount;
1638 if (
GETPOST(
"amount",
'alpha')) {
1642 if (empty($amount)) {
1643 $amount = $adht->amount;
1646 $amount = max(0,
price2num($amount,
'MT'));
1649 if (
GETPOST(
'fulltag',
'alpha')) {
1650 $fulltag =
GETPOST(
'fulltag',
'alpha');
1655 $fulltag .=
'.TAG='.$TAG;
1661 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1662 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
1663 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1664 print
'</td></tr>'.
"\n";
1667 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Member");
1668 print
'</td><td class="CTableRow2">';
1670 if ($member->morphy ==
'mor' && !empty($member->company)) {
1671 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1672 print $member->company;
1674 print
img_picto(
'',
'member',
'class="pictofixedwidth"');
1675 print $member->getFullName($langs);
1678 print
'</td></tr>'.
"\n";
1681 $text =
'<b>'.$langs->trans(
"PaymentSubscription").
'</b>';
1682 if (
GETPOST(
'desc',
'alpha')) {
1683 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1685 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1686 print
'</td><td class="CTableRow2">'.$text;
1687 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($newsource).
'">';
1688 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($member->ref).
'">';
1689 print
'</td></tr>'.
"\n";
1692 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"DateEndSubscription");
1693 print
'</td><td class="CTableRow2">'.dol_print_date($member->datefin,
'day');
1694 print
'</td></tr>'.
"\n";
1697 if ($member->last_subscription_date || $member->last_subscription_amount) {
1700 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"LastSubscriptionDate");
1701 print
'</td><td class="CTableRow2">'.dol_print_date($member->last_subscription_date,
'day');
1702 print
'</td></tr>'.
"\n";
1706 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"LastSubscriptionAmount");
1707 print
'</td><td class="CTableRow2">'.price($member->last_subscription_amount);
1708 print
'</td></tr>'.
"\n";
1710 if (empty($amount) && !
GETPOST(
'newamount',
'alpha')) {
1711 $_GET[
'newamount'] = $member->last_subscription_amount;
1712 $_GET[
'amount'] = $member->last_subscription_amount;
1714 if (!empty($member->last_subscription_amount) && !GETPOSTISSET(
'newamount') && is_numeric($amount)) {
1715 $amount = max($member->last_subscription_amount, $amount);
1719 $amountbytype = $adht->amountByType(1);
1721 $typeid = $adht->id;
1722 $caneditamount = $adht->caneditamount;
1724 if ($member->type) {
1725 $oldtypeid = $member->typeid;
1726 $newtypeid = (int) (GETPOSTISSET(
"typeid") ?
GETPOSTINT(
"typeid") : $member->typeid);
1728 $typeid = $newtypeid;
1729 $adht->fetch($typeid);
1732 $caneditamount = $adht->caneditamount;
1736 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"LastMemberType");
1737 print
'</td><td class="CTableRow2">'.dol_escape_htmltag($member->type);
1738 print
"</td></tr>\n";
1741 $member->typeid = $newtypeid;
1748 $amount = (!empty($amountbytype[$member->typeid])) ? $amountbytype[$member->typeid] : $member->last_subscription_amount;
1750 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"NewSubscription");
1751 print
'</td><td class="CTableRow2">';
1752 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);
1753 print "</td></tr>\n
";
1754 } elseif ($action == 'dopayment') {
1755 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("NewMemberType
");
1756 print '</td><td class="CTableRow2
">'.dol_escape_htmltag($member->type);
1757 print '<input type="hidden
" name="membertypeid
" value="'.$member->typeid.'">';
1758 print "</td></tr>\n
";
1761 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("MemberType
");
1762 print '</td><td class="CTableRow2
">'.dol_escape_htmltag($member->type);
1763 print "</td></tr>\n
";
1768 // Add hook to complete the form
1769 $parameters = array('mode' => 'renewal');
1770 $reshook = $hookmanager->executeHooks('membershipNewSubscriptionPublicForm', $parameters, $object, $action);
1772 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
1776 // TODO Move this into previous hook
1777 if (getDolGlobalString('MEMBER_NEWFORM_DOLIBARRTURNOVER') && $action != 'dopayment') {
1779 if ($member->thirdparty instanceof Societe) {
1780 $country_id = $member->thirdparty->country_id;
1782 $checkednature = $member->morphy;
1783 print '<input type="hidden
" name="moralinput
" id="moralinput
" value="'.$checkednature.'">';
1785 // Is it a Preferred Partner
1787 include_once DOL_DOCUMENT_ROOT.'/partnership/class/partnership.class.php';
1788 $partnership = new Partnership($db);
1789 // @phan-suppress-next-line PhanPluginSuspiciousParamPosition
1790 $result = $partnership->fetch(0, '', 0, (int) $member->thirdparty->id);
1795 $s = $langs->trans("AreYouAPreferredPartner
", '<a href="https:
1796 $s = str_replace(
'{s1}',
'Preferred Partner', $s);
1797 print
'<tr id="trbudget" class="trcompany"><td><label for="pp" class="small">'.$s.
'</label></td><td>';
1798 print
'<input type="checkbox" name="pp" id="pp" value="1"'.((GETPOST(
'reload') ?
GETPOST(
'pp') : $pp) ?
' checked="checked"' :
'').
' class="reposition">';
1801 print
'<tr id="trbudget" class="trcompany"><td class=""><span class="small">'.$langs->trans(
"TurnoverOrBudget").
'</span></td><td>';
1804 if ($country_code ===
'FR' && $checkednature ===
'mor' && (
GETPOST(
'reload') ?
GETPOST(
'pp') : $pp)) {
1805 print
'<input type="text" name="budget" id="budget" class="flat turnover right width100" value="'.GETPOST(
'budget').
'"'.($action !=
'dopayment' ?
' required autofocus' :
'').
'>';
1807 $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+');
1808 print $form->selectarray(
'budget', $arraybudget,
GETPOSTINT(
'budget'), 1, 0, 0, ($checkednature ===
'mor' ?
'required' :
''), 0, 0, 0,
'');
1812 print
'<script type="text/javascript">
1813 jQuery(document).ready(function() {
1816 newamount = initturnover();
1817 jQuery("#amount").val(newamount);
1818 jQuery("#newamount").val(newamount);
1822 jQuery("#selectcountry_id").change(function() {
1823 console.log("We change country (code added for association, replace common code), so we reload page");
1824 jQuery("#budget").val(\'\');
1825 jQuery("#amount").val(\'\');
1826 jQuery("#newamount").val(\'\');
1827 jQuery("#amounthidden").val(\'\');
1829 jQuery("#pp").change(function() {
1830 console.log("We change the preferred partner status");
1831 selectcountry_id = jQuery("#selectcountry_id").val();
1832 morphy = jQuery("#moralinput").is(\':checked\') ? \'mor\' : \'phy\';
1833 jQuery("#budget").val(\'\');
1834 jQuery("#amount").val(\'\');
1835 jQuery("#amounthidden").val(\'\');
1836 jQuery("#newamount").val(\'\');
1837 jQuery("#reload").val(\'1\');
1838 document.paymentform.action.value="";
1839 jQuery("#dolpaymentform").submit();
1841 jQuery("#budget").change(function() {
1842 console.log("Turnover amount has been modified on change");
1843 newamount = initturnover();
1844 jQuery("#amount").val(newamount);
1845 jQuery("#amounthidden").val(newamount);
1846 jQuery("#newamount").val(newamount);
1848 jQuery("#budget").keyup(function() {
1849 console.log("Turnover amount has been modified on keyup");
1850 newamount = initturnover();
1851 jQuery("#amount").val(newamount);
1852 jQuery("#amounthidden").val(newamount);
1853 jQuery("#newamount").val(newamount);
1856 function initturnover() {
1859 //morphy = jQuery("#moralinput").is(\':checked\') ? \'mor\' : \'phy\';
1860 morphy = jQuery("#moralinput").val();
1861 selectcountry_id = '.((int) $country_id).
';
1862 pp = jQuery("#pp").is(\':checked\') ? true : false;
1863 console.log("Set fields according to nature and other properties");
1864 console.log("morphy="+morphy);
1865 console.log("selectcountry_id="+selectcountry_id);
1866 console.log("pp="+pp);
1868 if (morphy == \'phy\') {
1869 jQuery(".amount").val('.((float) $amount).
');
1870 jQuery("#trbirth").show();
1871 jQuery(".trcompany").hide();
1872 jQuery(".trbudget").hide();
1873 newamount = '.((float) $amount).
';
1875 jQuery(".amount").val(\'\');
1876 jQuery("#trbirth").hide();
1877 jQuery(".trcompany").show();
1878 jQuery(".trbudget").show();
1879 jQuery(".hideifautoturnover").hide();
1881 jQuery("#budget").val(\'\');
1884 if (selectcountry_id == 1) {
1885 if (jQuery("#budget").val() == \'\') {
1889 console.log("value selected in input text field is "+jQuery("#budget").val());
1890 newamount = Math.max(Math.round(price2numjs(jQuery("#budget").val()) * 0.005), 50);
1891 console.log("newamount = "+newamount);
1893 console.log("not a pp");
1894 if (jQuery("#budget").val() > 0) {
1895 console.log("value found in budget is "+jQuery("#budget").val());
1896 newamount = jQuery("#budget").val();
1898 jQuery("#budget").val(\'\');
1903 if (jQuery("#budget").val() > 0) {
1904 newamount = jQuery("#budget").val();
1906 jQuery("#budget").val(\'\');
1916 print
'</td></tr>'.
"\n";
1922 $amount = ($member->last_subscription_amount ? $member->last_subscription_amount : (empty($amountbytype[$typeid]) ? 0 : $amountbytype[$typeid]));
1925 if ($caneditamount && !
GETPOST(
'reload') && GETPOSTISSET(
'amount') &&
GETPOSTFLOAT(
'amount',
'MT') > 0) {
1929 if ($caneditamount && !
GETPOST(
'reload') && GETPOSTISSET(
'newamount') &&
GETPOSTFLOAT(
'newamount',
'MT') > 0) {
1933 $amount = max(0, (
float) $amount, (
float)
getDolGlobalInt(
"MEMBER_MIN_AMOUNT"));
1936 $caneditamount = $adht->caneditamount;
1938 $amountformuladescriptionbytype = $adht->amountformuladescriptionbytype(1);
1939 $amountformuladescription = $amountformuladescriptionbytype[$typeid];
1940 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
1943 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>';
1945 if ($amountformuladescription) {
1946 print
'</td><td class="CTableRow2">'.$amountformuladescription;
1947 print
'</td></tr>'.
"\n";
1948 print
'<tr class="CTableRow2"><td class="CTableRow2">';
1949 print
'</td><td class="CTableRow2">';
1951 print
'</td><td class="CTableRow2">';
1954 if ($caneditamount && ($action !=
'dopayment' ||
GETPOST(
'reload'))) {
1955 if (GETPOSTISSET(
'newamount')) {
1956 print
'<input type="text" class="width75 amount" name="newamount" id="newamount" value="'.price(
price2num(
GETPOST(
'newamount'),
'', 2), 1, $langs, 1, -1, -1).
'">';
1958 print
'<input type="text" class="width75 amount" name="newamount" id="newamount" value="'.price($amount, 1, $langs, 1, -1, -1).
'">';
1961 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1962 if ($minimumamount > $amount) {
1963 print
' <span class="opacitymedium small">'. $langs->trans(
"AmountIsLowerToMinimumNotice",
price($minimumamount, 1, $langs, 1, -1, -1, $currency)).
'</span>';
1965 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1967 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1968 print
'<input type="hidden" name="currency" value="'.$currency.
'">'.$langs->trans(
"Currency".
$conf->currency);
1969 print
'</td></tr>'.
"\n";
1972 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1973 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1974 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
1975 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1976 print
'</td></tr>'.
"\n";
1979 $shipToName = $member->getFullName($langs);
1980 $shipToStreet = $member->address;
1981 $shipToCity = $member->town;
1982 $shipToState = $member->state_code;
1983 $shipToCountryCode = $member->country_code;
1984 $shipToZip = $member->zip;
1985 $shipToStreet2 =
'';
1986 $phoneNum = $member->phone;
1987 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
1988 print
'<!-- Shipping address information -->';
1989 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
1990 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
1991 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
1992 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
1993 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
1994 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
1995 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
1996 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
1998 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
2000 if (is_object($member->thirdparty)) {
2001 print
'<input type="hidden" name="thirdparty_id" value="'.$member->thirdparty->id.
'">'.
"\n";
2003 print
'<input type="hidden" name="email" value="'.$member->email.
'">'.
"\n";
2004 $labeldesc = $langs->trans(
"PaymentSubscription");
2005 if (
GETPOST(
'desc',
'alpha')) {
2006 $labeldesc =
GETPOST(
'desc',
'alpha');
2008 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
2012if ($source ==
'donation') {
2013 dol_syslog(
"newpayment.php source=donation", LOG_DEBUG);
2016 $langs->load(
"don");
2018 require_once DOL_DOCUMENT_ROOT.
'/don/class/don.class.php';
2022 $result = $don->fetch((
int) $ref);
2024 $mesg = $don->error;
2027 $don->fetch_thirdparty();
2031 if ($action !=
'dopayment') {
2032 if (
GETPOST(
"amount",
'alpha')) {
2033 $amount =
GETPOST(
"amount",
'alpha');
2035 $amount = $don->getRemainToPay();
2040 if (
GETPOST(
'fulltag',
'alpha')) {
2041 $fulltag =
GETPOST(
'fulltag',
'alpha');
2046 $fulltag .=
'.TAG='.$TAG;
2052 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
2053 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
2054 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
2055 print
'</td></tr>'.
"\n";
2058 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
2059 print
'</td><td class="CTableRow2"><b>';
2060 if ($don->morphy ==
'mor' && !empty($don->societe)) {
2061 print $don->societe;
2063 print $don->getFullName($langs);
2066 print
'</td></tr>'.
"\n";
2069 $text =
'<b>'.$langs->trans(
"PaymentDonation").
'</b>';
2070 if (
GETPOST(
'desc',
'alpha')) {
2071 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
2073 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
2074 print
'</td><td class="CTableRow2">'.$text;
2075 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($source).
'">';
2076 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($don->ref).
'">';
2077 print
'</td></tr>'.
"\n";
2080 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
2081 if (empty($amount)) {
2083 print
' ('.$langs->trans(
"ToComplete");
2086 print
' - <a href="' .
getDolGlobalString(
'DONATION_EXT_URL_SUBSCRIPTION_INFO').
'" rel="external" target="_blank" rel="noopener noreferrer">'.$langs->trans(
"SeeHere").
'</a>';
2092 print
'</td><td class="CTableRow2">';
2094 if (empty($amount) || !is_numeric($amount)) {
2097 if (empty($valtoshow)) {
2109 if (empty($amount) || !is_numeric($amount)) {
2114 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
2115 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.$valtoshow.
'">';
2117 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
2119 $valtoshow = $amount;
2122 $amount = $valtoshow;
2124 print
'<b class="amount">'.price($valtoshow, 1, $langs, 1, -1, -1, $currency).
'</b>';
2125 print
'<input type="hidden" name="amount" value="'.$valtoshow.
'">';
2126 print
'<input type="hidden" name="newamount" value="'.$valtoshow.
'">';
2128 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
2129 print
'</td></tr>'.
"\n";
2132 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
2133 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
2134 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
2135 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
2136 print
'</td></tr>'.
"\n";
2139 $shipToName = $don->getFullName($langs);
2140 $shipToStreet = $don->address;
2141 $shipToCity = $don->town;
2142 $shipToState = $don->state_code;
2143 $shipToCountryCode = $don->country_code;
2144 $shipToZip = $don->zip;
2145 $shipToStreet2 =
'';
2146 $phoneNum = $don->phone;
2147 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
2148 print
'<!-- Shipping address information -->';
2149 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
2150 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
2151 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
2152 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
2153 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
2154 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
2155 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
2156 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
2158 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
2160 if (is_object($don->thirdparty)) {
2161 print
'<input type="hidden" name="thirdparty_id" value="'.$don->thirdparty->id.
'">'.
"\n";
2163 print
'<input type="hidden" name="email" value="'.$don->email.
'">'.
"\n";
2164 $labeldesc = $langs->trans(
"PaymentSubscription");
2165 if (
GETPOST(
'desc',
'alpha')) {
2166 $labeldesc =
GETPOST(
'desc',
'alpha');
2168 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
2171if ($source ==
'organizedeventregistration' && is_object($thirdparty)) {
2172 dol_syslog(
"newpayment.php source=organizedeventregistration", LOG_DEBUG);
2175 $langs->loadLangs(array(
"members",
"eventorganization"));
2177 if (
GETPOST(
'fulltag',
'alpha')) {
2178 $fulltag =
GETPOST(
'fulltag',
'alpha');
2183 $fulltag .=
'.TAG='.$TAG;
2189 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
2190 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
2191 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
2192 print
'</td></tr>'.
"\n";
2195 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Attendee");
2196 print
'</td><td class="CTableRow2"><b>';
2197 print $attendee->email;
2198 print($thirdparty->name ?
' ('.$thirdparty->name.
')' :
'');
2200 print
'</td></tr>'.
"\n";
2202 if (! is_object($attendee->project)) {
2203 $text =
'ErrorProjectNotFound';
2205 $text = $langs->trans(
"PaymentEvent").
' - '.$attendee->project->title;
2209 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
2210 print
'</td><td class="CTableRow2"><b>'.$text.
'</b>';
2211 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($source).
'">';
2212 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag((
string) $invoice->id).
'">';
2213 print
'</td></tr>'.
"\n";
2216 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
2217 print
'</td><td class="CTableRow2">';
2218 $valtoshow = $amount;
2219 print
'<b class="amount">'.price($valtoshow, 1, $langs, 1, -1, -1, $currency).
'</b>';
2220 print
'<input type="hidden" name="amount" value="'.$valtoshow.
'">';
2221 print
'<input type="hidden" name="newamount" value="'.$valtoshow.
'">';
2222 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
2223 print
'</td></tr>'.
"\n";
2226 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
2227 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
2228 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
2229 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
2230 print
'</td></tr>'.
"\n";
2233 $shipToName = $thirdparty->getFullName($langs);
2234 $shipToStreet = $thirdparty->address;
2235 $shipToCity = $thirdparty->town;
2236 $shipToState = $thirdparty->state_code;
2237 $shipToCountryCode = $thirdparty->country_code;
2238 $shipToZip = $thirdparty->zip;
2239 $shipToStreet2 =
'';
2240 $phoneNum = $thirdparty->phone;
2241 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
2242 print
'<!-- Shipping address information -->';
2243 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
2244 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
2245 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
2246 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
2247 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
2248 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
2249 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
2250 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
2252 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
2254 print
'<input type="hidden" name="thirdparty_id" value="'.$thirdparty->id.
'">'.
"\n";
2255 print
'<input type="hidden" name="email" value="'.$thirdparty->email.
'">'.
"\n";
2256 $labeldesc = $langs->trans(
"PaymentSubscription");
2257 if (
GETPOST(
'desc',
'alpha')) {
2258 $labeldesc =
GETPOST(
'desc',
'alpha');
2260 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
2263if ($source ==
'boothlocation') {
2264 dol_syslog(
"newpayment.php source=boothlocation", LOG_DEBUG);
2267 $langs->load(
"members");
2269 if (
GETPOST(
'fulltag',
'alpha')) {
2270 $fulltag =
GETPOST(
'fulltag',
'alpha');
2275 $fulltag .=
'.TAG='.$TAG;
2281 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
2282 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
2283 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
2284 print
'</td></tr>'.
"\n";
2287 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Attendee");
2288 print
'</td><td class="CTableRow2"><b>';
2289 print $thirdparty->name;
2291 print
'</td></tr>'.
"\n";
2294 $text =
'<b>'.$langs->trans(
"PaymentBoothLocation").
'</b>';
2295 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
2296 print
'</td><td class="CTableRow2">'.$text;
2297 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($source).
'">';
2298 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag((
string) $invoice->id).
'">';
2299 print
'</td></tr>'.
"\n";
2302 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
2303 print
'</td><td class="CTableRow2">';
2304 $valtoshow = $amount;
2305 print
'<b class="amount">'.price($valtoshow, 1, $langs, 1, -1, -1, $currency).
'</b>';
2306 print
'<input type="hidden" name="amount" value="'.$valtoshow.
'">';
2307 print
'<input type="hidden" name="newamount" value="'.$valtoshow.
'">';
2308 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
2309 print
'</td></tr>'.
"\n";
2312 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
2313 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
2314 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
2315 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
2316 print
'</td></tr>'.
"\n";
2319 $shipToName = $thirdparty->getFullName($langs);
2320 $shipToStreet = $thirdparty->address;
2321 $shipToCity = $thirdparty->town;
2322 $shipToState = $thirdparty->state_code;
2323 $shipToCountryCode = $thirdparty->country_code;
2324 $shipToZip = $thirdparty->zip;
2325 $shipToStreet2 =
'';
2326 $phoneNum = $thirdparty->phone;
2327 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
2328 print
'<!-- Shipping address information -->';
2329 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
2330 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
2331 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
2332 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
2333 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
2334 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
2335 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
2336 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
2338 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
2340 print
'<input type="hidden" name="thirdparty_id" value="'.$thirdparty->id.
'">'.
"\n";
2341 print
'<input type="hidden" name="email" value="'.$thirdparty->email.
'">'.
"\n";
2342 $labeldesc = $langs->trans(
"PaymentSubscription");
2343 if (
GETPOST(
'desc',
'alpha')) {
2344 $labeldesc =
GETPOST(
'desc',
'alpha');
2346 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
2349if (!$found && !$mesg) {
2350 $mesg = $langs->trans(
"ErrorBadParameters");
2354 print
'<tr><td align="center" colspan="2"><br><div class="warning">'.dol_escape_htmltag($mesg, 1, 1,
'br').
'</div></td></tr>'.
"\n";
2357print
'</table>'.
"\n";
2362if ($action !=
'dopayment') {
2363 dol_syslog(
"newpayment.php action is not dopayment so we show all payment modes", LOG_DEBUG);
2365 if ($found && !$error) {
2368 'source' => $source,
2372 $reshook = $hookmanager->executeHooks(
'doCheckStatus', $parameters, $object, $action);
2375 } elseif ($reshook > 0) {
2376 print $hookmanager->resPrint;
2379 if ($source ==
'order' &&
$object->billed) {
2380 print
'<br><br><div class="amountpaymentcomplete size12x wrapimp">'.$langs->trans(
"OrderBilled").
'</div>';
2381 } elseif ($source ==
'invoice' &&
$object->paye) {
2382 print
'<br><br><div class="amountpaymentcomplete size12x wrapimp">'.$langs->trans(
"InvoicePaid").
'</div>';
2383 } elseif ($source ==
'donation' &&
$object->paid) {
2384 print
'<br><br><div class="amountpaymentcomplete size12x wrapimp">'.$langs->trans(
"DonationPaid").
'</div>';
2387 if (($source ==
'member' || $source ==
'membersubscription') &&
$object->datefin >
dol_now()) {
2388 $langs->load(
"members");
2389 print
'<br><div class="amountpaymentcomplete size12x wrapimp">';
2390 $s = $langs->trans(
"MembershipPaid",
'{s1}');
2391 print str_replace(
'{s1}',
'<span class="nobold">'.
dol_print_date(
$object->datefin,
'day').
'</span>', $s);
2393 print
'<div class="opacitymedium margintoponly">'.$langs->trans(
"PaymentWillBeRecordedForNextPeriod").
'</div>';
2401 'paymentmethod' => $paymentmethod
2403 $reshook = $hookmanager->executeHooks(
'doAddButton', $parameters, $object, $action);
2406 } elseif ($reshook >= 0) {
2407 print $hookmanager->resPrint;
2410 if ((empty($paymentmethod) || $paymentmethod ==
'stripe') &&
isModEnabled(
'stripe')) {
2419 $noidempotency_key = (GETPOSTISSET(
'noidempotency') ?
GETPOSTINT(
'noidempotency') : (
getDolGlobalInt(
'STRIPE_USE_IDEMPOTENCY_BY_DEFAULT') ? 0 : 1));
2421 print
'<div class="button buttonpayment" id="div_dopayment_stripe">';
2422 print
'<span class="fa fa-credit-card"></span> ';
2423 print
'<input class="" type="submit" id="dopayment_stripe" name="dopayment_stripe" value="'.$langs->trans(
"StripeDoPayment").
'">';
2424 print
'<input type="hidden" name="noidempotency" value="'.$noidempotency_key.
'">';
2426 print
'<span class="buttonpaymentsmall">'.$langs->trans(
"CreditOrDebitCard").
'</span>';
2429 $( document ).ready(function() {
2430 $("#div_dopayment_stripe").click(function(){
2431 $("#dopayment_stripe").click();
2433 $("#dopayment_stripe").click(function(e){
2434 $("#div_dopayment_stripe").css( \'cursor\', \'wait\' );
2435 e.stopPropagation();
2444 if ((empty($paymentmethod) || $paymentmethod ==
'paypal') &&
isModEnabled(
'paypal')) {
2446 $conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY =
'integral';
2455 print
'<div class="button buttonpayment" id="div_dopayment_paypal">';
2457 print
'<div style="line-height: 1em"> </div>';
2459 print
'<span class="fab fa-paypal"></span> <input class="" type="submit" id="dopayment_paypal" name="dopayment_paypal" value="'.$langs->trans(
"PaypalDoPayment").
'">';
2462 print
'<span class="buttonpaymentsmall">'.$langs->trans(
"CreditOrDebitCard").
'</span><span class="buttonpaymentsmall"> - </span>';
2463 print
'<span class="buttonpaymentsmall">'.$langs->trans(
"PayPalBalance").
'</span>';
2471 $( document ).ready(function() {
2472 $("#div_dopayment_paypal").click(function(){
2473 $("#dopayment_paypal").click();
2475 $("#dopayment_paypal").click(function(e){
2476 $("#div_dopayment_paypal").css( \'cursor\', \'wait\' );
2477 e.stopPropagation();
2493print
'</td></tr>'.
"\n";
2495print
'</table>'.
"\n";
2497print
'</form>'.
"\n";
2505if (preg_match(
'/^dopayment/', $action)) {
2506 dol_syslog(
"newpayment.php action is dopayment... because we clicked on a payment mode - amount = ".$amount);
2510 $_SESSION[
"currencyCodeType"] = $currency;
2511 $_SESSION[
"FinalPaymentAmt"] = $amount;
2512 $_SESSION[
'ipaddress'] = ($remoteip ? $remoteip :
'unknown');
2513 $_SESSION[
"paymentType"] =
'';
2518 if (
GETPOST(
'dopayment_stripe',
'alpha')) {
2526 background-color: white;
2529 border: 1px solid transparent;
2530 box-shadow: 0 1px 3px 0 #e6ebf1;
2531 -webkit-transition: box-shadow 150ms ease;
2532 transition: box-shadow 150ms ease;
2535 .StripeElement--focus {
2536 box-shadow: 0 1px 3px 0 #cfd7df;
2539 .StripeElement--invalid {
2540 border-color: #fa755a;
2543 .StripeElement--webkit-autofill {
2544 background-color: #fefde5 !important;
2550 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";
2551 print
'<form action="'.$_SERVER[
'REQUEST_URI'].
'" method="POST" id="payment-form">'.
"\n";
2553 print
'<input type="hidden" name="token" value="'.newToken().
'">'.
"\n";
2554 print
'<input type="hidden" name="dopayment_stripe" value="1">'.
"\n";
2555 print
'<input type="hidden" name="action" value="charge">'.
"\n";
2556 print
'<input type="hidden" name="tag" value="'.$TAG.
'">'.
"\n";
2557 print
'<input type="hidden" name="s" value="'.$source.
'">'.
"\n";
2558 print
'<input type="hidden" name="ref" value="'.$REF.
'">'.
"\n";
2559 print
'<input type="hidden" name="fulltag" value="'.$FULLTAG.
'">'.
"\n";
2560 print
'<input type="hidden" name="suffix" value="'.$suffix.
'">'.
"\n";
2561 print
'<input type="hidden" name="securekey" value="'.$SECUREKEY.
'">'.
"\n";
2562 print
'<input type="hidden" name="e" value="'.$entity.
'" />'.
"\n";
2563 print
'<input type="hidden" name="amount" value="'.$amount.
'">'.
"\n";
2564 print
'<input type="hidden" name="currency" value="'.$currency.
'">'.
"\n";
2566 print
'<input type="hidden" name="email" value="'.GETPOST(
'email',
'alpha').
'" />';
2567 print
'<input type="hidden" name="thirdparty_id" value="'.GETPOSTINT(
'thirdparty_id').
'" />';
2568 print
'<input type="hidden" name="lang" value="'.$getpostlang.
'">';
2574 if (array_key_exists(
'ORD', $tmptag) && (
int) $tmptag[
'ORD'] > 0) {
2575 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
2577 $result =
$object->fetch((
int) $tmptag[
'ORD']);
2579 if (
$object->total_ttc != $amount) {
2586 if (!$checkamount) {
2587 dol_syslog(
"Hack attempt detected", LOG_WARNING);
2588 setEventMessages(
'Bad value for amount. Reported as a hack attempt.',
null,
'errors');
2592 require_once DOL_DOCUMENT_ROOT.
'/stripe/class/stripe.class.php';
2594 $service =
'StripeLive';
2597 $service =
'StripeTest';
2602 $stripeacc = $stripe->getStripeAccount($service);
2603 if (is_object($object) && is_object(
$object->thirdparty)) {
2604 $stripecu = $stripe->customerStripe(
$object->thirdparty, $stripeacc, $servicestatus, 1);
2608 dol_syslog(
"newpayment.php Create a Paymentintent for amount=".$amount, LOG_DEBUG);
2612 $noidempotency_key = (GETPOSTISSET(
'noidempotency') ?
GETPOSTINT(
'noidempotency') : (
getDolGlobalInt(
'STRIPE_USE_IDEMPOTENCY_BY_DEFAULT') ? 0 : 1));
2614 $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);
2617 if ($stripe->error) {
2628 <table id="dolpaymenttable" summary="Payment form" class="center centpercent">
2629 <tbody><tr><td class="textpublicpayment">';
2632 print
'<div id="payment-request-button"><!-- A Stripe Element will be inserted here. --></div>';
2635 print
'<div class="form-row '.(getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2 ?
'center' :
'left').
'">';
2636 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 1) {
2637 print
'<label for="card-element">'.$langs->trans(
"CreditOrDebitCard").
'</label>';
2638 print
'<br><input id="cardholder-name" class="marginbottomonly" name="cardholder-name" value="" type="text" placeholder="'.$langs->trans(
"CardOwner").
'" autocomplete="off" spellcheck="false" autofocus required>';
2641 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 1) {
2642 print
'<div id="card-element">
2643 <!-- a Stripe Element will be inserted here. -->
2646 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2) {
2647 print
'<div id="payment-element">
2648 <!-- a Stripe Element will be inserted here. -->
2652 print
'<!-- Used to display form errors -->
2653 <div id="card-errors" role="alert"></div>
2657 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>';
2658 print
'<img id="hourglasstopay" class="hidden" src="'.DOL_URL_ROOT.
'/theme/'.
$conf->theme.
'/img/working.gif">';
2660 print
'</td></tr></tbody>';
2665 if (empty($paymentintent)) {
2666 print
'<center>'.$langs->trans(
"Error").
' - Failed to get PaymentIntent</center>';
2668 print
'<input type="hidden" name="paymentintent_id" value="'.$paymentintent->id.
'">';
2673 print
'</form>'.
"\n";
2677 if (empty($stripearrayofkeys[
'publishable_key'])) {
2678 $langs->load(
"errors");
2679 print
info_admin($langs->trans(
"ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv(
"Stripe")), 0, 0,
'error marginleftonly marginrightonly');
2681 print
'<!-- JS Code for Stripe components -->';
2682 print
'<script src="https://js.stripe.com/v3/"></script>'.
"\n";
2683 print
'<!-- urllogofull = '.$urllogofull.
' -->'.
"\n";
2686 print
'<script type="text/javascript">'.
"\n";
2689 $amountstripe = $amount;
2693 $arrayzerounitcurrency = array(
'BIF',
'CLP',
'DJF',
'GNF',
'JPY',
'KMF',
'KRW',
'MGA',
'PYG',
'RWF',
'VND',
'VUV',
'XAF',
'XOF',
'XPF');
2694 if (!in_array($currency, $arrayzerounitcurrency)) {
2695 $amountstripe *= 100;
2699 $metadata = array(
'dol_version' => DOL_VERSION,
'dol_entity' =>
$conf->entity,
'ipaddress' => $ipaddress);
2700 if (is_object($object)) {
2701 $metadata[
'dol_type'] =
$object->element;
2702 $metadata[
'dol_id'] =
$object->id;
2708 $arrayforpaymentintent = array(
2709 'description' =>
'Stripe payment: '.$FULLTAG.($ref ?
' ref='.$ref :
''),
2710 "metadata" => $metadata
2713 $arrayforpaymentintent[
"statement_descriptor"] =
dol_trunc($TAG, 22,
'right',
'UTF-8', 1);
2716 $arrayforcheckout = array(
2717 'payment_method_types' => array(
'card'),
2718 'line_items' => array(array(
2719 'price_data' => array(
2720 'currency' => $currency,
2721 'unit_amount' => $amountstripe,
2722 'product_data' => array(
2723 'name' => $langs->transnoentitiesnoconv(
"Payment").
' '.$TAG,
2724 'description' =>
'Stripe payment: '.$FULLTAG.($ref ?
' ref='.$ref :
''),
2730 'mode' =>
'payment',
2731 'client_reference_id' => $FULLTAG,
2732 'success_url' => $urlok,
2733 'cancel_url' => $urlko,
2734 'payment_intent_data' => $arrayforpaymentintent
2737 $arrayforcheckout[
'customer'] = $stripecu;
2739 $arrayforcheckout[
'customer_email'] =
GETPOST(
'email',
'alpha');
2742 dol_syslog(
"We create a stripe session with \Stripe\Checkout\Session::create for amountstripe=".$amountstripe);
2744 $sessionstripe = \Stripe\Checkout\Session::create($arrayforcheckout);
2746 dol_syslog(
"sessionstripe=".$sessionstripe->id);
2752 $_SESSION[
"currencyCodeType"] = $currency;
2753 $_SESSION[
"paymentType"] =
'';
2754 $_SESSION[
"FinalPaymentAmt"] = $amount;
2755 $_SESSION[
'ipaddress'] = ($remoteip ? $remoteip :
'unknown');
2756 $_SESSION[
'payerID'] = is_object($stripecu) ? $stripecu->id :
'';
2757 $_SESSION[
'TRANSACTIONID'] = $sessionstripe->id;
2759 print $e->getMessage();
2765 if (empty($stripeacc)) {
2767 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php?>');
2771 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php?>', { stripeAccount:
'<?php echo $stripeacc; ?>' });
2776 var elements = stripe.elements();
2784 fontFamily:
'"Helvetica Neue", Helvetica, sans-serif',
2785 fontSmoothing:
'antialiased',
2793 iconColor:
'#fa755a'
2797 var cardElement = elements.create(
'card', {style: style});
2800 stripe.redirectToCheckout({
2804 sessionId:
'<?php print $sessionstripe->id; ?>'
2805 }).then(
function (result) {
2819 if (empty($stripeacc)) {
2821 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php?>');
2825 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php?>', { stripeAccount:
'<?php echo $stripeacc; ?>' });
2830 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2) {
2832 var cardButton = document.getElementById(
'buttontopay');
2833 var clientSecret = cardButton.dataset.secret;
2834 var options = { clientSecret: clientSecret };
2837 var elements = stripe.elements(options);
2842 var elements = stripe.elements();
2852 fontFamily:
'"Helvetica Neue", Helvetica, sans-serif',
2853 fontSmoothing:
'antialiased',
2861 iconColor:
'#fa755a'
2866 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2) {
2868 var paymentElement = elements.create(
"payment");
2871 paymentElement.mount(
"#payment-element");
2874 var cardButton = document.getElementById(
'buttontopay');
2876 cardButton.addEventListener(
'click',
function(event) {
2877 console.log(
"We click on buttontopay");
2878 event.preventDefault();
2881 jQuery(
'#hourglasstopay').show();
2882 jQuery(
'#buttontopay').hide();
2884 stripe.confirmPayment({
2885 elements,confirmParams: {
2886 return_url:
'<?php echo $urlok; ?>',
2887 payment_method_data: {
2890 <?php
if (
GETPOST(
'email',
'alpha') || (is_object($object) && is_object(
$object->thirdparty) && !empty(
$object->thirdparty->email))) {
2891 ?>, email:
'<?php echo dol_escape_js(GETPOST('email
', 'alpha
') ? GETPOST('email
', 'alpha
') : $object->thirdparty->email); ?>'<?php
2893 <?php
if (is_object($object) && is_object(
$object->thirdparty) && !empty(
$object->thirdparty->phone)) {
2894 ?>, phone:
'<?php echo dol_escape_js($object->thirdparty->phone); ?>'<?php
2896 <?php
if (is_object($object) && is_object(
$object->thirdparty)) {
2898 city:
'<?php echo dol_escape_js($object->thirdparty->town); ?>',
2899 <?php if ($object->thirdparty->country_code) {
2900 ?>country:
'<?php echo dol_escape_js($object->thirdparty->country_code); ?>',<?php
2902 line1:
'<?php echo dol_escape_js(preg_replace('/\s\s+/
', ' ', $object->thirdparty->address)); ?>',
2903 postal_code:
'<?php echo dol_escape_js($object->thirdparty->zip); ?>'
2909 save_payment_method:<?php
if ($stripecu) {
2916 ).then(
function(result) {
2917 console.log(result);
2919 console.log(
"Error on result of handleCardPayment");
2920 jQuery(
'#buttontopay').show();
2921 jQuery(
'#hourglasstopay').hide();
2923 var errorElement = document.getElementById(
'card-errors');
2924 console.log(result);
2925 errorElement.textContent = result.error.message;
2928 console.log(
"No error on result of handleCardPayment, so we submit the form");
2930 jQuery(
'#buttontopay').hide();
2931 jQuery(
'#hourglasstopay').show();
2933 jQuery(
'#payment-form').submit();
2941 var cardElement = elements.create(
'card', {style: style});
2944 cardElement.mount(
'#card-element');
2947 cardElement.addEventListener(
'change',
function(event) {
2948 var displayError = document.getElementById(
'card-errors');
2950 console.log(
"Show event error (like 'Incorrect card number', ...)");
2951 displayError.textContent =
event.error.message;
2953 console.log(
"Reset error message");
2954 displayError.textContent =
'';
2959 var cardholderName = document.getElementById(
'cardholder-name');
2960 var cardButton = document.getElementById(
'buttontopay');
2961 var clientSecret = cardButton.dataset.secret;
2963 cardButton.addEventListener(
'click',
function(event) {
2964 console.log(
"We click on buttontopay");
2965 event.preventDefault();
2967 if (cardholderName.value ==
'')
2969 console.log(
"Field Card holder is empty");
2970 var displayError = document.getElementById(
'card-errors');
2971 displayError.textContent =
'<?php print dol_escape_js($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("CardOwner"))); ?>';
2976 jQuery(
'#hourglasstopay').show();
2977 jQuery(
'#buttontopay').hide();
2979 stripe.handleCardPayment(
2980 clientSecret, cardElement, {
2981 payment_method_data: {
2983 name: cardholderName.value
2984 <?php
if (
GETPOST(
'email',
'alpha') || (is_object($object) && is_object(
$object->thirdparty) && !empty(
$object->thirdparty->email))) {
2985 ?>, email:
'<?php echo dol_escape_js(GETPOST('email
', 'alpha
') ? GETPOST('email
', 'alpha
') : $object->thirdparty->email); ?>'<?php
2987 <?php
if (is_object($object) && is_object(
$object->thirdparty) && !empty(
$object->thirdparty->phone)) {
2988 ?>, phone:
'<?php echo dol_escape_js($object->thirdparty->phone); ?>'<?php
2990 <?php
if (is_object($object) && is_object(
$object->thirdparty)) {
2992 city:
'<?php echo dol_escape_js($object->thirdparty->town); ?>',
2993 <?php if ($object->thirdparty->country_code) {
2994 ?>country:
'<?php echo dol_escape_js($object->thirdparty->country_code); ?>',<?php
2996 line1:
'<?php echo dol_escape_js(preg_replace('/\s\s+/
', ' ', $object->thirdparty->address)); ?>',
2997 postal_code:
'<?php echo dol_escape_js($object->thirdparty->zip); ?>'
3003 save_payment_method:<?php
if ($stripecu) {
3009 ).then(
function(result) {
3010 console.log(result);
3012 console.log(
"Error on result of handleCardPayment");
3013 jQuery(
'#buttontopay').show();
3014 jQuery(
'#hourglasstopay').hide();
3016 var errorElement = document.getElementById(
'card-errors');
3017 errorElement.textContent = result.error.message;
3020 console.log(
"No error on result of handleCardPayment, so we submit the form");
3022 jQuery(
'#buttontopay').hide();
3023 jQuery(
'#hourglasstopay').show();
3025 jQuery(
'#payment-form').submit();
3043 'paymentmethod' => $paymentmethod,
3044 'amount' => $amount,
3045 'currency' => $currency,
3046 'tag' =>
GETPOST(
"tag",
'alpha'),
3047 'dopayment' =>
GETPOST(
'dopayment',
'alpha')
3050 $reshook = $hookmanager->executeHooks(
'doPayment', $parameters, $object, $action);
3053 } elseif ($reshook > 0) {
3054 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.
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)
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='', $textonpictotooltip='')
Show information in HTML for admin users or standard users.
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
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.
GETPOSTFLOAT($paramname, $rounding='', $option=2)
Return the value of a $_GET or $_POST supervariable, converted into float.
getDolCurrency()
Return the main currency ('EUR', 'USD', ...)
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
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.
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.
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'))
Abort invoice creation with a given error message.
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,...