Skocz do zawartości

Rekomendowane odpowiedzi

Sklep sprzedawał będzie elementy balustrad i istnieje konieczność aby każde zamówienie było sprawdzone/poprawione przez administratora sklepu przed zapłatą a nawet przed wyborem metody wysyłki. Chciałbym wdrożyć rozwiązanie które podczas zakupu umożliwi skompletowanie i złożenie zamówienia ale na razie bez możliwości płatności, najlepiej też bez wyboru kuriera. Dopiero gdy administrator sprawdzi że zamówienie jest prawidłowe i do zrealizowania to potwierdza zamówienie i klient dostanie link do płatności w emailu.

 

Zakładam więc że zmiana dotyczyłaby:

  1. usunięcia 2 kroków zamówienia - wybór metody płatności i wysyłki.
  2. wygenerowania wiadomości email z linkiem do płatności
  3. zmian językowych aby to było spójne

 

Czy są jakieś gotowe moduły które umożliwiają podpunkt 1 i 2 ?

Czy ktoś może wdrażał coś podobnego? Moze jakieś porady?

Czy mogę po prostu przeskoczyć 2 kroki zamówienia bez uszkodzenia zamówienia?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

W pierwszej kolejności pytanie czy sklep będzie realizował sprzedaż dla konsumentów?

bo jeżeli tak to takie rozwiązanie nie wchodzi w grę  - patrz ustawa

 

Ad.1 - no widzisz problem w tym, że zamówienie jest tworzone po przejściu procesu płatności, i o ile wybór sposobu dostawy dało by się jakoś ominąć to płatności już nie bardzo. Aczkolwiek dało by sie to jakoś obejść

Poza tym w grę wchodzi modyfikacja  także panelu admina (karta zamówienia)

Ad.2 - wszystko zalezy od tego jaki miał by to być sposób płatności

 

gotowych modułów nie ma (przynajmniej ja się z nimi nie spotkałem) tzn nie ma takich które by kompleksowo rozwiązały twój problem

są moduły do edycji i dodawania sposobów dostawy

są moduły do edycji i zmiany sposobów płatności

 

ale tak czy siak trzeba by posiedzieć nad tematem i pomyśleć jak to najprościej zrobić ;) i tak aby było zgodne z prawem

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

W pierwszej kolejności pytanie czy sklep będzie realizował sprzedaż dla konsumentów? bo jeżeli tak to takie rozwiązanie nie wchodzi w grę  - patrz ustawa

 

Przyznam że nie znalazłem takiego ograniczenia. Czy chodzi o to że zakup w sklepie jest wiążący? Wydaje mi się że w którymś "dużym" sklepie (typu agito, olele czy innym) widziałem że po zamówieniu dopiero pracownik określał czy mają towar i dopiero wtedy można było zapłacić (tu chodzi o coś takiego samego). Było to już jednak jakiś czas temu. Zakładałem że odpowiednio formułując komunikaty można zmienić "kupuję z obowiązkiem zapłaty" na "składam zamówienie". Przesunęłoby to moment ustawowej sprzedaży na moment potwierdzenia przez pracownika i że nie kolidowałoby z przepisami. Chyba że chodzi o inne obostrzenia?

 

Co do metody wysyłki to zakładam że jeden z modułów pośredniczących - np. payU.

 

Co do samego mechanizmu to płatność jest na samym końcu więc do przeskoczenia byłby jeden krok, ustawiając jako moduł płatności np. bankwire i zmieniając komunikat na "proszę o sprawdzenie zamówienia przez pracownika sklepu" można by uzyskać jakieś rozwiązanie. Dziękuję za podpowiedź, napiszę jak to rozwiążę.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

tutaj @sower ma troche racji. przede wszystkim przegladnij ustawe, tak ta z 03.2000 jak i z 06.2014 i zobacz czy mozesz gdzies sie podpiac z taka "niby" oferta.

 

