Jump to content
xt:Commerce Community Forum

Automatische Kundennummernvergabe


Purecut

Recommended Posts

Weil's so sch?n billig ist hier ein Mod um Kundennummern bei Neuanlage eines Kunden automatische generieren zu lassen.

Es muss zuvor ein Kunde mit der Kundennummer 1000 bereits vorhanden sein. Ansonsten eine h?here Kundennummer als Startwert nehmen. Es geht nur mit Zahlen. Also als Startwert KEINE ZAHLEN und ZIFFERN verwenden. Nur Zahlen!

Zwei Daten m?ssen modifiziert werden:

create_account.php

/admin/create_account.php

Man suche in den o.g. Dateien diese Zeile:

xtc_db_perform(TABLE_CUSTOMERS, $sql_data_array);

und schreibe DAVOR:

// Modifikation Automatisch Kundennummer fortlaufend anlegen:

$start_cid = 1000;


$cid_query = xtc_db_query("SELECT MAX(customers_cid) AS maxnr FROM ".TABLE_CUSTOMERS);

$cid = xtc_db_fetch_array($cid_query);


if($cid['maxnr']){

 $start_cid = $cid['maxnr']+1;

}


$sql_data_array['customers_cid'] = $start_cid;

// Modifikation Kundennummer Ende

Wer den Startwert der Kundennummer ?ndern m?chte, den entsprechenden Wert hier ab?ndern:

$start_cid = 1000;

Getestet mit org. Dateien von 3.04SP1

Viel Spa

Link to comment
Share on other sites

  • Replies 51
  • Created
  • Last Reply
  • 4 weeks later...

<div class='quotetop'>QUOTE(sw-pc @ Jun 17 2006, 05:38 PM) Quoted post</div><div class='quotemain'>

Gutes Ding.

Habe es jetzt mal bei XTC2 eingesetzt, funktioniert soweit auch nur haben jetzt alle Kunden die sich neuanmelden die KNummer 10.

Wenn ich mich jetzt anmelden w?rde h?tte ich auch die 10.

Was k?nnte das sein?

Link to comment
Share on other sites

  • 5 weeks later...
Guest thuhn01

das gleiche problem habe ich nun auch .. alle angemeldetet haben nun kdNr. 10 ?!?!? huh.gif

Wer das für XTC 3.0.4 SP1 haben möchte kann sich melden.

Möglich sind bspw. Kundennummern in der Form:

K06-1022

[beliebige Zeichen][Jahr][beliebige Zeichen][fortlaufende Zahl]

Link to comment
Share on other sites

Weil's so sch?n billig ist hier ein Mod um Kundennummern bei Neuanlage eines Kunden automatische generieren zu lassen.

Es muss zuvor ein Kunde mit der Kundennummer 1000 bereits vorhanden sein. Ansonsten eine h?here Kundennummer als Startwert nehmen. Es geht nur mit Zahlen. Also als Startwert KEINE ZAHLEN und ZIFFERN verwenden. Nur Zahlen!

Zwei Daten m?ssen modifiziert werden:

create_account.php

/admin/create_account.php

Man suche in den o.g. Dateien diese Zeile:

xtc_db_perform(TABLE_CUSTOMERS, $sql_data_array);

und schreibe DAVOR:

// Modifikation Automatisch Kundennummer fortlaufend anlegen:

$start_cid = 1000;


$cid_query = xtc_db_query("SELECT MAX(customers_cid) AS maxnr FROM ".TABLE_CUSTOMERS);

$cid = xtc_db_fetch_array($cid_query);


if($cid['maxnr']){

 $start_cid = $cid['maxnr']+1;

}


$sql_data_array['customers_cid'] = $start_cid;

// Modifikation Kundennummer Ende
Wer den Startwert der Kundennummer ?ndern m?chte, den entsprechenden Wert hier ab?ndern: Getestet mit org. Dateien von 3.04SP1 Viel Spa
Das funktioniert aber nur, wenn kein Kunde mit der Kundennummer 2 oder 3 oder 4 etc. vorhanden ist, also nur, wenn man vorher noch nie eine Kundennummer vergeben hat. Grund: Das Feld 'customers_cid' ist alphanumerisch und bei einem alphanumerischesr Vergleich ist "9" gößer als "1000". Ein kleiner Trick schafft hier Abhilfe:

