41if (!defined(
'NOLOGIN')) {
44if (!defined(
'NOCSRFCHECK')) {
45 define(
"NOCSRFCHECK", 1);
47if (!defined(
'NOIPCHECK')) {
48 define(
'NOIPCHECK',
'1');
50if (!defined(
'NOBROWSERNOTIF')) {
51 define(
'NOBROWSERNOTIF',
'1');
54if (!defined(
'XFRAMEOPTIONS_ALLOWALL')) {
55 define(
'XFRAMEOPTIONS_ALLOWALL',
'1');
61$entity = (!empty($_GET[
'entity']) ? (int) $_GET[
'entity'] : (!empty($_POST[
'entity']) ? (int) $_POST[
'entity'] : (!empty($_GET[
'e']) ? (int) $_GET[
'e'] : (!empty($_POST[
'e']) ? (int) $_POST[
'e'] : 1))));
62if (is_numeric($entity)) {
63 define(
"DOLENTITY", $entity);
67require
'../../main.inc.php';
78require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
79require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
80require_once DOL_DOCUMENT_ROOT.
'/core/lib/payments.lib.php';
81require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
82require_once DOL_DOCUMENT_ROOT.
'/core/lib/security2.lib.php';
83require_once DOL_DOCUMENT_ROOT.
'/eventorganization/class/conferenceorboothattendee.class.php';
84require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
85require_once DOL_DOCUMENT_ROOT.
'/societe/class/societeaccount.class.php';
86require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
87require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
90$langs->loadLangs(array(
"main",
"other",
"dict",
"bills",
"companies",
"errors",
"paypal",
"stripe"));
94$hookmanager->initHooks(array(
'newpayment'));
100$action =
GETPOST(
'action',
'aZ09');
109$suffix =
GETPOST(
"suffix",
'aZ09');
111if (!
GETPOST(
"currency",
'alpha')) {
114 $currency =
GETPOST(
"currency",
'aZ09');
117$getpostlang =
GETPOST(
'lang',
'aZ09');
121 if (!
GETPOST(
"amount",
'alpha') && !$source) {
122 print $langs->trans(
'ErrorBadParameters').
" - amount or source";
125 if (is_numeric($amount) && !
GETPOST(
"tag",
'alpha') && !$source) {
126 print $langs->trans(
'ErrorBadParameters').
" - tag or source";
129 if ($source && !
GETPOST(
"ref",
'alpha')) {
130 print $langs->trans(
'ErrorBadParameters').
" - ref";
138$paymentintent =
null;
142if ($source ==
'organizedeventregistration') {
149 $resultinvoice = $invoice->fetch($invoiceid);
151 if ($resultinvoice <= 0) {
164 $sql =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"eventorganization_conferenceorboothattendee";
165 $sql .=
" WHERE fk_invoice = ".((int) $invoiceid);
167 $resql =
$db->query($sql);
169 $obj =
$db->fetch_object($resql);
171 $attendeeid = $obj->rowid;
175 if ($attendeeid > 0) {
176 $resultattendee = $attendee->fetch($attendeeid);
178 if ($resultattendee <= 0) {
181 $attendee->fetch_projet();
183 $amount =
price2num($invoice->total_ttc);
186 $resultthirdparty = $thirdparty->fetch($invoice->socid);
187 if ($resultthirdparty <= 0) {
194} elseif ($source ==
'boothlocation') {
198 $resultinvoice = $invoice->fetch($invoiceid);
199 if ($resultinvoice <= 0) {
202 $amount =
price2num($invoice->total_ttc);
205 $resultthirdparty = $thirdparty->fetch($invoice->socid);
206 if ($resultthirdparty <= 0) {
214$paymentmethod =
GETPOST(
'paymentmethod',
'alphanohtml') ?
GETPOST(
'paymentmethod',
'alphanohtml') :
'';
215$validpaymentmethod = array();
218foreach ($_POST as $key => $val) {
220 if (preg_match(
'/^dopayment_(.*)$/', $key, $reg)) {
221 $paymentmethod = $reg[1];
227$ref = $REF =
GETPOST(
'ref',
'alpha');
229$FULLTAG =
GETPOST(
"fulltag",
'alpha');
230$SECUREKEY =
GETPOST(
"securekey");
233$PAYPAL_API_SANDBOX =
"";
234$PAYPAL_API_USER =
"";
235$PAYPAL_API_PASSWORD =
"";
236$PAYPAL_API_SIGNATURE =
"";
239if (empty($ws) && preg_match(
'/WS=([^=&]+)/', $FULLTAG, $reg)) {
246$urlwithroot = DOL_MAIN_URL_ROOT;
248$urlok = $urlwithroot.
'/public/payment/paymentok.php?';
249$urlko = $urlwithroot.
'/public/payment/paymentko.php?';
251if ($ws && !defined(
'USEDOLIBARRSERVER') && !defined(
'USEDOLIBARREDITOR')) {
252 if (!empty($_SERVER[
"HTTP_X_FORWARDED_HOST"])) {
254 $tmphosts = explode(
',', $_SERVER[
"HTTP_X_FORWARDED_HOST"]);
255 $tmphosts = array_map(
'trim', $tmphosts);
256 $lastproxy = end($tmphosts);
258 include_once DOL_DOCUMENT_ROOT.
'/website/class/website.class.php';
260 $tmpwebsite->fetch(0, $ws);
262 if (preg_replace(
'/https?:\/\//i',
'', $tmpwebsite->virtualhost) == $lastproxy) {
264 $urlok = $tmpwebsite->virtualhost.
'/public/payment/paymentok.php?';
265 $urlko = $tmpwebsite->virtualhost.
'/public/payment/paymentko.php?';
270if ($paymentmethod && !preg_match(
'/'.preg_quote(
'PM='.$paymentmethod,
'/').
'/', $FULLTAG)) {
271 $FULLTAG .= ($FULLTAG ?
'.' :
'').
'PM='.$paymentmethod;
274if ($ws && !preg_match(
'/'.preg_quote(
'WS='.$ws,
'/').
'/', $FULLTAG)) {
275 $FULLTAG .= ($FULLTAG ?
'.' :
'').
'WS='.$ws;
278if (!empty($suffix)) {
279 $urlok .=
'suffix='.urlencode($suffix).
'&';
280 $urlko .=
'suffix='.urlencode($suffix).
'&';
283 $urlok .=
's='.urlencode($source).
'&';
284 $urlko .=
's='.urlencode($source).
'&';
287 $urlok .=
'ref='.urlencode($REF).
'&';
288 $urlko .=
'ref='.urlencode($REF).
'&';
291 $urlok .=
'tag='.urlencode($TAG).
'&';
292 $urlko .=
'tag='.urlencode($TAG).
'&';
294if (!empty($FULLTAG)) {
295 $urlok .=
'fulltag='.urlencode($FULLTAG).
'&';
296 $urlko .=
'fulltag='.urlencode($FULLTAG).
'&';
298if (!empty($SECUREKEY)) {
299 $urlok .=
'securekey='.urlencode($SECUREKEY).
'&';
300 $urlko .=
'securekey='.urlencode($SECUREKEY).
'&';
302if (!empty($entity)) {
303 $urlok .=
'e='.urlencode((
string) ($entity)).
'&';
304 $urlko .=
'e='.urlencode((
string) ($entity)).
'&';
306if (!empty($getpostlang)) {
307 $urlok .=
'lang='.urlencode($getpostlang).
'&';
308 $urlko .=
'lang='.urlencode($getpostlang).
'&';
310$urlok = preg_replace(
'/&$/',
'', $urlok);
311$urlko = preg_replace(
'/&$/',
'', $urlko);
318@phan-var-force string $PAYPAL_API_SANDBOX
319@phan-var-force string $PAYPAL_API_OK
320@phan-var-force string $PAYPAL_API_KO
323if ((empty($paymentmethod) || $paymentmethod ==
'paypal') &&
isModEnabled(
'paypal')) {
324 global $PAYPAL_API_SANDBOX, $PAYPAL_API_OK, $PAYPAL_API_KO, $PAYPAL_API_USER, $PAYPAL_API_PASSWORD, $PAYPAL_API_SIGNATURE;
325 require_once DOL_DOCUMENT_ROOT.
'/paypal/lib/paypal.lib.php';
326 require_once DOL_DOCUMENT_ROOT.
'/paypal/lib/paypalfunctions.lib.php';
332 $PAYPAL_API_OK = $urlok;
336 $PAYPAL_API_KO = $urlko;
338 if (empty($PAYPAL_API_USER)) {
339 print
'Paypal parameter PAYPAL_API_USER is not defined. Please <a href="'.DOL_URL_ROOT.
'/paypal/admin/paypal.php">complete the setup of module PayPal first</a>.';
342 if (empty($PAYPAL_API_PASSWORD)) {
343 print
'Paypal parameter PAYPAL_API_PASSWORD is not defined. Please <a href="'.DOL_URL_ROOT.
'/paypal/admin/paypal.php">complete the setup of module PayPal first</a>.';
346 if (empty($PAYPAL_API_SIGNATURE)) {
347 print
'Paypal parameter PAYPAL_API_SIGNATURE is not defined. Please <a href="'.DOL_URL_ROOT.
'/paypal/admin/paypal.php">complete the setup of module PayPal first</a>.';
351if ((empty($paymentmethod) || $paymentmethod ==
'stripe') &&
isModEnabled(
'stripe')) {
352 require_once DOL_DOCUMENT_ROOT.
'/stripe/config.php';
361$validpaymentmethod = getValidOnlinePaymentMethods($paymentmethod);
365if ($tmpsource ==
'membersubscription') {
366 $tmpsource =
'member';
371 if ($tmpsource && $REF) {
375 if ($tmpsource != $source) {
384 dol_syslog(
"Warning: PAYMENT_SECURITY_ACCEPT_ANY_TOKEN is on", LOG_WARNING);
385 dol_syslog(
"Warning: PAYMENT_SECURITY_ACCEPT_ANY_TOKEN is on", LOG_WARNING, 0,
'_payment');
390 print
'<div class="error">Bad value for key.</div>';
396if (!empty($paymentmethod) && empty($validpaymentmethod[$paymentmethod])) {
397 print
'Payment module for payment method '.$paymentmethod.
' is not active';
400if (empty($validpaymentmethod)) {
401 print
'No active payment module (Paypal, Stripe, Paybox, ...)';
407$paramcreditor =
'ONLINE_PAYMENT_CREDITOR';
408$paramcreditorlong =
'ONLINE_PAYMENT_CREDITOR_'.$suffix;
423dol_syslog(
"--- newpayment.php action=".$action.
" paymentmethod=".$paymentmethod.
' amount='.$amount.
' newamount='.
GETPOST(
"newamount",
'alpha'), LOG_DEBUG, 0,
'_payment');
425dol_syslog(
"fulltag=".
GETPOST(
"fulltag",
'alpha').
" ws=".$ws.
" urlok=".$urlok, LOG_DEBUG, 0,
'_payment');
428if ($action ==
'dopayment') {
429 if ($paymentmethod ==
'paypal') {
431 $PAYPAL_PAYMENT_TYPE =
'Sale';
434 $origfulltag =
GETPOST(
"fulltag",
'alpha');
435 $shipToName =
GETPOST(
"shipToName",
'alpha');
436 $shipToStreet =
GETPOST(
"shipToStreet",
'alpha');
437 $shipToCity =
GETPOST(
"shipToCity",
'alpha');
438 $shipToState =
GETPOST(
"shipToState",
'alpha');
439 $shipToCountryCode =
GETPOST(
"shipToCountryCode",
'alpha');
440 $shipToZip =
GETPOST(
"shipToZip",
'alpha');
441 $shipToStreet2 =
GETPOST(
"shipToStreet2",
'alpha');
442 $phoneNum =
GETPOST(
"phoneNum",
'alpha');
443 $email =
GETPOST(
"email",
'alpha');
444 $desc =
GETPOST(
"desc",
'alpha');
448 if ($shipToCountryCode ==
'ID' && !preg_match(
'/\-/', $shipToState)) {
449 $shipToState =
'ID-'.$shipToState;
452 if (empty($PAYPAL_API_PRICE) || !is_numeric($PAYPAL_API_PRICE)) {
453 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Amount"));
457 } elseif (!$origfulltag) {
458 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"PaymentCode"));
463 dol_syslog(
"newpayment.php call paypal api and do redirect", LOG_DEBUG);
464 dol_syslog(
"newpayment.php call paypal api and do redirect", LOG_DEBUG, 0,
'_payment');
467 $PAYPAL_API_DEVISE =
"USD";
468 if (!empty($currency)) {
469 $PAYPAL_API_DEVISE = $currency;
474 dol_syslog(
"Submit Paypal form", LOG_DEBUG, 0,
'_payment');
476 dol_syslog(
"PAYPAL_API_USER: $PAYPAL_API_USER", LOG_DEBUG, 0,
'_payment');
477 dol_syslog(
"PAYPAL_API_PASSWORD: ".preg_replace(
'/./',
'*', $PAYPAL_API_PASSWORD), LOG_DEBUG, 0,
'_payment');
478 dol_syslog(
"PAYPAL_API_SIGNATURE: $PAYPAL_API_SIGNATURE", LOG_DEBUG, 0,
'_payment');
479 dol_syslog(
"PAYPAL_API_SANDBOX: $PAYPAL_API_SANDBOX", LOG_DEBUG, 0,
'_payment');
480 dol_syslog(
"PAYPAL_API_OK: $PAYPAL_API_OK", LOG_DEBUG, 0,
'_payment');
481 dol_syslog(
"PAYPAL_API_KO: $PAYPAL_API_KO", LOG_DEBUG, 0,
'_payment');
482 dol_syslog(
"PAYPAL_API_PRICE: $PAYPAL_API_PRICE", LOG_DEBUG, 0,
'_payment');
483 dol_syslog(
"PAYPAL_API_DEVISE: $PAYPAL_API_DEVISE", LOG_DEBUG, 0,
'_payment');
485 dol_syslog(
"shipToName: $shipToName", LOG_DEBUG, 0,
'_payment');
486 dol_syslog(
"shipToStreet: $shipToStreet", LOG_DEBUG, 0,
'_payment');
487 dol_syslog(
"shipToCity: $shipToCity", LOG_DEBUG, 0,
'_payment');
488 dol_syslog(
"shipToState: $shipToState", LOG_DEBUG, 0,
'_payment');
489 dol_syslog(
"shipToCountryCode: $shipToCountryCode", LOG_DEBUG, 0,
'_payment');
490 dol_syslog(
"shipToZip: $shipToZip", LOG_DEBUG, 0,
'_payment');
491 dol_syslog(
"shipToStreet2: $shipToStreet2", LOG_DEBUG, 0,
'_payment');
492 dol_syslog(
"phoneNum: $phoneNum", LOG_DEBUG, 0,
'_payment');
493 dol_syslog(
"email: $email", LOG_DEBUG, 0,
'_payment');
494 dol_syslog(
"desc: $desc", LOG_DEBUG, 0,
'_payment');
496 dol_syslog(
"SCRIPT_URI: ".(empty($_SERVER[
"SCRIPT_URI"]) ?
'' : $_SERVER[
"SCRIPT_URI"]), LOG_DEBUG, 0,
'_payment');
499 $mesg =
print_paypal_redirect((
float) $PAYPAL_API_PRICE, $PAYPAL_API_DEVISE, $PAYPAL_PAYMENT_TYPE, $PAYPAL_API_OK, $PAYPAL_API_KO, $FULLTAG);
506 if ($paymentmethod ==
'stripe') {
507 if (
GETPOST(
'newamount',
'alpha')) {
510 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Amount")),
null,
'errors');
521 $amountstripe = (float) $amount;
525 $arrayzerounitcurrency = array(
'BIF',
'CLP',
'DJF',
'GNF',
'JPY',
'KMF',
'KRW',
'MGA',
'PYG',
'RWF',
'VND',
'VUV',
'XAF',
'XOF',
'XPF');
526 if (!in_array($currency, $arrayzerounitcurrency)) {
527 $amountstripe *= 100;
530 dol_syslog(
"newpayment.php execute action = ".$action.
" STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION=".
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION'), LOG_DEBUG, 0,
'_payment');
534 $stripeToken =
GETPOST(
"stripeToken",
'alpha');
535 $email =
GETPOST(
"email",
'alpha');
539 $vatnumber =
GETPOST(
'vatnumber',
'alpha');
540 $savesource = GETPOSTISSET(
'savesource') ?
GETPOSTINT(
'savesource') : 1;
542 dol_syslog(
"POST stripeToken = ".$stripeToken, LOG_DEBUG, 0,
'_payment');
543 dol_syslog(
"POST email = ".$email, LOG_DEBUG, 0,
'_payment');
544 dol_syslog(
"POST thirdparty_id = ".$thirdparty_id, LOG_DEBUG, 0,
'_payment');
545 dol_syslog(
"POST vatnumber = ".$vatnumber, LOG_DEBUG, 0,
'_payment');
552 if (!
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION')) {
555 'dol_version' => DOL_VERSION,
556 'dol_entity' =>
$conf->entity,
557 'dol_company' =>
$mysoc->name,
558 'dol_tax_num' => $vatnumber,
562 if (!empty($thirdparty_id)) {
563 $metadata[
"dol_thirdparty_id"] = $thirdparty_id;
566 if ($thirdparty_id > 0) {
567 dol_syslog(
"Search existing Stripe customer profile for thirdparty_id=".$thirdparty_id, LOG_DEBUG, 0,
'_payment');
569 $service =
'StripeTest';
572 $service =
'StripeLive';
577 $thirdparty->fetch($thirdparty_id);
580 include_once DOL_DOCUMENT_ROOT.
'/stripe/class/stripe.class.php';
582 $stripeacc = $stripe->getStripeAccount($service);
583 $customer = $stripe->customerStripe($thirdparty, $stripeacc, $servicestatus, 1);
584 if (empty($customer)) {
586 dol_syslog(
'Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.
' and servicestatus = '.$servicestatus.
': '.$stripe->error, LOG_ERR, 0,
'_payment');
587 setEventMessages(
'Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.
' and servicestatus = '.$servicestatus.
': '.$stripe->error,
null,
'errors');
594 $card = $customer->sources->create(array(
"source" => $stripeToken,
"metadata" => $metadata));
596 $card = $stripeToken;
601 dol_syslog(
'Failed to create card record', LOG_WARNING, 0,
'_payment');
605 if (!empty($FULLTAG)) {
606 $metadata[
"FULLTAG"] = $FULLTAG;
608 if (!empty($dol_id)) {
609 $metadata[
"dol_id"] = $dol_id;
611 if (!empty($dol_type)) {
612 $metadata[
"dol_type"] = $dol_type;
615 dol_syslog(
"Create charge on card ".$card->id, LOG_DEBUG, 0,
'_payment');
616 $charge = \Stripe\Charge::create(array(
617 'amount' =>
price2num($amountstripe,
'MU'),
618 'currency' => $currency,
620 'description' =>
'Stripe payment: '.$FULLTAG.
' ref='.$ref,
621 'metadata' => $metadata,
622 'customer' => $customer->id,
624 'statement_descriptor' =>
dol_trunc($FULLTAG, 22,
'right',
'UTF-8', 1),
625 'statement_descriptor_suffix' =>
dol_trunc($FULLTAG, 12,
'right',
'UTF-8', 1),
626 ), array(
"idempotency_key" =>
"$FULLTAG",
"stripe_account" =>
"$stripeacc"));
628 if (empty($charge)) {
630 dol_syslog(
'Failed to charge card', LOG_WARNING, 0,
'_payment');
637 $vatcleaned = $vatnumber ? $vatnumber :
null;
648 dol_syslog(
"Create anonymous customer card profile", LOG_DEBUG, 0,
'_payment');
650 $customer = \Stripe\Customer::create(array(
652 'description' => ($email ?
'Anonymous customer for '.$email :
'Anonymous customer'),
653 'metadata' => $metadata,
654 'source' => $stripeToken
672 if (!empty($FULLTAG)) {
673 $metadata[
"FULLTAG"] = $FULLTAG;
675 if (!empty($dol_id)) {
676 $metadata[
"dol_id"] = $dol_id;
678 if (!empty($dol_type)) {
679 $metadata[
"dol_type"] = $dol_type;
684 dol_syslog(
"Create charge", LOG_DEBUG, 0,
'_payment');
685 $charge = \Stripe\Charge::create(array(
686 'customer' => $customer->id,
687 'amount' =>
price2num($amountstripe,
'MU'),
688 'currency' => $currency,
690 'description' =>
'Stripe payment: '.$FULLTAG.
' ref='.$ref,
691 'metadata' => $metadata,
692 'statement_descriptor' =>
dol_trunc($FULLTAG, 22,
'right',
'UTF-8', 1),
693 'statement_descriptor_suffix' =>
dol_trunc($FULLTAG, 12,
'right',
'UTF-8', 1),
694 ), array(
"idempotency_key" => (
string) $FULLTAG,
"stripe_account" => (
string) $stripeacc));
696 if (empty($charge)) {
698 dol_syslog(
'Failed to charge card', LOG_WARNING, 0,
'_payment');
705 $body = $e->getJsonBody();
706 $err = $body[
'error'];
708 print(
'Status is:'.$e->getHttpStatus().
"\n");
709 print(
'Type is:'.$err[
'type'].
"\n");
710 print(
'Code is:'.$err[
'code'].
"\n");
712 print(
'Param is:'.$err[
'param'].
"\n");
713 print(
'Message is:'.$err[
'message'].
"\n");
716 $errormessage =
"ErrorCard ".$e->getMessage().
" err=".
formatLogObject($err);
717 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
723 $errormessage =
"ErrorRateLimit ".$e->getMessage();
724 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
730 $errormessage =
"ErrorInvalidRequest ".$e->getMessage();
731 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
738 $errormessage =
"ErrorAuthentication ".$e->getMessage();
739 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
745 $errormessage =
"ErrorApiConnection ".$e->getMessage();
746 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
753 $errormessage =
"ErrorBase ".$e->getMessage();
754 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
760 $errormessage =
"ErrorException ".$e->getMessage();
761 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
768 $_SESSION[
'paymentkosessioncode'] = $randomseckey;
770 $urlko .=
'&paymentkosessioncode='.urlencode($randomseckey);
773 $_SESSION[
'paymentoksessioncode'] = $randomseckey;
775 $urlok .=
'&paymentoksessioncode='.urlencode($randomseckey);
780 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION')) {
781 $service =
'StripeTest';
784 $service =
'StripeLive';
787 include_once DOL_DOCUMENT_ROOT.
'/stripe/class/stripe.class.php';
789 $stripeacc = $stripe->getStripeAccount($service);
793 $paymentintent_id =
GETPOST(
"paymentintent_id",
"alpha");
796 global $stripearrayofkeysbyenv;
797 \Stripe\Stripe::setApiKey($stripearrayofkeysbyenv[$servicestatus][
'secret_key']);
800 if (empty($stripeacc)) {
801 $paymentintent = \Stripe\PaymentIntent::retrieve($paymentintent_id);
803 $paymentintent = \Stripe\PaymentIntent::retrieve($paymentintent_id, array(
"stripe_account" => $stripeacc));
807 $errormessage =
"CantRetrievePaymentIntent ".$e->getMessage();
808 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
817 $paymentintentalreadyused = 0;
818 if (!$error && is_object($paymentintent) && $paymentintent->status ==
'succeeded') {
819 $sql =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"paiement";
820 $sql .=
" WHERE ext_payment_id = '".$db->escape($paymentintent_id).
"'";
821 $sql .=
" OR ext_payment_id LIKE '".$db->escape($paymentintent_id).
":%'";
822 $resql =
$db->query($sql);
824 if (
$db->num_rows($resql) > 0) {
825 $paymentintentalreadyused = 1;
831 if ($paymentintent->status !=
'succeeded' || $paymentintentalreadyused) {
833 if ($paymentintentalreadyused) {
834 $errormessage =
"PaymentIntent ".$paymentintent_id.
" was already used to record a payment, it cannot be reused for another object";
836 $errormessage =
"StatusOfRetrievedIntent is not succeeded: ".$paymentintent->status;
838 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
843 $_SESSION[
'paymentkosessioncode'] = $randomseckey;
845 $urlko .=
'&paymentkosessioncode='.urlencode($randomseckey);
853 $amount = $paymentintent->amount;
856 if (!empty($paymentintent->currency)) {
857 $currency = strtoupper($paymentintent->currency);
861 $arrayzerounitcurrency = array(
'BIF',
'CLP',
'DJF',
'GNF',
'JPY',
'KMF',
'KRW',
'MGA',
'PYG',
'RWF',
'VND',
'VUV',
'XAF',
'XOF',
'XPF');
862 if (!in_array($currency, $arrayzerounitcurrency)) {
867 dol_syslog(
"StatusOfRetrievedIntent is succeeded for amount = ".$amount.
" currency = ".$currency, LOG_DEBUG, 0,
'_payment');
870 $_SESSION[
'paymentoksessioncode'] = $randomseckey;
872 $urlok .=
'&paymentoksessioncode='.urlencode($randomseckey);
879 $_SESSION[
"onlinetoken"] = $stripeToken;
880 $_SESSION[
"FinalPaymentAmt"] = $amount;
881 $_SESSION[
"currencyCodeType"] = $currency;
882 $_SESSION[
"paymentType"] =
'';
883 $_SESSION[
'ipaddress'] = ($remoteip ? $remoteip :
'unknown');
884 $_SESSION[
'TRANSACTIONID'] = (($charge && is_object($charge)) ? $charge->id : (is_object($paymentintent) ? $paymentintent->id :
''));
885 $_SESSION[
'errormessage'] = $errormessage;
886 if (!
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION')) {
887 $_SESSION[
'payerID'] = is_object($customer) ? $customer->id :
'';
889 $_SESSION[
'payerID'] =
'';
892 dol_syslog(
"Action charge stripe STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION=".
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION').
" ip=".$remoteip, LOG_DEBUG, 0,
'_payment');
893 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');
894 dol_syslog(
"_SERVER[SERVER_NAME] = ".(empty($_SERVER[
"SERVER_NAME"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_NAME"])), LOG_DEBUG, 0,
'_payment');
895 dol_syslog(
"_SERVER[SERVER_ADDR] = ".(empty($_SERVER[
"SERVER_ADDR"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_ADDR"])), LOG_DEBUG, 0,
'_payment');
896 dol_syslog(
"session_id=".session_id(), LOG_DEBUG, 0,
'_payment');
897 dol_syslog(
"onlinetoken=".$_SESSION[
"onlinetoken"].
" paymentoksessioncode=".$_SESSION[
"paymentoksessioncode"].
" paymentkosessioncode=".($_SESSION[
"paymentkosessioncode"] ??
''), LOG_DEBUG, 0,
'_payment');
898 dol_syslog(
"FinalPaymentAmt=".$_SESSION[
"FinalPaymentAmt"].
" currencyCodeType=".$_SESSION[
"currencyCodeType"].
" payerID=".$_SESSION[
'payerID'].
" TRANSACTIONID=".$_SESSION[
'TRANSACTIONID'], LOG_DEBUG, 0,
'_payment');
899 dol_syslog(
"FULLTAG=".$FULLTAG, LOG_DEBUG, 0,
'_payment');
900 dol_syslog(
"error=".$error.
" errormessage=".$errormessage, LOG_DEBUG, 0,
'_payment');
901 dol_syslog(
"Now call the redirect to paymentok or paymentko, URL = ".($error ? $urlko : $urlok), LOG_DEBUG, 0,
'_payment');
904 header(
"Location: ".$urlko);
907 header(
"Location: ".$urlok);
914 'paymentmethod' => $paymentmethod,
915 'validpaymentmethod' => &$validpaymentmethod
917$reshook = $hookmanager->executeHooks(
'doPayment', $parameters, $object, $action);
920} elseif ($reshook > 0) {
921 print $hookmanager->resPrint;
934 $head =
'<link rel="stylesheet" type="text/css" href="' .
getDolGlobalString(
'ONLINE_PAYMENT_CSS_URL').
'?lang='.(!empty($getpostlang) ? $getpostlang : $langs->defaultlang).
'">'.
"\n";
937$conf->dol_hide_topmenu = 1;
938$conf->dol_hide_leftmenu = 1;
940$replacemainarea = (empty(
$conf->dol_hide_leftmenu) ?
'<div>' :
'').
'<div>';
941llxHeader($head, $langs->trans(
"PaymentForm"),
'',
'', 0, 0,
'',
'',
'',
'onlinepaymentbody', $replacemainarea);
943dol_syslog(
"newpayment.php show page source=".$source.
" paymentmethod=".$paymentmethod.
' amount='.$amount.
' newamount='.
GETPOST(
"newamount",
'alpha').
" ref=".$ref, LOG_DEBUG, 0,
'_payment');
944dol_syslog(
"_SERVER[HTTP_X_FORWARDED_HOST] = ".(empty($_SERVER[
"HTTP_X_FORWARDED_HOST"]) ?
'' :
dol_escape_htmltag($_SERVER[
"HTTP_X_FORWARDED_HOST"])), LOG_DEBUG, 0,
'_payment');
945dol_syslog(
"_SERVER[SERVER_NAME] = ".(empty($_SERVER[
"SERVER_NAME"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_NAME"])), LOG_DEBUG, 0,
'_payment');
946dol_syslog(
"_SERVER[SERVER_ADDR] = ".(empty($_SERVER[
"SERVER_ADDR"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_ADDR"])), LOG_DEBUG, 0,
'_payment');
947dol_syslog(
"session_id=".session_id(), LOG_DEBUG, 0,
'_payment');
950if ($source && in_array($ref, array(
'member_ref',
'contractline_ref',
'invoice_ref',
'order_ref',
'donation_ref',
''))) {
951 $langs->load(
"errors");
952 dol_print_error_email(
'BADREFINPAYMENTFORM', $langs->trans(
"ErrorBadLinkSourceSetButBadValueForRef", $source, $ref));
962 dol_htmloutput_mesg($langs->trans(
'YouAreCurrentlyInSandboxMode',
'Paypal'), array(),
'warning');
965 dol_htmloutput_mesg($langs->trans(
'YouAreCurrentlyInSandboxMode',
'Stripe'), array(),
'warning');
969print
'<span id="dolpaymentspan"></span>'.
"\n";
970print
'<div class="center">'.
"\n";
971print
'<form id="dolpaymentform" class="center" name="paymentform" action="'.$_SERVER[
"PHP_SELF"].
'" method="POST">'.
"\n";
972print
'<input type="hidden" name="token" value="'.newToken().
'">'.
"\n";
973print
'<input type="hidden" name="action" value="dopayment">'.
"\n";
974print
'<input type="hidden" name="tag" value="'.GETPOST(
"tag",
'alpha').
'">'.
"\n";
975print
'<input type="hidden" name="suffix" value="'.dol_escape_htmltag($suffix).
'">'.
"\n";
976print
'<input type="hidden" name="securekey" value="'.dol_escape_htmltag($SECUREKEY).
'">'.
"\n";
977print
'<input type="hidden" name="e" value="'.$entity.
'" />';
979print
'<input type="hidden" name="lang" value="'.$getpostlang.
'">';
980print
'<input type="hidden" name="ws" value="'.$ws.
'">';
981print
'<input type="hidden" name="reload" id="reload" value="0">';
987$logosmall =
$mysoc->logo_small;
989$paramlogo =
'ONLINE_PAYMENT_LOGO_'.$suffix;
999if (!empty($logosmall) && is_readable(
$conf->mycompany->dir_output.
'/logos/thumbs/'.$logosmall)) {
1000 $urllogo = DOL_URL_ROOT.
'/viewimage.php?modulepart=mycompany&entity='.
$conf->entity.
'&file='.urlencode(
'logos/thumbs/'.$logosmall);
1001 $urllogofull =
$dolibarr_main_url_root.
'/viewimage.php?modulepart=mycompany&entity='.
$conf->entity.
'&file='.urlencode(
'logos/thumbs/'.$logosmall);
1002} elseif (!empty($logo) && is_readable(
$conf->mycompany->dir_output.
'/logos/'.$logo)) {
1003 $urllogo = DOL_URL_ROOT.
'/viewimage.php?modulepart=mycompany&entity='.
$conf->entity.
'&file='.urlencode(
'logos/'.$logo);
1010 $filehtmlheader =
dol_sanitizePathName(DOL_DATA_ROOT . (
$conf->entity > 1 ?
'/' .
$conf->entity :
'') .
'/website/' . $ws .
'/htmlheaderpayment.html');
1012 print file_get_contents(
dol_osencode($filehtmlheader));
1016if ($urllogo && !$ws) {
1017 print
'<div class="backgreypublicpayment">';
1018 print
'<div class="logopublicpayment">';
1019 print
'<img id="dolpaymentlogo" src="'.$urllogo.
'"';
1023 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>';
1026} elseif ($creditor && !$ws) {
1027 print
'<div class="backgreypublicpayment">';
1028 print
'<div class="logopublicpayment">';
1034 print
'<div class="backimagepublicpayment">';
1035 print
'<img id="idMAIN_IMAGE_PUBLIC_PAYMENT" src="'.getDolGlobalString(
'MAIN_IMAGE_PUBLIC_PAYMENT').
'">';
1042print
'<!-- Form to send a payment -->'.
"\n";
1043print
'<!-- creditor = '.dol_escape_htmltag((
string) $creditor).
' -->'.
"\n";
1046 print
'<!-- PAYPAL_API_SANDBOX = '.getDolGlobalString(
'PAYPAL_API_SANDBOX').
' -->'.
"\n";
1047 print
'<!-- PAYPAL_API_INTEGRAL_OR_PAYPALONLY = '.getDolGlobalString(
'PAYPAL_API_INTEGRAL_OR_PAYPALONLY').
' -->'.
"\n";
1050 print
'<!-- STRIPE_LIVE = '.getDolGlobalString(
'STRIPE_LIVE').
' -->'.
"\n";
1051 print
'<!-- STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION = '.getDolGlobalString(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION').
' -->'.
"\n";
1053print
'<!-- urlok = '.$urlok.
' -->'.
"\n";
1054print
'<!-- urlko = '.$urlko.
' -->'.
"\n";
1058print
'<table id="dolpublictable" summary="Payment form" class="center">'.
"\n";
1063 $langs->load(
"members");
1065 if (preg_match(
'/^\((.*)\)$/',
getDolGlobalString(
'PAYMENT_NEWFORM_TEXT'), $reg)) {
1066 $text .= $langs->trans($reg[1]).
"<br>\n";
1070 $text =
'<tr><td class="center"><br>'.$text.
'<br></td></tr>'.
"\n";
1073 $text .=
'<tr><td class="textpublicpayment"><br><strong>'.$langs->trans(
"WelcomeOnPaymentPage").
'</strong></td></tr>'.
"\n";
1074 $text .=
'<tr><td class="textpublicpayment"><span class="opacitymedium">'.$langs->trans(
"ThisScreenAllowsYouToPay", (
string) $creditor).
'</span><br><br></td></tr>'.
"\n";
1079print
'<tr><td align="center">';
1080print
'<table class="centpercent left" id="tablepublicpayment">';
1081print
'<tr class="hideonsmartphone"><td colspan="2" class="opacitymedium">'.$langs->trans(
"ThisIsInformationOnPayment").
'...<br><br></td></tr>'.
"\n";
1093 dol_syslog(
"newpayment.php no source", LOG_DEBUG);
1096 $tag =
GETPOST(
"tag",
'alpha');
1097 if (
GETPOST(
'fulltag',
'alpha')) {
1098 $fulltag =
GETPOST(
'fulltag',
'alpha');
1100 $fulltag =
"TAG=".$tag;
1104 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1105 print
'</td><td class="CTableRow2">';
1106 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1107 print
'<b>'.$creditor.
'</b>';
1108 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1109 print
'</td></tr>'.
"\n";
1112 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
1113 if (empty($amount)) {
1114 print
' ('.$langs->trans(
"ToComplete").
')';
1116 print
'</td><td class="CTableRow2">';
1117 if (empty($amount) || !is_numeric($amount)) {
1118 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1119 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1121 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1123 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1124 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1125 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1127 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1128 print
'</td></tr>'.
"\n";
1131 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1132 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1133 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
1134 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1135 print
'</td></tr>'.
"\n";
1143if ($source ==
'order') {
1144 dol_syslog(
"newpayment.php source=order", LOG_DEBUG);
1147 $langs->load(
"orders");
1149 require_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
1152 $result = $order->fetch(0, $ref);
1154 $mesg = $order->error;
1157 $result = $order->fetch_thirdparty($order->socid);
1165 if ($action !=
'dopayment') {
1166 $amount = $order->total_ttc;
1167 if (
GETPOST(
"amount",
'alpha')) {
1168 $amount =
GETPOST(
"amount",
'alpha');
1174 if (
GETPOST(
'fulltag',
'alpha')) {
1175 $fulltag =
GETPOST(
'fulltag',
'alpha');
1177 $fulltag =
'ORD='.$order->id.
'.CUS='.$order->thirdparty->id;
1180 $fulltag .=
'.TAG='.$TAG;
1186 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1187 print
'</td><td class="CTableRow2"';
1188 print
' title="'.dolPrintHTMLForAttribute($langs->transnoentitiesnoconv(
"Country").
'='.
$mysoc->country_code.
' - '.$langs->transnoentitiesnoconv(
"VATIntra").
'='.
$mysoc->tva_intra).
'"';
1190 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1191 print
'<b>'.$creditor.
'</b>';
1192 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1193 print
'</td></tr>'.
"\n";
1196 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
1197 print
'</td><td class="CTableRow2"';
1198 print
' title="'.dolPrintHTMLForAttribute($langs->transnoentitiesnoconv(
"Country").
'='.$order->thirdparty->country_code.
' - '.$langs->transnoentitiesnoconv(
"VATIntra").
'='.$order->thirdparty->tva_intra).
'"';
1200 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1201 print
'<b>'.$order->thirdparty->name.
'</b>';
1202 print
'</td></tr>'.
"\n";
1205 $text =
'<b>'.$langs->trans(
"PaymentOrderRef", $order->ref).
'</b>';
1206 if (
GETPOST(
'desc',
'alpha')) {
1207 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1209 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1210 print
'</td><td class="CTableRow2">'.$text;
1211 print
'<input type="hidden" name="s" value="'.dol_escape_htmltag($source).
'">';
1212 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($order->ref).
'">';
1213 print
'<input type="hidden" name="dol_id" value="'.dol_escape_htmltag((
string) $order->id).
'">';
1214 $directdownloadlink = $order->getLastMainDocLink(
'commande');
1215 if ($directdownloadlink) {
1216 print
'<br><a href="'.$directdownloadlink.
'" rel="nofollow noopener">';
1217 print
img_mime($order->last_main_doc,
'');
1218 print $langs->trans(
"DownloadDocument").
'</a>';
1220 print
'</td></tr>'.
"\n";
1223 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
1224 if (empty($amount)) {
1225 print
' ('.$langs->trans(
"ToComplete").
')';
1227 print
'</td><td class="CTableRow2">';
1228 if (empty($amount) || !is_numeric($amount)) {
1229 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1230 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1232 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1234 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1235 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1236 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1238 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1239 print
'</td></tr>'.
"\n";
1242 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1243 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1244 print
'<input type="hidden" name="tag" value="'.dol_escape_htmltag($tag).
'">';
1245 print
'<input type="hidden" name="fulltag" value="'.dol_escape_htmltag($fulltag).
'">';
1246 print
'</td></tr>'.
"\n";
1249 $shipToName = $order->thirdparty->name;
1250 $shipToStreet = $order->thirdparty->address;
1251 $shipToCity = $order->thirdparty->town;
1252 $shipToState = $order->thirdparty->state_code;
1253 $shipToCountryCode = $order->thirdparty->country_code;
1254 $shipToZip = $order->thirdparty->zip;
1255 $shipToStreet2 =
'';
1256 $phoneNum = $order->thirdparty->phone;
1257 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
1258 print
'<input type="hidden" name="shipToName" value="'.dol_escape_htmltag($shipToName).
'">'.
"\n";
1259 print
'<input type="hidden" name="shipToStreet" value="'.dol_escape_htmltag($shipToStreet).
'">'.
"\n";
1260 print
'<input type="hidden" name="shipToCity" value="'.dol_escape_htmltag($shipToCity).
'">'.
"\n";
1261 print
'<input type="hidden" name="shipToState" value="'.dol_escape_htmltag($shipToState).
'">'.
"\n";
1262 print
'<input type="hidden" name="shipToCountryCode" value="'.dol_escape_htmltag($shipToCountryCode).
'">'.
"\n";
1263 print
'<input type="hidden" name="shipToZip" value="'.dol_escape_htmltag($shipToZip).
'">'.
"\n";
1264 print
'<input type="hidden" name="shipToStreet2" value="'.dol_escape_htmltag($shipToStreet2).
'">'.
"\n";
1265 print
'<input type="hidden" name="phoneNum" value="'.dol_escape_htmltag($phoneNum).
'">'.
"\n";
1267 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
1269 if (is_object($order->thirdparty)) {
1270 print
'<input type="hidden" name="thirdparty_id" value="'.$order->thirdparty->id.
'">'.
"\n";
1272 print
'<input type="hidden" name="email" value="'.$order->thirdparty->email.
'">'.
"\n";
1273 print
'<input type="hidden" name="vatnumber" value="'.dol_escape_htmltag($order->thirdparty->tva_intra).
'">'.
"\n";
1274 $labeldesc = $langs->trans(
"Order").
' '.$order->ref;
1275 if (
GETPOST(
'desc',
'alpha')) {
1276 $labeldesc =
GETPOST(
'desc',
'alpha');
1278 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
1283if ($source ==
'invoice') {
1284 dol_syslog(
"newpayment.php source=invoice", LOG_DEBUG);
1287 $langs->load(
"bills");
1288 $form->load_cache_types_paiements();
1290 require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
1293 $result = $invoice->fetch(0, $ref);
1295 $mesg = $invoice->error;
1298 $result = $invoice->fetch_thirdparty($invoice->socid);
1302 if ($action !=
'dopayment') {
1303 $amount =
price2num($invoice->total_ttc - ($invoice->getSommePaiement() + $invoice->getSumCreditNotesUsed() + $invoice->getSumDepositsUsed()));
1304 if (
GETPOST(
"amount",
'alpha')) {
1305 $amount =
GETPOST(
"amount",
'alpha');
1310 if (
GETPOST(
'fulltag',
'alpha')) {
1311 $fulltag =
GETPOST(
'fulltag',
'alpha');
1313 $fulltag =
'INV='.$invoice->id.
'.CUS='.$invoice->thirdparty->id;
1316 $fulltag .=
'.TAG='.$TAG;
1322 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1323 print
'</td><td class="CTableRow2"';
1324 print
' title="'.dolPrintHTMLForAttribute($langs->transnoentitiesnoconv(
"Country").
'='.
$mysoc->country_code.
' - '.$langs->transnoentitiesnoconv(
"VATIntra").
'='.
$mysoc->tva_intra).
'"';
1326 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1327 print
'<b>'.$creditor.
'</b>';
1328 print
'<input type="hidden" name="creditor" value="'.dol_escape_htmltag((
string) $creditor).
'">';
1329 print
'</td></tr>'.
"\n";
1332 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
1333 print
'</td><td class="CTableRow2"';
1334 print
' title="'.dolPrintHTMLForAttribute($langs->transnoentitiesnoconv(
"Country").
'='.$invoice->thirdparty->country_code.
' - '.$langs->transnoentitiesnoconv(
"VATIntra").
'='.$invoice->thirdparty->tva_intra).
'"';
1336 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1337 print
'<b>'.$invoice->thirdparty->name.
'</b>';
1338 print
'</td></tr>'.
"\n";
1341 $text =
'<b>'.$langs->trans(
"PaymentInvoiceRef", $invoice->ref).
'</b>';
1342 if (
GETPOST(
'desc',
'alpha')) {
1343 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1345 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1346 print
'</td><td class="CTableRow2">'.$text;
1347 print
'<input type="hidden" name="s" value="'.dol_escape_htmltag($source).
'">';
1348 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($invoice->ref).
'">';
1349 print
'<input type="hidden" name="dol_id" value="'.dol_escape_htmltag((
string) $invoice->id).
'">';
1350 $directdownloadlink = $invoice->getLastMainDocLink(
'facture');
1351 if ($directdownloadlink) {
1352 print
'<br><a href="'.$directdownloadlink.
'">';
1353 print
img_mime($invoice->last_main_doc,
'');
1354 print $langs->trans(
"DownloadDocument").
'</a>';
1356 print
'</td></tr>'.
"\n";
1359 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentAmount");
1360 if (empty($amount) && empty(
$object->paye)) {
1361 print
' ('.$langs->trans(
"ToComplete").
')';
1363 print
'</td><td class="CTableRow2">';
1364 if (
$object->type == $object::TYPE_CREDIT_NOTE) {
1365 print
'<b>'.$langs->trans(
"CreditNote").
'</b>';
1366 } elseif (empty(
$object->paye)) {
1367 if (empty($amount) || !is_numeric($amount)) {
1368 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1369 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1370 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1372 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1373 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1374 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1377 print
'<b class="amount">'.price(
$object->total_ttc, 1, $langs, 1, -1, -1, $currency).
'</b>';
1379 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1380 print
'</td></tr>'.
"\n";
1383 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1384 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1385 print
'<input type="hidden" name="tag" value="'.(empty($tag) ?
'' : $tag).
'">';
1386 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1387 print
'</td></tr>'.
"\n";
1390 if ($invoice->status == $invoice::STATUS_VALIDATED && $invoice->mode_reglement_id > 0 && $form->cache_types_paiements[$invoice->mode_reglement_id][
"code"] ==
"VIR") {
1391 print
'<tr class="CTableRow2 center"><td class="CTableRow2" colspan="2">';
1392 print
'<div class="warning maxwidth1000">';
1393 print $langs->trans(
"PayOfBankTransferInvoice");
1395 print
'</td></tr>'.
"\n";
1399 $shipToName = $invoice->thirdparty->name;
1400 $shipToStreet = $invoice->thirdparty->address;
1401 $shipToCity = $invoice->thirdparty->town;
1402 $shipToState = $invoice->thirdparty->state_code;
1403 $shipToCountryCode = $invoice->thirdparty->country_code;
1404 $shipToZip = $invoice->thirdparty->zip;
1405 $shipToStreet2 =
'';
1406 $phoneNum = $invoice->thirdparty->phone;
1407 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
1408 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
1409 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
1410 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
1411 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
1412 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
1413 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
1414 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
1415 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
1417 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
1419 if (is_object($invoice->thirdparty)) {
1420 print
'<input type="hidden" name="thirdparty_id" value="'.$invoice->thirdparty->id.
'">'.
"\n";
1422 print
'<input type="hidden" name="email" value="'.$invoice->thirdparty->email.
'">'.
"\n";
1423 print
'<input type="hidden" name="vatnumber" value="'.$invoice->thirdparty->tva_intra.
'">'.
"\n";
1424 $labeldesc = $langs->trans(
"Invoice").
' '.$invoice->ref;
1425 if (
GETPOST(
'desc',
'alpha')) {
1426 $labeldesc =
GETPOST(
'desc',
'alpha');
1428 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
1432if ($source ==
'contractline') {
1433 dol_syslog(
"newpayment.php source=contractline", LOG_DEBUG);
1436 $langs->load(
"contracts");
1438 require_once DOL_DOCUMENT_ROOT.
'/contrat/class/contrat.class.php';
1443 $result = $contractline->fetch(0, $ref);
1445 $mesg = $contractline->error;
1448 if ($contractline->fk_contrat > 0) {
1449 $result = $contract->fetch($contractline->fk_contrat);
1451 $result = $contract->fetch_thirdparty($contract->socid);
1453 $mesg = $contract->error;
1457 $mesg =
'ErrorRecordNotFound';
1463 if ($action !=
'dopayment') {
1464 $amount = $contractline->total_ttc;
1466 if ($contractline->fk_product &&
getDolGlobalString(
'PAYMENT_USE_NEW_PRICE_FOR_CONTRACTLINES')) {
1468 $result = $product->fetch($contractline->fk_product);
1472 $pu_ht = $product->multiprices[$contract->thirdparty->price_level];
1473 $pu_ttc = $product->multiprices_ttc[$contract->thirdparty->price_level];
1474 $price_base_type = $product->multiprices_base_type[$contract->thirdparty->price_level];
1476 $pu_ht = $product->price;
1477 $pu_ttc = $product->price_ttc;
1478 $price_base_type = $product->price_base_type;
1482 if (empty($amount)) {
1488 if (
GETPOST(
"amount",
'alpha')) {
1489 $amount =
GETPOST(
"amount",
'alpha');
1494 if (
GETPOST(
'fulltag',
'alpha')) {
1495 $fulltag =
GETPOST(
'fulltag',
'alpha');
1497 $fulltag =
'COL='.$contractline->id.
'.CON='.$contract->id.
'.CUS='.$contract->thirdparty->id.
'.DAT='.
dol_print_date(
dol_now(),
'%Y%m%d%H%M%S');
1500 $fulltag .=
'.TAG='.$TAG;
1511 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1512 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
1513 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1514 print
'</td></tr>'.
"\n";
1517 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
1518 print
'</td><td class="CTableRow2"><b>'.$contract->thirdparty->name.
'</b>';
1519 print
'</td></tr>'.
"\n";
1522 $text =
'<b>'.$langs->trans(
"PaymentRenewContractId", $contract->ref, $contractline->ref).
'</b>';
1523 if ($contractline->fk_product > 0) {
1524 $contractline->fetch_product();
1525 $text .=
'<br>'.$contractline->product->ref.($contractline->product->label ?
' - '.$contractline->product->label :
'');
1527 if ($contractline->description) {
1528 $text .=
'<br>'.dol_htmlentitiesbr($contractline->description);
1530 if ($contractline->date_end) {
1531 $text .=
'<br>'.$langs->trans(
"ExpiredSince").
': '.
dol_print_date($contractline->date_end);
1533 if (
GETPOST(
'desc',
'alpha')) {
1534 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1536 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1537 print
'</td><td class="CTableRow2">'.$text;
1538 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($source).
'">';
1539 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($contractline->ref).
'">';
1540 print
'<input type="hidden" name="dol_id" value="'.dol_escape_htmltag((
string) $contractline->id).
'">';
1541 $directdownloadlink = $contract->getLastMainDocLink(
'contract');
1542 if ($directdownloadlink) {
1543 print
'<br><a href="'.$directdownloadlink.
'">';
1544 print
img_mime($contract->last_main_doc,
'');
1545 print $langs->trans(
"DownloadDocument").
'</a>';
1547 print
'</td></tr>'.
"\n";
1550 $label = $langs->trans(
"Quantity");
1553 if ($contractline->fk_product) {
1554 if ($contractline->product->isService() && $contractline->product->duration_value > 0) {
1555 $label = $langs->trans(
"Duration");
1558 if ($contractline->product->duration_value > 1) {
1559 $dur = array(
"h" => $langs->trans(
"Hours"),
"d" => $langs->trans(
"DurationDays"),
"w" => $langs->trans(
"DurationWeeks"),
"m" => $langs->trans(
"DurationMonths"),
"y" => $langs->trans(
"DurationYears"));
1561 $dur = array(
"h" => $langs->trans(
"Hour"),
"d" => $langs->trans(
"DurationDay"),
"w" => $langs->trans(
"DurationWeek"),
"m" => $langs->trans(
"DurationMonth"),
"y" => $langs->trans(
"DurationYear"));
1563 $duration = $contractline->product->duration_value.
' '.$dur[$contractline->product->duration_unit];
1566 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$label.
'</td>';
1567 print
'<td class="CTableRow2"><b>'.($duration ? $duration : $qty).
'</b>';
1568 print
'<input type="hidden" name="newqty" value="'.dol_escape_htmltag((
string) $qty).
'">';
1569 print
'</b></td></tr>'.
"\n";
1572 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
1573 if (empty($amount)) {
1574 print
' ('.$langs->trans(
"ToComplete").
')';
1576 print
'</td><td class="CTableRow2">';
1577 if (empty($amount) || !is_numeric($amount)) {
1578 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1579 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1581 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1583 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1584 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1585 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1587 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1588 print
'</td></tr>'.
"\n";
1591 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1592 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1593 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
1594 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1595 print
'</td></tr>'.
"\n";
1598 $shipToName = $contract->thirdparty->name;
1599 $shipToStreet = $contract->thirdparty->address;
1600 $shipToCity = $contract->thirdparty->town;
1601 $shipToState = $contract->thirdparty->state_code;
1602 $shipToCountryCode = $contract->thirdparty->country_code;
1603 $shipToZip = $contract->thirdparty->zip;
1604 $shipToStreet2 =
'';
1605 $phoneNum = $contract->thirdparty->phone;
1606 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
1607 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
1608 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
1609 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
1610 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
1611 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
1612 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
1613 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
1614 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
1616 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
1618 if (is_object($contract->thirdparty)) {
1619 print
'<input type="hidden" name="thirdparty_id" value="'.$contract->thirdparty->id.
'">'.
"\n";
1621 print
'<input type="hidden" name="email" value="'.$contract->thirdparty->email.
'">'.
"\n";
1622 print
'<input type="hidden" name="vatnumber" value="'.$contract->thirdparty->tva_intra.
'">'.
"\n";
1623 $labeldesc = $langs->trans(
"Contract").
' '.$contract->ref;
1624 if (
GETPOST(
'desc',
'alpha')) {
1625 $labeldesc =
GETPOST(
'desc',
'alpha');
1627 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
1631if ($source ==
'member' || $source ==
'membersubscription') {
1632 dol_syslog(
"newpayment.php source=".$source, LOG_DEBUG);
1634 $newsource =
'member';
1638 $langs->load(
"members");
1640 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent.class.php';
1641 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent_type.class.php';
1642 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/subscription.class.php';
1647 $result = $member->fetch(0, $ref, 0,
'',
true,
true);
1649 $mesg = $member->error;
1652 $member->fetch_thirdparty();
1654 $adht->fetch($member->typeid);
1658 if ($action !=
'dopayment') {
1659 $amount = $member->last_subscription_amount;
1660 if (
GETPOST(
"amount",
'alpha')) {
1664 if (empty($amount)) {
1665 $amount = $adht->amount;
1668 $amount = max(0,
price2num($amount,
'MT'));
1671 if (
GETPOST(
'fulltag',
'alpha')) {
1672 $fulltag =
GETPOST(
'fulltag',
'alpha');
1677 $fulltag .=
'.TAG='.$TAG;
1683 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1684 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
1685 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1686 print
'</td></tr>'.
"\n";
1689 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Member");
1690 print
'</td><td class="CTableRow2">';
1692 if ($member->morphy ==
'mor' && !empty($member->company)) {
1693 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1694 print $member->company;
1696 print
img_picto(
'',
'member',
'class="pictofixedwidth"');
1697 print $member->getFullName($langs);
1700 print
'</td></tr>'.
"\n";
1703 $text =
'<b>'.$langs->trans(
"PaymentSubscription").
'</b>';
1704 if (
GETPOST(
'desc',
'alpha')) {
1705 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1707 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1708 print
'</td><td class="CTableRow2">'.$text;
1709 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($newsource).
'">';
1710 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($member->ref).
'">';
1711 print
'</td></tr>'.
"\n";
1714 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"DateEndSubscription");
1715 print
'</td><td class="CTableRow2">'.dol_print_date($member->datefin,
'day');
1716 print
'</td></tr>'.
"\n";
1719 if ($member->last_subscription_date || $member->last_subscription_amount) {
1722 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"LastSubscriptionDate");
1723 print
'</td><td class="CTableRow2">'.dol_print_date($member->last_subscription_date,
'day');
1724 print
'</td></tr>'.
"\n";
1728 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"LastSubscriptionAmount");
1729 print
'</td><td class="CTableRow2">'.price($member->last_subscription_amount);
1730 print
'</td></tr>'.
"\n";
1732 if (empty($amount) && !
GETPOST(
'newamount',
'alpha')) {
1733 $_GET[
'newamount'] = $member->last_subscription_amount;
1734 $_GET[
'amount'] = $member->last_subscription_amount;
1736 if (!empty($member->last_subscription_amount) && !GETPOSTISSET(
'newamount') && is_numeric($amount)) {
1737 $amount = max($member->last_subscription_amount, $amount);
1741 $amountbytype = $adht->amountByType(1);
1743 $typeid = $adht->id;
1744 $caneditamount = $adht->caneditamount;
1746 if ($member->type) {
1747 $oldtypeid = $member->typeid;
1748 $newtypeid = (int) (GETPOSTISSET(
"typeid") ?
GETPOSTINT(
"typeid") : $member->typeid);
1750 $typeid = $newtypeid;
1751 $adht->fetch($typeid);
1754 $caneditamount = $adht->caneditamount;
1758 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"LastMemberType");
1759 print
'</td><td class="CTableRow2">'.dol_escape_htmltag($member->type);
1760 print
"</td></tr>\n";
1763 $member->typeid = $newtypeid;
1770 $amount = (!empty($amountbytype[$member->typeid])) ? $amountbytype[$member->typeid] : $member->last_subscription_amount;
1772 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"NewSubscription");
1773 print
'</td><td class="CTableRow2">';
1774 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);
1775 print "</td></tr>\n
";
1776 } elseif ($action == 'dopayment') {
1777 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("NewMemberType
");
1778 print '</td><td class="CTableRow2
">'.dol_escape_htmltag($member->type);
1779 print '<input type="hidden
" name="membertypeid
" value="'.$member->typeid.'">';
1780 print "</td></tr>\n
";
1783 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("MemberType
");
1784 print '</td><td class="CTableRow2
">'.dol_escape_htmltag($member->type);
1785 print "</td></tr>\n
";
1790 // Add hook to complete the form
1791 $parameters = array('mode' => 'renewal');
1792 $reshook = $hookmanager->executeHooks('membershipNewSubscriptionPublicForm', $parameters, $object, $action);
1794 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
1798 // TODO Move this into previous hook
1799 if (getDolGlobalString('MEMBER_NEWFORM_DOLIBARRTURNOVER') && $action != 'dopayment') {
1801 if ($member->thirdparty instanceof Societe) {
1802 $country_id = $member->thirdparty->country_id;
1804 $checkednature = $member->morphy;
1805 print '<input type="hidden
" name="moralinput
" id="moralinput
" value="'.$checkednature.'">';
1807 // Is it a Preferred Partner
1809 include_once DOL_DOCUMENT_ROOT.'/partnership/class/partnership.class.php';
1810 $partnership = new Partnership($db);
1811 // @phan-suppress-next-line PhanPluginSuspiciousParamPosition
1812 $result = $partnership->fetch(0, '', 0, (int) $member->thirdparty->id);
1817 $s = $langs->trans("AreYouAPreferredPartner
", '<a href="https:
1818 $s = str_replace(
'{s1}',
'Preferred Partner', $s);
1819 print
'<tr id="trbudget" class="trcompany"><td><label for="pp" class="small">'.$s.
'</label></td><td>';
1820 print
'<input type="checkbox" name="pp" id="pp" value="1"'.((GETPOST(
'reload') ?
GETPOST(
'pp') : $pp) ?
' checked="checked"' :
'').
' class="reposition">';
1823 print
'<tr id="trbudget" class="trcompany"><td class=""><span class="small">'.$langs->trans(
"TurnoverOrBudget").
'</span></td><td>';
1826 if ($country_code ===
'FR' && $checkednature ===
'mor' && (
GETPOST(
'reload') ?
GETPOST(
'pp') : $pp)) {
1827 print
'<input type="text" name="budget" id="budget" class="flat turnover right width100" value="'.GETPOST(
'budget').
'"'.($action !=
'dopayment' ?
' required autofocus' :
'').
'>';
1829 $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+');
1830 print $form->selectarray(
'budget', $arraybudget,
GETPOSTINT(
'budget'), 1, 0, 0, ($checkednature ===
'mor' ?
'required' :
''), 0, 0, 0,
'');
1834 print
'<script type="text/javascript">
1835 jQuery(document).ready(function() {
1838 newamount = initturnover();
1839 jQuery("#amount").val(newamount);
1840 jQuery("#newamount").val(newamount);
1844 jQuery("#selectcountry_id").change(function() {
1845 console.log("We change country (code added for association, replace common code), so we reload page");
1846 jQuery("#budget").val(\'\');
1847 jQuery("#amount").val(\'\');
1848 jQuery("#newamount").val(\'\');
1849 jQuery("#amounthidden").val(\'\');
1851 jQuery("#pp").change(function() {
1852 console.log("We change the preferred partner status");
1853 selectcountry_id = jQuery("#selectcountry_id").val();
1854 morphy = jQuery("#moralinput").is(\':checked\') ? \'mor\' : \'phy\';
1855 jQuery("#budget").val(\'\');
1856 jQuery("#amount").val(\'\');
1857 jQuery("#amounthidden").val(\'\');
1858 jQuery("#newamount").val(\'\');
1859 jQuery("#reload").val(\'1\');
1860 document.paymentform.action.value="";
1861 jQuery("#dolpaymentform").submit();
1863 jQuery("#budget").change(function() {
1864 console.log("Turnover amount has been modified on change");
1865 newamount = initturnover();
1866 jQuery("#amount").val(newamount);
1867 jQuery("#amounthidden").val(newamount);
1868 jQuery("#newamount").val(newamount);
1870 jQuery("#budget").keyup(function() {
1871 console.log("Turnover amount has been modified on keyup");
1872 newamount = initturnover();
1873 jQuery("#amount").val(newamount);
1874 jQuery("#amounthidden").val(newamount);
1875 jQuery("#newamount").val(newamount);
1878 function initturnover() {
1881 //morphy = jQuery("#moralinput").is(\':checked\') ? \'mor\' : \'phy\';
1882 morphy = jQuery("#moralinput").val();
1883 selectcountry_id = '.((int) $country_id).
';
1884 pp = jQuery("#pp").is(\':checked\') ? true : false;
1885 console.log("Set fields according to nature and other properties");
1886 console.log("morphy="+morphy);
1887 console.log("selectcountry_id="+selectcountry_id);
1888 console.log("pp="+pp);
1890 if (morphy == \'phy\') {
1891 jQuery(".amount").val('.((float) $amount).
');
1892 jQuery("#trbirth").show();
1893 jQuery(".trcompany").hide();
1894 jQuery(".trbudget").hide();
1895 newamount = '.((float) $amount).
';
1897 jQuery(".amount").val(\'\');
1898 jQuery("#trbirth").hide();
1899 jQuery(".trcompany").show();
1900 jQuery(".trbudget").show();
1901 jQuery(".hideifautoturnover").hide();
1903 jQuery("#budget").val(\'\');
1906 if (selectcountry_id == 1) {
1907 if (jQuery("#budget").val() == \'\') {
1911 console.log("value selected in input text field is "+jQuery("#budget").val());
1912 newamount = Math.max(Math.round(price2numjs(jQuery("#budget").val()) * 0.005), 50);
1913 console.log("newamount = "+newamount);
1915 console.log("not a pp");
1916 if (jQuery("#budget").val() > 0) {
1917 console.log("value found in budget is "+jQuery("#budget").val());
1918 newamount = jQuery("#budget").val();
1920 jQuery("#budget").val(\'\');
1925 if (jQuery("#budget").val() > 0) {
1926 newamount = jQuery("#budget").val();
1928 jQuery("#budget").val(\'\');
1938 print
'</td></tr>'.
"\n";
1944 $amount = ($member->last_subscription_amount ? $member->last_subscription_amount : (empty($amountbytype[$typeid]) ? 0 : $amountbytype[$typeid]));
1947 if ($caneditamount && !
GETPOST(
'reload') && GETPOSTISSET(
'amount') &&
GETPOSTFLOAT(
'amount',
'MT') > 0) {
1951 if ($caneditamount && !
GETPOST(
'reload') && GETPOSTISSET(
'newamount') &&
GETPOSTFLOAT(
'newamount',
'MT') > 0) {
1955 $amount = max(0, (
float) $amount, (
float)
getDolGlobalInt(
"MEMBER_MIN_AMOUNT"));
1958 $caneditamount = $adht->caneditamount;
1960 $amountformuladescriptionbytype = $adht->amountformuladescriptionbytype(1);
1961 $amountformuladescription = $amountformuladescriptionbytype[$typeid];
1962 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
1965 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>';
1967 if ($amountformuladescription) {
1968 print
'</td><td class="CTableRow2">'.$amountformuladescription;
1969 print
'</td></tr>'.
"\n";
1970 print
'<tr class="CTableRow2"><td class="CTableRow2">';
1971 print
'</td><td class="CTableRow2">';
1973 print
'</td><td class="CTableRow2">';
1976 if ($caneditamount && ($action !=
'dopayment' ||
GETPOST(
'reload'))) {
1977 if (GETPOSTISSET(
'newamount')) {
1978 print
'<input type="text" class="width75 amount" name="newamount" id="newamount" value="'.price(
price2num(
GETPOST(
'newamount'),
'', 2), 1, $langs, 1, -1, -1).
'">';
1980 print
'<input type="text" class="width75 amount" name="newamount" id="newamount" value="'.price($amount, 1, $langs, 1, -1, -1).
'">';
1983 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1984 if ($minimumamount > $amount) {
1985 print
' <span class="opacitymedium small">'. $langs->trans(
"AmountIsLowerToMinimumNotice",
price($minimumamount, 1, $langs, 1, -1, -1, $currency)).
'</span>';
1987 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1989 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1990 print
'<input type="hidden" name="currency" value="'.$currency.
'">'.$langs->trans(
"Currency".
$conf->currency);
1991 print
'</td></tr>'.
"\n";
1994 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1995 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1996 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
1997 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1998 print
'</td></tr>'.
"\n";
2001 $shipToName = $member->getFullName($langs);
2002 $shipToStreet = $member->address;
2003 $shipToCity = $member->town;
2004 $shipToState = $member->state_code;
2005 $shipToCountryCode = $member->country_code;
2006 $shipToZip = $member->zip;
2007 $shipToStreet2 =
'';
2008 $phoneNum = $member->phone;
2009 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
2010 print
'<!-- Shipping address information -->';
2011 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
2012 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
2013 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
2014 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
2015 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
2016 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
2017 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
2018 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
2020 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
2022 if (is_object($member->thirdparty)) {
2023 print
'<input type="hidden" name="thirdparty_id" value="'.$member->thirdparty->id.
'">'.
"\n";
2025 print
'<input type="hidden" name="email" value="'.$member->email.
'">'.
"\n";
2026 $labeldesc = $langs->trans(
"PaymentSubscription");
2027 if (
GETPOST(
'desc',
'alpha')) {
2028 $labeldesc =
GETPOST(
'desc',
'alpha');
2030 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
2034if ($source ==
'donation') {
2035 dol_syslog(
"newpayment.php source=donation", LOG_DEBUG);
2038 $langs->load(
"don");
2040 require_once DOL_DOCUMENT_ROOT.
'/don/class/don.class.php';
2044 $result = $don->fetch((
int) $ref);
2046 $mesg = $don->error;
2049 $don->fetch_thirdparty();
2053 if ($action !=
'dopayment') {
2054 if (
GETPOST(
"amount",
'alpha')) {
2055 $amount =
GETPOST(
"amount",
'alpha');
2057 $amount = $don->getRemainToPay();
2062 if (
GETPOST(
'fulltag',
'alpha')) {
2063 $fulltag =
GETPOST(
'fulltag',
'alpha');
2068 $fulltag .=
'.TAG='.$TAG;
2074 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
2075 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
2076 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
2077 print
'</td></tr>'.
"\n";
2080 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
2081 print
'</td><td class="CTableRow2"><b>';
2082 if ($don->morphy ==
'mor' && !empty($don->societe)) {
2083 print $don->societe;
2085 print $don->getFullName($langs);
2088 print
'</td></tr>'.
"\n";
2091 $text =
'<b>'.$langs->trans(
"PaymentDonation").
'</b>';
2092 if (
GETPOST(
'desc',
'alpha')) {
2093 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
2095 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
2096 print
'</td><td class="CTableRow2">'.$text;
2097 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($source).
'">';
2098 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($don->ref).
'">';
2099 print
'</td></tr>'.
"\n";
2102 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
2103 if (empty($amount)) {
2105 print
' ('.$langs->trans(
"ToComplete");
2108 print
' - <a href="' .
getDolGlobalString(
'DONATION_EXT_URL_SUBSCRIPTION_INFO').
'" rel="external" target="_blank" rel="noopener noreferrer">'.$langs->trans(
"SeeHere").
'</a>';
2114 print
'</td><td class="CTableRow2">';
2116 if (empty($amount) || !is_numeric($amount)) {
2119 if (empty($valtoshow)) {
2131 if (empty($amount) || !is_numeric($amount)) {
2136 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
2137 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.$valtoshow.
'">';
2139 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
2141 $valtoshow = $amount;
2144 $amount = $valtoshow;
2146 print
'<b class="amount">'.price($valtoshow, 1, $langs, 1, -1, -1, $currency).
'</b>';
2147 print
'<input type="hidden" name="amount" value="'.$valtoshow.
'">';
2148 print
'<input type="hidden" name="newamount" value="'.$valtoshow.
'">';
2150 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
2151 print
'</td></tr>'.
"\n";
2154 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
2155 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
2156 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
2157 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
2158 print
'</td></tr>'.
"\n";
2161 $shipToName = $don->getFullName($langs);
2162 $shipToStreet = $don->address;
2163 $shipToCity = $don->town;
2164 $shipToState = $don->state_code;
2165 $shipToCountryCode = $don->country_code;
2166 $shipToZip = $don->zip;
2167 $shipToStreet2 =
'';
2168 $phoneNum = $don->phone;
2169 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
2170 print
'<!-- Shipping address information -->';
2171 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
2172 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
2173 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
2174 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
2175 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
2176 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
2177 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
2178 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
2180 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
2182 if (is_object($don->thirdparty)) {
2183 print
'<input type="hidden" name="thirdparty_id" value="'.$don->thirdparty->id.
'">'.
"\n";
2185 print
'<input type="hidden" name="email" value="'.$don->email.
'">'.
"\n";
2186 $labeldesc = $langs->trans(
"PaymentSubscription");
2187 if (
GETPOST(
'desc',
'alpha')) {
2188 $labeldesc =
GETPOST(
'desc',
'alpha');
2190 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
2193if ($source ==
'organizedeventregistration' && is_object($thirdparty)) {
2194 dol_syslog(
"newpayment.php source=organizedeventregistration", LOG_DEBUG);
2197 $langs->loadLangs(array(
"members",
"eventorganization"));
2199 if (
GETPOST(
'fulltag',
'alpha')) {
2200 $fulltag =
GETPOST(
'fulltag',
'alpha');
2205 $fulltag .=
'.TAG='.$TAG;
2211 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
2212 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
2213 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
2214 print
'</td></tr>'.
"\n";
2217 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Attendee");
2218 print
'</td><td class="CTableRow2"><b>';
2219 print $attendee->email;
2220 print($thirdparty->name ?
' ('.$thirdparty->name.
')' :
'');
2222 print
'</td></tr>'.
"\n";
2224 if (! is_object($attendee->project)) {
2225 $text =
'ErrorProjectNotFound';
2227 $text = $langs->trans(
"PaymentEvent").
' - '.$attendee->project->title;
2231 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
2232 print
'</td><td class="CTableRow2"><b>'.$text.
'</b>';
2233 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($source).
'">';
2234 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag((
string) $invoice->id).
'">';
2235 print
'</td></tr>'.
"\n";
2238 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
2239 print
'</td><td class="CTableRow2">';
2240 $valtoshow = $amount;
2241 print
'<b class="amount">'.price($valtoshow, 1, $langs, 1, -1, -1, $currency).
'</b>';
2242 print
'<input type="hidden" name="amount" value="'.$valtoshow.
'">';
2243 print
'<input type="hidden" name="newamount" value="'.$valtoshow.
'">';
2244 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
2245 print
'</td></tr>'.
"\n";
2248 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
2249 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
2250 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
2251 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
2252 print
'</td></tr>'.
"\n";
2255 $shipToName = $thirdparty->getFullName($langs);
2256 $shipToStreet = $thirdparty->address;
2257 $shipToCity = $thirdparty->town;
2258 $shipToState = $thirdparty->state_code;
2259 $shipToCountryCode = $thirdparty->country_code;
2260 $shipToZip = $thirdparty->zip;
2261 $shipToStreet2 =
'';
2262 $phoneNum = $thirdparty->phone;
2263 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
2264 print
'<!-- Shipping address information -->';
2265 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
2266 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
2267 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
2268 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
2269 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
2270 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
2271 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
2272 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
2274 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
2276 print
'<input type="hidden" name="thirdparty_id" value="'.$thirdparty->id.
'">'.
"\n";
2277 print
'<input type="hidden" name="email" value="'.$thirdparty->email.
'">'.
"\n";
2278 $labeldesc = $langs->trans(
"PaymentSubscription");
2279 if (
GETPOST(
'desc',
'alpha')) {
2280 $labeldesc =
GETPOST(
'desc',
'alpha');
2282 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
2285if ($source ==
'boothlocation') {
2286 dol_syslog(
"newpayment.php source=boothlocation", LOG_DEBUG);
2289 $langs->load(
"members");
2291 if (
GETPOST(
'fulltag',
'alpha')) {
2292 $fulltag =
GETPOST(
'fulltag',
'alpha');
2297 $fulltag .=
'.TAG='.$TAG;
2303 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
2304 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
2305 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
2306 print
'</td></tr>'.
"\n";
2309 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Attendee");
2310 print
'</td><td class="CTableRow2"><b>';
2311 print $thirdparty->name;
2313 print
'</td></tr>'.
"\n";
2316 $text =
'<b>'.$langs->trans(
"PaymentBoothLocation").
'</b>';
2317 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
2318 print
'</td><td class="CTableRow2">'.$text;
2319 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($source).
'">';
2320 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag((
string) $invoice->id).
'">';
2321 print
'</td></tr>'.
"\n";
2324 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
2325 print
'</td><td class="CTableRow2">';
2326 $valtoshow = $amount;
2327 print
'<b class="amount">'.price($valtoshow, 1, $langs, 1, -1, -1, $currency).
'</b>';
2328 print
'<input type="hidden" name="amount" value="'.$valtoshow.
'">';
2329 print
'<input type="hidden" name="newamount" value="'.$valtoshow.
'">';
2330 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
2331 print
'</td></tr>'.
"\n";
2334 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
2335 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
2336 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
2337 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
2338 print
'</td></tr>'.
"\n";
2341 $shipToName = $thirdparty->getFullName($langs);
2342 $shipToStreet = $thirdparty->address;
2343 $shipToCity = $thirdparty->town;
2344 $shipToState = $thirdparty->state_code;
2345 $shipToCountryCode = $thirdparty->country_code;
2346 $shipToZip = $thirdparty->zip;
2347 $shipToStreet2 =
'';
2348 $phoneNum = $thirdparty->phone;
2349 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
2350 print
'<!-- Shipping address information -->';
2351 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
2352 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
2353 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
2354 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
2355 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
2356 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
2357 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
2358 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
2360 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
2362 print
'<input type="hidden" name="thirdparty_id" value="'.$thirdparty->id.
'">'.
"\n";
2363 print
'<input type="hidden" name="email" value="'.$thirdparty->email.
'">'.
"\n";
2364 $labeldesc = $langs->trans(
"PaymentSubscription");
2365 if (
GETPOST(
'desc',
'alpha')) {
2366 $labeldesc =
GETPOST(
'desc',
'alpha');
2368 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
2371if (!$found && !$mesg) {
2372 $mesg = $langs->trans(
"ErrorBadParameters");
2376 print
'<tr><td align="center" colspan="2"><br><div class="warning">'.dol_escape_htmltag($mesg, 1, 1,
'br').
'</div></td></tr>'.
"\n";
2379print
'</table>'.
"\n";
2384if ($action !=
'dopayment') {
2385 dol_syslog(
"newpayment.php action is not dopayment so we show all payment modes", LOG_DEBUG);
2387 if ($found && !$error) {
2390 'source' => $source,
2394 $reshook = $hookmanager->executeHooks(
'doCheckStatus', $parameters, $object, $action);
2397 } elseif ($reshook > 0) {
2398 print $hookmanager->resPrint;
2401 if ($source ==
'order' &&
$object->billed) {
2402 print
'<br><br><div class="amountpaymentcomplete size12x wrapimp">'.$langs->trans(
"OrderBilled").
'</div>';
2403 } elseif ($source ==
'invoice' &&
$object->paye) {
2404 print
'<br><br><div class="amountpaymentcomplete size12x wrapimp">'.$langs->trans(
"InvoicePaid").
'</div>';
2413 print
'<br><br><div class="amountpaymentcomplete size12x wrapimp">'.$langs->trans(
"Abandoned").
'</div>';
2414 } elseif ($source ==
'donation' &&
$object->paid) {
2415 print
'<br><br><div class="amountpaymentcomplete size12x wrapimp">'.$langs->trans(
"DonationPaid").
'</div>';
2418 if (($source ==
'member' || $source ==
'membersubscription') &&
$object->datefin >
dol_now()) {
2419 $langs->load(
"members");
2420 print
'<br><div class="amountpaymentcomplete size12x wrapimp">';
2421 $s = $langs->trans(
"MembershipPaid",
'{s1}');
2422 print str_replace(
'{s1}',
'<span class="nobold">'.
dol_print_date(
$object->datefin,
'day').
'</span>', $s);
2424 print
'<div class="opacitymedium margintoponly">'.$langs->trans(
"PaymentWillBeRecordedForNextPeriod").
'</div>';
2432 'paymentmethod' => $paymentmethod
2434 $reshook = $hookmanager->executeHooks(
'doAddButton', $parameters, $object, $action);
2437 } elseif ($reshook >= 0) {
2438 print $hookmanager->resPrint;
2441 if ((empty($paymentmethod) || $paymentmethod ==
'stripe') &&
isModEnabled(
'stripe')) {
2450 $noidempotency_key = (GETPOSTISSET(
'noidempotency') ?
GETPOSTINT(
'noidempotency') : (
getDolGlobalInt(
'STRIPE_USE_IDEMPOTENCY_BY_DEFAULT') ? 0 : 1));
2452 print
'<div class="button buttonpayment" id="div_dopayment_stripe">';
2453 print
'<span class="fa fa-credit-card"></span> ';
2454 print
'<input class="" type="submit" id="dopayment_stripe" name="dopayment_stripe" value="'.$langs->trans(
"StripeDoPayment").
'">';
2455 print
'<input type="hidden" name="noidempotency" value="'.$noidempotency_key.
'">';
2457 print
'<span class="buttonpaymentsmall">'.$langs->trans(
"CreditOrDebitCard").
'</span>';
2460 $( document ).ready(function() {
2461 $("#div_dopayment_stripe").click(function(){
2462 $("#dopayment_stripe").click();
2464 $("#dopayment_stripe").click(function(e){
2465 $("#div_dopayment_stripe").css( \'cursor\', \'wait\' );
2466 e.stopPropagation();
2475 if ((empty($paymentmethod) || $paymentmethod ==
'paypal') &&
isModEnabled(
'paypal')) {
2477 $conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY =
'integral';
2486 print
'<div class="button buttonpayment" id="div_dopayment_paypal">';
2488 print
'<div style="line-height: 1em"> </div>';
2490 print
'<span class="fab fa-paypal"></span> <input class="" type="submit" id="dopayment_paypal" name="dopayment_paypal" value="'.$langs->trans(
"PaypalDoPayment").
'">';
2493 print
'<span class="buttonpaymentsmall">'.$langs->trans(
"CreditOrDebitCard").
'</span><span class="buttonpaymentsmall"> - </span>';
2494 print
'<span class="buttonpaymentsmall">'.$langs->trans(
"PayPalBalance").
'</span>';
2502 $( document ).ready(function() {
2503 $("#div_dopayment_paypal").click(function(){
2504 $("#dopayment_paypal").click();
2506 $("#dopayment_paypal").click(function(e){
2507 $("#div_dopayment_paypal").css( \'cursor\', \'wait\' );
2508 e.stopPropagation();
2524print
'</td></tr>'.
"\n";
2526print
'</table>'.
"\n";
2528print
'</form>'.
"\n";
2536if (preg_match(
'/^dopayment/', $action)) {
2537 dol_syslog(
"newpayment.php action is dopayment... because we clicked on a payment mode - amount = ".$amount);
2541 $_SESSION[
"currencyCodeType"] = $currency;
2542 $_SESSION[
"FinalPaymentAmt"] = $amount;
2543 $_SESSION[
'ipaddress'] = ($remoteip ? $remoteip :
'unknown');
2544 $_SESSION[
"paymentType"] =
'';
2549 if (
GETPOST(
'dopayment_stripe',
'alpha')) {
2557 background-color: white;
2560 border: 1px solid transparent;
2561 box-shadow: 0 1px 3px 0 #e6ebf1;
2562 -webkit-transition: box-shadow 150ms ease;
2563 transition: box-shadow 150ms ease;
2566 .StripeElement--focus {
2567 box-shadow: 0 1px 3px 0 #cfd7df;
2570 .StripeElement--invalid {
2571 border-color: #fa755a;
2574 .StripeElement--webkit-autofill {
2575 background-color: #fefde5 !important;
2581 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";
2582 print
'<form action="'.$_SERVER[
'REQUEST_URI'].
'" method="POST" id="payment-form">'.
"\n";
2584 print
'<input type="hidden" name="token" value="'.newToken().
'">'.
"\n";
2585 print
'<input type="hidden" name="dopayment_stripe" value="1">'.
"\n";
2586 print
'<input type="hidden" name="action" value="charge">'.
"\n";
2587 print
'<input type="hidden" name="tag" value="'.$TAG.
'">'.
"\n";
2588 print
'<input type="hidden" name="s" value="'.$source.
'">'.
"\n";
2589 print
'<input type="hidden" name="ref" value="'.$REF.
'">'.
"\n";
2590 print
'<input type="hidden" name="fulltag" value="'.$FULLTAG.
'">'.
"\n";
2591 print
'<input type="hidden" name="suffix" value="'.$suffix.
'">'.
"\n";
2592 print
'<input type="hidden" name="securekey" value="'.$SECUREKEY.
'">'.
"\n";
2593 print
'<input type="hidden" name="e" value="'.$entity.
'" />'.
"\n";
2594 print
'<input type="hidden" name="amount" value="'.$amount.
'">'.
"\n";
2595 print
'<input type="hidden" name="currency" value="'.$currency.
'">'.
"\n";
2597 print
'<input type="hidden" name="email" value="'.GETPOST(
'email',
'alpha').
'" />';
2598 print
'<input type="hidden" name="thirdparty_id" value="'.GETPOSTINT(
'thirdparty_id').
'" />';
2599 print
'<input type="hidden" name="lang" value="'.$getpostlang.
'">';
2605 if (array_key_exists(
'ORD', $tmptag) && (
int) $tmptag[
'ORD'] > 0) {
2606 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
2608 $result =
$object->fetch((
int) $tmptag[
'ORD']);
2610 if (
$object->total_ttc != $amount) {
2617 if (!$checkamount) {
2618 dol_syslog(
"Hack attempt detected", LOG_WARNING);
2619 setEventMessages(
'Bad value for amount. Reported as a hack attempt.',
null,
'errors');
2623 require_once DOL_DOCUMENT_ROOT.
'/stripe/class/stripe.class.php';
2625 $service =
'StripeLive';
2628 $service =
'StripeTest';
2633 $stripeacc = $stripe->getStripeAccount($service);
2634 if (is_object($object) && is_object(
$object->thirdparty)) {
2635 $stripecu = $stripe->customerStripe(
$object->thirdparty, $stripeacc, $servicestatus, 1);
2639 dol_syslog(
"newpayment.php Create a Paymentintent for amount=".$amount, LOG_DEBUG);
2643 $noidempotency_key = (GETPOSTISSET(
'noidempotency') ?
GETPOSTINT(
'noidempotency') : (
getDolGlobalInt(
'STRIPE_USE_IDEMPOTENCY_BY_DEFAULT') ? 0 : 1));
2645 $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);
2648 if ($stripe->error) {
2659 <table id="dolpaymenttable" summary="Payment form" class="center centpercent">
2660 <tbody><tr><td class="textpublicpayment">';
2663 print
'<div id="payment-request-button"><!-- A Stripe Element will be inserted here. --></div>';
2666 print
'<div class="form-row '.(getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2 ?
'center' :
'left').
'">';
2667 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 1) {
2668 print
'<label for="card-element">'.$langs->trans(
"CreditOrDebitCard").
'</label>';
2669 print
'<br><input id="cardholder-name" class="marginbottomonly" name="cardholder-name" value="" type="text" placeholder="'.$langs->trans(
"CardOwner").
'" autocomplete="off" spellcheck="false" autofocus required>';
2672 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 1) {
2673 print
'<div id="card-element">
2674 <!-- a Stripe Element will be inserted here. -->
2677 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2) {
2678 print
'<div id="payment-element">
2679 <!-- a Stripe Element will be inserted here. -->
2683 print
'<!-- Used to display form errors -->
2684 <div id="card-errors" role="alert"></div>
2688 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>';
2689 print
'<img id="hourglasstopay" class="hidden" src="'.DOL_URL_ROOT.
'/theme/'.
$conf->theme.
'/img/working.gif">';
2691 print
'</td></tr></tbody>';
2696 if (empty($paymentintent)) {
2697 print
'<center>'.$langs->trans(
"Error").
' - Failed to get PaymentIntent</center>';
2699 print
'<input type="hidden" name="paymentintent_id" value="'.$paymentintent->id.
'">';
2704 print
'</form>'.
"\n";
2708 if (empty($stripearrayofkeys[
'publishable_key'])) {
2709 $langs->load(
"errors");
2710 print
info_admin($langs->trans(
"ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv(
"Stripe")), 0, 0,
'error marginleftonly marginrightonly');
2712 print
'<!-- JS Code for Stripe components -->';
2713 print
'<script src="https://js.stripe.com/v3/"></script>'.
"\n";
2714 print
'<!-- urllogofull = '.$urllogofull.
' -->'.
"\n";
2717 print
'<script type="text/javascript">'.
"\n";
2720 $amountstripe = $amount;
2724 $arrayzerounitcurrency = array(
'BIF',
'CLP',
'DJF',
'GNF',
'JPY',
'KMF',
'KRW',
'MGA',
'PYG',
'RWF',
'VND',
'VUV',
'XAF',
'XOF',
'XPF');
2725 if (!in_array($currency, $arrayzerounitcurrency)) {
2726 $amountstripe *= 100;
2730 $metadata = array(
'dol_version' => DOL_VERSION,
'dol_entity' =>
$conf->entity,
'ipaddress' => $ipaddress);
2731 if (is_object($object)) {
2732 $metadata[
'dol_type'] =
$object->element;
2733 $metadata[
'dol_id'] =
$object->id;
2739 $arrayforpaymentintent = array(
2740 'description' =>
'Stripe payment: '.$FULLTAG.($ref ?
' ref='.$ref :
''),
2741 "metadata" => $metadata
2744 $arrayforpaymentintent[
"statement_descriptor"] =
dol_trunc($TAG, 22,
'right',
'UTF-8', 1);
2747 $arrayforcheckout = array(
2748 'payment_method_types' => array(
'card'),
2749 'line_items' => array(array(
2750 'price_data' => array(
2751 'currency' => $currency,
2752 'unit_amount' => $amountstripe,
2753 'product_data' => array(
2754 'name' => $langs->transnoentitiesnoconv(
"Payment").
' '.$TAG,
2755 'description' =>
'Stripe payment: '.$FULLTAG.($ref ?
' ref='.$ref :
''),
2761 'mode' =>
'payment',
2762 'client_reference_id' => $FULLTAG,
2763 'success_url' => $urlok,
2764 'cancel_url' => $urlko,
2765 'payment_intent_data' => $arrayforpaymentintent
2768 $arrayforcheckout[
'customer'] = $stripecu;
2770 $arrayforcheckout[
'customer_email'] =
GETPOST(
'email',
'alpha');
2773 dol_syslog(
"We create a stripe session with \Stripe\Checkout\Session::create for amountstripe=".$amountstripe);
2775 $sessionstripe = \Stripe\Checkout\Session::create($arrayforcheckout);
2777 dol_syslog(
"sessionstripe=".$sessionstripe->id);
2783 $_SESSION[
"currencyCodeType"] = $currency;
2784 $_SESSION[
"paymentType"] =
'';
2785 $_SESSION[
"FinalPaymentAmt"] = $amount;
2786 $_SESSION[
'ipaddress'] = ($remoteip ? $remoteip :
'unknown');
2787 $_SESSION[
'payerID'] = is_object($stripecu) ? $stripecu->id :
'';
2788 $_SESSION[
'TRANSACTIONID'] = $sessionstripe->id;
2790 print $e->getMessage();
2796 if (empty($stripeacc)) {
2798 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php?>');
2802 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php?>', { stripeAccount:
'<?php echo $stripeacc; ?>' });
2807 var elements = stripe.elements();
2815 fontFamily:
'"Helvetica Neue", Helvetica, sans-serif',
2816 fontSmoothing:
'antialiased',
2824 iconColor:
'#fa755a'
2828 var cardElement = elements.create(
'card', {style: style});
2831 stripe.redirectToCheckout({
2835 sessionId:
'<?php print $sessionstripe->id; ?>'
2836 }).then(
function (result) {
2850 if (empty($stripeacc)) {
2852 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php?>');
2856 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php?>', { stripeAccount:
'<?php echo $stripeacc; ?>' });
2861 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2) {
2863 var cardButton = document.getElementById(
'buttontopay');
2864 var clientSecret = cardButton.dataset.secret;
2865 var options = { clientSecret: clientSecret };
2868 var elements = stripe.elements(options);
2873 var elements = stripe.elements();
2883 fontFamily:
'"Helvetica Neue", Helvetica, sans-serif',
2884 fontSmoothing:
'antialiased',
2892 iconColor:
'#fa755a'
2897 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2) {
2899 var paymentElement = elements.create(
"payment");
2902 paymentElement.mount(
"#payment-element");
2905 var cardButton = document.getElementById(
'buttontopay');
2907 cardButton.addEventListener(
'click',
function(event) {
2908 console.log(
"We click on buttontopay");
2909 event.preventDefault();
2912 jQuery(
'#hourglasstopay').show();
2913 jQuery(
'#buttontopay').hide();
2915 stripe.confirmPayment({
2916 elements,confirmParams: {
2917 return_url:
'<?php echo $urlok; ?>',
2918 payment_method_data: {
2921 <?php
if (
GETPOST(
'email',
'alpha') || (is_object($object) && is_object(
$object->thirdparty) && !empty(
$object->thirdparty->email))) {
2922 ?>, email:
'<?php echo dol_escape_js(GETPOST('email
', 'alpha
') ? GETPOST('email
', 'alpha
') : $object->thirdparty->email); ?>'<?php
2924 <?php
if (is_object($object) && is_object(
$object->thirdparty) && !empty(
$object->thirdparty->phone)) {
2925 ?>, phone:
'<?php echo dol_escape_js($object->thirdparty->phone); ?>'<?php
2927 <?php
if (is_object($object) && is_object(
$object->thirdparty)) {
2929 city:
'<?php echo dol_escape_js($object->thirdparty->town); ?>',
2930 <?php if ($object->thirdparty->country_code) {
2931 ?>country:
'<?php echo dol_escape_js($object->thirdparty->country_code); ?>',<?php
2933 line1:
'<?php echo dol_escape_js(preg_replace('/\s\s+/
', ' ', $object->thirdparty->address)); ?>',
2934 postal_code:
'<?php echo dol_escape_js($object->thirdparty->zip); ?>'
2940 save_payment_method:<?php
if ($stripecu) {
2947 ).then(
function(result) {
2948 console.log(result);
2950 console.log(
"Error on result of handleCardPayment");
2951 jQuery(
'#buttontopay').show();
2952 jQuery(
'#hourglasstopay').hide();
2954 var errorElement = document.getElementById(
'card-errors');
2955 console.log(result);
2956 errorElement.textContent = result.error.message;
2959 console.log(
"No error on result of handleCardPayment, so we submit the form");
2961 jQuery(
'#buttontopay').hide();
2962 jQuery(
'#hourglasstopay').show();
2964 jQuery(
'#payment-form').submit();
2972 var cardElement = elements.create(
'card', {style: style});
2975 cardElement.mount(
'#card-element');
2978 cardElement.addEventListener(
'change',
function(event) {
2979 var displayError = document.getElementById(
'card-errors');
2981 console.log(
"Show event error (like 'Incorrect card number', ...)");
2982 displayError.textContent =
event.error.message;
2984 console.log(
"Reset error message");
2985 displayError.textContent =
'';
2990 var cardholderName = document.getElementById(
'cardholder-name');
2991 var cardButton = document.getElementById(
'buttontopay');
2992 var clientSecret = cardButton.dataset.secret;
2994 cardButton.addEventListener(
'click',
function(event) {
2995 console.log(
"We click on buttontopay");
2996 event.preventDefault();
2998 if (cardholderName.value ==
'')
3000 console.log(
"Field Card holder is empty");
3001 var displayError = document.getElementById(
'card-errors');
3002 displayError.textContent =
'<?php print dol_escape_js($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("CardOwner"))); ?>';
3007 jQuery(
'#hourglasstopay').show();
3008 jQuery(
'#buttontopay').hide();
3010 stripe.handleCardPayment(
3011 clientSecret, cardElement, {
3012 payment_method_data: {
3014 name: cardholderName.value
3015 <?php
if (
GETPOST(
'email',
'alpha') || (is_object($object) && is_object(
$object->thirdparty) && !empty(
$object->thirdparty->email))) {
3016 ?>, email:
'<?php echo dol_escape_js(GETPOST('email
', 'alpha
') ? GETPOST('email
', 'alpha
') : $object->thirdparty->email); ?>'<?php
3018 <?php
if (is_object($object) && is_object(
$object->thirdparty) && !empty(
$object->thirdparty->phone)) {
3019 ?>, phone:
'<?php echo dol_escape_js($object->thirdparty->phone); ?>'<?php
3021 <?php
if (is_object($object) && is_object(
$object->thirdparty)) {
3023 city:
'<?php echo dol_escape_js($object->thirdparty->town); ?>',
3024 <?php if ($object->thirdparty->country_code) {
3025 ?>country:
'<?php echo dol_escape_js($object->thirdparty->country_code); ?>',<?php
3027 line1:
'<?php echo dol_escape_js(preg_replace('/\s\s+/
', ' ', $object->thirdparty->address)); ?>',
3028 postal_code:
'<?php echo dol_escape_js($object->thirdparty->zip); ?>'
3034 save_payment_method:<?php
if ($stripecu) {
3040 ).then(
function(result) {
3041 console.log(result);
3043 console.log(
"Error on result of handleCardPayment");
3044 jQuery(
'#buttontopay').show();
3045 jQuery(
'#hourglasstopay').hide();
3047 var errorElement = document.getElementById(
'card-errors');
3048 errorElement.textContent = result.error.message;
3051 console.log(
"No error on result of handleCardPayment, so we submit the form");
3053 jQuery(
'#buttontopay').hide();
3054 jQuery(
'#hourglasstopay').show();
3056 jQuery(
'#payment-form').submit();
3074 'paymentmethod' => $paymentmethod,
3075 'amount' => $amount,
3076 'currency' => $currency,
3077 'tag' =>
GETPOST(
"tag",
'alpha'),
3078 'dopayment' =>
GETPOST(
'dopayment',
'alpha')
3081 $reshook = $hookmanager->executeHooks(
'doPayment', $parameters, $object, $action);
3084 } elseif ($reshook > 0) {
3085 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.
dolExplodeIntoArray($string, $delimiter=';', $kv='=')
Split a string with 2 keys into key array.
dol_osencode($str)
Return a string encoded into OS filesystem encoding.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dol_sanitizePathName($str, $newstr='_', $unaccent=0, $allowdash=0)
Clean a string to use it as a path name.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_string_unaccent($str)
Clean a string from all accent characters to be used as ref, login or by dol_sanitizeFileName.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0, $nodefault=0)
Return value of a param into GET or POST supervariable.
GETPOSTFLOAT($paramname, $rounding='', $option=2)
Return the value of a $_GET or $_POST supervariable, converted into float.
getDolCurrency()
Return the main currency ('EUR', 'USD', ...)
GETPOSTINT($paramname, $method=0, $nodefault=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
if(!function_exists( 'utf8_encode')) if(!function_exists('utf8_decode')) if(!function_exists( 'str_starts_with')) if(!function_exists('str_ends_with')) if(!function_exists( 'str_contains')) formatLogObject($data)
Return a string serialized to be output on log with dol_syslog() An option allow to output log in one...
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false, $decorate=0)
Output date in a string format according to outputlangs (or langs if not defined).
getUserRemoteIP($trusted=0)
Return the real IP of remote user.
dol_trunc($string, $size=40, $trunc='right', $stringencoding='UTF-8', $nodot=0, $display=0)
Truncate a string to a particular length adding '...' if string larger than length.
isValidEmail($address, $acceptsupervisorkey=0, $acceptuserkey=0)
Return true if email syntax is ok.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
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)
img_mime($file, $titlealt='', $morecss='')
Show MIME img of a file.
dol_print_error_email($prefixcode, $errormessage='', $errormessages=array(), $morecss='error', $email='')
Show a public email and error code to contact if technical error.
dol_htmloutput_mesg($mesgstring='', $mesgarray=array(), $style='ok', $keepembedded=0)
Print formatted messages to output (Used to show messages on html output).
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='', $textonpictotooltip='', $cssfordropdown='info_admin')
Show information in HTML for admin users or standard users.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
if(!defined( 'CSRFCHECK_WITH_TOKEN'))
print $langs trans("Show") . '< td style="' . $timeColor . '" align="center"> s</td > badge status0 badge status4 badge status3 Error badge status8< td align="center">< span class="badge ' . $badge . '"></span ></td >< td align="center">< a href="#" class="button button-small" onclick="openLogModal(this)" data-req="' . dol_escape_htmltag($reqSafe) . '" data-res="' . dol_escape_htmltag($resSafe) . '" data-err="' . dol_escape_htmltag($errSafe) . '">< span class="fa fa-search-plus"></span ></a ></td ></tr >< tr >< td colspan="' . $colspan . '" class="opacitymedium"></td ></tr ></table ></div ></form > logModal none logModal none s a JSON string
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,...