Moving 2.0 development version to main trunk.
[fa-stable.git] / sales / includes / ui / sales_credit_ui.inc
index 555a9b3f8211f450d4ee0141307b7dbf8f673a03..fe1e1dbe3d30d434d4d2cccee568a2f6b9ef3c24 100644 (file)
@@ -6,46 +6,78 @@ include_once($path_to_root . "/includes/ui.inc");
 
 function display_credit_header(&$order)
 {
-       global $table_style;
+       global $table_style, $Ajax;
        start_table("width=80% $table_style");
        echo "<tr><td valign=top>"; // outer table
        echo "<table>";
 
        $customer_error = "";
+       $change_prices = 0;
 
     if (!isset($_POST['customer_id']) && (get_global_customer() != reserved_words::get_all()))
        $_POST['customer_id'] = get_global_customer();
 
        customer_list_row(_("Customer:"), 'customer_id', null, false, true);
 
-       if ($order->customer_id != $_POST['customer_id']
+       if ($order->customer_id != $_POST['customer_id'] /*|| $order->sales_type != $_POST['sales_type_id']*/)
        {
                // customer has changed
 
                // delete all the order items - drastic but necessary because of
                // change of currency, sales type, etc
-               $order->clear_items();
+//             $order->clear_items();
 
                // clear the branch selection
-               unset($_POST['branch_id']);
+//             unset($_POST['branch_id']);
+                       $_POST['branch_id'] = '';
+                       $Ajax->activate('branch_id');
        }
 
-       customer_branches_list_row(_("Branch:"), $_POST['customer_id'], 'branch_id', null, false, true, true);
+       customer_branches_list_row(_("Branch:"), $_POST['customer_id'], 
+         'branch_id', null, false, true, true);
 
-       //if (($_SESSION['Items']->order_no == 0) ||
-       //      ($order->customer_id != $_POST['customer_id']) || 
+       //if (($_SESSION['credit_items']->order_no == 0) ||
+       //      ($order->customer_id != $_POST['customer_id']) ||
        //      ($order->Branch != $_POST['branch_id']))
        //      $customer_error = get_customer_details_to_order($order, $_POST['customer_id'], $_POST['branch_id']);
-       if (($order->customer_id != $_POST['customer_id']) || 
+       if (($order->customer_id != $_POST['customer_id']) ||
                ($order->Branch != $_POST['branch_id']))
-               $customer_error = get_customer_details_to_order($order, $_POST['customer_id'], $_POST['branch_id']);
-
+         {
+
+                               $old_order = (PHP_VERSION<5) ? $order : clone( $order );
+                               $customer_error = get_customer_details_to_order($order, $_POST['customer_id'], $_POST['branch_id']);
+
+                               $_POST['Location'] = $order->Location;
+                               $_POST['deliver_to'] = $order->deliver_to;
+                               $_POST['delivery_address'] = $order->delivery_address;
+                               $_POST['phone'] = $order->phone;
+                               $Ajax->activate('Location');
+                               $Ajax->activate('deliver_to');
+                               $Ajax->activate('phone');
+                               $Ajax->activate('delivery_address');
+                               // change prices if necessary
+                               // what about discount in template case?
+                               if ($old_order->customer_currency != $order->customer_currency) {
+                                   $change_prices = 1;
+                               }
+                               if ($old_order->sales_type != $order->sales_type) {
+                               //  || $old_order->default_discount!=$order->default_discount
+                                       $_POST['sales_type'] = $order->sales_type;
+                                   $Ajax->activate('sales_type_id');
+                                   $change_prices = 1;
+                               }
+                               unset($old_order);
+         }
        set_global_customer($_POST['customer_id']);
 
        if (!isset($_POST['ref']))
                $_POST['ref'] = references::get_next(11);
+       if ($_SESSION['Items']->trans_no==0)
+           ref_row(_("Reference").':', 'ref');
+       else
+           label_row(_("Reference").':', $_POST['ref'] );
+
 
-       ref_row(_("Reference:"), 'ref');
 
        echo "</table>";
 
@@ -64,8 +96,26 @@ function display_credit_header(&$order)
        echo "<table height='5'>";
 
     if (!isset($_POST['sales_type_id']))
-       $_POST['sales_type_id'] = $order->default_sales_type;
-    sales_types_list_row(_("Sales Type"), 'sales_type_id', $_POST['sales_type_id']);
+       $_POST['sales_type_id'] = $order->sales_type;
+    sales_types_list_row(_("Sales Type"), 'sales_type_id', $_POST['sales_type_id'], true);
+       
+       if ($order->sales_type != $_POST['sales_type_id']) {
+               $myrow = get_sales_type($_POST['sales_type_id']);
+               $order->set_sales_type($myrow['id'], $myrow['sales_type'],
+               $myrow['tax_included'], $myrow['factor']);
+               $Ajax->activate('sales_type_id');
+               $change_prices = 1;
+       }
+
+       if ($change_prices != 0) {
+               foreach ($order->line_items as $line_no=>$item) {
+                       $line = &$order->line_items[$line_no];
+                       $line->price = get_price($line->stock_id, $order->customer_currency,
+                               $order->sales_type, $order->price_factor, $order->document_date);
+               //              $line->discount_percent = $order->default_discount;
+               }
+           $Ajax->activate('items_table');
+       }
 
        label_row(_("Customer Discount:"), ($order->default_discount * 100) . "%");
        echo "</table>";
@@ -75,13 +125,11 @@ function display_credit_header(&$order)
        echo "<table height='5'>";
 
        if (!isset($_POST['OrderDate']) || $_POST['OrderDate'] == "")
-               $_POST['OrderDate'] = $order->orig_order_date;
+               $_POST['OrderDate'] = $order->document_date;
 
        date_row(_("Date:"), 'OrderDate');
 
-       if (!isset($_POST['tax_group_id']) || $_POST['tax_group_id'] == "")
-               $_POST['tax_group_id'] = $order->tax_group_id;
-    tax_groups_list_row(_("Tax Group:"), 'tax_group_id', null, true);
+    shippers_list_row(_("Shipping Company:"), 'ShipperID', $order->ship_via);
 
        echo "</table>";
 
@@ -96,125 +144,141 @@ function display_credit_header(&$order)
 
 function display_credit_items($title, &$order)
 {
-       global $table_style, $path_to_root;
+    global $table_style, $path_to_root;
 
-       display_heading($title);
-       start_table("$table_style width=90%");
-       $th = array(_("Item Code"), _("Item Description"), _("Quantity"), _("Unit"),
-               _("Price"), _("Discount %"), _("Total"));
-       table_header($th);      
+    display_heading($title);
+    div_start('items_table');
+    start_table("$table_style width=90%");
+    $th = array(_("Item Code"), _("Item Description"), _("Quantity"), _("Unit"),
+       _("Price"), _("Discount %"), _("Total"),'');
 
-       $subtotal = 0;
-       $k = 0;  //row colour counter
+    if (count($order->line_items)) $th[]= '';
 
-       foreach ($order->line_items as $stock_item) 
-       {
-
-               $line_total =   $stock_item->quantity * $stock_item->price * (1 - $stock_item->discount_percent);
-
-               if (!isset($_GET['Edit']) || $_GET['Edit'] != $stock_item->stock_id)
-               {
-               alt_table_row_color($k);
+    table_header($th);
 
-               label_cell("<a target='_blank' href='$path_to_root/inventory/inquiry/stock_status.php?" . SID . "stock_id=" . $stock_item->stock_id . "'>$stock_item->stock_id</a>");
-               label_cell($stock_item->item_description);
-               qty_cell($stock_item->quantity);
-               label_cell($stock_item->units);
-               amount_cell($stock_item->price);
+    $subtotal = 0;
+    $k = 0;  //row colour counter
 
-                       amount_cell($stock_item->discount_percent * 100);
-               amount_cell($line_total);
+    $id = find_submit('Edit');
 
-               edit_link_cell(SID . "Edit=$stock_item->stock_id");
-               delete_link_cell(SID . "Delete=$stock_item->stock_id");
+    foreach ($order->line_items as $line_no=>$line)
+    {
+       $line_total =   round($line->qty_dispatched * $line->price * (1 - $line->discount_percent),
+          user_price_dec());
 
-                       //labelt_cell(get_tax_free_price_for_item($stock_item->stock_id, $line_total, $_POST['tax_group_id']));
+       if ( $id != $line_no)
+       {
+           alt_table_row_color($k);
+
+           label_cell("<a target='_blank' href='$path_to_root/inventory/inquiry/stock_status.php?" . SID . "stock_id=" . $line->stock_id . "'>$line->stock_id</a>");
+           label_cell($line->item_description, "nowrap");
+           qty_cell($line->qty_dispatched, false, get_qty_dec($line->stock_id));
+           label_cell($line->units);
+           amount_cell($line->price);
+
+           amount_cell($line->discount_percent * 100);
+           amount_cell($line_total);
+
+           edit_button_cell("Edit$line_no", _('Edit'),
+                               _('Edit document line'));
+           edit_button_cell("Delete$line_no", _('Delete'),
+                               _('Remove line from document'));
+
+           end_row();
+        }
+        else
+        {
+           credit_edit_item_controls($order, $k, $line_no);
+       }
 
-               end_row();
-               } 
-               else 
-               {
-                       credit_edit_item_controls($order, $stock_item->stock_id);
-               }
+       $subtotal += $line_total;
+    }
 
-               $subtotal += $line_total;
-       }
+    if ($id==-1)
+        credit_edit_item_controls($order, $k);
 
-       if (!isset($_GET['Edit']))
-               credit_edit_item_controls($order);
+    $display_sub_total = price_format($subtotal);
+    label_row(_("Sub-total"), $display_sub_total, "colspan=6 align=right", "align=right", 2);
 
-       $display_sub_total = number_format2($subtotal,user_price_dec());
-       label_row(_("Sub-total"), $display_sub_total, "colspan=6 align=right", "align=right");
+    if (!isset($_POST['ChargeFreightCost']) OR ($_POST['ChargeFreightCost'] == ""))
+       $_POST['ChargeFreightCost'] = price_format(0);
 
-       if (!isset($_POST['ChargeFreightCost']) OR ($_POST['ChargeFreightCost'] == ""))
-               $_POST['ChargeFreightCost'] = 0;
+    amount_cells_ex(_("Shipping"), 'ChargeFreightCost', 8, 8, $_POST['ChargeFreightCost'], "colspan=6 align=right");
+    label_cell('', 'colspan=2');
 
-       text_row(_("Shipping"), 'ChargeFreightCost', $_POST['ChargeFreightCost'], 8, 8, "colspan=6 align=right");
+    $taxes = $order->get_taxes($_POST['ChargeFreightCost']);
 
-    $taxes = $order->get_taxes($_POST['tax_group_id'], $_POST['ChargeFreightCost']);
+    $tax_total = display_edit_tax_items($taxes, 6, $_SESSION['Items']->tax_included);
 
-       $tax_total = display_edit_tax_items($taxes, 6);
+    $display_total = price_format(($subtotal + $_POST['ChargeFreightCost'] + $tax_total));
 
-    $display_total = number_format2(($subtotal + $_POST['ChargeFreightCost'] + $tax_total), user_price_dec());
-    label_row(_("Credit Note Total"), $display_total, "colspan=6 align=right","align=right");
+    label_row(_("Credit Note Total"), $display_total, "colspan=6 align=right","class='amount'", 2);
 
     end_table();
+    div_end();
 }
 
 //---------------------------------------------------------------------------------
 
-function credit_edit_item_controls(&$order, $stock_id=null)
+function credit_edit_item_controls(&$order, $rowcounter, $line_no=-1)
 {
-       start_row();
+       global $Ajax;
+       alt_table_row_color($rowcounter);
+       $id = find_submit('Edit');
 
-       if (isset($_GET['Edit']) and $stock_id!=null)
+       if ($line_no!=-1 && $line_no == $id)
        {
-               if (!isset($_POST['stock_id']))
-                       $_POST['stock_id'] = $order->line_items[$stock_id]->stock_id;
-               if (!isset($_POST['qty']) OR ($_POST['qty']==""))
-                       $_POST['qty'] = $order->line_items[$stock_id]->quantity;
-               if (!isset($_POST['price']) OR ($_POST['price']==""))
-                       $_POST['price'] = $order->line_items[$stock_id]->price;
-               if (!isset($_POST['Disc']) OR ($_POST['Disc']==""))
-                       $_POST['Disc'] = ($order->line_items[$stock_id]->discount_percent)*100;
-
-               $_POST['units'] = $order->line_items[$stock_id]->units;
-
+               $_POST['stock_id'] = $order->line_items[$id]->stock_id;
+               $_POST['qty'] = qty_format($order->line_items[$id]->qty_dispatched, $_POST['stock_id'], $dec);
+               $_POST['price'] = price_format($order->line_items[$id]->price);
+               $_POST['Disc'] = percent_format(($order->line_items[$id]->discount_percent)*100);
+               $_POST['units'] = $order->line_items[$id]->units;
                hidden('stock_id', $_POST['stock_id']);
                label_cell($_POST['stock_id']);
-               label_cell($order->line_items[$stock_id]->item_description);
+               label_cell($order->line_items[$id]->item_description, "nowrap");
+           $Ajax->activate('items_table');
        }
        else
        {
-       echo "<td colspan=2>";
-       stock_items_list('stock_id', null, false, true);
-       echo "</td>";
-
-       $item_info = get_item_edit_info($_POST['stock_id']);
+               stock_items_list_cells(null,'stock_id', null, false, true);
+               if(isset($_POST['_stock_id_update'])) {
+                           $Ajax->activate('price');
+                           $Ajax->activate('qty');
+                           $Ajax->activate('units');
+                           $Ajax->activate('line_total');
+               }
+               $item_info = get_item_edit_info($_POST['stock_id']);
 
                $_POST['units'] = $item_info["units"];
+               $_POST['qty'] = qty_format(0, $_POST['stock_id'], $dec);
+               $_POST['price'] = price_format(get_price($_POST['stock_id'], $order->customer_currency,
+                   $order->sales_type, $order->price_factor, $order->document_date));
 
-               $_POST['qty'] = 0;
-               $_POST['price'] = get_price($_POST['stock_id'], $order->customer_id);
                // default to the customer's discount %
-               $_POST['Disc'] = $order->default_discount * 100;
+               $_POST['Disc'] = percent_format($order->default_discount * 100);
        }
 
+       qty_cells(null, 'qty', $_POST['qty'], null, null, $dec);
 
-       text_cells(null, 'qty', $_POST['qty'], 13, 15);
        label_cell($_POST['units']);
-       text_cells(null, 'price',  null, 13, 15);
-       text_cells(null, 'Disc', $_POST['Disc'], 7, 5);
+       amount_cells(null, 'price',  null);
+       small_amount_cells(null, 'Disc', percent_format(0), null, null, user_percent_dec());
+
        amount_cell($_POST['qty'] * $_POST['price'] * (1 - $_POST['Disc']/100));
 
-       if (isset($_GET['Edit'])) 
+       if ($id!=-1)
        {
-       submit_cells('UpdateItem', _("Update"));
-       submit_cells('CancelItemChanges', _("Cancel"));
-       } 
-       else 
+               edit_button_cell('UpdateItem', _("Update"),
+                               _('Confirm changes'));
+               edit_button_cell('CancelItemChanges', _("Cancel"),
+                               _('Cancel changes'));
+               hidden('line_no', $line_no);
+               set_focus('qty');
+       }
+       else
        {
-               submit_cells('AddItem', _("Add Item"), "colspan=2");
+               submit_cells('AddItem', _("Add Item"), "colspan=2",
+                   _('Add new item to document'), true);
        }
 
        end_row();
@@ -225,8 +289,13 @@ function credit_edit_item_controls(&$order, $stock_id=null)
 
 function credit_options_controls()
 {
-       global $table_style2;
+       global $table_style2, $Ajax;
        echo "<br>";
+
+if (isset($_POST['_CreditType_update']))
+       $Ajax->activate('options');
+
+ div_start('options');
        start_table("$table_style2");
 
        credit_type_list_row(_("Credit Note Type"), 'CreditType', null, true);
@@ -236,11 +305,10 @@ function credit_options_controls()
 
                /*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['credit_items']->Location;
+                       $_POST['Location'] = $_SESSION['Items']->Location;
                locations_list_row(_("Items Returned to Location"), 'Location', $_POST['Location']);
-
-       } 
-       else 
+       }
+       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);
@@ -248,6 +316,7 @@ function credit_options_controls()
 
        textarea_row(_("Memo"), "CreditText", null, 51, 3);
        echo "</table>";
+ div_end();
 }