/**
  * Add trade
  * 
  * @param integer $sellerID
  * @param integer $buyerID
  * @param integer $sellerItemID
  * @param integer $buyerItemID
  * @return int
  */
 public function addTrade($sellerID, $buyerID, $sellerItemID, $buyerItemID)
 {
     global $db;
     if (!is_numeric($sellerID) || !is_numeric($buyerID) || !is_numeric($sellerItemID) || !is_numeric($buyerItemID)) {
         return;
     }
     // failed
     //Check if this trade has been made before.
     $query = sprintf('SELECT * FROM %s WHERE sellerID=%d AND buyerID=%d AND sellerItemID=%d AND buyerItemID=%d', TABLE_TRADE, $sellerID, $buyerID, $sellerItemID, $buyerItemID);
     $query = $db->prepare($query);
     $data = $db->getRow($query);
     if (!empty($data)) {
         return $data['tradeID'];
         // already exists
     }
     //Add new trade record
     // 1. create shipping address
     $tradeShippingInfo = new BuckysTradeShippingInfo();
     $shippingInfo['seller'] = $tradeShippingInfo->addTradeShippingInfo($sellerID);
     $shippingInfo['buyer'] = $tradeShippingInfo->addTradeShippingInfo($buyerID);
     // 2. create trade record
     $dateTimeStamp = date('Y-m-d H:i:s');
     $param = array('sellerID' => $sellerID, 'buyerID' => $buyerID, 'sellerItemID' => $sellerItemID, 'buyerItemID' => $buyerItemID, 'sellerShippingID' => $shippingInfo['seller'], 'buyerShippingID' => $shippingInfo['buyer'], 'createdDate' => $dateTimeStamp);
     $newID = $db->insertFromArray(TABLE_TRADE, $param);
     return $newID;
 }
 /**
  * Update shipping Info
  * It has 2 logic in it. Update your own shipping info, and update already created trade records which has no shipping info.
  * 
  * @param integer $userID
  * @param array $data
  */
 public function updateShippingInfo($userID, $data)
 {
     if (!is_numeric($userID) || $data['shippingAddress'] == '' || $data['shippingCity'] == '' || $data['shippingState'] == '' || $data['shippingZip'] == '' || $data['shippingCountryID'] == '' || !is_numeric($data['shippingCountryID'])) {
         return false;
     }
     //Update my shipping info
     global $db;
     $query = sprintf('UPDATE %s SET ', TABLE_TRADE_USERS);
     $query = $db->prepare($query . 'shippingAddress=%s, shippingCity=%s, shippingState=%s, shippingZip=%s, shippingCountryID=%d WHERE userID=' . $userID, $data['shippingAddress'], $data['shippingCity'], $data['shippingState'], $data['shippingZip'], $data['shippingCountryID']);
     $db->query($query);
     //Update trade table which has no shipping info with this info.
     //It will check trade table, and create records in trade_shipping_info
     $tradeIns = new BuckysTrade();
     $tradeShippingInfoIns = new BuckysTradeShippingInfo();
     //---------------- Update for seller ----------------------//
     $requiredList = $tradeIns->getShippingInfoRequiredTrade($userID, 'seller');
     if (!empty($requiredList) && count($requiredList) > 0) {
         foreach ($requiredList as $tradeData) {
             //Add shipping info
             $shippingRecID = $tradeShippingInfoIns->addTradeShippingInfo($userID);
             if (!empty($shippingRecID) && is_numeric($shippingRecID)) {
                 //update trade table
                 $tradeIns->updateTrade($tradeData['tradeID'], array('sellerShippingID' => $shippingRecID));
             }
         }
     }
     //---------------- Update for buyer ----------------------//
     $requiredList = $tradeIns->getShippingInfoRequiredTrade($userID, 'buyer');
     if (!empty($requiredList) && count($requiredList) > 0) {
         foreach ($requiredList as $tradeData) {
             //Add shipping info
             $shippingRecID = $tradeShippingInfoIns->addTradeShippingInfo($userID);
             if (!empty($shippingRecID) && is_numeric($shippingRecID)) {
                 //update trade table
                 $tradeIns->updateTrade($tradeData['tradeID'], array('buyerShippingID' => $shippingRecID));
             }
         }
     }
     return true;
 }
 /**
  * Update shipping Info
  * It has 2 logic in it. Update your own shipping info, and update already created trade records which has no shipping info.
  *
  * @param integer $userID
  * @param array   $data
  * @return bool
  */
 public function updateShippingInfo($userID, $data)
 {
     if (!is_numeric($userID) || $data['shippingAddress'] == '' || $data['shippingCity'] == '' || $data['shippingState'] == '' || $data['shippingZip'] == '' || $data['shippingCountryID'] == '' || !is_numeric($data['shippingCountryID'])) {
         return false;
     }
     //Update my shipping info
     global $db;
     $db->updateFromArray(TABLE_TRADE_USERS, $data, ['userID' => $userID]);
     //Update trade table which has no shipping info with this info.
     //It will check trade table, and create records in trade_shipping_info
     $tradeIns = new BuckysTrade();
     $tradeShippingInfoIns = new BuckysTradeShippingInfo();
     //---------------- Update for seller ----------------------//
     $requiredList = $tradeIns->getShippingInfoRequiredTrade($userID, 'seller');
     if (!empty($requiredList) && count($requiredList) > 0) {
         foreach ($requiredList as $tradeData) {
             //Add shipping info
             $shippingRecID = $tradeShippingInfoIns->addTradeShippingInfo($userID);
             if (!empty($shippingRecID) && is_numeric($shippingRecID)) {
                 //update trade table
                 $tradeIns->updateTrade($tradeData['tradeID'], ['sellerShippingID' => $shippingRecID]);
             }
         }
     }
     //---------------- Update for buyer ----------------------//
     $requiredList = $tradeIns->getShippingInfoRequiredTrade($userID, 'buyer');
     if (!empty($requiredList) && count($requiredList) > 0) {
         foreach ($requiredList as $tradeData) {
             //Add shipping info
             $shippingRecID = $tradeShippingInfoIns->addTradeShippingInfo($userID);
             if (!empty($shippingRecID) && is_numeric($shippingRecID)) {
                 //update trade table
                 $tradeIns->updateTrade($tradeData['tradeID'], ['buyerShippingID' => $shippingRecID]);
             }
         }
     }
     //-------------------- Update Buyer Shipping Info -----------------------//
     $tradeShippingInfoIns->updateTradeShippingInfo($userID, $data);
     return true;
 }