$cid_query = xtc_db_query("SELECT MAX(customers_cid / 1) AS maxnr FROM ".TABLE_CUSTOMERS);

$cid = xtc_db_fetch_array($cid_query);

Das an sich unsinnige Teilen der CID durch 1 hat zur Folge, dass der Vergleich numerisch erfolgt. Dann funktioniert das auch, wenn vorher bereits Kundennummern vergeben waren. Allerdings natürlich NICHT, wenn die Kundennummern alpha-Bestandteile drin hatten

Grüße

Dieter

http://www.rasiererundmehr.de

Link to comment
Share on other sites

  • 1 month later...

Wer das für XTC 3.0.4 SP1 haben möchte kann sich melden.

Möglich sind bspw. Kundennummern in der Form:

K06-1022

[beliebige Zeichen][Jahr][beliebige Zeichen][fortlaufende Zahl]

Wer hat diese Erweiterung bzw. kann mir sagen wo ich die finden kann ?

Gruß Marc

Link to comment
Share on other sites

Weil's so sch?n billig ist hier ein Mod um Kundennummern bei Neuanlage eines Kunden automatische generieren zu lassen.

Es muss zuvor ein Kunde mit der Kundennummer 1000 bereits vorhanden sein. Ansonsten eine h?here Kundennummer als Startwert nehmen. Es geht nur mit Zahlen. Also als Startwert KEINE ZAHLEN und ZIFFERN verwenden. Nur Zahlen!

Zwei Daten m?ssen modifiziert werden:

create_account.php

/admin/create_account.php

Man suche in den o.g. Dateien diese Zeile:

xtc_db_perform(TABLE_CUSTOMERS, $sql_data_array);

und schreibe DAVOR:

// Modifikation Automatisch Kundennummer fortlaufend anlegen:

$start_cid = 1000;


$cid_query = xtc_db_query("SELECT MAX(customers_cid) AS maxnr FROM ".TABLE_CUSTOMERS);

$cid = xtc_db_fetch_array($cid_query);


if($cid['maxnr']){

 $start_cid = $cid['maxnr']+1;

}


$sql_data_array['customers_cid'] = $start_cid;

// Modifikation Kundennummer Ende

Wer den Startwert der Kundennummer ?ndern m?chte, den entsprechenden Wert hier ab?ndern:

Getestet mit org. Dateien von 3.04SP1

---------------------------------------

Ohhhh man, genau das was ich suche... grins

habe gerade v3.0.4 SP2.1 aufgesetzt. Funktioniert die Lösung in dieser Version?

Herzlichen Dank im Voraus.

Knipser

Link to comment
Share on other sites

Wer das für XTC 3.0.4 SP1 haben möchte kann sich melden.

Möglich sind bspw. Kundennummern in der Form:

K06-1022

[beliebige Zeichen][Jahr][beliebige Zeichen][fortlaufende Zahl]

ja, das hätte ich gerne. wie kann ich den Code bekommen?

Herzlichen Dank im Voraus

Knipser

Link to comment
Share on other sites

  • 2 weeks later...

Wer das für XTC 3.0.4 SP1 haben möchte kann sich melden.

Möglich sind bspw. Kundennummern in der Form:

K06-1022

[beliebige Zeichen][Jahr][beliebige Zeichen][fortlaufende Zahl]

Genau das habe ich gesucht.

Wie kann ich es bekommen, ist es schwer zu integrieren?

Danke, Gruß - Kai

Link to comment
Share on other sites

  • 2 weeks later...

Würde mich auch interessieren (ich habe 3.0.4sp2) Ich habe bis jetzt keine Kundennummern. Keine einzige.

Was ich bis jetzt gemacht habe:

1) Tabelle CUSTOMERS über phymyadmin exportiert in eine TXT-Datei

2) TXT-Datei in Excel geöffnet und in Tabellenformat umgewandelt (,)

3) Erste Zelle des Feldes CUSTOMERS_CID mit 1000 gefüllt

4) Mit der Maus runtergefahren bis Zeile 810 (meine letzten)

5) "nach unten ausfüllen", der letzte Eintrag hatte dann 1810 im Feld CUSTOMERS_CID

6) Datei speichern als CSV

7) Datei in phpmyadmin importieren in die Tabelle CUSTOMERS

