diff --git a/ChangeLog b/ChangeLog
index 95585a1153d..96174a6d5c8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,7 @@ English Dolibarr ChangeLog
***** ChangeLog for 3.0 compared to 2.9 *****
For users:
+- New: Can generate business card for on particular member.
- New: Task #10553 : Can attach files on members card.
- New: Can filter on payment type and bank account in payment lists.
- New: When sending supplier orders by mail, a text is predefined.
diff --git a/htdocs/adherents/cartes/carte.php b/htdocs/adherents/cartes/carte.php
index 9688522ed50..eed63e4c40e 100755
--- a/htdocs/adherents/cartes/carte.php
+++ b/htdocs/adherents/cartes/carte.php
@@ -29,6 +29,7 @@ require_once(DOL_DOCUMENT_ROOT."/lib/files.lib.php");
require_once(DOL_DOCUMENT_ROOT."/adherents/class/adherent.class.php");
require_once(DOL_DOCUMENT_ROOT."/includes/modules/member/cards/modules_cards.php");
+$langs->load("members");
// Choix de l'annee d'impression ou annee courante.
$now = dol_now();
@@ -36,95 +37,133 @@ $year=dol_print_date($now,'%Y');
$month=dol_print_date($now,'%m');
$day=dol_print_date($now,'%d');
$foruserid=GETPOST('foruserid');
+$foruserlogin=GETPOST('foruserlogin');
-$arrayofmembers=array();
-// requete en prenant que les adherents a jour de cotisation
-$sql = "SELECT d.rowid, d.prenom, d.nom, d.login, d.societe, d.datefin,";
-$sql.= " d.adresse, d.cp, d.ville, d.naiss, d.email, d.photo,";
-$sql.= " t.libelle as type,";
-$sql.= " p.libelle as pays";
-$sql.= " FROM ".MAIN_DB_PREFIX."adherent_type as t, ".MAIN_DB_PREFIX."adherent as d";
-$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_pays as p ON d.pays = p.rowid";
-$sql.= " WHERE d.fk_adherent_type = t.rowid AND d.statut = 1";
-if ($foruserid) $sql.=" AND d.rowid=".$foruserid;
-$sql.= " ORDER BY d.rowid ASC";
+/*
+ * View
+ */
-$result = $db->query($sql);
-if ($result)
+if (empty($foruserid) && empty($foruserlogin))
{
- $num = $db->num_rows($result);
- $i = 0;
- while ($i < $num)
- {
- $objp = $db->fetch_object($result);
+ llxHeader('',$langs->trans("MembersCards"));
- if ($objp->pays == '-') $objp->pays='';
+ print_fiche_titre($langs->trans("LinkToGeneratedPages"));
+ print '
';
- // List of values to scan for a replacement
- $substitutionarray = array (
- '%PRENOM%'=>$objp->prenom,
- '%NOM%'=>$objp->nom,
- '%LOGIN%'=>$objp->login,
- '%SERVEUR%'=>"http://".$_SERVER["SERVER_NAME"]."/",
- '%SOCIETE%'=>$objp->societe,
- '%ADRESSE%'=>$objp->adresse,
- '%CP%'=>$objp->cp,
- '%VILLE%'=>$objp->ville,
- '%PAYS%'=>$objp->pays,
- '%EMAIL%'=>$objp->email,
- '%NAISS%'=>$objp->naiss,
- '%TYPE%'=>$objp->type,
- '%ID%'=>$objp->rowid,
- '%ANNEE%'=>$year, // For backward compatibility
- '%YEAR%'=>$year,
- '%MONTH%'=>$month,
- '%DAY%'=>$day
- );
+ print $langs->trans("LinkToGeneratedPagesDesc").'
';
+ print '
';
- $textleft=make_substitutions($conf->global->ADHERENT_CARD_TEXT, $substitutionarray, $langs);
- $textheader=make_substitutions($conf->global->ADHERENT_CARD_HEADER_TEXT, $substitutionarray, $langs);
- $textfooter=make_substitutions($conf->global->ADHERENT_CARD_FOOTER_TEXT, $substitutionarray, $langs);
- $textright=make_substitutions($conf->global->ADHERENT_CARD_TEXT_RIGHT, $substitutionarray, $langs);
+ print $langs->trans("PDFForAllMembersCards",$conf->global->ADHERENT_CARD_TYPE).' ';
+ print '
';
+ print '
';
- if ($foruserid)
- {
- for($j=0;$j<100;$j++)
- {
- $arrayofmembers[]=array('textleft'=>$textleft,
- 'textheader'=>$textheader,
- 'textfooter'=>$textfooter,
- 'textright'=>$textright,
- 'id'=>$objp->rowid,
- 'photo'=>$objp->photo);
- }
- }
- else
- {
- $arrayofmembers[]=array('textleft'=>$textleft,
- 'textheader'=>$textheader,
- 'textfooter'=>$textfooter,
- 'textright'=>$textright,
- 'id'=>$objp->rowid,
- 'photo'=>$objp->photo);
- }
+ print $langs->trans("PDFForOneMemberCards",$conf->global->ADHERENT_CARD_TYPE).' ';
+ print '';
+ print '
';
- $i++;
- }
- // Build and output PDF
- $result=members_card_pdf_create($db, $arrayofmembers, '', $outputlangs);
- if ($result <= 0)
- {
- dol_print_error($db,$result);
- exit;
- }
+ llxFooter('$Date$ - $Revision$');
}
else
{
- dol_print_error($db);
- llxFooter('$Date$ - $Revision$');
+ $arrayofmembers=array();
+
+ // requete en prenant que les adherents a jour de cotisation
+ $sql = "SELECT d.rowid, d.prenom, d.nom, d.login, d.societe, d.datefin,";
+ $sql.= " d.adresse, d.cp, d.ville, d.naiss, d.email, d.photo,";
+ $sql.= " t.libelle as type,";
+ $sql.= " p.libelle as pays";
+ $sql.= " FROM ".MAIN_DB_PREFIX."adherent_type as t, ".MAIN_DB_PREFIX."adherent as d";
+ $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_pays as p ON d.pays = p.rowid";
+ $sql.= " WHERE d.fk_adherent_type = t.rowid AND d.statut = 1";
+ if (is_numeric($foruserid)) $sql.=" AND d.rowid=".$foruserid;
+ if ($foruserlogin) $sql.=" AND d.login='".$db->escape($foruserlogin)."'";
+ $sql.= " ORDER BY d.rowid ASC";
+
+ $result = $db->query($sql);
+ if ($result)
+ {
+ $num = $db->num_rows($result);
+ $i = 0;
+ while ($i < $num)
+ {
+ $objp = $db->fetch_object($result);
+
+ if ($objp->pays == '-') $objp->pays='';
+
+ // List of values to scan for a replacement
+ $substitutionarray = array (
+ '%PRENOM%'=>$objp->prenom,
+ '%NOM%'=>$objp->nom,
+ '%LOGIN%'=>$objp->login,
+ '%SERVEUR%'=>"http://".$_SERVER["SERVER_NAME"]."/",
+ '%SOCIETE%'=>$objp->societe,
+ '%ADRESSE%'=>$objp->adresse,
+ '%CP%'=>$objp->cp,
+ '%VILLE%'=>$objp->ville,
+ '%PAYS%'=>$objp->pays,
+ '%EMAIL%'=>$objp->email,
+ '%NAISS%'=>$objp->naiss,
+ '%TYPE%'=>$objp->type,
+ '%ID%'=>$objp->rowid,
+ '%ANNEE%'=>$year, // For backward compatibility
+ '%YEAR%'=>$year,
+ '%MONTH%'=>$month,
+ '%DAY%'=>$day
+ );
+
+ $textleft=make_substitutions($conf->global->ADHERENT_CARD_TEXT, $substitutionarray, $langs);
+ $textheader=make_substitutions($conf->global->ADHERENT_CARD_HEADER_TEXT, $substitutionarray, $langs);
+ $textfooter=make_substitutions($conf->global->ADHERENT_CARD_FOOTER_TEXT, $substitutionarray, $langs);
+ $textright=make_substitutions($conf->global->ADHERENT_CARD_TEXT_RIGHT, $substitutionarray, $langs);
+
+ if (is_numeric($foruserid) || $foruserlogin)
+ {
+ for($j=0;$j<100;$j++)
+ {
+ $arrayofmembers[]=array('textleft'=>$textleft,
+ 'textheader'=>$textheader,
+ 'textfooter'=>$textfooter,
+ 'textright'=>$textright,
+ 'id'=>$objp->rowid,
+ 'photo'=>$objp->photo);
+ }
+ }
+ else
+ {
+ $arrayofmembers[]=array('textleft'=>$textleft,
+ 'textheader'=>$textheader,
+ 'textfooter'=>$textfooter,
+ 'textright'=>$textright,
+ 'id'=>$objp->rowid,
+ 'photo'=>$objp->photo);
+ }
+
+ $i++;
+ }
+
+ // Build and output PDF
+ $result=members_card_pdf_create($db, $arrayofmembers, '', $outputlangs);
+ if ($result <= 0)
+ {
+ dol_print_error($db,$result);
+ exit;
+ }
+ }
+ else
+ {
+ dol_print_error($db);
+
+ llxFooter('$Date$ - $Revision$');
+ }
}
?>
diff --git a/htdocs/langs/en_US/members.lang b/htdocs/langs/en_US/members.lang
index aa415b3f8f3..3f65625dcb1 100644
--- a/htdocs/langs/en_US/members.lang
+++ b/htdocs/langs/en_US/members.lang
@@ -22,7 +22,7 @@ ThisIsContentOfYourCard=This is details of your card
CardContent=Content of your member card
SetLinkToUser=Link to a Dolibarr user
SetLinkToThirdParty=Link to a Dolibarr third party
-MembersCards=Members print cards
+MembersCards=Members business cards
MembersList=List of members
MembersListToValid=List of draft members (to be validated)
MembersListValid=List of valid members
@@ -154,3 +154,9 @@ MoreActions=Complementary action on recording
MoreActionBankDirect=Create a direct transaction record on account
MoreActionBankViaInvoice=Create an invoice and payment on account
MoreActionInvoiceOnly=Create an invoice with no payment
+LinkToGeneratedPages=Generate visit cards
+LinkToGeneratedPagesDesc=This screen allows you to generate PDF files with business cards for all your members or a particular member.
+PDFForAllMembersCards=Generate PDF of business cards for all members (Format for PDF actually setup : %s)
+PDFForOneMemberCards=Generate PDF of business cards for a particular member (Format for PDF actually setup: %s)
+BuildCards=Build PDF file
+
diff --git a/htdocs/langs/fr_FR/members.lang b/htdocs/langs/fr_FR/members.lang
index 92f1faead8a..bb5245f2661 100644
--- a/htdocs/langs/fr_FR/members.lang
+++ b/htdocs/langs/fr_FR/members.lang
@@ -154,3 +154,8 @@ MoreActions=Action complémentaire à l'enregistrement
MoreActionBankDirect=Création transaction sur compte directement
MoreActionBankViaInvoice=Création facture avec paiement sur compte
MoreActionInvoiceOnly=Création facture sans paiement
+LinkToGeneratedPages=Génération de cartes de visites
+LinkToGeneratedPagesDesc=Cet écran vous permet de générer des planches de cartes de visites pour chaque adhérents ou pour un adhérent en particulier.
+PDFForAllMembersCards=Génération PDF de cartes pour tous les adhérents (Format de planche actuellement configuré: %s)
+PDFForOneMemberCards=Génération PDF de cartes pour un adhérent particulier (Format de planche actuellement configuré: %s)
+BuildCards=Générer cartes de visites
diff --git a/htdocs/langs/nb_NO/members.lang b/htdocs/langs/nb_NO/members.lang
index 3f316135e72..addd48da29f 100644
--- a/htdocs/langs/nb_NO/members.lang
+++ b/htdocs/langs/nb_NO/members.lang
@@ -9,150 +9,25 @@ Members=Medlemmer
MemberAccount=Medlemskonto
ShowMember=Bis medlemskort
UserNotLinkedToMember=Brukeren er ikke knyttet til noe medlem
-MembersTickets=Members Tickets
-Attributs=Attributes
-Person=Person
-ErrorMemberTypeNotDefined=Member type not defined
-ListOfPublicMembers=List of public members
-ListOfValidatedPublicMembers=List of validated public members
-ErrorThisMemberIsNotPublic=This member is not public
-MembersCards=Members print cards
-MembersList=List of members
-MembersListToValid=List of draft members (to be validated)
-MembersListValid=List of valid members
-MembersListUpToDate=List of valid members with up to date subscription
-MembersListNotUpToDate=List of valid members with subscription out of date
-MembersListResiliated=List of resiliated members
-MembersListQualified=List of qualified members
-MenuMembersToValidate=Draft members
-MenuMembersValidated=Validated members
-MenuMembersUpToDate=Up to date members
-MenuMembersNotUpToDate=Out of date members
-MenuMembersResiliated=Resiliated members
-DateAbonment=Subscription date
-DateSubscription=Subscription date
-DateNextSubscription=Next subscription
-DateEndSubscription=Subscription end date
-EndSubscription=End subscription
-NewMember=New member
-NewType=New member type
-MemberType=Member type
-MemberTypeId=Member type id
-MemberTypeLabel=Member type label
-MembersTypes=Members types
-MembersAttributes=Members attributes
-SearchAMember=Search a member
-MemberStatusDraft=Draft (needs to be validated)
-MemberStatusDraftShort=To validate
-MemberStatusActive=Validated (waiting subscription)
-MemberStatusActiveShort=Validated
-MemberStatusActiveLate=subscription expired
-MemberStatusActiveLateShort=Expired
-MemberStatusPaid=Subscription up to date
-MemberStatusPaidShort=Up to date
-MemberStatusResiliated=Resiliated member
-MemberStatusResiliatedShort=Resiliated
-MembersStatusToValid=Draft members
-MembersStatusToValidShort=Draft members
-MembersStatusValidated=Validated members
-MembersStatusPaid=Subscription up to date
-MembersStatusPaidShort=Up to date
-MembersStatusNotPaid=Subscription out of date
-MembersStatusNotPaidShort=Out of date
-MembersStatusResiliated=Resiliated members
-MembersStatusResiliatedShort=Resiliated members
-NewCotisation=New contribution
-EditMember=Edit member
-SubscriptionEndDate=Subscription's end date
-NewAttribute=New attribut
-AttributeCode=Attribute code
-OptionalFieldsSetup=Optional fields setup
-MembersTypeSetup=Members type setup
-NewSubscription=New subscription
-Subscription=Subscription
-Subscriptions=Subscriptions
-SubscriptionLate=Late
-SubscriptionNotReceived=Subscription never received
-SubscriptionLateShort=Late
-SubscriptionNotReceivedShort=Never received
-ListOfSubscriptions=List of subscriptions
-SendCardByMail=Send card
-AddMember=Add member
-MemberType=Member type
-NoTypeDefinedGoToSetup=No member types defined. Go to setup - Members types
-NewMemberType=New member type
-WelcomeEMail=Welcome e-mail
-SubscriptionRequired=Subscription required
-EditType=Edit member type
-DeleteType=Delete
-VoteAllowed=Vote allowed
-Physical=Physical
-Moral=Moral
-MorPhy=Moral/Physical
-Reenable=Reenable
-ResiliateMember=Resiliate a member
-ConfirmResiliateMember=Are you sure you want to resiliate this member ?
-DeleteMember=Delete a member
-ConfirmDeleteMember=Are you sure you want to delete this member (Deleting a member will delete all his subscriptions) ?
-DeleteSubscription=Delete a subscription
-ConfirmDeleteSubscription=Are you sure you want to delete this subscription ?
-Filehtpasswd=htpasswd file
-ValidateMember=Validate a member
-ConfirmValidateMember=Are you sure you want to validate this member ?
-FollowingLinksArePublic=The following links are open pages not protected by any Dolibarr permission. They are not formated pages, provided as example to show how to list members database.
-PublicMemberList=Public member list
-BlankSubscriptionForm=Subscription form
-MemberPublicLinks=Public links/pages
-ExportDataset_member_1=Members and subscriptions
-LastMembers=Last %s members
-LastMembersModified=Last %s modified members
-AttributeName=Attribute name
-FieldEdition=% field edition
-AlphaNumOnlyCharsAndNoSpace=only alphanumericals characters without space
-String=String
-Text=Text
-Int=Int
-Date=Date
-DateAndTime=Date and time
-PublicMemberCard=Member public card
-MemberNotOrNoMoreExpectedToSubscribe=Member not or no more expected to subscribe
-AddSubscription=Add subscription
-ShowSubscription=Show subscription
-MemberModifiedInDolibarr=Member modified in Dolibarr
-SendAnEMailToMember=Send information email to member
-DescADHERENT_MAIL_VALID_SUBJECT=EMail subject for member validation
-DescADHERENT_MAIL_VALID=EMail for member validation
-DescADHERENT_MAIL_COTIS_SUBJECT=EMail subject for subscription
-DescADHERENT_MAIL_COTIS=EMail for subscription
-DescADHERENT_MAIL_RESIL_SUBJECT=EMail subject for member resiliation
-DescADHERENT_MAIL_RESIL=EMail for member resiliation
-DescADHERENT_MAIL_FROM=Sender EMail for automatic emails
-DescADHERENT_ETIQUETTE_TYPE=Labels format
-DescADHERENT_CARD_HEADER_TEXT=Text printed on top of member cards
-DescADHERENT_CARD_TEXT=Text printed on member cards
-DescADHERENT_CARD_FOOTER_TEXT=Text printed on bottom of member cards
-ShowTypeCard=Show type '%s'
-HTPasswordExport=htpassword file generation
-
-
-// START - Lines generated via autotranslator.php tool (2010-07-17 11:45:17).
-// Reference language: en_US
-FundationMembers=Stiftelsen medlemmer
-ErrorMemberIsAlreadyLinkedToThisThirdParty=Et annet medlem (navn: %s, innlogging: %s) er allerede koblet til en tredje part %s. Fjern denne linken først fordi en tredjepart ikke kan knyttes til bare ett medlem (og vice versa).
-ErrorUserPermissionAllowsToLinksToItselfOnly=Av sikkerhetsgrunner må du få tilgang til å redigere alle brukere skal kunne knytte et medlem til en bruker som ikke er ditt.
-ThisIsContentOfYourCard=Dette er detaljer på kortet
-CardContent=Innholdet av medlem-kortet
-SetLinkToUser=Link til en Dolibarr bruker
-SetLinkToThirdParty=Link til en Dolibarr tredjepart
-SubscriptionId=Abonnement id
-MemberId=Medlem id
-PaymentSubscription=Nye bidrag betaling
-DescADHERENT_AUTOREGISTER_MAIL_SUBJECT=E-post emne for medlem autosubscription
-DescADHERENT_AUTOREGISTER_MAIL=E-post for medlem autosubscription
-DescADHERENT_CARD_TYPE=Format på kortene siden
-DescADHERENT_CARD_TEXT_RIGHT=Tekst trykt på kort medlem (justere på høyre)
-DescADHERENT_MAILMAN_LISTS=Liste (er) for automatisk insription av nye medlemmer (separert med komma)
-NoThirdPartyAssociatedToMember=Ingen tredjepart knyttet til dette medlemmet
-ThirdPartyDolibarr=Dolibarr tredjepart
-MembersAndSubscriptions=Medlemmer og Suscriptions
-// STOP - Lines generated via autotranslator.php tool (2010-07-17 11:48:27).
+
+// START - Lines generated via autotranslator.php tool (2010-07-17 11:45:17).
+// Reference language: en_US
+FundationMembers=Stiftelsen medlemmer
+ErrorMemberIsAlreadyLinkedToThisThirdParty=Et annet medlem (navn: %s, innlogging: %s) er allerede koblet til en tredje part %s. Fjern denne linken først fordi en tredjepart ikke kan knyttes til bare ett medlem (og vice versa).
+ErrorUserPermissionAllowsToLinksToItselfOnly=Av sikkerhetsgrunner må du få tilgang til å redigere alle brukere skal kunne knytte et medlem til en bruker som ikke er ditt.
+ThisIsContentOfYourCard=Dette er detaljer på kortet
+CardContent=Innholdet av medlem-kortet
+SetLinkToUser=Link til en Dolibarr bruker
+SetLinkToThirdParty=Link til en Dolibarr tredjepart
+SubscriptionId=Abonnement id
+MemberId=Medlem id
+PaymentSubscription=Nye bidrag betaling
+DescADHERENT_AUTOREGISTER_MAIL_SUBJECT=E-post emne for medlem autosubscription
+DescADHERENT_AUTOREGISTER_MAIL=E-post for medlem autosubscription
+DescADHERENT_CARD_TYPE=Format på kortene siden
+DescADHERENT_CARD_TEXT_RIGHT=Tekst trykt på kort medlem (justere på høyre)
+DescADHERENT_MAILMAN_LISTS=Liste (er) for automatisk insription av nye medlemmer (separert med komma)
+NoThirdPartyAssociatedToMember=Ingen tredjepart knyttet til dette medlemmet
+ThirdPartyDolibarr=Dolibarr tredjepart
+MembersAndSubscriptions=Medlemmer og Suscriptions
+// STOP - Lines generated via autotranslator.php tool (2010-07-17 11:48:27).