Autor Wątek: [PHP] Dodawanie towary do Subiekta przez Sferę  (Przeczytany 1799 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline eSCe

  • Nowy użytkownik
  • *
  • Wiadomości: 1
  • Reputacja +0/-0
  • Wersja programu: Subiekt GT
[PHP] Dodawanie towary do Subiekta przez Sferę
« dnia: Lipiec 08, 2020, 19:09:55 »
Witam wszystkich forumowiczów ;)
jako, że ostatnio pisałem automat do faktur i paragonów dla sklepu internetowego i szukałem w sieci informacji, z którymi ciężko do Subiekta (chodzi o przykłady), więc przyszedł czas na rozkminy i oczywiście Manual Insert, który okazał się całkiem dobry i po jego okiełznaniu można napisać dosłownie wszystko ;)

Zatem podzielę się funkcją dodawania produktów na początek przygody z forum ;)
Funkcja przyjmuje jako parametr tablicę z danymi produktu:

$subiektProducts = array(
                            /** Wymagane do dodania produktu */
                            'Symbol'            => "Symbol",                                          // Wymagane (Unikalne)
                            'Nazwa'                            => "Nazwa",                                          // Wymagane
                           
                            /** Opcjonalne do dodania produktu */
                            'Ean'    => "Ean",                                                // Opcjonalne (Unikalne)
                            'SymbolUDostawcy'           => "Symbol u dostawcy",                          // Opcjonalne
                            'NazwaDlaUF'                    => "Nazwa dla drukarek",                         // Opcjonalne
                            'Opis'                                => Opis produktu,                                   // Opcjonalne
                            'CenaKartotekowa'             => Cena kartotekowa/1.23,                      // Opcjonalne
                            'Ceny'                      => array(
                                array(
                                    /** Klucz do aktualizacji cen (Id | Nazwa) */
                                    'Nazwa'  => 'Detaliczna',                      // Opcjonalne (w przypadku dodawania ceny - wymagane)
                                    'Brutto' => "Cena brutto",                    // Opcjonalne
                                    //'Netto'  => 12.00/1.23                      // Opcjonalne
                                    //'Zysk'   => 10.00,                            // Opcjonalne
                                    //'Narzut' => 20.00,                            // Opcjonalne
                                    //'Marza'  => 30.00                             // Opcjonalne
                                ),
                                array(
                                    /** Klucz do aktualizacji cen (Id | Nazwa) */
                                    'Nazwa'  => 'Hurtowa',                          // Opcjonalne (w przypadku dodawania ceny - wymagane)
                                    'Brutto' => "Cena brutto",                     // Opcjonalne
                                    //'Netto'  => 100.45/1.23                     // Opcjonalne
                                    //'Zysk'   => 10.00,                             // Opcjonalne
                                    //'Narzut' => 20.00,                            // Opcjonalne
                                    //'Marza'  => 30.00                             // Opcjonalne
                                ),
                                array(
                                    /** Klucz do aktualizacji cen (Id | Nazwa) */
                                    'Nazwa'  => 'Specjalna',                          // Opcjonalne (w przypadku dodawania ceny - wymagane)
                                    'Brutto' => "Cena brutto",                 // Opcjonalne
                                    //'Netto'  => 80.654/1.23                       // Opcjonalne
                                    //'Zysk'   => 10.00,                               // Opcjonalne
                                    //'Narzut' => 20.00,                              // Opcjonalne
                                    //'Marza'  => 30.00                              // Opcjonalne
                                )
                            )
                        );

Jeżeli chodzi o tablice z cenami to klucz przykładowo 'Nazwa'  => 'Detaliczna' jest wymagany gdy chcemy dodać cenę, bo po nim jest ona identyfikowana i powinna się zgadzać z tą co mamy w Subiekcie.
Więc taką tablicę wrzucamy jako parametr do funkcji ;)


