2016-12-12 79 views
0

私はEコマースアプリを開発中です。ユーザーが商品をカートに追加してチェックアウトに進むと、商品在庫数をどのように更新できるのか分かりません。私はphpnukeを使用しています。これは私のカートコントローラにあります:eコマースのショッピングカートで数量在庫を更新する方法

<?php 

class CartsController extends AppController { 

    var $uses = array('Cart', 'Product', 'Coupon', 'User'); 

    function beforeFilter() { 
     parent::beforeFilter(); 
     $this->Auth->allow('totalcart', 'deletecart', 'viewcart', 'cart', 'checkcoupon', 'checkout', 'metodocheckout', 'fatturazione', 'metodospedizione', 'informazionispedizione', 'pagamento', 'confermaordine'); 
    } 

    function checkout() { 
     $this->set("title_for_layout", "Checkout Ordine "); 

     $user_id = $this->Auth->User('id') ? $this->Auth->User('id') : $this->Session->id(); 

     $total = $this->Cart->find('count', array('conditions' => array('Cart.user_id' => $user_id, 'Product.active' => true))); 

     if ($total == 0) 
      $this->redirect(array('controller' => 'pages', 'action' => 'index')); 

     $itemElencoCarrello = $this->Cart->find('all', array(
      'conditions' => array('Cart.user_id' => $user_id), 
      'contain' => array(
       'Product' => array(
        'Image', 
        'fields' => array('Product.id', 'Product.codice', 'Product.slug', 'Product.nome', 'Product.prezzo', ($this->isPrivato || $this->isAzienda) ? 'Product.prezzo_speciale' : 'Product.prezzo_rivenditori as prezzo_speciale'), 
        'conditions' => array('Product.active' => true) 
       ) 
      ) 
     )); 

     $this->set('listaProdottiCart', $itemElencoCarrello); 
     $this->set('idUtente', $user_id); 
     $this->set('tipoUtente', !empty($this->tipo_utente) ? $this->tipo_utente : "PRIVATO"); 
     $this->totale_ordine(); 
    } 

    function totalcart() { 

     if ($this->RequestHandler->isAjax()) { 
      $this->totale_ordine(); 
     } 
    } 

    function totale_ordine() { 

     $user_id = $this->Auth->User('id') ? $this->Auth->User('id') : $this->Session->id(); 

     $prezzo = ($this->isPrivato || $this->isAzienda) ? 'Product.prezzo_speciale' : 'Product.prezzo_rivenditori'; 
     $total = $this->Cart->find('all', array(
      'fields' => array('SUM(' . $prezzo . ' * Cart.qta) AS ctotal'), 
      'conditions' => array('Cart.user_id' => $user_id, 'Product.active' => true) 
     )); 

     $subTotale = $total[0][0]['ctotal']; 

     if ($this->Session->check('codiceCoupon')) { 
      $codiceCoupon = $this->Session->read('codiceCoupon'); 
      $subTotale -= intval($codiceCoupon['Coupon']['valore']); 
      $this->set('valoreCoupon', $codiceCoupon['Coupon']['valore']); 
      $this->set('codiceCoupon', $codiceCoupon['Coupon']['codice']); 
     } 

     if (($iva = Cache::read('iva')) === false) { 
      $iva = $this->getOption('iva'); 
      Cache::write('iva', $iva); 
     } 

     $this->set('iva', Cache::read('iva')); 

     if ($this->isPrivato || $this->isAzienda) { 
      // Iva da scorporare al totale 
      $totaleSenzaIva = $subTotale/(1 + ($iva/100)); 
      $ivaFinale = $subTotale - $totaleSenzaIva; 
      $this->set('subTotale', $totaleSenzaIva); 
      $this->set('totale_iva', $ivaFinale); 
      $this->set('totaleComplessivo', $subTotale); 
      $totalePerMinimo = $totaleSenzaIva; 
     } else if ($this->isRivenditore) { 
      // Iva da aggiungere 
      $ivaFinale = ($subTotale * $iva)/100; 
      $totaleIvato = $subTotale + $ivaFinale; 
      $this->set('subTotale', $subTotale); 
      $this->set('totale_iva', $ivaFinale); 
      $this->set('totaleComplessivo', $totaleIvato); 
      $totalePerMinimo = $subTotale; 
     } 

     if (!$this->RequestHandler->isAjax() && !empty($this->tipo_utente)) { 
      // Verifica Minimo di Ordine: 
      $keyMinimoOrdineAccount = "minimo-" . strtolower($this->tipo_utente); 

      if (($minimo = Cache::read($keyMinimoOrdineAccount)) === false) { 
       $minimo = $this->getOption($keyMinimoOrdineAccount); 
       Cache::write($keyMinimoOrdineAccount, $minimo); 
      } 

      $minimo = Cache::read($keyMinimoOrdineAccount); 

      if (!empty($minimo) && $totalePerMinimo < $minimo) { 
       $this->Session->setFlash(__('Attenzione, il totale del carrello deve avere un ordine minimo di: ' . CakeNumber::currency($minimo, 'EUR'), true), 'alert-box', array('class' => 'error-msg')); 
       $this->redirect(array('controller' => 'pages', 'action' => 'index')); 
      } 
     } 
    } 

