Jump to content

standardowy program lojalnościowy - zmiana wyglądu tabelki z dostępnymi punktami


AlwinKolano

Recommended Posts

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 by AlwinKolano (see edit history)
Link to comment
Share on other sites

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 by AlwinKolano (see edit history)
Link to comment
Share on other sites

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

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

  • 2 weeks later...

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ła
Punkty 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 by AlwinKolano (see edit history)
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...