Das klappte alles, ich kann mich nach wie vor anmelden und alle Kunden haben eine Kundennummer. Nun kommt der Code leicht modifiziert von mir, ich brauche ja keine start_cid mehr, da nun jede Adresse bereits eine Kundennummer hat.

Zwei Daten müssen modifiziert werden:

create_account.php und /admin/create_account.php

Man suche in den o.g. Dateien diese Zeile und schreibe DAVOR:

xtc_db_perform(TABLE_CUSTOMERS, $sql_data_array);



$cid_query = xtc_db_query("SELECT MAX(customers_cid) AS maxnr FROM ".TABLE_CUSTOMERS);

$cid = xtc_db_fetch_array($cid_query);
$new_cid = $cid['maxnr']+1;

$sql_data_array['customers_cid'] = $new_cid;
[/php]

Scheint für mich nachvollziehbar und klappt :cool:

Link to comment
Share on other sites

  • 3 weeks later...

Hat anscheindend niemand mehr :(

in der datei create_account.php nach

Zeile: include ('includes/application_top.php');

einfügen:


require_once (DIR_FS_INC.'xtc_random_charcode.inc.php');
require_once (DIR_FS_INC.'xtc_rand.inc.php');
function new_customer_id($space='-'){
$new_cid='';
$start_cid = 1500;
$char = xtc_random_charcode(2);
$year = date("y");

$cid_query = xtc_db_query("SELECT customers_cid FROM ".TABLE_CUSTOMERS." ORDER BY customers_date_added DESC LIMIT 1");
$last_cid = xtc_db_fetch_array($cid_query);
$arr_cid = explode($space,$last_cid['customers_cid']);
if($arr_cid[1]
? $new_cid = $char . $year . $space . ($arr_cid[1]+1)
: $new_cid = $char . $year . $space . $start_cid);

return $new_cid;
}
[/php]

und VOR der Zeile

xtc_db_perform(TABLE_CUSTOMERS, $sql_data_array);

einfügen

[php]
//Automatisch Kundennummer fortlaufend anlegen:
$sql_data_array['customers_cid'] = new_customer_id();

Gibt folgendes aus:

[zufällige Zeichen][Jahr][beliebige Zeichen][fortlaufende Zahl]

getestet mit v3.0.4 SP2.1

Link to comment
Share on other sites

@ jimpi:

erstmal vielen Dank für den Tip !

Aber zwei Fragen hab ich noch dazu. Wie oder wo kann ich die beliebigen Zeichen vorgeben bzw. kann ich die zufälligen Zeichen irgendwie rausnehmen ?

Gruß Marc

€dit: also ersteres ist denke ich mal das hier function new_customer_id($space='-') oder ?

€dit2: gut hat sich erledigt ich hab´s gefunden. Einfach das

$char = xtc_random_charcode(2);

und das $char . bei ? $new_cid = und bei : $new_cid = rausnehmen und die zufälligen Zeichen sind Geschichte.

Also nochmals danke für Deinen Tip ;-)

Link to comment
Share on other sites

Wer alpha-numerische Kundennummern verwendet (natürlich muss mindestens das letzte Zeichen eine Ziffer sein), also z.B. 'KD15015', fügt in den Dateien

create_account.php und /admin/create_account.php

VOR der Zeile:

xtc_db_perform(TABLE_CUSTOMERS, $sql_data_array);

folgendes ein:


$cid_query = xtc_db_query("SELECT MAX(customers_cid) AS maxnr FROM ".TABLE_CUSTOMERS);

$cid = xtc_db_fetch_array($cid_query);

if (preg_match("/(\D)/i", $cid['maxnr'])) {

$suchmuster = '/(.*\D)(\d+)$/i';
$ersetzung = '${1}';
$cid_start_alpha_num = preg_replace($suchmuster, $ersetzung, $cid['maxnr']);

$ersetzung = '${2}';
$cid_end_num = preg_replace($suchmuster, $ersetzung, $cid['maxnr']);

$cid_end_num++;
$new_cid = $cid_start_alpha_num.$cid_end_num;
}
else
$new_cid = $cid['maxnr']+1;

$sql_data_array['customers_cid'] = $new_cid;
[/php]