Teraz czas na funkcję. Po krótce opiszę działanie, natomiast zainteresowani będą wiedzieli o co chodzi. Funkcja oczywiście automatycznie przycina długości danych do tych które obsługuje Subiekt.
1. Funkcja na samym początku sprawdza czy w ogóle coś do niej przekazaliśmy, jeżeli nie wyrzuca wyjątek.
2. Następnie sprawdzane są wymagane pola: nazwa oraz symbol, jeżeli pola występują przechodzimy dalej, jeżeli nie to zwracana jest tablica w formacie ERROR, RESPONSE, INFO i błędzie.
3. Następnie sprawdzamy Ean produktu i wywalamy z niego zbędne litery, pauzy, itp, chcemy czyste cyfry.
4. Jeżeli w ogóle przekazaliśmy Ean to sprawdzamy czy przypadkiem już takiego produktu nie ma w bazie subiekta.
5. Następnie sprawdzamy czy dodawany produkt już nie istnieje w bazie po symbolu.
6. Jeżeli towaru nie ma w bazie danych to uzupełniamy obiekt i dodajemy towar zwracając tablicę w formacie OK, RESPONSE, INFO.
7. Zamykamy obiekt (choć wydaje mi się że nie jest to konieczne w PHP ponieważ wg moich testów nie zauważyłem tutaj działania GC)
8. Jeżeli towar jednak istniał w bazie danych subiekta po symbolu bądź eanie to zwracamy tablicę w formacie OK, RESPONSE, INFO gdzie w RESPONSE jest zwrócony towar z bazy danych.

 
    /**
     *  Method add product to subiekt
     *
     * @return array
     */
    public function addProduct($productDetails = array()) {
        /** Check method parameter array */
if(\is_array($productDetails) && !empty($productDetails) && $productDetails != null ) {
            /** Check the requirement product data exists and format other data */
            if (!isset($productDetails['Symbol']) || $productDetails['Symbol'] == '' || !isset($productDetails['Nazwa']) || $productDetails['Nazwa'] == '') {
                return array(
                    'ERROR'      => 404,
                    'RESPONSE'   => 'Dodawanie produktu',
                    'INFO'       => '<strong>Wystąpił błąd! </strong>Pole symbol oraz nazwa są wymagane.'
                );
            }

            try {
                if(isset($productDetails['Ean']) && $productDetails['Ean'] != '') {
                    $productDetails['Ean'] = \preg_replace('/\D/', '', $productDetails['Ean']);
                }

                if(isset($productDetails['Ean']) && $productDetails['Ean'] != '') {
                    $eanCheck = !$this->subiekt->TowaryManager->IstniejeWg(\iconv("UTF-8", "Windows-1250", \number_format(\mb_substr($productDetails['Ean'], 0, 16), 0, '', '')), 3);
                }
                else {
                    $productDetails['Ean'] = '';
                    $eanCheck              = TRUE;
                }

                if(!$this->subiekt->TowaryManager->IstniejeWg(\iconv("UTF-8", "Windows-1250", \mb_substr($productDetails['Symbol'], 0, 20)), 2) && $eanCheck) {
                    /** Create towar object */
                    $towar = $this->subiekt->TowaryManager->DodajTowar();

                    /** Put requirement variables into towar object */
                    $towar->Symbol = \iconv("UTF-8", "Windows-1250", \mb_substr($productDetails['Symbol'], 0, 20));
                    $towar->Nazwa  = \iconv("UTF-8", "Windows-1250", \mb_substr($productDetails['Nazwa'],  0, 50));

                    /** Put optional variables into towar object */
                    (isset($productDetails['SymbolUDostawcy']) && $productDetails['SymbolUDostawcy'] != '') ? $towar->SymbolUDostawcy          = \iconv("UTF-8", "Windows-1250", \mb_substr($productDetails['SymbolUDostawcy'],        0, 20))             : null;
                    (isset($productDetails['Ean'])             && $productDetails['Ean']             != '') ? $towar->KodyKreskowe->Podstawowy = \iconv("UTF-8", "Windows-1250", \number_format(\mb_substr($productDetails['Ean'],     0, 16), 0, '', '')) : null;
                    (isset($productDetails['NazwaDlaUF'])      && $productDetails['NazwaDlaUF']      != '') ? $towar->NazwaDlaUF               = \iconv("UTF-8", "Windows-1250", \mb_substr($productDetails['NazwaDlaUF'],             0, 50))             : null;
                    (isset($productDetails['Opis'])            && $productDetails['Opis']            != '') ? $towar->Opis                     = \iconv("UTF-8", "Windows-1250", \mb_substr($productDetails['Opis'],                   0, 255))            : null;
                    (isset($productDetails['CenaKartotekowa']) && $productDetails['CenaKartotekowa'] != '') ? $towar->CenaKartotekowa          = \iconv("UTF-8", "Windows-1250", \number_format($productDetails['CenaKartotekowa'], 2, ',', ''))        : null;

                    /** Check the Ceny aarray exists */
                    if(isset($productDetails['Ceny']) && \is_array($productDetails['Ceny']) && $productDetails['Ceny'] != null) {
                        for($i = 1; $i <= $towar->Ceny->Liczba; $i++) {
                            $cena = $towar->Ceny->Element[$i];

                            foreach($productDetails['Ceny'] as $value) {
                                $kluczCeny = (\array_key_exists('Id', $value)) ? 'Id' : 'Nazwa';

                                if(isset($value[$kluczCeny]) && $value[$kluczCeny] != '') {
                                    if(\iconv("Windows-1250", "UTF-8", $cena->$kluczCeny) == $value[$kluczCeny]) {
                                        /** Put prices levels deatils into towar object */
                                        (isset($value['Netto'])  && $value['Netto']  != '') ? $cena->Netto  = \iconv("UTF-8", "Windows-1250", \number_format($value['Netto'],  2, ',', '')) : null;
                                        (isset($value['Brutto']) && $value['Brutto'] != '') ? $cena->Brutto = \iconv("UTF-8", "Windows-1250", \number_format($value['Brutto'], 2, ',', '')) : null;
                                        (isset($value['Zysk'])   && $value['Zysk']   != '') ? $cena->Zysk   = \iconv("UTF-8", "Windows-1250", \number_format($value['Zysk'],   2, ',', '')) : null;
                                        (isset($value['Marza'])  && $value['Marza']  != '') ? $cena->Marza  = \iconv("UTF-8", "Windows-1250", \number_format($value['Marza'],  2, ',', '')) : null;
                                        (isset($value['Narzut']) && $value['Narzut'] != '') ? $cena->Narzut = \iconv("UTF-8", "Windows-1250", \number_format($value['Narzut'], 2, ',', '')) : null;
                                    }                                   
                                }
                            }
                        }
                    }

                    /** Save towar object */
                    $towar->Zapisz();

                    $subiektResult = array(
                        'OK'         => 200,
                        'RESPONSE'   => array('Identyfikator' => \iconv("Windows-1250", "UTF-8", $towar->Identyfikator)),
                        'INFO'       => 'Poprawnie dodano towar o symbolu: <strong>'.\iconv("Windows-1250", "UTF-8", $towar->Symbol).'</strong> do subiekta.'
                    );

                    $towar->Zamknij();

                    return $subiektResult;
                }
                else {
                    if($this->subiekt->TowaryManager->IstniejeWg(\iconv("UTF-8", "Windows-1250", \mb_substr($productDetails['Symbol'], 0, 20)), 2)) {
                        $towar = $this->subiekt->TowaryManager->WczytajTowarWg(\iconv("UTF-8", "Windows-1250", \mb_substr($productDetails['Symbol'], 0, 20)), 2);
                    }
                    else {
                        $towar = $this->subiekt->TowaryManager->WczytajTowarWg(\iconv("UTF-8", "Windows-1250", \number_format(\mb_substr($productDetails['Ean'], 0, 16), 0, '', '')), 3);
                    }

                    $subiektResult['OK']                          = 201;
                    $subiektResult['RESPONSE']['Identyfikator']   = \iconv("Windows-1250", "UTF-8", $towar->Identyfikator);
                    $subiektResult['RESPONSE']['Symbol']          = \iconv("Windows-1250", "UTF-8", $towar->Symbol);
                    $subiektResult['RESPONSE']['SymbolUDostawcy'] = \iconv("Windows-1250", "UTF-8", $towar->SymbolUDostawcy);
                    $subiektResult['RESPONSE']['Ean']             = \iconv("Windows-1250", "UTF-8", $towar->KodyKreskowe->Podstawowy);
                    $subiektResult['RESPONSE']['Nazwa']           = \iconv("Windows-1250", "UTF-8", $towar->Nazwa);
                    $subiektResult['RESPONSE']['NazwaDlaUF']      = \iconv("Windows-1250", "UTF-8", $towar->NazwaDlaUF);
                    $subiektResult['RESPONSE']['Opis']            = \iconv("Windows-1250", "UTF-8", $towar->Opis);
                    $subiektResult['RESPONSE']['CenaKartotekowa'] = \iconv("Windows-1250", "UTF-8", $towar->CenaKartotekowa);

                    for( $i = 1; $i <= $towar->Ceny->Liczba; $i++) {
                        $cena =  $towar->Ceny->Element[$i];

                        $cenaNazwa = \iconv("Windows-1250", "UTF-8", $cena->Nazwa);
                       
                        $subiektResult['RESPONSE']['Ceny'][$cenaNazwa]['Id']     = \iconv("Windows-1250", "UTF-8", $cena->Id);
                        $subiektResult['RESPONSE']['Ceny'][$cenaNazwa]['Netto']  = \iconv("Windows-1250", "UTF-8", $cena->Netto);
                        $subiektResult['RESPONSE']['Ceny'][$cenaNazwa]['Brutto'] = \iconv("Windows-1250", "UTF-8", $cena->Brutto);
                    }

                    $subiektResult['INFO']  = 'Towar o symbolu: <strong>'.\iconv("Windows-1250", "UTF-8", $towar->Symbol).'</strong> lub eanie: <strong>'.\iconv("Windows-1250", "UTF-8", $towar->KodyKreskowe->Podstawowy).'</strong> został wczytany z bazy danych subiekta.';

                    $towar->Zamknij();

                    return $subiektResult;
                }
            }
            catch (\com_exception $e) {
                return array(
                    'ERROR'      => 404,
                    'RESPONSE'   => 'Dodawanie produktu',
                    'INFO'       => '<strong>Wystąpił błąd '.\dechex($e->getCode()).': </strong>'.\iconv("Windows-1250", "UTF-8", $e->getMessage())
                );                   
            }                     
        }
        else {
             \trigger_error('<strong>Function parameter error!</strong> productDetails array cannot be empty!', E_USER_ERROR);
        }    
    }

Mam nadzieję, że funkcja komuś się przyda, jeżeli tak i będzie zainteresowanie to udostępnię jeszcze coś ;)
Mam nadzieję że zainteresowani wiedzą jak wygląda połączenie z Subiektem, Import dodatku COM itp.

Forum Użytkownikow Subiekt GT

[PHP] Dodawanie towary do Subiekta przez Sferę
« dnia: Lipiec 08, 2020, 19:09:55 »