Jump to content

klarsen

Members
  • Content count

    42
  • Joined

  • Last visited

3 Followers

Profile Information

  • Real Name
    Kent Larsen
  1. Bump! Still no resolution! Kent
  2. I wish I knew of a contribution that did this, or that would help me pull product data from web pages. I'm probably going to have to write one. FWIW, another topic here indicated that they were using something called NuSoap as a tool for collecting data from "web services". If you've made progress on this issue, please let us know! Kent
  3. klarsen

    Attaching Files to Order

    Never mind. I left out the "multipart/form-data" indication for the form.
  4. I get a lot of orders by fax from customers. Fortunately, my faxes are also saved as image files on my hard drive. I'd like to add these files to oscommerce, by attaching them to the proper order as an item in the order status history. To that end, I've added a "file_attached" field at the end of the orders_status_history table. So that I can upload the file, in admin/orders.php, I've added the following code after the comments box: <td class="main"><?php echo tep_draw_file_field('file_attached', $file_attached); ?></td> Then, to process this information, I've added the following code near the top of admin/orders.php, right after the email status code: //Begin line added for Order Entry Attach File Mod if($file_attached = new upload('file_attached', DIR_HD_ATTACH)) { } //End line added for Order Entry Attach File Mod And I modified the query that inserts the information into the table as follows: tep_db_query("insert into " . TABLE_ORDERS_STATUS_HISTORY . " (orders_id, orders_status_id, date_added, customer_notified, comments, file_attached) values ('" . (int)$oID . "', '" . tep_db_input($status) . "', now(), '" . tep_db_input($customer_notified) . "', '" . tep_db_input($comments) . "', '" . $file_attached->filename . "')"); I have, of course, defined DIR_HD_ATTACH to be a new, available directory, permissions set to 777, one that is currently correctly getting files from another part of oscommerce. I have also put proper code in to display a link to view the file. I believe I've covered everything, and it appears to run, except that I get a warning message: "Warning: No file uploaded" regardless of what I do. I am NOT getting a "directory not writeable" error, and when I put in code to check the file name right before the upload command, it appears to be correct. Can anyone tell me what I've done wrong? So that you can see the issue in context, here is the entire admin/orders.php: <?php /* $Id: orders.php,v 1.2 2005/11/14 15:54:47 loic Exp $ Modified by Step by Step Manual Order Entry v1.8 2006/04/13 Modified by Order Entry v2.5 2006/04/27 osCommerce, Open Source E-Commerce Solutions http://www.oscommerce.com Copyright (c) 2003 osCommerce Released under the GNU General Public License */ require('includes/application_top.php'); require(DIR_WS_CLASSES . 'currencies.php'); $currencies = new currencies(); $orders_statuses = array(); $orders_status_array = array(); $orders_status_query = tep_db_query("select orders_status_id, orders_status_name from " . TABLE_ORDERS_STATUS . " where language_id = '" . (int)$languages_id . "'"); while ($orders_status = tep_db_fetch_array($orders_status_query)) { $orders_statuses[] = array('id' => $orders_status['orders_status_id'], 'text' => $orders_status['orders_status_name']); $orders_status_array[$orders_status['orders_status_id']] = $orders_status['orders_status_name']; } $action = (isset($HTTP_GET_VARS['action']) ? $HTTP_GET_VARS['action'] : ''); if (tep_not_null($action)) { switch ($action) { case 'update_order': $oID = tep_db_prepare_input($HTTP_GET_VARS['oID']); $status = tep_db_prepare_input($HTTP_POST_VARS['status']); $comments = tep_db_prepare_input($HTTP_POST_VARS['comments']); $order_updated = false; $check_status_query = tep_db_query("select customers_name, customers_email_address, orders_status, date_purchased from " . TABLE_ORDERS . " where orders_id = '" . (int)$oID . "'"); $check_status = tep_db_fetch_array($check_status_query); if ( ($check_status['orders_status'] != $status) || tep_not_null($comments) || tep_not_null($file_attached)) { tep_db_query("update " . TABLE_ORDERS . " set orders_status = '" . tep_db_input($status) . "', last_modified = now() where orders_id = '" . (int)$oID . "'"); $customer_notified = '0'; if (isset($HTTP_POST_VARS['notify']) && ($HTTP_POST_VARS['notify'] == 'on')) { $notify_comments = ''; if (isset($HTTP_POST_VARS['notify_comments']) && ($HTTP_POST_VARS['notify_comments'] == 'on')) { $notify_comments = sprintf(EMAIL_TEXT_COMMENTS_UPDATE, $comments) . "\n\n"; } /* commented and replaced for Email Subject contribution v1.5 2947 $email = STORE_NAME . "\n" . EMAIL_SEPARATOR . "\n" . EMAIL_TEXT_ORDER_NUMBER . ' ' . $oID . "\n" . EMAIL_TEXT_INVOICE_URL . ' ' . tep_catalog_href_link(FILENAME_CATALOG_ACCOUNT_HISTORY_INFO, 'order_id=' . $oID, 'SSL') . "\n" . EMAIL_TEXT_DATE_ORDERED . ' ' . tep_date_long($check_status['date_purchased']) . "\n\n" . $notify_comments . sprintf(EMAIL_TEXT_STATUS_UPDATE, $orders_status_array[$status]); tep_mail($check_status['customers_name'], $check_status['customers_email_address'], EMAIL_TEXT_SUBJECT, $email, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS); $customer_notified = '1'; */ // begin replacement section for Email Subject contribution v1.5 2947 $email = STORE_NAME . "\n" . EMAIL_SEPARATOR . "\n" . EMAIL_TEXT_ORDER_NUMBER . ' ' . $oID . "\n" . EMAIL_TEXT_INVOICE_URL . ' ' . tep_catalog_href_link(FILENAME_CATALOG_ACCOUNT_HISTORY_INFO, 'order_id=' . $oID, 'SSL') . "\n" . EMAIL_TEXT_DATE_ORDERED . ' ' . tep_date_long($check_status['date_purchased']) . "\n\n\n" . $notify_comments . sprintf(EMAIL_TEXT_STATUS_UPDATE, $orders_status_array[$status]); tep_mail($check_status['customers_name'], $check_status['customers_email_address'], EMAIL_TEXT_SUBJECT_1. $oID . EMAIL_TEXT_SUBJECT_2 . $orders_status_array[$status], $email, STORE_OWNER, EMAIL_FROM_CUSTSVC); $customer_notified = '1'; // end replacement section for Email Subject contribution v1.5 2947 } $messageStack->add_session(DIR_HD_ATTACH, 'success'); $messageStack->add_session($file_attached, 'file_attached'); //Begin line added for Order Entry Attach File Mod if($file_attached = new upload('file_attached', DIR_HD_ATTACH)) { } //End line added for Order Entry Attach File Mod $messageStack->add_session($file_attached, 'file_attached'); tep_db_query("insert into " . TABLE_ORDERS_STATUS_HISTORY . " (orders_id, orders_status_id, date_added, customer_notified, comments, file_attached) values ('" . (int)$oID . "', '" . tep_db_input($status) . "', now(), '" . tep_db_input($customer_notified) . "', '" . tep_db_input($comments) . "', '" . $file_attached->filename . "')"); $order_updated = true; } if ($order_updated == true) { $messageStack->add_session(SUCCESS_ORDER_UPDATED, 'success'); } else { $messageStack->add_session(WARNING_ORDER_NOT_UPDATED, 'warning'); } tep_redirect(tep_href_link(FILENAME_ORDERS, tep_get_all_get_params(array('action')) . 'action=edit')); break; case 'deleteconfirm': $oID = tep_db_prepare_input($HTTP_GET_VARS['oID']); tep_remove_order($oID, $HTTP_POST_VARS['restock']); tep_redirect(tep_href_link(FILENAME_ORDERS, tep_get_all_get_params(array('oID', 'action')))); break; } } if (($action == 'edit') && isset($HTTP_GET_VARS['oID'])) { $oID = tep_db_prepare_input($HTTP_GET_VARS['oID']); $orders_query = tep_db_query("select orders_id from " . TABLE_ORDERS . " where orders_id = '" . (int)$oID . "'"); $order_exists = true; if (!tep_db_num_rows($orders_query)) { $order_exists = false; $messageStack->add(sprintf(ERROR_ORDER_DOES_NOT_EXIST, $oID), 'error'); } } include(DIR_WS_CLASSES . 'order.php'); ?> <!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"> <html <?php echo HTML_PARAMS; ?>> <head> <meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>"> <title><?php echo TITLE; ?></title> <link rel="stylesheet" type="text/css" href="includes/stylesheet.css"> <script language="javascript" src="includes/general.js"></script> </head> <body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#FFFFFF"> <!-- header //--> <?php require(DIR_WS_INCLUDES . 'header.php'); ?> <!-- header_eof //--> <!-- body //--> <table border="0" width="100%" cellspacing="2" cellpadding="2"> <tr> <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="1" cellpadding="1" class="columnLeft"> <!-- left_navigation //--> <?php require(DIR_WS_INCLUDES . 'column_left.php'); ?> <!-- left_navigation_eof //--> </table></td> <!-- body_text //--> <td width="100%" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2"> <?php if (($action == 'edit') && ($order_exists == true)) { $order = new order($oID); ?> <tr> <td width="100%"><table border="0" width="100%" cellspacing="0" cellpadding="0"> <tr> <!--// <td class="pageHeading"><?php echo HEADING_TITLE; ?></td> --> <!--//BEGIN Line copied from edit_orders.php to give order number & date --> <td class="pageHeading"><?php echo HEADING_TITLE . ' (' . HEADING_TITLE_NUMBER . ' ' . $oID . '<br> ' . HEADING_TITLE_DATE . ' ' . tep_datetime_short($order->info['date_purchased']) . ')'; ?></td> <!--//END Line copied from edit_orders.php to give order number & date --> <td class="pageHeading" align="right"><?php echo tep_draw_separator('pixel_trans.gif', 1, HEADING_IMAGE_HEIGHT); ?></td> <!-- <td class="pageHeading" align="right"><?php echo '<a href="' . tep_href_link(FILENAME_ORDERS, tep_get_all_get_params(array('action'))) . '">' . tep_image_button('button_back.gif', IMAGE_BACK) . '</a>'; ?></td> --> <!-- Begin lines added by Order Entry v2.4 --> <td class="pageHeading" align="right"><?php echo '<a href="' . tep_href_link(FILENAME_ORDERS_EXPORT, 'id=' . $HTTP_GET_VARS['oID']) . '" TARGET="_blank">' . tep_image_button('button_export.gif', IMAGE_ORDERS_INVOICE) . '</a> <a href="' . tep_href_link(FILENAME_ORDERS_EDIT, 'oID=' . $_GET['oID']) . '">' . tep_image_button('button_edit.gif', IMAGE_EDIT) . '</a> <a href="' . tep_href_link(FILENAME_ORDERS_INVOICE, 'oID=' . $_GET['oID']) . '" TARGET="_blank">' . tep_image_button('button_invoice.gif', IMAGE_ORDERS_INVOICE) . '</a> <a href="' . tep_href_link(FILENAME_ORDERS_PACKINGSLIP, 'oID=' . $_GET['oID']) . '" TARGET="_blank">' . tep_image_button('button_packingslip.gif', IMAGE_ORDERS_PACKINGSLIP) . '</a> <a href="' . tep_href_link(FILENAME_ORDERS, tep_get_all_get_params(array('action'))) . '">' . tep_image_button('button_back.gif', IMAGE_BACK) . '</a> '; ?></td> <!-- End lines added by Order Entry v2.4 --> </tr> </table></td> </tr> <tr> <td><table width="100%" border="0" cellspacing="0" cellpadding="2"> <tr> <td colspan="3"><?php echo tep_draw_separator(); ?></td> </tr> <tr> <td valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="2"> <tr> <td class="main" valign="top"><b><?php echo ENTRY_CUSTOMER; ?></b></td> <td class="main"><?php echo tep_address_format($order->customer['format_id'], $order->customer, 1, '', '<br>'); ?></td> </tr> <tr> <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '5'); ?></td> </tr> <tr> <td class="main"><b><?php echo ENTRY_TELEPHONE_NUMBER; ?></b></td> <td class="main"><?php echo $order->customer['telephone']; ?></td> </tr> <tr> <td class="main"><b><?php echo ENTRY_EMAIL_ADDRESS; ?></b></td> <td class="main"><?php echo '<a href="mailto:' . $order->customer['email_address'] . '"><u>' . $order->customer['email_address'] . '</u></a>'; ?></td> </tr> </table></td> <td valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="2"> <tr> <td class="main" valign="top"><b><?php echo ENTRY_SHIPPING_ADDRESS; ?></b></td> <td class="main"><?php echo tep_address_format($order->delivery['format_id'], $order->delivery, 1, '', '<br>'); ?></td> </tr> </table></td> <td valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="2"> <tr> <td class="main" valign="top"><b><?php echo ENTRY_BILLING_ADDRESS; ?></b></td> <td class="main"><?php echo tep_address_format($order->billing['format_id'], $order->billing, 1, '', '<br>'); ?></td> </tr> </table></td> </tr> </table></td> </tr> <tr> <td><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td> </tr> <tr> <td><table border="0" cellspacing="0" cellpadding="2"> <tr><td><table> <tr> <td class="main"><b><?php echo ENTRY_PAYMENT_METHOD; ?></b></td> <td class="main"><?php echo $order->info['payment_method']; ?></td> </tr> <!-- Mod for institutional purchase order BEGIN --> <tr> <td><table> <!-- Mod for institutional purchase order END --> <?php if (tep_not_null($order->info['cc_type']) || tep_not_null($order->info['cc_owner']) || tep_not_null($order->info['cc_number'])) { ?> <tr> <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td> </tr> <tr> <td class="main"><?php echo ENTRY_CREDIT_CARD_TYPE; ?></td> <td class="main"><?php echo $order->info['cc_type']; ?></td> </tr> <tr> <td class="main"><?php echo ENTRY_CREDIT_CARD_OWNER; ?></td> <td class="main"><?php echo $order->info['cc_owner']; ?></td> </tr> <tr> <td class="main"><?php echo ENTRY_CREDIT_CARD_NUMBER; ?></td> <td class="main"><?php echo $order->info['cc_number']; ?></td> </tr> <tr> <td class="main"><?php echo ENTRY_CREDIT_CARD_EXPIRES; ?></td> <td class="main"><?php echo $order->info['cc_expires']; ?></td> </tr> <?php } ?> <!-- Mod for institutional purchase order BEGIN --> </table></td><td><table> <?php if (tep_not_null($order->info['ip_order_no']) || tep_not_null($order->info['ip_requested_by']) || tep_not_null($order->info['ip_contact_person'])) { ?> <tr> <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td> </tr> <tr> <td class="main"><?php echo ENTRY_INSTITUTIONAL_PURCHASE_ORDER_NO; ?></td> <td class="main"><?php echo $order->info['ip_order_no']; ?></td> </tr> <tr> <td class="main"><?php echo ENTRY_INSTITUTIONAL_PURCHASE_REQUESTED_BY; ?></td> <td class="main"><?php echo $order->info['ip_requested_by']; ?></td> </tr> <tr> <td class="main"><?php echo ENTRY_INSTITUTIONAL_PURCHASE_CONTACT_PERSON; ?></td> <td class="main"><?php echo $order->info['ip_contact_person']; ?></td> </tr></table></td></tr> <?php } ?> <!-- Mod for institutional purchase order END --> </table></td></tr></table></td> </tr> <tr> <td><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td> </tr> <tr> <td><table border="0" width="100%" cellspacing="0" cellpadding="2"> <tr class="dataTableHeadingRow"> <td class="dataTableHeadingContent" colspan="2"><?php echo TABLE_HEADING_PRODUCTS; ?></td> <td class="dataTableHeadingContent"><?php echo TABLE_HEADING_PRODUCTS_MODEL; ?></td> <td class="dataTableHeadingContent" align="right"><?php echo TABLE_HEADING_TAX; ?></td> <td class="dataTableHeadingContent" align="right"><?php echo TABLE_HEADING_PRICE_EXCLUDING_TAX; ?></td> <td class="dataTableHeadingContent" align="right"><?php echo TABLE_HEADING_PRICE_INCLUDING_TAX; ?></td> <td class="dataTableHeadingContent" align="right"><?php echo TABLE_HEADING_TOTAL_EXCLUDING_TAX; ?></td> <td class="dataTableHeadingContent" align="right"><?php echo TABLE_HEADING_TOTAL_INCLUDING_TAX; ?></td> </tr> <?php for ($i=0, $n=sizeof($order->products); $i<$n; $i++) { echo ' <tr class="dataTableRow">' . "\n" . ' <td class="dataTableContent" valign="top" align="right">' . $order->products[$i]['qty'] . ' x</td>' . "\n" . ' <td class="dataTableContent" valign="top">' . $order->products[$i]['name']; if (isset($order->products[$i]['attributes']) && (sizeof($order->products[$i]['attributes']) > 0)) { for ($j = 0, $k = sizeof($order->products[$i]['attributes']); $j < $k; $j++) { echo '<br><nobr><small> <i> - ' . $order->products[$i]['attributes'][$j]['option'] . ': ' . $order->products[$i]['attributes'][$j]['value']; if ($order->products[$i]['attributes'][$j]['price'] != '0') echo ' (' . $order->products[$i]['attributes'][$j]['prefix'] . $currencies->format($order->products[$i]['attributes'][$j]['price'] * $order->products[$i]['qty'], true, $order->info['currency'], $order->info['currency_value']) . ')'; echo '</i></small></nobr>'; } } echo ' </td>' . "\n" . ' <td class="dataTableContent" valign="top">' . $order->products[$i]['model'] . '</td>' . "\n" . ' <td class="dataTableContent" align="right" valign="top">' . tep_display_tax_value($order->products[$i]['tax']) . '%</td>' . "\n" . ' <td class="dataTableContent" align="right" valign="top"><b>' . $currencies->format($order->products[$i]['final_price'], true, $order->info['currency'], $order->info['currency_value']) . '</b></td>' . "\n" . ' <td class="dataTableContent" align="right" valign="top"><b>' . $currencies->format(tep_add_tax($order->products[$i]['final_price'], $order->products[$i]['tax']), true, $order->info['currency'], $order->info['currency_value']) . '</b></td>' . "\n" . ' <td class="dataTableContent" align="right" valign="top"><b>' . $currencies->format($order->products[$i]['final_price'] * $order->products[$i]['qty'], true, $order->info['currency'], $order->info['currency_value']) . '</b></td>' . "\n" . ' <td class="dataTableContent" align="right" valign="top"><b>' . $currencies->format(tep_add_tax($order->products[$i]['final_price'], $order->products[$i]['tax']) * $order->products[$i]['qty'], true, $order->info['currency'], $order->info['currency_value']) . '</b></td>' . "\n"; echo ' </tr>' . "\n"; } ?> <tr> <td align="right" colspan="8"><table border="0" cellspacing="0" cellpadding="2"> <?php for ($i = 0, $n = sizeof($order->totals); $i < $n; $i++) { echo ' <tr>' . "\n" . ' <td align="right" class="smallText">' . $order->totals[$i]['title'] . '</td>' . "\n" . ' <td align="right" class="smallText">' . $order->totals[$i]['text'] . '</td>' . "\n" . ' </tr>' . "\n"; } ?> </table></td> </tr> </table></td> </tr> <tr> <td><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td> </tr> <tr> <td class="main"><table border="1" cellspacing="0" cellpadding="5"> <tr> <td class="smallText" align="center"><b><?php echo TABLE_HEADING_DATE_ADDED; ?></b></td> <td class="smallText" align="center"><b><?php echo TABLE_HEADING_CUSTOMER_NOTIFIED; ?></b></td> <td class="smallText" align="center"><b><?php echo TABLE_HEADING_STATUS; ?></b></td> <td class="smallText" align="center"><b><?php echo TABLE_HEADING_COMMENTS; ?></b></td> </tr> <?php $orders_history_query = tep_db_query("select orders_status_history_id, orders_status_id, date_added, customer_notified, comments, file_attached from " . TABLE_ORDERS_STATUS_HISTORY . " where orders_id = '" . tep_db_input($oID) . "' order by date_added"); if (tep_db_num_rows($orders_history_query)) { while ($orders_history = tep_db_fetch_array($orders_history_query)) { echo ' <tr>' . "\n" . ' <td class="smallText" align="center">' . tep_datetime_short($orders_history['date_added']) . '</td>' . "\n" . ' <td class="smallText" align="center">'; if ($orders_history['customer_notified'] == '1') { echo tep_image(DIR_WS_ICONS . 'tick.gif', ICON_TICK) . "</td>\n"; } else { echo tep_image(DIR_WS_ICONS . 'cross.gif', ICON_CROSS) . "</td>\n"; } echo ' <td class="smallText">' . $orders_status_array[$orders_history['orders_status_id']] . '</td>' . "\n" . ' <td class="smallText">' . "\n"; if (tep_not_null($orders_history['file_attached'])) { echo tep_href_link(DIR_WHD_ATTACH . $orders_history['file_attached']) . '">' . $orders_history['file_attached'] . '</a><br>' . "\n"; } echo nl2br(tep_db_output($orders_history['comments'])) . ' </td>' . "\n" . ' </tr>' . "\n"; } } else { echo ' <tr>' . "\n" . ' <td class="smallText" colspan="5">' . TEXT_NO_ORDER_HISTORY . '</td>' . "\n" . ' </tr>' . "\n"; } ?> </table></td> </tr> <tr> <td class="main"><br><b><?php echo TABLE_HEADING_COMMENTS; ?></b></td> </tr> <tr> <td><?php echo tep_draw_separator('pixel_trans.gif', '1', '5'); ?></td> </tr> <tr><?php echo tep_draw_form('status', FILENAME_ORDERS, tep_get_all_get_params(array('action')) . 'action=update_order'); ?> <td><table><tr> <td class="main"><?php echo tep_draw_textarea_field('comments', 'soft', '60', '5'); ?></td> <td class="main"><?php echo tep_draw_file_field('file_attached', $file_attached); ?></td> </tr></table></td> </tr> <tr> <td><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td> </tr> <tr> <td><table border="0" cellspacing="0" cellpadding="2"> <tr> <td><table border="0" cellspacing="0" cellpadding="2"> <tr> <td class="main"><b><?php echo ENTRY_STATUS; ?></b> <?php echo tep_draw_pull_down_menu('status', $orders_statuses, $order->info['orders_status']); ?></td> </tr> <tr> <td class="main"><b><?php echo ENTRY_NOTIFY_CUSTOMER; ?></b> <?php echo tep_draw_checkbox_field('notify', '', true); ?></td> <td class="main"><b><?php echo ENTRY_NOTIFY_COMMENTS; ?></b> <?php echo tep_draw_checkbox_field('notify_comments', '', true); ?></td> </tr> </table></td> <!-- <td valign="top"><?php echo tep_image_submit('button_update.gif', IMAGE_UPDATE); ?></td> </tr> </table></td> </form></tr> <tr> <td colspan="2" align="right"><?php echo '<a href="' . tep_href_link(FILENAME_ORDERS_EDIT, 'oID=' . $_GET['oID']) . '">' . tep_image_button('button_edit.gif', IMAGE_EDIT) . '</a> <a href="' . tep_href_link(FILENAME_ORDERS_INVOICE, 'oID=' . $_GET['oID']) . '" TARGET="_blank">' . tep_image_button('button_invoice.gif', IMAGE_ORDERS_INVOICE) . '</a> <a href="' . tep_href_link(FILENAME_ORDERS_PACKINGSLIP, 'oID=' . $_GET['oID']) . '" TARGET="_blank">' . tep_image_button('button_packingslip.gif', IMAGE_ORDERS_PACKINGSLIP) . '</a> <a href="' . tep_href_link(FILENAME_ORDERS, tep_get_all_get_params(array('action'))) . '">' . tep_image_button('button_back.gif', IMAGE_BACK) . '</a> '; ?></td> </tr> --> <td valign="top"><?php echo tep_image_submit('button_update.gif', IMAGE_UPDATE); ?></td> </tr> </table></td> </form></tr> <tr> <!-- ########## Ajout/editer commande et compte client ########## Modified further to add Peachtree export capability //--> <!-- A remplacer au code original //--> <td colspan="2" align="right"><?php echo '<a href="' . tep_href_link(FILENAME_ORDERS_EXPORT, 'id=' . $HTTP_GET_VARS['oID']) . '" TARGET="_blank">' . tep_image_button('button_export.gif', IMAGE_ORDERS_INVOICE) . '</a> <a href="' . tep_href_link(FILENAME_ORDERS_INVOICE, 'oID=' . $HTTP_GET_VARS['oID']) . '" TARGET="_blank">' . tep_image_button('button_invoice.gif', IMAGE_ORDERS_INVOICE) . '</a> <a href="' . tep_href_link(FILENAME_ORDERS_PACKINGSLIP, 'oID=' . $HTTP_GET_VARS['oID']) . '" TARGET="_blank">' . tep_image_button('button_packingslip.gif', IMAGE_ORDERS_PACKINGSLIP) . '</a> <a href="' . tep_href_link(FILENAME_ORDERS, tep_get_all_get_params(array('action'))) . '">' . tep_image_button('button_back.gif', IMAGE_BACK) . '</a> <a href="' . tep_href_link(FILENAME_EDIT_ORDERS, 'oID=' . $HTTP_GET_VARS['oID']) . '">' . tep_image_button('button_modifier.gif', IMAGE_EDIT) . '</a>'; ?></td> <!-- ########## END - Ajout/editer commande et compte client ########## Modified to add Peachtree export capability //--> </tr> <?php } else { ?> <tr> <td width="100%"><table border="0" width="100%" cellspacing="0" cellpadding="0"> <tr> <td class="pageHeading"><?php echo HEADING_TITLE; ?></td> <td class="pageHeading" align="right"><?php echo tep_draw_separator('pixel_trans.gif', 1, HEADING_IMAGE_HEIGHT); ?></td> <td align="right"><table border="0" width="100%" cellspacing="0" cellpadding="0"> <tr><?php echo tep_draw_form('orders', FILENAME_ORDERS, '', 'get'); ?> <td class="smallText" align="right"><?php echo HEADING_TITLE_SEARCH . ' ' . tep_draw_input_field('oID', '', 'size="12"') . tep_draw_hidden_field('action', 'edit'); ?></td> </form></tr> <tr><?php echo tep_draw_form('status', FILENAME_ORDERS, '', 'get'); ?> <td class="smallText" align="right"><?php echo HEADING_TITLE_STATUS . ' ' . tep_draw_pull_down_menu('status', array_merge(array(array('id' => '', 'text' => TEXT_ALL_ORDERS)), $orders_statuses), '', 'onChange="this.form.submit();"'); ?></td> </form></tr> </table></td> </tr> </table></td> </tr> <tr> <td><table border="0" width="100%" cellspacing="0" cellpadding="0"> <tr> <!-- Begin lines added by Admin sort order contribution 1374 --> <?php switch ($listing) { case "id-asc": $order = "o.orders_id"; break; case "customers": $order = "o.customers_name"; break; case "customers-desc": $order = "o.customers_name DESC"; break; case "ottotal": $order = "ot.value"; break; case "ottotal-desc": $order = "ot.value DESC"; break; case "date-asc": $order = "o.date_purchased"; break; case "date-desc": $order = "o.date_purchased DESC"; break; case "status-asc": $order = "s.orders_status_name"; break; case "status-desc": $order = "s.orders_status_name DESC"; break; default: $order = "o.orders_id DESC"; } ?> <td valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2"> <tr class="dataTableHeadingRow"> <td class="dataTableHeadingContent"><a href="<?php echo "$PHP_SELF?listing=customers"; ?>"><?php echo tep_image_button('ic_up.gif', ' Sort ' . TABLE_HEADING_CUSTOMERS . ' --> A-B-C From
  5. klarsen

    Music Distribution Shop Question

    You might try the supplier or manufacturer contributions available. The one that I'm thinking of is the Supplier Admin Contribution, which gives your suppliers access to reports and information. But it won't calculate the percentage owed without making some modification.
  6. So, can this same change be made in other files also? Say some of the admin files? in the Helpdesk contribution? The Order Edit contribution? etc.? Of course, I'm assuming that the original code is exactly like this, but I guess the principle can be used elsewhere?
  7. klarsen

    product Supplier fields

    This will allow you to keep more details about the vendor, but not collect details about transactions with the vendor, which is what jcorreia was looking for. Even if you modify "Enhanced Vendors" to add additional fields, what will you do when there is more than one shipment from that vendor? More than one invoice? No, jcorreia is looking for an entirely new table or more, and supporting php files to allow the admin to enter the data. It would be great if osCommerce added this capability. As I indicated before, I can help someone who is interested in writing this.
  8. klarsen

    Manufacturer Admin Interface

    http://www.oscommerce.com/community/contributions,4298 While I have NOT installed this contribution (nor do I know much about it), it does seem to be on point for your question. There may also be other contributions that do this. I do plan on trying it at some point, so I'd like to hear about other's experiences. Hopefully, it will do what you want, or point you in the right direction.
  9. klarsen

    product Supplier fields

    Nope. Its not in osCommerce. This is really an accounting function -- you are talking about a purchasing function. It is certainly possible to create such a function in osCommerce as a contribution, but I believe it will be quite a lot of work, since you will have to code it all from scratch. I do think this would be a good addition to osCommerce, and I'm willing to help get such a function written. I have an accounting background and know the structure and features needed. However, I'm not a php programmer, so I don't think I can do it by myself. Hopefully some programmer will see the need for this and be interested in taking it on. If so, please contact me, I'm willing to help. Kent Larsen kent (at) lusobraz (dot) com
  10. klarsen

    Using Master Password Contribution

    Its really more simple than it might seem. First, download the most recent version of the contribution (make sure that the instructions say it is a complete version!). One of the files you get will be called "readme" or "instructions" or something similar. Open that file and follow the instructions to install it. Like most contributions, this does require that you modify some of the files in your setup. Be careful when you do this, and keep a backup copy of the file before you modify it, so that if you do it wrong, you can simply replace the file you modified. Again, its not that hard, just backup, be careful, and take your time.
  11. klarsen

    New Order Item Status Contribution

    Does anyone have experience with the business to business contributions who could say how this issue is handled in them? Has someone already written the necessary code to do this?
  12. I assume you want the customer to be able to do this? Try: http://www.oscommerce.com/community/contributions,2890 Probably not exactly what you are talking about, but it may be close.
  13. OK, so it wasn't as difficult as I assumed. I did a little research, made the following changes, and came up with what I needed: In edit_orders.php, after the lines // ############################################################################ // Get List of All Products // ############################################################################ There is an sql selection that reads: $result = tep_db_query("SELECT products_name, p.products_id, x.categories_name, ptc.categories_id FROM " . TABLE_PRODUCTS . " p LEFT JOIN " . TABLE_PRODUCTS_DESCRIPTION . " pd ON pd.products_id=p.products_id LEFT JOIN " . TABLE_PRODUCTS_TO_CATEGORIES . " ptc ON ptc.products_id=p.products_id LEFT JOIN " . TABLE_CATEGORIES_DESCRIPTION . " cd ON cd.categories_id=ptc.categories_id LEFT JOI[/quote]N " . TABLE_CATEGORIES_DESCRIPTION . " x ON x.categories_id=ptc.categories_id ORDER BY categories_id"); change to $result = tep_db_query("SELECT products_name, p.products_id, p.products_model, x.categories_name, ptc.categories_id FROM " . TABLE_PRODUCTS . " p LEFT JOIN " . TABLE_PRODUCTS_DESCRIPTION . " pd ON pd.products_id=p.products_id LEFT JOIN " . TABLE_PRODUCTS_TO_CATEGORIES . " ptc ON ptc.products_id=p.products_id LEFT JOIN " . TABLE_CATEGORIES_DESCRIPTION . " cd ON cd.categories_id=ptc.categories_id LEFT JOI[/quote]N " . TABLE_CATEGORIES_DESCRIPTION . " x ON x.categories_id=ptc.categories_id ORDER BY categories_id"); I haven't figured out why, but using ORDER BY categories_id, products_model doesn't sort the resulting dropdown list. Then, in the following php code that extracts the data, change the following: while($row = tep_db_fetch_array($result)) { extract($row,EXTR_PREFIX_ALL,"db"); $ProductList[$db_categories_id][$db_products_id] = $db_products_name; $CategoryList[$db_categories_id] = $db_categories_name; $LastCategory = $db_categories_name; } to: while($row = tep_db_fetch_array($result)) { extract($row,EXTR_PREFIX_ALL,"db"); $ProductList[$db_categories_id][$db_products_id] = substr($db_products_name, 0, 50) . ' -- ' . $db_products_model; $CategoryList[$db_categories_id] = $db_categories_name; $LastCategory = $db_categories_name; } Note: in the line that starts $ProductList, you can change the number 50 (last element in the substr function) to the maximum length you want your product name to be. You can also change the code between the single quotes (i.e., the spaces and dashes in the following: . ' -- ' .) to whatever you want to use to separate the model number from the product name. That's it! Why did I need to do this? My site sells books -- including many different editions of a particular title. Since the title is the 'product name', when I try to add an item using edit_orders.php, I often get a list of the same product name repeated multiple times (e.g. eight or ten different editions of "Tom Sawyer"). But each edition has a different price and a different ISBN (the product model!). With the above modification, I can now tell which edition I'm getting, and verify with even those listed once that the item I have selected is the item the customer expects. Make sense?? It does to me. I hope its also helpful to someone else. Since it isn't necessarily useful to everyone, I suggest that anyone considering adding it to the code for this contribution do the extra coding to make it optional -- something that can be turned on or off in a configuration setting.
  14. If someone who knows php and sql can look at the following, I suspect we can get a quick mod done. Here's what I'm looking at: In edit_orders.php, after the lines // ############################################################################ // Get List of All Products // ############################################################################ There is an sql selection that reads: $result = tep_db_query("SELECT products_name, p.products_id, x.categories_name, ptc.categories_id FROM " . TABLE_PRODUCTS . " p LEFT JOIN " . TABLE_PRODUCTS_DESCRIPTION . " pd ON pd.products_id=p.products_id LEFT JOIN " . TABLE_PRODUCTS_TO_CATEGORIES . " ptc ON ptc.products_id=p.products_id LEFT JOIN " . TABLE_CATEGORIES_DESCRIPTION . " cd ON cd.categories_id=ptc.categories_id LEFT JOI[/quote]N " . TABLE_CATEGORIES_DESCRIPTION . " x ON x.categories_id=ptc.categories_id ORDER BY categories_id"); Obviously, we first need to get the model number in the query. Can we just add p.products_model after p.products_id? If we change the ORDER BY line from categories_id to products_model, is there a downside? Can we sort by categories_id and then by products_model? How? This data is then extracted using the following php code: while($row = tep_db_fetch_array($result)) { extract($row,EXTR_PREFIX_ALL,"db"); $ProductList[$db_categories_id][$db_products_id] = $db_products_name; $CategoryList[$db_categories_id] = $db_categories_name; $LastCategory = $db_categories_name; } What do I need to do to add the model number to the $ProductList line? (I'd like the pop-up list to actually contain first the title and then the model number -- and I need to limit the length of the title to say 50 or 75 characters). How do I limit the length of the product name and then concatenate a space and the model number on the end? I think that's probably all the code that would need to be changed to sort by model. Can someone tell me what to change?
  15. Has anyone been able to solve this problem? Or even better, to allow the admin user to enter the model number instead of selecting items from the category structure?
×