Zu beachten ist, dass diese Lösung bei Variationen von Buchstabenpräfixen (z.B. 'END' für Endkunden und 'HAENDLER' für Geschäftskunden) nicht funktioniert. In diesem Fall müsste noch nach der Benutzergruppe unterschieden werden. Bei Bedarf, einfach melden.

Link to comment
Share on other sites

  • 1 month later...

Hallo Zusammen,

haben folgenden Code eingetragen:

require_once (DIR_FS_INC.'xtc_random_charcode.inc.php');

require_once (DIR_FS_INC.'xtc_rand.inc.php');

function new_customer_id($space='OC'){

$new_cid='';

$start_cid = 24160;

$char = date("m");

$year = date("y");

$cid_query = xtc_db_query("SELECT customers_cid FROM ".TABLE_CUSTOMERS." ORDER BY customers_date_added DESC LIMIT 1");

$last_cid = xtc_db_fetch_array($cid_query);

$arr_cid = explode($space,$last_cid['customers_cid']);

if($arr_cid[1]

? $new_cid = $space . $char . $year . ($arr_cid[1]+1)

: $new_cid = $space . $char . $year . $start_cid);

return $new_cid;

}

Dann wie folgt abgeändert, damit es so aussieht:

[beliebige Zeichen][Monat][Jahr][fortlaufende Zahl]

[OC][01][07][24160]

~

~

