X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=blobdiff_plain;f=sales%2Fcustomer_credit_invoice.php;h=e482386b971a7f9f14998fca9fd46cc814b75e6b;hb=efa2530a7c385a329c3fc76f4560b28ba97c3efe;hp=b64f8019bde9cc524f58307eaa2d16fad0b3da02;hpb=da8311619dd73feae101d246a1957b972e00cbd2;p=fa-stable.git diff --git a/sales/customer_credit_invoice.php b/sales/customer_credit_invoice.php index b64f8019..e482386b 100644 --- a/sales/customer_credit_invoice.php +++ b/sales/customer_credit_invoice.php @@ -1,396 +1,385 @@ . +***********************************************************************/ +//--------------------------------------------------------------------------- +// +// Entry/Modify Credit Note for selected Sales Invoice +// + +$page_security = 'SA_SALESCREDITINV'; +$path_to_root = ".."; include_once($path_to_root . "/sales/includes/cart_class.inc"); include_once($path_to_root . "/includes/session.inc"); - include_once($path_to_root . "/includes/data_checks.inc"); - -include_once($path_to_root . "/includes/manufacturing.inc"); include_once($path_to_root . "/sales/includes/sales_db.inc"); include_once($path_to_root . "/sales/includes/sales_ui.inc"); +include_once($path_to_root . "/reporting/includes/reporting.inc"); + $js = ""; -if ($use_popup_windows) +if ($SysPrefs->use_popup_windows) { $js .= get_js_open_window(900, 500); -page(_("Credit all or part of an Invoice"), false, false, "", $js); +} -//--------------------------------------------------------------------------------------------------------------- +if (user_use_date_picker()) { + $js .= get_js_date_picker(); +} -if (isset($_GET['AddedID'])) -{ +if (isset($_GET['ModifyCredit'])) { + $_SESSION['page_title'] = sprintf(_("Modifying Credit Invoice # %d."), $_GET['ModifyCredit']); + $help_context = "Modifying Credit Invoice"; + processing_start(); +} elseif (isset($_GET['InvoiceNumber'])) { + $_SESSION['page_title'] = _($help_context = "Credit all or part of an Invoice"); + processing_start(); +} +page($_SESSION['page_title'], false, false, "", $js); + +//----------------------------------------------------------------------------- + +if (isset($_GET['AddedID'])) { $credit_no = $_GET['AddedID']; - $trans_type = 11; + $trans_type = ST_CUSTCREDIT; - echo "
"; display_notification_centered(_("Credit Note has been processed")); - display_note(get_customer_trans_view_str($trans_type, $credit_no, _("View this credit note")), 0, 0); - - display_note(get_gl_view_str($trans_type, $credit_no, _("View the GL Journal Entries for this Credit Note"))); + + display_note(get_customer_trans_view_str($trans_type, $credit_no, _("&View This Credit Note")), 0, 0); + + display_note(print_document_link($credit_no."-".$trans_type, _("&Print This Credit Note"), true, $trans_type),1); + display_note(print_document_link($credit_no."-".$trans_type, _("&Email This Credit Note"), true, $trans_type, false, "printlink", "", 1),1); + + display_note(get_gl_view_str($trans_type, $credit_no, _("View the GL &Journal Entries for this Credit Note")),1); + + hyperlink_params("$path_to_root/admin/attachments.php", _("Add an Attachment"), "filterType=$trans_type&trans_no=$credit_no"); display_footer_exit(); -} -//-------------------------------------------------------------------------------------- +} elseif (isset($_GET['UpdatedID'])) { + $credit_no = $_GET['UpdatedID']; + $trans_type = ST_CUSTCREDIT; -if (!isset($_GET['InvoiceNumber']) && !$_SESSION['InvoiceToCredit']) -{ - /* This page can only be called with an invoice number for crediting*/ - die (_("This page can only be opened if an invoice has been selected for crediting.")); -} + display_notification_centered(_("Credit Note has been updated")); + + display_note(get_customer_trans_view_str($trans_type, $credit_no, _("&View This Credit Note")), 0, 0); + + display_note(print_document_link($credit_no."-".$trans_type, _("&Print This Credit Note"), true, $trans_type),1); + display_note(print_document_link($credit_no."-".$trans_type, _("&Email This Credit Note"), true, $trans_type, false, "printlink", "", 1),1); -//-------------------------------------------------------------------------------------- + display_note(get_gl_view_str($trans_type, $credit_no, _("View the GL &Journal Entries for this Credit Note")),1); + + display_footer_exit(); +} else + check_edit_conflicts(get_post('cart_id')); + + +//----------------------------------------------------------------------------- function can_process() { - if (!is_date($_POST['CreditDate'])) - { - display_error(_("The entered date is invalid."));; + global $Refs; + + if (!is_date($_POST['CreditDate'])) { + display_error(_("The entered date is invalid.")); + set_focus('CreditDate'); return false; - } - elseif (!is_date_in_fiscalyear($_POST['CreditDate'])) - { - display_error(_("The entered date is not in fiscal year.")); + } elseif (!is_date_in_fiscalyear($_POST['CreditDate'])) { + display_error(_("The entered date is out of fiscal year or is closed for further data entry.")); + set_focus('CreditDate'); return false; } - if (!references::is_valid($_POST['ref'])) - { - display_error(_("You must enter a reference."));; - return false; - } + if ($_SESSION['Items']->trans_no==0) { + if (!$Refs->is_valid($_POST['ref'], ST_CUSTCREDIT)) { + display_error(_("You must enter a reference.")); + set_focus('ref'); + return false; + } - if (!is_new_reference($_POST['ref'], 11)) - { - display_error(_("The entered reference is already in use."));; + } + if (!check_num('ChargeFreightCost', 0)) { + display_error(_("The entered shipping cost is invalid or less than zero.")); + set_focus('ChargeFreightCost'); return false; } - - if (!is_numeric($_POST['ChargeFreightCost']) || $_POST['ChargeFreightCost'] < 0) - { - display_error(_("The entered shipping cost is invalid or less than zero."));; + if (!check_quantities()) { + display_error(_("Selected quantity cannot be less than zero nor more than quantity not credited yet.")); return false; } - return true; } -//-------------------------------------------------------------------------------------- +//----------------------------------------------------------------------------- -function clear_globals() -{ - if (isset($_SESSION['Items'])) - { - unset($_SESSION['Items']->line_items); - unset($_SESSION['Items']); - } - unset($_SESSION['InvoiceToCredit']); -} +if (isset($_GET['InvoiceNumber']) && $_GET['InvoiceNumber'] > 0) { -//-------------------------------------------------------------------------------------- + $_SESSION['Items'] = new Cart(ST_SALESINVOICE, $_GET['InvoiceNumber'], true); + copy_from_cart(); -function process_credit() -{ - global $path_to_root; - if (can_process()) - { - $credit_no = credit_invoice($_SESSION['Items'], $_SESSION['InvoiceToCredit'], - $_SESSION['Order'], $_POST['CreditDate'], $_POST['CreditType'], - $_POST['tax_group_id'], $_POST['ChargeFreightCost'], $_POST['ref'], - $_POST['CreditText'], $_POST['WriteOffGLCode']); +} elseif ( isset($_GET['ModifyCredit']) && $_GET['ModifyCredit']>0) { - clear_globals(); + $_SESSION['Items'] = new Cart(ST_CUSTCREDIT, $_GET['ModifyCredit']); + copy_from_cart(); - meta_forward($_SERVER['PHP_SELF'], "AddedID=$credit_no"); - } +} elseif (!processing_active()) { + /* This page can only be called with an invoice number for crediting*/ + die (_("This page can only be opened if an invoice has been selected for crediting.")); +} elseif (!check_quantities()) { + display_error(_("Selected quantity cannot be less than zero nor more than quantity not credited yet.")); } -//-------------------------------------------------------------------------------------- - -if (isset($_GET['InvoiceNumber']) && $_GET['InvoiceNumber'] > 0) +function check_quantities() { + $ok =1; + foreach ($_SESSION['Items']->line_items as $line_no=>$itm) { + if ($itm->quantity == $itm->qty_done) { + continue; // this line was fully credited/removed + } + if (isset($_POST['Line'.$line_no])) { + if (check_num('Line'.$line_no, 0, $itm->quantity)) { + $_SESSION['Items']->line_items[$line_no]->qty_dispatched = + input_num('Line'.$line_no); + } + else { + $ok = 0; + } + } - clear_globals(); - - session_register("Items"); - session_register("InvoiceToCredit"); - session_Register("Order"); - - $_SESSION['InvoiceToCredit'] = $_GET['InvoiceNumber']; - $_SESSION['Items'] = new cart; - - /*read in all the guff from the selected invoice into the Items cart */ - - // we need a distinct here so that it only returns 1 line - becuase there can be mutliple moves - // per item (for assemblies, etc) - $sql = "SELECT DISTINCT ".TB_PREF."debtor_trans.*, - ".TB_PREF."cust_branch.default_location, ".TB_PREF."cust_branch.default_ship_via, - ".TB_PREF."debtors_master.name, ".TB_PREF."debtors_master.curr_code, - ".TB_PREF."tax_groups.name AS tax_group_name, ".TB_PREF."tax_groups.id AS tax_group_id, - ".TB_PREF."sales_orders.from_stk_loc - FROM ".TB_PREF."debtor_trans, ".TB_PREF."debtors_master, ".TB_PREF."cust_branch, ".TB_PREF."tax_groups, ".TB_PREF."sales_orders - WHERE ".TB_PREF."debtor_trans.debtor_no = ".TB_PREF."debtors_master.debtor_no - AND ".TB_PREF."debtor_trans.branch_code = ".TB_PREF."cust_branch.branch_code - AND ".TB_PREF."debtor_trans.debtor_no = ".TB_PREF."cust_branch.debtor_no - AND ".TB_PREF."cust_branch.tax_group_id = ".TB_PREF."tax_groups.id - AND ".TB_PREF."debtor_trans.trans_no = " . $_GET['InvoiceNumber'] . " - AND ".TB_PREF."debtor_trans.type=10 - AND ".TB_PREF."sales_orders.order_no=".TB_PREF."debtor_trans.order_"; - - $result = db_query($sql,"The invoice details cannot be retrieved"); - - if (db_num_rows($result) == 1) - { - - $myrow = db_fetch($result); - - $_SESSION['Items']->customer_id = $myrow["debtor_no"]; - $_SESSION['Items']->customer_name = $myrow["name"]; - $_SESSION['Items']->cust_ref = $myrow["reference"]; - $_SESSION['Items']->Branch = $myrow["branch_code"]; - $_SESSION['Items']->customer_currency = $myrow["curr_code"]; - - $_SESSION['Items']->Comments = ""; - $_SESSION['Items']->default_sales_type =$myrow["tpe"]; - $_SESSION['Items']->Location = $myrow["from_stk_loc"]; - - $_SESSION['Items']->tax_group_name = $myrow["tax_group_name"]; - $_SESSION['Items']->tax_group_id = $myrow["tax_group_id"]; - - $_SESSION['Items']->delivery_date = sql2date($myrow["tran_date"]); - $_SESSION['Items']->freight_cost = $myrow["ov_freight"]; - - $_SESSION['Items']->ship_via = $myrow["default_ship_via"]; - - $_SESSION['Order'] = $myrow["order_"]; - - db_free_result($result); - - /*now populate the line items array with the detail records for the invoice*/ - - $result = get_customer_trans_details(10, $_GET['InvoiceNumber']); - - if (db_num_rows($result) > 0) - { - - while ($myrow = db_fetch($result)) - { + if (isset($_POST['Line'.$line_no.'Desc'])) { + $line_desc = $_POST['Line'.$line_no.'Desc']; + if (strlen($line_desc) > 0) { + $_SESSION['Items']->line_items[$line_no]->item_description = $line_desc; + } + } + } + return $ok; +} +//----------------------------------------------------------------------------- - $_SESSION['Items']->add_to_cart($myrow["stock_id"],-$myrow["quantity"], - $myrow["FullUnitPrice"],$myrow["discount_percent"]); +function copy_to_cart() +{ + $cart = &$_SESSION['Items']; + $cart->ship_via = $_POST['ShipperID']; + $cart->freight_cost = input_num('ChargeFreightCost'); + $cart->document_date = $_POST['CreditDate']; + $cart->Location = (isset($_POST['Location']) ? $_POST['Location'] : ""); + $cart->Comments = $_POST['CreditText']; + if ($_SESSION['Items']->trans_no == 0) + $cart->reference = $_POST['ref']; +} +//----------------------------------------------------------------------------- - $_SESSION['Items']->line_items[$myrow["stock_id"]]->standard_cost = $myrow["standard_cost"]; +function copy_from_cart() +{ + $cart = &$_SESSION['Items']; + $_POST['ShipperID'] = $cart->ship_via; + $_POST['ChargeFreightCost'] = price_format($cart->freight_cost); + $_POST['CreditDate']= $cart->document_date; + $_POST['Location']= $cart->Location; + $_POST['CreditText']= $cart->Comments; + $_POST['cart_id'] = $cart->cart_id; + $_POST['ref'] = $cart->reference; +} +//----------------------------------------------------------------------------- - } +if (isset($_POST['ProcessCredit']) && can_process()) { + $new_credit = ($_SESSION['Items']->trans_no == 0); - } /*else { // there are no item records created for that invoice - // it's ok there might be shipping or only taxes !! - echo "
" . _("Back to the main menu") . ""; - echo "