    function viewcart() { 

     $this->set("title_for_layout", "Carrello Utente | Tuttoinchiostro"); 

     if (!empty($this->data)) { 
      if ($this->Cart->saveAll($this->data['Cart'])) { 
       $this->Session->setFlash(__('Carrello aggiornato correttamente', true), 'alert-box', array('class' => 'success-msg')); 
      } else { 
       $this->Session->setFlash(__('Errore durante l\'operazione, riprovare ', true), 'alert-box', array('class' => 'error-msg')); 
      } 
     } 

     $user_id = $this->Auth->User('id') ? $this->Auth->User('id') : $this->Session->id(); 

     $itemElencoCarrello = $this->Cart->find('all', array(
      'conditions' => array('Cart.user_id' => $user_id), 
      'contain' => array(
       'Product' => array(
        'Image', 
        'fields' => array('Product.id', 'Product.slug', 'Product.codice', 'Product.nome', 'Product.prezzo', ($this->isPrivato || $this->isAzienda) ? 'Product.prezzo_speciale' : 'Product.prezzo_rivenditori as prezzo_speciale'), 
        'conditions' => array('Product.active' => true) 
       ) 
      ) 
     )); 

     $this->set('listaProdottiCart', $itemElencoCarrello); 

     if ($this->Session->check('codiceCoupon')) { 
      $codiceCoupon = $this->Session->read('codiceCoupon'); 
      $this->set('codiceCoupon', $codiceCoupon['Coupon']['codice']); 
     } 
    } 

    function deletecart($action = null) { 

     $this->autoRender = $this->layout = false; 
     $user_id = $this->Auth->User('id') ? $this->Auth->User('id') : $this->Session->id(); 

     if ($this->RequestHandler->isAjax()) { 
      if (!empty($this->data)) { 
       $idCarrelloSelezionato = intval($this->request->data['idCarrelloSelezionato']); 

       if ($idCarrelloSelezionato != null && is_numeric($idCarrelloSelezionato)) { 

        $item = $this->Cart->read(null, $idCarrelloSelezionato); 

        if (!empty($item)) { 
         $this->Cart->delete($idCarrelloSelezionato); 
        } 
       } 
      } 

      $itemElencoCarrello = $this->Cart->find('count', array(
       'conditions' => array('Cart.user_id' => $user_id, 'Product.active' => true) 
      )); 

      echo json_encode(array(
       "numprodotti" => $itemElencoCarrello 
      )); 
      exit; 
     } 

     if (!empty($action) && $action == "all") { 

      if ($this->Cart->deleteAll(array('Cart.user_id' => $user_id), false)) { 
       $this->Session->setFlash(__('Tutti i prodotti sono stati eliminati dal carrello, continua i tuoi acquisti', true), 'alert-box', array('class' => 'success-msg')); 
      } else { 
       $this->Session->setFlash(__('Errore durante l\'operazione. Riprova', true), 'alert-box', array('class' => 'error-msg')); 
      } 

      $this->redirect(array('controller' => 'pages', 'action' => 'index')); 
     } 
    } 

    function cart() { 
     if ($this->RequestHandler->isAjax()) { 

      $user_id = $this->Auth->User('id') ? $this->Auth->User('id') : $this->Session->id(); 

      if (!empty($this->data)) { 
       $idProdottoSelezionato = intval($this->request->data['idProdottoSelezionato']); 
       $qta = intval($this->request->data['quantita']); 
       $this->Product->id = $idProdottoSelezionato; 

       if (!$this->Product->exists()) { 
        throw new NotFoundException(__('Prodotto Non valido')); 
       } else { 

        $itemCart = $this->Cart->find('first', array(
         'conditions' => array('product_id' => $idProdottoSelezionato, 'user_id' => $user_id))); 

        $this->Cart->id = !(empty($itemCart)) ? $itemCart['Cart']['id'] : null; 
        $this->Cart->set(array(
         'user_id' => $user_id, 
         'product_id' => $idProdottoSelezionato, 
         'qta' => (!(empty($itemCart)) ? $itemCart['Cart']['qta'] : 0) + $qta 
        )); 
        $this->Cart->save(); 
       } 
      } 

      $this->set("countCarrello", $this->Cart->find('count', array(
         'conditions' => array('Cart.user_id' => $user_id, 'Product.active' => true)))); 

      $prezzo = ($this->isPrivato || $this->isAzienda) ? 'Product.prezzo_speciale' : 'Product.prezzo_rivenditori'; 
      $prezzo_finale = $this->Cart->find('all', array(
       'fields' => array('SUM(Cart.qta * ' . $prezzo . ') as prezzo_finale'), 
       'conditions' => array('Cart.user_id' => $user_id, 'Product.active' => true))); 

      $this->set("prezzoFinale", $prezzo_finale[0][0]['prezzo_finale']); 
     } 
    } 

    function checkcoupon() { 

     if ($this->RequestHandler->isAjax()) { 

      if (!empty($this->data)) { 
       $codiceCoupon = $this->request->data['coupon']; 

       $item = $this->Coupon->find('first', array(
        'conditions' => array('codice' => $codiceCoupon))); 

       if ($this->Session->check('codiceCoupon')) 
        $this->Session->delete('codiceCoupon'); 

       if (!empty($item) && intval($item['Coupon']['valore']) > 0) { 
        $this->Session->write('codiceCoupon', $item); 
       } 

       echo json_encode(array(
        "valore" => (!empty($item) ? $item['Coupon']['valore'] : 0) 
       )); 

       exit; 
      } 
     } 
    } 

} 

質問は、どのように製品データベースの数量を更新しますか?機能カートに

答えて

0

()、数量VaRはここにある:

$qta = intval($this->request->data['quantita']); 
関連する問題