Domanda

sto usando uno script carrello della spesa da un tutorial mi sono imbattuto qualche tempo fa, e ho bisogno di modificarlo per calcolare l'imposta sulle vendite per il mio stato (Pennsylvania). Voglio che per estrarre lo Stato, confrontarlo con uno Pennsylvania o PA in caso qualcuno scrive lo stenografia stato e quindi moltiplicare il totale parziale (per le voci .. prima di aggiungere il trasporto) per l'imposta sulle vendite di questo stato e aggiungere che al subtotale . Come dovrei andare a fare questo? Ecco lo script che fa il calcolo per totale.

<?php
require_once 'config.php';

/*********************************************************
*                 CHECKOUT FUNCTIONS 
*********************************************************/
function saveOrder()
{
    $orderId       = 0;
    $shippingCost  = 5;
    $requiredField = array('hidShippingFirstName', 'hidShippingLastName', 'hidShippingAddress1', 'hidShippingCity', 'hidShippingPostalCode',
                           'hidPaymentFirstName', 'hidPaymentLastName', 'hidPaymentAddress1', 'hidPaymentCity', 'hidPaymentPostalCode');

    if (checkRequiredPost($requiredField)) {
        extract($_POST);

        // make sure the first character in the 
        // customer and city name are properly upper cased
        $hidShippingFirstName = ucwords($hidShippingFirstName);
        $hidShippingLastName  = ucwords($hidShippingLastName);
        $hidPaymentFirstName  = ucwords($hidPaymentFirstName);
        $hidPaymentLastName   = ucwords($hidPaymentLastName);
        $hidShippingCity      = ucwords($hidShippingCity);
        $hidPaymentCity       = ucwords($hidPaymentCity);

        $cartContent = getCartContent();
        $numItem     = count($cartContent);

        // save order & get order id
        $sql = "INSERT INTO tbl_order(od_date, od_last_update, od_shipping_first_name, od_shipping_last_name, od_shipping_address1, 
                                      od_shipping_address2, od_shipping_phone, od_shipping_state, od_shipping_city, od_shipping_postal_code, od_shipping_cost,
                                      od_payment_first_name, od_payment_last_name, od_payment_address1, od_payment_address2, 
                                      od_payment_phone, od_payment_state, od_payment_city, od_payment_postal_code)
                VALUES (NOW(), NOW(), '$hidShippingFirstName', '$hidShippingLastName', '$hidShippingAddress1', 
                        '$hidShippingAddress2', '$hidShippingPhone', '$hidShippingState', '$hidShippingCity', '$hidShippingPostalCode', '$shippingCost',
                        '$hidPaymentFirstName', '$hidPaymentLastName', '$hidPaymentAddress1', 
                        '$hidPaymentAddress2', '$hidPaymentPhone', '$hidPaymentState', '$hidPaymentCity', '$hidPaymentPostalCode')";
        $result = dbQuery($sql);

        // get the order id
        $orderId = dbInsertId();

        if ($orderId) {
            // save order items
            for ($i = 0; $i < $numItem; $i++) {
                $sql = "INSERT INTO tbl_order_item(od_id, pd_id, od_qty)
                        VALUES ($orderId, {$cartContent[$i]['pd_id']}, {$cartContent[$i]['ct_qty']})";
                $result = dbQuery($sql);                    
            }


            // update product stock
            for ($i = 0; $i < $numItem; $i++) {
                $sql = "UPDATE tbl_product 
                        SET pd_qty = pd_qty - {$cartContent[$i]['ct_qty']}
                        WHERE pd_id = {$cartContent[$i]['pd_id']}";
                $result = dbQuery($sql);                    
            }


            // then remove the ordered items from cart
            for ($i = 0; $i < $numItem; $i++) {
                $sql = "DELETE FROM tbl_cart
                        WHERE ct_id = {$cartContent[$i]['ct_id']}";
                $result = dbQuery($sql);                    
            }                           
        }                   
    }

    return $orderId;
}

/*
    Get order total amount ( total purchase + shipping cost )
*/
function getOrderAmount($orderId)
{
    $orderAmount = 0;

    $sql = "SELECT SUM(pd_price * od_qty)
            FROM tbl_order_item oi, tbl_product p 
            WHERE oi.pd_id = p.pd_id and oi.od_id = $orderId

            UNION

            SELECT od_shipping_cost 
            FROM tbl_order
            WHERE od_id = $orderId";
    $result = dbQuery($sql);

    if (dbNumRows($result) == 2) {
        $row = dbFetchRow($result);
        $totalPurchase = $row[0];

        $row = dbFetchRow($result);
        $shippingCost = $row[0];

        $orderAmount = $totalPurchase + $shippingCost;
    }   

    return $orderAmount;    
}

?>
È stato utile?

Soluzione

Non è necessario gestire differenti aliquote fiscali per comune? Normalmente questo sarebbe alzò lo sguardo da una tabella fiscale per codice postale, e forse anche per l'indirizzo + codice di avviamento postale (in alcuni stati).

Si sarebbe simile a questa:

// is it a Pennsylvania zip code?
if ($zipcode < 15000 || $zipcode > 19699)  // needs verification of the actual range
   $taxrate = 0;
else
{
    $rs = mysql_query ("select rate from taxtable where zipcode = '$zipcode'", $db);
    if (!$rs)
    {
        // error looking up rate, maybe apply a default?
    }
    else
    {
        $row = mysql_fetch_assoc($rs);
        $taxrate = $row['rate'];
    }
}

$amount = $amount * (1 + $taxrate / 100.0);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top