AlwinKolano Posted August 26, 2015 Share Posted August 26, 2015 (edited) Używam standardowego programu lojalnościowego (Lojalność klientów i nagrody v1.2.8) w prestashop 1.6.0.14, chciałbym, aby tabelka "moje punkty lojalnościowe" dostępna w Moje Konto posiadała dodatkową kolumnę ważne do: z tego co znalazłem to trzeba przerobić plik loyalty.tpl, ale póki co udało mi się tylko dodać dodatkową kolumnę: <table id="order-list" class="table table-bordered table-atm"> <thead> <tr> <th class="first_item">{l s='Order' mod='loyalty'}</th> <th class="item">{l s='Date' mod='loyalty'}</th> <th class="item">{l s='Ważne do'}</th> <th class="item">{l s='Points' mod='loyalty'}</th> <th class="last_item">{l s='Points Status' mod='loyalty'}</th> </tr> </thead> <tfoot> <tr class="alternate_item"> <td colspan="3" class="history_method bold" style="text-align:center;">{l s='Total points available:' mod='loyalty'}</td> <td class="history_method" style="text-align:left;">{$totalPoints|intval}</td> <td class="history_method"> </td> </tr> </tfoot> <tbody> {foreach from=$displayorders item='order'} <tr class="cieniowanie"> <td class="history_link bold">{l s='#' mod='loyalty'}{$order.id|string_format:"%06d"}</td> <td class="history_date">{dateFormat date=$order.date full=1}</td> <td class="history_date">co tutaj wpisać ???</td> <td class="history_method">{$order.points|intval}</td> <td class="history_method">{$order.state|escape:'html':'UTF-8'}</td> </tr> {/foreach} </tbody> </table> no ale właśnie nie wiem co tam mogę wpisać, chciałbym aby było to $order.date + PS_LOYALTY_VALIDITY_PERIOD Czy mogę liczyć na waszą pomoc ? Z góry dziękuję. Edited August 26, 2015 by AlwinKolano (see edit history) Link to comment Share on other sites More sharing options...
vekia Posted August 27, 2015 Share Posted August 27, 2015 nie sprawdzałem tego modułu, ale jeżeli powiesz mi jaki format daty (dni? czy data?) jest przechowywany w zmiennej PS_LOYALTY_VALIDITY_PERIOD to jestesmy w domu ;-) Link to comment Share on other sites More sharing options...
AlwinKolano Posted August 27, 2015 Author Share Posted August 27, 2015 (edited) nie sprawdzałem tego modułu, ale jeżeli powiesz mi jaki format daty (dni? czy data?) jest przechowywany w zmiennej PS_LOYALTY_VALIDITY_PERIOD to jestesmy w domu ;-) Są to dni, PS_LOYALTY_VALIDITY_PERIOD jest to nazwa zmiennej występująca w tabeli ps_configuration, natomiast w "value" są przechowywane dni Edit: Obecnie wykombinowałem coś takiego: <td class="history_date">{strtotime('+60 day',strtotime($order.date))|date_format:"%Y-%m-%d"}</td> Wygląda, że działa ale jak widać wpisałem z palca wartość dni, czy w ogóle jest możliwość, aby w pliku tpl odwołać się do bazy i pobrać tą wartość jaką podałem powyżej ? Dziękuję za zainteresowanie Edited August 27, 2015 by AlwinKolano (see edit history) Link to comment Share on other sites More sharing options...
Yabber Posted August 28, 2015 Share Posted August 28, 2015 Musisz kontrolerem modułu wysłać tą zmienną do templatki. Modyfikujesz kontroler: /modules/loyalty/controllers/front/default.php Na samym końcu mała zmiana: $val_period = strtotime('PS_LOYALTY_VALIDITY_PERIOD'); $this->context->smarty->assign(array( 'nbDiscounts' => (int)$nb_discounts, 'discounts' => $discounts, 'minimalLoyalty' => (float)Configuration::get('PS_LOYALTY_MINIMAL'), 'val_period' => $val_period, 'categories' => $categories_names)); $this->setTemplate('loyalty.tpl'); Zmienna w templatce: $val_period Link to comment Share on other sites More sharing options...
vekia Posted August 28, 2015 Share Posted August 28, 2015 ja bym to zrobił bez modyfikacji php po zmienną można uzyskać z Configuration::get rozwiązanie: {assign var='days' value="+ {Configuration::get('PS_LOYALTY_VALIDITY_PERIOD')} day"} {strtotime($days, strtotime($order.date_add))|date_format:"%Y-%m-%d"} Link to comment Share on other sites More sharing options...
vekia Posted August 28, 2015 Share Posted August 28, 2015 tak to wygląda na froncie (nie chciało mi sie tworzyć nowej kolumny, data w kolumnie Status, za statusem) do daty dodałem 365 dni jak w kodzie który wkleiłem Link to comment Share on other sites More sharing options...
AlwinKolano Posted August 28, 2015 Author Share Posted August 28, 2015 bardzo dziękuję Vekia, wszystko ładnie działa (musiałem tylko zamienić $order.date_add na $order.date ponieważ wstawiała się data z rokiem 1970) Link to comment Share on other sites More sharing options...
vekia Posted August 30, 2015 Share Posted August 30, 2015 w ps 1.6.1.1 jest już date_add więc po aktualizacji do tej wersji, chyba będzie trzeba to podmienić :-) Link to comment Share on other sites More sharing options...
Yabber Posted August 30, 2015 Share Posted August 30, 2015 @Vekia ty zmodyfikowałeś templatkę listy zamówień , a chodzi o loyalty.tpl. I tam jest zmienna {dateFormat date=$order.date full=0}. W 1.6.1.1 jest tak samo. Link to comment Share on other sites More sharing options...
vekia Posted August 30, 2015 Share Posted August 30, 2015 zbaraniałem faktycznie, niekontaktowałem chyba zbytnio Link to comment Share on other sites More sharing options...
AlwinKolano Posted September 8, 2015 Author Share Posted September 8, 2015 (edited) myślałem, że konfiguracje modułu mam za sobą, niestety wygląda że ten moduł to jedna wielka niedoróbka. Problem jest następujący klient składa zamówienia za każde 1zł otrzymuje 1pkt. punkty są ważne przez 90dni i to działaPunkty się przekształca w BON/kupon/voucher który z założenia ma mieć ważność 3dni, z tego co doszedłem to trzeba przerobić plik \loyalty\controllers\front\default.php a dokładnie linie $cart_rule->date_to = date('Y-m-d H:i:s', strtotime($cart_rule->date_from.' +1 year')); na $cart_rule->date_to = date('Y-m-d H:i:s', strtotime($cart_rule->date_from.' +3 day')); i w teorii działa, ale niech ktoś mi wytłumaczy dlaczego date_from to tak naprawdę data złożenia zamówienia a nie data bieżąca ?? Funkcja przekształcania na BON wygląda tak: public function processTransformPoints() { $customer_points = (int)LoyaltyModule::getPointsByCustomer((int)$this->context->customer->id); if ($customer_points > 0) { /* Generate a voucher code */ $voucher_code = null; do $voucher_code = 'FID'.rand(1000, 100000); while (CartRule::cartRuleExists($voucher_code)); // Voucher creation and affectation to the customer $cart_rule = new CartRule(); $cart_rule->code = $voucher_code; $cart_rule->id_customer = (int)$this->context->customer->id; $cart_rule->reduction_currency = (int)$this->context->currency->id; $cart_rule->reduction_amount = LoyaltyModule::getVoucherValue((int)$customer_points); $cart_rule->quantity = 1; $cart_rule->highlight = 1; $cart_rule->quantity_per_user = 1; $cart_rule->reduction_tax = (bool)Configuration::get('PS_LOYALTY_TAX'); // If merchandise returns are allowed, the voucher musn't be usable before this max return date $date_from = Db::getInstance()->getValue(' SELECT UNIX_TIMESTAMP(date_add) n FROM '._DB_PREFIX_.'loyalty WHERE id_cart_rule = 0 AND id_customer = '.(int)$this->context->cookie->id_customer.' ORDER BY date_add DESC'); if (Configuration::get('PS_ORDER_RETURN')) $date_from += 60 * 60 * 24 * (int)Configuration::get('PS_ORDER_RETURN_NB_DAYS'); $cart_rule->date_from = date('Y-m-d H:i:s', $date_from); //$cart_rule->date_to = date('Y-m-d H:i:s', strtotime($cart_rule->date_from.' +1 year')); $cart_rule->date_to = date('Y-m-d H:i:s', strtotime($cart_rule->date_from.' +3 day')); $cart_rule->minimum_amount = (float)Configuration::get('PS_LOYALTY_MINIMAL'); $cart_rule->minimum_amount_currency = (int)$this->context->currency->id; $cart_rule->active = 1; $categories = Configuration::get('PS_LOYALTY_VOUCHER_CATEGORY'); if ($categories != '' && $categories != 0) $categories = explode(',', Configuration::get('PS_LOYALTY_VOUCHER_CATEGORY')); else die (Tools::displayError()); $languages = Language::getLanguages(true); $default_text = Configuration::get('PS_LOYALTY_VOUCHER_DETAILS', (int)Configuration::get('PS_LANG_DEFAULT')); foreach ($languages as $language) { $text = Configuration::get('PS_LOYALTY_VOUCHER_DETAILS', (int)$language['id_lang']); $cart_rule->name[(int)$language['id_lang']] = $text ? strval($text) : strval($default_text); } $contains_categories = is_array($categories) && count($categories); if ($contains_categories) $cart_rule->product_restriction = 1; $cart_rule->add(); //Restrict cartRules with categories if ($contains_categories) { //Creating rule group $id_cart_rule = (int)$cart_rule->id; $sql = "INSERT INTO "._DB_PREFIX_."cart_rule_product_rule_group (id_cart_rule, quantity) VALUES ('$id_cart_rule', 1)"; Db::getInstance()->execute($sql); $id_group = (int)Db::getInstance()->Insert_ID(); //Creating product rule $sql = "INSERT INTO "._DB_PREFIX_."cart_rule_product_rule (id_product_rule_group, type) VALUES ('$id_group', 'categories')"; Db::getInstance()->execute($sql); $id_product_rule = (int)Db::getInstance()->Insert_ID(); //Creating restrictions $values = array(); foreach ($categories as $category) { $category = (int)$category; $values[] = "('$id_product_rule', '$category')"; } $values = implode(',', $values); $sql = "INSERT INTO "._DB_PREFIX_."cart_rule_product_rule_value (id_product_rule, id_item) VALUES $values"; Db::getInstance()->execute($sql); } // Register order(s) which contributed to create this voucher if (!LoyaltyModule::registerDiscount($cart_rule)) $cart_rule->delete(); } Tools::redirect($this->context->link->getModuleLink('loyalty', 'default', array('process' => 'summary'))); } Chciałbym ostatecznie przerobić ten moduł aby ważność BONU liczona była od momentu jego utworzenia ale w takim wypadku potrzebuję pobrać aktualną bieżącą datę z bazy ale jak to zrobić to tego nie wiem.Niech mnie ktoś poprawi czy dobrze kombinuję. Czy to zagra ? chcę przerobić następującą część kodu: $date_from = Db::getInstance()->getValue(' SELECT UNIX_TIMESTAMP(date_add) n FROM '._DB_PREFIX_.'loyalty WHERE id_cart_rule = 0 AND id_customer = '.(int)$this->context->cookie->id_customer.' ORDER BY date_add DESC'); Edited September 8, 2015 by AlwinKolano (see edit history) Link to comment Share on other sites More sharing options...
AlwinKolano Posted September 8, 2015 Author Share Posted September 8, 2015 grunt to napisać i zaraz znaleźć rozwiązanie https://www.prestashop.com/forums/topic/434502-voucher-from-loyalty-points-valid-from-date-in-a-year-time-pscsx-5169/ wystarczy dopisać if ($date_from > time()) $date_from = time(); Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now