41if (!defined(
'NOLOGIN')) {
44if (!defined(
'NOCSRFCHECK')) {
45 define(
"NOCSRFCHECK", 1);
47if (!defined(
'NOIPCHECK')) {
48 define(
'NOIPCHECK',
'1');
50if (!defined(
'NOBROWSERNOTIF')) {
51 define(
'NOBROWSERNOTIF',
'1');
54if (!defined(
'XFRAMEOPTIONS_ALLOWALL')) {
55 define(
'XFRAMEOPTIONS_ALLOWALL',
'1');
61$entity = (!empty($_GET[
'entity']) ? (int) $_GET[
'entity'] : (!empty($_POST[
'entity']) ? (int) $_POST[
'entity'] : (!empty($_GET[
'e']) ? (int) $_GET[
'e'] : (!empty($_POST[
'e']) ? (int) $_POST[
'e'] : 1))));
62if (is_numeric($entity)) {
63 define(
"DOLENTITY", $entity);
67require
'../../main.inc.php';
78require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
79require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
80require_once DOL_DOCUMENT_ROOT.
'/core/lib/payments.lib.php';
81require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
82require_once DOL_DOCUMENT_ROOT.
'/core/lib/security2.lib.php';
83require_once DOL_DOCUMENT_ROOT.
'/eventorganization/class/conferenceorboothattendee.class.php';
84require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
85require_once DOL_DOCUMENT_ROOT.
'/societe/class/societeaccount.class.php';
86require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
87require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
90$langs->loadLangs(array(
"main",
"other",
"dict",
"bills",
"companies",
"errors",
"paypal",
"stripe"));
94$hookmanager->initHooks(array(
'newpayment'));
100$action =
GETPOST(
'action',
'aZ09');
109$suffix =
GETPOST(
"suffix",
'aZ09');
111if (!
GETPOST(
"currency",
'alpha')) {
114 $currency =
GETPOST(
"currency",
'aZ09');
117$getpostlang =
GETPOST(
'lang',
'aZ09');
121 if (!
GETPOST(
"amount",
'alpha') && !$source) {
122 print $langs->trans(
'ErrorBadParameters').
" - amount or source";
125 if (is_numeric($amount) && !
GETPOST(
"tag",
'alpha') && !$source) {
126 print $langs->trans(
'ErrorBadParameters').
" - tag or source";
129 if ($source && !
GETPOST(
"ref",
'alpha')) {
130 print $langs->trans(
'ErrorBadParameters').
" - ref";
138$paymentintent =
null;
142if ($source ==
'organizedeventregistration') {
149 $resultinvoice = $invoice->fetch($invoiceid);
151 if ($resultinvoice <= 0) {
164 $sql =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"eventorganization_conferenceorboothattendee";
165 $sql .=
" WHERE fk_invoice = ".((int) $invoiceid);
167 $resql = $db->query($sql);
169 $obj = $db->fetch_object($resql);
171 $attendeeid = $obj->rowid;
175 if ($attendeeid > 0) {
176 $resultattendee = $attendee->fetch($attendeeid);
178 if ($resultattendee <= 0) {
181 $attendee->fetch_projet();
183 $amount =
price2num($invoice->total_ttc);
185 $thirdparty =
new Societe($db);
186 $resultthirdparty = $thirdparty->fetch($invoice->socid);
187 if ($resultthirdparty <= 0) {
194} elseif ($source ==
'boothlocation') {
198 $resultinvoice = $invoice->fetch($invoiceid);
199 if ($resultinvoice <= 0) {
202 $amount =
price2num($invoice->total_ttc);
204 $thirdparty =
new Societe($db);
205 $resultthirdparty = $thirdparty->fetch($invoice->socid);
206 if ($resultthirdparty <= 0) {
214$paymentmethod =
GETPOST(
'paymentmethod',
'alphanohtml') ?
GETPOST(
'paymentmethod',
'alphanohtml') :
'';
215$validpaymentmethod = array();
218foreach ($_POST as $key => $val) {
220 if (preg_match(
'/^dopayment_(.*)$/', $key, $reg)) {
221 $paymentmethod = $reg[1];
227$ref = $REF =
GETPOST(
'ref',
'alpha');
229$FULLTAG =
GETPOST(
"fulltag",
'alpha');
230$SECUREKEY =
GETPOST(
"securekey");
233$PAYPAL_API_SANDBOX =
"";
234$PAYPAL_API_USER =
"";
235$PAYPAL_API_PASSWORD =
"";
236$PAYPAL_API_SIGNATURE =
"";
239if (empty($ws) && preg_match(
'/WS=([^=&]+)/', $FULLTAG, $reg)) {
246$urlwithroot = DOL_MAIN_URL_ROOT;
248$urlok = $urlwithroot.
'/public/payment/paymentok.php?';
249$urlko = $urlwithroot.
'/public/payment/paymentko.php?';
251if ($ws && !defined(
'USEDOLIBARRSERVER') && !defined(
'USEDOLIBARREDITOR')) {
252 if (!empty($_SERVER[
"HTTP_X_FORWARDED_HOST"])) {
254 $tmphosts = explode(
',', $_SERVER[
"HTTP_X_FORWARDED_HOST"]);
255 $tmphosts = array_map(
'trim', $tmphosts);
256 $lastproxy = end($tmphosts);
258 include_once DOL_DOCUMENT_ROOT.
'/website/class/website.class.php';
259 $tmpwebsite =
new Website($db);
260 $tmpwebsite->fetch(0, $ws);
262 if (preg_replace(
'/https?:\/\//i',
'', $tmpwebsite->virtualhost) == $lastproxy) {
264 $urlok = $tmpwebsite->virtualhost.
'/public/payment/paymentok.php?';
265 $urlko = $tmpwebsite->virtualhost.
'/public/payment/paymentko.php?';
270if ($paymentmethod && !preg_match(
'/'.preg_quote(
'PM='.$paymentmethod,
'/').
'/', $FULLTAG)) {
271 $FULLTAG .= ($FULLTAG ?
'.' :
'').
'PM='.$paymentmethod;
274if ($ws && !preg_match(
'/'.preg_quote(
'WS='.$ws,
'/').
'/', $FULLTAG)) {
275 $FULLTAG .= ($FULLTAG ?
'.' :
'').
'WS='.$ws;
278if (!empty($suffix)) {
279 $urlok .=
'suffix='.urlencode($suffix).
'&';
280 $urlko .=
'suffix='.urlencode($suffix).
'&';
283 $urlok .=
's='.urlencode($source).
'&';
284 $urlko .=
's='.urlencode($source).
'&';
287 $urlok .=
'ref='.urlencode($REF).
'&';
288 $urlko .=
'ref='.urlencode($REF).
'&';
291 $urlok .=
'tag='.urlencode($TAG).
'&';
292 $urlko .=
'tag='.urlencode($TAG).
'&';
294if (!empty($FULLTAG)) {
295 $urlok .=
'fulltag='.urlencode($FULLTAG).
'&';
296 $urlko .=
'fulltag='.urlencode($FULLTAG).
'&';
298if (!empty($SECUREKEY)) {
299 $urlok .=
'securekey='.urlencode($SECUREKEY).
'&';
300 $urlko .=
'securekey='.urlencode($SECUREKEY).
'&';
302if (!empty($entity)) {
303 $urlok .=
'e='.urlencode((
string) ($entity)).
'&';
304 $urlko .=
'e='.urlencode((
string) ($entity)).
'&';
306if (!empty($getpostlang)) {
307 $urlok .=
'lang='.urlencode($getpostlang).
'&';
308 $urlko .=
'lang='.urlencode($getpostlang).
'&';
310$urlok = preg_replace(
'/&$/',
'', $urlok);
311$urlko = preg_replace(
'/&$/',
'', $urlko);
318@phan-var-force string $PAYPAL_API_SANDBOX
319@phan-var-force string $PAYPAL_API_OK
320@phan-var-force string $PAYPAL_API_KO
323if ((empty($paymentmethod) || $paymentmethod ==
'paypal') &&
isModEnabled(
'paypal')) {
324 global $PAYPAL_API_SANDBOX, $PAYPAL_API_OK, $PAYPAL_API_KO, $PAYPAL_API_USER, $PAYPAL_API_PASSWORD, $PAYPAL_API_SIGNATURE;
325 require_once DOL_DOCUMENT_ROOT.
'/paypal/lib/paypal.lib.php';
326 require_once DOL_DOCUMENT_ROOT.
'/paypal/lib/paypalfunctions.lib.php';
332 $PAYPAL_API_OK = $urlok;
336 $PAYPAL_API_KO = $urlko;
338 if (empty($PAYPAL_API_USER)) {
339 print
'Paypal parameter PAYPAL_API_USER is not defined. Please <a href="'.DOL_URL_ROOT.
'/paypal/admin/paypal.php">complete the setup of module PayPal first</a>.';
342 if (empty($PAYPAL_API_PASSWORD)) {
343 print
'Paypal parameter PAYPAL_API_PASSWORD is not defined. Please <a href="'.DOL_URL_ROOT.
'/paypal/admin/paypal.php">complete the setup of module PayPal first</a>.';
346 if (empty($PAYPAL_API_SIGNATURE)) {
347 print
'Paypal parameter PAYPAL_API_SIGNATURE is not defined. Please <a href="'.DOL_URL_ROOT.
'/paypal/admin/paypal.php">complete the setup of module PayPal first</a>.';
354if ((empty($paymentmethod) || $paymentmethod ==
'stripe') &&
isModEnabled(
'stripe')) {
355 require_once DOL_DOCUMENT_ROOT.
'/stripe/config.php';
364$validpaymentmethod = getValidOnlinePaymentMethods($paymentmethod);
368if ($tmpsource ==
'membersubscription') {
369 $tmpsource =
'member';
375 if ($tmpsource && $REF) {
379 if ($tmpsource != $source) {
393 dol_syslog(
"Warning: PAYMENT_SECURITY_ACCEPT_ANY_TOKEN is on", LOG_WARNING);
394 dol_syslog(
"Warning: PAYMENT_SECURITY_ACCEPT_ANY_TOKEN is on", LOG_WARNING, 0,
'_payment');
399 print
'<div class="error">Bad value for key.</div>';
405if (!empty($paymentmethod) && empty($validpaymentmethod[$paymentmethod])) {
406 print
'Payment module for payment method '.$paymentmethod.
' is not active';
409if (empty($validpaymentmethod)) {
410 print
'No active payment module (Paypal, Stripe, Paybox, ...)';
416$paramcreditor =
'ONLINE_PAYMENT_CREDITOR';
417$paramcreditorlong =
'ONLINE_PAYMENT_CREDITOR_'.$suffix;
432dol_syslog(
"--- newpayment.php action=".$action.
" paymentmethod=".$paymentmethod.
' amount='.$amount.
' newamount='.
GETPOST(
"newamount",
'alpha'), LOG_DEBUG, 0,
'_payment');
434dol_syslog(
"fulltag=".
GETPOST(
"fulltag",
'alpha').
" ws=".$ws.
" urlok=".$urlok, LOG_DEBUG, 0,
'_payment');
437if ($action ==
'dopayment') {
438 if ($paymentmethod ==
'paypal') {
440 $PAYPAL_PAYMENT_TYPE =
'Sale';
443 $origfulltag =
GETPOST(
"fulltag",
'alpha');
444 $shipToName =
GETPOST(
"shipToName",
'alpha');
445 $shipToStreet =
GETPOST(
"shipToStreet",
'alpha');
446 $shipToCity =
GETPOST(
"shipToCity",
'alpha');
447 $shipToState =
GETPOST(
"shipToState",
'alpha');
448 $shipToCountryCode =
GETPOST(
"shipToCountryCode",
'alpha');
449 $shipToZip =
GETPOST(
"shipToZip",
'alpha');
450 $shipToStreet2 =
GETPOST(
"shipToStreet2",
'alpha');
451 $phoneNum =
GETPOST(
"phoneNum",
'alpha');
452 $email =
GETPOST(
"email",
'alpha');
453 $desc =
GETPOST(
"desc",
'alpha');
457 if ($shipToCountryCode ==
'ID' && !preg_match(
'/\-/', $shipToState)) {
458 $shipToState =
'ID-'.$shipToState;
461 if (empty($PAYPAL_API_PRICE) || !is_numeric($PAYPAL_API_PRICE)) {
462 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Amount"));
466 } elseif (!$origfulltag) {
467 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"PaymentCode"));
472 dol_syslog(
"newpayment.php call paypal api and do redirect", LOG_DEBUG);
473 dol_syslog(
"newpayment.php call paypal api and do redirect", LOG_DEBUG, 0,
'_payment');
476 $PAYPAL_API_DEVISE =
"USD";
477 if (!empty($currency)) {
478 $PAYPAL_API_DEVISE = $currency;
483 dol_syslog(
"Submit Paypal form", LOG_DEBUG, 0,
'_payment');
485 dol_syslog(
"PAYPAL_API_USER: $PAYPAL_API_USER", LOG_DEBUG, 0,
'_payment');
486 dol_syslog(
"PAYPAL_API_PASSWORD: ".preg_replace(
'/./',
'*', $PAYPAL_API_PASSWORD), LOG_DEBUG, 0,
'_payment');
487 dol_syslog(
"PAYPAL_API_SIGNATURE: $PAYPAL_API_SIGNATURE", LOG_DEBUG, 0,
'_payment');
488 dol_syslog(
"PAYPAL_API_SANDBOX: $PAYPAL_API_SANDBOX", LOG_DEBUG, 0,
'_payment');
489 dol_syslog(
"PAYPAL_API_OK: $PAYPAL_API_OK", LOG_DEBUG, 0,
'_payment');
490 dol_syslog(
"PAYPAL_API_KO: $PAYPAL_API_KO", LOG_DEBUG, 0,
'_payment');
491 dol_syslog(
"PAYPAL_API_PRICE: $PAYPAL_API_PRICE", LOG_DEBUG, 0,
'_payment');
492 dol_syslog(
"PAYPAL_API_DEVISE: $PAYPAL_API_DEVISE", LOG_DEBUG, 0,
'_payment');
494 dol_syslog(
"shipToName: $shipToName", LOG_DEBUG, 0,
'_payment');
495 dol_syslog(
"shipToStreet: $shipToStreet", LOG_DEBUG, 0,
'_payment');
496 dol_syslog(
"shipToCity: $shipToCity", LOG_DEBUG, 0,
'_payment');
497 dol_syslog(
"shipToState: $shipToState", LOG_DEBUG, 0,
'_payment');
498 dol_syslog(
"shipToCountryCode: $shipToCountryCode", LOG_DEBUG, 0,
'_payment');
499 dol_syslog(
"shipToZip: $shipToZip", LOG_DEBUG, 0,
'_payment');
500 dol_syslog(
"shipToStreet2: $shipToStreet2", LOG_DEBUG, 0,
'_payment');
501 dol_syslog(
"phoneNum: $phoneNum", LOG_DEBUG, 0,
'_payment');
502 dol_syslog(
"email: $email", LOG_DEBUG, 0,
'_payment');
503 dol_syslog(
"desc: $desc", LOG_DEBUG, 0,
'_payment');
505 dol_syslog(
"SCRIPT_URI: ".(empty($_SERVER[
"SCRIPT_URI"]) ?
'' : $_SERVER[
"SCRIPT_URI"]), LOG_DEBUG, 0,
'_payment');
508 $mesg =
print_paypal_redirect((
float) $PAYPAL_API_PRICE, $PAYPAL_API_DEVISE, $PAYPAL_PAYMENT_TYPE, $PAYPAL_API_OK, $PAYPAL_API_KO, $FULLTAG);
515 if ($paymentmethod ==
'paybox') {
520 $origfulltag =
GETPOST(
"fulltag",
'alpha');
523 $urlok = preg_replace(
'/securekey=[^&]+&?/',
'', $urlok);
524 $urlko = preg_replace(
'/securekey=[^&]+&?/',
'', $urlko);
526 if (empty($PRICE) || !is_numeric($PRICE)) {
527 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Amount"));
528 } elseif (empty($email)) {
529 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ONLINE_PAYMENT_SENDEMAIL"));
531 $mesg = $langs->trans(
"ErrorBadEMail", $email);
532 } elseif (!$origfulltag) {
533 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"PaymentCode"));
535 $mesg =
'Error urlok too long '.$urlok.
' (Paybox requires 150, found '.strlen($urlok).
')';
537 $mesg =
'Error urlko too long '.$urlko.
' (Paybox requires 150, found '.strlen($urlok).
')';
541 dol_syslog(
"newpayment.php call paybox api and do redirect", LOG_DEBUG, 0,
'_payment');
543 include_once DOL_DOCUMENT_ROOT.
'/paybox/lib/paybox.lib.php';
551 if ($paymentmethod ==
'stripe') {
552 if (
GETPOST(
'newamount',
'alpha')) {
555 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Amount")),
null,
'errors');
566 $amountstripe = (float) $amount;
570 $arrayzerounitcurrency = array(
'BIF',
'CLP',
'DJF',
'GNF',
'JPY',
'KMF',
'KRW',
'MGA',
'PYG',
'RWF',
'VND',
'VUV',
'XAF',
'XOF',
'XPF');
571 if (!in_array($currency, $arrayzerounitcurrency)) {
572 $amountstripe *= 100;
575 dol_syslog(
"newpayment.php execute action = ".$action.
" STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION=".
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION'), LOG_DEBUG, 0,
'_payment');
576 dol_syslog(
"GET=".var_export($_GET,
true), LOG_DEBUG, 0,
'_payment');
577 dol_syslog(
"POST=".var_export($_POST,
true), LOG_DEBUG, 0,
'_payment');
579 $stripeToken =
GETPOST(
"stripeToken",
'alpha');
580 $email =
GETPOST(
"email",
'alpha');
584 $vatnumber =
GETPOST(
'vatnumber',
'alpha');
585 $savesource = GETPOSTISSET(
'savesource') ?
GETPOSTINT(
'savesource') : 1;
587 dol_syslog(
"POST stripeToken = ".$stripeToken, LOG_DEBUG, 0,
'_payment');
588 dol_syslog(
"POST email = ".$email, LOG_DEBUG, 0,
'_payment');
589 dol_syslog(
"POST thirdparty_id = ".$thirdparty_id, LOG_DEBUG, 0,
'_payment');
590 dol_syslog(
"POST vatnumber = ".$vatnumber, LOG_DEBUG, 0,
'_payment');
597 if (!
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION')) {
600 'dol_version' => DOL_VERSION,
601 'dol_entity' => $conf->entity,
602 'dol_company' =>
$mysoc->name,
603 'dol_tax_num' => $vatnumber,
607 if (!empty($thirdparty_id)) {
608 $metadata[
"dol_thirdparty_id"] = $thirdparty_id;
611 if ($thirdparty_id > 0) {
612 dol_syslog(
"Search existing Stripe customer profile for thirdparty_id=".$thirdparty_id, LOG_DEBUG, 0,
'_payment');
614 $service =
'StripeTest';
617 $service =
'StripeLive';
621 $thirdparty =
new Societe($db);
622 $thirdparty->fetch($thirdparty_id);
625 include_once DOL_DOCUMENT_ROOT.
'/stripe/class/stripe.class.php';
626 $stripe =
new Stripe($db);
627 $stripeacc = $stripe->getStripeAccount($service);
628 $customer = $stripe->customerStripe($thirdparty, $stripeacc, $servicestatus, 1);
629 if (empty($customer)) {
631 dol_syslog(
'Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.
' and servicestatus = '.$servicestatus.
': '.$stripe->error, LOG_ERR, 0,
'_payment');
632 setEventMessages(
'Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.
' and servicestatus = '.$servicestatus.
': '.$stripe->error,
null,
'errors');
639 $card = $customer->sources->create(array(
"source" => $stripeToken,
"metadata" => $metadata));
641 $card = $stripeToken;
646 dol_syslog(
'Failed to create card record', LOG_WARNING, 0,
'_payment');
650 if (!empty($FULLTAG)) {
651 $metadata[
"FULLTAG"] = $FULLTAG;
653 if (!empty($dol_id)) {
654 $metadata[
"dol_id"] = $dol_id;
656 if (!empty($dol_type)) {
657 $metadata[
"dol_type"] = $dol_type;
660 dol_syslog(
"Create charge on card ".$card->id, LOG_DEBUG, 0,
'_payment');
661 $charge = \Stripe\Charge::create(array(
662 'amount' =>
price2num($amountstripe,
'MU'),
663 'currency' => $currency,
665 'description' =>
'Stripe payment: '.$FULLTAG.
' ref='.$ref,
666 'metadata' => $metadata,
667 'customer' => $customer->id,
669 'statement_descriptor_suffix' =>
dol_trunc($FULLTAG, 10,
'right',
'UTF-8', 1),
670 ), array(
"idempotency_key" =>
"$FULLTAG",
"stripe_account" =>
"$stripeacc"));
672 if (empty($charge)) {
674 dol_syslog(
'Failed to charge card', LOG_WARNING, 0,
'_payment');
681 $vatcleaned = $vatnumber ? $vatnumber :
null;
692 dol_syslog(
"Create anonymous customer card profile", LOG_DEBUG, 0,
'_payment');
694 $customer = \Stripe\Customer::create(array(
696 'description' => ($email ?
'Anonymous customer for '.$email :
'Anonymous customer'),
697 'metadata' => $metadata,
698 'source' => $stripeToken
716 if (!empty($FULLTAG)) {
717 $metadata[
"FULLTAG"] = $FULLTAG;
719 if (!empty($dol_id)) {
720 $metadata[
"dol_id"] = $dol_id;
722 if (!empty($dol_type)) {
723 $metadata[
"dol_type"] = $dol_type;
728 dol_syslog(
"Create charge", LOG_DEBUG, 0,
'_payment');
729 $charge = \Stripe\Charge::create(array(
730 'customer' => $customer->id,
731 'amount' =>
price2num($amountstripe,
'MU'),
732 'currency' => $currency,
734 'description' =>
'Stripe payment: '.$FULLTAG.
' ref='.$ref,
735 'metadata' => $metadata,
736 'statement_descriptor' =>
dol_trunc($FULLTAG, 10,
'right',
'UTF-8', 1),
737 ), array(
"idempotency_key" => (
string) $FULLTAG,
"stripe_account" => (
string) $stripeacc));
739 if (empty($charge)) {
741 dol_syslog(
'Failed to charge card', LOG_WARNING, 0,
'_payment');
748 $body = $e->getJsonBody();
749 $err = $body[
'error'];
751 print(
'Status is:'.$e->getHttpStatus().
"\n");
752 print(
'Type is:'.$err[
'type'].
"\n");
753 print(
'Code is:'.$err[
'code'].
"\n");
755 print(
'Param is:'.$err[
'param'].
"\n");
756 print(
'Message is:'.$err[
'message'].
"\n");
759 $errormessage =
"ErrorCard ".$e->getMessage().
" err=".var_export($err,
true);
760 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
766 $errormessage =
"ErrorRateLimit ".$e->getMessage();
767 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
773 $errormessage =
"ErrorInvalidRequest ".$e->getMessage();
774 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
781 $errormessage =
"ErrorAuthentication ".$e->getMessage();
782 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
788 $errormessage =
"ErrorApiConnection ".$e->getMessage();
789 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
796 $errormessage =
"ErrorBase ".$e->getMessage();
797 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
803 $errormessage =
"ErrorException ".$e->getMessage();
804 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
811 $_SESSION[
'paymentkosessioncode'] = $randomseckey;
813 $urlko .=
'&paymentkosessioncode='.urlencode($randomseckey);
816 $_SESSION[
'paymentoksessioncode'] = $randomseckey;
818 $urlok .=
'&paymentoksessioncode='.urlencode($randomseckey);
823 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION')) {
824 $service =
'StripeTest';
827 $service =
'StripeLive';
830 include_once DOL_DOCUMENT_ROOT.
'/stripe/class/stripe.class.php';
831 $stripe =
new Stripe($db);
832 $stripeacc = $stripe->getStripeAccount($service);
836 $paymentintent_id =
GETPOST(
"paymentintent_id",
"alpha");
839 global $stripearrayofkeysbyenv;
840 \Stripe\Stripe::setApiKey($stripearrayofkeysbyenv[$servicestatus][
'secret_key']);
843 if (empty($stripeacc)) {
844 $paymentintent = \Stripe\PaymentIntent::retrieve($paymentintent_id);
846 $paymentintent = \Stripe\PaymentIntent::retrieve($paymentintent_id, array(
"stripe_account" => $stripeacc));
850 $errormessage =
"CantRetrievePaymentIntent ".$e->getMessage();
851 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
860 $paymentintentalreadyused = 0;
861 if (!$error && is_object($paymentintent) && $paymentintent->status ==
'succeeded') {
862 $sql =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"paiement";
863 $sql .=
" WHERE ext_payment_id = '".$db->escape($paymentintent_id).
"'";
864 $sql .=
" OR ext_payment_id LIKE '".$db->escape($paymentintent_id).
":%'";
865 $resql = $db->query($sql);
867 if ($db->num_rows($resql) > 0) {
868 $paymentintentalreadyused = 1;
874 if ($paymentintent->status !=
'succeeded' || $paymentintentalreadyused) {
876 if ($paymentintentalreadyused) {
877 $errormessage =
"PaymentIntent ".$paymentintent_id.
" was already used to record a payment, it cannot be reused for another object";
879 $errormessage =
"StatusOfRetrievedIntent is not succeeded: ".$paymentintent->status;
881 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
886 $_SESSION[
'paymentkosessioncode'] = $randomseckey;
888 $urlko .=
'&paymentkosessioncode='.urlencode($randomseckey);
896 $amount = $paymentintent->amount;
899 if (!empty($paymentintent->currency)) {
900 $currency = strtoupper($paymentintent->currency);
904 $arrayzerounitcurrency = array(
'BIF',
'CLP',
'DJF',
'GNF',
'JPY',
'KMF',
'KRW',
'MGA',
'PYG',
'RWF',
'VND',
'VUV',
'XAF',
'XOF',
'XPF');
905 if (!in_array($currency, $arrayzerounitcurrency)) {
910 dol_syslog(
"StatusOfRetrievedIntent is succeeded for amount = ".$amount.
" currency = ".$currency, LOG_DEBUG, 0,
'_payment');
913 $_SESSION[
'paymentoksessioncode'] = $randomseckey;
915 $urlok .=
'&paymentoksessioncode='.urlencode($randomseckey);
922 $_SESSION[
"onlinetoken"] = $stripeToken;
923 $_SESSION[
"FinalPaymentAmt"] = $amount;
924 $_SESSION[
"currencyCodeType"] = $currency;
925 $_SESSION[
"paymentType"] =
'';
926 $_SESSION[
'ipaddress'] = ($remoteip ? $remoteip :
'unknown');
927 $_SESSION[
'TRANSACTIONID'] = (is_object($charge) ? $charge->id : (is_object($paymentintent) ? $paymentintent->id :
''));
928 $_SESSION[
'errormessage'] = $errormessage;
929 if (!
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION')) {
930 $_SESSION[
'payerID'] = is_object($customer) ? $customer->id :
'';
932 $_SESSION[
'payerID'] =
'';
935 dol_syslog(
"Action charge stripe STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION=".
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION').
" ip=".$remoteip, LOG_DEBUG, 0,
'_payment');
936 dol_syslog(
"_SERVER[HTTP_X_FORWARDED_HOST] = ".(empty($_SERVER[
"HTTP_X_FORWARDED_HOST"]) ?
'' :
dol_escape_htmltag($_SERVER[
"HTTP_X_FORWARDED_HOST"])), LOG_DEBUG, 0,
'_payment');
937 dol_syslog(
"_SERVER[SERVER_NAME] = ".(empty($_SERVER[
"SERVER_NAME"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_NAME"])), LOG_DEBUG, 0,
'_payment');
938 dol_syslog(
"_SERVER[SERVER_ADDR] = ".(empty($_SERVER[
"SERVER_ADDR"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_ADDR"])), LOG_DEBUG, 0,
'_payment');
939 dol_syslog(
"session_id=".session_id(), LOG_DEBUG, 0,
'_payment');
940 dol_syslog(
"onlinetoken=".$_SESSION[
"onlinetoken"].
" paymentoksessioncode=".$_SESSION[
"paymentoksessioncode"].
" paymentkosessioncode=".($_SESSION[
"paymentkosessioncode"] ??
''), LOG_DEBUG, 0,
'_payment');
941 dol_syslog(
"FinalPaymentAmt=".$_SESSION[
"FinalPaymentAmt"].
" currencyCodeType=".$_SESSION[
"currencyCodeType"].
" payerID=".$_SESSION[
'payerID'].
" TRANSACTIONID=".$_SESSION[
'TRANSACTIONID'], LOG_DEBUG, 0,
'_payment');
942 dol_syslog(
"FULLTAG=".$FULLTAG, LOG_DEBUG, 0,
'_payment');
943 dol_syslog(
"error=".$error.
" errormessage=".$errormessage, LOG_DEBUG, 0,
'_payment');
944 dol_syslog(
"Now call the redirect to paymentok or paymentko, URL = ".($error ? $urlko : $urlok), LOG_DEBUG, 0,
'_payment');
947 header(
"Location: ".$urlko);
950 header(
"Location: ".$urlok);
957 'paymentmethod' => $paymentmethod,
958 'validpaymentmethod' => &$validpaymentmethod
960$reshook = $hookmanager->executeHooks(
'doPayment', $parameters, $object, $action);
963} elseif ($reshook > 0) {
964 print $hookmanager->resPrint;
973$form =
new Form($db);
977 $head =
'<link rel="stylesheet" type="text/css" href="' .
getDolGlobalString(
'ONLINE_PAYMENT_CSS_URL').
'?lang='.(!empty($getpostlang) ? $getpostlang : $langs->defaultlang).
'">'.
"\n";
980$conf->dol_hide_topmenu = 1;
981$conf->dol_hide_leftmenu = 1;
983$replacemainarea = (empty($conf->dol_hide_leftmenu) ?
'<div>' :
'').
'<div>';
984llxHeader($head, $langs->trans(
"PaymentForm"),
'',
'', 0, 0,
'',
'',
'',
'onlinepaymentbody', $replacemainarea);
986dol_syslog(
"newpayment.php show page source=".$source.
" paymentmethod=".$paymentmethod.
' amount='.$amount.
' newamount='.
GETPOST(
"newamount",
'alpha').
" ref=".$ref, LOG_DEBUG, 0,
'_payment');
987dol_syslog(
"_SERVER[HTTP_X_FORWARDED_HOST] = ".(empty($_SERVER[
"HTTP_X_FORWARDED_HOST"]) ?
'' :
dol_escape_htmltag($_SERVER[
"HTTP_X_FORWARDED_HOST"])), LOG_DEBUG, 0,
'_payment');
988dol_syslog(
"_SERVER[SERVER_NAME] = ".(empty($_SERVER[
"SERVER_NAME"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_NAME"])), LOG_DEBUG, 0,
'_payment');
989dol_syslog(
"_SERVER[SERVER_ADDR] = ".(empty($_SERVER[
"SERVER_ADDR"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_ADDR"])), LOG_DEBUG, 0,
'_payment');
990dol_syslog(
"session_id=".session_id(), LOG_DEBUG, 0,
'_payment');
993if ($source && in_array($ref, array(
'member_ref',
'contractline_ref',
'invoice_ref',
'order_ref',
'donation_ref',
''))) {
994 $langs->load(
"errors");
995 dol_print_error_email(
'BADREFINPAYMENTFORM', $langs->trans(
"ErrorBadLinkSourceSetButBadValueForRef", $source, $ref));
1005 dol_htmloutput_mesg($langs->trans(
'YouAreCurrentlyInSandboxMode',
'Paypal'), array(),
'warning');
1008 dol_htmloutput_mesg($langs->trans(
'YouAreCurrentlyInSandboxMode',
'Stripe'), array(),
'warning');
1012print
'<span id="dolpaymentspan"></span>'.
"\n";
1013print
'<div class="center">'.
"\n";
1014print
'<form id="dolpaymentform" class="center" name="paymentform" action="'.$_SERVER[
"PHP_SELF"].
'" method="POST">'.
"\n";
1015print
'<input type="hidden" name="token" value="'.newToken().
'">'.
"\n";
1016print
'<input type="hidden" name="action" value="dopayment">'.
"\n";
1017print
'<input type="hidden" name="tag" value="'.GETPOST(
"tag",
'alpha').
'">'.
"\n";
1018print
'<input type="hidden" name="suffix" value="'.dol_escape_htmltag($suffix).
'">'.
"\n";
1019print
'<input type="hidden" name="securekey" value="'.dol_escape_htmltag($SECUREKEY).
'">'.
"\n";
1020print
'<input type="hidden" name="e" value="'.$entity.
'" />';
1022print
'<input type="hidden" name="lang" value="'.$getpostlang.
'">';
1023print
'<input type="hidden" name="ws" value="'.$ws.
'">';
1024print
'<input type="hidden" name="reload" id="reload" value="0">';
1030$logosmall =
$mysoc->logo_small;
1032$paramlogo =
'ONLINE_PAYMENT_LOGO_'.$suffix;
1042if (!empty($logosmall) && is_readable($conf->mycompany->dir_output.
'/logos/thumbs/'.$logosmall)) {
1043 $urllogo = DOL_URL_ROOT.
'/viewimage.php?modulepart=mycompany&entity='.$conf->entity.
'&file='.urlencode(
'logos/thumbs/'.$logosmall);
1044 $urllogofull =
$dolibarr_main_url_root.
'/viewimage.php?modulepart=mycompany&entity='.$conf->entity.
'&file='.urlencode(
'logos/thumbs/'.$logosmall);
1045} elseif (!empty($logo) && is_readable($conf->mycompany->dir_output.
'/logos/'.$logo)) {
1046 $urllogo = DOL_URL_ROOT.
'/viewimage.php?modulepart=mycompany&entity='.$conf->entity.
'&file='.urlencode(
'logos/'.$logo);
1047 $urllogofull =
$dolibarr_main_url_root.
'/viewimage.php?modulepart=mycompany&entity='.$conf->entity.
'&file='.urlencode(
'logos/'.$logo);
1053 $filehtmlheader =
dol_sanitizePathName(DOL_DATA_ROOT . ($conf->entity > 1 ?
'/' . $conf->entity :
'') .
'/website/' . $ws .
'/htmlheaderpayment.html');
1055 print file_get_contents(
dol_osencode($filehtmlheader));
1059if ($urllogo && !$ws) {
1060 print
'<div class="backgreypublicpayment">';
1061 print
'<div class="logopublicpayment">';
1062 print
'<img id="dolpaymentlogo" src="'.$urllogo.
'"';
1066 print
'<div class="poweredbypublicpayment opacitymedium right"><a class="poweredbyhref" href="https://www.dolibarr.org?utm_medium=website&utm_source=poweredby" target="dolibarr" rel="noopener">'.$langs->trans(
"PoweredBy").
'<br><img class="poweredbyimg" src="'.DOL_URL_ROOT.
'/theme/dolibarr_logo.svg" width="80px"></a></div>';
1069} elseif ($creditor && !$ws) {
1070 print
'<div class="backgreypublicpayment">';
1071 print
'<div class="logopublicpayment">';
1077 print
'<div class="backimagepublicpayment">';
1078 print
'<img id="idMAIN_IMAGE_PUBLIC_PAYMENT" src="'.getDolGlobalString(
'MAIN_IMAGE_PUBLIC_PAYMENT').
'">';
1085print
'<!-- Form to send a payment -->'.
"\n";
1086print
'<!-- creditor = '.dol_escape_htmltag((
string) $creditor).
' -->'.
"\n";
1089 print
'<!-- PAYPAL_API_SANDBOX = '.getDolGlobalString(
'PAYPAL_API_SANDBOX').
' -->'.
"\n";
1090 print
'<!-- PAYPAL_API_INTEGRAL_OR_PAYPALONLY = '.getDolGlobalString(
'PAYPAL_API_INTEGRAL_OR_PAYPALONLY').
' -->'.
"\n";
1093 print
'<!-- PAYBOX_CGI_URL = '.getDolGlobalString(
'PAYBOX_CGI_URL_V2').
' -->'.
"\n";
1096 print
'<!-- STRIPE_LIVE = '.getDolGlobalString(
'STRIPE_LIVE').
' -->'.
"\n";
1097 print
'<!-- STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION = '.getDolGlobalString(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION').
' -->'.
"\n";
1099print
'<!-- urlok = '.$urlok.
' -->'.
"\n";
1100print
'<!-- urlko = '.$urlko.
' -->'.
"\n";
1104print
'<table id="dolpublictable" summary="Payment form" class="center">'.
"\n";
1109 $langs->load(
"members");
1111 if (preg_match(
'/^\((.*)\)$/',
getDolGlobalString(
'PAYMENT_NEWFORM_TEXT'), $reg)) {
1112 $text .= $langs->trans($reg[1]).
"<br>\n";
1116 $text =
'<tr><td class="center"><br>'.$text.
'<br></td></tr>'.
"\n";
1119 $text .=
'<tr><td class="textpublicpayment"><br><strong>'.$langs->trans(
"WelcomeOnPaymentPage").
'</strong></td></tr>'.
"\n";
1120 $text .=
'<tr><td class="textpublicpayment"><span class="opacitymedium">'.$langs->trans(
"ThisScreenAllowsYouToPay", (
string) $creditor).
'</span><br><br></td></tr>'.
"\n";
1125print
'<tr><td align="center">';
1126print
'<table class="centpercent left" id="tablepublicpayment">';
1127print
'<tr class="hideonsmartphone"><td colspan="2" class="opacitymedium">'.$langs->trans(
"ThisIsInformationOnPayment").
'...<br><br></td></tr>'.
"\n";
1139 dol_syslog(
"newpayment.php no source", LOG_DEBUG);
1142 $tag =
GETPOST(
"tag",
'alpha');
1143 if (
GETPOST(
'fulltag',
'alpha')) {
1144 $fulltag =
GETPOST(
'fulltag',
'alpha');
1146 $fulltag =
"TAG=".$tag;
1150 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1151 print
'</td><td class="CTableRow2">';
1152 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1153 print
'<b>'.$creditor.
'</b>';
1154 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1155 print
'</td></tr>'.
"\n";
1158 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
1159 if (empty($amount)) {
1160 print
' ('.$langs->trans(
"ToComplete").
')';
1162 print
'</td><td class="CTableRow2">';
1163 if (empty($amount) || !is_numeric($amount)) {
1164 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1165 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1167 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1169 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1170 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1171 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1173 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1174 print
'</td></tr>'.
"\n";
1177 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1178 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1179 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
1180 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1181 print
'</td></tr>'.
"\n";
1189if ($source ==
'order') {
1190 dol_syslog(
"newpayment.php source=order", LOG_DEBUG);
1193 $langs->load(
"orders");
1195 require_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
1198 $result = $order->fetch(0, $ref);
1200 $mesg = $order->error;
1203 $result = $order->fetch_thirdparty($order->socid);
1207 if ($action !=
'dopayment') {
1208 $amount = $order->total_ttc;
1209 if (
GETPOST(
"amount",
'alpha')) {
1210 $amount =
GETPOST(
"amount",
'alpha');
1216 if (
GETPOST(
'fulltag',
'alpha')) {
1217 $fulltag =
GETPOST(
'fulltag',
'alpha');
1219 $fulltag =
'ORD='.$order->id.
'.CUS='.$order->thirdparty->id;
1222 $fulltag .=
'.TAG='.$TAG;
1228 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1229 print
'</td><td class="CTableRow2"';
1230 print
' title="'.dolPrintHTMLForAttribute($langs->transnoentitiesnoconv(
"Country").
'='.
$mysoc->country_code.
' - '.$langs->transnoentitiesnoconv(
"VATIntra").
'='.
$mysoc->tva_intra).
'"';
1232 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1233 print
'<b>'.$creditor.
'</b>';
1234 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1235 print
'</td></tr>'.
"\n";
1238 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
1239 print
'</td><td class="CTableRow2"';
1240 print
' title="'.dolPrintHTMLForAttribute($langs->transnoentitiesnoconv(
"Country").
'='.$order->thirdparty->country_code.
' - '.$langs->transnoentitiesnoconv(
"VATIntra").
'='.$order->thirdparty->tva_intra).
'"';
1242 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1243 print
'<b>'.$order->thirdparty->name.
'</b>';
1244 print
'</td></tr>'.
"\n";
1247 $text =
'<b>'.$langs->trans(
"PaymentOrderRef", $order->ref).
'</b>';
1248 if (
GETPOST(
'desc',
'alpha')) {
1249 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1251 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1252 print
'</td><td class="CTableRow2">'.$text;
1253 print
'<input type="hidden" name="s" value="'.dol_escape_htmltag($source).
'">';
1254 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($order->ref).
'">';
1255 print
'<input type="hidden" name="dol_id" value="'.dol_escape_htmltag((
string) $order->id).
'">';
1256 $directdownloadlink = $order->getLastMainDocLink(
'commande');
1257 if ($directdownloadlink) {
1258 print
'<br><a href="'.$directdownloadlink.
'" rel="nofollow noopener">';
1259 print
img_mime($order->last_main_doc,
'');
1260 print $langs->trans(
"DownloadDocument").
'</a>';
1262 print
'</td></tr>'.
"\n";
1265 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
1266 if (empty($amount)) {
1267 print
' ('.$langs->trans(
"ToComplete").
')';
1269 print
'</td><td class="CTableRow2">';
1270 if (empty($amount) || !is_numeric($amount)) {
1271 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1272 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1274 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1276 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1277 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1278 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1280 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1281 print
'</td></tr>'.
"\n";
1284 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1285 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1286 print
'<input type="hidden" name="tag" value="'.dol_escape_htmltag($tag).
'">';
1287 print
'<input type="hidden" name="fulltag" value="'.dol_escape_htmltag($fulltag).
'">';
1288 print
'</td></tr>'.
"\n";
1291 $shipToName = $order->thirdparty->name;
1292 $shipToStreet = $order->thirdparty->address;
1293 $shipToCity = $order->thirdparty->town;
1294 $shipToState = $order->thirdparty->state_code;
1295 $shipToCountryCode = $order->thirdparty->country_code;
1296 $shipToZip = $order->thirdparty->zip;
1297 $shipToStreet2 =
'';
1298 $phoneNum = $order->thirdparty->phone;
1299 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
1300 print
'<input type="hidden" name="shipToName" value="'.dol_escape_htmltag($shipToName).
'">'.
"\n";
1301 print
'<input type="hidden" name="shipToStreet" value="'.dol_escape_htmltag($shipToStreet).
'">'.
"\n";
1302 print
'<input type="hidden" name="shipToCity" value="'.dol_escape_htmltag($shipToCity).
'">'.
"\n";
1303 print
'<input type="hidden" name="shipToState" value="'.dol_escape_htmltag($shipToState).
'">'.
"\n";
1304 print
'<input type="hidden" name="shipToCountryCode" value="'.dol_escape_htmltag($shipToCountryCode).
'">'.
"\n";
1305 print
'<input type="hidden" name="shipToZip" value="'.dol_escape_htmltag($shipToZip).
'">'.
"\n";
1306 print
'<input type="hidden" name="shipToStreet2" value="'.dol_escape_htmltag($shipToStreet2).
'">'.
"\n";
1307 print
'<input type="hidden" name="phoneNum" value="'.dol_escape_htmltag($phoneNum).
'">'.
"\n";
1309 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
1311 if (is_object($order->thirdparty)) {
1312 print
'<input type="hidden" name="thirdparty_id" value="'.$order->thirdparty->id.
'">'.
"\n";
1314 print
'<input type="hidden" name="email" value="'.$order->thirdparty->email.
'">'.
"\n";
1315 print
'<input type="hidden" name="vatnumber" value="'.dol_escape_htmltag($order->thirdparty->tva_intra).
'">'.
"\n";
1316 $labeldesc = $langs->trans(
"Order").
' '.$order->ref;
1317 if (
GETPOST(
'desc',
'alpha')) {
1318 $labeldesc =
GETPOST(
'desc',
'alpha');
1320 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
1325if ($source ==
'invoice') {
1326 dol_syslog(
"newpayment.php source=invoice", LOG_DEBUG);
1329 $langs->load(
"bills");
1330 $form->load_cache_types_paiements();
1332 require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
1335 $result = $invoice->fetch(0, $ref);
1337 $mesg = $invoice->error;
1340 $result = $invoice->fetch_thirdparty($invoice->socid);
1344 if ($action !=
'dopayment') {
1345 $amount =
price2num($invoice->total_ttc - ($invoice->getSommePaiement() + $invoice->getSumCreditNotesUsed() + $invoice->getSumDepositsUsed()));
1346 if (
GETPOST(
"amount",
'alpha')) {
1347 $amount =
GETPOST(
"amount",
'alpha');
1352 if (
GETPOST(
'fulltag',
'alpha')) {
1353 $fulltag =
GETPOST(
'fulltag',
'alpha');
1355 $fulltag =
'INV='.$invoice->id.
'.CUS='.$invoice->thirdparty->id;
1358 $fulltag .=
'.TAG='.$TAG;
1364 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1365 print
'</td><td class="CTableRow2"';
1366 print
' title="'.dolPrintHTMLForAttribute($langs->transnoentitiesnoconv(
"Country").
'='.
$mysoc->country_code.
' - '.$langs->transnoentitiesnoconv(
"VATIntra").
'='.
$mysoc->tva_intra).
'"';
1368 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1369 print
'<b>'.$creditor.
'</b>';
1370 print
'<input type="hidden" name="creditor" value="'.dol_escape_htmltag((
string) $creditor).
'">';
1371 print
'</td></tr>'.
"\n";
1374 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
1375 print
'</td><td class="CTableRow2"';
1376 print
' title="'.dolPrintHTMLForAttribute($langs->transnoentitiesnoconv(
"Country").
'='.$invoice->thirdparty->country_code.
' - '.$langs->transnoentitiesnoconv(
"VATIntra").
'='.$invoice->thirdparty->tva_intra).
'"';
1378 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1379 print
'<b>'.$invoice->thirdparty->name.
'</b>';
1380 print
'</td></tr>'.
"\n";
1383 $text =
'<b>'.$langs->trans(
"PaymentInvoiceRef", $invoice->ref).
'</b>';
1384 if (
GETPOST(
'desc',
'alpha')) {
1385 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1387 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1388 print
'</td><td class="CTableRow2">'.$text;
1389 print
'<input type="hidden" name="s" value="'.dol_escape_htmltag($source).
'">';
1390 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($invoice->ref).
'">';
1391 print
'<input type="hidden" name="dol_id" value="'.dol_escape_htmltag((
string) $invoice->id).
'">';
1392 $directdownloadlink = $invoice->getLastMainDocLink(
'facture');
1393 if ($directdownloadlink) {
1394 print
'<br><a href="'.$directdownloadlink.
'">';
1395 print
img_mime($invoice->last_main_doc,
'');
1396 print $langs->trans(
"DownloadDocument").
'</a>';
1398 print
'</td></tr>'.
"\n";
1401 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentAmount");
1402 if (empty($amount) && empty(
$object->paye)) {
1403 print
' ('.$langs->trans(
"ToComplete").
')';
1405 print
'</td><td class="CTableRow2">';
1406 if (
$object->type == $object::TYPE_CREDIT_NOTE) {
1407 print
'<b>'.$langs->trans(
"CreditNote").
'</b>';
1408 } elseif (empty(
$object->paye)) {
1409 if (empty($amount) || !is_numeric($amount)) {
1410 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1411 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1412 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1414 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1415 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1416 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1419 print
'<b class="amount">'.price(
$object->total_ttc, 1, $langs, 1, -1, -1, $currency).
'</b>';
1421 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1422 print
'</td></tr>'.
"\n";
1425 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1426 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1427 print
'<input type="hidden" name="tag" value="'.(empty($tag) ?
'' : $tag).
'">';
1428 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1429 print
'</td></tr>'.
"\n";
1432 if ($invoice->status == $invoice::STATUS_VALIDATED && $invoice->mode_reglement_id > 0 && $form->cache_types_paiements[$invoice->mode_reglement_id][
"code"] ==
"VIR") {
1433 print
'<tr class="CTableRow2 center"><td class="CTableRow2" colspan="2">';
1434 print
'<div class="warning maxwidth1000">';
1435 print $langs->trans(
"PayOfBankTransferInvoice");
1437 print
'</td></tr>'.
"\n";
1441 $shipToName = $invoice->thirdparty->name;
1442 $shipToStreet = $invoice->thirdparty->address;
1443 $shipToCity = $invoice->thirdparty->town;
1444 $shipToState = $invoice->thirdparty->state_code;
1445 $shipToCountryCode = $invoice->thirdparty->country_code;
1446 $shipToZip = $invoice->thirdparty->zip;
1447 $shipToStreet2 =
'';
1448 $phoneNum = $invoice->thirdparty->phone;
1449 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
1450 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
1451 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
1452 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
1453 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
1454 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
1455 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
1456 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
1457 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
1459 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
1461 if (is_object($invoice->thirdparty)) {
1462 print
'<input type="hidden" name="thirdparty_id" value="'.$invoice->thirdparty->id.
'">'.
"\n";
1464 print
'<input type="hidden" name="email" value="'.$invoice->thirdparty->email.
'">'.
"\n";
1465 print
'<input type="hidden" name="vatnumber" value="'.$invoice->thirdparty->tva_intra.
'">'.
"\n";
1466 $labeldesc = $langs->trans(
"Invoice").
' '.$invoice->ref;
1467 if (
GETPOST(
'desc',
'alpha')) {
1468 $labeldesc =
GETPOST(
'desc',
'alpha');
1470 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
1474if ($source ==
'contractline') {
1475 dol_syslog(
"newpayment.php source=contractline", LOG_DEBUG);
1478 $langs->load(
"contracts");
1480 require_once DOL_DOCUMENT_ROOT.
'/contrat/class/contrat.class.php';
1485 $result = $contractline->fetch(0, $ref);
1487 $mesg = $contractline->error;
1490 if ($contractline->fk_contrat > 0) {
1491 $result = $contract->fetch($contractline->fk_contrat);
1493 $result = $contract->fetch_thirdparty($contract->socid);
1495 $mesg = $contract->error;
1499 $mesg =
'ErrorRecordNotFound';
1505 if ($action !=
'dopayment') {
1506 $amount = $contractline->total_ttc;
1508 if ($contractline->fk_product &&
getDolGlobalString(
'PAYMENT_USE_NEW_PRICE_FOR_CONTRACTLINES')) {
1510 $result = $product->fetch($contractline->fk_product);
1514 $pu_ht = $product->multiprices[$contract->thirdparty->price_level];
1515 $pu_ttc = $product->multiprices_ttc[$contract->thirdparty->price_level];
1516 $price_base_type = $product->multiprices_base_type[$contract->thirdparty->price_level];
1518 $pu_ht = $product->price;
1519 $pu_ttc = $product->price_ttc;
1520 $price_base_type = $product->price_base_type;
1524 if (empty($amount)) {
1530 if (
GETPOST(
"amount",
'alpha')) {
1531 $amount =
GETPOST(
"amount",
'alpha');
1536 if (
GETPOST(
'fulltag',
'alpha')) {
1537 $fulltag =
GETPOST(
'fulltag',
'alpha');
1539 $fulltag =
'COL='.$contractline->id.
'.CON='.$contract->id.
'.CUS='.$contract->thirdparty->id.
'.DAT='.
dol_print_date(
dol_now(),
'%Y%m%d%H%M%S');
1542 $fulltag .=
'.TAG='.$TAG;
1553 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1554 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
1555 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1556 print
'</td></tr>'.
"\n";
1559 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
1560 print
'</td><td class="CTableRow2"><b>'.$contract->thirdparty->name.
'</b>';
1561 print
'</td></tr>'.
"\n";
1564 $text =
'<b>'.$langs->trans(
"PaymentRenewContractId", $contract->ref, $contractline->ref).
'</b>';
1565 if ($contractline->fk_product > 0) {
1566 $contractline->fetch_product();
1567 $text .=
'<br>'.$contractline->product->ref.($contractline->product->label ?
' - '.$contractline->product->label :
'');
1569 if ($contractline->description) {
1570 $text .=
'<br>'.dol_htmlentitiesbr($contractline->description);
1572 if ($contractline->date_end) {
1573 $text .=
'<br>'.$langs->trans(
"ExpiredSince").
': '.
dol_print_date($contractline->date_end);
1575 if (
GETPOST(
'desc',
'alpha')) {
1576 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1578 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1579 print
'</td><td class="CTableRow2">'.$text;
1580 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($source).
'">';
1581 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($contractline->ref).
'">';
1582 print
'<input type="hidden" name="dol_id" value="'.dol_escape_htmltag((
string) $contractline->id).
'">';
1583 $directdownloadlink = $contract->getLastMainDocLink(
'contract');
1584 if ($directdownloadlink) {
1585 print
'<br><a href="'.$directdownloadlink.
'">';
1586 print
img_mime($contract->last_main_doc,
'');
1587 print $langs->trans(
"DownloadDocument").
'</a>';
1589 print
'</td></tr>'.
"\n";
1592 $label = $langs->trans(
"Quantity");
1595 if ($contractline->fk_product) {
1596 if ($contractline->product->isService() && $contractline->product->duration_value > 0) {
1597 $label = $langs->trans(
"Duration");
1600 if ($contractline->product->duration_value > 1) {
1601 $dur = array(
"h" => $langs->trans(
"Hours"),
"d" => $langs->trans(
"DurationDays"),
"w" => $langs->trans(
"DurationWeeks"),
"m" => $langs->trans(
"DurationMonths"),
"y" => $langs->trans(
"DurationYears"));
1603 $dur = array(
"h" => $langs->trans(
"Hour"),
"d" => $langs->trans(
"DurationDay"),
"w" => $langs->trans(
"DurationWeek"),
"m" => $langs->trans(
"DurationMonth"),
"y" => $langs->trans(
"DurationYear"));
1605 $duration = $contractline->product->duration_value.
' '.$dur[$contractline->product->duration_unit];
1608 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$label.
'</td>';
1609 print
'<td class="CTableRow2"><b>'.($duration ? $duration : $qty).
'</b>';
1610 print
'<input type="hidden" name="newqty" value="'.dol_escape_htmltag((
string) $qty).
'">';
1611 print
'</b></td></tr>'.
"\n";
1614 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
1615 if (empty($amount)) {
1616 print
' ('.$langs->trans(
"ToComplete").
')';
1618 print
'</td><td class="CTableRow2">';
1619 if (empty($amount) || !is_numeric($amount)) {
1620 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1621 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1623 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1625 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1626 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1627 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1629 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1630 print
'</td></tr>'.
"\n";
1633 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1634 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1635 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
1636 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1637 print
'</td></tr>'.
"\n";
1640 $shipToName = $contract->thirdparty->name;
1641 $shipToStreet = $contract->thirdparty->address;
1642 $shipToCity = $contract->thirdparty->town;
1643 $shipToState = $contract->thirdparty->state_code;
1644 $shipToCountryCode = $contract->thirdparty->country_code;
1645 $shipToZip = $contract->thirdparty->zip;
1646 $shipToStreet2 =
'';
1647 $phoneNum = $contract->thirdparty->phone;
1648 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
1649 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
1650 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
1651 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
1652 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
1653 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
1654 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
1655 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
1656 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
1658 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
1660 if (is_object($contract->thirdparty)) {
1661 print
'<input type="hidden" name="thirdparty_id" value="'.$contract->thirdparty->id.
'">'.
"\n";
1663 print
'<input type="hidden" name="email" value="'.$contract->thirdparty->email.
'">'.
"\n";
1664 print
'<input type="hidden" name="vatnumber" value="'.$contract->thirdparty->tva_intra.
'">'.
"\n";
1665 $labeldesc = $langs->trans(
"Contract").
' '.$contract->ref;
1666 if (
GETPOST(
'desc',
'alpha')) {
1667 $labeldesc =
GETPOST(
'desc',
'alpha');
1669 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
1673if ($source ==
'member' || $source ==
'membersubscription') {
1674 dol_syslog(
"newpayment.php source=".$source, LOG_DEBUG);
1676 $newsource =
'member';
1680 $langs->load(
"members");
1682 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent.class.php';
1683 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent_type.class.php';
1684 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/subscription.class.php';
1689 $result = $member->fetch(0, $ref, 0,
'',
true,
true);
1691 $mesg = $member->error;
1694 $member->fetch_thirdparty();
1696 $adht->fetch($member->typeid);
1700 if ($action !=
'dopayment') {
1701 $amount = $member->last_subscription_amount;
1702 if (
GETPOST(
"amount",
'alpha')) {
1706 if (empty($amount)) {
1707 $amount = $adht->amount;
1710 $amount = max(0,
price2num($amount,
'MT'));
1713 if (
GETPOST(
'fulltag',
'alpha')) {
1714 $fulltag =
GETPOST(
'fulltag',
'alpha');
1719 $fulltag .=
'.TAG='.$TAG;
1725 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1726 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
1727 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1728 print
'</td></tr>'.
"\n";
1731 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Member");
1732 print
'</td><td class="CTableRow2">';
1734 if ($member->morphy ==
'mor' && !empty($member->company)) {
1735 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1736 print $member->company;
1738 print
img_picto(
'',
'member',
'class="pictofixedwidth"');
1739 print $member->getFullName($langs);
1742 print
'</td></tr>'.
"\n";
1745 $text =
'<b>'.$langs->trans(
"PaymentSubscription").
'</b>';
1746 if (
GETPOST(
'desc',
'alpha')) {
1747 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1749 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1750 print
'</td><td class="CTableRow2">'.$text;
1751 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($newsource).
'">';
1752 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($member->ref).
'">';
1753 print
'</td></tr>'.
"\n";
1756 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"DateEndSubscription");
1757 print
'</td><td class="CTableRow2">'.dol_print_date($member->datefin,
'day');
1758 print
'</td></tr>'.
"\n";
1761 if ($member->last_subscription_date || $member->last_subscription_amount) {
1764 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"LastSubscriptionDate");
1765 print
'</td><td class="CTableRow2">'.dol_print_date($member->last_subscription_date,
'day');
1766 print
'</td></tr>'.
"\n";
1770 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"LastSubscriptionAmount");
1771 print
'</td><td class="CTableRow2">'.price($member->last_subscription_amount);
1772 print
'</td></tr>'.
"\n";
1774 if (empty($amount) && !
GETPOST(
'newamount',
'alpha')) {
1775 $_GET[
'newamount'] = $member->last_subscription_amount;
1776 $_GET[
'amount'] = $member->last_subscription_amount;
1778 if (!empty($member->last_subscription_amount) && !GETPOSTISSET(
'newamount') && is_numeric($amount)) {
1779 $amount = max($member->last_subscription_amount, $amount);
1783 $amountbytype = $adht->amountByType(1);
1785 $typeid = $adht->id;
1786 $caneditamount = $adht->caneditamount;
1788 if ($member->type) {
1789 $oldtypeid = $member->typeid;
1790 $newtypeid = (int) (GETPOSTISSET(
"typeid") ?
GETPOSTINT(
"typeid") : $member->typeid);
1792 $typeid = $newtypeid;
1793 $adht->fetch($typeid);
1796 $caneditamount = $adht->caneditamount;
1800 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"LastMemberType");
1801 print
'</td><td class="CTableRow2">'.dol_escape_htmltag($member->type);
1802 print
"</td></tr>\n";
1805 $member->typeid = $newtypeid;
1806 $member->type = (string)
dol_getIdFromCode($db, $newtypeid,
'adherent_type',
'rowid',
'libelle');
1812 $amount = (!empty($amountbytype[$member->typeid])) ? $amountbytype[$member->typeid] : $member->last_subscription_amount;
1814 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"NewSubscription");
1815 print
'</td><td class="CTableRow2">';
1816 print $form->selectarray(
"typeid", $adht->liste_array(1), $member->typeid, 0, 0, 0,
'onchange="window.location.replace(\''.$urlwithroot.
'/public/payment/newpayment.php?source='.urlencode($source).
'&ref='.urlencode($ref).
'&amount='.urlencode($amount).
'&typeid=\' + this.value + \'&securekey='.urlencode($SECUREKEY).
'\');
"', 0, 0, 0, '', '', 1);
1817 print "</td></tr>\n
";
1818 } elseif ($action == 'dopayment') {
1819 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("NewMemberType
");
1820 print '</td><td class="CTableRow2
">'.dol_escape_htmltag($member->type);
1821 print '<input type="hidden
" name="membertypeid
" value="'.$member->typeid.'">';
1822 print "</td></tr>\n
";
1825 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("MemberType
");
1826 print '</td><td class="CTableRow2
">'.dol_escape_htmltag($member->type);
1827 print "</td></tr>\n
";
1832 // Add hook to complete the form
1833 $parameters = array('mode' => 'renewal');
1834 $reshook = $hookmanager->executeHooks('membershipNewSubscriptionPublicForm', $parameters, $object, $action);
1836 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
1840 // TODO Move this into previous hook
1841 if (getDolGlobalString('MEMBER_NEWFORM_DOLIBARRTURNOVER') && $action != 'dopayment') {
1843 if ($member->thirdparty instanceOf Societe) {
1844 $country_id = $member->thirdparty->country_id;
1846 $checkednature = $member->morphy;
1847 print '<input type="hidden
" name="moralinput
" id="moralinput
" value="'.$checkednature.'">';
1849 // Is it a Preferred Partner
1851 include_once DOL_DOCUMENT_ROOT.'/partnership/class/partnership.class.php';
1852 $partnership = new Partnership($db);
1853 // @phan-suppress-next-line PhanPluginSuspiciousParamPosition
1854 $result = $partnership->fetch(0, null, null, $member->thirdparty->id);
1859 // Do not set a default amount MEMBER_NEWFORM_AMOUNT if you use MEMBER_NEWFORM_DOLIBARRTURNOVER
1860 $s = $langs->trans("AreYouAPreferredPartner
", '<a href="https:
1861 $s = str_replace(
'{s1}',
'Preferred Partner', $s);
1862 print
'<tr id="trbudget" class="trcompany"><td><label for="pp" class="small">'.$s.
'</label></td><td>';
1863 print
'<input type="checkbox" name="pp" id="pp" value="1"'.((GETPOST(
'reload') ?
GETPOST(
'pp') : $pp) ?
' checked="checked"' :
'').
' class="reposition">';
1866 print
'<tr id="trbudget" class="trcompany"><td class=""><span class="small">'.$langs->trans(
"TurnoverOrBudget").
'</span></td><td>';
1868 $country_code =
dol_getIdFromCode($db, $country_id,
'c_country',
'rowid',
'code');
1869 if ($country_code ===
'FR' && $checkednature ===
'mor' && (
GETPOST(
'reload') ?
GETPOST(
'pp') : $pp)) {
1870 print
'<input type="text" name="budget" id="budget" class="flat turnover right width100" value="'.GETPOST(
'budget').
'"'.($action !=
'dopayment' ?
' required autofocus' :
'').
'>';
1872 $arraybudget = array(
'50' =>
'<= 100 000',
'100' =>
'<= 200 000',
'200' =>
'<= 500 000',
'300' =>
'<= 1 500 000',
'600' =>
'<= 3 000 000',
'1000' =>
'<= 5 000 000',
'2000' =>
'5 000 000+');
1873 print $form->selectarray(
'budget', $arraybudget,
GETPOSTINT(
'budget'), 1, 0, 0, ($checkednature ===
'mor' ?
'required' :
''), 0, 0, 0,
'');
1877 print
'<script type="text/javascript">
1878 jQuery(document).ready(function() {
1881 newamount = initturnover();
1882 jQuery("#amount").val(newamount);
1883 jQuery("#newamount").val(newamount);
1887 jQuery("#selectcountry_id").change(function() {
1888 console.log("We change country (code added for association, replace common code), so we reload page");
1889 jQuery("#budget").val(\'\');
1890 jQuery("#amount").val(\'\');
1891 jQuery("#newamount").val(\'\');
1892 jQuery("#amounthidden").val(\'\');
1894 jQuery("#pp").change(function() {
1895 console.log("We change the preferred partner status");
1896 selectcountry_id = jQuery("#selectcountry_id").val();
1897 morphy = jQuery("#moralinput").is(\':checked\') ? \'mor\' : \'phy\';
1898 jQuery("#budget").val(\'\');
1899 jQuery("#amount").val(\'\');
1900 jQuery("#amounthidden").val(\'\');
1901 jQuery("#newamount").val(\'\');
1902 jQuery("#reload").val(\'1\');
1903 document.paymentform.action.value="";
1904 jQuery("#dolpaymentform").submit();
1906 jQuery("#budget").change(function() {
1907 console.log("Turnover amount has been modified on change");
1908 newamount = initturnover();
1909 jQuery("#amount").val(newamount);
1910 jQuery("#amounthidden").val(newamount);
1911 jQuery("#newamount").val(newamount);
1913 jQuery("#budget").keyup(function() {
1914 console.log("Turnover amount has been modified on keyup");
1915 newamount = initturnover();
1916 jQuery("#amount").val(newamount);
1917 jQuery("#amounthidden").val(newamount);
1918 jQuery("#newamount").val(newamount);
1921 function initturnover() {
1924 //morphy = jQuery("#moralinput").is(\':checked\') ? \'mor\' : \'phy\';
1925 morphy = jQuery("#moralinput").val();
1926 selectcountry_id = '.((int) $country_id).
';
1927 pp = jQuery("#pp").is(\':checked\') ? true : false;
1928 console.log("Set fields according to nature and other properties");
1929 console.log("morphy="+morphy);
1930 console.log("selectcountry_id="+selectcountry_id);
1931 console.log("pp="+pp);
1933 if (morphy == \'phy\') {
1934 jQuery(".amount").val('.((float) $amount).
');
1935 jQuery("#trbirth").show();
1936 jQuery(".trcompany").hide();
1937 jQuery(".trbudget").hide();
1938 newamount = '.((float) $amount).
';
1940 jQuery(".amount").val(\'\');
1941 jQuery("#trbirth").hide();
1942 jQuery(".trcompany").show();
1943 jQuery(".trbudget").show();
1944 jQuery(".hideifautoturnover").hide();
1946 jQuery("#budget").val(\'\');
1949 if (selectcountry_id == 1) {
1950 if (jQuery("#budget").val() == \'\') {
1954 console.log("value selected in input text field is "+jQuery("#budget").val());
1955 newamount = Math.max(Math.round(price2numjs(jQuery("#budget").val()) * 0.005), 50);
1956 console.log("newamount = "+newamount);
1958 console.log("not a pp");
1959 if (jQuery("#budget").val() > 0) {
1960 console.log("value found in budget is "+jQuery("#budget").val());
1961 newamount = jQuery("#budget").val();
1963 jQuery("#budget").val(\'\');
1968 if (jQuery("#budget").val() > 0) {
1969 newamount = jQuery("#budget").val();
1971 jQuery("#budget").val(\'\');
1981 print
'</td></tr>'.
"\n";
1987 $amount = ($member->last_subscription_amount ? $member->last_subscription_amount : (empty($amountbytype[$typeid]) ? 0 : $amountbytype[$typeid]));
1994 if ($caneditamount && !
GETPOST(
'reload') && GETPOSTISSET(
'amount') &&
GETPOSTFLOAT(
'amount',
'MT') > 0) {
1998 if ($caneditamount && !
GETPOST(
'reload') && GETPOSTISSET(
'newamount') &&
GETPOSTFLOAT(
'newamount',
'MT') > 0) {
2002 $amount = max(0, (
float) $amount, (
float)
getDolGlobalInt(
"MEMBER_MIN_AMOUNT"));
2005 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
2008 print
' - <a href="' .
getDolGlobalString(
'MEMBER_EXT_URL_SUBSCRIPTION_INFO').
'" rel="external" target="_blank" rel="noopener noreferrer">'.
img_picto(
'',
'url',
'class="pictofixedwidth"').$langs->trans(
"SeeHere").
'</a>';
2010 print
'</td><td class="CTableRow2">';
2012 $caneditamount = $adht->caneditamount;
2015 if ($caneditamount && ($action !=
'dopayment' ||
GETPOST(
'reload'))) {
2016 if (GETPOSTISSET(
'newamount')) {
2017 print
'<input type="text" class="width75 amount" name="newamount" id="newamount" value="'.price(
price2num(
GETPOST(
'newamount'),
'', 2), 1, $langs, 1, -1, -1).
'">';
2019 print
'<input type="text" class="width75 amount" name="newamount" id="newamount" value="'.price($amount, 1, $langs, 1, -1, -1).
'">';
2022 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
2023 if ($minimumamount > $amount) {
2024 print
' <span class="opacitymedium small">'. $langs->trans(
"AmountIsLowerToMinimumNotice",
price($minimumamount, 1, $langs, 1, -1, -1, $currency)).
'</span>';
2026 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
2028 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
2029 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
2030 print
'</td></tr>'.
"\n";
2033 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
2034 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
2035 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
2036 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
2037 print
'</td></tr>'.
"\n";
2040 $shipToName = $member->getFullName($langs);
2041 $shipToStreet = $member->address;
2042 $shipToCity = $member->town;
2043 $shipToState = $member->state_code;
2044 $shipToCountryCode = $member->country_code;
2045 $shipToZip = $member->zip;
2046 $shipToStreet2 =
'';
2047 $phoneNum = $member->phone;
2048 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
2049 print
'<!-- Shipping address information -->';
2050 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
2051 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
2052 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
2053 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
2054 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
2055 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
2056 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
2057 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
2059 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
2061 if (is_object($member->thirdparty)) {
2062 print
'<input type="hidden" name="thirdparty_id" value="'.$member->thirdparty->id.
'">'.
"\n";
2064 print
'<input type="hidden" name="email" value="'.$member->email.
'">'.
"\n";
2065 $labeldesc = $langs->trans(
"PaymentSubscription");
2066 if (
GETPOST(
'desc',
'alpha')) {
2067 $labeldesc =
GETPOST(
'desc',
'alpha');
2069 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
2073if ($source ==
'donation') {
2074 dol_syslog(
"newpayment.php source=donation", LOG_DEBUG);
2077 $langs->load(
"don");
2079 require_once DOL_DOCUMENT_ROOT.
'/don/class/don.class.php';
2081 $don =
new Don($db);
2083 $result = $don->fetch((
int) $ref);
2085 $mesg = $don->error;
2088 $don->fetch_thirdparty();
2092 if ($action !=
'dopayment') {
2093 if (
GETPOST(
"amount",
'alpha')) {
2094 $amount =
GETPOST(
"amount",
'alpha');
2096 $amount = $don->getRemainToPay();
2101 if (
GETPOST(
'fulltag',
'alpha')) {
2102 $fulltag =
GETPOST(
'fulltag',
'alpha');
2107 $fulltag .=
'.TAG='.$TAG;
2113 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
2114 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
2115 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
2116 print
'</td></tr>'.
"\n";
2119 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
2120 print
'</td><td class="CTableRow2"><b>';
2121 if ($don->morphy ==
'mor' && !empty($don->societe)) {
2122 print $don->societe;
2124 print $don->getFullName($langs);
2127 print
'</td></tr>'.
"\n";
2130 $text =
'<b>'.$langs->trans(
"PaymentDonation").
'</b>';
2131 if (
GETPOST(
'desc',
'alpha')) {
2132 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
2134 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
2135 print
'</td><td class="CTableRow2">'.$text;
2136 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($source).
'">';
2137 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($don->ref).
'">';
2138 print
'</td></tr>'.
"\n";
2141 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
2142 if (empty($amount)) {
2144 print
' ('.$langs->trans(
"ToComplete");
2147 print
' - <a href="' .
getDolGlobalString(
'DONATION_EXT_URL_SUBSCRIPTION_INFO').
'" rel="external" target="_blank" rel="noopener noreferrer">'.$langs->trans(
"SeeHere").
'</a>';
2153 print
'</td><td class="CTableRow2">';
2155 if (empty($amount) || !is_numeric($amount)) {
2158 if (empty($valtoshow)) {
2170 if (empty($amount) || !is_numeric($amount)) {
2175 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
2176 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.$valtoshow.
'">';
2178 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
2180 $valtoshow = $amount;
2183 $amount = $valtoshow;
2185 print
'<b class="amount">'.price($valtoshow, 1, $langs, 1, -1, -1, $currency).
'</b>';
2186 print
'<input type="hidden" name="amount" value="'.$valtoshow.
'">';
2187 print
'<input type="hidden" name="newamount" value="'.$valtoshow.
'">';
2189 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
2190 print
'</td></tr>'.
"\n";
2193 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
2194 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
2195 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
2196 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
2197 print
'</td></tr>'.
"\n";
2200 $shipToName = $don->getFullName($langs);
2201 $shipToStreet = $don->address;
2202 $shipToCity = $don->town;
2203 $shipToState = $don->state_code;
2204 $shipToCountryCode = $don->country_code;
2205 $shipToZip = $don->zip;
2206 $shipToStreet2 =
'';
2207 $phoneNum = $don->phone;
2208 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
2209 print
'<!-- Shipping address information -->';
2210 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
2211 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
2212 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
2213 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
2214 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
2215 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
2216 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
2217 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
2219 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
2221 if (is_object($don->thirdparty)) {
2222 print
'<input type="hidden" name="thirdparty_id" value="'.$don->thirdparty->id.
'">'.
"\n";
2224 print
'<input type="hidden" name="email" value="'.$don->email.
'">'.
"\n";
2225 $labeldesc = $langs->trans(
"PaymentSubscription");
2226 if (
GETPOST(
'desc',
'alpha')) {
2227 $labeldesc =
GETPOST(
'desc',
'alpha');
2229 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
2232if ($source ==
'organizedeventregistration' && is_object($thirdparty)) {
2233 dol_syslog(
"newpayment.php source=organizedeventregistration", LOG_DEBUG);
2236 $langs->loadLangs(array(
"members",
"eventorganization"));
2238 if (
GETPOST(
'fulltag',
'alpha')) {
2239 $fulltag =
GETPOST(
'fulltag',
'alpha');
2244 $fulltag .=
'.TAG='.$TAG;
2250 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
2251 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
2252 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
2253 print
'</td></tr>'.
"\n";
2256 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Attendee");
2257 print
'</td><td class="CTableRow2"><b>';
2258 print $attendee->email;
2259 print($thirdparty->name ?
' ('.$thirdparty->name.
')' :
'');
2261 print
'</td></tr>'.
"\n";
2263 if (! is_object($attendee->project)) {
2264 $text =
'ErrorProjectNotFound';
2266 $text = $langs->trans(
"PaymentEvent").
' - '.$attendee->project->title;
2270 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
2271 print
'</td><td class="CTableRow2"><b>'.$text.
'</b>';
2272 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($source).
'">';
2273 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag((
string) $invoice->id).
'">';
2274 print
'</td></tr>'.
"\n";
2277 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
2278 print
'</td><td class="CTableRow2">';
2279 $valtoshow = $amount;
2280 print
'<b class="amount">'.price($valtoshow, 1, $langs, 1, -1, -1, $currency).
'</b>';
2281 print
'<input type="hidden" name="amount" value="'.$valtoshow.
'">';
2282 print
'<input type="hidden" name="newamount" value="'.$valtoshow.
'">';
2283 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
2284 print
'</td></tr>'.
"\n";
2287 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
2288 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
2289 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
2290 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
2291 print
'</td></tr>'.
"\n";
2294 $shipToName = $thirdparty->getFullName($langs);
2295 $shipToStreet = $thirdparty->address;
2296 $shipToCity = $thirdparty->town;
2297 $shipToState = $thirdparty->state_code;
2298 $shipToCountryCode = $thirdparty->country_code;
2299 $shipToZip = $thirdparty->zip;
2300 $shipToStreet2 =
'';
2301 $phoneNum = $thirdparty->phone;
2302 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
2303 print
'<!-- Shipping address information -->';
2304 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
2305 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
2306 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
2307 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
2308 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
2309 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
2310 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
2311 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
2313 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
2315 print
'<input type="hidden" name="thirdparty_id" value="'.$thirdparty->id.
'">'.
"\n";
2316 print
'<input type="hidden" name="email" value="'.$thirdparty->email.
'">'.
"\n";
2317 $labeldesc = $langs->trans(
"PaymentSubscription");
2318 if (
GETPOST(
'desc',
'alpha')) {
2319 $labeldesc =
GETPOST(
'desc',
'alpha');
2321 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
2324if ($source ==
'boothlocation') {
2325 dol_syslog(
"newpayment.php source=boothlocation", LOG_DEBUG);
2328 $langs->load(
"members");
2330 if (
GETPOST(
'fulltag',
'alpha')) {
2331 $fulltag =
GETPOST(
'fulltag',
'alpha');
2336 $fulltag .=
'.TAG='.$TAG;
2342 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
2343 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
2344 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
2345 print
'</td></tr>'.
"\n";
2348 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Attendee");
2349 print
'</td><td class="CTableRow2"><b>';
2350 print $thirdparty->name;
2352 print
'</td></tr>'.
"\n";
2355 $text =
'<b>'.$langs->trans(
"PaymentBoothLocation").
'</b>';
2356 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
2357 print
'</td><td class="CTableRow2">'.$text;
2358 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($source).
'">';
2359 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag((
string) $invoice->id).
'">';
2360 print
'</td></tr>'.
"\n";
2363 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
2364 print
'</td><td class="CTableRow2">';
2365 $valtoshow = $amount;
2366 print
'<b class="amount">'.price($valtoshow, 1, $langs, 1, -1, -1, $currency).
'</b>';
2367 print
'<input type="hidden" name="amount" value="'.$valtoshow.
'">';
2368 print
'<input type="hidden" name="newamount" value="'.$valtoshow.
'">';
2369 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
2370 print
'</td></tr>'.
"\n";
2373 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
2374 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
2375 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
2376 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
2377 print
'</td></tr>'.
"\n";
2380 $shipToName = $thirdparty->getFullName($langs);
2381 $shipToStreet = $thirdparty->address;
2382 $shipToCity = $thirdparty->town;
2383 $shipToState = $thirdparty->state_code;
2384 $shipToCountryCode = $thirdparty->country_code;
2385 $shipToZip = $thirdparty->zip;
2386 $shipToStreet2 =
'';
2387 $phoneNum = $thirdparty->phone;
2388 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
2389 print
'<!-- Shipping address information -->';
2390 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
2391 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
2392 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
2393 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
2394 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
2395 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
2396 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
2397 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
2399 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
2401 print
'<input type="hidden" name="thirdparty_id" value="'.$thirdparty->id.
'">'.
"\n";
2402 print
'<input type="hidden" name="email" value="'.$thirdparty->email.
'">'.
"\n";
2403 $labeldesc = $langs->trans(
"PaymentSubscription");
2404 if (
GETPOST(
'desc',
'alpha')) {
2405 $labeldesc =
GETPOST(
'desc',
'alpha');
2407 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
2410if (!$found && !$mesg) {
2411 $mesg = $langs->trans(
"ErrorBadParameters");
2415 print
'<tr><td align="center" colspan="2"><br><div class="warning">'.dol_escape_htmltag($mesg, 1, 1,
'br').
'</div></td></tr>'.
"\n";
2418print
'</table>'.
"\n";
2423if ($action !=
'dopayment') {
2424 dol_syslog(
"newpayment.php action is not dopayment so we show all payment modes", LOG_DEBUG);
2426 if ($found && !$error) {
2429 'source' => $source,
2433 $reshook = $hookmanager->executeHooks(
'doCheckStatus', $parameters, $object, $action);
2436 } elseif ($reshook > 0) {
2437 print $hookmanager->resPrint;
2440 if ($source ==
'order' &&
$object->billed) {
2441 print
'<br><br><div class="amountpaymentcomplete size12x wrapimp">'.$langs->trans(
"OrderBilled").
'</div>';
2442 } elseif ($source ==
'invoice' &&
$object->paye) {
2443 print
'<br><br><div class="amountpaymentcomplete size12x wrapimp">'.$langs->trans(
"InvoicePaid").
'</div>';
2452 print
'<br><br><div class="amountpaymentcomplete size12x wrapimp">'.$langs->trans(
"Abandoned").
'</div>';
2453 } elseif ($source ==
'donation' &&
$object->paid) {
2454 print
'<br><br><div class="amountpaymentcomplete size12x wrapimp">'.$langs->trans(
"DonationPaid").
'</div>';
2457 if (($source ==
'member' || $source ==
'membersubscription') &&
$object->datefin >
dol_now()) {
2458 $langs->load(
"members");
2459 print
'<br><div class="amountpaymentcomplete size12x wrapimp">';
2460 $s = $langs->trans(
"MembershipPaid",
'{s1}');
2461 print str_replace(
'{s1}',
'<span class="nobold">'.
dol_print_date(
$object->datefin,
'day').
'</span>', $s);
2463 print
'<div class="opacitymedium margintoponly">'.$langs->trans(
"PaymentWillBeRecordedForNextPeriod").
'</div>';
2471 'paymentmethod' => $paymentmethod
2473 $reshook = $hookmanager->executeHooks(
'doAddButton', $parameters, $object, $action);
2476 } elseif ($reshook >= 0) {
2477 print $hookmanager->resPrint;
2480 if ((empty($paymentmethod) || $paymentmethod ==
'paybox') &&
isModEnabled(
'paybox')) {
2481 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").
'">';
2483 print
'<span class="buttonpaymentsmall">'.$langs->trans(
"CreditOrDebitCard").
'</span>';
2486 $( document ).ready(function() {
2487 $("#div_dopayment_paybox").click(function(){
2488 $("#dopayment_paybox").click();
2490 $("#dopayment_paybox").click(function(e){
2491 $("#div_dopayment_paybox").css( \'cursor\', \'wait\' );
2492 e.stopPropagation();
2499 if ((empty($paymentmethod) || $paymentmethod ==
'stripe') &&
isModEnabled(
'stripe')) {
2508 $noidempotency_key = (GETPOSTISSET(
'noidempotency') ?
GETPOSTINT(
'noidempotency') : (
getDolGlobalInt(
'STRIPE_USE_IDEMPOTENCY_BY_DEFAULT') ? 0 : 1));
2510 print
'<div class="button buttonpayment" id="div_dopayment_stripe">';
2511 print
'<span class="fa fa-credit-card"></span> ';
2512 print
'<input class="" type="submit" id="dopayment_stripe" name="dopayment_stripe" value="'.$langs->trans(
"StripeDoPayment").
'">';
2513 print
'<input type="hidden" name="noidempotency" value="'.$noidempotency_key.
'">';
2515 print
'<span class="buttonpaymentsmall">'.$langs->trans(
"CreditOrDebitCard").
'</span>';
2518 $( document ).ready(function() {
2519 $("#div_dopayment_stripe").click(function(){
2520 $("#dopayment_stripe").click();
2522 $("#dopayment_stripe").click(function(e){
2523 $("#div_dopayment_stripe").css( \'cursor\', \'wait\' );
2524 e.stopPropagation();
2533 if ((empty($paymentmethod) || $paymentmethod ==
'paypal') &&
isModEnabled(
'paypal')) {
2535 $conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY =
'integral';
2544 print
'<div class="button buttonpayment" id="div_dopayment_paypal">';
2546 print
'<div style="line-height: 1em"> </div>';
2548 print
'<span class="fab fa-paypal"></span> <input class="" type="submit" id="dopayment_paypal" name="dopayment_paypal" value="'.$langs->trans(
"PaypalDoPayment").
'">';
2551 print
'<span class="buttonpaymentsmall">'.$langs->trans(
"CreditOrDebitCard").
'</span><span class="buttonpaymentsmall"> - </span>';
2552 print
'<span class="buttonpaymentsmall">'.$langs->trans(
"PayPalBalance").
'</span>';
2560 $( document ).ready(function() {
2561 $("#div_dopayment_paypal").click(function(){
2562 $("#dopayment_paypal").click();
2564 $("#dopayment_paypal").click(function(e){
2565 $("#div_dopayment_paypal").css( \'cursor\', \'wait\' );
2566 e.stopPropagation();
2582print
'</td></tr>'.
"\n";
2584print
'</table>'.
"\n";
2586print
'</form>'.
"\n";
2594if (preg_match(
'/^dopayment/', $action)) {
2595 dol_syslog(
"newpayment.php action is dopayment... because we clicked on a payment mode - amount = ".$amount);
2599 $_SESSION[
"currencyCodeType"] = $currency;
2600 $_SESSION[
"FinalPaymentAmt"] = $amount;
2601 $_SESSION[
'ipaddress'] = ($remoteip ? $remoteip :
'unknown');
2602 $_SESSION[
"paymentType"] =
'';
2607 if (
GETPOST(
'dopayment_stripe',
'alpha')) {
2615 background-color: white;
2618 border: 1px solid transparent;
2619 box-shadow: 0 1px 3px 0 #e6ebf1;
2620 -webkit-transition: box-shadow 150ms ease;
2621 transition: box-shadow 150ms ease;
2624 .StripeElement--focus {
2625 box-shadow: 0 1px 3px 0 #cfd7df;
2628 .StripeElement--invalid {
2629 border-color: #fa755a;
2632 .StripeElement--webkit-autofill {
2633 background-color: #fefde5 !important;
2639 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";
2640 print
'<form action="'.$_SERVER[
'REQUEST_URI'].
'" method="POST" id="payment-form">'.
"\n";
2642 print
'<input type="hidden" name="token" value="'.newToken().
'">'.
"\n";
2643 print
'<input type="hidden" name="dopayment_stripe" value="1">'.
"\n";
2644 print
'<input type="hidden" name="action" value="charge">'.
"\n";
2645 print
'<input type="hidden" name="tag" value="'.$TAG.
'">'.
"\n";
2646 print
'<input type="hidden" name="s" value="'.$source.
'">'.
"\n";
2647 print
'<input type="hidden" name="ref" value="'.$REF.
'">'.
"\n";
2648 print
'<input type="hidden" name="fulltag" value="'.$FULLTAG.
'">'.
"\n";
2649 print
'<input type="hidden" name="suffix" value="'.$suffix.
'">'.
"\n";
2650 print
'<input type="hidden" name="securekey" value="'.$SECUREKEY.
'">'.
"\n";
2651 print
'<input type="hidden" name="e" value="'.$entity.
'" />'.
"\n";
2652 print
'<input type="hidden" name="amount" value="'.$amount.
'">'.
"\n";
2653 print
'<input type="hidden" name="currency" value="'.$currency.
'">'.
"\n";
2655 print
'<input type="hidden" name="email" value="'.GETPOST(
'email',
'alpha').
'" />';
2656 print
'<input type="hidden" name="thirdparty_id" value="'.GETPOSTINT(
'thirdparty_id').
'" />';
2657 print
'<input type="hidden" name="lang" value="'.$getpostlang.
'">';
2663 if (array_key_exists(
'ORD', $tmptag) && (
int) $tmptag[
'ORD'] > 0) {
2664 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
2666 $result =
$object->fetch((
int) $tmptag[
'ORD']);
2668 if (
$object->total_ttc != $amount) {
2675 if (!$checkamount) {
2676 dol_syslog(
"Hack attempt detected", LOG_WARNING);
2677 setEventMessages(
'Bad value for amount. Reported as a hack attempt.',
null,
'errors');
2681 require_once DOL_DOCUMENT_ROOT.
'/stripe/class/stripe.class.php';
2683 $service =
'StripeLive';
2686 $service =
'StripeTest';
2690 $stripe =
new Stripe($db);
2691 $stripeacc = $stripe->getStripeAccount($service);
2692 if (is_object($object) && is_object(
$object->thirdparty)) {
2693 $stripecu = $stripe->customerStripe(
$object->thirdparty, $stripeacc, $servicestatus, 1);
2697 dol_syslog(
"newpayment.php Create a Paymentintent for amount=".$amount, LOG_DEBUG);
2701 $noidempotency_key = (GETPOSTISSET(
'noidempotency') ?
GETPOSTINT(
'noidempotency') : (
getDolGlobalInt(
'STRIPE_USE_IDEMPOTENCY_BY_DEFAULT') ? 0 : 1));
2703 $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);
2706 if ($stripe->error) {
2717 <table id="dolpaymenttable" summary="Payment form" class="center centpercent">
2718 <tbody><tr><td class="textpublicpayment">';
2721 print
'<div id="payment-request-button"><!-- A Stripe Element will be inserted here. --></div>';
2724 print
'<div class="form-row '.(getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2 ?
'center' :
'left').
'">';
2725 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 1) {
2726 print
'<label for="card-element">'.$langs->trans(
"CreditOrDebitCard").
'</label>';
2727 print
'<br><input id="cardholder-name" class="marginbottomonly" name="cardholder-name" value="" type="text" placeholder="'.$langs->trans(
"CardOwner").
'" autocomplete="off" spellcheck="false" autofocus required>';
2730 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 1) {
2731 print
'<div id="card-element">
2732 <!-- a Stripe Element will be inserted here. -->
2735 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2) {
2736 print
'<div id="payment-element">
2737 <!-- a Stripe Element will be inserted here. -->
2741 print
'<!-- Used to display form errors -->
2742 <div id="card-errors" role="alert"></div>
2746 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>';
2747 print
'<img id="hourglasstopay" class="hidden" src="'.DOL_URL_ROOT.
'/theme/'.$conf->theme.
'/img/working.gif">';
2749 print
'</td></tr></tbody>';
2754 if (empty($paymentintent)) {
2755 print
'<center>'.$langs->trans(
"Error").
' - Failed to get PaymentIntent</center>';
2757 print
'<input type="hidden" name="paymentintent_id" value="'.$paymentintent->id.
'">';
2762 print
'</form>'.
"\n";
2766 if (empty($stripearrayofkeys[
'publishable_key'])) {
2767 $langs->load(
"errors");
2768 print
info_admin($langs->trans(
"ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv(
"Stripe")), 0, 0,
'error marginleftonly marginrightonly');
2770 print
'<!-- JS Code for Stripe components -->';
2771 print
'<script src="https://js.stripe.com/v3/"></script>'.
"\n";
2772 print
'<!-- urllogofull = '.$urllogofull.
' -->'.
"\n";
2775 print
'<script type="text/javascript">'.
"\n";
2778 $amountstripe = $amount;
2782 $arrayzerounitcurrency = array(
'BIF',
'CLP',
'DJF',
'GNF',
'JPY',
'KMF',
'KRW',
'MGA',
'PYG',
'RWF',
'VND',
'VUV',
'XAF',
'XOF',
'XPF');
2783 if (!in_array($currency, $arrayzerounitcurrency)) {
2784 $amountstripe *= 100;
2788 $metadata = array(
'dol_version' => DOL_VERSION,
'dol_entity' => $conf->entity,
'ipaddress' => $ipaddress);
2789 if (is_object($object)) {
2790 $metadata[
'dol_type'] =
$object->element;
2791 $metadata[
'dol_id'] =
$object->id;
2797 $arrayforpaymentintent = array(
2798 'description' =>
'Stripe payment: '.$FULLTAG.($ref ?
' ref='.$ref :
''),
2799 "metadata" => $metadata
2802 $arrayforpaymentintent[
"statement_descriptor"] =
dol_trunc($TAG, 10,
'right',
'UTF-8', 1);
2805 $arrayforcheckout = array(
2806 'payment_method_types' => array(
'card'),
2807 'line_items' => array(array(
2808 'price_data' => array(
2809 'currency' => $currency,
2810 'unit_amount' => $amountstripe,
2811 'product_data' => array(
2812 'name' => $langs->transnoentitiesnoconv(
"Payment").
' '.$TAG,
2813 'description' =>
'Stripe payment: '.$FULLTAG.($ref ?
' ref='.$ref :
''),
2819 'mode' =>
'payment',
2820 'client_reference_id' => $FULLTAG,
2821 'success_url' => $urlok,
2822 'cancel_url' => $urlko,
2823 'payment_intent_data' => $arrayforpaymentintent
2826 $arrayforcheckout[
'customer'] = $stripecu;
2828 $arrayforcheckout[
'customer_email'] =
GETPOST(
'email',
'alpha');
2831 dol_syslog(
"We create a stripe session with \Stripe\Checkout\Session::create for amountstripe=".$amountstripe);
2833 $sessionstripe = \Stripe\Checkout\Session::create($arrayforcheckout);
2835 dol_syslog(
"sessionstripe=".$sessionstripe->id);
2841 $_SESSION[
"currencyCodeType"] = $currency;
2842 $_SESSION[
"paymentType"] =
'';
2843 $_SESSION[
"FinalPaymentAmt"] = $amount;
2844 $_SESSION[
'ipaddress'] = ($remoteip ? $remoteip :
'unknown');
2845 $_SESSION[
'payerID'] = is_object($stripecu) ? $stripecu->id :
'';
2846 $_SESSION[
'TRANSACTIONID'] = $sessionstripe->id;
2848 print $e->getMessage();
2854 if (empty($stripeacc)) {
2856 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php?>');
2860 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php?>', { stripeAccount:
'<?php echo $stripeacc; ?>' });
2865 var elements = stripe.elements();
2873 fontFamily:
'"Helvetica Neue", Helvetica, sans-serif',
2874 fontSmoothing:
'antialiased',
2882 iconColor:
'#fa755a'
2886 var cardElement = elements.create(
'card', {style: style});
2889 stripe.redirectToCheckout({
2893 sessionId:
'<?php print $sessionstripe->id; ?>'
2894 }).then(
function (result) {
2908 if (empty($stripeacc)) {
2910 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php?>');
2914 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php?>', { stripeAccount:
'<?php echo $stripeacc; ?>' });
2919 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2) {
2921 var cardButton = document.getElementById(
'buttontopay');
2922 var clientSecret = cardButton.dataset.secret;
2923 var options = { clientSecret: clientSecret };
2926 var elements = stripe.elements(options);
2931 var elements = stripe.elements();
2941 fontFamily:
'"Helvetica Neue", Helvetica, sans-serif',
2942 fontSmoothing:
'antialiased',
2950 iconColor:
'#fa755a'
2955 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2) {
2957 var paymentElement = elements.create(
"payment");
2960 paymentElement.mount(
"#payment-element");
2963 var cardButton = document.getElementById(
'buttontopay');
2965 cardButton.addEventListener(
'click',
function(event) {
2966 console.log(
"We click on buttontopay");
2967 event.preventDefault();
2970 jQuery(
'#hourglasstopay').show();
2971 jQuery(
'#buttontopay').hide();
2973 stripe.confirmPayment({
2974 elements,confirmParams: {
2975 return_url:
'<?php echo $urlok; ?>',
2976 payment_method_data: {
2979 <?php
if (
GETPOST(
'email',
'alpha') || (is_object($object) && is_object(
$object->thirdparty) && !empty(
$object->thirdparty->email))) {
2980 ?>, email:
'<?php echo dol_escape_js(GETPOST('email
', 'alpha
') ? GETPOST('email
', 'alpha
') : $object->thirdparty->email); ?>'<?php
2982 <?php
if (is_object($object) && is_object(
$object->thirdparty) && !empty(
$object->thirdparty->phone)) {
2983 ?>, phone:
'<?php echo dol_escape_js($object->thirdparty->phone); ?>'<?php
2985 <?php
if (is_object($object) && is_object(
$object->thirdparty)) {
2987 city:
'<?php echo dol_escape_js($object->thirdparty->town); ?>',
2988 <?php if ($object->thirdparty->country_code) {
2989 ?>country:
'<?php echo dol_escape_js($object->thirdparty->country_code); ?>',<?php
2991 line1:
'<?php echo dol_escape_js(preg_replace('/\s\s+/
', ' ', $object->thirdparty->address)); ?>',
2992 postal_code:
'<?php echo dol_escape_js($object->thirdparty->zip); ?>'
2998 save_payment_method:<?php
if ($stripecu) {
3005 ).then(
function(result) {
3006 console.log(result);
3008 console.log(
"Error on result of handleCardPayment");
3009 jQuery(
'#buttontopay').show();
3010 jQuery(
'#hourglasstopay').hide();
3012 var errorElement = document.getElementById(
'card-errors');
3013 console.log(result);
3014 errorElement.textContent = result.error.message;
3017 console.log(
"No error on result of handleCardPayment, so we submit the form");
3019 jQuery(
'#buttontopay').hide();
3020 jQuery(
'#hourglasstopay').show();
3022 jQuery(
'#payment-form').submit();
3030 var cardElement = elements.create(
'card', {style: style});
3033 cardElement.mount(
'#card-element');
3036 cardElement.addEventListener(
'change',
function(event) {
3037 var displayError = document.getElementById(
'card-errors');
3039 console.log(
"Show event error (like 'Incorrect card number', ...)");
3040 displayError.textContent =
event.error.message;
3042 console.log(
"Reset error message");
3043 displayError.textContent =
'';
3048 var cardholderName = document.getElementById(
'cardholder-name');
3049 var cardButton = document.getElementById(
'buttontopay');
3050 var clientSecret = cardButton.dataset.secret;
3052 cardButton.addEventListener(
'click',
function(event) {
3053 console.log(
"We click on buttontopay");
3054 event.preventDefault();
3056 if (cardholderName.value ==
'')
3058 console.log(
"Field Card holder is empty");
3059 var displayError = document.getElementById(
'card-errors');
3060 displayError.textContent =
'<?php print dol_escape_js($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("CardOwner"))); ?>';
3065 jQuery(
'#hourglasstopay').show();
3066 jQuery(
'#buttontopay').hide();
3068 stripe.handleCardPayment(
3069 clientSecret, cardElement, {
3070 payment_method_data: {
3072 name: cardholderName.value
3073 <?php
if (
GETPOST(
'email',
'alpha') || (is_object($object) && is_object(
$object->thirdparty) && !empty(
$object->thirdparty->email))) {
3074 ?>, email:
'<?php echo dol_escape_js(GETPOST('email
', 'alpha
') ? GETPOST('email
', 'alpha
') : $object->thirdparty->email); ?>'<?php
3076 <?php
if (is_object($object) && is_object(
$object->thirdparty) && !empty(
$object->thirdparty->phone)) {
3077 ?>, phone:
'<?php echo dol_escape_js($object->thirdparty->phone); ?>'<?php
3079 <?php
if (is_object($object) && is_object(
$object->thirdparty)) {
3081 city:
'<?php echo dol_escape_js($object->thirdparty->town); ?>',
3082 <?php if ($object->thirdparty->country_code) {
3083 ?>country:
'<?php echo dol_escape_js($object->thirdparty->country_code); ?>',<?php
3085 line1:
'<?php echo dol_escape_js(preg_replace('/\s\s+/
', ' ', $object->thirdparty->address)); ?>',
3086 postal_code:
'<?php echo dol_escape_js($object->thirdparty->zip); ?>'
3092 save_payment_method:<?php
if ($stripecu) {
3098 ).then(
function(result) {
3099 console.log(result);
3101 console.log(
"Error on result of handleCardPayment");
3102 jQuery(
'#buttontopay').show();
3103 jQuery(
'#hourglasstopay').hide();
3105 var errorElement = document.getElementById(
'card-errors');
3106 errorElement.textContent = result.error.message;
3109 console.log(
"No error on result of handleCardPayment, so we submit the form");
3111 jQuery(
'#buttontopay').hide();
3112 jQuery(
'#hourglasstopay').show();
3114 jQuery(
'#payment-form').submit();
3132 'paymentmethod' => $paymentmethod,
3133 'amount' => $amount,
3134 'currency' => $currency,
3135 'tag' =>
GETPOST(
"tag",
'alpha'),
3136 'dopayment' =>
GETPOST(
'dopayment',
'alpha')
3139 $reshook = $hookmanager->executeHooks(
'doPayment', $parameters, $object, $action);
3142 } elseif ($reshook > 0) {
3143 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,...