Avatar billede brummedk Nybegynder
03. marts 2009 - 21:50 Der er 16 kommentarer

hjælp til følgende..

Hej,

Jeg har følgende jeg har lavet/blandet sammen, og har brug for hjælp.
Den skal danne en csv.output fil til integration med Summa Summarum kunde databasen.

Helt optimalt ville være en mulighed for at afgrænse via datoer, så man undgår dobbelt import af kunder.

Koden:

class obb_packages_test extends obb_packages {

    /**
    * Class constructor
    *
    * @param mixed XML or array
    */
    function obb_packages_test ($data = '<root></root>'){
        $this->_data = $data;
        $this->pckg_key = 'test';
        $this->charset = $this->_get_local('charset') ? $this->_get_local('charset') : 'iso-8859-1';
        $this->httpOutputFormat = 'csv';    // can be name of method in the package or any of the following 'direct', 'csv', 'tsv' or 'xml'
        parent::init();
       
        // Set formatting and standalone on XML output
        $this->_response->formatOutput = true;
        $this->_response->xmlStandalone = true;
        $sql = "SELECT * FROM " . TABLE_LANGUAGES;
        $result = tep_db_query($sql);
        $this->languages['id'] = array();
        while ($row = tep_db_fetch_array($result)) {
            $this->languages[$row['languages_id']] = array('title' => $row['name'], 'code' => $row['code'], 'name' => $row['directory']);
            $this->languages[$row['directory']] = array('title' => $row['name'], 'code' => $row['code'], 'id' => $row['languages_id']);
            $this->languages[$row['code']] = array('title' => $row['name'], 'name' => $row['directory'], 'id' => $row['languages_id']);
            $this->languages['id'][] = $row['languages_id'];
        }
    }

    /**
    * Export data into an array of rows with arrays of data
    */
    function exportDataCSV() {
        $this->httpOutputFormat = 'csv';    // can be name of method in the package or any of the following 'direct', 'csv', 'tsv' or 'xml'
        $result = $this->_sql_query("SELECT * FROM " . TABLE_CUSTOMERS);
        for ($c=0; $c<mysql_num_fields($result); $c++) {
            $fields[] = mysql_field_name($result, $c);
        }
        $this->_result[] = $fields;
        while($row = tep_db_fetch_array($result)){
            $this->_result[] = $row;
        }
    }

    /**
    * Export data into an array of rows with arrays of data
    */
    function exportDataTSV() {
        $this->httpOutputFormat = 'tsv';    // can be name of method in the package or any of the following 'direct', 'csv', 'tsv' or 'xml'
        $result = $this->_sql_query("SELECT * FROM " . TABLE_CUSTOMERS);
        for ($c=0; $c<mysql_num_fields($result); $c++) {
            $fields[] = mysql_field_name($result, $c);
        }
        $this->_result[] = $fields;
        while($row = tep_db_fetch_array($result)){
            $this->_result[] = $row;
        }
    }

