2011-10-29 4 views
1

Nous avons un script qui génère une facture une fois par mois (cron). Mais nous aimerions ajouter une fonctionnalité, que nous serions en mesure de sélectionner la période "de - à", puis générer une facture uniquement pour la date sélectionnée. Je suppose que faire des champs de saisie avec le calendrier pop-up n'est pas difficile, mais filtrer avec PHP est un peu plus grand défi, donc si quelqu'un veut jeter un oeil à mon code et me donner quelques conseils, je serais reconnaissant .Filtrage des résultats MYSQL par date

function genInvoice($clientID, $orderID=0, $paid=false) 
{ 
    if($orderID == 0) 
     $sql = "select tblorders.* from tblorders,tblusers where invoiceid=0 and tblorders.userid=tblusers.id " . 
      "and status='closed' and tblusers.clientid=" . $clientID; 
    else 
     $sql = "select tblorders.* from tblorders,tblusers where invoiceid=0 and tblorders.userid=tblusers.id " . 
      "and tblusers.clientid=" . $clientID . " and tblorders.id=" . $orderID; 
    $res = full_query($sql) or die(mysql_error()); 
    // If no closed orders uninvoiced, just return 
    if(!mysql_num_rows($res)) 
     return 0; 

    $amount = 0; 
    $orders = array(); 
    while($row = mysql_fetch_array($res, MYSQL_ASSOC)) 
    { 
//  print_r($row); 
//  print "<br><hr>"; 
     $amount += $row['amount']; 
     $orders[] = $row['id']; 
    } 
    $date = date("Y-m-d"); 
    $status = $paid ?'Paid' : 'Unpaid'; 
    $sql = "insert into tblinvoices (clientid, date, duedate, subtotal, total, status) values (" . $clientID . ",'" . $date . 
     "','" . $date . "'," . $amount . "," . $amount . ",'" . $status . "')"; 
    $res = full_query($sql) or die(mysql_error()); 
    $invoiceid = mysql_insert_id(); 
    $sql = "update tblorders set invoiceid=" . $invoiceid . " where id in (" . implode(",", $orders) . ")"; 
    $res = full_query($sql) or die(mysql_error()); 
    $sql = "select tblorders.id as ReportID, FirstName, LastName, SearchName, CountyID, StateID, bl_orderitems.userid, bl_orderitems.amount, " . 
     "bl_orderitems.notes from tblorders, bl_orderitems left join bl_search on bl_search.id=packageid where tblorders.id in (" . 
     implode(",", $orders) . ") and bl_orderitems.orderid=tblorders.id order by tblorders.id,bl_orderitems.id"; 
    $res = full_query($sql) or die(mysql_error()); 
    while($row = mysql_fetch_array($res, MYSQL_ASSOC)) 
    { 
     if($row['CountyID'] != 0) 
      $locale = getCounty($row['CountyID']); 
     else if($row['StateID'] != 0) 
      $locale = getState($row['StateID']); 
     if($row['SearchName'] != "") 
      $description = mysql_real_escape_string($row['FirstName'] . " " . $row['LastName'] . " " . 
       $row['SearchName'] . " " . $locale . " (Order #" . $row['ReportID'] . ")"); 
     else 
      $description = "Search Package: " . mysql_real_escape_string($row['notes'] . " (Order #" . $row['ReportID'] . ")"); 
     $sql = "insert into tblinvoiceitems (invoiceid, userid, type, description, amount, duedate) values " . 
      "(" . $invoiceid . "," . $row['userid'] . ",'search','" . $description . "','" . 
      $row['amount'] . "','" . $date . "')"; 
//  print $sql . "<br>"; 
     full_query($sql) or die(mysql_error()); 
    } 
    sendmessage ('Invoice Created', $invoiceid); 
    return $invoiceid; 
} 

Répondre

4

ne va pas parcourir tout ce code, mais le filtrage des résultats par une plage de dates est facile.

SELECT id FROM some_table WHERE some_date_field BETWEEN $first_date AND $second_date