Jump to content
  • 0

Zmiana sposobu wyboru grup dla których jest cena specjalna na multiwybór


And63

Question

Jeśli dodajemy specjalne na dany produkt dla grup klientów to do wyboru mamy albo wszystkie grupy, albo dodawanie każdej grupy osobno.

 

Jak zrobić żeby za jednym zamachem dodaś obniżkę ceny dla kilku grup za jednym zamachem.

Moje próby nie przynoszą efektu.

W częsci admina w templatkach, a konkretnie w \admin_123\themes\default\template\controllers\products\prices.tpl  jest kod odpowiedzialny za  formularz:



<select name="sp_id_group" id="sp_id_group" >
                       <option value="0">{l s='All groups'}</option>
                      {foreach from=$groups item=group}
                                <option value="{$group.id_group}">{$group.name} </option>
                                {/foreach}
</select>


 

Zmieniłem go na:



<select multiple name="sp_id_group" id="sp_id_group" size="8" >
                       <option value="0">{l s='All groups'}</option>
                      {foreach from=$groups item=group}
                                <option value="{$group.id_group}">{$group.name} </option>
                                {/foreach}
</select>


 

Efekt jest taki, że mogę dokonać multiwyboru grup klientów, ale jak dam zapisz to dodaje cenę specjalną tylko do jednej grupy klientów - do tej o najwyższym ID.

 

chodzi dokładnie o ten formularz zaznaczony czerwoną ramką:

 

grupy.jpg

 

Macie jakiś pomysł żeby zadziałał multiwybór ?

Edited by And63 (see edit history)
Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 0

tak, chodzi o funkcję:

public function processPriceAddition()
	{
		// Check if a specific price has been submitted
		if (!Tools::getIsset('submitPriceAddition'))
			return;

		$id_product = Tools::getValue('id_product');
		$id_product_attribute = Tools::getValue('sp_id_product_attribute');
		$id_shop = Tools::getValue('sp_id_shop');
		$id_currency = Tools::getValue('sp_id_currency');
		$id_country = Tools::getValue('sp_id_country');
		$id_group = Tools::getValue('sp_id_group');
		$id_customer = Tools::getValue('sp_id_customer');
		$price = Tools::getValue('leave_bprice') ? '-1' : Tools::getValue('sp_price');
		$from_quantity = Tools::getValue('sp_from_quantity');
		$reduction = (float)(Tools::getValue('sp_reduction'));
		$reduction_type = !$reduction ? 'amount' : Tools::getValue('sp_reduction_type');
		$from = Tools::getValue('sp_from');
		if (!$from)
			$from = '0000-00-00 00:00:00';
		$to = Tools::getValue('sp_to');
		if (!$to)
			$to = '0000-00-00 00:00:00';
									
		if ($reduction_type == 'percentage' && ((float)$reduction <= 0 || (float)$reduction > 100))
			$this->errors[] = Tools::displayError('Submitted reduction value (0-100) is out-of-range');
		elseif ($this->_validateSpecificPrice($id_shop, $id_currency, $id_country, $id_group, $id_customer, $price, $from_quantity, $reduction, $reduction_type, $from, $to, $id_product_attribute))
		{
			$specificPrice = new SpecificPrice();
			$specificPrice->id_product = (int)$id_product;
			$specificPrice->id_product_attribute = (int)$id_product_attribute;
			$specificPrice->id_shop = (int)$id_shop;
			$specificPrice->id_currency = (int)($id_currency);
			$specificPrice->id_country = (int)($id_country);
			$specificPrice->id_group = (int)($id_group);
			$specificPrice->id_customer = (int)$id_customer;
			$specificPrice->price = (float)($price);
			$specificPrice->from_quantity = (int)($from_quantity);
			$specificPrice->reduction = (float)($reduction_type == 'percentage' ? $reduction / 100 : $reduction);
			$specificPrice->reduction_type = $reduction_type;
			$specificPrice->from = $from;
			$specificPrice->to = $to;
			if (!$specificPrice->add())
				$this->errors[] = Tools::displayError('An error occurred while updating the specific price.');
		}
	}

w kodzie który zmodyfikowałeś, masz name="sp_id_group", jeżeli masz tam opcję "multiple" to przy wyborze kilku grup, zmienna $_POST['sp_id_group'] nie będzie w formacie int tylko będzie tablicą

 

cały kod funkcji wkładamy w funkcję foreach

 

foreach ($_POST['sp_id_group'] as $key=>$value) i w definicji cech obiektu zamiast $specificPrice->id_group = (int)($id_group); używamy $specificPrice->id_group = (int)($value)

Link to comment
Share on other sites

  • 0

Naprawdę nikt nie ma na to pomysłu?

Problem jest naprawdę uciążliwy jak masz dodać specjalną cenę dla 10 produktów i dla 15 grup klientów...

Robienie tego co tydzień to masakra, a tak zamiast 150 kliknięć myszą byłoby 10...

Link to comment
Share on other sites

  • 0

problem jest dość zagmatwany, głwónie z uwagi na fakt, że baza "cen specjalnych" nie jest przystosowana do przechowywania więcej niż 1 grupy klientów

 

dhS016V.png

 

w związku z czym, trzeba by było zmodyfikować kontroler tak, aby wykonał "loop" na wszystkich wybranych grupach i dodał je do bazy jako "osobne".

 

 

btw. "wszystkie grupy" nie spełnia Twoich wymagań? ;)

Link to comment
Share on other sites

  • 0

No właśnie o to chodzi, że "wszystkie grupy" mi nie pasują, dlatego, że mam 2 grupy, które nie dostają rabatów.

Opcja wszystkie grupy byłaby ok, gdyby było można wykluczyć z niej konkretne grupy o przykładowo ID 1 i 8, czyli jeśli mam 20 grup to cena specjalna byłaby dodawana do wszystkich oprócz tych dwóch - takie rozwiązanie też byłoby ok.

może to byłoby łatwiej zrealizować?

O którym kontrolerze piszesz w związku z loopem? - o tym: \controllers\admin\AdminProductsController.php ?

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...