Results 1 to 7 of 7

Thread: Kundennummer automatisch erzeugen und hochzählen

  1. #1
    Kupido is offline Sugar Community Member
    Join Date
    Apr 2011
    Posts
    60

    Default Kundennummer automatisch erzeugen und hochzählen

    Hallo

    wie kann ich eine Kundennummer erzeugen?
    Ich weiß das dies mit den Logic Hooks geht.
    Aber so der entscheidende Wink fehlt mir.
    Habe auch diesen Thread angeschaut http://www.sugarcrm.com/forums/showt...d=1#post234683, aber ist mir doch etwas zu komplex bzw verstehe ich nicht alles was da gesagt wird.

    Danke für jede Hilfe schonmal.

  2. #2
    sts's Avatar
    sts
    sts is offline Sugar Community Member
    Join Date
    Aug 2010
    Posts
    978

    Default Re: Kundennummer automatisch erzeugen und hochzählen

    Hier wird eine Lösung auf Basis eines Logic Hooks beschrieben. Nach dem Speichern eines Accounts wird ein Kundennummer-Feld mit der Nummer belegt, wenn dieses Feld bis zu diesem Zeitpunkt leer ist. Die Kundennummer wird in der Form <Jahreszahl zweistellig>_<vierstellige Nummer> erzeugt, wobei die vierstellige Nummer von 0001 beginnend hochgezählt wird.

    Die Lösung nutzt den im SugarForum hier: http://www.sugarcrm.com/forums/showt...683#post234683
    von Nutzer JTripleE beschriebenen PHP-Code.

    1.) Im Studio für das Modul "Accounts" ein neues Text-Feld einrichten, z.B. "kundennummer".

    2.) Dieses neu erzeugte Feld in die DetailView und ggf. ListView mit aufnehmen. Falls das Feld editierbar sein soll (ich würde davon abraten) auch in die EditView.

    3.) Erstellen des Logic Hooks

    a) custom\modules\Accounts\logic_hooks.php erstellen.

    PHP Code:
    <?php
    // Do not store anything in this file that is not part of the array or the hook version.  This file will   
    // be automatically rebuilt in the future.
     
    $hook_version 1;
    $hook_array = Array();

    $hook_array['after_save'] = Array();
    $hook_array['after_save'][] = Array(1'add_code''custom/modules/Accounts/add_code_hook.php','add_code''add_code');

    ?>
    Falls die Datei bereits existiert müssen nur die beiden folgenden Zeilen eingebaut werden

    PHP Code:
    $hook_array['after_save'] = Array();
    $hook_array['after_save'][] = Array(1'add_code''custom/modules/Accounts/add_code_hook.php','add_code''add_code'); 
    Wenn bereits ein 'after_save'-Logic Hook enthalten war, dann muss nur die 2. Zeile eingefügt werden, wobei darauf geachtet werden muss, dass der Index (hier: 1) eindeutig gemacht wird.

    b) Code für die Ausführung des Logic Hooks bereit stellen:
    Es muss die Datei custom\modules\Accounts\add_code_hook.php erzeugt werden mit folgendem Inhalt:

    PHP Code:
    <?php

    if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');

    class 
    add_code {

        const 
    CODE_PREFIX ""//prefix for the code
        
    const CODE_SUFFIX ""//suffix to add after the code
        
    const CODE_SEPARATOR "-"//separator to use
        
    const CODE_FIELD "kundennummer_c"//custom field to be generated
        
    const IS_CUSTOM_FIELD "1";
        const 
    DB_TABLE "accounts_cstm"//table containing custom fields
        
    const ADD_DATE "1"//add the date
        
    const DATE_FORMAT "y"//format for the year parameter
        
    const ZERO_PADDING 4//minimum amount of characters desired for the number. ie 4 = 0001, 3 = 001
        
    const FIRST_NUM "0000"//default to start with.
       
        
    function add_code(&$bean$event$arguments)
        {
            require_once(
    'log4php/LoggerManager.php');

            
    //pattern to detect valid code, designed to detect non padded numbering too.
            
    $pattern "/^" self::CODE_PREFIX . (self::ADD_DATE?"[0-9]{2}":"") . self::CODE_SEPARATOR "([0-9]+)" self::CODE_SUFFIX "$/";

            
    $GLOBALS['log']->debug("add_code function fired after save.");

            if(!
    preg_match($pattern$bean->fetched_row[self::CODE_FIELD])) {
                
    $length_before strlen(self::CODE_PREFIX) + (self::ADD_DATE?strlen(date(self::DATE_FORMAT)):0) + strlen(self::CODE_SEPARATOR);
                
    $length_rest $length_before strlen(self::CODE_SUFFIX);

                
    $db =  DBManagerFactory::getInstance();
                
    $query "SELECT " self::CODE_FIELD " FROM " self::DB_TABLE .
                         
    " WHERE (" self::CODE_FIELD " <> '' OR " self::CODE_FIELD " IS NOT NULL)" .
                         
    " ORDER BY".
                         
    " ROUND(SUBSTRING(" self::CODE_FIELD " FROM " $length_before "+1 FOR LENGTH(" self::CODE_FIELD ") - " $length_rest ")) DESC LIMIT 1";
       
                
    $result $db->query($querytrue'Error selecting most recent ' self::CODE_FIELD ' CODE');
       
                if (
    $row=$db->fetchByAssoc($result)) {
                    
    $last_code $row[self::CODE_FIELD];
                } else {
                    
    //no codes exist, generate default - PREFIX CURRENT_YEAR SEPARATOR FIRST_NUM
                    
    $last_code self::CODE_PREFIX . (self::ADD_DATE?date(self::DATE_FORMAT):"") . self::CODE_SEPARATOR self::FIRST_NUM self::CODE_SUFFIX;
                }
       
                
    $GLOBALS['log']->debug("Last Code: " $last_code);
       
                
    preg_match($pattern$last_code$matches);
                
    $num=$matches[1];
                
    $num++;
                
    $pads self::ZERO_PADDING strlen($num);
                
    $new_code self::CODE_PREFIX . (self::ADD_DATE?date(self::DATE_FORMAT):"") . self::CODE_SEPARATOR;
       
                
    //preform the lead padding
                
    for($i=0$i $pads$i++) {
                    
    $new_code .= "0";
                }

                
    $new_code .= $num self::CODE_SUFFIX;

                
    $GLOBALS['log']->debug("New Code: " $last_code);
               
                
    //write to database
                
    if (self::IS_CUSTOM_FIELD) { // insert into _cstm table for custom fields,
                    
    $query "INSERT INTO " self::DB_TABLE " (id_c, " self::CODE_FIELD ") VALUES ('$bean->id', '$new_code') ON DUPLICATE KEY UPDATE " self::CODE_FIELD "='$new_code'";
                } else {    
    // update the existing row in regular table for non-custom fields
                    
    $query "UPDATE " self::DB_TABLE " SET " self::CODE_FIELD "  = '$new_code' WHERE " self::DB_TABLE ".id = '$bean->id'";
                }
                
    $result $db->query($querytrue'Error adding ' self::CODE_PREFIX ' code');
            } else {
                
    $GLOBALS['log']->debug("Code Exists...Exiting " $bean->fetched_row[" . self::CODE_FIELD . "]);       
            }
        }
    }

    ?>
    Die folgende Zeile muss dabei ggf. angepasst werden:

    PHP Code:
        const CODE_FIELD "kundennummer_c"//custom field to be generated 
    "kundennummer_c" muss ggf. durch den Namen des im Studio angelegten Feldes (mit angehängtem "_c") ersetzt werden.
    Stefan Ulrich Sauer
    System Analyst

    Devoteam Danet GmbH
    Gutenbergstraße 10
    D-64331 Weiterstadt
    Germany
    email: Stefan-Ulrich.Sauer@devoteam.com
    http://www.devoteam.de

  3. #3
    der_kleine_dodo is offline Junior Member
    Join Date
    Nov 2011
    Posts
    3

    Default Re: Kundennummer automatisch erzeugen und hochzählen

    Hallo und ein herzliches grüß Gott an alle,

    ich arbeite seit ca. 1 Jahr mit dem CRM von Sugar, habe es aber bislang nur wenig angepasst.

    Jetzt habe ich eine Laufende Nummer eingebaut genau wie in deinem Beispiel nur bei Costemers.
    Ergebniss ist perfekt mit GR11-0001 wenn ich einzelne Kunden anlege.

    Nun habe ich aber leider ein neues Problem beim Import von Kundendaten. Er versucht auch hier die add_code_hook.php anzusprechen obwohl ich eine Kundennummer bereist eingetragen habe.


    PHP Code:
    <?php

    if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');

    class 
    add_code {

        const 
    CODE_PREFIX "GR"//prefix for the code
        
    const CODE_SUFFIX ""//suffix to add after the code
        
    const CODE_SEPARATOR "-"//separator to use
        
    const CODE_FIELD "kundennummer_c"//custom field to be generated
        
    const IS_CUSTOM_FIELD "1";
        const 
    DB_TABLE "contacts_cstm"//table containing custom fields
        
    const ADD_DATE "1"//add the date
        
    const DATE_FORMAT "y"//format for the year parameter
        
    const ZERO_PADDING 4//minimum amount of characters desired for the number. ie 4 = 0001, 3 = 001
        
    const FIRST_NUM "0000"//default to start with.
       
        
    function add_code(&$bean$event$arguments)
        {
            require_once(
    'log4php/LoggerManager.php');

            
    //pattern to detect valid code, designed to detect non padded numbering too.
            
    $pattern "/^" self::CODE_PREFIX . (self::ADD_DATE?"[0-9]{2}":"") . self::CODE_SEPARATOR "([0-9]+)" self::CODE_SUFFIX "$/";

            
    $GLOBALS['log']->debug("add_code function fired after save.");

            if(!
    preg_match($pattern$bean->fetched_row[self::CODE_FIELD])) {
                
    $length_before strlen(self::CODE_PREFIX) + (self::ADD_DATE?strlen(date(self::DATE_FORMAT)):0) + strlen(self::CODE_SEPARATOR);
                
    $length_rest $length_before strlen(self::CODE_SUFFIX);

                
    $db =  DBManagerFactory::getInstance();
                
    $query "SELECT " self::CODE_FIELD " FROM " self::DB_TABLE .
                         
    " WHERE (" self::CODE_FIELD " <> '' OR " self::CODE_FIELD " IS NOT NULL)" .
                         
    " ORDER BY".
                         
    " ROUND(SUBSTRING(" self::CODE_FIELD " FROM " $length_before "+1 FOR LENGTH(" self::CODE_FIELD ") - " $length_rest ")) DESC LIMIT 1";
       
                
    $result $db->query($querytrue'Error selecting most recent ' self::CODE_FIELD ' CODE');
       
                if (
    $row=$db->fetchByAssoc($result)) {
                    
    $last_code $row[self::CODE_FIELD];
                } else {
                    
    //no codes exist, generate default - PREFIX CURRENT_YEAR SEPARATOR FIRST_NUM
                    
    $last_code self::CODE_PREFIX . (self::ADD_DATE?date(self::DATE_FORMAT):"") . self::CODE_SEPARATOR self::FIRST_NUM self::CODE_SUFFIX;
                }
       
                
    $GLOBALS['log']->debug("Last Code: " $last_code);
       
                
    preg_match($pattern$last_code$matches);
                
    $num=$matches[1];
                
    $num++;
                
    $pads self::ZERO_PADDING strlen($num);
                
    $new_code self::CODE_PREFIX . (self::ADD_DATE?date(self::DATE_FORMAT):"") . self::CODE_SEPARATOR;

                
    //preform the lead padding
                
    for($i=0$i $pads$i++) {
                    
    $new_code .= "0";
                }

                
    $new_code .= $num self::CODE_SUFFIX;

                
    $GLOBALS['log']->debug("New Code: " $last_code);
               
                
    //write to database
                
    if (self::IS_CUSTOM_FIELD) { // insert into _cstm table for custom fields,
                    
    $query "INSERT INTO " self::DB_TABLE " (id_c, " self::CODE_FIELD ") VALUES ('$bean->id', '$new_code') ON DUPLICATE KEY UPDATE " self::CODE_FIELD "='$new_code'";
                } else {    
    // update the existing row in regular table for non-custom fields
                    
    $query "UPDATE " self::DB_TABLE " SET " self::CODE_FIELD "  = '$new_code' WHERE " self::DB_TABLE ".id = '$bean->id'";
                }
                
    $result $db->query($querytrue'Error adding ' self::CODE_PREFIX ' code');
            } else {
                
    $GLOBALS['log']->debug("Code Exists...Exiting " $bean->fetched_row[" . self::CODE_FIELD . "]);       
            }
        }
    }

    ?>
    Hoffe Sie haben hier noch einen Tipp auf lager !

  4. #4
    der_kleine_dodo is offline Junior Member
    Join Date
    Nov 2011
    Posts
    3

    Default Re: Kundennummer automatisch erzeugen und hochzählen

    Hallo und ein herzliches grüß Gott an alle,

    ich arbeite seit ca. 1 Jahr mit dem CRM von Sugar, habe es aber bislang nur wenig angepasst.

    Jetzt habe ich eine Laufende Nummer eingebaut genau wie in deinem Beispiel nur bei Costemers.
    Ergebniss ist perfekt mit GR11-0001 wenn ich einzelne Kunden anlege.

    Nun habe ich aber leider ein neues Problem beim Import von Kundendaten. Er versucht auch hier die add_code_hook.php anzusprechen obwohl ich eine Kundennummer bereist eingetragen habe.


    PHP Code:
    <?php

    if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');

    class 
    add_code {

        const 
    CODE_PREFIX "GR"//prefix for the code
        
    const CODE_SUFFIX ""//suffix to add after the code
        
    const CODE_SEPARATOR "-"//separator to use
        
    const CODE_FIELD "kundennummer_c"//custom field to be generated
        
    const IS_CUSTOM_FIELD "1";
        const 
    DB_TABLE "contacts_cstm"//table containing custom fields
        
    const ADD_DATE "1"//add the date
        
    const DATE_FORMAT "y"//format for the year parameter
        
    const ZERO_PADDING 4//minimum amount of characters desired for the number. ie 4 = 0001, 3 = 001
        
    const FIRST_NUM "0000"//default to start with.
       
        
    function add_code(&$bean$event$arguments)
        {
            require_once(
    'log4php/LoggerManager.php');

            
    //pattern to detect valid code, designed to detect non padded numbering too.
            
    $pattern "/^" self::CODE_PREFIX . (self::ADD_DATE?"[0-9]{2}":"") . self::CODE_SEPARATOR "([0-9]+)" self::CODE_SUFFIX "$/";

            
    $GLOBALS['log']->debug("add_code function fired after save.");

            if(!
    preg_match($pattern$bean->fetched_row[self::CODE_FIELD])) {
                
    $length_before strlen(self::CODE_PREFIX) + (self::ADD_DATE?strlen(date(self::DATE_FORMAT)):0) + strlen(self::CODE_SEPARATOR);
                
    $length_rest $length_before strlen(self::CODE_SUFFIX);

                
    $db =  DBManagerFactory::getInstance();
                
    $query "SELECT " self::CODE_FIELD " FROM " self::DB_TABLE .
                         
    " WHERE (" self::CODE_FIELD " <> '' OR " self::CODE_FIELD " IS NOT NULL)" .
                         
    " ORDER BY".
                         
    " ROUND(SUBSTRING(" self::CODE_FIELD " FROM " $length_before "+1 FOR LENGTH(" self::CODE_FIELD ") - " $length_rest ")) DESC LIMIT 1";
       
                
    $result $db->query($querytrue'Error selecting most recent ' self::CODE_FIELD ' CODE');
       
                if (
    $row=$db->fetchByAssoc($result)) {
                    
    $last_code $row[self::CODE_FIELD];
                } else {
                    
    //no codes exist, generate default - PREFIX CURRENT_YEAR SEPARATOR FIRST_NUM
                    
    $last_code self::CODE_PREFIX . (self::ADD_DATE?date(self::DATE_FORMAT):"") . self::CODE_SEPARATOR self::FIRST_NUM self::CODE_SUFFIX;
                }
       
                
    $GLOBALS['log']->debug("Last Code: " $last_code);
       
                
    preg_match($pattern$last_code$matches);
                
    $num=$matches[1];
                
    $num++;
                
    $pads self::ZERO_PADDING strlen($num);
                
    $new_code self::CODE_PREFIX . (self::ADD_DATE?date(self::DATE_FORMAT):"") . self::CODE_SEPARATOR;

                
    //preform the lead padding
                
    for($i=0$i $pads$i++) {
                    
    $new_code .= "0";
                }

                
    $new_code .= $num self::CODE_SUFFIX;

                
    $GLOBALS['log']->debug("New Code: " $last_code);
               
                
    //write to database
                
    if (self::IS_CUSTOM_FIELD) { // insert into _cstm table for custom fields,
                    
    $query "INSERT INTO " self::DB_TABLE " (id_c, " self::CODE_FIELD ") VALUES ('$bean->id', '$new_code') ON DUPLICATE KEY UPDATE " self::CODE_FIELD "='$new_code'";
                } else {    
    // update the existing row in regular table for non-custom fields
                    
    $query "UPDATE " self::DB_TABLE " SET " self::CODE_FIELD "  = '$new_code' WHERE " self::DB_TABLE ".id = '$bean->id'";
                }
                
    $result $db->query($querytrue'Error adding ' self::CODE_PREFIX ' code');
            } else {
                
    $GLOBALS['log']->debug("Code Exists...Exiting " $bean->fetched_row[" . self::CODE_FIELD . "]);       
            }
        }
    }

    ?>
    Hoffe Sie haben hier noch einen Tipp auf lager !

  5. #5
    roblaus's Avatar
    roblaus is offline Sugar Community Member
    Join Date
    Dec 2006
    Location
    Vienna / Austria
    Posts
    2,850

    Default Re: Kundennummer automatisch erzeugen und hochzählen

    Warum nicht einfach temporär den logic hook deaktivieren? Sicher gibt es eine elegantere Lösung aber wenn Importe nicht allzu häufig stattfinden ist das sicher die schnellste Lösung.
    Alternativ könnte man auch über die DB importieren...
    __________________________
    Robert Laussegger
    http://www.iscongroup.net

    Bei Fragen: support@iscon.at
    Die deutschen Sprachdateien für SugarCRM und das deutsche Handbuch gibt es hier: http://goo.gl/kPsAz
    Ab sofort auch mit 6.4.2

  6. #6
    der_kleine_dodo is offline Junior Member
    Join Date
    Nov 2011
    Posts
    3

    Default Re: Kundennummer automatisch erzeugen und hochzählen

    Hallo und danke für die Antwort,

    das mit dem temporär deaktivieren finde ich nicht gut da die Datenbank fast täglich mit der Warenwirtschaft abgeglichen werden soll.
    Über die Datenbank habe ich, oder kennen ich noch keine Lösung.

    Ich frage mich jedoch, warum er den überhaupt noch ein Problem mit der Kundennummer hat, den in meinen Import Dateien sind ja auch schon Kundennummern drin und wenn ich einen bestehenden Kunden bearbeite der somit schon eine Kundennummer hat, gibt es ja auch kein Problem, wenn ich diesen speichere.

  7. #7
    roblaus's Avatar
    roblaus is offline Sugar Community Member
    Join Date
    Dec 2006
    Location
    Vienna / Austria
    Posts
    2,850

    Default Re: Kundennummer automatisch erzeugen und hochzählen

    Bei einem regelmäßigen Abgleich mit z.B. der Warenwirtschaft würde ich mir sowieso eine automatisierte Routine überlegen. Ist aber ein anderes Thema.
    Bei einem Import über die Sugar eigene Schnittstelle wird der Datensatz so behandelt als ob es eine manuelle Eingabe wäre und daher greift auch der hook. Was in dem Code fehlt ist ganz einfach eine Abfrage ob es schon eine Nummer in dem Feld gibt und wenn ja dann soll nichts passieren.
    __________________________
    Robert Laussegger
    http://www.iscongroup.net

    Bei Fragen: support@iscon.at
    Die deutschen Sprachdateien für SugarCRM und das deutsche Handbuch gibt es hier: http://goo.gl/kPsAz
    Ab sofort auch mit 6.4.2

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. Nummern automatisch hochzählen
    By josch in forum Deutsche
    Replies: 3
    Last Post: 2011-04-05, 03:02 PM
  2. Kundennummer anlegen
    By Nixdorf in forum Deutsche
    Replies: 7
    Last Post: 2010-03-17, 08:06 PM
  3. Nummer erzeugen lassen
    By sandra83 in forum Deutsche
    Replies: 1
    Last Post: 2009-11-05, 07:32 AM
  4. wert automatisch einfügen
    By ckd1987 in forum Deutsche
    Replies: 0
    Last Post: 2009-04-08, 02:21 PM
  5. Kundennummer erzeugen lassen
    By osiemen in forum Deutsche
    Replies: 1
    Last Post: 2007-11-29, 10:01 AM

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •