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);
185 $thirdparty =
new Societe($db);
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);
204 $thirdparty =
new Societe($db);
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';
259 $tmpwebsite =
new Website($db);
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>.';
354if ((empty($paymentmethod) || $paymentmethod ==
'stripe') &&
isModEnabled(
'stripe')) {
355 require_once DOL_DOCUMENT_ROOT.
'/stripe/config.php';
364$validpaymentmethod = getValidOnlinePaymentMethods($paymentmethod);
368if ($tmpsource ==
'membersubscription') {
369 $tmpsource =
'member';
375 if ($tmpsource && $REF) {
379 if ($tmpsource != $source) {
393 dol_syslog(
"Warning: PAYMENT_SECURITY_ACCEPT_ANY_TOKEN is on", LOG_WARNING);
394 dol_syslog(
"Warning: PAYMENT_SECURITY_ACCEPT_ANY_TOKEN is on", LOG_WARNING, 0,
'_payment');
399 print
'<div class="error">Bad value for key.</div>';
405if (!empty($paymentmethod) && empty($validpaymentmethod[$paymentmethod])) {
406 print
'Payment module for payment method '.$paymentmethod.
' is not active';
409if (empty($validpaymentmethod)) {
410 print
'No active payment module (Paypal, Stripe, Paybox, ...)';
416$paramcreditor =
'ONLINE_PAYMENT_CREDITOR';
417$paramcreditorlong =
'ONLINE_PAYMENT_CREDITOR_'.$suffix;
432dol_syslog(
"--- newpayment.php action=".$action.
" paymentmethod=".$paymentmethod.
' amount='.$amount.
' newamount='.
GETPOST(
"newamount",
'alpha'), LOG_DEBUG, 0,
'_payment');
434dol_syslog(
"fulltag=".
GETPOST(
"fulltag",
'alpha').
" ws=".$ws.
" urlok=".$urlok, LOG_DEBUG, 0,
'_payment');
437if ($action ==
'dopayment') {
438 if ($paymentmethod ==
'paypal') {
440 $PAYPAL_PAYMENT_TYPE =
'Sale';
443 $origfulltag =
GETPOST(
"fulltag",
'alpha');
444 $shipToName =
GETPOST(
"shipToName",
'alpha');
445 $shipToStreet =
GETPOST(
"shipToStreet",
'alpha');
446 $shipToCity =
GETPOST(
"shipToCity",
'alpha');
447 $shipToState =
GETPOST(
"shipToState",
'alpha');
448 $shipToCountryCode =
GETPOST(
"shipToCountryCode",
'alpha');
449 $shipToZip =
GETPOST(
"shipToZip",
'alpha');
450 $shipToStreet2 =
GETPOST(
"shipToStreet2",
'alpha');
451 $phoneNum =
GETPOST(
"phoneNum",
'alpha');
452 $email =
GETPOST(
"email",
'alpha');
453 $desc =
GETPOST(
"desc",
'alpha');
457 if ($shipToCountryCode ==
'ID' && !preg_match(
'/\-/', $shipToState)) {
458 $shipToState =
'ID-'.$shipToState;
461 if (empty($PAYPAL_API_PRICE) || !is_numeric($PAYPAL_API_PRICE)) {
462 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Amount"));
466 } elseif (!$origfulltag) {
467 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"PaymentCode"));
472 dol_syslog(
"newpayment.php call paypal api and do redirect", LOG_DEBUG);
473 dol_syslog(
"newpayment.php call paypal api and do redirect", LOG_DEBUG, 0,
'_payment');
476 $PAYPAL_API_DEVISE =
"USD";
477 if (!empty($currency)) {
478 $PAYPAL_API_DEVISE = $currency;
483 dol_syslog(
"Submit Paypal form", LOG_DEBUG, 0,
'_payment');
485 dol_syslog(
"PAYPAL_API_USER: $PAYPAL_API_USER", LOG_DEBUG, 0,
'_payment');
486 dol_syslog(
"PAYPAL_API_PASSWORD: ".preg_replace(
'/./',
'*', $PAYPAL_API_PASSWORD), LOG_DEBUG, 0,
'_payment');
487 dol_syslog(
"PAYPAL_API_SIGNATURE: $PAYPAL_API_SIGNATURE", LOG_DEBUG, 0,
'_payment');
488 dol_syslog(
"PAYPAL_API_SANDBOX: $PAYPAL_API_SANDBOX", LOG_DEBUG, 0,
'_payment');
489 dol_syslog(
"PAYPAL_API_OK: $PAYPAL_API_OK", LOG_DEBUG, 0,
'_payment');
490 dol_syslog(
"PAYPAL_API_KO: $PAYPAL_API_KO", LOG_DEBUG, 0,
'_payment');
491 dol_syslog(
"PAYPAL_API_PRICE: $PAYPAL_API_PRICE", LOG_DEBUG, 0,
'_payment');
492 dol_syslog(
"PAYPAL_API_DEVISE: $PAYPAL_API_DEVISE", LOG_DEBUG, 0,
'_payment');
494 dol_syslog(
"shipToName: $shipToName", LOG_DEBUG, 0,
'_payment');
495 dol_syslog(
"shipToStreet: $shipToStreet", LOG_DEBUG, 0,
'_payment');
496 dol_syslog(
"shipToCity: $shipToCity", LOG_DEBUG, 0,
'_payment');
497 dol_syslog(
"shipToState: $shipToState", LOG_DEBUG, 0,
'_payment');
498 dol_syslog(
"shipToCountryCode: $shipToCountryCode", LOG_DEBUG, 0,
'_payment');
499 dol_syslog(
"shipToZip: $shipToZip", LOG_DEBUG, 0,
'_payment');
500 dol_syslog(
"shipToStreet2: $shipToStreet2", LOG_DEBUG, 0,
'_payment');
501 dol_syslog(
"phoneNum: $phoneNum", LOG_DEBUG, 0,
'_payment');
502 dol_syslog(
"email: $email", LOG_DEBUG, 0,
'_payment');
503 dol_syslog(
"desc: $desc", LOG_DEBUG, 0,
'_payment');
505 dol_syslog(
"SCRIPT_URI: ".(empty($_SERVER[
"SCRIPT_URI"]) ?
'' : $_SERVER[
"SCRIPT_URI"]), LOG_DEBUG, 0,
'_payment');
508 $mesg =
print_paypal_redirect((
float) $PAYPAL_API_PRICE, $PAYPAL_API_DEVISE, $PAYPAL_PAYMENT_TYPE, $PAYPAL_API_OK, $PAYPAL_API_KO, $FULLTAG);
515 if ($paymentmethod ==
'paybox') {
520 $origfulltag =
GETPOST(
"fulltag",
'alpha');
523 $urlok = preg_replace(
'/securekey=[^&]+&?/',
'', $urlok);
524 $urlko = preg_replace(
'/securekey=[^&]+&?/',
'', $urlko);
526 if (empty($PRICE) || !is_numeric($PRICE)) {
527 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Amount"));
528 } elseif (empty($email)) {
529 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ONLINE_PAYMENT_SENDEMAIL"));
531 $mesg = $langs->trans(
"ErrorBadEMail", $email);
532 } elseif (!$origfulltag) {
533 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"PaymentCode"));
535 $mesg =
'Error urlok too long '.$urlok.
' (Paybox requires 150, found '.strlen($urlok).
')';
537 $mesg =
'Error urlko too long '.$urlko.
' (Paybox requires 150, found '.strlen($urlok).
')';
541 dol_syslog(
"newpayment.php call paybox api and do redirect", LOG_DEBUG, 0,
'_payment');
543 include_once DOL_DOCUMENT_ROOT.
'/paybox/lib/paybox.lib.php';
551 if ($paymentmethod ==
'stripe') {
552 if (
GETPOST(
'newamount',
'alpha')) {
555 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Amount")),
null,
'errors');
566 $amountstripe = (float) $amount;
570 $arrayzerounitcurrency = array(
'BIF',
'CLP',
'DJF',
'GNF',
'JPY',
'KMF',
'KRW',
'MGA',
'PYG',
'RWF',
'VND',
'VUV',
'XAF',
'XOF',
'XPF');
571 if (!in_array($currency, $arrayzerounitcurrency)) {
572 $amountstripe *= 100;
575 dol_syslog(
"newpayment.php execute action = ".$action.
" STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION=".
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION'), LOG_DEBUG, 0,
'_payment');
576 dol_syslog(
"GET=".var_export($_GET,
true), LOG_DEBUG, 0,
'_payment');
577 dol_syslog(
"POST=".var_export($_POST,
true), LOG_DEBUG, 0,
'_payment');
579 $stripeToken =
GETPOST(
"stripeToken",
'alpha');
580 $email =
GETPOST(
"email",
'alpha');
584 $vatnumber =
GETPOST(
'vatnumber',
'alpha');
585 $savesource = GETPOSTISSET(
'savesource') ?
GETPOSTINT(
'savesource') : 1;
587 dol_syslog(
"POST stripeToken = ".$stripeToken, LOG_DEBUG, 0,
'_payment');
588 dol_syslog(
"POST email = ".$email, LOG_DEBUG, 0,
'_payment');
589 dol_syslog(
"POST thirdparty_id = ".$thirdparty_id, LOG_DEBUG, 0,
'_payment');
590 dol_syslog(
"POST vatnumber = ".$vatnumber, LOG_DEBUG, 0,
'_payment');
597 if (!
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION')) {
600 'dol_version' => DOL_VERSION,
601 'dol_entity' => $conf->entity,
602 'dol_company' =>
$mysoc->name,
603 'dol_tax_num' => $vatnumber,
607 if (!empty($thirdparty_id)) {
608 $metadata[
"dol_thirdparty_id"] = $thirdparty_id;
611 if ($thirdparty_id > 0) {
612 dol_syslog(
"Search existing Stripe customer profile for thirdparty_id=".$thirdparty_id, LOG_DEBUG, 0,
'_payment');
614 $service =
'StripeTest';
617 $service =
'StripeLive';
621 $thirdparty =
new Societe($db);
622 $thirdparty->fetch($thirdparty_id);
625 include_once DOL_DOCUMENT_ROOT.
'/stripe/class/stripe.class.php';
626 $stripe =
new Stripe($db);
627 $stripeacc = $stripe->getStripeAccount($service);
628 $customer = $stripe->customerStripe($thirdparty, $stripeacc, $servicestatus, 1);
629 if (empty($customer)) {
631 dol_syslog(
'Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.
' and servicestatus = '.$servicestatus.
': '.$stripe->error, LOG_ERR, 0,
'_payment');
632 setEventMessages(
'Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.
' and servicestatus = '.$servicestatus.
': '.$stripe->error,
null,
'errors');
639 $card = $customer->sources->create(array(
"source" => $stripeToken,
"metadata" => $metadata));
641 $card = $stripeToken;
646 dol_syslog(
'Failed to create card record', LOG_WARNING, 0,
'_payment');
650 if (!empty($FULLTAG)) {
651 $metadata[
"FULLTAG"] = $FULLTAG;
653 if (!empty($dol_id)) {
654 $metadata[
"dol_id"] = $dol_id;
656 if (!empty($dol_type)) {
657 $metadata[
"dol_type"] = $dol_type;
660 dol_syslog(
"Create charge on card ".$card->id, LOG_DEBUG, 0,
'_payment');
661 $charge = \Stripe\Charge::create(array(
662 'amount' =>
price2num($amountstripe,
'MU'),
663 'currency' => $currency,
665 'description' =>
'Stripe payment: '.$FULLTAG.
' ref='.$ref,
666 'metadata' => $metadata,
667 'customer' => $customer->id,
669 'statement_descriptor_suffix' =>
dol_trunc($FULLTAG, 10,
'right',
'UTF-8', 1),
670 ), array(
"idempotency_key" =>
"$FULLTAG",
"stripe_account" =>
"$stripeacc"));
672 if (empty($charge)) {
674 dol_syslog(
'Failed to charge card', LOG_WARNING, 0,
'_payment');
681 $vatcleaned = $vatnumber ? $vatnumber :
null;
692 dol_syslog(
"Create anonymous customer card profile", LOG_DEBUG, 0,
'_payment');
694 $customer = \Stripe\Customer::create(array(
696 'description' => ($email ?
'Anonymous customer for '.$email :
'Anonymous customer'),
697 'metadata' => $metadata,
698 'source' => $stripeToken
716 if (!empty($FULLTAG)) {
717 $metadata[
"FULLTAG"] = $FULLTAG;
719 if (!empty($dol_id)) {
720 $metadata[
"dol_id"] = $dol_id;
722 if (!empty($dol_type)) {
723 $metadata[
"dol_type"] = $dol_type;
728 dol_syslog(
"Create charge", LOG_DEBUG, 0,
'_payment');
729 $charge = \Stripe\Charge::create(array(
730 'customer' => $customer->id,
731 'amount' =>
price2num($amountstripe,
'MU'),
732 'currency' => $currency,
734 'description' =>
'Stripe payment: '.$FULLTAG.
' ref='.$ref,
735 'metadata' => $metadata,
736 'statement_descriptor' =>
dol_trunc($FULLTAG, 10,
'right',
'UTF-8', 1),
737 ), array(
"idempotency_key" => (
string) $FULLTAG,
"stripe_account" => (
string) $stripeacc));
739 if (empty($charge)) {
741 dol_syslog(
'Failed to charge card', LOG_WARNING, 0,
'_payment');
748 $body = $e->getJsonBody();
749 $err = $body[
'error'];
751 print(
'Status is:'.$e->getHttpStatus().
"\n");
752 print(
'Type is:'.$err[
'type'].
"\n");
753 print(
'Code is:'.$err[
'code'].
"\n");
755 print(
'Param is:'.$err[
'param'].
"\n");
756 print(
'Message is:'.$err[
'message'].
"\n");
759 $errormessage =
"ErrorCard ".$e->getMessage().
" err=".var_export($err,
true);
760 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
766 $errormessage =
"ErrorRateLimit ".$e->getMessage();
767 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
773 $errormessage =
"ErrorInvalidRequest ".$e->getMessage();
774 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
781 $errormessage =
"ErrorAuthentication ".$e->getMessage();
782 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
788 $errormessage =
"ErrorApiConnection ".$e->getMessage();
789 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
796 $errormessage =
"ErrorBase ".$e->getMessage();
797 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
803 $errormessage =
"ErrorException ".$e->getMessage();
804 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
811 $_SESSION[
'paymentkosessioncode'] = $randomseckey;
813 $urlko .=
'&paymentkosessioncode='.urlencode($randomseckey);
816 $_SESSION[
'paymentoksessioncode'] = $randomseckey;
818 $urlok .=
'&paymentoksessioncode='.urlencode($randomseckey);
823 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION')) {
824 $service =
'StripeTest';
827 $service =
'StripeLive';
830 include_once DOL_DOCUMENT_ROOT.
'/stripe/class/stripe.class.php';
831 $stripe =
new Stripe($db);
832 $stripeacc = $stripe->getStripeAccount($service);
836 $paymentintent_id =
GETPOST(
"paymentintent_id",
"alpha");
839 global $stripearrayofkeysbyenv;
840 \Stripe\Stripe::setApiKey($stripearrayofkeysbyenv[$servicestatus][
'secret_key']);
843 if (empty($stripeacc)) {
844 $paymentintent = \Stripe\PaymentIntent::retrieve($paymentintent_id);
846 $paymentintent = \Stripe\PaymentIntent::retrieve($paymentintent_id, array(
"stripe_account" => $stripeacc));
850 $errormessage =
"CantRetrievePaymentIntent ".$e->getMessage();
851 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
860 $paymentintentalreadyused = 0;
861 if (!$error && is_object($paymentintent) && $paymentintent->status ==
'succeeded') {
862 $sql =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"paiement";
863 $sql .=
" WHERE ext_payment_id = '".$db->escape($paymentintent_id).
"'";
864 $sql .=
" OR ext_payment_id LIKE '".$db->escape($paymentintent_id).
":%'";
865 $resql = $db->query($sql);
867 if ($db->num_rows($resql) > 0) {
868 $paymentintentalreadyused = 1;
874 if ($paymentintent->status !=
'succeeded' || $paymentintentalreadyused) {
876 if ($paymentintentalreadyused) {
877 $errormessage =
"PaymentIntent ".$paymentintent_id.
" was already used to record a payment, it cannot be reused for another object";
879 $errormessage =
"StatusOfRetrievedIntent is not succeeded: ".$paymentintent->status;
881 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
886 $_SESSION[
'paymentkosessioncode'] = $randomseckey;
888 $urlko .=
'&paymentkosessioncode='.urlencode($randomseckey);
896 $amount = $paymentintent->amount;
899 if (!empty($paymentintent->currency)) {
900 $currency = strtoupper($paymentintent->currency);
904 $arrayzerounitcurrency = array(
'BIF',
'CLP',
'DJF',
'GNF',
'JPY',
'KMF',
'KRW',
'MGA',
'PYG',
'RWF',
'VND',
'VUV',
'XAF',
'XOF',
'XPF');
905 if (!in_array($currency, $arrayzerounitcurrency)) {
910 dol_syslog(
"StatusOfRetrievedIntent is succeeded for amount = ".$amount.
" currency = ".$currency, LOG_DEBUG, 0,
'_payment');
913 $_SESSION[
'paymentoksessioncode'] = $randomseckey;
915 $urlok .=
'&paymentoksessioncode='.urlencode($randomseckey);
922 $_SESSION[
"onlinetoken"] = $stripeToken;
923 $_SESSION[
"FinalPaymentAmt"] = $amount;
924 $_SESSION[
"currencyCodeType"] = $currency;
925 $_SESSION[
"paymentType"] =
'';
926 $_SESSION[
'ipaddress'] = ($remoteip ? $remoteip :
'unknown');
927 $_SESSION[
'TRANSACTIONID'] = (is_object($charge) ? $charge->id : (is_object($paymentintent) ? $paymentintent->id :
''));
928 $_SESSION[
'errormessage'] = $errormessage;
929 if (!
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION')) {
930 $_SESSION[
'payerID'] = is_object($customer) ? $customer->id :
'';
932 $_SESSION[
'payerID'] =
'';
935 dol_syslog(
"Action charge stripe STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION=".
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION').
" ip=".$remoteip, LOG_DEBUG, 0,
'_payment');
936 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');
937 dol_syslog(
"_SERVER[SERVER_NAME] = ".(empty($_SERVER[
"SERVER_NAME"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_NAME"])), LOG_DEBUG, 0,
'_payment');
938 dol_syslog(
"_SERVER[SERVER_ADDR] = ".(empty($_SERVER[
"SERVER_ADDR"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_ADDR"])), LOG_DEBUG, 0,
'_payment');
939 dol_syslog(
"session_id=".session_id(), LOG_DEBUG, 0,
'_payment');
940 dol_syslog(
"onlinetoken=".$_SESSION[
"onlinetoken"].
" paymentoksessioncode=".$_SESSION[
"paymentoksessioncode"].
" paymentkosessioncode=".($_SESSION[
"paymentkosessioncode"] ??
''), LOG_DEBUG, 0,
'_payment');
941 dol_syslog(
"FinalPaymentAmt=".$_SESSION[
"FinalPaymentAmt"].
" currencyCodeType=".$_SESSION[
"currencyCodeType"].
" payerID=".$_SESSION[
'payerID'].
" TRANSACTIONID=".$_SESSION[
'TRANSACTIONID'], LOG_DEBUG, 0,
'_payment');
942 dol_syslog(
"FULLTAG=".$FULLTAG, LOG_DEBUG, 0,
'_payment');
943 dol_syslog(
"error=".$error.
" errormessage=".$errormessage, LOG_DEBUG, 0,
'_payment');
944 dol_syslog(
"Now call the redirect to paymentok or paymentko, URL = ".($error ? $urlko : $urlok), LOG_DEBUG, 0,
'_payment');
947 header(
"Location: ".$urlko);
950 header(
"Location: ".$urlok);
957 'paymentmethod' => $paymentmethod,
958 'validpaymentmethod' => &$validpaymentmethod
960$reshook = $hookmanager->executeHooks(
'doPayment', $parameters, $object, $action);
963} elseif ($reshook > 0) {
964 print $hookmanager->resPrint;
973$form =
new Form($db);
977 $head =
'<link rel="stylesheet" type="text/css" href="' .
getDolGlobalString(
'ONLINE_PAYMENT_CSS_URL').
'?lang='.(!empty($getpostlang) ? $getpostlang : $langs->defaultlang).
'">'.
"\n";
980$conf->dol_hide_topmenu = 1;
981$conf->dol_hide_leftmenu = 1;
983$replacemainarea = (empty($conf->dol_hide_leftmenu) ?
'<div>' :
'').
'<div>';
984llxHeader($head, $langs->trans(
"PaymentForm"),
'',
'', 0, 0,
'',
'',
'',
'onlinepaymentbody', $replacemainarea);
986dol_syslog(
"newpayment.php show page source=".$source.
" paymentmethod=".$paymentmethod.
' amount='.$amount.
' newamount='.
GETPOST(
"newamount",
'alpha').
" ref=".$ref, LOG_DEBUG, 0,
'_payment');
987dol_syslog(
"_SERVER[HTTP_X_FORWARDED_HOST] = ".(empty($_SERVER[
"HTTP_X_FORWARDED_HOST"]) ?
'' :
dol_escape_htmltag($_SERVER[
"HTTP_X_FORWARDED_HOST"])), LOG_DEBUG, 0,
'_payment');
988dol_syslog(
"_SERVER[SERVER_NAME] = ".(empty($_SERVER[
"SERVER_NAME"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_NAME"])), LOG_DEBUG, 0,
'_payment');
989dol_syslog(
"_SERVER[SERVER_ADDR] = ".(empty($_SERVER[
"SERVER_ADDR"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_ADDR"])), LOG_DEBUG, 0,
'_payment');
990dol_syslog(
"session_id=".session_id(), LOG_DEBUG, 0,
'_payment');
993if ($source && in_array($ref, array(
'member_ref',
'contractline_ref',
'invoice_ref',
'order_ref',
'donation_ref',
''))) {
994 $langs->load(
"errors");
995 dol_print_error_email(
'BADREFINPAYMENTFORM', $langs->trans(
"ErrorBadLinkSourceSetButBadValueForRef", $source, $ref));
1005 dol_htmloutput_mesg($langs->trans(
'YouAreCurrentlyInSandboxMode',
'Paypal'), array(),
'warning');
1008 dol_htmloutput_mesg($langs->trans(
'YouAreCurrentlyInSandboxMode',
'Stripe'), array(),
'warning');
1012print
'<span id="dolpaymentspan"></span>'.
"\n";
1013print
'<div class="center">'.
"\n";
1014print
'<form id="dolpaymentform" class="center" name="paymentform" action="'.$_SERVER[
"PHP_SELF"].
'" method="POST">'.
"\n";
1015print
'<input type="hidden" name="token" value="'.newToken().
'">'.
"\n";
1016print
'<input type="hidden" name="action" value="dopayment">'.
"\n";
1017print
'<input type="hidden" name="tag" value="'.GETPOST(
"tag",
'alpha').
'">'.
"\n";
1018print
'<input type="hidden" name="suffix" value="'.dol_escape_htmltag($suffix).
'">'.
"\n";
1019print
'<input type="hidden" name="securekey" value="'.dol_escape_htmltag($SECUREKEY).
'">'.
"\n";
1020print
'<input type="hidden" name="e" value="'.$entity.
'" />';
1022print
'<input type="hidden" name="lang" value="'.$getpostlang.
'">';
1023print
'<input type="hidden" name="ws" value="'.$ws.
'">';
1024print
'<input type="hidden" name="reload" id="reload" value="0">';
1030$logosmall =
$mysoc->logo_small;
1032$paramlogo =
'ONLINE_PAYMENT_LOGO_'.$suffix;
1042if (!empty($logosmall) && is_readable($conf->mycompany->dir_output.
'/logos/thumbs/'.$logosmall)) {
1043 $urllogo = DOL_URL_ROOT.
'/viewimage.php?modulepart=mycompany&entity='.$conf->entity.
'&file='.urlencode(
'logos/thumbs/'.$logosmall);
1044 $urllogofull =
$dolibarr_main_url_root.
'/viewimage.php?modulepart=mycompany&entity='.$conf->entity.
'&file='.urlencode(
'logos/thumbs/'.$logosmall);
1045} elseif (!empty($logo) && is_readable($conf->mycompany->dir_output.
'/logos/'.$logo)) {
1046 $urllogo = DOL_URL_ROOT.
'/viewimage.php?modulepart=mycompany&entity='.$conf->entity.
'&file='.urlencode(
'logos/'.$logo);
1047 $urllogofull =
$dolibarr_main_url_root.
'/viewimage.php?modulepart=mycompany&entity='.$conf->entity.
'&file='.urlencode(
'logos/'.$logo);
1053 $filehtmlheader =
dol_sanitizePathName(DOL_DATA_ROOT . ($conf->entity > 1 ?
'/' . $conf->entity :
'') .
'/website/' . $ws .
'/htmlheaderpayment.html');
1055 print file_get_contents(
dol_osencode($filehtmlheader));
1059if ($urllogo && !$ws) {
1060 print
'<div class="backgreypublicpayment">';
1061 print
'<div class="logopublicpayment">';
1062 print
'<img id="dolpaymentlogo" src="'.$urllogo.
'"';
1066 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>';
1069} elseif ($creditor && !$ws) {
1070 print
'<div class="backgreypublicpayment">';
1071 print
'<div class="logopublicpayment">';
1077 print
'<div class="backimagepublicpayment">';
1078 print
'<img id="idMAIN_IMAGE_PUBLIC_PAYMENT" src="'.getDolGlobalString(
'MAIN_IMAGE_PUBLIC_PAYMENT').
'">';
1085print
'<!-- Form to send a payment -->'.
"\n";
1086print
'<!-- creditor = '.dol_escape_htmltag((
string) $creditor).
' -->'.
"\n";
1089 print
'<!-- PAYPAL_API_SANDBOX = '.getDolGlobalString(
'PAYPAL_API_SANDBOX').
' -->'.
"\n";
1090 print
'<!-- PAYPAL_API_INTEGRAL_OR_PAYPALONLY = '.getDolGlobalString(
'PAYPAL_API_INTEGRAL_OR_PAYPALONLY').
' -->'.
"\n";
1093 print
'<!-- PAYBOX_CGI_URL = '.getDolGlobalString(
'PAYBOX_CGI_URL_V2').
' -->'.
"\n";
1096 print
'<!-- STRIPE_LIVE = '.getDolGlobalString(
'STRIPE_LIVE').
' -->'.
"\n";
1097 print
'<!-- STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION = '.getDolGlobalString(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION').
' -->'.
"\n";
1099print
'<!-- urlok = '.$urlok.
' -->'.
"\n";
1100print
'<!-- urlko = '.$urlko.
' -->'.
"\n";
1104print
'<table id="dolpublictable" summary="Payment form" class="center">'.
"\n";
1109 $langs->load(
"members");
1111 if (preg_match(
'/^\((.*)\)$/',
getDolGlobalString(
'PAYMENT_NEWFORM_TEXT'), $reg)) {
1112 $text .= $langs->trans($reg[1]).
"<br>\n";
1116 $text =
'<tr><td class="center"><br>'.$text.
'<br></td></tr>'.
"\n";
1119 $text .=
'<tr><td class="textpublicpayment"><br><strong>'.$langs->trans(
"WelcomeOnPaymentPage").
'</strong></td></tr>'.
"\n";
1120 $text .=
'<tr><td class="textpublicpayment"><span class="opacitymedium">'.$langs->trans(
"ThisScreenAllowsYouToPay", (
string) $creditor).
'</span><br><br></td></tr>'.
"\n";
1125print
'<tr><td align="center">';
1126print
'<table class="centpercent left" id="tablepublicpayment">';
1127print
'<tr class="hideonsmartphone"><td colspan="2" class="opacitymedium">'.$langs->trans(
"ThisIsInformationOnPayment").
'...<br><br></td></tr>'.
"\n";
1139 dol_syslog(
"newpayment.php no source", LOG_DEBUG);
1142 $tag =
GETPOST(
"tag",
'alpha');
1143 if (
GETPOST(
'fulltag',
'alpha')) {
1144 $fulltag =
GETPOST(
'fulltag',
'alpha');
1146 $fulltag =
"TAG=".$tag;
1150 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1151 print
'</td><td class="CTableRow2">';
1152 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1153 print
'<b>'.$creditor.
'</b>';
1154 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1155 print
'</td></tr>'.
"\n";
1158 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
1159 if (empty($amount)) {
1160 print
' ('.$langs->trans(
"ToComplete").
')';
1162 print
'</td><td class="CTableRow2">';
1163 if (empty($amount) || !is_numeric($amount)) {
1164 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1165 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1167 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1169 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1170 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1171 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1173 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1174 print
'</td></tr>'.
"\n";
1177 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1178 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1179 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
1180 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1181 print
'</td></tr>'.
"\n";
1189if ($source ==
'order') {
1190 dol_syslog(
"newpayment.php source=order", LOG_DEBUG);
1193 $langs->load(
"orders");
1195 require_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
1198 $result = $order->fetch(0, $ref);
1200 $mesg = $order->error;
1203 $result = $order->fetch_thirdparty($order->socid);
1207 if ($action !=
'dopayment') {
1208 $amount = $order->total_ttc;
1209 if (
GETPOST(
"amount",
'alpha')) {
1210 $amount =
GETPOST(
"amount",
'alpha');
1216 if (
GETPOST(
'fulltag',
'alpha')) {
1217 $fulltag =
GETPOST(
'fulltag',
'alpha');
1219 $fulltag =
'ORD='.$order->id.
'.CUS='.$order->thirdparty->id;
1222 $fulltag .=
'.TAG='.$TAG;
1228 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1229 print
'</td><td class="CTableRow2"';
1230 print
' title="'.dolPrintHTMLForAttribute($langs->transnoentitiesnoconv(
"Country").
'='.
$mysoc->country_code.
' - '.$langs->transnoentitiesnoconv(
"VATIntra").
'='.
$mysoc->tva_intra).
'"';
1232 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1233 print
'<b>'.$creditor.
'</b>';
1234 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1235 print
'</td></tr>'.
"\n";
1238 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
1239 print
'</td><td class="CTableRow2"';
1240 print
' title="'.dolPrintHTMLForAttribute($langs->transnoentitiesnoconv(
"Country").
'='.$order->thirdparty->country_code.
' - '.$langs->transnoentitiesnoconv(
"VATIntra").
'='.$order->thirdparty->tva_intra).
'"';
1242 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1243 print
'<b>'.$order->thirdparty->name.
'</b>';
1244 print
'</td></tr>'.
"\n";
1247 $text =
'<b>'.$langs->trans(
"PaymentOrderRef", $order->ref).
'</b>';
1248 if (
GETPOST(
'desc',
'alpha')) {
1249 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1251 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1252 print
'</td><td class="CTableRow2">'.$text;
1253 print
'<input type="hidden" name="s" value="'.dol_escape_htmltag($source).
'">';
1254 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($order->ref).
'">';
1255 print
'<input type="hidden" name="dol_id" value="'.dol_escape_htmltag((
string) $order->id).
'">';
1256 $directdownloadlink = $order->getLastMainDocLink(
'commande');
1257 if ($directdownloadlink) {
1258 print
'<br><a href="'.$directdownloadlink.
'" rel="nofollow noopener">';
1259 print
img_mime($order->last_main_doc,
'');
1260 print $langs->trans(
"DownloadDocument").
'</a>';
1262 print
'</td></tr>'.
"\n";
1265 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
1266 if (empty($amount)) {
1267 print
' ('.$langs->trans(
"ToComplete").
')';
1269 print
'</td><td class="CTableRow2">';
1270 if (empty($amount) || !is_numeric($amount)) {
1271 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1272 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1274 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1276 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1277 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1278 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1280 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1281 print
'</td></tr>'.
"\n";
1284 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1285 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1286 print
'<input type="hidden" name="tag" value="'.dol_escape_htmltag($tag).
'">';
1287 print
'<input type="hidden" name="fulltag" value="'.dol_escape_htmltag($fulltag).
'">';
1288 print
'</td></tr>'.
"\n";
1291 $shipToName = $order->thirdparty->name;
1292 $shipToStreet = $order->thirdparty->address;
1293 $shipToCity = $order->thirdparty->town;
1294 $shipToState = $order->thirdparty->state_code;
1295 $shipToCountryCode = $order->thirdparty->country_code;
1296 $shipToZip = $order->thirdparty->zip;
1297 $shipToStreet2 =
'';
1298 $phoneNum = $order->thirdparty->phone;
1299 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
1300 print
'<input type="hidden" name="shipToName" value="'.dol_escape_htmltag($shipToName).
'">'.
"\n";
1301 print
'<input type="hidden" name="shipToStreet" value="'.dol_escape_htmltag($shipToStreet).
'">'.
"\n";
1302 print
'<input type="hidden" name="shipToCity" value="'.dol_escape_htmltag($shipToCity).
'">'.
"\n";
1303 print
'<input type="hidden" name="shipToState" value="'.dol_escape_htmltag($shipToState).
'">'.
"\n";
1304 print
'<input type="hidden" name="shipToCountryCode" value="'.dol_escape_htmltag($shipToCountryCode).
'">'.
"\n";
1305 print
'<input type="hidden" name="shipToZip" value="'.dol_escape_htmltag($shipToZip).
'">'.
"\n";
1306 print
'<input type="hidden" name="shipToStreet2" value="'.dol_escape_htmltag($shipToStreet2).
'">'.
"\n";
1307 print
'<input type="hidden" name="phoneNum" value="'.dol_escape_htmltag($phoneNum).
'">'.
"\n";
1309 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
1311 if (is_object($order->thirdparty)) {
1312 print
'<input type="hidden" name="thirdparty_id" value="'.$order->thirdparty->id.
'">'.
"\n";
1314 print
'<input type="hidden" name="email" value="'.$order->thirdparty->email.
'">'.
"\n";
1315 print
'<input type="hidden" name="vatnumber" value="'.dol_escape_htmltag($order->thirdparty->tva_intra).
'">'.
"\n";
1316 $labeldesc = $langs->trans(
"Order").
' '.$order->ref;
1317 if (
GETPOST(
'desc',
'alpha')) {
1318 $labeldesc =
GETPOST(
'desc',
'alpha');
1320 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
1325if ($source ==
'invoice') {
1326 dol_syslog(
"newpayment.php source=invoice", LOG_DEBUG);
1329 $langs->load(
"bills");
1330 $form->load_cache_types_paiements();
1332 require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
1335 $result = $invoice->fetch(0, $ref);
1337 $mesg = $invoice->error;
1340 $result = $invoice->fetch_thirdparty($invoice->socid);
1344 if ($action !=
'dopayment') {
1345 $amount =
price2num($invoice->total_ttc - ($invoice->getSommePaiement() + $invoice->getSumCreditNotesUsed() + $invoice->getSumDepositsUsed()));
1346 if (
GETPOST(
"amount",
'alpha')) {
1347 $amount =
GETPOST(
"amount",
'alpha');
1352 if (
GETPOST(
'fulltag',
'alpha')) {
1353 $fulltag =
GETPOST(
'fulltag',
'alpha');
1355 $fulltag =
'INV='.$invoice->id.
'.CUS='.$invoice->thirdparty->id;
1358 $fulltag .=
'.TAG='.$TAG;
1364 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1365 print
'</td><td class="CTableRow2"';
1366 print
' title="'.dolPrintHTMLForAttribute($langs->transnoentitiesnoconv(
"Country").
'='.
$mysoc->country_code.
' - '.$langs->transnoentitiesnoconv(
"VATIntra").
'='.
$mysoc->tva_intra).
'"';
1368 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1369 print
'<b>'.$creditor.
'</b>';
1370 print
'<input type="hidden" name="creditor" value="'.dol_escape_htmltag((
string) $creditor).
'">';
1371 print
'</td></tr>'.
"\n";
1374 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
1375 print
'</td><td class="CTableRow2"';
1376 print
' title="'.dolPrintHTMLForAttribute($langs->transnoentitiesnoconv(
"Country").
'='.$invoice->thirdparty->country_code.
' - '.$langs->transnoentitiesnoconv(
"VATIntra").
'='.$invoice->thirdparty->tva_intra).
'"';
1378 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1379 print
'<b>'.$invoice->thirdparty->name.
'</b>';
1380 print
'</td></tr>'.
"\n";
1383 $text =
'<b>'.$langs->trans(
"PaymentInvoiceRef", $invoice->ref).
'</b>';
1384 if (
GETPOST(
'desc',
'alpha')) {
1385 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1387 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1388 print
'</td><td class="CTableRow2">'.$text;
1389 print
'<input type="hidden" name="s" value="'.dol_escape_htmltag($source).
'">';
1390 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($invoice->ref).
'">';
1391 print
'<input type="hidden" name="dol_id" value="'.dol_escape_htmltag((
string) $invoice->id).
'">';
1392 $directdownloadlink = $invoice->getLastMainDocLink(
'facture');
1393 if ($directdownloadlink) {
1394 print
'<br><a href="'.$directdownloadlink.
'">';
1395 print
img_mime($invoice->last_main_doc,
'');
1396 print $langs->trans(
"DownloadDocument").
'</a>';
1398 print
'</td></tr>'.
"\n";
1401 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentAmount");
1402 if (empty($amount) && empty(
$object->paye)) {
1403 print
' ('.$langs->trans(
"ToComplete").
')';
1405 print
'</td><td class="CTableRow2">';
1406 if (
$object->type == $object::TYPE_CREDIT_NOTE) {
1407 print
'<b>'.$langs->trans(
"CreditNote").
'</b>';
1408 } elseif (empty(
$object->paye)) {
1409 if (empty($amount) || !is_numeric($amount)) {
1410 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1411 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1412 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1414 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1415 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1416 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1419 print
'<b class="amount">'.price(
$object->total_ttc, 1, $langs, 1, -1, -1, $currency).
'</b>';
1421 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1422 print
'</td></tr>'.
"\n";
1425 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1426 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1427 print
'<input type="hidden" name="tag" value="'.(empty($tag) ?
'' : $tag).
'">';
1428 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1429 print
'</td></tr>'.
"\n";
1432 if ($invoice->status == $invoice::STATUS_VALIDATED && $invoice->mode_reglement_id > 0 && $form->cache_types_paiements[$invoice->mode_reglement_id][
"code"] ==
"VIR") {
1433 print
'<tr class="CTableRow2 center"><td class="CTableRow2" colspan="2">';
1434 print
'<div class="warning maxwidth1000">';
1435 print $langs->trans(
"PayOfBankTransferInvoice");
1437 print
'</td></tr>'.
"\n";
1441 $shipToName = $invoice->thirdparty->name;
1442 $shipToStreet = $invoice->thirdparty->address;
1443 $shipToCity = $invoice->thirdparty->town;
1444 $shipToState = $invoice->thirdparty->state_code;
1445 $shipToCountryCode = $invoice->thirdparty->country_code;
1446 $shipToZip = $invoice->thirdparty->zip;
1447 $shipToStreet2 =
'';
1448 $phoneNum = $invoice->thirdparty->phone;
1449 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
1450 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
1451 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
1452 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
1453 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
1454 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
1455 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
1456 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
1457 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
1459 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
1461 if (is_object($invoice->thirdparty)) {
1462 print
'<input type="hidden" name="thirdparty_id" value="'.$invoice->thirdparty->id.
'">'.
"\n";
1464 print
'<input type="hidden" name="email" value="'.$invoice->thirdparty->email.
'">'.
"\n";
1465 print
'<input type="hidden" name="vatnumber" value="'.$invoice->thirdparty->tva_intra.
'">'.
"\n";
1466 $labeldesc = $langs->trans(
"Invoice").
' '.$invoice->ref;
1467 if (
GETPOST(
'desc',
'alpha')) {
1468 $labeldesc =
GETPOST(
'desc',
'alpha');
1470 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
1474if ($source ==
'contractline') {
1475 dol_syslog(
"newpayment.php source=contractline", LOG_DEBUG);
1478 $langs->load(
"contracts");
1480 require_once DOL_DOCUMENT_ROOT.
'/contrat/class/contrat.class.php';
1485 $result = $contractline->fetch(0, $ref);
1487 $mesg = $contractline->error;
1490 if ($contractline->fk_contrat > 0) {
1491 $result = $contract->fetch($contractline->fk_contrat);
1493 $result = $contract->fetch_thirdparty($contract->socid);
1495 $mesg = $contract->error;
1499 $mesg =
'ErrorRecordNotFound';
1505 if ($action !=
'dopayment') {
1506 $amount = $contractline->total_ttc;
1508 if ($contractline->fk_product &&
getDolGlobalString(
'PAYMENT_USE_NEW_PRICE_FOR_CONTRACTLINES')) {
1510 $result = $product->fetch($contractline->fk_product);
1514 $pu_ht = $product->multiprices[$contract->thirdparty->price_level];
1515 $pu_ttc = $product->multiprices_ttc[$contract->thirdparty->price_level];
1516 $price_base_type = $product->multiprices_base_type[$contract->thirdparty->price_level];
1518 $pu_ht = $product->price;
1519 $pu_ttc = $product->price_ttc;
1520 $price_base_type = $product->price_base_type;
1524 if (empty($amount)) {
1530 if (
GETPOST(
"amount",
'alpha')) {
1531 $amount =
GETPOST(
"amount",
'alpha');
1536 if (
GETPOST(
'fulltag',
'alpha')) {
1537 $fulltag =
GETPOST(
'fulltag',
'alpha');
1539 $fulltag =
'COL='.$contractline->id.
'.CON='.$contract->id.
'.CUS='.$contract->thirdparty->id.
'.DAT='.
dol_print_date(
dol_now(),
'%Y%m%d%H%M%S');
1542 $fulltag .=
'.TAG='.$TAG;
1553 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1554 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
1555 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1556 print
'</td></tr>'.
"\n";
1559 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
1560 print
'</td><td class="CTableRow2"><b>'.$contract->thirdparty->name.
'</b>';
1561 print
'</td></tr>'.
"\n";
1564 $text =
'<b>'.$langs->trans(
"PaymentRenewContractId", $contract->ref, $contractline->ref).
'</b>';
1565 if ($contractline->fk_product > 0) {
1566 $contractline->fetch_product();
1567 $text .=
'<br>'.$contractline->product->ref.($contractline->product->label ?
' - '.$contractline->product->label :
'');
1569 if ($contractline->description) {
1570 $text .=
'<br>'.dol_htmlentitiesbr($contractline->description);
1572 if ($contractline->date_end) {
1573 $text .=
'<br>'.$langs->trans(
"ExpiredSince").
': '.
dol_print_date($contractline->date_end);
1575 if (
GETPOST(
'desc',
'alpha')) {
1576 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1578 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1579 print
'</td><td class="CTableRow2">'.$text;
1580 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($source).
'">';
1581 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($contractline->ref).
'">';
1582 print
'<input type="hidden" name="dol_id" value="'.dol_escape_htmltag((
string) $contractline->id).
'">';
1583 $directdownloadlink = $contract->getLastMainDocLink(
'contract');
1584 if ($directdownloadlink) {
1585 print
'<br><a href="'.$directdownloadlink.
'">';
1586 print
img_mime($contract->last_main_doc,
'');
1587 print $langs->trans(
"DownloadDocument").
'</a>';
1589 print
'</td></tr>'.
"\n";
1592 $label = $langs->trans(
"Quantity");
1595 if ($contractline->fk_product) {
1596 if ($contractline->product->isService() && $contractline->product->duration_value > 0) {
1597 $label = $langs->trans(
"Duration");
1600 if ($contractline->product->duration_value > 1) {
1601 $dur = array(
"h" => $langs->trans(
"Hours"),
"d" => $langs->trans(
"DurationDays"),
"w" => $langs->trans(
"DurationWeeks"),
"m" => $langs->trans(
"DurationMonths"),
"y" => $langs->trans(
"DurationYears"));
1603 $dur = array(
"h" => $langs->trans(
"Hour"),
"d" => $langs->trans(
"DurationDay"),
"w" => $langs->trans(
"DurationWeek"),
"m" => $langs->trans(
"DurationMonth"),
"y" => $langs->trans(
"DurationYear"));
1605 $duration = $contractline->product->duration_value.
' '.$dur[$contractline->product->duration_unit];
1608 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$label.
'</td>';
1609 print
'<td class="CTableRow2"><b>'.($duration ? $duration : $qty).
'</b>';
1610 print
'<input type="hidden" name="newqty" value="'.dol_escape_htmltag((
string) $qty).
'">';
1611 print
'</b></td></tr>'.
"\n";
1614 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
1615 if (empty($amount)) {
1616 print
' ('.$langs->trans(
"ToComplete").
')';
1618 print
'</td><td class="CTableRow2">';
1619 if (empty($amount) || !is_numeric($amount)) {
1620 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1621 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1623 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1625 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1626 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1627 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1629 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1630 print
'</td></tr>'.
"\n";
1633 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1634 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1635 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
1636 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1637 print
'</td></tr>'.
"\n";
1640 $shipToName = $contract->thirdparty->name;
1641 $shipToStreet = $contract->thirdparty->address;
1642 $shipToCity = $contract->thirdparty->town;
1643 $shipToState = $contract->thirdparty->state_code;
1644 $shipToCountryCode = $contract->thirdparty->country_code;
1645 $shipToZip = $contract->thirdparty->zip;
1646 $shipToStreet2 =
'';
1647 $phoneNum = $contract->thirdparty->phone;
1648 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
1649 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
1650 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
1651 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
1652 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
1653 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
1654 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
1655 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
1656 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
1658 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
1660 if (is_object($contract->thirdparty)) {
1661 print
'<input type="hidden" name="thirdparty_id" value="'.$contract->thirdparty->id.
'">'.
"\n";
1663 print
'<input type="hidden" name="email" value="'.$contract->thirdparty->email.
'">'.
"\n";
1664 print
'<input type="hidden" name="vatnumber" value="'.$contract->thirdparty->tva_intra.
'">'.
"\n";
1665 $labeldesc = $langs->trans(
"Contract").
' '.$contract->ref;
1666 if (
GETPOST(
'desc',
'alpha')) {
1667 $labeldesc =
GETPOST(
'desc',
'alpha');
1669 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
1673if ($source ==
'member' || $source ==
'membersubscription') {
1674 dol_syslog(
"newpayment.php source=".$source, LOG_DEBUG);
1676 $newsource =
'member';
1680 $langs->load(
"members");
1682 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent.class.php';
1683 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent_type.class.php';
1684 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/subscription.class.php';
1689 $result = $member->fetch(0, $ref, 0,
'',
true,
true);
1691 $mesg = $member->error;
1694 $member->fetch_thirdparty();
1696 $adht->fetch($member->typeid);
1700 if ($action !=
'dopayment') {
1701 $amount = $member->last_subscription_amount;
1702 if (
GETPOST(
"amount",
'alpha')) {
1706 if (empty($amount)) {
1707 $amount = $adht->amount;
1710 $amount = max(0,
price2num($amount,
'MT'));
1713 if (
GETPOST(
'fulltag',
'alpha')) {
1714 $fulltag =
GETPOST(
'fulltag',
'alpha');
1719 $fulltag .=
'.TAG='.$TAG;
1725 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1726 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
1727 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1728 print
'</td></tr>'.
"\n";
1731 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Member");
1732 print
'</td><td class="CTableRow2">';
1734 if ($member->morphy ==
'mor' && !empty($member->company)) {
1735 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1736 print $member->company;
1738 print
img_picto(
'',
'member',
'class="pictofixedwidth"');
1739 print $member->getFullName($langs);
1742 print
'</td></tr>'.
"\n";
1745 $text =
'<b>'.$langs->trans(
"PaymentSubscription").
'</b>';
1746 if (
GETPOST(
'desc',
'alpha')) {
1747 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1749 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1750 print
'</td><td class="CTableRow2">'.$text;
1751 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($newsource).
'">';
1752 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($member->ref).
'">';
1753 print
'</td></tr>'.
"\n";
1756 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"DateEndSubscription");
1757 print
'</td><td class="CTableRow2">'.dol_print_date($member->datefin,
'day');
1758 print
'</td></tr>'.
"\n";
1761 if ($member->last_subscription_date || $member->last_subscription_amount) {
1764 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"LastSubscriptionDate");
1765 print
'</td><td class="CTableRow2">'.dol_print_date($member->last_subscription_date,
'day');
1766 print
'</td></tr>'.
"\n";
1770 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"LastSubscriptionAmount");
1771 print
'</td><td class="CTableRow2">'.price($member->last_subscription_amount);
1772 print
'</td></tr>'.
"\n";
1774 if (empty($amount) && !
GETPOST(
'newamount',
'alpha')) {
1775 $_GET[
'newamount'] = $member->last_subscription_amount;
1776 $_GET[
'amount'] = $member->last_subscription_amount;
1778 if (!empty($member->last_subscription_amount) && !GETPOSTISSET(
'newamount') && is_numeric($amount)) {
1779 $amount = max($member->last_subscription_amount, $amount);
1783 $amountbytype = $adht->amountByType(1);
1785 $typeid = $adht->id;
1786 $caneditamount = $adht->caneditamount;
1788 if ($member->type) {
1789 $oldtypeid = $member->typeid;
1790 $newtypeid = (int) (GETPOSTISSET(
"typeid") ?
GETPOSTINT(
"typeid") : $member->typeid);
1792 $typeid = $newtypeid;
1793 $adht->fetch($typeid);
1796 $caneditamount = $adht->caneditamount;
1800 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"LastMemberType");
1801 print
'</td><td class="CTableRow2">'.dol_escape_htmltag($member->type);
1802 print
"</td></tr>\n";
1805 $member->typeid = $newtypeid;
1806 $member->type = (string)
dol_getIdFromCode($db, $newtypeid,
'adherent_type',
'rowid',
'libelle');
1812 $amount = (!empty($amountbytype[$member->typeid])) ? $amountbytype[$member->typeid] : $member->last_subscription_amount;
1814 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"NewSubscription");
1815 print
'</td><td class="CTableRow2">';
1816 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);
1817 print "</td></tr>\n
";
1818 } elseif ($action == 'dopayment') {
1819 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("NewMemberType
");
1820 print '</td><td class="CTableRow2
">'.dol_escape_htmltag($member->type);
1821 print '<input type="hidden
" name="membertypeid
" value="'.$member->typeid.'">';
1822 print "</td></tr>\n
";
1825 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("MemberType
");
1826 print '</td><td class="CTableRow2
">'.dol_escape_htmltag($member->type);
1827 print "</td></tr>\n
";
1832 // Add hook to complete the form
1833 $parameters = array('mode' => 'renewal');
1834 $reshook = $hookmanager->executeHooks('membershipNewSubscriptionPublicForm', $parameters, $object, $action);
1836 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
1840 // TODO Move this into previous hook
1841 if (getDolGlobalString('MEMBER_NEWFORM_DOLIBARRTURNOVER') && $action != 'dopayment') {
1843 if ($member->thirdparty instanceOf Societe) {
1844 $country_id = $member->thirdparty->country_id;
1846 $checkednature = $member->morphy;
1847 print '<input type="hidden
" name="moralinput
" id="moralinput
" value="'.$checkednature.'">';
1849 // Is it a Preferred Partner
1851 include_once DOL_DOCUMENT_ROOT.'/partnership/class/partnership.class.php';
1852 $partnership = new Partnership($db);
1853 // @phan-suppress-next-line PhanPluginSuspiciousParamPosition
1854 $result = $partnership->fetch(0, null, null, $member->thirdparty->id);
1859 // Do not set a default amount MEMBER_NEWFORM_AMOUNT if you use MEMBER_NEWFORM_DOLIBARRTURNOVER
1860 $s = $langs->trans("AreYouAPreferredPartner
", '<a href="https:
1861 $s = str_replace(
'{s1}',
'Preferred Partner', $s);
1862 print
'<tr id="trbudget" class="trcompany"><td><label for="pp" class="small">'.$s.
'</label></td><td>';
1863 print
'<input type="checkbox" name="pp" id="pp" value="1"'.((GETPOST(
'reload') ?
GETPOST(
'pp') : $pp) ?
' checked="checked"' :
'').
' class="reposition">';
1866 print
'<tr id="trbudget" class="trcompany"><td class=""><span class="small">'.$langs->trans(
"TurnoverOrBudget").
'</span></td><td>';
1868 $country_code =
dol_getIdFromCode($db, $country_id,
'c_country',
'rowid',
'code');
1869 if ($country_code ===
'FR' && $checkednature ===
'mor' && (
GETPOST(
'reload') ?
GETPOST(
'pp') : $pp)) {
1870 print
'<input type="text" name="budget" id="budget" class="flat turnover right width100" value="'.GETPOST(
'budget').
'"'.($action !=
'dopayment' ?
' required autofocus' :
'').
'>';
1872 $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+');
1873 print $form->selectarray(
'budget', $arraybudget,
GETPOSTINT(
'budget'), 1, 0, 0, ($checkednature ===
'mor' ?
'required' :
''), 0, 0, 0,
'');
1877 print
'<script type="text/javascript">
1878 jQuery(document).ready(function() {
1881 newamount = initturnover();
1882 jQuery("#amount").val(newamount);
1883 jQuery("#newamount").val(newamount);
1887 jQuery("#selectcountry_id").change(function() {
1888 console.log("We change country (code added for association, replace common code), so we reload page");
1889 jQuery("#budget").val(\'\');
1890 jQuery("#amount").val(\'\');
1891 jQuery("#newamount").val(\'\');
1892 jQuery("#amounthidden").val(\'\');
1894 jQuery("#pp").change(function() {
1895 console.log("We change the preferred partner status");
1896 selectcountry_id = jQuery("#selectcountry_id").val();
1897 morphy = jQuery("#moralinput").is(\':checked\') ? \'mor\' : \'phy\';
1898 jQuery("#budget").val(\'\');
1899 jQuery("#amount").val(\'\');
1900 jQuery("#amounthidden").val(\'\');
1901 jQuery("#newamount").val(\'\');
1902 jQuery("#reload").val(\'1\');
1903 document.paymentform.action.value="";
1904 jQuery("#dolpaymentform").submit();
1906 jQuery("#budget").change(function() {
1907 console.log("Turnover amount has been modified on change");
1908 newamount = initturnover();
1909 jQuery("#amount").val(newamount);
1910 jQuery("#amounthidden").val(newamount);
1911 jQuery("#newamount").val(newamount);
1913 jQuery("#budget").keyup(function() {
1914 console.log("Turnover amount has been modified on keyup");
1915 newamount = initturnover();
1916 jQuery("#amount").val(newamount);
1917 jQuery("#amounthidden").val(newamount);
1918 jQuery("#newamount").val(newamount);
1921 function initturnover() {
1924 //morphy = jQuery("#moralinput").is(\':checked\') ? \'mor\' : \'phy\';
1925 morphy = jQuery("#moralinput").val();
1926 selectcountry_id = '.((int) $country_id).
';
1927 pp = jQuery("#pp").is(\':checked\') ? true : false;
1928 console.log("Set fields according to nature and other properties");
1929 console.log("morphy="+morphy);
1930 console.log("selectcountry_id="+selectcountry_id);
1931 console.log("pp="+pp);
1933 if (morphy == \'phy\') {
1934 jQuery(".amount").val('.((float) $amount).
');
1935 jQuery("#trbirth").show();
1936 jQuery(".trcompany").hide();
1937 jQuery(".trbudget").hide();
1938 newamount = '.((float) $amount).
';
1940 jQuery(".amount").val(\'\');
1941 jQuery("#trbirth").hide();
1942 jQuery(".trcompany").show();
1943 jQuery(".trbudget").show();
1944 jQuery(".hideifautoturnover").hide();
1946 jQuery("#budget").val(\'\');
1949 if (selectcountry_id == 1) {
1950 if (jQuery("#budget").val() == \'\') {
1954 console.log("value selected in input text field is "+jQuery("#budget").val());
1955 newamount = Math.max(Math.round(price2numjs(jQuery("#budget").val()) * 0.005), 50);
1956 console.log("newamount = "+newamount);
1958 console.log("not a pp");
1959 if (jQuery("#budget").val() > 0) {
1960 console.log("value found in budget is "+jQuery("#budget").val());
1961 newamount = jQuery("#budget").val();
1963 jQuery("#budget").val(\'\');
1968 if (jQuery("#budget").val() > 0) {
1969 newamount = jQuery("#budget").val();
1971 jQuery("#budget").val(\'\');
1981 print
'</td></tr>'.
"\n";
1987 $amount = ($member->last_subscription_amount ? $member->last_subscription_amount : (empty($amountbytype[$typeid]) ? 0 : $amountbytype[$typeid]));
1994 if ($caneditamount && !
GETPOST(
'reload') && GETPOSTISSET(
'amount') &&
GETPOSTFLOAT(
'amount',
'MT') > 0) {
1998 if ($caneditamount && !
GETPOST(
'reload') && GETPOSTISSET(
'newamount') &&
GETPOSTFLOAT(
'newamount',
'MT') > 0) {
2002 $amount = max(0, (
float) $amount, (
float)
getDolGlobalInt(
"MEMBER_MIN_AMOUNT"));
2005 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
2008 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>';
2010 print
'</td><td class="CTableRow2">';
2012 $caneditamount = $adht->caneditamount;
2015 if ($caneditamount && ($action !=
'dopayment' ||
GETPOST(
'reload'))) {
2016 if (GETPOSTISSET(
'newamount')) {
2017 print
'<input type="text" class="width75 amount" name="newamount" id="newamount" value="'.price(
price2num(
GETPOST(
'newamount'),
'', 2), 1, $langs, 1, -1, -1).
'">';
2019 print
'<input type="text" class="width75 amount" name="newamount" id="newamount" value="'.price($amount, 1, $langs, 1, -1, -1).
'">';
2022 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
2023 if ($minimumamount > $amount) {
2024 print
' <span class="opacitymedium small">'. $langs->trans(
"AmountIsLowerToMinimumNotice",
price($minimumamount, 1, $langs, 1, -1, -1, $currency)).
'</span>';
2026 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
2028 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
2029 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
2030 print
'</td></tr>'.
"\n";
2033 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
2034 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
2035 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
2036 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
2037 print
'</td></tr>'.
"\n";
2040 $shipToName = $member->getFullName($langs);
2041 $shipToStreet = $member->address;
2042 $shipToCity = $member->town;
2043 $shipToState = $member->state_code;
2044 $shipToCountryCode = $member->country_code;
2045 $shipToZip = $member->zip;
2046 $shipToStreet2 =
'';
2047 $phoneNum = $member->phone;
2048 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
2049 print
'<!-- Shipping address information -->';
2050 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
2051 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
2052 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
2053 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
2054 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
2055 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
2056 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
2057 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
2059 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
2061 if (is_object($member->thirdparty)) {
2062 print
'<input type="hidden" name="thirdparty_id" value="'.$member->thirdparty->id.
'">'.
"\n";
2064 print
'<input type="hidden" name="email" value="'.$member->email.
'">'.
"\n";
2065 $labeldesc = $langs->trans(
"PaymentSubscription");
2066 if (
GETPOST(
'desc',
'alpha')) {
2067 $labeldesc =
GETPOST(
'desc',
'alpha');
2069 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
2073if ($source ==
'donation') {
2074 dol_syslog(
"newpayment.php source=donation", LOG_DEBUG);
2077 $langs->load(
"don");
2079 require_once DOL_DOCUMENT_ROOT.
'/don/class/don.class.php';
2081 $don =
new Don($db);
2083 $result = $don->fetch((
int) $ref);
2085 $mesg = $don->error;
2088 $don->fetch_thirdparty();
2092 if ($action !=
'dopayment') {
2093 if (
GETPOST(
"amount",
'alpha')) {
2094 $amount =
GETPOST(
"amount",
'alpha');
2096 $amount = $don->getRemainToPay();
2101 if (
GETPOST(
'fulltag',
'alpha')) {
2102 $fulltag =
GETPOST(
'fulltag',
'alpha');
2107 $fulltag .=
'.TAG='.$TAG;
2113 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
2114 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
2115 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
2116 print
'</td></tr>'.
"\n";
2119 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
2120 print
'</td><td class="CTableRow2"><b>';
2121 if ($don->morphy ==
'mor' && !empty($don->societe)) {
2122 print $don->societe;
2124 print $don->getFullName($langs);
2127 print
'</td></tr>'.
"\n";
2130 $text =
'<b>'.$langs->trans(
"PaymentDonation").
'</b>';
2131 if (
GETPOST(
'desc',
'alpha')) {
2132 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
2134 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
2135 print
'</td><td class="CTableRow2">'.$text;
2136 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($source).
'">';
2137 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($don->ref).
'">';
2138 print
'</td></tr>'.
"\n";
2141 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
2142 if (empty($amount)) {
2144 print
' ('.$langs->trans(
"ToComplete");
2147 print
' - <a href="' .
getDolGlobalString(
'DONATION_EXT_URL_SUBSCRIPTION_INFO').
'" rel="external" target="_blank" rel="noopener noreferrer">'.$langs->trans(
"SeeHere").
'</a>';
2153 print
'</td><td class="CTableRow2">';
2155 if (empty($amount) || !is_numeric($amount)) {
2158 if (empty($valtoshow)) {
2170 if (empty($amount) || !is_numeric($amount)) {
2175 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
2176 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.$valtoshow.
'">';
2178 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
2180 $valtoshow = $amount;
2183 $amount = $valtoshow;
2185 print
'<b class="amount">'.price($valtoshow, 1, $langs, 1, -1, -1, $currency).
'</b>';
2186 print
'<input type="hidden" name="amount" value="'.$valtoshow.
'">';
2187 print
'<input type="hidden" name="newamount" value="'.$valtoshow.
'">';
2189 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
2190 print
'</td></tr>'.
"\n";
2193 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
2194 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
2195 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
2196 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
2197 print
'</td></tr>'.
"\n";
2200 $shipToName = $don->getFullName($langs);
2201 $shipToStreet = $don->address;
2202 $shipToCity = $don->town;
2203 $shipToState = $don->state_code;
2204 $shipToCountryCode = $don->country_code;
2205 $shipToZip = $don->zip;
2206 $shipToStreet2 =
'';
2207 $phoneNum = $don->phone;
2208 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
2209 print
'<!-- Shipping address information -->';
2210 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
2211 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
2212 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
2213 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
2214 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
2215 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
2216 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
2217 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
2219 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
2221 if (is_object($don->thirdparty)) {
2222 print
'<input type="hidden" name="thirdparty_id" value="'.$don->thirdparty->id.
'">'.
"\n";
2224 print
'<input type="hidden" name="email" value="'.$don->email.
'">'.
"\n";
2225 $labeldesc = $langs->trans(
"PaymentSubscription");
2226 if (
GETPOST(
'desc',
'alpha')) {
2227 $labeldesc =
GETPOST(
'desc',
'alpha');
2229 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
2232if ($source ==
'organizedeventregistration' && is_object($thirdparty)) {
2233 dol_syslog(
"newpayment.php source=organizedeventregistration", LOG_DEBUG);
2236 $langs->loadLangs(array(
"members",
"eventorganization"));
2238 if (
GETPOST(
'fulltag',
'alpha')) {
2239 $fulltag =
GETPOST(
'fulltag',
'alpha');
2244 $fulltag .=
'.TAG='.$TAG;
2250 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
2251 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
2252 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
2253 print
'</td></tr>'.
"\n";
2256 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Attendee");
2257 print
'</td><td class="CTableRow2"><b>';
2258 print $attendee->email;
2259 print($thirdparty->name ?
' ('.$thirdparty->name.
')' :
'');
2261 print
'</td></tr>'.
"\n";
2263 if (! is_object($attendee->project)) {
2264 $text =
'ErrorProjectNotFound';
2266 $text = $langs->trans(
"PaymentEvent").
' - '.$attendee->project->title;
2270 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
2271 print
'</td><td class="CTableRow2"><b>'.$text.
'</b>';
2272 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($source).
'">';
2273 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag((
string) $invoice->id).
'">';
2274 print
'</td></tr>'.
"\n";
2277 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
2278 print
'</td><td class="CTableRow2">';
2279 $valtoshow = $amount;
2280 print
'<b class="amount">'.price($valtoshow, 1, $langs, 1, -1, -1, $currency).
'</b>';
2281 print
'<input type="hidden" name="amount" value="'.$valtoshow.
'">';
2282 print
'<input type="hidden" name="newamount" value="'.$valtoshow.
'">';
2283 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
2284 print
'</td></tr>'.
"\n";
2287 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
2288 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
2289 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
2290 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
2291 print
'</td></tr>'.
"\n";
2294 $shipToName = $thirdparty->getFullName($langs);
2295 $shipToStreet = $thirdparty->address;
2296 $shipToCity = $thirdparty->town;
2297 $shipToState = $thirdparty->state_code;
2298 $shipToCountryCode = $thirdparty->country_code;
2299 $shipToZip = $thirdparty->zip;
2300 $shipToStreet2 =
'';
2301 $phoneNum = $thirdparty->phone;
2302 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
2303 print
'<!-- Shipping address information -->';
2304 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
2305 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
2306 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
2307 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
2308 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
2309 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
2310 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
2311 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
2313 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
2315 print
'<input type="hidden" name="thirdparty_id" value="'.$thirdparty->id.
'">'.
"\n";
2316 print
'<input type="hidden" name="email" value="'.$thirdparty->email.
'">'.
"\n";
2317 $labeldesc = $langs->trans(
"PaymentSubscription");
2318 if (
GETPOST(
'desc',
'alpha')) {
2319 $labeldesc =
GETPOST(
'desc',
'alpha');
2321 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
2324if ($source ==
'boothlocation') {
2325 dol_syslog(
"newpayment.php source=boothlocation", LOG_DEBUG);
2328 $langs->load(
"members");
2330 if (
GETPOST(
'fulltag',
'alpha')) {
2331 $fulltag =
GETPOST(
'fulltag',
'alpha');
2336 $fulltag .=
'.TAG='.$TAG;
2342 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
2343 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
2344 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
2345 print
'</td></tr>'.
"\n";
2348 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Attendee");
2349 print
'</td><td class="CTableRow2"><b>';
2350 print $thirdparty->name;
2352 print
'</td></tr>'.
"\n";
2355 $text =
'<b>'.$langs->trans(
"PaymentBoothLocation").
'</b>';
2356 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
2357 print
'</td><td class="CTableRow2">'.$text;
2358 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($source).
'">';
2359 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag((
string) $invoice->id).
'">';
2360 print
'</td></tr>'.
"\n";
2363 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
2364 print
'</td><td class="CTableRow2">';
2365 $valtoshow = $amount;
2366 print
'<b class="amount">'.price($valtoshow, 1, $langs, 1, -1, -1, $currency).
'</b>';
2367 print
'<input type="hidden" name="amount" value="'.$valtoshow.
'">';
2368 print
'<input type="hidden" name="newamount" value="'.$valtoshow.
'">';
2369 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
2370 print
'</td></tr>'.
"\n";
2373 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
2374 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
2375 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
2376 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
2377 print
'</td></tr>'.
"\n";
2380 $shipToName = $thirdparty->getFullName($langs);
2381 $shipToStreet = $thirdparty->address;
2382 $shipToCity = $thirdparty->town;
2383 $shipToState = $thirdparty->state_code;
2384 $shipToCountryCode = $thirdparty->country_code;
2385 $shipToZip = $thirdparty->zip;
2386 $shipToStreet2 =
'';
2387 $phoneNum = $thirdparty->phone;
2388 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
2389 print
'<!-- Shipping address information -->';
2390 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
2391 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
2392 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
2393 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
2394 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
2395 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
2396 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
2397 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
2399 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
2401 print
'<input type="hidden" name="thirdparty_id" value="'.$thirdparty->id.
'">'.
"\n";
2402 print
'<input type="hidden" name="email" value="'.$thirdparty->email.
'">'.
"\n";
2403 $labeldesc = $langs->trans(
"PaymentSubscription");
2404 if (
GETPOST(
'desc',
'alpha')) {
2405 $labeldesc =
GETPOST(
'desc',
'alpha');
2407 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
2410if (!$found && !$mesg) {
2411 $mesg = $langs->trans(
"ErrorBadParameters");
2415 print
'<tr><td align="center" colspan="2"><br><div class="warning">'.dol_escape_htmltag($mesg, 1, 1,
'br').
'</div></td></tr>'.
"\n";
2418print
'</table>'.
"\n";
2423if ($action !=
'dopayment') {
2424 dol_syslog(
"newpayment.php action is not dopayment so we show all payment modes", LOG_DEBUG);
2426 if ($found && !$error) {
2429 'source' => $source,
2433 $reshook = $hookmanager->executeHooks(
'doCheckStatus', $parameters, $object, $action);
2436 } elseif ($reshook > 0) {
2437 print $hookmanager->resPrint;
2440 if ($source ==
'order' &&
$object->billed) {
2441 print
'<br><br><div class="amountpaymentcomplete size12x wrapimp">'.$langs->trans(
"OrderBilled").
'</div>';
2442 } elseif ($source ==
'invoice' &&
$object->paye) {
2443 print
'<br><br><div class="amountpaymentcomplete size12x wrapimp">'.$langs->trans(
"InvoicePaid").
'</div>';
2444 } elseif ($source ==
'donation' &&
$object->paid) {
2445 print
'<br><br><div class="amountpaymentcomplete size12x wrapimp">'.$langs->trans(
"DonationPaid").
'</div>';
2448 if (($source ==
'member' || $source ==
'membersubscription') &&
$object->datefin >
dol_now()) {
2449 $langs->load(
"members");
2450 print
'<br><div class="amountpaymentcomplete size12x wrapimp">';
2451 $s = $langs->trans(
"MembershipPaid",
'{s1}');
2452 print str_replace(
'{s1}',
'<span class="nobold">'.
dol_print_date(
$object->datefin,
'day').
'</span>', $s);
2454 print
'<div class="opacitymedium margintoponly">'.$langs->trans(
"PaymentWillBeRecordedForNextPeriod").
'</div>';
2462 'paymentmethod' => $paymentmethod
2464 $reshook = $hookmanager->executeHooks(
'doAddButton', $parameters, $object, $action);
2467 } elseif ($reshook >= 0) {
2468 print $hookmanager->resPrint;
2471 if ((empty($paymentmethod) || $paymentmethod ==
'paybox') &&
isModEnabled(
'paybox')) {
2472 print
'<div class="button buttonpayment" id="div_dopayment_paybox"><span class="fa fa-credit-card"></span> <input class="" type="submit" id="dopayment_paybox" name="dopayment_paybox" value="'.$langs->trans(
"PayBoxDoPayment").
'">';
2474 print
'<span class="buttonpaymentsmall">'.$langs->trans(
"CreditOrDebitCard").
'</span>';
2477 $( document ).ready(function() {
2478 $("#div_dopayment_paybox").click(function(){
2479 $("#dopayment_paybox").click();
2481 $("#dopayment_paybox").click(function(e){
2482 $("#div_dopayment_paybox").css( \'cursor\', \'wait\' );
2483 e.stopPropagation();
2490 if ((empty($paymentmethod) || $paymentmethod ==
'stripe') &&
isModEnabled(
'stripe')) {
2499 $noidempotency_key = (GETPOSTISSET(
'noidempotency') ?
GETPOSTINT(
'noidempotency') : (
getDolGlobalInt(
'STRIPE_USE_IDEMPOTENCY_BY_DEFAULT') ? 0 : 1));
2501 print
'<div class="button buttonpayment" id="div_dopayment_stripe">';
2502 print
'<span class="fa fa-credit-card"></span> ';
2503 print
'<input class="" type="submit" id="dopayment_stripe" name="dopayment_stripe" value="'.$langs->trans(
"StripeDoPayment").
'">';
2504 print
'<input type="hidden" name="noidempotency" value="'.$noidempotency_key.
'">';
2506 print
'<span class="buttonpaymentsmall">'.$langs->trans(
"CreditOrDebitCard").
'</span>';
2509 $( document ).ready(function() {
2510 $("#div_dopayment_stripe").click(function(){
2511 $("#dopayment_stripe").click();
2513 $("#dopayment_stripe").click(function(e){
2514 $("#div_dopayment_stripe").css( \'cursor\', \'wait\' );
2515 e.stopPropagation();
2524 if ((empty($paymentmethod) || $paymentmethod ==
'paypal') &&
isModEnabled(
'paypal')) {
2526 $conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY =
'integral';
2535 print
'<div class="button buttonpayment" id="div_dopayment_paypal">';
2537 print
'<div style="line-height: 1em"> </div>';
2539 print
'<span class="fab fa-paypal"></span> <input class="" type="submit" id="dopayment_paypal" name="dopayment_paypal" value="'.$langs->trans(
"PaypalDoPayment").
'">';
2542 print
'<span class="buttonpaymentsmall">'.$langs->trans(
"CreditOrDebitCard").
'</span><span class="buttonpaymentsmall"> - </span>';
2543 print
'<span class="buttonpaymentsmall">'.$langs->trans(
"PayPalBalance").
'</span>';
2551 $( document ).ready(function() {
2552 $("#div_dopayment_paypal").click(function(){
2553 $("#dopayment_paypal").click();
2555 $("#dopayment_paypal").click(function(e){
2556 $("#div_dopayment_paypal").css( \'cursor\', \'wait\' );
2557 e.stopPropagation();
2573print
'</td></tr>'.
"\n";
2575print
'</table>'.
"\n";
2577print
'</form>'.
"\n";
2585if (preg_match(
'/^dopayment/', $action)) {
2586 dol_syslog(
"newpayment.php action is dopayment... because we clicked on a payment mode - amount = ".$amount);
2590 $_SESSION[
"currencyCodeType"] = $currency;
2591 $_SESSION[
"FinalPaymentAmt"] = $amount;
2592 $_SESSION[
'ipaddress'] = ($remoteip ? $remoteip :
'unknown');
2593 $_SESSION[
"paymentType"] =
'';
2598 if (
GETPOST(
'dopayment_stripe',
'alpha')) {
2606 background-color: white;
2609 border: 1px solid transparent;
2610 box-shadow: 0 1px 3px 0 #e6ebf1;
2611 -webkit-transition: box-shadow 150ms ease;
2612 transition: box-shadow 150ms ease;
2615 .StripeElement--focus {
2616 box-shadow: 0 1px 3px 0 #cfd7df;
2619 .StripeElement--invalid {
2620 border-color: #fa755a;
2623 .StripeElement--webkit-autofill {
2624 background-color: #fefde5 !important;
2630 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";
2631 print
'<form action="'.$_SERVER[
'REQUEST_URI'].
'" method="POST" id="payment-form">'.
"\n";
2633 print
'<input type="hidden" name="token" value="'.newToken().
'">'.
"\n";
2634 print
'<input type="hidden" name="dopayment_stripe" value="1">'.
"\n";
2635 print
'<input type="hidden" name="action" value="charge">'.
"\n";
2636 print
'<input type="hidden" name="tag" value="'.$TAG.
'">'.
"\n";
2637 print
'<input type="hidden" name="s" value="'.$source.
'">'.
"\n";
2638 print
'<input type="hidden" name="ref" value="'.$REF.
'">'.
"\n";
2639 print
'<input type="hidden" name="fulltag" value="'.$FULLTAG.
'">'.
"\n";
2640 print
'<input type="hidden" name="suffix" value="'.$suffix.
'">'.
"\n";
2641 print
'<input type="hidden" name="securekey" value="'.$SECUREKEY.
'">'.
"\n";
2642 print
'<input type="hidden" name="e" value="'.$entity.
'" />'.
"\n";
2643 print
'<input type="hidden" name="amount" value="'.$amount.
'">'.
"\n";
2644 print
'<input type="hidden" name="currency" value="'.$currency.
'">'.
"\n";
2646 print
'<input type="hidden" name="email" value="'.GETPOST(
'email',
'alpha').
'" />';
2647 print
'<input type="hidden" name="thirdparty_id" value="'.GETPOSTINT(
'thirdparty_id').
'" />';
2648 print
'<input type="hidden" name="lang" value="'.$getpostlang.
'">';
2654 if (array_key_exists(
'ORD', $tmptag) && (
int) $tmptag[
'ORD'] > 0) {
2655 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
2657 $result =
$object->fetch((
int) $tmptag[
'ORD']);
2659 if (
$object->total_ttc != $amount) {
2666 if (!$checkamount) {
2667 dol_syslog(
"Hack attempt detected", LOG_WARNING);
2668 setEventMessages(
'Bad value for amount. Reported as a hack attempt.',
null,
'errors');
2672 require_once DOL_DOCUMENT_ROOT.
'/stripe/class/stripe.class.php';
2674 $service =
'StripeLive';
2677 $service =
'StripeTest';
2681 $stripe =
new Stripe($db);
2682 $stripeacc = $stripe->getStripeAccount($service);
2683 if (is_object($object) && is_object(
$object->thirdparty)) {
2684 $stripecu = $stripe->customerStripe(
$object->thirdparty, $stripeacc, $servicestatus, 1);
2688 dol_syslog(
"newpayment.php Create a Paymentintent for amount=".$amount, LOG_DEBUG);
2692 $noidempotency_key = (GETPOSTISSET(
'noidempotency') ?
GETPOSTINT(
'noidempotency') : (
getDolGlobalInt(
'STRIPE_USE_IDEMPOTENCY_BY_DEFAULT') ? 0 : 1));
2694 $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);
2697 if ($stripe->error) {
2708 <table id="dolpaymenttable" summary="Payment form" class="center centpercent">
2709 <tbody><tr><td class="textpublicpayment">';
2712 print
'<div id="payment-request-button"><!-- A Stripe Element will be inserted here. --></div>';
2715 print
'<div class="form-row '.(getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2 ?
'center' :
'left').
'">';
2716 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 1) {
2717 print
'<label for="card-element">'.$langs->trans(
"CreditOrDebitCard").
'</label>';
2718 print
'<br><input id="cardholder-name" class="marginbottomonly" name="cardholder-name" value="" type="text" placeholder="'.$langs->trans(
"CardOwner").
'" autocomplete="off" spellcheck="false" autofocus required>';
2721 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 1) {
2722 print
'<div id="card-element">
2723 <!-- a Stripe Element will be inserted here. -->
2726 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2) {
2727 print
'<div id="payment-element">
2728 <!-- a Stripe Element will be inserted here. -->
2732 print
'<!-- Used to display form errors -->
2733 <div id="card-errors" role="alert"></div>
2737 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>';
2738 print
'<img id="hourglasstopay" class="hidden" src="'.DOL_URL_ROOT.
'/theme/'.$conf->theme.
'/img/working.gif">';
2740 print
'</td></tr></tbody>';
2745 if (empty($paymentintent)) {
2746 print
'<center>'.$langs->trans(
"Error").
' - Failed to get PaymentIntent</center>';
2748 print
'<input type="hidden" name="paymentintent_id" value="'.$paymentintent->id.
'">';
2753 print
'</form>'.
"\n";
2757 if (empty($stripearrayofkeys[
'publishable_key'])) {
2758 $langs->load(
"errors");
2759 print
info_admin($langs->trans(
"ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv(
"Stripe")), 0, 0,
'error marginleftonly marginrightonly');
2761 print
'<!-- JS Code for Stripe components -->';
2762 print
'<script src="https://js.stripe.com/v3/"></script>'.
"\n";
2763 print
'<!-- urllogofull = '.$urllogofull.
' -->'.
"\n";
2766 print
'<script type="text/javascript">'.
"\n";
2769 $amountstripe = $amount;
2773 $arrayzerounitcurrency = array(
'BIF',
'CLP',
'DJF',
'GNF',
'JPY',
'KMF',
'KRW',
'MGA',
'PYG',
'RWF',
'VND',
'VUV',
'XAF',
'XOF',
'XPF');
2774 if (!in_array($currency, $arrayzerounitcurrency)) {
2775 $amountstripe *= 100;
2779 $metadata = array(
'dol_version' => DOL_VERSION,
'dol_entity' => $conf->entity,
'ipaddress' => $ipaddress);
2780 if (is_object($object)) {
2781 $metadata[
'dol_type'] =
$object->element;
2782 $metadata[
'dol_id'] =
$object->id;
2788 $arrayforpaymentintent = array(
2789 'description' =>
'Stripe payment: '.$FULLTAG.($ref ?
' ref='.$ref :
''),
2790 "metadata" => $metadata
2793 $arrayforpaymentintent[
"statement_descriptor"] =
dol_trunc($TAG, 10,
'right',
'UTF-8', 1);
2796 $arrayforcheckout = array(
2797 'payment_method_types' => array(
'card'),
2798 'line_items' => array(array(
2799 'price_data' => array(
2800 'currency' => $currency,
2801 'unit_amount' => $amountstripe,
2802 'product_data' => array(
2803 'name' => $langs->transnoentitiesnoconv(
"Payment").
' '.$TAG,
2804 'description' =>
'Stripe payment: '.$FULLTAG.($ref ?
' ref='.$ref :
''),
2810 'mode' =>
'payment',
2811 'client_reference_id' => $FULLTAG,
2812 'success_url' => $urlok,
2813 'cancel_url' => $urlko,
2814 'payment_intent_data' => $arrayforpaymentintent
2817 $arrayforcheckout[
'customer'] = $stripecu;
2819 $arrayforcheckout[
'customer_email'] =
GETPOST(
'email',
'alpha');
2822 dol_syslog(
"We create a stripe session with \Stripe\Checkout\Session::create for amountstripe=".$amountstripe);
2824 $sessionstripe = \Stripe\Checkout\Session::create($arrayforcheckout);
2826 dol_syslog(
"sessionstripe=".$sessionstripe->id);
2832 $_SESSION[
"currencyCodeType"] = $currency;
2833 $_SESSION[
"paymentType"] =
'';
2834 $_SESSION[
"FinalPaymentAmt"] = $amount;
2835 $_SESSION[
'ipaddress'] = ($remoteip ? $remoteip :
'unknown');
2836 $_SESSION[
'payerID'] = is_object($stripecu) ? $stripecu->id :
'';
2837 $_SESSION[
'TRANSACTIONID'] = $sessionstripe->id;
2839 print $e->getMessage();
2845 if (empty($stripeacc)) {
2847 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php?>');
2851 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php?>', { stripeAccount:
'<?php echo $stripeacc; ?>' });
2856 var elements = stripe.elements();
2864 fontFamily:
'"Helvetica Neue", Helvetica, sans-serif',
2865 fontSmoothing:
'antialiased',
2873 iconColor:
'#fa755a'
2877 var cardElement = elements.create(
'card', {style: style});
2880 stripe.redirectToCheckout({
2884 sessionId:
'<?php print $sessionstripe->id; ?>'
2885 }).then(
function (result) {
2899 if (empty($stripeacc)) {
2901 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php?>');
2905 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php?>', { stripeAccount:
'<?php echo $stripeacc; ?>' });
2910 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2) {
2912 var cardButton = document.getElementById(
'buttontopay');
2913 var clientSecret = cardButton.dataset.secret;
2914 var options = { clientSecret: clientSecret };
2917 var elements = stripe.elements(options);
2922 var elements = stripe.elements();
2932 fontFamily:
'"Helvetica Neue", Helvetica, sans-serif',
2933 fontSmoothing:
'antialiased',
2941 iconColor:
'#fa755a'
2946 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2) {
2948 var paymentElement = elements.create(
"payment");
2951 paymentElement.mount(
"#payment-element");
2954 var cardButton = document.getElementById(
'buttontopay');
2956 cardButton.addEventListener(
'click',
function(event) {
2957 console.log(
"We click on buttontopay");
2958 event.preventDefault();
2961 jQuery(
'#hourglasstopay').show();
2962 jQuery(
'#buttontopay').hide();
2964 stripe.confirmPayment({
2965 elements,confirmParams: {
2966 return_url:
'<?php echo $urlok; ?>',
2967 payment_method_data: {
2970 <?php
if (
GETPOST(
'email',
'alpha') || (is_object($object) && is_object(
$object->thirdparty) && !empty(
$object->thirdparty->email))) {
2971 ?>, email:
'<?php echo dol_escape_js(GETPOST('email
', 'alpha
') ? GETPOST('email
', 'alpha
') : $object->thirdparty->email); ?>'<?php
2973 <?php
if (is_object($object) && is_object(
$object->thirdparty) && !empty(
$object->thirdparty->phone)) {
2974 ?>, phone:
'<?php echo dol_escape_js($object->thirdparty->phone); ?>'<?php
2976 <?php
if (is_object($object) && is_object(
$object->thirdparty)) {
2978 city:
'<?php echo dol_escape_js($object->thirdparty->town); ?>',
2979 <?php if ($object->thirdparty->country_code) {
2980 ?>country:
'<?php echo dol_escape_js($object->thirdparty->country_code); ?>',<?php
2982 line1:
'<?php echo dol_escape_js(preg_replace('/\s\s+/
', ' ', $object->thirdparty->address)); ?>',
2983 postal_code:
'<?php echo dol_escape_js($object->thirdparty->zip); ?>'
2989 save_payment_method:<?php
if ($stripecu) {
2996 ).then(
function(result) {
2997 console.log(result);
2999 console.log(
"Error on result of handleCardPayment");
3000 jQuery(
'#buttontopay').show();
3001 jQuery(
'#hourglasstopay').hide();
3003 var errorElement = document.getElementById(
'card-errors');
3004 console.log(result);
3005 errorElement.textContent = result.error.message;
3008 console.log(
"No error on result of handleCardPayment, so we submit the form");
3010 jQuery(
'#buttontopay').hide();
3011 jQuery(
'#hourglasstopay').show();
3013 jQuery(
'#payment-form').submit();
3021 var cardElement = elements.create(
'card', {style: style});
3024 cardElement.mount(
'#card-element');
3027 cardElement.addEventListener(
'change',
function(event) {
3028 var displayError = document.getElementById(
'card-errors');
3030 console.log(
"Show event error (like 'Incorrect card number', ...)");
3031 displayError.textContent =
event.error.message;
3033 console.log(
"Reset error message");
3034 displayError.textContent =
'';
3039 var cardholderName = document.getElementById(
'cardholder-name');
3040 var cardButton = document.getElementById(
'buttontopay');
3041 var clientSecret = cardButton.dataset.secret;
3043 cardButton.addEventListener(
'click',
function(event) {
3044 console.log(
"We click on buttontopay");
3045 event.preventDefault();
3047 if (cardholderName.value ==
'')
3049 console.log(
"Field Card holder is empty");
3050 var displayError = document.getElementById(
'card-errors');
3051 displayError.textContent =
'<?php print dol_escape_js($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("CardOwner"))); ?>';
3056 jQuery(
'#hourglasstopay').show();
3057 jQuery(
'#buttontopay').hide();
3059 stripe.handleCardPayment(
3060 clientSecret, cardElement, {
3061 payment_method_data: {
3063 name: cardholderName.value
3064 <?php
if (
GETPOST(
'email',
'alpha') || (is_object($object) && is_object(
$object->thirdparty) && !empty(
$object->thirdparty->email))) {
3065 ?>, email:
'<?php echo dol_escape_js(GETPOST('email
', 'alpha
') ? GETPOST('email
', 'alpha
') : $object->thirdparty->email); ?>'<?php
3067 <?php
if (is_object($object) && is_object(
$object->thirdparty) && !empty(
$object->thirdparty->phone)) {
3068 ?>, phone:
'<?php echo dol_escape_js($object->thirdparty->phone); ?>'<?php
3070 <?php
if (is_object($object) && is_object(
$object->thirdparty)) {
3072 city:
'<?php echo dol_escape_js($object->thirdparty->town); ?>',
3073 <?php if ($object->thirdparty->country_code) {
3074 ?>country:
'<?php echo dol_escape_js($object->thirdparty->country_code); ?>',<?php
3076 line1:
'<?php echo dol_escape_js(preg_replace('/\s\s+/
', ' ', $object->thirdparty->address)); ?>',
3077 postal_code:
'<?php echo dol_escape_js($object->thirdparty->zip); ?>'
3083 save_payment_method:<?php
if ($stripecu) {
3089 ).then(
function(result) {
3090 console.log(result);
3092 console.log(
"Error on result of handleCardPayment");
3093 jQuery(
'#buttontopay').show();
3094 jQuery(
'#hourglasstopay').hide();
3096 var errorElement = document.getElementById(
'card-errors');
3097 errorElement.textContent = result.error.message;
3100 console.log(
"No error on result of handleCardPayment, so we submit the form");
3102 jQuery(
'#buttontopay').hide();
3103 jQuery(
'#hourglasstopay').show();
3105 jQuery(
'#payment-form').submit();
3123 'paymentmethod' => $paymentmethod,
3124 'amount' => $amount,
3125 'currency' => $currency,
3126 'tag' =>
GETPOST(
"tag",
'alpha'),
3127 'dopayment' =>
GETPOST(
'dopayment',
'alpha')
3130 $reshook = $hookmanager->executeHooks(
'doPayment', $parameters, $object, $action);
3133 } elseif ($reshook > 0) {
3134 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)
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.
dol_strlen($string, $stringencoding='UTF-8')
Make a strlen call.
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.
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.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='')
Show information in HTML for admin users or standard users.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
if(!defined( 'CSRFCHECK_WITH_TOKEN'))
Abort invoice creation with a given error message.
print_paybox_redirect($PRICE, $CURRENCY, $EMAIL, $urlok, $urlko, $TAG)
Create a redirect form to paybox form.
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,...