" . _("There are no line items that were retrieved for this invoice. A credit note cannot be created from this invoice."). "

"; - end_page(); - exit; - - }*/ //end of checks on returned data set - db_free_result($result); - } - else - { - display_error(_("This invoice can not be credited using the automatic facility.")); - display_error("Please report that a duplicate debtor_trans header record was found for invoice " . $SESSION['InvoiceToCredit']); - echo "

"; - exit; - } //valid invoice record returned from the entered invoice number - -} -else -{ + if (!isset($_POST['WriteOffGLCode'])) + $_POST['WriteOffGLCode'] = 0; -/* if processing, the page has been called and ${$StkItm->stock_id} would have been set from the post */ - foreach ($_SESSION['Items']->line_items as $itm) + copy_to_cart(); + if ($new_credit) + new_doc_date($_SESSION['Items']->document_date); + $credit_no = $_SESSION['Items']->write($_POST['WriteOffGLCode']); + if ($credit_no == -1) { - $_SESSION['Items']->line_items[$itm->stock_id]->qty_dispatched = $_POST[$itm->stock_id]; - - if (isset($_POST[$itm->stock_id . "Desc"]) && strlen($_POST[$itm->stock_id . "Desc"]) > 0) - { - $_SESSION['Items']->line_items[$itm->stock_id]->item_description = $_POST[$itm->stock_id . "Desc"]; + display_error(_("The entered reference is already in use.")); + set_focus('ref'); + } elseif($credit_no) { + processing_end(); + if ($new_credit) { + meta_forward($_SERVER['PHP_SELF'], "AddedID=$credit_no"); + } else { + meta_forward($_SERVER['PHP_SELF'], "UpdatedID=$credit_no"); } } } -//-------------------------------------------------------------------------------------- +//----------------------------------------------------------------------------- -if (isset($_POST['ProcessCredit'])) -{ - process_credit(); -} - -//-------------------------------------------------------------------------------------- - -if (isset($_POST['Location'])) -{ +if (isset($_POST['Location'])) { $_SESSION['Items']->Location = $_POST['Location']; } -//-------------------------------------------------------------------------------------- +//----------------------------------------------------------------------------- function display_credit_items() { - global $table_style, $table_style2; - - start_form(false, true); + start_form(); + hidden('cart_id'); - start_table("$table_style2 width=80%", 5); + start_table(TABLESTYLE2, "width='80%'", 5); echo ""; // outer table - start_table("$table_style width=100%"); + start_table(TABLESTYLE, "width='100%'"); start_row(); label_cells(_("Customer"), $_SESSION['Items']->customer_name, "class='tableheader2'"); label_cells(_("Branch"), get_branch_name($_SESSION['Items']->Branch), "class='tableheader2'"); label_cells(_("Currency"), $_SESSION['Items']->customer_currency, "class='tableheader2'"); end_row(); start_row(); - - if (!isset($_POST['ref'])) - $_POST['ref'] = references::get_next(11); - ref_cells(_("Reference"), 'ref', null, "class='tableheader2'"); + if ($_SESSION['Items']->trans_no==0) { + ref_cells(_("Reference"), 'ref', '', null, "class='tableheader2'", false, ST_CUSTCREDIT, + array('customer' => $_SESSION['Items']->customer_id, + 'branch' => $_SESSION['Items']->Branch, + 'date' => get_post('CreditDate'))); + } else { + label_cells(_("Reference"), $_SESSION['Items']->reference, "class='tableheader2'"); + } + label_cells(_("Crediting Invoice"), get_customer_trans_view_str(ST_SALESINVOICE, array_keys($_SESSION['Items']->src_docs)), "class='tableheader2'"); - label_cells(_("Crediting Invoice"), get_customer_trans_view_str(10, $_SESSION['InvoiceToCredit']), "class='tableheader2'"); + if (!isset($_POST['ShipperID'])) { + $_POST['ShipperID'] = $_SESSION['Items']->ship_via; + } + label_cell(_("Shipping Company"), "class='tableheader2'"); + shippers_list_cells(null, 'ShipperID', $_POST['ShipperID']); - if (!isset($_POST['tax_group_id'])) - $_POST['tax_group_id'] = $_SESSION['Items']->tax_group_id; - label_cell(_("Tax Group"), "class='tableheader2'"); - tax_groups_list_cells(null, 'tax_group_id', $_POST['tax_group_id'], false, null, true); end_row(); end_table(); echo "";// outer table - start_table("$table_style width=100%"); + start_table(TABLESTYLE, "width='100%'"); - label_row(_("Invoice Date"), $_SESSION['Items']->delivery_date, "class='tableheader2'"); + label_row(_("Invoice Date"), $_SESSION['Items']->src_date, "class='tableheader2'"); - date_row(_("Credit Note Date"), 'CreditDate', null, 0, 0, 0, "class='tableheader2'"); + date_row(_("Credit Note Date"), 'CreditDate', '', $_SESSION['Items']->trans_no==0, 0, 0, 0, "class='tableheader2'"); end_table(); echo ""; - + end_table(1); // outer table - start_table("$table_style width=80%"); + div_start('credit_items'); + start_table(TABLESTYLE, "width='80%'"); $th = array(_("Item Code"), _("Item Description"), _("Invoiced Quantity"), _("Units"), _("Credit Quantity"), _("Price"), _("Discount %"), _("Total")); - table_header($th); + table_header($th); $k = 0; //row colour counter - foreach ($_SESSION['Items']->line_items as $ln_itm) - { - - alt_table_row_color($k); + foreach ($_SESSION['Items']->line_items as $line_no=>$ln_itm) { + if ($ln_itm->quantity == $ln_itm->qty_done) { + continue; // this line was fully credited/removed + } + alt_table_row_color($k); - $line_total =($ln_itm->qty_dispatched * $ln_itm->price * (1 - $ln_itm->discount_percent)); + // view_stock_status_cell($ln_itm->stock_id); alternative view label_cell($ln_itm->stock_id); - text_cells(null, $ln_itm->stock_id . "Desc", $ln_itm->item_description, 30, 50); - qty_cell($ln_itm->quantity); - label_cell($ln_itm->units); - text_cells(null, $ln_itm->stock_id, $ln_itm->qty_dispatched, 13, 15); + text_cells(null, 'Line'.$line_no.'Desc', $ln_itm->item_description, 30, 50); + $dec = get_qty_dec($ln_itm->stock_id); + qty_cell($ln_itm->quantity, false, $dec); + label_cell($ln_itm->units); + amount_cells(null, 'Line'.$line_no, number_format2($ln_itm->qty_dispatched, $dec), + null, null, $dec); + $line_total =($ln_itm->qty_dispatched * $ln_itm->price * (1 - $ln_itm->discount_percent)); amount_cell($ln_itm->price); - amount_cell($ln_itm->discount_percent*100); + percent_cell($ln_itm->discount_percent*100); amount_cell($line_total); end_row(); } - if (!isset($_POST['ChargeFreightCost']) || ($_POST['ChargeFreightCost'] == "")) - { - $_POST['ChargeFreightCost'] = $_SESSION['Items']->freight_cost; + if (!check_num('ChargeFreightCost')) { + $_POST['ChargeFreightCost'] = price_format($_SESSION['Items']->freight_cost); } + $colspan = 7; start_row(); - label_cell(_("Credit Shipping Cost"), "colspan=7 align=right"); - text_cells(null, "ChargeFreightCost", $_POST['ChargeFreightCost'], 6, 6); + label_cell(_("Credit Shipping Cost"), "colspan=$colspan align=right"); + small_amount_cells(null, "ChargeFreightCost", price_format(get_post('ChargeFreightCost',0))); end_row(); $inv_items_total = $_SESSION['Items']->get_items_total_dispatch(); - $display_sub_total = number_format2($inv_items_total + $_POST['ChargeFreightCost'],user_price_dec()); - label_row(_("Sub-total"), $display_sub_total, "colspan=7 align=right", "align=right"); + $display_sub_total = price_format($inv_items_total + input_num($_POST['ChargeFreightCost'])); + label_row(_("Sub-total"), $display_sub_total, "colspan=$colspan align=right", "align=right"); - $taxes = $_SESSION['Items']->get_taxes($_POST['tax_group_id'], $_POST['ChargeFreightCost']); + $taxes = $_SESSION['Items']->get_taxes(input_num($_POST['ChargeFreightCost'])); - $tax_total = display_edit_tax_items($taxes, 7); + $tax_total = display_edit_tax_items($taxes, $colspan, $_SESSION['Items']->tax_included); - $display_total = number_format2(($inv_items_total + $_POST['ChargeFreightCost'] + $tax_total), user_price_dec()); + $display_total = price_format(($inv_items_total + input_num('ChargeFreightCost') + $tax_total)); - label_row(_("Credit Note Total"), $display_total, "colspan=7 align=right", "align=right"); + label_row(_("Credit Note Total"), $display_total, "colspan=$colspan align=right", "align=right"); end_table(); + div_end(); } -//-------------------------------------------------------------------------------------- - +//----------------------------------------------------------------------------- function display_credit_options() { - global $table_style2; - - echo "
"; - start_table($table_style2); - - echo "" . _("Credit Note Type") . ""; - echo ""; - echo""; + global $Ajax; + br(); - if (!isset($_POST['CreditType']) || $_POST['CreditType'] == "Return") - { + if (isset($_POST['_CreditType_update'])) + $Ajax->activate('options'); - /*if the credit note is a return of goods then need to know which location to receive them into */ - if (!isset($_POST['Location'])) - { - $_POST['Location'] = $_SESSION['Items']->Location; - } + div_start('options'); + start_table(TABLESTYLE2); - locations_list_row(_("Items Returned to Inventory Location"), 'Location', $_POST['Location']); + credit_type_list_row(_("Credit Note Type"), 'CreditType', null, true); - } - else - { /* the goods are to be written off to somewhere */ + if ($_POST['CreditType'] == "Return") + { - gl_all_accounts_list_row(_("Write Off the Cost of the Items to"), 'WriteOffGLCode', $_POST['WriteOffGLCode']); - } - textarea_row(_("Memo"), "CreditText", null, 45, 3); - end_table(); + /*if the credit note is a return of goods then need to know which location to receive them into */ + if (!isset($_POST['Location'])) + $_POST['Location'] = $_SESSION['Items']->Location; + locations_list_row(_("Items Returned to Location"), 'Location', $_POST['Location']); + } + else + { + /* the goods are to be written off to somewhere */ + gl_all_accounts_list_row(_("Write off the cost of the items to"), 'WriteOffGLCode', null); + } + + textarea_row(_("Memo"), "CreditText", null, 51, 3); + echo ""; + div_end(); } -//-------------------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +if (get_post('Update')) +{ + copy_to_cart(); + $Ajax->activate('credit_items'); +} +//----------------------------------------------------------------------------- display_credit_items(); display_credit_options(); echo "

"; -submit('Update', _("Update")); +submit('Update', _("Update"), true, _('Update credit value for quantities entered'), true); echo " "; -submit('ProcessCredit', _("Process Credit Note")); +submit('ProcessCredit', _("Process Credit Note"), true, '', 'default'); echo "
"; end_form(); -//-------------------------------------------------------------------------------------- end_page(); -?>