thanks<br><br><div class="gmail_quote">2012/9/25 Adam Heinz <span dir="ltr">&lt;<a href="mailto:amh@metricwise.net" target="_blank">amh@metricwise.net</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
If you look at Quotes-&gt;save_module() [1], you&#39;ll see that it calls<br>
saveInventoryProductDetails() [2].  This function has poor<br>
encapsulation and pulls directly from the $_REQUEST super global.  It<br>
deletes all existing rows and recreates them from request data.  There<br>
is no function to add or delete an individual<br>
vtiger_inventoryproductrel row.<br>
<br>
[1] <a href="http://trac.vtiger.com/cgi-bin/trac.cgi/browser/vtigercrm/branches/5.4.0/modules/Quotes/Quotes.php#L118" target="_blank">http://trac.vtiger.com/cgi-bin/trac.cgi/browser/vtigercrm/branches/5.4.0/modules/Quotes/Quotes.php#L118</a><span onmouseout="cancel = false; window.setTimeout(WRCHideContent, 1000); clearTimeout(showTimer);" onmouseover=" var self = this; showTimer = window.setTimeout(function(){WRCShowContent({&#39;rating&#39;:{&#39;value&#39;:-1,&#39;weight&#39;:-1},&#39;flags&#39;:{&#39;shopping&#39;:null,&#39;social&#39;:null,&#39;news&#39;:null,&#39;it&#39;:null,&#39;corporate&#39;:null,&#39;pornography&#39;:null,&#39;violence&#39;:null,&#39;gambling&#39;:null,&#39;drugs&#39;:null,&#39;illegal&#39;:null},&#39;single&#39;:true,&#39;ttl&#39;:null}, self.className)},600);" class="wrc0" style="padding-right:16px;width:16px;height:16px"></span><br>

[2] <a href="http://trac.vtiger.com/cgi-bin/trac.cgi/browser/vtigercrm/branches/5.4.0/include/utils/InventoryUtils.php#L512" target="_blank">http://trac.vtiger.com/cgi-bin/trac.cgi/browser/vtigercrm/branches/5.4.0/include/utils/InventoryUtils.php#L512</a><span onmouseout="cancel = false; window.setTimeout(WRCHideContent, 1000); clearTimeout(showTimer);" onmouseover=" var self = this; showTimer = window.setTimeout(function(){WRCShowContent({&#39;rating&#39;:{&#39;value&#39;:-1,&#39;weight&#39;:-1},&#39;flags&#39;:{&#39;shopping&#39;:null,&#39;social&#39;:null,&#39;news&#39;:null,&#39;it&#39;:null,&#39;corporate&#39;:null,&#39;pornography&#39;:null,&#39;violence&#39;:null,&#39;gambling&#39;:null,&#39;drugs&#39;:null,&#39;illegal&#39;:null},&#39;single&#39;:true,&#39;ttl&#39;:null}, self.className)},600);" class="wrc0" style="padding-right:16px;width:16px;height:16px"></span><br>

<div><div class="h5"><br>
On Tue, Sep 25, 2012 at 3:59 AM, Mario &lt;<a href="mailto:malcangi.ts@gmail.com">malcangi.ts@gmail.com</a>&gt; wrote:<br>
&gt; someone knows please tell me how vtiger handles methods for adding products in<br>
&gt; the invoices / estimates?<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; <a href="http://www.vtiger.com/" target="_blank">http://www.vtiger.com/</a><span onmouseout="cancel = false; window.setTimeout(WRCHideContent, 1000); clearTimeout(showTimer);" onmouseover=" var self = this; showTimer = window.setTimeout(function(){WRCShowContent({&#39;rating&#39;:{&#39;value&#39;:-1,&#39;weight&#39;:-1},&#39;flags&#39;:{&#39;shopping&#39;:null,&#39;social&#39;:null,&#39;news&#39;:null,&#39;it&#39;:null,&#39;corporate&#39;:null,&#39;pornography&#39;:null,&#39;violence&#39;:null,&#39;gambling&#39;:null,&#39;drugs&#39;:null,&#39;illegal&#39;:null},&#39;single&#39;:true,&#39;ttl&#39;:null}, self.className)},600);" class="wrc0" style="padding-right:16px;width:16px;height:16px"></span><br>

</div></div>_______________________________________________<br>
<a href="http://www.vtiger.com/" target="_blank">http://www.vtiger.com/</a><span onmouseout="cancel = false; window.setTimeout(WRCHideContent, 1000); clearTimeout(showTimer);" onmouseover=" var self = this; showTimer = window.setTimeout(function(){WRCShowContent({&#39;rating&#39;:{&#39;value&#39;:-1,&#39;weight&#39;:-1},&#39;flags&#39;:{&#39;shopping&#39;:null,&#39;social&#39;:null,&#39;news&#39;:null,&#39;it&#39;:null,&#39;corporate&#39;:null,&#39;pornography&#39;:null,&#39;violence&#39;:null,&#39;gambling&#39;:null,&#39;drugs&#39;:null,&#39;illegal&#39;:null},&#39;single&#39;:true,&#39;ttl&#39;:null}, self.className)},600);" class="wrc0" style="padding-right:16px;width:16px;height:16px"></span><br>

</blockquote></div><br>