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.