    /**
    * XML export from database of customers
    */
    /**
    * Elements added for testing - the 02.03.2009 - KEC
    */
    function exportDataXML (){
        $this->httpOutputFormat = 'xml';    // can be name of method in the package or any of the following 'direct', 'csv', 'tsv' or 'xml'
        $this->_debugNode->appendChild($this->_createElement('function', 'showCustomers'));
        $result = $this->_sql_query("SELECT * FROM " . TABLE_CUSTOMERS);
        $user_query = tep_db_query('select c.*,ab.* from address_book ab, customers c where       
                  c.customers_id=ab.customers_id and c.customers_default_address_id=ab.address_book_id');
            while($row = tep_db_fetch_array($user_query)){
            $customer = $this->_createElementAttrs('customers','',array('id' => $row['customers_id']));
            $customer->appendChild($this->_createElement('firstname', $row['customers_firstname']));
            $customer->appendChild($this->_createElement('lastname', $row['customers_lastname']));
            $customer->appendChild($this->_createElement('street', $row['entry_street_address']));
            $customer->appendChild($this->_createElement('suburb', $row['entry_suburb']));
            $customer->appendChild($this->_createElement('postcode', $row['entry_postcode']));
            $customer->appendChild($this->_createElement('city', $row['entry_city']));
            $customer->appendChild($this->_createElement('company', $row['entry_company']));
            $customer->appendChild($this->_createElement('cvr', $row['entry_vat']));
            $customer->appendChild($this->_createElement('type', $row['entry_country_id']));
            $customer->appendChild($this->_createElement('email_address', $row['customers_email_address']));
            $customer->appendChild($this->_createElement('telephone', $row['customers_telephone']));
            $customer->appendChild($this->_createElement('fax', $row['customers_fax']));
            $this->_responseRoot->appendChild($customer);
        }
    }
   
    function csv_transform () {
        $xsl_file = DIR_FS_PCKG . $this->pckg_key . '/emails.xsl';
        $this->exportDataXML();
        $content = $this->xsl_transform($this->_getResponseXML(), $xsl_file);
        return $content;
    }
   
    function csv_transform2 () {
        $this->_result = $this->csv_transform();
    }
   
    function sendMeResult(){
        $content = $this->csv_transform();
        $to = $this->_get_local('email');
        if ($to){
            if($this->sendbyEmail($to, $content, 'Customers Addresses', 'addresses.csv')){
                return 'Addresses sent to ' . $to;
            }
            else return 'Failes to send email';
        }
        else return 'Please specify email';
    }
   
    function showCustomers() {
        $this->exportDataXML();
        return $this->_getResponseXML();
    }
}
?>
Avatar billede jakobdo Ekspert
04. marts 2009 - 09:59 #1
Er det ikke "bare" at tilføje en WHERE i denne linje sql:

$result = $this->_sql_query("SELECT * FROM " . TABLE_CUSTOMERS);
Avatar billede brummedk Nybegynder
04. marts 2009 - 11:23 #2
Hej Jakob,

Kan du fortælle mig hvad jeg kan slette/tage væk, for at kun have muligheden for at eksportere en csv.fil ?
Jeg er newbie og måske en for stor mundfuld at være gået igang med

/Brumme
Avatar billede jakobdo Ekspert
04. marts 2009 - 14:46 #3
Måske du skal fortælle mig hvad du præcist ønsker.
Dato er jo et vidt begreb. :o)
Avatar billede brummedk Nybegynder
04. marts 2009 - 15:26 #4
Hej Jakob,

Følgende er hvad jeg ønsker(på sigt)

Et output i csv format til Summa Summarum. Dette skal genereres på baggrund af kundedatabasen.
Dato mener jeg fx. 01.01.2009-31.01.2009, og næste gang jeg laver output er den 01.02.2009 til fx. den 05.02.2009, altså for at undgå dobbelt import af kunder.

På sigt vil jeg gerne kunne trække en output også på ordrer, leveringsadresser, til integration med Post Danmark Webpack.

/Brumme
Avatar billede jakobdo Ekspert
04. marts 2009 - 15:31 #5
Hvilke data har du i din tabel i dag ?
Har du et dato felt, som indsættes, når en kunde oprettes ?
Avatar billede brummedk Nybegynder
04. marts 2009 - 15:40 #6
navn, adresse, postnr, by, cvr, firma, dato for oprettelse, kundenr, telefonnr findes.
Dog er navn+efternavn og dato for oprettelse i start billedet på kundedelen og alle info igen når jeg går ind på den enkelte kunde, dog ikke datoen for oprettelsen.

Med datoen mener jeg at jeg ikke opretter kunder hver eneste dag, så derfor ville jeg gerne have denne kunne være variabel ved hjælp af indtastning inden kaldet udføres.
Avatar billede jakobdo Ekspert
04. marts 2009 - 15:49 #7
Noget ala:

$result = $this->_sql_query("SELECT * FROM " . TABLE_CUSTOMERS " . WHERE oprettelses_dato BETWEEN($fra_dato,$til_dato));

Og til og fra_dato kan så komme fra en formular.
Avatar billede brummedk Nybegynder
04. marts 2009 - 15:56 #8
Kunne jeg bede dig tage det jeg har sat ind og redigere det som du mener jeg skal gøre ?

Jeg kan se du er selvstændig med www.codebreaker.dk ? Opgave/r i fremtiden ?

/Brumme
Avatar billede jakobdo Ekspert
04. marts 2009 - 16:02 #9
Du bør nok give mig lidt mere info.

Hvilket format er oprettelsesdato ?
DATETIME ?

Og du kan evt. kontakte mig via msn: jakobdo (at) hotmail [dot] com
Så er det måske nemmere at få datatyper og koden på plads.
Avatar billede brummedk Nybegynder
04. marts 2009 - 16:24 #10
Kun dato, jeg går ud fra DATETIME er dato+klokkeslæt ?

Du får lige en mail/melding i aften. Jeg skal igang med at arbejde på shoppen omkring. kl. 20.00 i aften.

/brumme
Avatar billede jakobdo Ekspert
04. marts 2009 - 16:29 #11
Så må det være datatype DATE.

Så kunne et bud være:

function exportDataCSVDate($from,$to) {
    //$from = dato fra i formattet: YYYY-MM-DD
    //$to  = dato til i formattet: YYYY-MM-DD
    $this->httpOutputFormat = 'csv';    // can be name of method in the package or any of the following 'direct', 'csv', 'tsv' or 'xml'
    $result = $this->_sql_query("SELECT * FROM " . TABLE_CUSTOMERS . " WHERE oprettelse BETWEEN(".$from.",".$to.");");
    for ($c=0; $c<mysql_num_fields($result); $c++) {
        $fields[] = mysql_field_name($result, $c);
    }
    $this->_result[] = $fields;
    while($row = tep_db_fetch_array($result)){
        $this->_result[] = $row;
    }
}
Avatar billede brummedk Nybegynder
05. marts 2009 - 00:04 #12
Hej Jakob,

Håber du fik lidt søvn i nat, og junior sov lidt længere end 05.15 ?? :-)

Der er nogle små fejl, eller nærmere rettelser jeg mangler.

Fornavn + efternavn i skal samles i ét felt(Summa kan kun klare det i ét felt)?

Æ/Ø/Å kan vi gøre noget der ?

2009-03-04 10:23:08 - kan denne vendes til 01.03.2009 og uden klokken ? eller ?

På forhånd tak.
Hilsen
Kent
Avatar billede jakobdo Ekspert
05. marts 2009 - 08:15 #13
Nummer 1 og 3 kan løses med en sql som:

$result = $this->_sql_query("    SELECT
                                                                        `c`.`customers_id`,
                                                                        CONCAT(`c`.`customers_firstname`,`c`.`customers_lastname`) AS customers_name,
                                                                        `ab`.`entry_street_address`,
                                                                        `ab`.`entry_postcode`,
                                                                        `ab`.`entry_city`,
                                                                        `co`.`countries_name`,
                                                                        `c`.`customers_email_address`,
                                                                        `c`.`customers_telephone`,
                                                                        `ab`.`entry_vat`,
                                                                        `ab`.`entry_company`,
                                                                        DATE_FORMAT(`ci`.`customers_info_date_account_created`,'%d.%m.%Y) AS customers_created
                                                                    FROM
                                                                        `customers` `c`
                                                                    INNER JOIN
                                                                        `customers_info` `ci`
                                                                    ON
                                                                        `c`.`customers_id` = `ci`.`customers_info_id`
                                                                    INNER JOIN
                                                                        `address_book` `ab`
                                                                    ON
                                                                        `ab`.`address_book_id` = `c`.`customers_default_address_id`
                                                                    INNER JOIN
                                                                        `countries` `co`
                                                                    ON
                                                                        `co`.`countries_id` = `ab`.`entry_country_id`
                                                                    WHERE
                                                                        `c`.`customers_id` > '".$sidste_kunde_id."';");

ÆØÅ skyldes data er i UTF8 format i dit udtræk.
Og det må vi lige kigge på senere.
Det kan nok løses med utf8_decode()
Avatar billede brummedk Nybegynder
05. marts 2009 - 09:00 #14
Godmorgen Jakob,

Håber natten gik godt ?

Der er en fejl i DATE ?

Sammentrækning af navn er ganske ok, dog ville et (mellemrum) mellem fornavn og efternavn være at foretrække.

/Brumme
Avatar billede brummedk Nybegynder
05. marts 2009 - 09:08 #15
Hov, opdagede lige at efternavn kommer 2 gange. 1 x sammentrukket med fornavn og 1 x efter (;)
Avatar billede jakobdo Ekspert
05. marts 2009 - 16:46 #16
Tilføj lige en '

DATE_FORMAT(`ci`.`customers_info_date_account_created`,'%d.%m.%Y') AS customers_created

og ang. navn, så skal det være:

CONCAT(`c`.`customers_firstname`,' ',`c`.`customers_lastname`) AS customers_name,
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester