public function updateStatus($status) { if (false === WsPackageStatus::checkStatus($status)) { throw new Exception("Wrong status specified!"); } $this->getTable()->getDefaultAdapter()->beginTransaction(); $createdBy = $this->created_by; $idPackage = $this->id_package; $this->getTable()->getDefaultAdapter()->query('LOCK TABLE ws.package_status IN ROW EXCLUSIVE MODE;')->fetch(); try { $this->softDelete(); $this->getTable()->createRow(array('created_by' => $createdBy, 'id_status' => $status, 'id_package' => $idPackage))->save(); $this->getTable()->getDefaultAdapter()->commit(); } catch (Exception $e) { $this->getTable()->getDefaultAdapter()->rollBack(); } }
/** * Update or create new Package Status * @param type $packageId * @param type $packageStatusId * @return type */ public function updatePackageStatus($packageId, $packageStatusId) { $packageStatus = new WsPackageStatus(); $packageStatusRow = $packageStatus->findOneByPackageId($packageId); if (null === $packageStatusRow) { return $packageStatus->createRow(array('id_package' => $packageId, 'id_status' => WsPackageStatus::checkStatus($packageStatusId) ? $packageStatusId : WsPackageStatus::STATUS_NEW))->save(); } $packageStatusRow->updateStatus($packageStatusId); return $packageStatusRow->id; }