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 $paymentintent =
null;
600 if (!
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION')) {
603 'dol_version' => DOL_VERSION,
604 'dol_entity' => $conf->entity,
605 'dol_company' =>
$mysoc->name,
606 'dol_tax_num' => $vatnumber,
610 if (!empty($thirdparty_id)) {
611 $metadata[
"dol_thirdparty_id"] = $thirdparty_id;
614 if ($thirdparty_id > 0) {
615 dol_syslog(
"Search existing Stripe customer profile for thirdparty_id=".$thirdparty_id, LOG_DEBUG, 0,
'_payment');
617 $service =
'StripeTest';
620 $service =
'StripeLive';
624 $thirdparty =
new Societe($db);
625 $thirdparty->fetch($thirdparty_id);
628 include_once DOL_DOCUMENT_ROOT.
'/stripe/class/stripe.class.php';
629 $stripe =
new Stripe($db);
630 $stripeacc = $stripe->getStripeAccount($service);
631 $customer = $stripe->customerStripe($thirdparty, $stripeacc, $servicestatus, 1);
632 if (empty($customer)) {
634 dol_syslog(
'Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.
' and servicestatus = '.$servicestatus.
': '.$stripe->error, LOG_ERR, 0,
'_payment');
635 setEventMessages(
'Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.
' and servicestatus = '.$servicestatus.
': '.$stripe->error,
null,
'errors');
642 $card = $customer->sources->create(array(
"source" => $stripeToken,
"metadata" => $metadata));
644 $card = $stripeToken;
649 dol_syslog(
'Failed to create card record', LOG_WARNING, 0,
'_payment');
653 if (!empty($FULLTAG)) {
654 $metadata[
"FULLTAG"] = $FULLTAG;
656 if (!empty($dol_id)) {
657 $metadata[
"dol_id"] = $dol_id;
659 if (!empty($dol_type)) {
660 $metadata[
"dol_type"] = $dol_type;
663 dol_syslog(
"Create charge on card ".$card->id, LOG_DEBUG, 0,
'_payment');
664 $charge = \Stripe\Charge::create(array(
665 'amount' =>
price2num($amountstripe,
'MU'),
666 'currency' => $currency,
668 'description' =>
'Stripe payment: '.$FULLTAG.
' ref='.$ref,
669 'metadata' => $metadata,
670 'customer' => $customer->id,
672 'statement_descriptor_suffix' =>
dol_trunc($FULLTAG, 10,
'right',
'UTF-8', 1),
673 ), array(
"idempotency_key" =>
"$FULLTAG",
"stripe_account" =>
"$stripeacc"));
675 if (empty($charge)) {
677 dol_syslog(
'Failed to charge card', LOG_WARNING, 0,
'_payment');
684 $vatcleaned = $vatnumber ? $vatnumber :
null;
695 dol_syslog(
"Create anonymous customer card profile", LOG_DEBUG, 0,
'_payment');
697 $customer = \Stripe\Customer::create(array(
699 'description' => ($email ?
'Anonymous customer for '.$email :
'Anonymous customer'),
700 'metadata' => $metadata,
701 'source' => $stripeToken
719 if (!empty($FULLTAG)) {
720 $metadata[
"FULLTAG"] = $FULLTAG;
722 if (!empty($dol_id)) {
723 $metadata[
"dol_id"] = $dol_id;
725 if (!empty($dol_type)) {
726 $metadata[
"dol_type"] = $dol_type;
731 dol_syslog(
"Create charge", LOG_DEBUG, 0,
'_payment');
732 $charge = \Stripe\Charge::create(array(
733 'customer' => $customer->id,
734 'amount' =>
price2num($amountstripe,
'MU'),
735 'currency' => $currency,
737 'description' =>
'Stripe payment: '.$FULLTAG.
' ref='.$ref,
738 'metadata' => $metadata,
739 'statement_descriptor' =>
dol_trunc($FULLTAG, 10,
'right',
'UTF-8', 1),
740 ), array(
"idempotency_key" => (
string) $FULLTAG,
"stripe_account" => (
string) $stripeacc));
742 if (empty($charge)) {
744 dol_syslog(
'Failed to charge card', LOG_WARNING, 0,
'_payment');
751 $body = $e->getJsonBody();
752 $err = $body[
'error'];
754 print(
'Status is:'.$e->getHttpStatus().
"\n");
755 print(
'Type is:'.$err[
'type'].
"\n");
756 print(
'Code is:'.$err[
'code'].
"\n");
758 print(
'Param is:'.$err[
'param'].
"\n");
759 print(
'Message is:'.$err[
'message'].
"\n");
762 $errormessage =
"ErrorCard ".$e->getMessage().
" err=".var_export($err,
true);
763 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
769 $errormessage =
"ErrorRateLimit ".$e->getMessage();
770 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
776 $errormessage =
"ErrorInvalidRequest ".$e->getMessage();
777 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
784 $errormessage =
"ErrorAuthentication ".$e->getMessage();
785 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
791 $errormessage =
"ErrorApiConnection ".$e->getMessage();
792 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
799 $errormessage =
"ErrorBase ".$e->getMessage();
800 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
806 $errormessage =
"ErrorException ".$e->getMessage();
807 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
814 $_SESSION[
'paymentkosessioncode'] = $randomseckey;
816 $urlko .=
'&paymentkosessioncode='.urlencode($randomseckey);
819 $_SESSION[
'paymentoksessioncode'] = $randomseckey;
821 $urlok .=
'&paymentoksessioncode='.urlencode($randomseckey);
826 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION')) {
827 $service =
'StripeTest';
830 $service =
'StripeLive';
833 include_once DOL_DOCUMENT_ROOT.
'/stripe/class/stripe.class.php';
834 $stripe =
new Stripe($db);
835 $stripeacc = $stripe->getStripeAccount($service);
839 $paymentintent_id =
GETPOST(
"paymentintent_id",
"alpha");
842 global $stripearrayofkeysbyenv;
843 \Stripe\Stripe::setApiKey($stripearrayofkeysbyenv[$servicestatus][
'secret_key']);
846 if (empty($stripeacc)) {
847 $paymentintent = \Stripe\PaymentIntent::retrieve($paymentintent_id);
849 $paymentintent = \Stripe\PaymentIntent::retrieve($paymentintent_id, array(
"stripe_account" => $stripeacc));
853 $errormessage =
"CantRetrievePaymentIntent ".$e->getMessage();
854 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
863 $paymentintentalreadyused = 0;
864 if (!$error && is_object($paymentintent) && $paymentintent->status ==
'succeeded') {
865 $sql =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"paiement";
866 $sql .=
" WHERE ext_payment_id = '".$db->escape($paymentintent_id).
"'";
867 $sql .=
" OR ext_payment_id LIKE '".$db->escape($paymentintent_id).
":%'";
868 $resql = $db->query($sql);
870 if ($db->num_rows($resql) > 0) {
871 $paymentintentalreadyused = 1;
877 if ($paymentintent->status !=
'succeeded' || $paymentintentalreadyused) {
879 if ($paymentintentalreadyused) {
880 $errormessage =
"PaymentIntent ".$paymentintent_id.
" was already used to record a payment, it cannot be reused for another object";
882 $errormessage =
"StatusOfRetrievedIntent is not succeeded: ".$paymentintent->status;
884 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
889 $_SESSION[
'paymentkosessioncode'] = $randomseckey;
891 $urlko .=
'&paymentkosessioncode='.urlencode($randomseckey);
899 $amount = $paymentintent->amount;
902 if (!empty($paymentintent->currency)) {
903 $currency = strtoupper($paymentintent->currency);
907 $arrayzerounitcurrency = array(
'BIF',
'CLP',
'DJF',
'GNF',
'JPY',
'KMF',
'KRW',
'MGA',
'PYG',
'RWF',
'VND',
'VUV',
'XAF',
'XOF',
'XPF');
908 if (!in_array($currency, $arrayzerounitcurrency)) {
913 dol_syslog(
"StatusOfRetrievedIntent is succeeded for amount = ".$amount.
" currency = ".$currency, LOG_DEBUG, 0,
'_payment');
916 $_SESSION[
'paymentoksessioncode'] = $randomseckey;
918 $urlok .=
'&paymentoksessioncode='.urlencode($randomseckey);
925 $_SESSION[
"onlinetoken"] = $stripeToken;
926 $_SESSION[
"FinalPaymentAmt"] = $amount;
927 $_SESSION[
"currencyCodeType"] = $currency;
928 $_SESSION[
"paymentType"] =
'';
929 $_SESSION[
'ipaddress'] = ($remoteip ? $remoteip :
'unknown');
930 $_SESSION[
'TRANSACTIONID'] = (is_object($charge) ? $charge->id : (is_object($paymentintent) ? $paymentintent->id :
''));
931 $_SESSION[
'errormessage'] = $errormessage;
932 if (!
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION')) {
933 $_SESSION[
'payerID'] = is_object($customer) ? $customer->id :
'';
935 $_SESSION[
'payerID'] =
'';
938 dol_syslog(
"Action charge stripe STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION=".
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION').
" ip=".$remoteip, LOG_DEBUG, 0,
'_payment');
939 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');
940 dol_syslog(
"_SERVER[SERVER_NAME] = ".(empty($_SERVER[
"SERVER_NAME"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_NAME"])), LOG_DEBUG, 0,
'_payment');
941 dol_syslog(
"_SERVER[SERVER_ADDR] = ".(empty($_SERVER[
"SERVER_ADDR"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_ADDR"])), LOG_DEBUG, 0,
'_payment');
942 dol_syslog(
"session_id=".session_id(), LOG_DEBUG, 0,
'_payment');
943 dol_syslog(
"onlinetoken=".$_SESSION[
"onlinetoken"].
" paymentoksessioncode=".$_SESSION[
"paymentoksessioncode"].
" paymentkosessioncode=".($_SESSION[
"paymentkosessioncode"] ??
''), LOG_DEBUG, 0,
'_payment');
944 dol_syslog(
"FinalPaymentAmt=".$_SESSION[
"FinalPaymentAmt"].
" currencyCodeType=".$_SESSION[
"currencyCodeType"].
" payerID=".$_SESSION[
'payerID'].
" TRANSACTIONID=".$_SESSION[
'TRANSACTIONID'], LOG_DEBUG, 0,
'_payment');
945 dol_syslog(
"FULLTAG=".$FULLTAG, LOG_DEBUG, 0,
'_payment');
946 dol_syslog(
"error=".$error.
" errormessage=".$errormessage, LOG_DEBUG, 0,
'_payment');
947 dol_syslog(
"Now call the redirect to paymentok or paymentko, URL = ".($error ? $urlko : $urlok), LOG_DEBUG, 0,
'_payment');
950 header(
"Location: ".$urlko);
953 header(
"Location: ".$urlok);
960 'paymentmethod' => $paymentmethod,
961 'validpaymentmethod' => &$validpaymentmethod
963$reshook = $hookmanager->executeHooks(
'doPayment', $parameters, $object, $action);
966} elseif ($reshook > 0) {
967 print $hookmanager->resPrint;
976$form =
new Form($db);
980 $head =
'<link rel="stylesheet" type="text/css" href="' .
getDolGlobalString(
'ONLINE_PAYMENT_CSS_URL').
'?lang='.(!empty($getpostlang) ? $getpostlang : $langs->defaultlang).
'">'.
"\n";
983$conf->dol_hide_topmenu = 1;
984$conf->dol_hide_leftmenu = 1;
986$replacemainarea = (empty($conf->dol_hide_leftmenu) ?
'<div>' :
'').
'<div>';
987llxHeader($head, $langs->trans(
"PaymentForm"),
'',
'', 0, 0,
'',
'',
'',
'onlinepaymentbody', $replacemainarea);
989dol_syslog(
"newpayment.php show page source=".$source.
" paymentmethod=".$paymentmethod.
' amount='.$amount.
' newamount='.
GETPOST(
"newamount",
'alpha').
" ref=".$ref, LOG_DEBUG, 0,
'_payment');
990dol_syslog(
"_SERVER[HTTP_X_FORWARDED_HOST] = ".(empty($_SERVER[
"HTTP_X_FORWARDED_HOST"]) ?
'' :
dol_escape_htmltag($_SERVER[
"HTTP_X_FORWARDED_HOST"])), LOG_DEBUG, 0,
'_payment');
991dol_syslog(
"_SERVER[SERVER_NAME] = ".(empty($_SERVER[
"SERVER_NAME"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_NAME"])), LOG_DEBUG, 0,
'_payment');
992dol_syslog(
"_SERVER[SERVER_ADDR] = ".(empty($_SERVER[
"SERVER_ADDR"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_ADDR"])), LOG_DEBUG, 0,
'_payment');
993dol_syslog(
"session_id=".session_id(), LOG_DEBUG, 0,
'_payment');
996if ($source && in_array($ref, array(
'member_ref',
'contractline_ref',
'invoice_ref',
'order_ref',
'donation_ref',
''))) {
997 $langs->load(
"errors");
998 dol_print_error_email(
'BADREFINPAYMENTFORM', $langs->trans(
"ErrorBadLinkSourceSetButBadValueForRef", $source, $ref));
1008 dol_htmloutput_mesg($langs->trans(
'YouAreCurrentlyInSandboxMode',
'Paypal'), array(),
'warning');
1011 dol_htmloutput_mesg($langs->trans(
'YouAreCurrentlyInSandboxMode',
'Stripe'), array(),
'warning');
1015print
'<span id="dolpaymentspan"></span>'.
"\n";
1016print
'<div class="center">'.
"\n";
1017print
'<form id="dolpaymentform" class="center" name="paymentform" action="'.$_SERVER[
"PHP_SELF"].
'" method="POST">'.
"\n";
1018print
'<input type="hidden" name="token" value="'.newToken().
'">'.
"\n";
1019print
'<input type="hidden" name="action" value="dopayment">'.
"\n";
1020print
'<input type="hidden" name="tag" value="'.GETPOST(
"tag",
'alpha').
'">'.
"\n";
1021print
'<input type="hidden" name="suffix" value="'.dol_escape_htmltag($suffix).
'">'.
"\n";
1022print
'<input type="hidden" name="securekey" value="'.dol_escape_htmltag($SECUREKEY).
'">'.
"\n";
1023print
'<input type="hidden" name="e" value="'.$entity.
'" />';
1025print
'<input type="hidden" name="lang" value="'.$getpostlang.
'">';
1026print
'<input type="hidden" name="ws" value="'.$ws.
'">';
1027print
'<input type="hidden" name="reload" id="reload" value="0">';
1033$logosmall =
$mysoc->logo_small;
1035$paramlogo =
'ONLINE_PAYMENT_LOGO_'.$suffix;
1045if (!empty($logosmall) && is_readable($conf->mycompany->dir_output.
'/logos/thumbs/'.$logosmall)) {
1046 $urllogo = DOL_URL_ROOT.
'/viewimage.php?modulepart=mycompany&entity='.$conf->entity.
'&file='.urlencode(
'logos/thumbs/'.$logosmall);
1047 $urllogofull =
$dolibarr_main_url_root.
'/viewimage.php?modulepart=mycompany&entity='.$conf->entity.
'&file='.urlencode(
'logos/thumbs/'.$logosmall);
1048} elseif (!empty($logo) && is_readable($conf->mycompany->dir_output.
'/logos/'.$logo)) {
1049 $urllogo = DOL_URL_ROOT.
'/viewimage.php?modulepart=mycompany&entity='.$conf->entity.
'&file='.urlencode(
'logos/'.$logo);
1050 $urllogofull =
$dolibarr_main_url_root.
'/viewimage.php?modulepart=mycompany&entity='.$conf->entity.
'&file='.urlencode(
'logos/'.$logo);
1056 $filehtmlheader =
dol_sanitizePathName(DOL_DATA_ROOT . ($conf->entity > 1 ?
'/' . $conf->entity :
'') .
'/website/' . $ws .
'/htmlheaderpayment.html');
1058 print file_get_contents(
dol_osencode($filehtmlheader));
1062if ($urllogo && !$ws) {
1063 print
'<div class="backgreypublicpayment">';
1064 print
'<div class="logopublicpayment">';
1065 print
'<img id="dolpaymentlogo" src="'.$urllogo.
'"';
1069 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>';
1072} elseif ($creditor && !$ws) {
1073 print
'<div class="backgreypublicpayment">';
1074 print
'<div class="logopublicpayment">';
1080 print
'<div class="backimagepublicpayment">';
1081 print
'<img id="idMAIN_IMAGE_PUBLIC_PAYMENT" src="'.getDolGlobalString(
'MAIN_IMAGE_PUBLIC_PAYMENT').
'">';
1088print
'<!-- Form to send a payment -->'.
"\n";
1089print
'<!-- creditor = '.dol_escape_htmltag((
string) $creditor).
' -->'.
"\n";
1092 print
'<!-- PAYPAL_API_SANDBOX = '.getDolGlobalString(
'PAYPAL_API_SANDBOX').
' -->'.
"\n";
1093 print
'<!-- PAYPAL_API_INTEGRAL_OR_PAYPALONLY = '.getDolGlobalString(
'PAYPAL_API_INTEGRAL_OR_PAYPALONLY').
' -->'.
"\n";
1096 print
'<!-- PAYBOX_CGI_URL = '.getDolGlobalString(
'PAYBOX_CGI_URL_V2').
' -->'.
"\n";
1099 print
'<!-- STRIPE_LIVE = '.getDolGlobalString(
'STRIPE_LIVE').
' -->'.
"\n";
1100 print
'<!-- STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION = '.getDolGlobalString(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION').
' -->'.
"\n";
1102print
'<!-- urlok = '.$urlok.
' -->'.
"\n";
1103print
'<!-- urlko = '.$urlko.
' -->'.
"\n";
1107print
'<table id="dolpublictable" summary="Payment form" class="center">'.
"\n";
1112 $langs->load(
"members");
1114 if (preg_match(
'/^\((.*)\)$/',
getDolGlobalString(
'PAYMENT_NEWFORM_TEXT'), $reg)) {
1115 $text .= $langs->trans($reg[1]).
"<br>\n";
1119 $text =
'<tr><td class="center"><br>'.$text.
'<br></td></tr>'.
"\n";
1122 $text .=
'<tr><td class="textpublicpayment"><br><strong>'.$langs->trans(
"WelcomeOnPaymentPage").
'</strong></td></tr>'.
"\n";
1123 $text .=
'<tr><td class="textpublicpayment"><span class="opacitymedium">'.$langs->trans(
"ThisScreenAllowsYouToPay", (
string) $creditor).
'</span><br><br></td></tr>'.
"\n";
1128print
'<tr><td align="center">';
1129print
'<table class="centpercent left" id="tablepublicpayment">';
1130print
'<tr class="hideonsmartphone"><td colspan="2" class="opacitymedium">'.$langs->trans(
"ThisIsInformationOnPayment").
'...<br><br></td></tr>'.
"\n";
1142 dol_syslog(
"newpayment.php no source", LOG_DEBUG);
1145 $tag =
GETPOST(
"tag",
'alpha');
1146 if (
GETPOST(
'fulltag',
'alpha')) {
1147 $fulltag =
GETPOST(
'fulltag',
'alpha');
1149 $fulltag =
"TAG=".$tag;
1153 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1154 print
'</td><td class="CTableRow2">';
1155 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1156 print
'<b>'.$creditor.
'</b>';
1157 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1158 print
'</td></tr>'.
"\n";
1161 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
1162 if (empty($amount)) {
1163 print
' ('.$langs->trans(
"ToComplete").
')';
1165 print
'</td><td class="CTableRow2">';
1166 if (empty($amount) || !is_numeric($amount)) {
1167 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1168 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1170 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1172 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1173 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1174 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1176 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1177 print
'</td></tr>'.
"\n";
1180 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1181 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1182 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
1183 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1184 print
'</td></tr>'.
"\n";
1192if ($source ==
'order') {
1193 dol_syslog(
"newpayment.php source=order", LOG_DEBUG);
1196 $langs->load(
"orders");
1198 require_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
1201 $result = $order->fetch(0, $ref);
1203 $mesg = $order->error;
1206 $result = $order->fetch_thirdparty($order->socid);
1210 if ($action !=
'dopayment') {
1211 $amount = $order->total_ttc;
1212 if (
GETPOST(
"amount",
'alpha')) {
1213 $amount =
GETPOST(
"amount",
'alpha');
1219 if (
GETPOST(
'fulltag',
'alpha')) {
1220 $fulltag =
GETPOST(
'fulltag',
'alpha');
1222 $fulltag =
'ORD='.$order->id.
'.CUS='.$order->thirdparty->id;
1225 $fulltag .=
'.TAG='.$TAG;
1231 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1232 print
'</td><td class="CTableRow2"';
1233 print
' title="'.dolPrintHTMLForAttribute($langs->transnoentitiesnoconv(
"Country").
'='.
$mysoc->country_code.
' - '.$langs->transnoentitiesnoconv(
"VATIntra").
'='.
$mysoc->tva_intra).
'"';
1235 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1236 print
'<b>'.$creditor.
'</b>';
1237 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1238 print
'</td></tr>'.
"\n";
1241 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
1242 print
'</td><td class="CTableRow2"';
1243 print
' title="'.dolPrintHTMLForAttribute($langs->transnoentitiesnoconv(
"Country").
'='.$order->thirdparty->country_code.
' - '.$langs->transnoentitiesnoconv(
"VATIntra").
'='.$order->thirdparty->tva_intra).
'"';
1245 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1246 print
'<b>'.$order->thirdparty->name.
'</b>';
1247 print
'</td></tr>'.
"\n";
1250 $text =
'<b>'.$langs->trans(
"PaymentOrderRef", $order->ref).
'</b>';
1251 if (
GETPOST(
'desc',
'alpha')) {
1252 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1254 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1255 print
'</td><td class="CTableRow2">'.$text;
1256 print
'<input type="hidden" name="s" value="'.dol_escape_htmltag($source).
'">';
1257 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($order->ref).
'">';
1258 print
'<input type="hidden" name="dol_id" value="'.dol_escape_htmltag((
string) $order->id).
'">';
1259 $directdownloadlink = $order->getLastMainDocLink(
'commande');
1260 if ($directdownloadlink) {
1261 print
'<br><a href="'.$directdownloadlink.
'" rel="nofollow noopener">';
1262 print
img_mime($order->last_main_doc,
'');
1263 print $langs->trans(
"DownloadDocument").
'</a>';
1265 print
'</td></tr>'.
"\n";
1268 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
1269 if (empty($amount)) {
1270 print
' ('.$langs->trans(
"ToComplete").
')';
1272 print
'</td><td class="CTableRow2">';
1273 if (empty($amount) || !is_numeric($amount)) {
1274 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1275 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1277 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1279 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1280 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1281 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1283 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1284 print
'</td></tr>'.
"\n";
1287 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1288 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1289 print
'<input type="hidden" name="tag" value="'.dol_escape_htmltag($tag).
'">';
1290 print
'<input type="hidden" name="fulltag" value="'.dol_escape_htmltag($fulltag).
'">';
1291 print
'</td></tr>'.
"\n";
1294 $shipToName = $order->thirdparty->name;
1295 $shipToStreet = $order->thirdparty->address;
1296 $shipToCity = $order->thirdparty->town;
1297 $shipToState = $order->thirdparty->state_code;
1298 $shipToCountryCode = $order->thirdparty->country_code;
1299 $shipToZip = $order->thirdparty->zip;
1300 $shipToStreet2 =
'';
1301 $phoneNum = $order->thirdparty->phone;
1302 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
1303 print
'<input type="hidden" name="shipToName" value="'.dol_escape_htmltag($shipToName).
'">'.
"\n";
1304 print
'<input type="hidden" name="shipToStreet" value="'.dol_escape_htmltag($shipToStreet).
'">'.
"\n";
1305 print
'<input type="hidden" name="shipToCity" value="'.dol_escape_htmltag($shipToCity).
'">'.
"\n";
1306 print
'<input type="hidden" name="shipToState" value="'.dol_escape_htmltag($shipToState).
'">'.
"\n";
1307 print
'<input type="hidden" name="shipToCountryCode" value="'.dol_escape_htmltag($shipToCountryCode).
'">'.
"\n";
1308 print
'<input type="hidden" name="shipToZip" value="'.dol_escape_htmltag($shipToZip).
'">'.
"\n";
1309 print
'<input type="hidden" name="shipToStreet2" value="'.dol_escape_htmltag($shipToStreet2).
'">'.
"\n";
1310 print
'<input type="hidden" name="phoneNum" value="'.dol_escape_htmltag($phoneNum).
'">'.
"\n";
1312 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
1314 if (is_object($order->thirdparty)) {
1315 print
'<input type="hidden" name="thirdparty_id" value="'.$order->thirdparty->id.
'">'.
"\n";
1317 print
'<input type="hidden" name="email" value="'.$order->thirdparty->email.
'">'.
"\n";
1318 print
'<input type="hidden" name="vatnumber" value="'.dol_escape_htmltag($order->thirdparty->tva_intra).
'">'.
"\n";
1319 $labeldesc = $langs->trans(
"Order").
' '.$order->ref;
1320 if (
GETPOST(
'desc',
'alpha')) {
1321 $labeldesc =
GETPOST(
'desc',
'alpha');
1323 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
1328if ($source ==
'invoice') {
1329 dol_syslog(
"newpayment.php source=invoice", LOG_DEBUG);
1332 $langs->load(
"bills");
1333 $form->load_cache_types_paiements();
1335 require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
1338 $result = $invoice->fetch(0, $ref);
1340 $mesg = $invoice->error;
1343 $result = $invoice->fetch_thirdparty($invoice->socid);
1347 if ($action !=
'dopayment') {
1348 $amount =
price2num($invoice->total_ttc - ($invoice->getSommePaiement() + $invoice->getSumCreditNotesUsed() + $invoice->getSumDepositsUsed()));
1349 if (
GETPOST(
"amount",
'alpha')) {
1350 $amount =
GETPOST(
"amount",
'alpha');
1355 if (
GETPOST(
'fulltag',
'alpha')) {
1356 $fulltag =
GETPOST(
'fulltag',
'alpha');
1358 $fulltag =
'INV='.$invoice->id.
'.CUS='.$invoice->thirdparty->id;
1361 $fulltag .=
'.TAG='.$TAG;
1367 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1368 print
'</td><td class="CTableRow2"';
1369 print
' title="'.dolPrintHTMLForAttribute($langs->transnoentitiesnoconv(
"Country").
'='.
$mysoc->country_code.
' - '.$langs->transnoentitiesnoconv(
"VATIntra").
'='.
$mysoc->tva_intra).
'"';
1371 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1372 print
'<b>'.$creditor.
'</b>';
1373 print
'<input type="hidden" name="creditor" value="'.dol_escape_htmltag((
string) $creditor).
'">';
1374 print
'</td></tr>'.
"\n";
1377 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
1378 print
'</td><td class="CTableRow2"';
1379 print
' title="'.dolPrintHTMLForAttribute($langs->transnoentitiesnoconv(
"Country").
'='.$invoice->thirdparty->country_code.
' - '.$langs->transnoentitiesnoconv(
"VATIntra").
'='.$invoice->thirdparty->tva_intra).
'"';
1381 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1382 print
'<b>'.$invoice->thirdparty->name.
'</b>';
1383 print
'</td></tr>'.
"\n";
1386 $text =
'<b>'.$langs->trans(
"PaymentInvoiceRef", $invoice->ref).
'</b>';
1387 if (
GETPOST(
'desc',
'alpha')) {
1388 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1390 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1391 print
'</td><td class="CTableRow2">'.$text;
1392 print
'<input type="hidden" name="s" value="'.dol_escape_htmltag($source).
'">';
1393 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($invoice->ref).
'">';
1394 print
'<input type="hidden" name="dol_id" value="'.dol_escape_htmltag((
string) $invoice->id).
'">';
1395 $directdownloadlink = $invoice->getLastMainDocLink(
'facture');
1396 if ($directdownloadlink) {
1397 print
'<br><a href="'.$directdownloadlink.
'">';
1398 print
img_mime($invoice->last_main_doc,
'');
1399 print $langs->trans(
"DownloadDocument").
'</a>';
1401 print
'</td></tr>'.
"\n";
1404 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentAmount");
1405 if (empty($amount) && empty(
$object->paye)) {
1406 print
' ('.$langs->trans(
"ToComplete").
')';
1408 print
'</td><td class="CTableRow2">';
1409 if (
$object->type == $object::TYPE_CREDIT_NOTE) {
1410 print
'<b>'.$langs->trans(
"CreditNote").
'</b>';
1411 } elseif (empty(
$object->paye)) {
1412 if (empty($amount) || !is_numeric($amount)) {
1413 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1414 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1415 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1417 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1418 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1419 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1422 print
'<b class="amount">'.price(
$object->total_ttc, 1, $langs, 1, -1, -1, $currency).
'</b>';
1424 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1425 print
'</td></tr>'.
"\n";
1428 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1429 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1430 print
'<input type="hidden" name="tag" value="'.(empty($tag) ?
'' : $tag).
'">';
1431 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1432 print
'</td></tr>'.
"\n";
1435 if ($invoice->status == $invoice::STATUS_VALIDATED && $invoice->mode_reglement_id > 0 && $form->cache_types_paiements[$invoice->mode_reglement_id][
"code"] ==
"VIR") {
1436 print
'<tr class="CTableRow2 center"><td class="CTableRow2" colspan="2">';
1437 print
'<div class="warning maxwidth1000">';
1438 print $langs->trans(
"PayOfBankTransferInvoice");
1440 print
'</td></tr>'.
"\n";
1444 $shipToName = $invoice->thirdparty->name;
1445 $shipToStreet = $invoice->thirdparty->address;
1446 $shipToCity = $invoice->thirdparty->town;
1447 $shipToState = $invoice->thirdparty->state_code;
1448 $shipToCountryCode = $invoice->thirdparty->country_code;
1449 $shipToZip = $invoice->thirdparty->zip;
1450 $shipToStreet2 =
'';
1451 $phoneNum = $invoice->thirdparty->phone;
1452 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
1453 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
1454 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
1455 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
1456 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
1457 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
1458 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
1459 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
1460 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
1462 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
1464 if (is_object($invoice->thirdparty)) {
1465 print
'<input type="hidden" name="thirdparty_id" value="'.$invoice->thirdparty->id.
'">'.
"\n";
1467 print
'<input type="hidden" name="email" value="'.$invoice->thirdparty->email.
'">'.
"\n";
1468 print
'<input type="hidden" name="vatnumber" value="'.$invoice->thirdparty->tva_intra.
'">'.
"\n";
1469 $labeldesc = $langs->trans(
"Invoice").
' '.$invoice->ref;
1470 if (
GETPOST(
'desc',
'alpha')) {
1471 $labeldesc =
GETPOST(
'desc',
'alpha');
1473 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
1477if ($source ==
'contractline') {
1478 dol_syslog(
"newpayment.php source=contractline", LOG_DEBUG);
1481 $langs->load(
"contracts");
1483 require_once DOL_DOCUMENT_ROOT.
'/contrat/class/contrat.class.php';
1488 $result = $contractline->fetch(0, $ref);
1490 $mesg = $contractline->error;
1493 if ($contractline->fk_contrat > 0) {
1494 $result = $contract->fetch($contractline->fk_contrat);
1496 $result = $contract->fetch_thirdparty($contract->socid);
1498 $mesg = $contract->error;
1502 $mesg =
'ErrorRecordNotFound';
1508 if ($action !=
'dopayment') {
1509 $amount = $contractline->total_ttc;
1511 if ($contractline->fk_product &&
getDolGlobalString(
'PAYMENT_USE_NEW_PRICE_FOR_CONTRACTLINES')) {
1513 $result = $product->fetch($contractline->fk_product);
1517 $pu_ht = $product->multiprices[$contract->thirdparty->price_level];
1518 $pu_ttc = $product->multiprices_ttc[$contract->thirdparty->price_level];
1519 $price_base_type = $product->multiprices_base_type[$contract->thirdparty->price_level];
1521 $pu_ht = $product->price;
1522 $pu_ttc = $product->price_ttc;
1523 $price_base_type = $product->price_base_type;
1527 if (empty($amount)) {
1533 if (
GETPOST(
"amount",
'alpha')) {
1534 $amount =
GETPOST(
"amount",
'alpha');
1539 if (
GETPOST(
'fulltag',
'alpha')) {
1540 $fulltag =
GETPOST(
'fulltag',
'alpha');
1542 $fulltag =
'COL='.$contractline->id.
'.CON='.$contract->id.
'.CUS='.$contract->thirdparty->id.
'.DAT='.
dol_print_date(
dol_now(),
'%Y%m%d%H%M%S');
1545 $fulltag .=
'.TAG='.$TAG;
1556 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1557 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
1558 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1559 print
'</td></tr>'.
"\n";
1562 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
1563 print
'</td><td class="CTableRow2"><b>'.$contract->thirdparty->name.
'</b>';
1564 print
'</td></tr>'.
"\n";
1567 $text =
'<b>'.$langs->trans(
"PaymentRenewContractId", $contract->ref, $contractline->ref).
'</b>';
1568 if ($contractline->fk_product > 0) {
1569 $contractline->fetch_product();
1570 $text .=
'<br>'.$contractline->product->ref.($contractline->product->label ?
' - '.$contractline->product->label :
'');
1572 if ($contractline->description) {
1573 $text .=
'<br>'.dol_htmlentitiesbr($contractline->description);
1575 if ($contractline->date_end) {
1576 $text .=
'<br>'.$langs->trans(
"ExpiredSince").
': '.
dol_print_date($contractline->date_end);
1578 if (
GETPOST(
'desc',
'alpha')) {
1579 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1581 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1582 print
'</td><td class="CTableRow2">'.$text;
1583 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($source).
'">';
1584 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($contractline->ref).
'">';
1585 print
'<input type="hidden" name="dol_id" value="'.dol_escape_htmltag((
string) $contractline->id).
'">';
1586 $directdownloadlink = $contract->getLastMainDocLink(
'contract');
1587 if ($directdownloadlink) {
1588 print
'<br><a href="'.$directdownloadlink.
'">';
1589 print
img_mime($contract->last_main_doc,
'');
1590 print $langs->trans(
"DownloadDocument").
'</a>';
1592 print
'</td></tr>'.
"\n";
1595 $label = $langs->trans(
"Quantity");
1598 if ($contractline->fk_product) {
1599 if ($contractline->product->isService() && $contractline->product->duration_value > 0) {
1600 $label = $langs->trans(
"Duration");
1603 if ($contractline->product->duration_value > 1) {
1604 $dur = array(
"h" => $langs->trans(
"Hours"),
"d" => $langs->trans(
"DurationDays"),
"w" => $langs->trans(
"DurationWeeks"),
"m" => $langs->trans(
"DurationMonths"),
"y" => $langs->trans(
"DurationYears"));
1606 $dur = array(
"h" => $langs->trans(
"Hour"),
"d" => $langs->trans(
"DurationDay"),
"w" => $langs->trans(
"DurationWeek"),
"m" => $langs->trans(
"DurationMonth"),
"y" => $langs->trans(
"DurationYear"));
1608 $duration = $contractline->product->duration_value.
' '.$dur[$contractline->product->duration_unit];
1611 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$label.
'</td>';
1612 print
'<td class="CTableRow2"><b>'.($duration ? $duration : $qty).
'</b>';
1613 print
'<input type="hidden" name="newqty" value="'.dol_escape_htmltag((
string) $qty).
'">';
1614 print
'</b></td></tr>'.
"\n";
1617 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
1618 if (empty($amount)) {
1619 print
' ('.$langs->trans(
"ToComplete").
')';
1621 print
'</td><td class="CTableRow2">';
1622 if (empty($amount) || !is_numeric($amount)) {
1623 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1624 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1626 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1628 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1629 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1630 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1632 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1633 print
'</td></tr>'.
"\n";
1636 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1637 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1638 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
1639 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1640 print
'</td></tr>'.
"\n";
1643 $shipToName = $contract->thirdparty->name;
1644 $shipToStreet = $contract->thirdparty->address;
1645 $shipToCity = $contract->thirdparty->town;
1646 $shipToState = $contract->thirdparty->state_code;
1647 $shipToCountryCode = $contract->thirdparty->country_code;
1648 $shipToZip = $contract->thirdparty->zip;
1649 $shipToStreet2 =
'';
1650 $phoneNum = $contract->thirdparty->phone;
1651 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
1652 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
1653 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
1654 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
1655 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
1656 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
1657 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
1658 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
1659 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
1661 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
1663 if (is_object($contract->thirdparty)) {
1664 print
'<input type="hidden" name="thirdparty_id" value="'.$contract->thirdparty->id.
'">'.
"\n";
1666 print
'<input type="hidden" name="email" value="'.$contract->thirdparty->email.
'">'.
"\n";
1667 print
'<input type="hidden" name="vatnumber" value="'.$contract->thirdparty->tva_intra.
'">'.
"\n";
1668 $labeldesc = $langs->trans(
"Contract").
' '.$contract->ref;
1669 if (
GETPOST(
'desc',
'alpha')) {
1670 $labeldesc =
GETPOST(
'desc',
'alpha');
1672 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
1676if ($source ==
'member' || $source ==
'membersubscription') {
1677 dol_syslog(
"newpayment.php source=".$source, LOG_DEBUG);
1679 $newsource =
'member';
1683 $langs->load(
"members");
1685 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent.class.php';
1686 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent_type.class.php';
1687 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/subscription.class.php';
1692 $result = $member->fetch(0, $ref, 0,
'',
true,
true);
1694 $mesg = $member->error;
1697 $member->fetch_thirdparty();
1699 $adht->fetch($member->typeid);
1703 if ($action !=
'dopayment') {
1704 $amount = $member->last_subscription_amount;
1705 if (
GETPOST(
"amount",
'alpha')) {
1709 if (empty($amount)) {
1710 $amount = $adht->amount;
1713 $amount = max(0,
price2num($amount,
'MT'));
1716 if (
GETPOST(
'fulltag',
'alpha')) {
1717 $fulltag =
GETPOST(
'fulltag',
'alpha');
1722 $fulltag .=
'.TAG='.$TAG;
1728 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1729 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
1730 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1731 print
'</td></tr>'.
"\n";
1734 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Member");
1735 print
'</td><td class="CTableRow2">';
1737 if ($member->morphy ==
'mor' && !empty($member->company)) {
1738 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1739 print $member->company;
1741 print
img_picto(
'',
'member',
'class="pictofixedwidth"');
1742 print $member->getFullName($langs);
1745 print
'</td></tr>'.
"\n";
1748 $text =
'<b>'.$langs->trans(
"PaymentSubscription").
'</b>';
1749 if (
GETPOST(
'desc',
'alpha')) {
1750 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1752 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1753 print
'</td><td class="CTableRow2">'.$text;
1754 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($newsource).
'">';
1755 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($member->ref).
'">';
1756 print
'</td></tr>'.
"\n";
1759 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"DateEndSubscription");
1760 print
'</td><td class="CTableRow2">'.dol_print_date($member->datefin,
'day');
1761 print
'</td></tr>'.
"\n";
1764 if ($member->last_subscription_date || $member->last_subscription_amount) {
1767 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"LastSubscriptionDate");
1768 print
'</td><td class="CTableRow2">'.dol_print_date($member->last_subscription_date,
'day');
1769 print
'</td></tr>'.
"\n";
1773 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"LastSubscriptionAmount");
1774 print
'</td><td class="CTableRow2">'.price($member->last_subscription_amount);
1775 print
'</td></tr>'.
"\n";
1777 if (empty($amount) && !
GETPOST(
'newamount',
'alpha')) {
1778 $_GET[
'newamount'] = $member->last_subscription_amount;
1779 $_GET[
'amount'] = $member->last_subscription_amount;
1781 if (!empty($member->last_subscription_amount) && !GETPOSTISSET(
'newamount') && is_numeric($amount)) {
1782 $amount = max($member->last_subscription_amount, $amount);
1786 $amountbytype = $adht->amountByType(1);
1788 $typeid = $adht->id;
1789 $caneditamount = $adht->caneditamount;
1791 if ($member->type) {
1792 $oldtypeid = $member->typeid;
1793 $newtypeid = (int) (GETPOSTISSET(
"typeid") ?
GETPOSTINT(
"typeid") : $member->typeid);
1795 $typeid = $newtypeid;
1796 $adht->fetch($typeid);
1799 $caneditamount = $adht->caneditamount;
1803 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"LastMemberType");
1804 print
'</td><td class="CTableRow2">'.dol_escape_htmltag($member->type);
1805 print
"</td></tr>\n";
1808 $member->typeid = $newtypeid;
1809 $member->type = (string)
dol_getIdFromCode($db, $newtypeid,
'adherent_type',
'rowid',
'libelle');
1815 $amount = (!empty($amountbytype[$member->typeid])) ? $amountbytype[$member->typeid] : $member->last_subscription_amount;
1817 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"NewSubscription");
1818 print
'</td><td class="CTableRow2">';
1819 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);
1820 print "</td></tr>\n
";
1821 } elseif ($action == 'dopayment') {
1822 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("NewMemberType
");
1823 print '</td><td class="CTableRow2
">'.dol_escape_htmltag($member->type);
1824 print '<input type="hidden
" name="membertypeid
" value="'.$member->typeid.'">';
1825 print "</td></tr>\n
";
1828 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("MemberType
");
1829 print '</td><td class="CTableRow2
">'.dol_escape_htmltag($member->type);
1830 print "</td></tr>\n
";
1835 // Add hook to complete the form
1836 $parameters = array('mode' => 'renewal');
1837 $reshook = $hookmanager->executeHooks('membershipNewSubscriptionPublicForm', $parameters, $object, $action);
1839 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
1843 // TODO Move this into previous hook
1844 if (getDolGlobalString('MEMBER_NEWFORM_DOLIBARRTURNOVER') && $action != 'dopayment') {
1846 if ($member->thirdparty instanceOf Societe) {
1847 $country_id = $member->thirdparty->country_id;
1849 $checkednature = $member->morphy;
1850 print '<input type="hidden
" name="moralinput
" id="moralinput
" value="'.$checkednature.'">';
1852 // Is it a Preferred Partner
1854 include_once DOL_DOCUMENT_ROOT.'/partnership/class/partnership.class.php';
1855 $partnership = new Partnership($db);
1856 // @phan-suppress-next-line PhanPluginSuspiciousParamPosition
1857 $result = $partnership->fetch(0, null, null, $member->thirdparty->id);
1862 // Do not set a default amount MEMBER_NEWFORM_AMOUNT if you use MEMBER_NEWFORM_DOLIBARRTURNOVER
1863 $s = $langs->trans("AreYouAPreferredPartner
", '<a href="https:
1864 $s = str_replace(
'{s1}',
'Preferred Partner', $s);
1865 print
'<tr id="trbudget" class="trcompany"><td><label for="pp" class="small">'.$s.
'</label></td><td>';
1866 print
'<input type="checkbox" name="pp" id="pp" value="1"'.((GETPOST(
'reload') ?
GETPOST(
'pp') : $pp) ?
' checked="checked"' :
'').
' class="reposition">';
1869 print
'<tr id="trbudget" class="trcompany"><td class=""><span class="small">'.$langs->trans(
"TurnoverOrBudget").
'</span></td><td>';
1871 $country_code =
dol_getIdFromCode($db, $country_id,
'c_country',
'rowid',
'code');
1872 if ($country_code ===
'FR' && $checkednature ===
'mor' && (
GETPOST(
'reload') ?
GETPOST(
'pp') : $pp)) {
1873 print
'<input type="text" name="budget" id="budget" class="flat turnover right width100" value="'.GETPOST(
'budget').
'"'.($action !=
'dopayment' ?
' required autofocus' :
'').
'>';
1875 $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+');
1876 print $form->selectarray(
'budget', $arraybudget,
GETPOSTINT(
'budget'), 1, 0, 0, ($checkednature ===
'mor' ?
'required' :
''), 0, 0, 0,
'');
1880 print
'<script type="text/javascript">
1881 jQuery(document).ready(function() {
1884 newamount = initturnover();
1885 jQuery("#amount").val(newamount);
1886 jQuery("#newamount").val(newamount);
1890 jQuery("#selectcountry_id").change(function() {
1891 console.log("We change country (code added for association, replace common code), so we reload page");
1892 jQuery("#budget").val(\'\');
1893 jQuery("#amount").val(\'\');
1894 jQuery("#newamount").val(\'\');
1895 jQuery("#amounthidden").val(\'\');
1897 jQuery("#pp").change(function() {
1898 console.log("We change the preferred partner status");
1899 selectcountry_id = jQuery("#selectcountry_id").val();
1900 morphy = jQuery("#moralinput").is(\':checked\') ? \'mor\' : \'phy\';
1901 jQuery("#budget").val(\'\');
1902 jQuery("#amount").val(\'\');
1903 jQuery("#amounthidden").val(\'\');
1904 jQuery("#newamount").val(\'\');
1905 jQuery("#reload").val(\'1\');
1906 document.paymentform.action.value="";
1907 jQuery("#dolpaymentform").submit();
1909 jQuery("#budget").change(function() {
1910 console.log("Turnover amount has been modified on change");
1911 newamount = initturnover();
1912 jQuery("#amount").val(newamount);
1913 jQuery("#amounthidden").val(newamount);
1914 jQuery("#newamount").val(newamount);
1916 jQuery("#budget").keyup(function() {
1917 console.log("Turnover amount has been modified on keyup");
1918 newamount = initturnover();
1919 jQuery("#amount").val(newamount);
1920 jQuery("#amounthidden").val(newamount);
1921 jQuery("#newamount").val(newamount);
1924 function initturnover() {
1927 //morphy = jQuery("#moralinput").is(\':checked\') ? \'mor\' : \'phy\';
1928 morphy = jQuery("#moralinput").val();
1929 selectcountry_id = '.((int) $country_id).
';
1930 pp = jQuery("#pp").is(\':checked\') ? true : false;
1931 console.log("Set fields according to nature and other properties");
1932 console.log("morphy="+morphy);
1933 console.log("selectcountry_id="+selectcountry_id);
1934 console.log("pp="+pp);
1936 if (morphy == \'phy\') {
1937 jQuery(".amount").val('.((float) $amount).
');
1938 jQuery("#trbirth").show();
1939 jQuery(".trcompany").hide();
1940 jQuery(".trbudget").hide();
1941 newamount = '.((float) $amount).
';
1943 jQuery(".amount").val(\'\');
1944 jQuery("#trbirth").hide();
1945 jQuery(".trcompany").show();
1946 jQuery(".trbudget").show();
1947 jQuery(".hideifautoturnover").hide();
1949 jQuery("#budget").val(\'\');
1952 if (selectcountry_id == 1) {
1953 if (jQuery("#budget").val() == \'\') {
1957 console.log("value selected in input text field is "+jQuery("#budget").val());
1958 newamount = Math.max(Math.round(price2numjs(jQuery("#budget").val()) * 0.005), 50);
1959 console.log("newamount = "+newamount);
1961 console.log("not a pp");
1962 if (jQuery("#budget").val() > 0) {
1963 console.log("value found in budget is "+jQuery("#budget").val());
1964 newamount = jQuery("#budget").val();
1966 jQuery("#budget").val(\'\');
1971 if (jQuery("#budget").val() > 0) {
1972 newamount = jQuery("#budget").val();
1974 jQuery("#budget").val(\'\');
1984 print
'</td></tr>'.
"\n";
1990 $amount = ($member->last_subscription_amount ? $member->last_subscription_amount : (empty($amountbytype[$typeid]) ? 0 : $amountbytype[$typeid]));
1997 if ($caneditamount && !
GETPOST(
'reload') && GETPOSTISSET(
'amount') &&
GETPOSTFLOAT(
'amount',
'MT') > 0) {
2001 if ($caneditamount && !
GETPOST(
'reload') && GETPOSTISSET(
'newamount') &&
GETPOSTFLOAT(
'newamount',
'MT') > 0) {
2005 $amount = max(0, (
float) $amount, (
float)
getDolGlobalInt(
"MEMBER_MIN_AMOUNT"));
2008 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
2011 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>';
2013 print
'</td><td class="CTableRow2">';
2015 $caneditamount = $adht->caneditamount;
2018 if ($caneditamount && ($action !=
'dopayment' ||
GETPOST(
'reload'))) {
2019 if (GETPOSTISSET(
'newamount')) {
2020 print
'<input type="text" class="width75 amount" name="newamount" id="newamount" value="'.price(
price2num(
GETPOST(
'newamount'),
'', 2), 1, $langs, 1, -1, -1).
'">';
2022 print
'<input type="text" class="width75 amount" name="newamount" id="newamount" value="'.price($amount, 1, $langs, 1, -1, -1).
'">';
2025 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
2026 if ($minimumamount > $amount) {
2027 print
' <span class="opacitymedium small">'. $langs->trans(
"AmountIsLowerToMinimumNotice",
price($minimumamount, 1, $langs, 1, -1, -1, $currency)).
'</span>';
2029 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
2031 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
2032 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
2033 print
'</td></tr>'.
"\n";
2036 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
2037 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
2038 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
2039 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
2040 print
'</td></tr>'.
"\n";
2043 $shipToName = $member->getFullName($langs);
2044 $shipToStreet = $member->address;
2045 $shipToCity = $member->town;
2046 $shipToState = $member->state_code;
2047 $shipToCountryCode = $member->country_code;
2048 $shipToZip = $member->zip;
2049 $shipToStreet2 =
'';
2050 $phoneNum = $member->phone;
2051 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
2052 print
'<!-- Shipping address information -->';
2053 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
2054 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
2055 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
2056 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
2057 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
2058 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
2059 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
2060 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
2062 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
2064 if (is_object($member->thirdparty)) {
2065 print
'<input type="hidden" name="thirdparty_id" value="'.$member->thirdparty->id.
'">'.
"\n";
2067 print
'<input type="hidden" name="email" value="'.$member->email.
'">'.
"\n";
2068 $labeldesc = $langs->trans(
"PaymentSubscription");
2069 if (
GETPOST(
'desc',
'alpha')) {
2070 $labeldesc =
GETPOST(
'desc',
'alpha');
2072 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
2076if ($source ==
'donation') {
2077 dol_syslog(
"newpayment.php source=donation", LOG_DEBUG);
2080 $langs->load(
"don");
2082 require_once DOL_DOCUMENT_ROOT.
'/don/class/don.class.php';
2084 $don =
new Don($db);
2086 $result = $don->fetch((
int) $ref);
2088 $mesg = $don->error;
2091 $don->fetch_thirdparty();
2095 if ($action !=
'dopayment') {
2096 if (
GETPOST(
"amount",
'alpha')) {
2097 $amount =
GETPOST(
"amount",
'alpha');
2099 $amount = $don->getRemainToPay();
2104 if (
GETPOST(
'fulltag',
'alpha')) {
2105 $fulltag =
GETPOST(
'fulltag',
'alpha');
2110 $fulltag .=
'.TAG='.$TAG;
2116 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
2117 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
2118 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
2119 print
'</td></tr>'.
"\n";
2122 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
2123 print
'</td><td class="CTableRow2"><b>';
2124 if (!empty($don->societe)) {
2125 print $don->societe;
2127 print $don->getFullName($langs);
2130 print
'</td></tr>'.
"\n";
2133 $text =
'<b>'.$langs->trans(
"PaymentDonation").
'</b>';
2134 if (
GETPOST(
'desc',
'alpha')) {
2135 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
2137 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
2138 print
'</td><td class="CTableRow2">'.$text;
2139 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($source).
'">';
2140 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($don->ref).
'">';
2141 print
'</td></tr>'.
"\n";
2144 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
2145 if (empty($amount)) {
2147 print
' ('.$langs->trans(
"ToComplete");
2150 print
' - <a href="' .
getDolGlobalString(
'DONATION_EXT_URL_SUBSCRIPTION_INFO').
'" rel="external" target="_blank" rel="noopener noreferrer">'.$langs->trans(
"SeeHere").
'</a>';
2156 print
'</td><td class="CTableRow2">';
2158 if (empty($amount) || !is_numeric($amount)) {
2161 if (empty($valtoshow)) {
2173 if (empty($amount) || !is_numeric($amount)) {
2178 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
2179 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.$valtoshow.
'">';
2181 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
2183 $valtoshow = $amount;
2186 $amount = $valtoshow;
2188 print
'<b class="amount">'.price($valtoshow, 1, $langs, 1, -1, -1, $currency).
'</b>';
2189 print
'<input type="hidden" name="amount" value="'.$valtoshow.
'">';
2190 print
'<input type="hidden" name="newamount" value="'.$valtoshow.
'">';
2192 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
2193 print
'</td></tr>'.
"\n";
2196 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
2197 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
2198 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
2199 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
2200 print
'</td></tr>'.
"\n";
2203 $shipToName = $don->getFullName($langs);
2204 $shipToStreet = $don->address;
2205 $shipToCity = $don->town;
2206 $shipToState = $don->state_code;
2207 $shipToCountryCode = $don->country_code;
2208 $shipToZip = $don->zip;
2209 $shipToStreet2 =
'';
2210 $phoneNum = $don->phone;
2211 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
2212 print
'<!-- Shipping address information -->';
2213 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
2214 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
2215 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
2216 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
2217 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
2218 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
2219 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
2220 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
2222 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
2224 if (is_object($don->thirdparty)) {
2225 print
'<input type="hidden" name="thirdparty_id" value="'.$don->thirdparty->id.
'">'.
"\n";
2227 print
'<input type="hidden" name="email" value="'.$don->email.
'">'.
"\n";
2228 $labeldesc = $langs->trans(
"PaymentSubscription");
2229 if (
GETPOST(
'desc',
'alpha')) {
2230 $labeldesc =
GETPOST(
'desc',
'alpha');
2232 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
2235if ($source ==
'organizedeventregistration' && is_object($thirdparty)) {
2236 dol_syslog(
"newpayment.php source=organizedeventregistration", LOG_DEBUG);
2239 $langs->loadLangs(array(
"members",
"eventorganization"));
2241 if (
GETPOST(
'fulltag',
'alpha')) {
2242 $fulltag =
GETPOST(
'fulltag',
'alpha');
2247 $fulltag .=
'.TAG='.$TAG;
2253 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
2254 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
2255 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
2256 print
'</td></tr>'.
"\n";
2259 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Attendee");
2260 print
'</td><td class="CTableRow2"><b>';
2261 print $attendee->email;
2262 print($thirdparty->name ?
' ('.$thirdparty->name.
')' :
'');
2264 print
'</td></tr>'.
"\n";
2266 if (! is_object($attendee->project)) {
2267 $text =
'ErrorProjectNotFound';
2269 $text = $langs->trans(
"PaymentEvent").
' - '.$attendee->project->title;
2273 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
2274 print
'</td><td class="CTableRow2"><b>'.$text.
'</b>';
2275 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($source).
'">';
2276 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag((
string) $invoice->id).
'">';
2277 print
'</td></tr>'.
"\n";
2280 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
2281 print
'</td><td class="CTableRow2">';
2282 $valtoshow = $amount;
2283 print
'<b class="amount">'.price($valtoshow, 1, $langs, 1, -1, -1, $currency).
'</b>';
2284 print
'<input type="hidden" name="amount" value="'.$valtoshow.
'">';
2285 print
'<input type="hidden" name="newamount" value="'.$valtoshow.
'">';
2286 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
2287 print
'</td></tr>'.
"\n";
2290 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
2291 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
2292 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
2293 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
2294 print
'</td></tr>'.
"\n";
2297 $shipToName = $thirdparty->getFullName($langs);
2298 $shipToStreet = $thirdparty->address;
2299 $shipToCity = $thirdparty->town;
2300 $shipToState = $thirdparty->state_code;
2301 $shipToCountryCode = $thirdparty->country_code;
2302 $shipToZip = $thirdparty->zip;
2303 $shipToStreet2 =
'';
2304 $phoneNum = $thirdparty->phone;
2305 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
2306 print
'<!-- Shipping address information -->';
2307 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
2308 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
2309 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
2310 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
2311 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
2312 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
2313 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
2314 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
2316 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
2318 print
'<input type="hidden" name="thirdparty_id" value="'.$thirdparty->id.
'">'.
"\n";
2319 print
'<input type="hidden" name="email" value="'.$thirdparty->email.
'">'.
"\n";
2320 $labeldesc = $langs->trans(
"PaymentSubscription");
2321 if (
GETPOST(
'desc',
'alpha')) {
2322 $labeldesc =
GETPOST(
'desc',
'alpha');
2324 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
2327if ($source ==
'boothlocation') {
2328 dol_syslog(
"newpayment.php source=boothlocation", LOG_DEBUG);
2331 $langs->load(
"members");
2333 if (
GETPOST(
'fulltag',
'alpha')) {
2334 $fulltag =
GETPOST(
'fulltag',
'alpha');
2339 $fulltag .=
'.TAG='.$TAG;
2345 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
2346 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
2347 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
2348 print
'</td></tr>'.
"\n";
2351 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Attendee");
2352 print
'</td><td class="CTableRow2"><b>';
2353 print $thirdparty->name;
2355 print
'</td></tr>'.
"\n";
2358 $text =
'<b>'.$langs->trans(
"PaymentBoothLocation").
'</b>';
2359 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
2360 print
'</td><td class="CTableRow2">'.$text;
2361 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($source).
'">';
2362 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag((
string) $invoice->id).
'">';
2363 print
'</td></tr>'.
"\n";
2366 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
2367 print
'</td><td class="CTableRow2">';
2368 $valtoshow = $amount;
2369 print
'<b class="amount">'.price($valtoshow, 1, $langs, 1, -1, -1, $currency).
'</b>';
2370 print
'<input type="hidden" name="amount" value="'.$valtoshow.
'">';
2371 print
'<input type="hidden" name="newamount" value="'.$valtoshow.
'">';
2372 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
2373 print
'</td></tr>'.
"\n";
2376 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
2377 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
2378 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
2379 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
2380 print
'</td></tr>'.
"\n";
2383 $shipToName = $thirdparty->getFullName($langs);
2384 $shipToStreet = $thirdparty->address;
2385 $shipToCity = $thirdparty->town;
2386 $shipToState = $thirdparty->state_code;
2387 $shipToCountryCode = $thirdparty->country_code;
2388 $shipToZip = $thirdparty->zip;
2389 $shipToStreet2 =
'';
2390 $phoneNum = $thirdparty->phone;
2391 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
2392 print
'<!-- Shipping address information -->';
2393 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
2394 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
2395 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
2396 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
2397 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
2398 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
2399 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
2400 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
2402 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
2404 print
'<input type="hidden" name="thirdparty_id" value="'.$thirdparty->id.
'">'.
"\n";
2405 print
'<input type="hidden" name="email" value="'.$thirdparty->email.
'">'.
"\n";
2406 $labeldesc = $langs->trans(
"PaymentSubscription");
2407 if (
GETPOST(
'desc',
'alpha')) {
2408 $labeldesc =
GETPOST(
'desc',
'alpha');
2410 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
2413if (!$found && !$mesg) {
2414 $mesg = $langs->trans(
"ErrorBadParameters");
2418 print
'<tr><td align="center" colspan="2"><br><div class="warning">'.dol_escape_htmltag($mesg, 1, 1,
'br').
'</div></td></tr>'.
"\n";
2421print
'</table>'.
"\n";
2426if ($action !=
'dopayment') {
2427 dol_syslog(
"newpayment.php action is not dopayment so we show all payment modes", LOG_DEBUG);
2429 if ($found && !$error) {
2432 'source' => $source,
2436 $reshook = $hookmanager->executeHooks(
'doCheckStatus', $parameters, $object, $action);
2439 } elseif ($reshook > 0) {
2440 print $hookmanager->resPrint;
2443 if ($source ==
'order' &&
$object->billed) {
2444 print
'<br><br><div class="amountpaymentcomplete size12x wrapimp">'.$langs->trans(
"OrderBilled").
'</div>';
2445 } elseif ($source ==
'invoice' &&
$object->paye) {
2446 print
'<br><br><div class="amountpaymentcomplete size12x wrapimp">'.$langs->trans(
"InvoicePaid").
'</div>';
2455 print
'<br><br><div class="amountpaymentcomplete size12x wrapimp">'.$langs->trans(
"Abandoned").
'</div>';
2456 } elseif ($source ==
'donation' &&
$object->paid) {
2457 print
'<br><br><div class="amountpaymentcomplete size12x wrapimp">'.$langs->trans(
"DonationPaid").
'</div>';
2460 if (($source ==
'member' || $source ==
'membersubscription') &&
$object->datefin >
dol_now()) {
2461 $langs->load(
"members");
2462 print
'<br><div class="amountpaymentcomplete size12x wrapimp">';
2463 $s = $langs->trans(
"MembershipPaid",
'{s1}');
2464 print str_replace(
'{s1}',
'<span class="nobold">'.
dol_print_date(
$object->datefin,
'day').
'</span>', $s);
2466 print
'<div class="opacitymedium margintoponly">'.$langs->trans(
"PaymentWillBeRecordedForNextPeriod").
'</div>';
2474 'paymentmethod' => $paymentmethod
2476 $reshook = $hookmanager->executeHooks(
'doAddButton', $parameters, $object, $action);
2479 } elseif ($reshook >= 0) {
2480 print $hookmanager->resPrint;
2483 if ((empty($paymentmethod) || $paymentmethod ==
'paybox') &&
isModEnabled(
'paybox')) {
2484 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").
'">';
2486 print
'<span class="buttonpaymentsmall">'.$langs->trans(
"CreditOrDebitCard").
'</span>';
2489 $( document ).ready(function() {
2490 $("#div_dopayment_paybox").click(function(){
2491 $("#dopayment_paybox").click();
2493 $("#dopayment_paybox").click(function(e){
2494 $("#div_dopayment_paybox").css( \'cursor\', \'wait\' );
2495 e.stopPropagation();
2502 if ((empty($paymentmethod) || $paymentmethod ==
'stripe') &&
isModEnabled(
'stripe')) {
2511 $noidempotency_key = (GETPOSTISSET(
'noidempotency') ?
GETPOSTINT(
'noidempotency') : (
getDolGlobalInt(
'STRIPE_USE_IDEMPOTENCY_BY_DEFAULT') ? 0 : 1));
2513 print
'<div class="button buttonpayment" id="div_dopayment_stripe">';
2514 print
'<span class="fa fa-credit-card"></span> ';
2515 print
'<input class="" type="submit" id="dopayment_stripe" name="dopayment_stripe" value="'.$langs->trans(
"StripeDoPayment").
'">';
2516 print
'<input type="hidden" name="noidempotency" value="'.$noidempotency_key.
'">';
2518 print
'<span class="buttonpaymentsmall">'.$langs->trans(
"CreditOrDebitCard").
'</span>';
2521 $( document ).ready(function() {
2522 $("#div_dopayment_stripe").click(function(){
2523 $("#dopayment_stripe").click();
2525 $("#dopayment_stripe").click(function(e){
2526 $("#div_dopayment_stripe").css( \'cursor\', \'wait\' );
2527 e.stopPropagation();
2536 if ((empty($paymentmethod) || $paymentmethod ==
'paypal') &&
isModEnabled(
'paypal')) {
2538 $conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY =
'integral';
2547 print
'<div class="button buttonpayment" id="div_dopayment_paypal">';
2549 print
'<div style="line-height: 1em"> </div>';
2551 print
'<span class="fab fa-paypal"></span> <input class="" type="submit" id="dopayment_paypal" name="dopayment_paypal" value="'.$langs->trans(
"PaypalDoPayment").
'">';
2554 print
'<span class="buttonpaymentsmall">'.$langs->trans(
"CreditOrDebitCard").
'</span><span class="buttonpaymentsmall"> - </span>';
2555 print
'<span class="buttonpaymentsmall">'.$langs->trans(
"PayPalBalance").
'</span>';
2563 $( document ).ready(function() {
2564 $("#div_dopayment_paypal").click(function(){
2565 $("#dopayment_paypal").click();
2567 $("#dopayment_paypal").click(function(e){
2568 $("#div_dopayment_paypal").css( \'cursor\', \'wait\' );
2569 e.stopPropagation();
2585print
'</td></tr>'.
"\n";
2587print
'</table>'.
"\n";
2589print
'</form>'.
"\n";
2597if (preg_match(
'/^dopayment/', $action)) {
2598 dol_syslog(
"newpayment.php action is dopayment... because we clicked on a payment mode - amount = ".$amount);
2602 $_SESSION[
"currencyCodeType"] = $currency;
2603 $_SESSION[
"FinalPaymentAmt"] = $amount;
2604 $_SESSION[
'ipaddress'] = ($remoteip ? $remoteip :
'unknown');
2605 $_SESSION[
"paymentType"] =
'';
2610 if (
GETPOST(
'dopayment_stripe',
'alpha')) {
2618 background-color: white;
2621 border: 1px solid transparent;
2622 box-shadow: 0 1px 3px 0 #e6ebf1;
2623 -webkit-transition: box-shadow 150ms ease;
2624 transition: box-shadow 150ms ease;
2627 .StripeElement--focus {
2628 box-shadow: 0 1px 3px 0 #cfd7df;
2631 .StripeElement--invalid {
2632 border-color: #fa755a;
2635 .StripeElement--webkit-autofill {
2636 background-color: #fefde5 !important;
2642 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";
2643 print
'<form action="'.$_SERVER[
'REQUEST_URI'].
'" method="POST" id="payment-form">'.
"\n";
2645 print
'<input type="hidden" name="token" value="'.newToken().
'">'.
"\n";
2646 print
'<input type="hidden" name="dopayment_stripe" value="1">'.
"\n";
2647 print
'<input type="hidden" name="action" value="charge">'.
"\n";
2648 print
'<input type="hidden" name="tag" value="'.$TAG.
'">'.
"\n";
2649 print
'<input type="hidden" name="s" value="'.$source.
'">'.
"\n";
2650 print
'<input type="hidden" name="ref" value="'.$REF.
'">'.
"\n";
2651 print
'<input type="hidden" name="fulltag" value="'.$FULLTAG.
'">'.
"\n";
2652 print
'<input type="hidden" name="suffix" value="'.$suffix.
'">'.
"\n";
2653 print
'<input type="hidden" name="securekey" value="'.$SECUREKEY.
'">'.
"\n";
2654 print
'<input type="hidden" name="e" value="'.$entity.
'" />'.
"\n";
2655 print
'<input type="hidden" name="amount" value="'.$amount.
'">'.
"\n";
2656 print
'<input type="hidden" name="currency" value="'.$currency.
'">'.
"\n";
2658 print
'<input type="hidden" name="email" value="'.GETPOST(
'email',
'alpha').
'" />';
2659 print
'<input type="hidden" name="thirdparty_id" value="'.GETPOSTINT(
'thirdparty_id').
'" />';
2660 print
'<input type="hidden" name="lang" value="'.$getpostlang.
'">';
2666 if (array_key_exists(
'ORD', $tmptag) && (
int) $tmptag[
'ORD'] > 0) {
2667 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
2669 $result =
$object->fetch((
int) $tmptag[
'ORD']);
2671 if (
$object->total_ttc != $amount) {
2678 if (!$checkamount) {
2679 dol_syslog(
"Hack attempt detected", LOG_WARNING);
2680 setEventMessages(
'Bad value for amount. Reported as a hack attempt.',
null,
'errors');
2684 require_once DOL_DOCUMENT_ROOT.
'/stripe/class/stripe.class.php';
2686 $service =
'StripeLive';
2689 $service =
'StripeTest';
2693 $stripe =
new Stripe($db);
2694 $stripeacc = $stripe->getStripeAccount($service);
2695 if (is_object($object) && is_object(
$object->thirdparty)) {
2696 $stripecu = $stripe->customerStripe(
$object->thirdparty, $stripeacc, $servicestatus, 1);
2700 dol_syslog(
"newpayment.php Create a Paymentintent for amount=".$amount, LOG_DEBUG);
2704 $noidempotency_key = (GETPOSTISSET(
'noidempotency') ?
GETPOSTINT(
'noidempotency') : (
getDolGlobalInt(
'STRIPE_USE_IDEMPOTENCY_BY_DEFAULT') ? 0 : 1));
2706 $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);
2709 if ($stripe->error) {
2720 <table id="dolpaymenttable" summary="Payment form" class="center centpercent">
2721 <tbody><tr><td class="textpublicpayment">';
2724 print
'<div id="payment-request-button"><!-- A Stripe Element will be inserted here. --></div>';
2727 print
'<div class="form-row '.(getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2 ?
'center' :
'left').
'">';
2728 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 1) {
2729 print
'<label for="card-element">'.$langs->trans(
"CreditOrDebitCard").
'</label>';
2730 print
'<br><input id="cardholder-name" class="marginbottomonly" name="cardholder-name" value="" type="text" placeholder="'.$langs->trans(
"CardOwner").
'" autocomplete="off" spellcheck="false" autofocus required>';
2733 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 1) {
2734 print
'<div id="card-element">
2735 <!-- a Stripe Element will be inserted here. -->
2738 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2) {
2739 print
'<div id="payment-element">
2740 <!-- a Stripe Element will be inserted here. -->
2744 print
'<!-- Used to display form errors -->
2745 <div id="card-errors" role="alert"></div>
2749 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>';
2750 print
'<img id="hourglasstopay" class="hidden" src="'.DOL_URL_ROOT.
'/theme/'.$conf->theme.
'/img/working.gif">';
2752 print
'</td></tr></tbody>';
2757 if (empty($paymentintent)) {
2758 print
'<center>'.$langs->trans(
"Error").
' - Failed to get PaymentIntent</center>';
2760 print
'<input type="hidden" name="paymentintent_id" value="'.$paymentintent->id.
'">';
2765 print
'</form>'.
"\n";
2769 if (empty($stripearrayofkeys[
'publishable_key'])) {
2770 $langs->load(
"errors");
2771 print
info_admin($langs->trans(
"ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv(
"Stripe")), 0, 0,
'error marginleftonly marginrightonly');
2773 print
'<!-- JS Code for Stripe components -->';
2774 print
'<script src="https://js.stripe.com/v3/"></script>'.
"\n";
2775 print
'<!-- urllogofull = '.$urllogofull.
' -->'.
"\n";
2778 print
'<script type="text/javascript">'.
"\n";
2781 $amountstripe = $amount;
2785 $arrayzerounitcurrency = array(
'BIF',
'CLP',
'DJF',
'GNF',
'JPY',
'KMF',
'KRW',
'MGA',
'PYG',
'RWF',
'VND',
'VUV',
'XAF',
'XOF',
'XPF');
2786 if (!in_array($currency, $arrayzerounitcurrency)) {
2787 $amountstripe *= 100;
2791 $metadata = array(
'dol_version' => DOL_VERSION,
'dol_entity' => $conf->entity,
'ipaddress' => $ipaddress);
2792 if (is_object($object)) {
2793 $metadata[
'dol_type'] =
$object->element;
2794 $metadata[
'dol_id'] =
$object->id;
2800 $arrayforpaymentintent = array(
2801 'description' =>
'Stripe payment: '.$FULLTAG.($ref ?
' ref='.$ref :
''),
2802 "metadata" => $metadata
2805 $arrayforpaymentintent[
"statement_descriptor"] =
dol_trunc($TAG, 10,
'right',
'UTF-8', 1);
2808 $arrayforcheckout = array(
2809 'payment_method_types' => array(
'card'),
2810 'line_items' => array(array(
2811 'price_data' => array(
2812 'currency' => $currency,
2813 'unit_amount' => $amountstripe,
2814 'product_data' => array(
2815 'name' => $langs->transnoentitiesnoconv(
"Payment").
' '.$TAG,
2816 'description' =>
'Stripe payment: '.$FULLTAG.($ref ?
' ref='.$ref :
''),
2822 'mode' =>
'payment',
2823 'client_reference_id' => $FULLTAG,
2824 'success_url' => $urlok,
2825 'cancel_url' => $urlko,
2826 'payment_intent_data' => $arrayforpaymentintent
2829 $arrayforcheckout[
'customer'] = $stripecu;
2831 $arrayforcheckout[
'customer_email'] =
GETPOST(
'email',
'alpha');
2834 dol_syslog(
"We create a stripe session with \Stripe\Checkout\Session::create for amountstripe=".$amountstripe);
2836 $sessionstripe = \Stripe\Checkout\Session::create($arrayforcheckout);
2838 dol_syslog(
"sessionstripe=".$sessionstripe->id);
2844 $_SESSION[
"currencyCodeType"] = $currency;
2845 $_SESSION[
"paymentType"] =
'';
2846 $_SESSION[
"FinalPaymentAmt"] = $amount;
2847 $_SESSION[
'ipaddress'] = ($remoteip ? $remoteip :
'unknown');
2848 $_SESSION[
'payerID'] = is_object($stripecu) ? $stripecu->id :
'';
2849 $_SESSION[
'TRANSACTIONID'] = $sessionstripe->id;
2851 print $e->getMessage();
2857 if (empty($stripeacc)) {
2859 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php?>');
2863 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php?>', { stripeAccount:
'<?php echo $stripeacc; ?>' });
2868 var elements = stripe.elements();
2876 fontFamily:
'"Helvetica Neue", Helvetica, sans-serif',
2877 fontSmoothing:
'antialiased',
2885 iconColor:
'#fa755a'
2889 var cardElement = elements.create(
'card', {style: style});
2891 <?php
if (!empty($sessionstripe)) { ?>
2893 stripe.redirectToCheckout({
2897 sessionId:
'<?php print $sessionstripe->id; ?>'
2898 }).then(
function (result) {
2905 console.error(
'Failed to create Stripe Checkout Session');
2916 if (empty($stripeacc)) {
2918 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php?>');
2922 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php?>', { stripeAccount:
'<?php echo $stripeacc; ?>' });
2927 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2) {
2929 var cardButton = document.getElementById(
'buttontopay');
2930 var clientSecret = cardButton.dataset.secret;
2931 var options = { clientSecret: clientSecret };
2934 var elements = stripe.elements(options);
2939 var elements = stripe.elements();
2949 fontFamily:
'"Helvetica Neue", Helvetica, sans-serif',
2950 fontSmoothing:
'antialiased',
2958 iconColor:
'#fa755a'
2963 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2) {
2965 var paymentElement = elements.create(
"payment");
2968 paymentElement.mount(
"#payment-element");
2971 var cardButton = document.getElementById(
'buttontopay');
2973 cardButton.addEventListener(
'click',
function(event) {
2974 console.log(
"We click on buttontopay");
2975 event.preventDefault();
2978 jQuery(
'#hourglasstopay').show();
2979 jQuery(
'#buttontopay').hide();
2981 stripe.confirmPayment({
2982 elements,confirmParams: {
2983 return_url:
'<?php echo $urlok; ?>',
2984 payment_method_data: {
2987 <?php
if (
GETPOST(
'email',
'alpha') || (is_object($object) && is_object(
$object->thirdparty) && !empty(
$object->thirdparty->email))) {
2988 ?>, email:
'<?php echo dol_escape_js(GETPOST('email
', 'alpha
') ? GETPOST('email
', 'alpha
') : $object->thirdparty->email); ?>'<?php
2990 <?php
if (is_object($object) && is_object(
$object->thirdparty) && !empty(
$object->thirdparty->phone)) {
2991 ?>, phone:
'<?php echo dol_escape_js($object->thirdparty->phone); ?>'<?php
2993 <?php
if (is_object($object) && is_object(
$object->thirdparty)) {
2995 city:
'<?php echo dol_escape_js($object->thirdparty->town); ?>',
2996 <?php if ($object->thirdparty->country_code) {
2997 ?>country:
'<?php echo dol_escape_js($object->thirdparty->country_code); ?>',<?php
2999 line1:
'<?php echo dol_escape_js(preg_replace('/\s\s+/
', ' ', $object->thirdparty->address)); ?>',
3000 postal_code:
'<?php echo dol_escape_js($object->thirdparty->zip); ?>'
3006 save_payment_method:<?php
if ($stripecu) {
3013 ).then(
function(result) {
3014 console.log(result);
3016 console.log(
"Error on result of handleCardPayment");
3017 jQuery(
'#buttontopay').show();
3018 jQuery(
'#hourglasstopay').hide();
3020 var errorElement = document.getElementById(
'card-errors');
3021 console.log(result);
3022 errorElement.textContent = result.error.message;
3025 console.log(
"No error on result of handleCardPayment, so we submit the form");
3027 jQuery(
'#buttontopay').hide();
3028 jQuery(
'#hourglasstopay').show();
3030 jQuery(
'#payment-form').submit();
3038 var cardElement = elements.create(
'card', {style: style});
3041 cardElement.mount(
'#card-element');
3044 cardElement.addEventListener(
'change',
function(event) {
3045 var displayError = document.getElementById(
'card-errors');
3047 console.log(
"Show event error (like 'Incorrect card number', ...)");
3048 displayError.textContent =
event.error.message;
3050 console.log(
"Reset error message");
3051 displayError.textContent =
'';
3056 var cardholderName = document.getElementById(
'cardholder-name');
3057 var cardButton = document.getElementById(
'buttontopay');
3058 var clientSecret = cardButton.dataset.secret;
3060 cardButton.addEventListener(
'click',
function(event) {
3061 console.log(
"We click on buttontopay");
3062 event.preventDefault();
3064 if (cardholderName.value ==
'')
3066 console.log(
"Field Card holder is empty");
3067 var displayError = document.getElementById(
'card-errors');
3068 displayError.textContent =
'<?php print dol_escape_js($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("CardOwner"))); ?>';
3073 jQuery(
'#hourglasstopay').show();
3074 jQuery(
'#buttontopay').hide();
3076 stripe.handleCardPayment(
3077 clientSecret, cardElement, {
3078 payment_method_data: {
3080 name: cardholderName.value
3081 <?php
if (
GETPOST(
'email',
'alpha') || (is_object($object) && is_object(
$object->thirdparty) && !empty(
$object->thirdparty->email))) {
3082 ?>, email:
'<?php echo dol_escape_js(GETPOST('email
', 'alpha
') ? GETPOST('email
', 'alpha
') : $object->thirdparty->email); ?>'<?php
3084 <?php
if (is_object($object) && is_object(
$object->thirdparty) && !empty(
$object->thirdparty->phone)) {
3085 ?>, phone:
'<?php echo dol_escape_js($object->thirdparty->phone); ?>'<?php
3087 <?php
if (is_object($object) && is_object(
$object->thirdparty)) {
3089 city:
'<?php echo dol_escape_js($object->thirdparty->town); ?>',
3090 <?php if ($object->thirdparty->country_code) {
3091 ?>country:
'<?php echo dol_escape_js($object->thirdparty->country_code); ?>',<?php
3093 line1:
'<?php echo dol_escape_js(preg_replace('/\s\s+/
', ' ', $object->thirdparty->address)); ?>',
3094 postal_code:
'<?php echo dol_escape_js($object->thirdparty->zip); ?>'
3100 save_payment_method:<?php
if ($stripecu) {
3106 ).then(
function(result) {
3107 console.log(result);
3109 console.log(
"Error on result of handleCardPayment");
3110 jQuery(
'#buttontopay').show();
3111 jQuery(
'#hourglasstopay').hide();
3113 var errorElement = document.getElementById(
'card-errors');
3114 errorElement.textContent = result.error.message;
3117 console.log(
"No error on result of handleCardPayment, so we submit the form");
3119 jQuery(
'#buttontopay').hide();
3120 jQuery(
'#hourglasstopay').show();
3122 jQuery(
'#payment-form').submit();
3140 'paymentmethod' => $paymentmethod,
3141 'amount' => $amount,
3142 'currency' => $currency,
3143 'tag' =>
GETPOST(
"tag",
'alpha'),
3144 'dopayment' =>
GETPOST(
'dopayment',
'alpha')
3147 $reshook = $hookmanager->executeHooks(
'doPayment', $parameters, $object, $action);
3150 } elseif ($reshook > 0) {
3151 print $hookmanager->resPrint;
if(! $sortfield) if(! $sortorder) $object
global $dolibarr_main_url_root
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Class to manage members of a foundation.
Class to manage members type.
Class to manage customers orders.
Class for ConferenceOrBoothAttendee.
Class to manage lines of contracts.
Class to manage donations.
Class to manage invoices.
const STATUS_ABANDONED
Classified abandoned and no payment done.
Class to manage products or services.
Class to manage third parties objects (customers, suppliers, prospects...)
Stripe class @TODO No reason to extend CommonObject.
htmlPrintOnlineFooter($fromcompany, $langs, $addformmessage=0, $suffix='', $object=null)
Show footer of company in HTML public pages.
dol_is_file($pathoffile)
Return if path is a file.
dol_now($mode='gmt')
Return date for now.
dol_getIdFromCode($db, $key, $tablename, $fieldkey='code', $fieldid='id', $entityfilter=0, $filters='', $useCache=true)
Return an id or code from a code or id.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
dolExplodeIntoArray($string, $delimiter=';', $kv='=')
Split a string with 2 keys into key array.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
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,...