public function createTransactionAction()
 {
     //      Load cac model can thiet
     Zend_Loader::loadClass('UserModel');
     Zend_Loader::loadClass('RandomStringModel');
     Zend_Loader::loadClass('TransactionModel');
     $user_model = new UserModel();
     $transaction_model = new TransactionModel();
     $params = $this->_arrParam;
     if ($this->_request->isPost()) {
         if (isset($params['game_id']) && !empty($params['platform'])) {
             try {
                 if (!empty($this->_user)) {
                     $user = $user_model->getUserById($this->_user->user_id);
                     if (!empty($user) && count($user)) {
                         $transaction_id = RandomStringModel::make_token(16);
                         $data = array("transaction_id" => $transaction_id, "user_id" => $user['user_id'], "game_id" => $params['game_id'], "status" => 1, "created_time" => date("Y-m-d H:i:s"));
                         $transaction_model->insert($data);
                         $data = array("code" => 1, "content" => array("transaction_id" => $transaction_id));
                     } else {
                         $data = array("code" => 0, "content" => "Invalid user");
                     }
                 } else {
                     $data = array("code" => 0, "content" => "Authentication failed");
                 }
             } catch (exception $e) {
                 $data = array("code" => 0, "content" => "Error in server");
             }
         } else {
             $data = array("code" => 0, "content" => "Invalid parameters");
         }
         echo json_encode($data);
     }
     exit;
 }
 public function setupJson($source = false)
 {
     $request = Ajde::app()->getRequest();
     // Init vars
     $name = null;
     $email = null;
     $address = null;
     $zipcode = null;
     $city = null;
     $region = null;
     $country = null;
     $shipmentMethod = null;
     $comment = null;
     if ($source === false) {
         // Read request
         $name = $request->getPostParam('name', false);
         $email = $request->getPostParam('email', false);
         $address = $request->getPostParam('shipment_address', false);
         $zipcode = $request->getPostParam('shipment_zipcode', false);
         $city = $request->getPostParam('shipment_city', false);
         $region = $request->getPostParam('shipment_region', false);
         $country = $request->getPostParam('shipment_country', false);
         $shipmentMethod = $request->getPostParam('shipment_method', false);
         $comment = $request->getPostParam('comment', false);
     } else {
         if ($source instanceof Ajde_User) {
             // Read user
             $name = $source->fullname;
             $email = $source->email;
             $address = $source->address;
             $zipcode = $source->zipcode;
             $city = $source->city;
             $region = $source->region;
             $country = $source->country;
             $shipmentMethod = false;
             $comment = false;
         }
     }
     // Return when fields are not complete
     if ($source === false) {
         if (empty($name) || empty($email) || empty($address) || empty($zipcode) || empty($city) || empty($country)) {
             return ['success' => false, 'message' => trans('Not all your details are filled out')];
         }
         if (Ajde_Component_String::validEmail($email) === false) {
             return ['success' => false, 'message' => trans('Please provide a valid e-mail address')];
         }
         if (empty($shipmentMethod)) {
             return ['success' => false, 'message' => trans('Please choose a shipment method')];
         }
     }
     // Check for current transaction
     $transaction = new TransactionModel();
     $session = new Ajde_Session('AC.Shop');
     if ($session->has('currentTransaction') && $transaction->loadByPK($session->get('currentTransaction'))) {
         // Edit existing transaction
         $method = 'save';
     } else {
         // Insert new transaction
         $method = 'insert';
     }
     // Update transaction info
     $transaction->name = $name;
     $transaction->email = $email;
     $transaction->shipment_address = $address;
     $transaction->shipment_zipcode = $zipcode;
     $transaction->shipment_city = $city;
     $transaction->shipment_region = $region;
     $transaction->shipment_country = $country;
     $transaction->shipment_method = $shipmentMethod;
     $transaction->comment = $comment;
     // Save info to user
     if ($user = $this->getLoggedInUser()) {
         if ($request->hasPostParam('save_details', false)) {
             $user->address = $address;
             $user->zipcode = $zipcode;
             $user->city = $city;
             $user->region = $region;
             $user->country = $country;
             $user->save();
             $user->login();
         }
         $transaction->user = $user->getPK();
     }
     // Update shipping total
     $shipping = new ShippingModel($transaction);
     $transaction->shipment_cost = 0;
     if (!empty($shipmentMethod) && $shipping->isAvailable($shipmentMethod)) {
         $transaction->shipment_cost = $shipping->getMethod($shipmentMethod)->getTotal();
     }
     // Insert new transaction
     if ($method === 'insert') {
         if ($transaction->insert()) {
             $this->updateFromCart($transaction);
             $session = new Ajde_Session('AC.Shop');
             $session->set('currentTransaction', $transaction->getPK());
             if (!$transaction->shipment_itemsqty > 0) {
                 return ['success' => false, 'message' => trans('No items added to current order')];
             }
             return ['success' => true];
         }
         return ['success' => false, 'message' => trans('Something went wrong')];
     }
     $transaction->payment_amount = $transaction->shipment_itemstotal + $transaction->shipment_cost;
     // Update current transaction
     if ($transaction->save()) {
         if (!$transaction->shipment_itemsqty > 0) {
             return ['success' => false, 'message' => trans('No items added to current transaction')];
         }
         return ['success' => true];
     }
     // Everything else failed
     return ['success' => false, 'message' => trans('Something went wrong')];
 }