diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php
index b158263c3a0..d6803b4ae17 100644
--- a/htdocs/adherents/class/adherent.class.php
+++ b/htdocs/adherents/class/adherent.class.php
@@ -1331,7 +1331,7 @@ class Adherent extends CommonObject
* Do complementary actions after subscription recording.
*
* @param int $subscriptionid Id of created subscription
- * @param string $option Which action ('bankdirect', 'invoiceonly', ...)
+ * @param string $option Which action ('bankdirect', 'bankviainvoice', 'invoiceonly', ...)
* @param int $accountid Id bank account
* @param int $datesubscription Date of subscription
* @param int $paymentdate Date of payment
@@ -1341,7 +1341,7 @@ class Adherent extends CommonObject
* @param string $num_chq Numero cheque (if Id bank account provided)
* @param string $emetteur_nom Name of cheque writer
* @param string $emetteur_banque Name of bank of cheque
- * @param string $autocreatethirdparty Auto create new thirdparty if member not linked to a thirdparty.
+ * @param string $autocreatethirdparty Auto create new thirdparty if member not linked to a thirdparty and we request an option that generate invoice.
* @return int <0 if KO, >0 if OK
*/
function subscriptionComplementaryActions($subscriptionid, $option, $accountid, $datesubscription, $paymentdate, $operation, $label, $amount, $num_chq, $emetteur_nom='', $emetteur_banque='', $autocreatethirdparty=0)
@@ -1352,6 +1352,8 @@ class Adherent extends CommonObject
$this->invoice = null; // This will contains invoice if an invoice is created
+ dol_syslog("subscriptionComplementaryActions subscriptionid=".$subscriptionid." option=".$option." accountid=".$accountid." datesubscription=".$datesubscription." paymentdate=".$paymentdate." label=".$label." amount=".$amount." num_chq=".$num_chq." autocreatethirdparty=".$autocreatethirdparty);
+
// Insert into bank account directlty (if option choosed for) + link to llx_subscription if option is 'bankdirect'
if ($option == 'bankdirect' && $accountid)
{
@@ -1407,7 +1409,7 @@ class Adherent extends CommonObject
if (! $error)
{
- if (! ($this->fk_soc > 0))
+ if (! ($this->fk_soc > 0)) // If not yet linked to a company
{
if ($autocreatethirdparty)
{
@@ -1894,6 +1896,8 @@ class Adherent extends CommonObject
$label.= '
' . $langs->trans('Ref') . ': ' . $this->ref;
if (! empty($this->firstname) || ! empty($this->lastname))
$label.= '
' . $langs->trans('Name') . ': ' . $this->getFullName($langs);
+ if (! empty($this->societe))
+ $label.= '
' . $langs->trans('Company') . ': ' . $this->societe;
$label.='';
$url = DOL_URL_ROOT.'/adherents/card.php?rowid='.$this->id;
diff --git a/htdocs/adherents/list.php b/htdocs/adherents/list.php
index cae878829b7..b048d6ed551 100644
--- a/htdocs/adherents/list.php
+++ b/htdocs/adherents/list.php
@@ -593,7 +593,6 @@ while ($i < min($num, $limit))
$memberstatic->ref=$obj->rowid;
$memberstatic->lastname=$obj->lastname;
$memberstatic->firstname=$obj->firstname;
- $memberstatic->societe=$obj->company;
$memberstatic->statut=$obj->statut;
$memberstatic->datefin= $datefin;
$memberstatic->socid = $obj->fk_soc;
@@ -605,6 +604,7 @@ while ($i < min($num, $limit))
} else {
$companyname=$obj->company;
}
+ $memberstatic->societe = $companyname;
print '
';
diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php
index 8e9fa3bec4e..466faba295e 100644
--- a/htdocs/core/class/html.form.class.php
+++ b/htdocs/core/class/html.form.class.php
@@ -6462,7 +6462,7 @@ class Form
else if ($object->element == 'member')
{
$fullname=$object->getFullName($langs);
- if ($object->morphy == 'mor') {
+ if ($object->morphy == 'mor' && $object->societe) {
$ret.= dol_htmlentities($object->societe) . ((! empty($fullname) && $object->societe != $fullname)?' ('.dol_htmlentities($fullname).')':'');
} else {
$ret.= dol_htmlentities($fullname) . ((! empty($object->societe) && $object->societe != $fullname)?' ('.dol_htmlentities($object->societe).')':'');
diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php
index 1a7b336b4bc..4c244f9f403 100644
--- a/htdocs/public/payment/newpayment.php
+++ b/htdocs/public/payment/newpayment.php
@@ -397,7 +397,7 @@ if ($action == 'charge' && ! empty($conf->stripe->enabled))
$stripeToken = GETPOST("stripeToken",'alpha');
$email = GETPOST("email",'alpha');
- $thirdparty_id=GETPOST('thirdparty_id', 'int');
+ $thirdparty_id=GETPOST('thirdparty_id', 'int'); // Note that for payment following online registration for members, this is empty because thirdparty is created once payment is confirmed by paymentok.php
$vatnumber = GETPOST('vatnumber','alpha');
dol_syslog("stripeToken = ".$stripeToken, LOG_DEBUG, 0, '_stripe');
@@ -419,7 +419,7 @@ if ($action == 'charge' && ! empty($conf->stripe->enabled))
if ($thirdparty_id > 0)
{
- dol_syslog("Search existing customer profile for thirdparty_id=".$thirdparty_id, LOG_DEBUG, 0, '_stripe');
+ dol_syslog("Search existing Stripe customer profile for thirdparty_id=".$thirdparty_id, LOG_DEBUG, 0, '_stripe');
$service = 'StripeTest';
$servicestatus = 0;
diff --git a/htdocs/public/payment/paymentok.php b/htdocs/public/payment/paymentok.php
index 7eb9aa95b75..4eb22707bef 100644
--- a/htdocs/public/payment/paymentok.php
+++ b/htdocs/public/payment/paymentok.php
@@ -281,6 +281,11 @@ if ($ispaymentok)
if (in_array('MEM', array_keys($tmptag)))
{
+ // Validate member
+ // Create subscription
+ // Create complementary actions (this include creation of thirdparty)
+ // Send confirmation email
+
$defaultdelay=1;
$defaultdelayunit='y';
@@ -384,7 +389,9 @@ if ($ispaymentok)
if (! $error)
{
- $result = $object->subscriptionComplementaryActions($crowid, $option, $accountid, $datesubscription, $paymentdate, $operation, $label, $amount, $num_chq, $emetteur_nom, $emetteur_banque, 1);
+ $autocreatethirdparty = 1;
+
+ $result = $object->subscriptionComplementaryActions($crowid, $option, $accountid, $datesubscription, $paymentdate, $operation, $label, $amount, $num_chq, $emetteur_nom, $emetteur_banque, $autocreatethirdparty);
if ($result < 0)
{
$error++;
@@ -403,6 +410,49 @@ if ($ispaymentok)
}
}
+ if (! $error)
+ {
+ if ($paymentmethod == 'stripe' && $autocreatethirdparty && $option == 'bankviainvoice')
+ {
+ $thirdparty_id = $object->fk_soc;
+
+ dol_syslog("Search existing Stripe customer profile for thirdparty_id=".$thirdparty_id, LOG_DEBUG, 0, '_stripe');
+
+ $service = 'StripeTest';
+ $servicestatus = 0;
+ if (! empty($conf->global->STRIPE_LIVE) && ! GETPOST('forcesandbox','alpha'))
+ {
+ $service = 'StripeLive';
+ $servicestatus = 1;
+ }
+ $stripeacc = null; // No Oauth/connect use for public pages
+
+ $thirdparty = new Societe($db);
+ $thirdparty->fetch($thirdparty_id);
+
+ include_once DOL_DOCUMENT_ROOT.'/stripe/class/stripe.class.php';
+ $stripe = new Stripe($db);
+ $customer = $stripe->customerStripe($thirdparty, $stripeacc, $servicestatus, 0);
+
+ if (! $customer && $TRANSACTIONID) // Not linked to a stripe customer, we make the link
+ {
+ $ch = \Stripe\Charge::retrieve($TRANSACTIONID); // contains the charge id
+ $stripecu = $ch->customer; // value 'cus_....'
+
+ $sql = "INSERT INTO " . MAIN_DB_PREFIX . "societe_account (fk_soc, login, key_account, site, status, entity, date_creation, fk_user_creat)";
+ $sql .= " VALUES (".$object->fk_soc.", '', '".$db->escape($stripecu)."', 'stripe', " . $servicestatus . ", " . $conf->entity . ", '".$db->idate(dol_now())."', 0)";
+ $resql = $db->query($sql);
+ if (! $resql)
+ {
+ $error++;
+ $errmsg='Failed to save customer stripe id in database ; '.$db->lasterror();
+ $postactionmessages[] = $errmsg;
+ $ispostactionok = -1;
+ }
+ }
+ }
+ }
+
if (! $error)
{
$db->commit();