<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from rtf -->
<style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<font face="Calibri, sans-serif" size="2">
<div>I am programmatically updating a couple of fields in an invoice. When I save the invoice the changes are correctly recorded but it loses the attached product.</div>
<div> </div>
<div>I am using the following code what am I doing wrong?</div>
<div> </div>
<div> </div>
<div><font face="Courier New, monospace">        // create the model from the record id</font></div>
<div><font face="Courier New, monospace">        $invoiceModel = Vtiger_Record_Model::getInstanceById($invoiceid, "Invoice");</font></div>
<div><font face="Courier New, monospace"> </font></div>
<div><font face="Courier New, monospace">        if ($invoiceModel) {</font></div>
<div><font face="Courier New, monospace">            // set the fields as supplied</font></div>
<div><font face="Courier New, monospace">            foreach ($fields as $key=>$value){</font></div>
<div><font face="Courier New, monospace">                $invoiceModel->set($key, $value);</font></div>
<div><font face="Courier New, monospace">            }</font></div>
<div><font face="Courier New, monospace"> </font></div>
<div><font face="Courier New, monospace">            // set mode to edit</font></div>
<div><font face="Courier New, monospace">            $invoiceModel->set('mode', 'edit');</font></div>
<div><font face="Courier New, monospace"> </font></div>
<div><font face="Courier New, monospace">            // save</font></div>
<div><font face="Courier New, monospace">            $invoiceModel->save();</font></div>
<div><font face="Courier New, monospace"> </font></div>
<div><font face="Courier New, monospace">            return $invoiceModel->getData();</font></div>
<div><font face="Courier New, monospace">        }</font></div>
<div> </div>
<div>If I var dump the array returned by getData() it correctly shows the product and the changes.</div>
<div> </div>
<div>e.g.</div>
<div> </div>
<div><font face="Courier New, monospace" size="3">['invoicestatus'] =>'Paid' <= status changed</font></div>
<div><font face="Courier New, monospace" size="3">['cf_738'] =>'BZ-0025028687' <= custom field being updated</font></div>
<div><font face="Courier New, monospace" size="3">['invoice_no'] =>'INV405'</font></div>
<div><font face="Courier New, monospace" size="3">['productid'] =>2175</font></div>
<div><font face="Courier New, monospace" size="3">['quantity'] =>1.000</font></div>
<div><font face="Courier New, monospace" size="3">['listprice'] =>605.00000000<font face="Calibri, sans-serif" size="2"> </font></font></div>
<div> </div>
<div> </div>
<div>If I then go to the invoice detail page. The changes I have made are correctly saved (in the above I am setting the status field to ‘Paid’ and setting a custom field) but the invoice no longer has any products attached to it.</div>
<div> </div>
<div> </div>
<div>Chris</div>
<div> </div>
<div> </div>
</font>
</body>
</html>