/**
  * @param Payable $payable
  * @return Payable
  */
 public function savePayable(Payable $payable)
 {
     $id = $payable->getPayVoucherId();
     $data = $payable->getArrayCopy();
     if (empty($data['status'])) {
         $data['status'] = 'R';
         if (empty($data['requestedDate'])) {
             $data['requestedDate'] = date('Y-m-d H:i:s', time());
         }
         $data['withdrawBy'] = $this->staffId;
     } else {
         if ($data['status'] === 'A') {
             if (empty($data['approvedDate'])) {
                 $data['approvedDate'] = date('Y-m-d H:i:s', time());
             }
             $data['approveBy'] = $this->staffId;
         } else {
             if ($data['status'] === 'C') {
                 if (empty($data['approvedDate'])) {
                     $data['approvedDate'] = date('Y-m-d H:i:s', time());
                 }
                 $data['approveBy'] = $this->staffId;
             }
         }
     }
     if ($id > 0) {
         $this->update($data, array('payVoucherId' => $id));
     } else {
         unset($data['payVoucherId']);
         $this->insert($data);
     }
     if (!$payable->getPayVoucherId()) {
         $payable->setPayVoucherId($this->getLastInsertValue());
     }
     return $payable;
 }