public function updateReserved($woId, $inId, $qty)
 {
     $rsvdBo = new CalemWoReservedBo();
     $rsvdBo->updateReservedSafe($woId, $inId, $qty);
 }
 public function on_itt_return_icg_part($it)
 {
     //Update cost in workorder first
     $id = $it['checkout_to_id'];
     $woDbo = CalemFactory::getDbo('workorder');
     $woDbo->executeBySqlParam('select id from workorder where id=? for update', $id);
     $woRow = $woDbo->fetchById($id);
     $mc = $woRow['material_cost'] - $it['tran_total'];
     if ($mc < 0) {
         $mc = 0;
     }
     $mt = $mc + $woRow['labor_cost'];
     $woDbo->setValue('material_cost', $mc);
     $woDbo->setValue('total_cost', $mt);
     $woDbo->setIdForUpdate($id);
     $woDbo->update();
     //Update wop
     $wopDbo = CalemFactory::getDbo('wo_part');
     $ar = array();
     try {
         $rows = $wopDbo->fetchBySqlParam('select * from wo_part where wo_id=? and in_id=?', array($id, $it['in_id']));
         $row = $rows[0];
         $qn = $row['qty_used'] - $it['qty'];
         $ar['qty_used'] = $qn < 0 ? 0 : $qn;
         $ln = $row['line_cost'] - $it['tran_total'];
         $ar['line_cost'] = $ln < 0 ? 0 : $ln;
         $wopDbo->setChangeBulk($ar);
         $wopDbo->setIdForUpdate($row['id']);
         $wopDbo->update();
     } catch (CalemDboDataNotFoundException $ex) {
         //Add a new record
         //This is wrong, one is returning a part that's not checked out to workorder
         throw $ex;
     }
     //Update reserved parts if it's not closed.
     if ($woRow['status_id'] != 'wos_closed') {
         $rsvdBo = new CalemWoReservedBo();
         $rsvdBo->updateReservedSafe($woRow['id'], $it['in_id'], $it['qty']);
     }
     //Needs to update asset if wo is closed
     $assetHdlr = new CalemInTranNotifierAsset();
     $it['checkout_to_id'] = $woRow['asset_id'];
     $assetHdlr->on_itt_return_icg_part($it);
 }