function new_customer_id($space='HD'){

$new_cid='';

$start_cid = 1073498;

$char = date("m");

$year = date("y");

$cid_query = xtc_db_query("SELECT customers_cid FROM ".TABLE_CUSTOMERS." ORDER BY customers_date_added DESC LIMIT 1");

$last_cid = xtc_db_fetch_array($cid_query);

$arr_cid = explode($space,$last_cid['customers_cid']);

if($arr_cid[1]

? $new_cid = $space . $char . $year . ($arr_cid[1]+1)

: $new_cid = $space . $char . $year . $start_cid);

~

~

UND NUN PASSIERT FOLGENDES:

Bei jeder Neuanlage eines Kunden verfielfacht sich eine 107!

1. Neuanlage generiert OC010724150

2. Neuanlage generiert OC010710724151

3. Neuanlage generiert OC010710710724152

Kann mir jemand helfen?

Gruß

Link to comment
Share on other sites

107 ist vom Variabel $Jahr erzeugt. Es ist das Unix Jahr und muss wie folgt deklariert werden um z.B. 2007 anzuzeigen:

$Jahr = $Jahr + 1900;

oder um 07 als Jahresangabe anzuzeigen

$Jahr = $Jahr - 100;

Damit kannst Du dann zumindest der Fehlerteufel für 107 finden - $year also.

Wie Du sehen kannst ist der Jahr sowieso im $arr_cid, also im original Kundennummer und es wird danach bei jeden Neukunde hinzugefügt.

Das ist das Problem.

Link to comment
Share on other sites

Was Du ändern solltest?? deine php Kenntnisse!

Alles was ich sagen kann ist das was Du da für einen Code hast unsinnig ist. Es nimmt immer das komplette Kundennummer und fügt zwar eine plus eins ein aber auch ein 107 für das Jahr.

Logische Antwort. Nimmt das Jahr raus aus der Code. Einmal im Jahr kannst Du das Jahr ändern, manuell, dauert 2 Sekunden.

Ganz davon abgesehen, dass Datumsangaben JJMMTT sortiert werden und nicht MMJJ wie Du es hast.

T

Link to comment
Share on other sites

Gute Nacht zusammen! Hi Trevor!

ES FUNKTIONIERT!

First of all --> Backup von der DB machen!!!!

2. Ich habe nun sämtliche Tabellen im phpMyAdmin geleert, die mit Kundendaten gefüllt waren und die mit Kundenbestellungen zu tun hatten, da mein Shop noch nicht online ist und ich somit noch nichts zu verlieren habe. Leider habe ich mir die Tabellennamen nicht aufgeschrieben, also vorsicht. Ich denke, dass es auch ausreichen würde, wenn man nur die cutomers_cid leeren würde, damit die KdNr. wieder bei der Startzahl, die man im Script vorgibt zu zählen anfangen kann.

Bitte darauf achten, dass nicht der Admin Account gelöscht wird!

Anschließend habe ich den aufs Neue veränderten Code auf Grundlagen von jimpi folgendermaßen integriert:

in der datei create_account.php nach Zeile:

include ('includes/application_top.php');

einfügen:

 
require_once (DIR_FS_INC.'xtc_random_charcode.inc.php');
require_once (DIR_FS_INC.'xtc_rand.inc.php');
function new_customer_id($space='-'){
$new_cid='';
$start_cid = 3490;
$year = date("y");
$month = date("m");
$sign = 'HD';

$cid_query = xtc_db_query("SELECT customers_cid FROM ".TABLE_CUSTOMERS." ORDER BY customers_date_added DESC LIMIT 1");
$last_cid = xtc_db_fetch_array($cid_query);

$arr_cid = explode($space,$last_cid['customers_cid']);
if($arr_cid[1]
? $new_cid = $sign . $month . $year . $space . ($arr_cid[1]+1)
: $new_cid = $sign . $month . $year . $space . $start_cid);

return $new_cid;

}
[/php]

[/font]

[font=Verdana][size=2][color=red][color=red]und VOR der Zeile [/color][/color][/size][/font]

[font=Verdana][size=2][color=red][color=red]

xtc_db_perform(TABLE_CUSTOMERS, $sql_data_array);[/color][/color][/size][/font]

[font=Verdana][size=2][color=red][color=red]

einfügen[/color][/color][/size][/font]

[font=Verdana][size=2][font=Verdana]//Automatisch [/font][/size][/font][b][color=black][color=windowtext]Kundennummer[/color][/color][/b][font=Verdana][font=Verdana] fortlaufend anlegen: [/font][/font]

[font=Verdana]

[php]$sql_data_array['customers_cid'] = new_customer_id();

------------------

Ergebnis:

[$sign][ $month][ $year][$space] [$arr_cid]

[beliebige Zeichen][Monat] [Jahr] [-][fortlaufende Zahl]

Mein erster Kunde bekam nun die Nummer:

HD0107-3490

Mein zweiter Kunde die Nummer:

HD0107-3491

Der dritte:

HD0107-3492

Ich hoffe, dass im Februar dann 0207... etc. in der KdNr. steht :P

Das Problem ... war, dass die fortlaufende Nummer ($arr_cid) nicht von der Monts- und Jahreszahl (0107) klar getrennt war und somit wurde ALLES (Unix Jahr 107 [date("y")] und $arr_cid) bei jedem neuen Kunden um eins erweitert. Das Unix Jahr hat noch einen dazu genommen (+1 Jahr=107) und die fortlaufende Zahl hat auch jedesmal einen Zähler dazu genommen (+1).

Da jetzt (wie im ursprünglichen Code von Jimpi) der Trennstrich ($space) zwischen [ $year] und [$arr_cid] steht, zählt nur noch die fortlaufende Nummer weiter.

Anschließend habe ich noch den Code mit $sign = 'HD'; erweitet, sodass ich wieder meine variablen Zeichen einfügen kann, dass $char in $month umbenannt ... und fertig.

Gruß und gute Nacht

back@me

Link to comment
Share on other sites

Tausch Monat und Jahr um da sonst werden alle Kunden im erste Linie nach Monat sortiert - d.h. im 2008 sind die Kunden nicht mehr chronologisch auflistbar

HD0107-3490

HD0107-3491

HD0107-3492

HD0108-6430

HD0108-6431

HD0108-6432

HD0207-3493

HD0207-3494

HD0207-3495

HD0208-6433

HD0208-6434

HD0208-6435

Link to comment
Share on other sites

Tausch Monat und Jahr um da sonst werden alle Kunden im erste Linie nach Monat sortiert - d.h. im 2008 sind die Kunden nicht mehr chronologisch auflistbar

HD0107-3490

HD0107-3491

HD0107-3492

HD0108-6430

HD0108-6431

HD0108-6432

HD0207-3493

HD0207-3494

HD0207-3495

HD0208-6433

HD0208-6434

HD0208-6435

Guten Morgen Rovert ;-)

das ist ein gutes Argument. Ich werde es so machen.;)

Danke für den Tipp.

EDIT:

Es wird dann folgendermaßen aussehen (nur Jahr und Monat tauschen):

 
? $new_cid = $sign . $year . $month . $space . ($arr_cid[1]+1)
: $new_cid = $sign . $year . $month . $space . $start_cid);
[/php]

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.


×
  • Create New...