swojego czasu robilem cos tego typu z zapytaniami o wycene hurtowa, jednak nie bylo tam podanych na sklpei cen, tylko wrzucalo sie towar do koszyka i ten przychodzil jako lista na maila i dopeiro wtedy juz droga mailowa bylo to w calosci wyceniane przez sprzedawce. tutaj sprawa byla oczywista. sklep nie byl sklepem tylko platforma ofertowa. nie bylo cen co i tez US nie kusilo i nikt nie mogl sie przyczepic.

 

jezeli bedziesz oferte stawial w takim systemie to tutaj jak najmniejszego problemu. ale jak juz umeiszczasz ceny na sklepie to te musisz wskazywac scisle... no, chyba ze oddasz do napisania regulamin jakiemus naprawde dobremu prawnikowi gospodarczemu i w tym regulaminie cos tam poleje wody na jakiej zasadzie dziala sklep itp. ale to juz sliska sprawa, dlatego pisze, ze musialby byc dobry.

 

inaczej patrzac, od storny klienta. skladam zamowienie i....?  czekam godzine, dwie, pol dnia, tydzien na wycene? i co dalej? juz nawet ta godzina... jako klient mam siedziec przy komputerze i czekac az nagle okazuje sie, ze mam doliczone 500-1000zl ? do mojego zamowienia? a juz jak naweet na ta doplate sie zgadzam to niby jak mam to potwierdzic zeby moc dokonac wplaty przez, jak to chcesz, PayU ? przeciez juz sie wylogowalem, sesja mi minela.... koszyk przepadl, zamowienie zlozone, a co za tym idzie wyliczona kwota poszla juz do bazy danych.... no... jakos tego nie widze tak do konca.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

tutaj @sower ma troche racji. przede wszystkim przegladnij ustawe, tak ta z 03.2000 jak i z 06.2014 i zobacz czy mozesz gdzies sie podpiac z taka "niby" oferta.

 

dzięki, poczytam i sprawdzę

 

swojego czasu robilem cos tego typu z zapytaniami o wycene hurtowa, jednak nie bylo tam podanych na sklpei cen, tylko wrzucalo sie towar do koszyka i ten przychodzil jako lista na maila i dopeiro wtedy juz droga mailowa bylo to w calosci wyceniane przez sprzedawce. tutaj sprawa byla oczywista. sklep nie byl sklepem tylko platforma ofertowa. nie bylo cen co i tez US nie kusilo i nikt nie mogl sie przyczepic.

 

jezeli bedziesz oferte stawial w takim systemie to tutaj jak najmniejszego problemu. ale jak juz umeiszczasz ceny na sklepie to te musisz wskazywac scisle... no, chyba ze oddasz do napisania regulamin jakiemus naprawde dobremu prawnikowi gospodarczemu i w tym regulaminie cos tam poleje wody na jakiej zasadzie dziala sklep itp. ale to juz sliska sprawa, dlatego pisze, ze musialby byc dobry.

 

inaczej patrzac, od storny klienta. skladam zamowienie i....?  czekam godzine, dwie, pol dnia, tydzien na wycene? i co dalej? juz nawet ta godzina... jako klient mam siedziec przy komputerze i czekac az nagle okazuje sie, ze mam doliczone 500-1000zl ? do mojego zamowienia? a juz jak naweet na ta doplate sie zgadzam to niby jak mam to potwierdzic zeby moc dokonac wplaty przez, jak to chcesz, PayU ? przeciez juz sie wylogowalem, sesja mi minela.... koszyk przepadl, zamowienie zlozone, a co za tym idzie wyliczona kwota poszla juz do bazy danych.... no... jakos tego nie widze tak do konca.

 

Kombinacja wynika z tego że z uwagi na charakter sprzedaży, większość zleceń wymaga sprawdzenia i poprawy. Jeśli ktoś zamawia barierkę o określonej długości to zwykle nie bierze pod uwagę pewnych rzeczy które trzeba nanieść na zamówienie (nie ja odpowiadam za sprzedaż więc wiem jedynie że tak jest, nie do końca wiem dlaczego). Pomijając sprawę prawną, zakładałem że przeskakując krok płatności klient finalizuje zamówienie które administrator poprawia na zapleczu, najpewniej konsultując telefonicznie z klientem szczegóły i wtedy puszcza dalej.

 

