Esempio n. 1
0
 public function getTotal()
 {
     $total = (double) $this->getTransaction()->shipment_itemstotal;
     if ($total > 500) {
         return 0;
     } else {
         if ($total > 100) {
             return ShippingModel::isEUCountry($this->getTransaction()->shipment_country) ? 15.95 : 22.5;
         } else {
             return ShippingModel::isEUCountry($this->getTransaction()->shipment_country) ? 7.5 : 12.5;
         }
     }
 }
Esempio n. 2
0
 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')];
 }