2009-12-18 11 views
0

J'utilise un script de panier d'achat d'un tutoriel que j'ai rencontré il y a un certain temps, et j'ai besoin de le modifier pour calculer la taxe de vente pour mon état (Pennsylvanie). Je veux qu'il extrait l'état, comparez-le à Pennsylvanie ou PA au cas où quelqu'un écrit la sténographie d'état et puis multipliez le sous-total (pour les articles .. avant l'expédition est ajoutée) par la taxe de vente pour cet état et ajoutez cela au sous-total . Comment devrais-je faire cela? Voici le script qui fait le calcul pour le total général.Comment calculer la taxe de vente avec ce script?

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

?> 
+1

Modifier votre question et placer 4 places avant chaque ligne de code, même si elle est déjà en retrait dans l'original. Cela le formatera en code et préservera l'indentation d'origine. Vous pouvez également utiliser le bouton "101 \ n010" dans la barre d'outils de l'éditeur de texte. – outis

Répondre

0

Vous n'avez pas à gérer des taux d'imposition différents par municipalité? Normalement, cela serait recherché à partir d'une table de taxes par code postal, et peut-être même pour l'adresse de la rue + code postal (dans certains états).

Il ressemblerait à ceci:

// 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); 
+0

Cela ressemble à ce qui le rendrait beaucoup plus compliqué que je suis prêt à intervenir, mais selon wikipedia: Pennsylvanie a un taux de 6% de taxe de vente. Allegheny County a un taux de taxe de vente de 7% et Philadelphie a un taux de taxe de vente de 8%. Serait-il plus simple d'aller avec 8% de sorte qu'il couvre toute la gamme? Je ne sais pas comment je pourrais comparer tous les codes postaux de PA. –

+0

J'essaie de réécrire ce code que vous avez fourni pour travailler avec mon script, et je me demande pourquoi vous avez choisi "rs" pour ce nom de variable particulier. Qu'est-ce que c'est censé représenter? –

+0

Je sais que ça n'a pas d'importance, et je pourrais le renommer comme je le voulais, mais j'aimerais comprendre le fil de pensée que vous venez de .. –