Płatność to formularz przekierowujący na PayU z numerem zamówienia w jednym  z pól i powinno dać się go wygenerować także po przejściu samego zamówienia ale widzę że wszystko do dopisania. Choć generowanie linku do płatności powinno przydać się też w innych okolicznościach.

 

Bardzo dziękuję za pomoc, dam znać co wymyśliłem jeśli podejmę się wdrożenia.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

co do samej idei tego porpawiania przez sprzedajacego to jak najbardizej zrozumiale. nie kazdy jest specem od barierek, zeby wszystko barc pod uwage ;) ja jak projektowalem sobie pierwsze meble do domu (to byla szafa z 3 drzwiamy przesuwnymi) to wyszly mi pieknie na rysunku drzwi 60-80-60 i takie tez podawalem rozmiary do stolarni, co sie pozniej okazalo.... no, do kazdego z rozmiarow trzezba bylo dodac jeszcze po 2cm, zeby te na siebie nachodzily ;) dobrze, ze do projektu dolaczylem rowniez projekt 3D z wymiarami calosciowymi. szkic jedno a praktyka drugie ;)

 

tak samo mamy i tutaj. za cholere nie moge sobie przyponiec co nakombinowalem w tej stronie hurtowni, ze mi to tak ladnie dzialalo, a pominalem przewoznikow i platnosci... zagladalem, to zostala u klienta tylko storna detaliczna z niedzialajacym linkiem do storny hurtowni, chyba zapomnial oplacic domene :D - pamietam, ze przycisk "dodaj do koszyka" zminialem na "dodaj do zapytania" - tak samo byl nazwany koszyk (tez jako "twoje zapytanie"). ale jak to dzialalo dokladnie dalej ;/ za cholere nie moge sobie tego przypominec, a byl to projekt sprzed ~4-5lat jeszcze na chyba 1.4.

 

