/** * Update product code * * @param Product $product * @param unknown $myobCode * @param ProductCodeType $productCodeType * @param string $assetAccNo * @param string $revenueAccNo * @param string $costAccNo * * @return Product */ private function updateProductCode(Product $product, $myobCode, ProductCodeType $productCodeType, $assetAccNo = '', $revenueAccNo = '', $costAccNo = '') { try { Dao::beginTransaction(); // only take the myobCode (myob item#) after the first dash $position = strpos($myobCode, '-'); if ($position) { $myobCodeAfter = substr($myobCode, $position + 1); // get everything after first dash $myobCodeAfter = str_replace(' ', '', $myobCodeAfter); // remove all whitespace } else { $myobCodeAfter = $myobCode; } $result = array(); $result['product'] = $product->getJson(); $result['code'] = $myobCodeAfter; $result['MYOBcode'] = $myobCode; $result['assetAccNo'] = $assetAccNo; $result['revenueAccNo'] = $revenueAccNo; $result['costAccNo'] = $costAccNo; // if such code type for such product exist, update it to the new one if (!empty($myobCode)) { if (count($productCodes = ProductCode::getAllByCriteria('pro_code.typeId = ? and pro_code.productId = ?', array($productCodeType->getId(), $product->getId()), true, 1, 1)) > 0) { $productCodes[0]->setCode($myobCodeAfter)->save(); $result['codeNew'] = false; } else { $newCode = ProductCode::create($product, $productCodeType, trim($myobCodeAfter)); $result['codeNew'] = true; } } // do the same for MYOB code (NOTE: have to have MYOB code in code type !!!) if (!empty($myobCode)) { if (count($productCodes = ProductCode::getAllByCriteria('pro_code.typeId = ? and pro_code.productId = ?', array(ProductCodeType::ID_MYOB, $product->getId()), true, 1, 1)) > 0) { $productCodes[0]->setCode($myobCode)->save(); $result['MYOBcodeNew'] = false; } else { ProductCode::create($product, ProductCodeType::get(ProductCodeType::ID_MYOB), trim($myobCode)); $result['MYOBcodeNew'] = true; } } if (!empty($assetAccNo)) { $product->setAssetAccNo($assetAccNo)->save(); } if (!empty($revenueAccNo)) { $product->setRevenueAccNo($revenueAccNo)->save(); } if (!empty($costAccNo)) { $product->setCostAccNo($costAccNo)->save(); } Dao::commitTransaction(); return $product; } catch (Exception $e) { Dao::rollbackTransaction(); echo $e; exit; } }