如何在电子商务购物车上更新数量库存

时间:2016-12-12 02:21:06

标签: php

我正在开发一个电子商务应用程序,当用户将产品添加到购物车并继续结帐时,我无法弄清楚如何更新产品库存数量。我正在使用phpnuke,这就是我在Cartscontroller上的内容:

    <?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;
            }
        }
    }

}

问题是,我如何更新产品数据库的数量?

1 个答案:

答案 0 :(得分:0)

在函数cart()中,数量var在这里:

$qta = intval($this->request->data['quantita']);