mysle, ze to moglo by byc rozwiazaniem, zrzucanie takiego "zamowienia" do zapytania o szegolowa wycene tylko kwestia platnosci musiala by juz odbywac sie poza presta, raczej tutaj nie widze mozliwosci zeby po takiej "reanalizie" zamowienia byla mozliwosc dania klientowi mozliwosci platnosci z samej presta.  ewentualnie, cos na bazie storny historia - wejscie ponowne klienta do storny przez swojego emaila i nr zamowienia.... ale tak czy tak trzeba by juz do tego pisac osony kontroler.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Witam, ja również poszukuję możliwości potwierdzania zamówień przez admina przed płatnością (bez zmiany cen) w przypadku np kiedy towar nie będzie chwilowo dostępny. Czy udało się znaleźć jakieś rozwiązanie?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się



  • Podobna zawartość

    • Przez daars_pl
      Witam,
      Czy ktoś jest w stanie polecić moduł sprawnej wyszukiwarki produktów, lub ew. możliwość modyfikacji standardowej ?
      Tak aby przy produktach typu VR-50HD nie było kłopotu znalezienia go przy frazach 'vr50hd' 'vr 50hd' 'vr 50 hd' 'vr50-hd' 'vr50' itp. opcje wpisywania z odstępami, myślnikami i bez ?
      I żeby wyszukiwarka nie wyświetlała dodatkowo wielu niepotrzebnych produktów, które wcale nie mają takiej frazy w nazwie czy kategorii ? Ustawienia wag w panelu adm. nic nie dają.
      Pozdrawiam
    • Przez dih
       

      Jak w temacie - nie polecam firmy Foka na Tarasie Maciej Grudziński. Pan Maciej zgłosił się do nas z ogłoszenia na Oferia.pl gdy szukaliśmy Programisty który miałby nam pomagać od czasu do czasu przy wdrożeniach opartych o PrestaShop. Gdy wstępnie się dogadaliśmy i Pan Maciej pobrał zaliczkę… kontakt się urwał. Nie odbierał potem telefonów, nie odpisywał na maile. Zlecenie nie zostało wykonane. Z naszej strony kroki prawne już zostały podjęte ale chcielibyśmy przestrzec innych użytkowników. Tym bardziej że jak czytam takich osób jak my jest znacznie więcej.
    • Przez ircykk
      Miałem  sporo pytań o taką usługę, chyba ostatnio wielu sprzedawców z allegro myśli o własnym sklepie :)
      Oferta: https://addonspresta.com/pl/content/19-import-aukcji-allegro-prestashop
    • Przez bonek04pl
      Witam serdecznie.
      Zduplikowałem moduł odpowiedzialny za wybieranie przy zamówieniu czy klient chce paragon i fakturę. Chciałem go zduplikować jako osobny moduł aby dodać jeszcze opcję wyboru Wniosku NFZ. Co zrobiłem aby zduplikować moduł:
      - Dodałem "2" do nazwy folderu oraz wszystkich plików które znajdują się w katalogu modułu (nie wliczając katalogów).
      - Wyedytowałem odpowiednio wszystkie pliki zduplikowanego stylu np. główny plik php:

       
      <?php if (!defined('_PS_VERSION_')) exit; class twParagonFaktura2 extends Module { const _PARAGON_FAKTURA2_ = 'tw_paragonfaktura2'; public static $documentType2 = array(); public function __construct() { $this->name = 'twparagonfaktura2'; $this->tab = 'billing_invoicing'; // front_office_features'; // $this->version = '1.0'; $this->author = 'Tomek Witek'; $this->need_instance = 0; $this->bootstrap = true; parent::__construct(); self::$documentType = array('Yes' => $this->l('Yes'), 'No' => $this->l('No') ); $this->displayName = $this->l('Receipt or invoice?'); $this->description = $this->l('The module allows you to choose the type of document confirming the purchase of goods (receipt or invoice)'); $this->ps_versions_compliancy = array('min' => '1.6', 'max' => _PS_VERSION_); } // ------------------------------------------------------------------------------------------------- __construct() public function addOverride($classname) { if ( version_compare(_PS_VERSION_, '1.6.1.0', '<') ) { return parent::addOverride($classname); } else { return true; } } // ------------------------------------------------------------------------------------------------- addOverride() public function install() { reset(self::$documentType); $sql = 'CREATE TABLE IF NOT EXISTS`'._DB_PREFIX_.self::_PARAGON_FAKTURA2_.'` ( `id_cart` int(11) NOT NULL, `document_type` ENUM(\''.implode("','", array_keys(self::$documentType) ).'\') NOT NULL DEFAULT \''.key(self::$documentType).'\', PRIMARY KEY(`id_cart`) ) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=UTF8;'; return( parent::install() && $this->registerHook('displayShoppingCartFooter') && $this->registerHook('displayReceiptInvoiceExtra') && $this->registerHook('displayOrderDetail') && $this->registerHook('displayAdminOrder') && $this->registerHook('displayAdminOrderExtra') && $this->registerHook('actionGetExtraMailTemplateVars') && Configuration::updateValue('TW_PARAGON_FAKTURA2', key(self::$documentType)) && Db::getInstance()->execute($sql) ); } // ------------------------------------------------------------------------------------------------- install() public function removeOverride($classname) { if ( version_compare(_PS_VERSION_, '1.6.1.0', '<') ) { return parent::removeOverride($classname); } else { return true; } } // ------------------------------------------------------------------------------------------------- removeOverride() public function uninstall() { $sql = 'DROP TABLE IF EXISTS `'._DB_PREFIX_.self::_PARAGON_FAKTURA2_.'`;'; return( parent::uninstall() && $this->unregisterHook('displayShoppingCartFooter') && $this->unregisterHook('displayReceiptInvoiceExtra') && $this->unregisterHook('displayOrderDetail') && $this->unregisterHook('displayAdminOrder') && $this->unregisterHook('displayAdminOrderExtra') && $this->unregisterHook('actionGetExtraMailTemplateVars') && Configuration::deleteByName('TW_PARAGON_FAKTURA2') && Db::getInstance()->execute($sql) ); } // ------------------------------------------------------------------------------------------------- uninstall() public function getContent() { if (Tools::isSubmit('submitSaveConfiguration')) { Configuration::updateValue('TW_PARAGON_FAKTURA2', Tools::getValue('TW_PARAGON_FAKTURA2')); } return $this->renderConfigForm(); } // ------------------------------------------------------------------------------------------------- getContent() public function renderConfigForm() { $fields_form = array( 'form' => array( 'legend' => array( 'title' => $this->l('Configuration'), 'icon' => 'icon-cogs' ), 'input' => array( array( 'type' => 'select', 'label' => $this->l('Default document'), 'name' => 'TW_PARAGON_FAKTURA2', 'desc' => $this->l('Set the default document confirming the purchase of goods'), 'options' => array( 'query' => $this->getDocumentTypes(), 'id' => 'id_option', 'name' => 'name' ), ), ), 'submit' => array( 'title' => $this->l('Save'), ) ), ); $helper = new HelperForm(); $helper->show_toolbar = false; $helper->table = $this->name; $lang = new Language((int)Configuration::get('PS_LANG_DEFAULT')); $helper->default_form_language = $lang->id; $helper->module = $this; $helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0; $helper->identifier = $this->identifier; $helper->submit_action = 'submitSaveConfiguration'; $helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name; $helper->token = Tools::getAdminTokenLite('AdminModules'); $helper->tpl_vars = array( 'fields_value' => array( 'TW_PARAGON_FAKTURA2' => Tools::getValue('TW_PARAGON_FAKTURA2', Configuration::get('TW_PARAGON_FAKTURA2')), ), 'languages' => $this->context->controller->getLanguages(), 'id_language' => $this->context->language->id ); return $helper->generateForm(array($fields_form)); } // --------------------------------------------------------------------------------------------------------- _renderConfigForm() public function getDocumentTypes() { $options = array(); foreach( self::$documentType as $docType => $docName ) { $options[] = array( 'id_option' => $docType, 'name' => $docName ); } return $options; } // --------------------------------------------------------------------------------------------------------- getDocumentTypes() public function getCurrentDocumentType($id_cart) { $sql = 'SELECT `document_type` FROM `'._DB_PREFIX_.self::_PARAGON_FAKTURA2_.'` WHERE `id_cart`='.$id_cart.';'; $currentDocument = Db::getInstance()->getValue($sql); return ( array_key_exists($currentDocument, self::$documentType) ? $currentDocument : 'unknow' ); } // --------------------------------------------------------------------------------------------------------- getCurrentDocumentType() public function getCurrentDocumentName($currentDocument, $unknow = 'unknow' ) { return ( array_key_exists($currentDocument, self::$documentType) ? self::$documentType[$currentDocument] : $unknow ); } // --------------------------------------------------------------------------------------------------------- getCurrentDocumentName() public function _prepareHook() { $this->context->controller->addCSS(($this->_path).'views/css/twparagonfaktura2.css', 'all'); $this->context->controller->addJS(($this->_path).'views/js/twparagonfaktura2.js'); // --------------------------- dodaje rekord jezeli nie istnieje (z domyslnym typem dokumentu - klient nie wybral rodzaju dokumentu) // --------------------------- dla danego koszyka (id_cart) zostanie wykonane tylko JEDEN RAZ! $sql = 'INSERT IGNORE INTO `'._DB_PREFIX_.self::_PARAGON_FAKTURA2_.'` (`id_cart`, `document_type`) VALUES ('.$this->context->cart->id.', "'.Configuration::get('TW_PARAGON_FAKTURA2').'" )'; Db::getInstance()->execute($sql); // --------------------------- odczytuje biezacy typ dokumentu, typ dokumentu moze byc inny niz po dodaniu rekordu // --------------------------- np po ponownym wejscu do koszyka - klient wczesniej zmienil typ dokumentu, // --------------------------- zobacz paragonfaktuta2.js, ajax2.php $currentDocument = $this->getCurrentDocumentType($this->context->cart->id); $this->smarty->assign(array( 'documentType' => self::$documentType, 'currentDocument' => $currentDocument, 'id_cart' => $this->context->cart->id, )); } // --------------------------------------------------------------------------------------------------------- _prepareHook() public function hookdisplayReceiptInvoiceExtra($params) { $this->_prepareHook(); return $this->display(__FILE__, 'views/templates/hook/paragonfaktura2.tpl'); } // --------------------------------------------------------------------------------------------------------- hookdisplayReceiptInvoiceExtra() public function hookDisplayShoppingCartFooter($params){ $this->_prepareHook(); return $this->display(__FILE__, 'views/templates/hook/paragonfaktura2.tpl'); } // --------------------------------------------------------------------------------------------------------- hookDisplayShoppingCartFooter() public function hookDisplayOrderDetail($params) { $currentDocument = $this->getCurrentDocumentType($params['order']->id_cart); if ($currentDocument == 'unknow') return false; $this->smarty->assign(array( 'currentDocument' => $currentDocument, 'currentDocumentTranslate' => $this->getCurrentDocumentName($currentDocument), )); return $this->display(__FILE__, 'views/templates/hook/order_detail2.tpl'); } // --------------------------------------------------------------------------------------------------------- hookDisplayOrderDetail() public function _prepareAdminHook() { $currentDocument = $this->getCurrentDocumentType($this->context->cart->id); $this->smarty->assign(array( 'currentDocument' => $currentDocument, 'currentDocumentTranslate' => $this->getCurrentDocumentName($currentDocument), )); } // --------------------------------------------------------------------------------------------------------- _prepareAdminHook() public function hookDisplayAdminOrder($params) { $this->_prepareAdminHook(); return $this->display(__FILE__, 'views/templates/admin/admin_orders2.tpl'); } // ---------------------------------------------------------------------------------------------------------- hookDisplayAdminOrder() public function hookDisplayAdminOrderExtra($params) { $this->_prepareAdminHook(); return $this->display(__FILE__, 'views/templates/admin/admin_orders2.tpl'); } // ---------------------------------------------------------------------------------------------------------- hookDisplayAdminOrderExtra() public function hookActionGetExtraMailTemplateVars($params) { if ($params['template'] == 'order_conf' || $params['template'] == 'new_order') { $currentDocument = $this->getCurrentDocumentType($this->context->cart->id); $params['extra_template_vars']['{receipt_invoice}'] = $this->getCurrentDocumentName($currentDocument, ''); } } // ---------------------------------------------------------------------------------------------------------- hookActionGetExtraMailTemplateVars() } Wszytko na pierwszy rzut oka powinno działać jednak gdy wybieram przy zamówieniu 1 pole (Paragon czy Faktura) to pod zarówno 1 jak i 2 polem na raz wyświetlają się błędy o uaktualnieniu i błędzie co skutkuje tym że 2 pole nie zmienia się po zakończeniu zamówienia (pozostaje domyslne - takie jakie jest ustawione w opcjach modułu) W bazie danych SQL tak samo widnieje tylko opcja domyślna, nie zmieniona.
      Gdzie robię błąd ?
       

      twparagonfaktura2.zip
    • Przez AnkaW
       
      Chciałabym zacząć budować szablony graficzne dla prestashop. Mam doświadczenie z html css i smarty, trochę z PHP. Obecnie zajmuję się grafiką w photoshop (taką do pocięcia na strony też). Chodzi mi o jakieś materiały w języku polskim najlepiej albo po prostu opis krok po kroku jak tworzyć takie szablony. Nie chodzi mi o przerabianie istniejących lub tego domyślnego. Chciałabym oferować te szablony (początkowo za darmo) tak aby ktoś mógł ściągnąć sobie plik zip i zainstalować w swoim sklepie.
      Proszę o pomoc i wytłumaczenie jak za to się zabrać od zera.
      bardzo dziękuję
      Anka
       
  • Przeglądający

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

  • Aktywni użytkownicy

    Nikt jeszcze nie otrzymał reputacji w tym tygodniu.

  • Statystyki forum

    • Tematów
      7617
    • Postów
      36554
×