<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Форум ReadyScript &mdash; Уменьшение количества товара и списание средств]]></title>
	<link rel="self" href="http://forum.readyscript.ru/feed/atom/topic/302/" />
	<updated>2015-03-23T15:04:37Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.readyscript.ru/topic/302/umenshenie-kolichestva-tovara-i-spisanie-sredstv/</id>
		<entry>
			<title type="html"><![CDATA[Re: Уменьшение количества товара и списание средств]]></title>
			<link rel="alternate" href="http://forum.readyscript.ru/post/1059/#p1059" />
			<content type="html"><![CDATA[<p>Спасибо огромное за помощь, все реализовано) Третий проект на ReadyScript ставлю и в этот раз понадобился дополнительный функционал заказчику. Великолепная техническая поддержка, по сравнению с другими CMS. Еще раз спасибо за помощь <img src="http://forum.readyscript.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /></p>]]></content>
			<author>
				<name><![CDATA[Дмитрий]]></name>
				<uri>http://forum.readyscript.ru/user/122/</uri>
			</author>
			<updated>2015-03-23T15:04:37Z</updated>
			<id>http://forum.readyscript.ru/post/1059/#p1059</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Уменьшение количества товара и списание средств]]></title>
			<link rel="alternate" href="http://forum.readyscript.ru/post/1044/#p1044" />
			<content type="html"><![CDATA[<p>Получить авторизованного пользователя можно так:<br /></p><div class="codebox"><pre><code>$user = \RS\Application\Auth::getCurrentUser()</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Александр]]></name>
				<uri>http://forum.readyscript.ru/user/20/</uri>
			</author>
			<updated>2015-03-22T06:36:46Z</updated>
			<id>http://forum.readyscript.ru/post/1044/#p1044</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Уменьшение количества товара и списание средств]]></title>
			<link rel="alternate" href="http://forum.readyscript.ru/post/1043/#p1043" />
			<content type="html"><![CDATA[<p>Чтобы изменить баланс пользователя, необходимо вызвать метод:</p><div class="codebox"><pre><code>$transactionApi = new \Shop\Model\TransactionApi();
$transactionApi-&gt;addFunds($user_id, $amount, $writeoff, $reason);

//$user_id - ID юзера
//$amount - сумма
//$writeoff - флаг списания. Если true, то сумма $amount списывается, false - добавляется
//$reason - комментарий к операции</code></pre></div><div class="codebox"><pre><code>$transactionApi = new \Shop\Model\TransactionApi();
$transactionApi-&gt;addFunds(123, 25.50, false, &#039;Пополнение баланса пользователя на 25 руб 50 коп. пользователя ID 123&#039;);

$transactionApi = new \Shop\Model\TransactionApi();
$transactionApi-&gt;addFunds(123, 25.50, true, &#039;Списание 25 руб. 50 коп. с баланса у пользователя ID 123&#039;);</code></pre></div>]]></content>
			<author>
				<name><![CDATA[admin]]></name>
				<uri>http://forum.readyscript.ru/user/2/</uri>
			</author>
			<updated>2015-03-21T18:22:20Z</updated>
			<id>http://forum.readyscript.ru/post/1043/#p1043</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Уменьшение количества товара и списание средств]]></title>
			<link rel="alternate" href="http://forum.readyscript.ru/post/1042/#p1042" />
			<content type="html"><![CDATA[<p>Спасибо огромное, все быстро реализовал благодаря вашим пояснениям. Но не могли бы вы ответить, пожалуйста, на вторую часть вопроса:<br /></p><div class="quotebox"><blockquote><p>И собственно вопрос, касаемый списания денежных средств с лицевого счета пользователя. Функции создания транзакции и списания ведь есть, надо лишь к ним обратиться, но опять же не могу разобраться как и где, обратится, передав значения id пользователя, id товара и количество.</p></blockquote></div>]]></content>
			<author>
				<name><![CDATA[Дмитрий]]></name>
				<uri>http://forum.readyscript.ru/user/122/</uri>
			</author>
			<updated>2015-03-20T23:03:59Z</updated>
			<id>http://forum.readyscript.ru/post/1042/#p1042</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Уменьшение количества товара и списание средств]]></title>
			<link rel="alternate" href="http://forum.readyscript.ru/post/1040/#p1040" />
			<content type="html"><![CDATA[<p>Для работы с БД я на <a href="http://forum.readyscript.ru/topic/16/zaprosy-k-bd/">этой странице</a> постарался описать.</p>]]></content>
			<author>
				<name><![CDATA[Александр]]></name>
				<uri>http://forum.readyscript.ru/user/20/</uri>
			</author>
			<updated>2015-03-20T09:51:52Z</updated>
			<id>http://forum.readyscript.ru/post/1040/#p1040</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Уменьшение количества товара и списание средств]]></title>
			<link rel="alternate" href="http://forum.readyscript.ru/post/1039/#p1039" />
			<content type="html"><![CDATA[<p>Здравствуйте.<br />Итак нам нужно изменить количество товара. Сведения о количестве товаров хранятся в разрезе складов и комплектаций. По умолчанию к товару создаётся 1 комплектация где хранятся сведения о количестве данного товара. Если комплектаций больше, то соотвественно для каждой комплектации хранится своё количество товара на складе.<br />Поэтому нужно:<br />1. Подгрузить товар. <br />2. Вызвать у него заполнение количества комплектаций и остатков их.<br />3. Составить новый массив комплектаций с изменениями по количству на складе, привоив их товару.<br />4. Обновить товар.</p><p>Вот как это выглядит:<br /></p><div class="codebox"><pre><code>$product_id = 27452; //id товара
  
  $plus_value = 2; //Количество на которое увеличися товар
  
  //Подгрузим сам товар
  $product = new \Catalog\Model\Orm\Product($product_id);
  
  //Заполняем сведения об остатках на складах товара и имеющихся комплектациях, значения появятся в ключе offers
  $product-&gt;fillOffersStock();
  
  //Получим склад по умолчанию через запрос к БД использую ORM Request
  $warehouse = \RS\Orm\Request::make()
        -&gt;from(new \Catalog\Model\Orm\WareHouse())
        -&gt;where(array(
            &#039;site_id&#039; =&gt; \RS\Site\Manager::getSiteId(), //На текущем сайте
            &#039;default_house&#039; =&gt; 1 //Флаг по умолчанию включён
        ))
        -&gt;object();
        
  //Получаем все комплектации
  $offers = $product[&#039;offers&#039;]; 
  
  //Эти строки показывают общую картину что подгрузили и как это выглядит. Комлектации находятся в ключе offers      
  echo &quot;&lt;pre&gt;&quot;;
  var_dump(&#039;warehouse&#039;, $warehouse);
  var_dump(&#039;product&#039;, $offers);
  echo &quot;&lt;/pre&gt;&quot;; 
  
  //Пробежимся по комплектациям и изменим количество, задав новые значения комплектациями
  $new_offers = array();
  foreach ($offers[&#039;items&#039;] as $k=&gt;$item){
     //Т.к. товар это объект \Catalog\Model\Orm\Product, то обращение к нему как к массиву происходит так, иначе Notice 
     $stock_num                   = $item[&#039;stock_num&#039;];
     $stock_num[$warehouse[&#039;id&#039;]] = $stock_num[$warehouse[&#039;id&#039;]]+$plus_value;
    
     $item[&#039;stock_num&#039;] = $stock_num;
     
     $new_offers[$k] = $item;
  }
  
  $product[&#039;offers&#039;] = $new_offers;
  
  //Вызываем обновление у товара. В функции afterWrite класса \Catalog\Model\Orm\Product произойдёт обновление
  $product-&gt;update();</code></pre></div><p>Получить значение из POST можно так к контроллере:<br /></p><div class="codebox"><pre><code>$this-&gt;request(&#039;product_id&#039;,TYPE_INTEGER,0); //Получение переменной из $_REQUEST, product_id где ожидается что это число.</code></pre></div><p>Строка:<br /></p><div class="codebox"><pre><code>use \Product\Model\Orm\Product</code></pre></div><p>Все го лишь отвечает за, то что вы можете вместо </p><div class="codebox"><pre><code>\Product\Model\Orm\Product::loadByWhere();</code></pre></div><p>Сделать так </p><div class="codebox"><pre><code>Product::loadByWhere()</code></pre></div><p>Т.е. использовать сокращённый alias</p>]]></content>
			<author>
				<name><![CDATA[Александр]]></name>
				<uri>http://forum.readyscript.ru/user/20/</uri>
			</author>
			<updated>2015-03-20T09:49:54Z</updated>
			<id>http://forum.readyscript.ru/post/1039/#p1039</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Уменьшение количества товара и списание средств]]></title>
			<link rel="alternate" href="http://forum.readyscript.ru/post/1038/#p1038" />
			<content type="html"><![CDATA[<p>Здравствуйте, разработал собственный модуль, но не могу понять как реализовать уменьшение количества товара и списание средств.<br />У меня есть форма, которая отправляет данные в контроллер модуля, естественно post запросом. В контроллере в функции action_index написана функция записи полученных переменных в БД. Но я никак не могу понять как реализовать уменьшение количества товара (id товара и количество передается в форме).<br />Насколько я понимаю, в orm модели моего модуля необходимо прописать строчку use \Product\Model\Orm\Product; чтобы использовать таблицу с товарами. И дописать в этой же функции action_index код для извлечения переменной из post запроса и уменьшения количества. Или же в orm модели написать такую функцию и как-то вызвать ее в функции action_index (как?).</p><p>И собственно вопрос, касаемый списания денежных средств с лицевого счета пользователя. Функции создания транзакции и списания ведь есть, надо лишь к ним обратиться, но опять же не могу разобраться как и где, обратится, передав значения id пользователя, id товара и количество. </p><p>Буду невероятно признателен за помощь, а то срок сдачи близится а я застрял на этом месте <img src="http://forum.readyscript.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /></p>]]></content>
			<author>
				<name><![CDATA[Дмитрий]]></name>
				<uri>http://forum.readyscript.ru/user/122/</uri>
			</author>
			<updated>2015-03-19T15:29:52Z</updated>
			<id>http://forum.readyscript.ru/post/1038/#p1038</id>
		</entry>
</feed>
