We can't restrict any user to record a BankPayment to a customer through BankPayment Entry. This happens in practical environment when same party works as a customer or supplier or in any other capacity.

Modifying below statements From Line 35 onwards will fix this issue.

$sql = "SELECT SUM(IF(t.type = ".ST_SALESINVOICE." OR (t.type IN (".ST_JOURNAL." , ".ST_BANKPAYMENT.") AND t.ov_amount>0),
             -abs(t.ov_amount + t.ov_gst + t.ov_freight + t.ov_freight_tax + t.ov_discount), 0)) AS charges,";

$sql .= "SUM(IF(t.type != ".ST_SALESINVOICE." AND NOT(t.type IN (".ST_JOURNAL." , ".ST_BANKPAYMENT.") AND t.ov_amount>0),
             abs(t.ov_amount + t.ov_gst + t.ov_freight + t.ov_freight_tax + t.ov_discount) * -1, 0)) AS credits,";

Please verify it

@cowlas I can do it for you. you can send me email via forum.

I tried this and it worked. But I fear if this creates any anomaly in database and relations. @apmuthu can you just review it.

<?php
/**********************************************************************
    Copyright (C) FrontAccounting, LLC.
    Released under the terms of the GNU General Public License, GPL,
    as published by the Free Software Foundation, either version 3
    of the License, or (at your option) any later version.
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    See the License here <http://www.gnu.org/licenses/gpl-3.0.html>.
***********************************************************************/
//-----------------------------------------------------------------------------
//
//    Entry/Modify Delivery Note against Sales Order
//
$page_security = 'SA_SALESDELIVERY';
$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 . "/sales/includes/sales_db.inc");
include_once($path_to_root . "/sales/includes/sales_ui.inc");
include_once($path_to_root . "/reporting/includes/reporting.inc");
include_once($path_to_root . "/taxes/tax_calc.inc");

$js = "";
if ($SysPrefs->use_popup_windows) {
    $js .= get_js_open_window(900, 500);
}
if (user_use_date_picker()) {
    $js .= get_js_date_picker();
}

if (isset($_GET['ModifyDelivery'])) {
    $_SESSION['page_title'] = sprintf(_("Modifying Delivery Note # %d."), $_GET['ModifyDelivery']);
    $help_context = "Modifying Delivery Note";
    processing_start();
} elseif (isset($_GET['OrderNumber'])) {
    $_SESSION['page_title'] = _($help_context = "Deliver Items for a Sales Order");
    processing_start();
}

page($_SESSION['page_title'], false, false, "", $js);

if (isset($_GET['AddedID'])) {
    $dispatch_no = $_GET['AddedID'];

    display_notification_centered(sprintf(_("Delivery # %d has been entered."),$dispatch_no));

    display_note(get_customer_trans_view_str(ST_CUSTDELIVERY, $dispatch_no, _("&View This Delivery")), 0, 1);

    display_note(print_document_link($dispatch_no, _("&Print Delivery Note"), true, ST_CUSTDELIVERY));
    display_note(print_document_link($dispatch_no, _("&Email Delivery Note"), true, ST_CUSTDELIVERY, false, "printlink", "", 1), 1, 1);
    display_note(print_document_link($dispatch_no, _("P&rint as Packing Slip"), true, ST_CUSTDELIVERY, false, "printlink", "", 0, 1));
    display_note(print_document_link($dispatch_no, _("E&mail as Packing Slip"), true, ST_CUSTDELIVERY, false, "printlink", "", 1, 1), 1);

    display_note(get_gl_view_str(13, $dispatch_no, _("View the GL Journal Entries for this Dispatch")),1);

    if (!isset($_GET['prepaid']))
        hyperlink_params("$path_to_root/sales/customer_invoice.php", _("Invoice This Delivery"), "DeliveryNumber=$dispatch_no");

    hyperlink_params("$path_to_root/sales/inquiry/sales_orders_view.php", _("Select Another Order For Dispatch"), "OutstandingOnly=1");

    display_footer_exit();

} elseif (isset($_GET['UpdatedID'])) {

    $delivery_no = $_GET['UpdatedID'];

    display_notification_centered(sprintf(_('Delivery Note # %d has been updated.'),$delivery_no));

    display_note(get_trans_view_str(ST_CUSTDELIVERY, $delivery_no, _("View this delivery")), 0, 1);

    display_note(print_document_link($delivery_no, _("&Print Delivery Note"), true, ST_CUSTDELIVERY));
    display_note(print_document_link($delivery_no, _("&Email Delivery Note"), true, ST_CUSTDELIVERY, false, "printlink", "", 1), 1, 1);
    display_note(print_document_link($delivery_no, _("P&rint as Packing Slip"), true, ST_CUSTDELIVERY, false, "printlink", "", 0, 1));
    display_note(print_document_link($delivery_no, _("E&mail as Packing Slip"), true, ST_CUSTDELIVERY, false, "printlink", "", 1, 1), 1);

    if (!isset($_GET['prepaid']))
        hyperlink_params($path_to_root . "/sales/customer_invoice.php", _("Confirm Delivery and Invoice"), "DeliveryNumber=$delivery_no");

    hyperlink_params($path_to_root . "/sales/inquiry/sales_deliveries_view.php", _("Select A Different Delivery"), "OutstandingOnly=1");

    display_footer_exit();
}
//-----------------------------------------------------------------------------

if (isset($_GET['OrderNumber']) && $_GET['OrderNumber'] > 0) {

    $ord = new Cart(ST_SALESORDER, $_GET['OrderNumber'], true);
    if ($ord->is_prepaid())
        check_deferred_income_act(_("You have to set Deferred Income Account in GL Setup to entry prepayment invoices."));

    if ($ord->count_items() == 0) {
        hyperlink_params($path_to_root . "/sales/inquiry/sales_orders_view.php",
            _("Select a different sales order to delivery"), "OutstandingOnly=1");
        echo "<br><center><b>" . _("This order has no items. There is nothing to delivery.") .
            "</center></b>";
        display_footer_exit();
    } else if (!$ord->is_released()) {
        hyperlink_params($path_to_root . "/sales/inquiry/sales_orders_view.php",_("Select a different sales order to delivery"),
            "OutstandingOnly=1");
        echo "<br><center><b>"._("This prepayment order is not yet ready for delivery due to insufficient amount received.")
            ."</center></b>";
        display_footer_exit();
    }
    // Adjust Shipping Charge based upon previous deliveries TAM
    adjust_shipping_charge($ord, $_GET['OrderNumber']);

    $_SESSION['Items'] = $ord;
    copy_from_cart();

} elseif (isset($_GET['ModifyDelivery']) && $_GET['ModifyDelivery'] > 0) {

    check_is_editable(ST_CUSTDELIVERY, $_GET['ModifyDelivery']);
    $_SESSION['Items'] = new Cart(ST_CUSTDELIVERY,$_GET['ModifyDelivery']);

    if (!$_SESSION['Items']->prepaid && $_SESSION['Items']->count_items() == 0) {
        hyperlink_params($path_to_root . "/sales/inquiry/sales_orders_view.php",
            _("Select a different delivery"), "OutstandingOnly=1");
        echo "<br><center><b>" . _("This delivery has all items invoiced. There is nothing to modify.") .
            "</center></b>";
        display_footer_exit();
    }

    copy_from_cart();

} elseif ( !processing_active() ) {
    /* This page can only be called with an order number for invoicing*/

    display_error(_("This page can only be opened if an order or delivery note has been selected. Please select it first."));

    hyperlink_params("$path_to_root/sales/inquiry/sales_orders_view.php", _("Select a Sales Order to Delivery"), "OutstandingOnly=1");

    end_page();
    exit;

} else {
    check_edit_conflicts(get_post('cart_id'));

    if (!check_quantities()) {
        display_error(_("Selected quantity cannot be less than quantity invoiced nor more than quantity    not dispatched on sales order."));

    } elseif(!check_num('ChargeFreightCost', 0)) {
        display_error(_("Freight cost cannot be less than zero"));
        set_focus('ChargeFreightCost');
    }
}

//-----------------------------------------------------------------------------

function check_data()
{
    global $Refs, $SysPrefs;

    if (!isset($_POST['DispatchDate']) || !is_date($_POST['DispatchDate']))    {
        display_error(_("The entered date of delivery is invalid."));
        set_focus('DispatchDate');
        return false;
    }

    if (!is_date_in_fiscalyear($_POST['DispatchDate'])) {
        display_error(_("The entered date is out of fiscal year or is closed for further data entry."));
        set_focus('DispatchDate');
        return false;
    }

    if (!isset($_POST['due_date']) || !is_date($_POST['due_date']))    {
        display_error(_("The entered dead-line for invoice is invalid."));
        set_focus('due_date');
        return false;
    }

    if ($_SESSION['Items']->trans_no==0) {
        if (!$Refs->is_valid($_POST['ref'], ST_CUSTDELIVERY)) {
            display_error(_("You must enter a reference."));
            set_focus('ref');
            return false;
        }
    }
    if ($_POST['ChargeFreightCost'] == "") {
        $_POST['ChargeFreightCost'] = price_format(0);
    }

    if (!check_num('ChargeFreightCost',0)) {
        display_error(_("The entered shipping value is not numeric."));
        set_focus('ChargeFreightCost');
        return false;
    }

    if ($_SESSION['Items']->has_items_dispatch() == 0 && input_num('ChargeFreightCost') == 0) {
        display_error(_("There are no item quantities on this delivery note."));
        return false;
    }

    if (!check_quantities()) {
        return false;
    }

    copy_to_cart();

    if (!$SysPrefs->allow_negative_stock() && ($low_stock = $_SESSION['Items']->check_qoh()))
    {
        display_error(_("This document cannot be processed because there is insufficient quantity for items marked."));
        return false;
    }

    return true;
}
//------------------------------------------------------------------------------
function copy_to_cart()
{
    $cart = &$_SESSION['Items'];
    $cart->ship_via = $_POST['ship_via'];
    $cart->Branch = $_POST['branch_id']; //added by faisal
    $cart->freight_cost = input_num('ChargeFreightCost');
    $cart->document_date = $_POST['DispatchDate'];
    $cart->due_date =  $_POST['due_date'];
    $cart->Location = $_POST['Location'];
    $cart->Comments = $_POST['Comments'];
    $cart->dimension_id = $_POST['dimension_id'];
    $cart->dimension2_id = $_POST['dimension2_id'];
    if ($cart->trans_no == 0)
        $cart->reference = $_POST['ref'];

}
//------------------------------------------------------------------------------

function copy_from_cart()
{
    $cart = &$_SESSION['Items'];
    $_POST['ship_via'] = $cart->ship_via;
    $_POST['ChargeFreightCost'] = price_format($cart->freight_cost);
    $_POST['DispatchDate'] = $cart->document_date;
    $_POST['due_date'] = $cart->due_date;
    $_POST['Location'] = $cart->Location;
    $_POST['Comments'] = $cart->Comments;
    $_POST['dimension_id'] = $cart->dimension_id;
    $_POST['dimension2_id'] = $cart->dimension2_id;
    $_POST['cart_id'] = $cart->cart_id;
    $_POST['ref'] = $cart->reference;
}
//------------------------------------------------------------------------------

function check_quantities()
{
    $ok =1;
    // Update cart delivery quantities/descriptions
    foreach ($_SESSION['Items']->line_items as $line=>$itm) {
        if (isset($_POST['Line'.$line])) {
            if($_SESSION['Items']->trans_no) {
                $min = $itm->qty_done;
                $max = $itm->quantity;
            } else {
                $min = 0;
                $max = $itm->quantity - $itm->qty_done;
            }

            if (check_num('Line'.$line, $min, $max)) {
                $_SESSION['Items']->line_items[$line]->qty_dispatched =
                  input_num('Line'.$line);
            } else {
                set_focus('Line'.$line);
                $ok = 0;
            }

        }

        if (isset($_POST['Line'.$line.'Desc'])) {
            $line_desc = $_POST['Line'.$line.'Desc'];
            if (strlen($line_desc) > 0) {
                $_SESSION['Items']->line_items[$line]->item_description = $line_desc;
            }
        }
    }
    return $ok;
}

//------------------------------------------------------------------------------

if (isset($_POST['process_delivery']) && check_data()) {
    $dn = &$_SESSION['Items'];

    if ($_POST['bo_policy']) {
        $bo_policy = 0;
    } else {
        $bo_policy = 1;
    }
    $newdelivery = ($dn->trans_no == 0);

    if ($newdelivery)
        new_doc_date($dn->document_date);

    $delivery_no = $dn->write($bo_policy);

    if ($delivery_no == -1)
    {
        display_error(_("The entered reference is already in use."));
        set_focus('ref');
    }
    else
    {
        $is_prepaid = $dn->is_prepaid() ? "&prepaid=Yes" : '';

        processing_end();
        if ($newdelivery) {
            meta_forward($_SERVER['PHP_SELF'], "AddedID=$delivery_no$is_prepaid");
        } else {
            meta_forward($_SERVER['PHP_SELF'], "UpdatedID=$delivery_no$is_prepaid");
        }
    }
}

if (isset($_POST['Update']) || isset($_POST['_Location_update']) || isset($_POST['qty']) || isset($_POST['process_delivery'])) {
    $Ajax->activate('Items');
}
//------------------------------------------------------------------------------
start_form();
hidden('cart_id');

start_table(TABLESTYLE2, "width='80%'", 5);
echo "<tr><td>"; // outer table

start_table(TABLESTYLE, "width='100%'");
start_row();
label_cells(_("Customer"), $_SESSION['Items']->customer_name, "class='tableheader2'");

label_cell(_("Branch"), "class='tableheader2'");//changed by faisal
customer_branches_list_cells('',
        $_SESSION['Items']->customer_id, 'branch_id', null, false, true, true, true); //added by faisal

label_cells(_("Currency"), $_SESSION['Items']->customer_currency, "class='tableheader2'");
end_row();
start_row();

if ($_SESSION['Items']->trans_no==0) {
    ref_cells(_("Reference"), 'ref', '', null, "class='tableheader2'", false, ST_CUSTDELIVERY,
    array('customer' => $_SESSION['Items']->customer_id,
            'branch' => $_SESSION['Items']->Branch,
            'date' => get_post('DispatchDate')));
} else {
    label_cells(_("Reference"), $_SESSION['Items']->reference, "class='tableheader2'");
}

label_cells(_("For Sales Order"), get_customer_trans_view_str(ST_SALESORDER, $_SESSION['Items']->order_no), "class='tableheader2'");

label_cells(_("Sales Type"), $_SESSION['Items']->sales_type_name, "class='tableheader2'");
end_row();
start_row();

if (!isset($_POST['Location'])) {
    $_POST['Location'] = $_SESSION['Items']->Location;
}
label_cell(_("Delivery From"), "class='tableheader2'");
locations_list_cells(null, 'Location', null, false, true);

if (!isset($_POST['ship_via'])) {
    $_POST['ship_via'] = $_SESSION['Items']->ship_via;
}
label_cell(_("Shipping Company"), "class='tableheader2'");
shippers_list_cells(null, 'ship_via', $_POST['ship_via']);

// set this up here cuz it's used to calc qoh
if (!isset($_POST['DispatchDate']) || !is_date($_POST['DispatchDate'])) {
    $_POST['DispatchDate'] = new_doc_date();
    if (!is_date_in_fiscalyear($_POST['DispatchDate'])) {
        $_POST['DispatchDate'] = end_fiscalyear();
    }
}
date_cells(_("Date"), 'DispatchDate', '', $_SESSION['Items']->trans_no==0, 0, 0, 0, "class='tableheader2'");
end_row();

end_table();

echo "</td><td>";// outer table

start_table(TABLESTYLE, "width='90%'");

if (!isset($_POST['due_date']) || !is_date($_POST['due_date'])) {
    $_POST['due_date'] = get_invoice_duedate($_SESSION['Items']->payment, $_POST['DispatchDate']);
}
customer_credit_row($_SESSION['Items']->customer_id, $_SESSION['Items']->credit, "class='tableheader2'");

$dim = get_company_pref('use_dimension');
if ($dim > 0) {
    start_row();
    label_cell(_("Dimension").":", "class='tableheader2'");
    dimensions_list_cells(null, 'dimension_id', null, true, ' ', false, 1, false);
    end_row();
}
else
    hidden('dimension_id', 0);
if ($dim > 1) {
    start_row();
    label_cell(_("Dimension")." 2:", "class='tableheader2'");
    dimensions_list_cells(null, 'dimension2_id', null, true, ' ', false, 2, false);
    end_row();
}
else
    hidden('dimension2_id', 0);
//---------
start_row();
date_cells(_("Invoice Dead-line"), 'due_date', '', null, 0, 0, 0, "class='tableheader2'");
end_row();
end_table();

echo "</td></tr>";
end_table(1); // outer table

$row = get_customer_to_order($_SESSION['Items']->customer_id);
if ($row['dissallow_invoices'] == 1)
{
    display_error(_("The selected customer account is currently on hold. Please contact the credit control personnel to discuss."));
    end_form();
    end_page();
    exit();
}
display_heading(_("Delivery Items"));
div_start('Items');
start_table(TABLESTYLE, "width='80%'");

$new = $_SESSION['Items']->trans_no==0;
$th = array(_("Item Code"), _("Item Description"),
    $new ? _("Ordered") : _("Max. delivery"), _("Units"), $new ? _("Delivered") : _("Invoiced"),
    _("This Delivery"), _("Price"), _("Tax Type"), _("Discount"), _("Total"));

table_header($th);
$k = 0;
$has_marked = false;

foreach ($_SESSION['Items']->line_items as $line=>$ln_itm) {
    if ($ln_itm->quantity==$ln_itm->qty_done) {
        continue; //this line is fully delivered
    }
    if(isset($_POST['_Location_update']) || isset($_POST['clear_quantity']) || isset($_POST['reset_quantity'])) {
        // reset quantity
        $ln_itm->qty_dispatched = $ln_itm->quantity-$ln_itm->qty_done;
    }
    // if it's a non-stock item (eg. service) don't show qoh
    $row_classes = null;
    if (has_stock_holding($ln_itm->mb_flag) && $ln_itm->qty_dispatched) {
        // It's a stock : call get_dispatchable_quantity hook  to get which quantity to preset in the
        // quantity input box. This allows for example a hook to modify the default quantity to what's dispatchable
        // (if there is not enough in hand), check at other location or other order people etc ...
        // This hook also returns a 'reason' (css classes) which can be used to theme the row.
        //
        // FIXME: hook_get_dispatchable definition does not allow qoh checks on transaction level
        // (but anyway dispatch is checked again later before transaction is saved)

        $qty = $ln_itm->qty_dispatched;
        if ($check = check_negative_stock($ln_itm->stock_id, $ln_itm->qty_done-$ln_itm->qty_dispatched, $_POST['Location'], $_POST['DispatchDate']))
            $qty = $check['qty'];

        $q_class =  hook_get_dispatchable_quantity($ln_itm, $_POST['Location'], $_POST['DispatchDate'], $qty);

        // Skip line if needed
        if($q_class === 'skip')  continue;
        if(is_array($q_class)) {
          list($ln_itm->qty_dispatched, $row_classes) = $q_class;
            $has_marked = true;
        }
    }

    alt_table_row_color($k, $row_classes);
    view_stock_status_cell($ln_itm->stock_id);

    if ($ln_itm->descr_editable)
        text_cells(null, 'Line'.$line.'Desc', $ln_itm->item_description, 30, 50);
    else
        label_cell($ln_itm->item_description);

    $dec = get_qty_dec($ln_itm->stock_id);
    qty_cell($ln_itm->quantity, false, $dec);
    label_cell($ln_itm->units);
    qty_cell($ln_itm->qty_done, false, $dec);

    if(isset($_POST['clear_quantity'])) {
        $ln_itm->qty_dispatched = 0;
    }
    $_POST['Line'.$line]=$ln_itm->qty_dispatched; /// clear post so value displayed in the fiel is the 'new' quantity
    small_qty_cells(null, 'Line'.$line, qty_format($ln_itm->qty_dispatched, $ln_itm->stock_id, $dec), null, null, $dec);

    $display_discount_percent = percent_format($ln_itm->discount_percent*100) . "%";

    $line_total = ($ln_itm->qty_dispatched * $ln_itm->price * (1 - $ln_itm->discount_percent));

    amount_cell($ln_itm->price);
    label_cell($ln_itm->tax_type_name);
    label_cell($display_discount_percent, "nowrap align=right");
    amount_cell($line_total);

    end_row();
}

$_POST['ChargeFreightCost'] =  get_post('ChargeFreightCost',
    price_format($_SESSION['Items']->freight_cost));

$colspan = 9;

start_row();
label_cell(_("Shipping Cost"), "colspan=$colspan align=right");
small_amount_cells(null, 'ChargeFreightCost', $_SESSION['Items']->freight_cost);
end_row();

$inv_items_total = $_SESSION['Items']->get_items_total_dispatch();

$display_sub_total = price_format($inv_items_total + input_num('ChargeFreightCost'));

label_row(_("Sub-total"), $display_sub_total, "colspan=$colspan align=right","align=right");

$taxes = $_SESSION['Items']->get_taxes(input_num('ChargeFreightCost'));
$tax_total = display_edit_tax_items($taxes, $colspan, $_SESSION['Items']->tax_included);

$display_total = price_format(($inv_items_total + input_num('ChargeFreightCost') + $tax_total));

label_row(_("Amount Total"), $display_total, "colspan=$colspan align=right","align=right");

end_table(1);

if ($has_marked) {
    display_note(_("Marked items have insufficient quantities in stock as on day of delivery."), 0, 1, "class='stockmankofg'");
}
start_table(TABLESTYLE2);

policy_list_row(_("Action For Balance"), "bo_policy", null);

textarea_row(_("Memo"), 'Comments', null, 50, 4);

end_table(1);
div_end();
submit_center_first('Update', _("Update"),
    _('Refresh document page'), true);
if(isset($_POST['clear_quantity'])) {
    submit('reset_quantity', _('Reset quantity'), true, _('Refresh document page'));
}
else  {
    submit('clear_quantity', _('Clear quantity'), true, _('Refresh document page'));
}
submit_center_last('process_delivery', _("Process Dispatch"),
    _('Check entered data and save document'), 'default');

end_form();


end_page();

changes are commented by //faisal

What if we make the customer branch field changeable in delivery against sales order page. Will that work?

I need to enable multiple deliveries against one sales order at different branches of a customer.

Currently we can't change the Branch on the customer_delivery.php page

Any idea?

456

(6 replies, posted in Modules Add-on's)

Commercial sad

457

(6 replies, posted in Modules Add-on's)

You can contact @notrinos for POS module. He shared with me privately. Here is the demo link

notrinos.webstarterz.com

458

(7 replies, posted in Report Bugs here)

thanks

459

(7 replies, posted in Report Bugs here)

No you are wrong, I am pressing upload button while selecting a .sql file to upload.

If I apply your suggestion, It only avoid error shown in post#1 but the file is still not uploaded.

You have to review the commit mentioned in post#1, Better give it a try to upload a .sql file to understand the bug.

460

(7 replies, posted in Report Bugs here)

@itronics, I think yours commit has created this bug in uploading a .sql backup file

Regards

Now I think in core dimension_entry.php Lines from 149-167 shall be updated with below

$Ajax->activate('_page_body');
    if (can_process())
    {

        if ($selected_id == -1)
        {
            $id = add_dimension($_POST['ref'], $_POST['name'], $_POST['type_'], $_POST['date_'], $_POST['due_date'], $_POST['memo_']);
            add_tag_associations($id, $_POST['dimension_tags']);
            meta_forward($_SERVER['PHP_SELF'], "AddedID=$id",0,true);
        }
        else
        {

            update_dimension($selected_id, $_POST['name'], $_POST['type_'], $_POST['date_'], $_POST['due_date'], $_POST['memo_']);
            update_tag_associations(TAG_DIMENSION, $selected_id, $_POST['dimension_tags']);

            meta_forward($_SERVER['PHP_SELF'], "UpdatedID=$selected_id",0,true);
        }
    }

Great Friends, Great Team

I thank you all for your contributions.

Joe is Comitter and I am Bugger smile

I have no words to thank you @notrinos and @apmuthu.

You are right. After commenting meta_forward() it is working.

Can you guide how to debug Ajax? I am very poor in that smile

Thanks a lot, you have take such a pain for my problem.

You may be right, but how does the browser and version issue / OS issue is only affecting dimension_entry.php page while other pages like I mentioned earlier company_preferences.php is working fine on the same browser, version and OS?

@notrinos you have added one line

include_once ($path_to_root . "/includes/ui.inc");

So finally the Core dimension_entry.php file looks like below after your modifications

<?php
/**********************************************************************
    Copyright (C) FrontAccounting, LLC.
    Released under the terms of the GNU General Public License, GPL, 
    as published by the Free Software Foundation, either version 3 
    of the License, or (at your option) any later version.
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
    See the License here <http://www.gnu.org/licenses/gpl-3.0.html>.
***********************************************************************/
$page_security = 'SA_DIMENSION';
$path_to_root = "..";
include_once($path_to_root . "/includes/session.inc");

include_once($path_to_root . "/includes/date_functions.inc");
include_once($path_to_root . "/includes/data_checks.inc");

include_once($path_to_root . "/admin/db/tags_db.inc");
include_once($path_to_root . "/dimensions/includes/dimensions_db.inc");
include_once($path_to_root . "/dimensions/includes/dimensions_ui.inc");
include_once ($path_to_root . "/includes/ui.inc");


$js = "";
if (user_use_date_picker())
    $js .= get_js_date_picker();
page(_($help_context = "Dimension Entry"), false, false, "", $js);

//---------------------------------------------------------------------------------------

if (isset($_GET['trans_no']))
{
    $selected_id = $_GET['trans_no'];
} 
elseif(isset($_POST['selected_id']))
{
    $selected_id = $_POST['selected_id'];
}
else
    $selected_id = -1;
//---------------------------------------------------------------------------------------

if (isset($_GET['AddedID'])) 
{
    $id = $_GET['AddedID'];

    display_notification_centered(_("The dimension has been entered."));

    safe_exit();
}

//---------------------------------------------------------------------------------------

if (isset($_GET['UpdatedID'])) 
{
    $id = $_GET['UpdatedID'];

    display_notification_centered(_("The dimension has been updated."));
    safe_exit();
}

//---------------------------------------------------------------------------------------

if (isset($_GET['DeletedID'])) 
{
    $id = $_GET['DeletedID'];

    display_notification_centered(_("The dimension has been deleted."));
    safe_exit();
}

//---------------------------------------------------------------------------------------

if (isset($_GET['ClosedID'])) 
{
    $id = $_GET['ClosedID'];

    display_notification_centered(_("The dimension has been closed. There can be no more changes to it.") . " #$id");
    safe_exit();
}

//---------------------------------------------------------------------------------------

if (isset($_GET['ReopenedID'])) 
{
    $id = $_GET['ReopenedID'];

    display_notification_centered(_("The dimension has been re-opened. ") . " #$id");
    safe_exit();
}

//-------------------------------------------------------------------------------------------------

function safe_exit()
{
    global $path_to_root;

    hyperlink_no_params("", _("Enter a &new dimension"));
    echo "<br>";
    hyperlink_no_params($path_to_root . "/dimensions/inquiry/search_dimensions.php", _("&Select an existing dimension"));

    display_footer_exit();
}

//-------------------------------------------------------------------------------------

function can_process()
{
    global $selected_id, $Refs;

    if ($selected_id == -1) 
    {
        if (!check_reference($_POST['ref'], ST_DIMENSION))
        {
            set_focus('ref');
            return false;
        }
    }

    if (strlen($_POST['name']) == 0) 
    {
        display_error( _("The dimension name must be entered."));
        set_focus('name');
        return false;
    }

    if (!is_date($_POST['date_']))
    {
        display_error( _("The date entered is in an invalid format."));
        set_focus('date_');
        return false;
    }

    if (!is_date($_POST['due_date']))
    {
        display_error( _("The required by date entered is in an invalid format."));
        set_focus('due_date');
        return false;
    }

    return true;
}

//-------------------------------------------------------------------------------------

if (isset($_POST['ADD_ITEM']) || isset($_POST['UPDATE_ITEM'])) 
{
    if (!isset($_POST['dimension_tags']))
        $_POST['dimension_tags'] = array();
        
    $Ajax->activate('_page_body');
    if (can_process()) 
    {

        if ($selected_id == -1) 
        {
            $id = add_dimension($_POST['ref'], $_POST['name'], $_POST['type_'], $_POST['date_'], $_POST['due_date'], $_POST['memo_']);
            add_tag_associations($id, $_POST['dimension_tags']);
            meta_forward($_SERVER['PHP_SELF'], "AddedID=$id");
        } 
        else 
        {

            update_dimension($selected_id, $_POST['name'], $_POST['type_'], $_POST['date_'], $_POST['due_date'], $_POST['memo_']);
            update_tag_associations(TAG_DIMENSION, $selected_id, $_POST['dimension_tags']);

            meta_forward($_SERVER['PHP_SELF'], "UpdatedID=$selected_id");
        }
    }
}

//--------------------------------------------------------------------------------------

if (isset($_POST['delete'])) 
{

    $cancel_delete = false;

    // can't delete it there are productions or issues
    if (dimension_has_payments($selected_id) || dimension_has_deposits($selected_id))
    {
        display_error(_("This dimension cannot be deleted because it has already been processed."));
        set_focus('ref');
        $cancel_delete = true;
    }

    if ($cancel_delete == false) 
    { //ie not cancelled the delete as a result of above tests

        // delete
        delete_dimension($selected_id);
        delete_tag_associations(TAG_DIMENSION,$selected_id, true);
        meta_forward($_SERVER['PHP_SELF'], "DeletedID=$selected_id");
    }
}

//-------------------------------------------------------------------------------------

if (isset($_POST['close'])) 
{

    // update the closed flag
    close_dimension($selected_id);
    meta_forward($_SERVER['PHP_SELF'], "ClosedID=$selected_id");
}

if (isset($_POST['reopen'])) 
{

    // update the closed flag
    reopen_dimension($selected_id);
    meta_forward($_SERVER['PHP_SELF'], "ReopenedID=$selected_id");
}
//-------------------------------------------------------------------------------------

start_form();

start_table(TABLESTYLE2);

if ($selected_id != -1)
{
    $myrow = get_dimension($selected_id);

    if (strlen($myrow[0]) == 0) 
    {
        display_error(_("The dimension sent is not valid."));
        display_footer_exit();
    }

    // if it's a closed dimension can't edit it
    //if ($myrow["closed"] == 1) 
    //{
    //    display_error(_("This dimension is closed and cannot be edited."));
    //    display_footer_exit();
    //}

    $_POST['ref'] = $myrow["reference"];
    $_POST['closed'] = $myrow["closed"];
    $_POST['name'] = $myrow["name"];
    $_POST['type_'] = $myrow["type_"];
    $_POST['date_'] = sql2date($myrow["date_"]);
    $_POST['due_date'] = sql2date($myrow["due_date"]);
    $_POST['memo_'] = get_comments_string(ST_DIMENSION, $selected_id);
    
     $tags_result = get_tags_associated_with_record(TAG_DIMENSION, $selected_id);
     $tagids = array();
     while ($tag = db_fetch($tags_result)) 
          $tagids[] = $tag['id'];
     $_POST['dimension_tags'] = $tagids;    

    hidden('ref', $_POST['ref']);

    label_row(_("Dimension Reference:"), $_POST['ref']);

    hidden('selected_id', $selected_id);
} 
else 
{
    $_POST['dimension_tags'] = array();
    ref_row(_("Dimension Reference:"), 'ref', '', $Refs->get_next(ST_DIMENSION), false, ST_DIMENSION);
}

text_row_ex(_("Name") . ":", 'name', 50, 75);

$dim = get_company_pref('use_dimension');

number_list_row(_("Type"), 'type_', null, 1, $dim);

date_row(_("Start Date") . ":", 'date_');

date_row(_("Date Required By") . ":", 'due_date', '', null, $SysPrefs->default_dimension_required_by());

tag_list_row(_("Tags:"), 'dimension_tags', 5, TAG_DIMENSION, true);

textarea_row(_("Memo:"), 'memo_', null, 40, 5);

end_table(1);

if (isset($_POST['closed']) && $_POST['closed'] == 1)
    display_note(_("This Dimension is closed."), 0, 0, "class='currentfg'");

if ($selected_id != -1) 
{
    echo "<br>";
    submit_center_first('UPDATE_ITEM', _("Update"), _('Save changes to dimension'), 'default');
    if ($_POST['closed'] == 1)
        submit('reopen', _("Re-open This Dimension"), true, _('Mark this dimension as re-opened'), true);
    else    
        submit('close', _("Close This Dimension"), true, _('Mark this dimension as closed'), true);
    submit_center_last('delete', _("Delete This Dimension"), _('Delete unused dimension'), true);
}
else
{
    submit_center('ADD_ITEM', _("Add"), true, '', 'default');
}
end_form();

//--------------------------------------------------------------------------------------------

end_page();

Unfortunately I couldn't get results. I have applied all the changes to the latest version of FA at following URL

Click to Login
id: admin
pass:Pakistan1947
company:Clearing

I really appreciate your feedback.

But unfortunately still it doesn't work after I applied @notrinos suggestion in post#10

Are you sure that

$Ajax->activate('_page_body');

controls this feature?

In order to dig further I took a complete fresh installation of FA243

In company_preferences.php I commented the line 126

//$Ajax->activate('_page_body');

But still this page is saving and showing Auto Fill Values.

In order to check further I took the core dimension_entry.php page and added

$Ajax->activate('_page_body');

Before

if (can_process())

Any value feeded in the Dimension Name is not appearing in the List of Values.

This exercise is saying that there may be some other code controlling this feature.

Any further feedback?

Really the page is "Beautified"

Thanks @apmuthu and @notrinos

But unfortunately still not working sad

Can you please give a try. Maybe its my browser issue

Click to Login
id: admin
pass:Pakistan1947
company:Clearing

@apmuthu I have removed

$_POST['item']  = $myrow["item"];

and used

text_row(_("Item"). ":", 'item',@$myrow['item'], 25, 75);

@notrinos

I have applied

    $Ajax->activate('_page_body');

After add_dim() and update_dim() functions are called so that it applies to both Add or Update

But Unfortunately No Success

Below is the code of dimension_entry.php

<?php
/**********************************************************************
    Copyright (C) FrontAccounting, LLC.
    Released under the terms of the GNU General Public License, GPL,
    as published by the Free Software Foundation, either version 3
    of the License, or (at your option) any later version.
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    See the License here <http://www.gnu.org/licenses/gpl-3.0.html>.
***********************************************************************/
$page_security = 'SA_DIMENSION';
$path_to_root = "../..";
include_once($path_to_root . "/includes/session.inc");

include_once($path_to_root . "/includes/date_functions.inc");
include_once($path_to_root . "/includes/data_checks.inc");

include_once($path_to_root . "/admin/db/tags_db.inc");
include_once($path_to_root . "/dimensions/includes/dimensions_db.inc");
include_once($path_to_root . "/modules/clearing/includes/dim_db.inc");
include_once($path_to_root . "/modules/clearing/includes/dimensions_ui.inc");

$js = "";
if (user_use_date_picker())
    $js .= get_js_date_picker();
page(_($help_context = "Dimension Entry"), false, false, "", $js);

//---------------------------------------------------------------------------------------

if (isset($_GET['trans_no']))
{
    $selected_id = $_GET['trans_no'];
}
elseif(isset($_POST['selected_id']))
{
    $selected_id = $_POST['selected_id'];
}
else
    $selected_id = -1;
//---------------------------------------------------------------------------------------

if (isset($_GET['AddedID']))
{
    $id = $_GET['AddedID'];

    display_notification_centered(_("The dimension has been entered."));

    safe_exit();
}

//---------------------------------------------------------------------------------------

if (isset($_GET['UpdatedID']))
{
    $id = $_GET['UpdatedID'];

    display_notification_centered(_("The dimension has been updated."));
    safe_exit();
}

//---------------------------------------------------------------------------------------

if (isset($_GET['DeletedID']))
{
    $id = $_GET['DeletedID'];

    display_notification_centered(_("The dimension has been deleted."));
    safe_exit();
}

//---------------------------------------------------------------------------------------

if (isset($_GET['ClosedID']))
{
    $id = $_GET['ClosedID'];

    display_notification_centered(_("The dimension has been closed. There can be no more changes to it.") . " #$id");
    safe_exit();
}

//---------------------------------------------------------------------------------------

if (isset($_GET['ReopenedID']))
{
    $id = $_GET['ReopenedID'];

    display_notification_centered(_("The dimension has been re-opened. ") . " #$id");
    safe_exit();
}

//-------------------------------------------------------------------------------------------------

function safe_exit()
{
    global $path_to_root;

    hyperlink_no_params("", _("Enter a &new dimension"));
    echo "<br>";
    hyperlink_no_params($path_to_root . "/modules/clearing/inquiry/search_dimensions.php", _("&Select an existing dimension"));

    display_footer_exit();
}

//-------------------------------------------------------------------------------------

function can_process()
{
    global $selected_id, $Refs;

    if ($selected_id == -1)
    {
        if (!check_reference($_POST['ref'], ST_DIMENSION))
        {
            set_focus('ref');
            return false;
        }
    }

    if (strlen($_POST['name']) == 0)
    {
        display_error( _("The dimension name must be entered."));
        set_focus('name');
        return false;
    }

    if (!is_date($_POST['date_']))
    {
        display_error( _("The date entered is in an invalid format."));
        set_focus('date_');
        return false;
    }

    if (!is_date($_POST['due_date']))
    {
        display_error( _("The required by date entered is in an invalid format."));
        set_focus('due_date');
        return false;
    }

    return true;
}

//-------------------------------------------------------------------------------------

if (isset($_POST['ADD_ITEM']) || isset($_POST['UPDATE_ITEM']))
{
    if (!isset($_POST['dimension_tags']))
        $_POST['dimension_tags'] = array();

    if (can_process())
    {

        if ($selected_id == -1)
        {
            $id = add_dim($_POST['ref'], $_POST['name'], $_POST['type_'], $_POST['date_'], $_POST['due_date'], $_POST['memo_'],
            $_POST['client'],
        $_POST['item'],
        $_POST['POL'],
        $_POST['mode'],
        $_POST['volume'],
        $_POST['weight'],
        $_POST['cont_no'],
        $_POST['equip_no'],
        $_POST['bl_no'],
        $_POST['bl_date'],
        $_POST['ETA'],
        $_POST['doc_copy'],
        $_POST['doc_org'],
        $_POST['gd_date'],
        $_POST['po_duty'],
        $_POST['po_do'],
        $_POST['po_wfg'],
        $_POST['destuff'],
        $_POST['assessment'],
        $_POST['delivery'],
        $_POST['gd_no'],
        $_POST['igm_no'],
        $_POST['igm_date'],
         $_POST['index_no'],
        $_POST['cash_no'],
        $_POST['cash_date'],
        $_POST['value'],
        $_POST['no_of_pkg'],
        $_POST['POD'],
        $_POST['gross_weight']);
            add_tag_associations($id, $_POST['dimension_tags']);
            meta_forward($_SERVER['PHP_SELF'], "AddedID=$id");
        }
        else
        {

            update_dim($selected_id, $_POST['Dref'], $_POST['name'], $_POST['type_'], $_POST['date_'], $_POST['due_date'], $_POST['memo_'],
            $_POST['client'],
         $_POST['item'],
         $_POST['POL'],
         $_POST['mode'],
         $_POST['volume'],
         $_POST['weight'],
         $_POST['cont_no'],
         $_POST['equip_no'],
         $_POST['bl_no'],
         $_POST['bl_date'],
         $_POST['ETA'],
         $_POST['doc_copy'],
         $_POST['doc_org'],
         $_POST['gd_date'],
         $_POST['po_duty'],
         $_POST['po_do'],
         $_POST['po_wfg'],
         $_POST['destuff'],
         $_POST['assessment'],
         $_POST['delivery'],
         $_POST['gd_no'],
         $_POST['igm_no'],
         $_POST['igm_date'],
         $_POST['index_no'],
         $_POST['cash_no'],
         $_POST['cash_date'],
         $_POST['value'],
         $_POST['no_of_pkg'],
         $_POST['POD'],
         $_POST['gross_weight']);
            update_tag_associations(TAG_DIMENSION, $selected_id, $_POST['dimension_tags']);

            meta_forward($_SERVER['PHP_SELF'], "UpdatedID=$selected_id");
        }

        $Ajax->activate('_page_body');
    }

     }

//--------------------------------------------------------------------------------------

if (isset($_POST['delete']))
{

    $cancel_delete = false;

    // can't delete it there are productions or issues
    if (dimension_has_payments($selected_id) || dimension_has_deposits($selected_id))
    {
        display_error(_("This dimension cannot be deleted because it has already been processed."));
        set_focus('ref');
        $cancel_delete = true;
    }

    if ($cancel_delete == false)
    { //ie not cancelled the delete as a result of above tests

        // delete
        delete_dimension($selected_id);
        delete_tag_associations(TAG_DIMENSION,$selected_id, true);
        meta_forward($_SERVER['PHP_SELF'], "DeletedID=$selected_id");
    }
}

//-------------------------------------------------------------------------------------

if (isset($_POST['close']))
{

    // update the closed flag
    close_dimension($selected_id);
    meta_forward($_SERVER['PHP_SELF'], "ClosedID=$selected_id");
}

if (isset($_POST['reopen']))
{

    // update the closed flag
    reopen_dimension($selected_id);
    meta_forward($_SERVER['PHP_SELF'], "ReopenedID=$selected_id");
}
//-------------------------------------------------------------------------------------

start_form();

start_outer_table(TABLESTYLE2);

table_section(1);


if ($selected_id != -1)
{
    $myrow = get_dimension($selected_id);

    if (strlen($myrow[0]) == 0)
    {
        display_error(_("The dimension sent is not valid."));
        display_footer_exit();
    }

    // if it's a closed dimension can't edit it
    //if ($myrow["closed"] == 1)
    //{
    //    display_error(_("This dimension is closed and cannot be edited."));
    //    display_footer_exit();
    //}

    $_POST['ref'] = $myrow["reference"];
    $_POST['closed'] = $myrow["closed"];
    $_POST['name'] = $myrow["name"];
    $_POST['type_'] = $myrow["type_"];
    $_POST['date_'] = sql2date($myrow["date_"]);
    $_POST['due_date'] = sql2date($myrow["due_date"]);
    $_POST['memo_'] = get_comments_string(ST_DIMENSION, $selected_id);

    $tags_result = get_tags_associated_with_record(TAG_DIMENSION, $selected_id);
     $tagids = array();
     while ($tag = db_fetch($tags_result))
          $tagids[] = $tag['id'];
     $_POST['dimension_tags'] = $tagids;

    hidden('ref', $_POST['ref']);

    //label_row(_("Dimension Reference:"), $_POST['ref']); //Commented By Faisal

    ref_row(_("Dimension Reference:"), 'Dref', '', $_POST['ref']); //added by faisal

    hidden('selected_id', $selected_id);
}
else
{
    $_POST['dimension_tags'] = array();
    ref_row(_("Dimension Reference:"), 'ref', '', $Refs->get_next(ST_DIMENSION), false, ST_DIMENSION);
}

text_row_ex(_("Name") . ":", 'name', 25, 75);

$dim = get_company_pref('use_dimension');

number_list_row(_("Type"), 'type_', null, 1, $dim);

date_row(_("Start Date") . ":", 'date_');

date_row(_("Date Required By") . ":", 'due_date', '', null, $SysPrefs->default_dimension_required_by());

tag_list_row(_("Tags:"), 'dimension_tags', 5, TAG_DIMENSION, true);

textarea_row(_("Memo:"), 'memo_', null, 40, 5);


text_row(_("Client"). ":", 'client', @$myrow['client'], 25, 75);
text_row(_("Item"). ":", 'item',@$myrow['item'], 25, 75);
table_section(2);
text_row(_("POL"). ":", 'POL',@$myrow['POL'], 25, 75);
text_row(_("Mode"). ":", 'mode',@$myrow['mode'], 25, 75);
text_row(_("Volume"). ":", 'volume',@$myrow['volume'], 25, 75);
text_row(_("Weight"). ":", 'weight',@$myrow['weight'], 25, 75);
text_row(_("Container No"). ":", 'cont_no',@$myrow['cont_no'], 25, 75);


text_row(_("Equipment NO"). ":", 'equip_no',@$myrow['equip_no'], 25, 75);
text_row(_("BL No"). ":", 'bl_no',@$myrow['bl_no'], 25, 75);
text_row(_("BL Date"). ":", 'bl_date',@$myrow['bl_date'], 25, 75);
text_row(_("ETA"). ":", 'ETA',@$myrow['ETA'], 25, 75);
table_section(3);
text_row(_("Doc Copy"). ":", 'doc_copy',@$myrow['doc_copy'], 25, 75);
text_row(_("Doc Original"). ":", 'doc_org',@$myrow['doc_org'], 25, 75);
text_row(_("GD Date"). ":", 'gd_date',@$myrow['gd_date'], 25, 75);
text_row(_("Duty POrder"). ":", 'po_duty',@$myrow['po_duty'], 25, 75);

text_row(_("DO POrder"). ":", 'po_do',@$myrow['po_do'], 25, 75);
text_row(_("Wharfage POrder"). ":", 'po_wfg',@$myrow['po_wfg'], 25, 75);
text_row(_("Destuff Date"). ":", 'destuff',@$myrow['destuff'], 25, 75);
text_row(_("Assessment Date"). ":", 'assessment',@$myrow['assessment'], 25, 75);
text_row(_("Delivery Date"). ":", 'delivery',@$myrow['delivery'], 25, 75);
text_row(_("GD Number"). ":", 'gd_no',@$myrow['gd_no'], 25, 75);
table_section(4);
text_row(_("IGM Number"). ":", 'igm_no',@$myrow['igm_no'], 25, 75);
text_row(_("IGM Date"). ":", 'igm_date',@$myrow['igm_date'], 25, 75);
text_row(_("Index Number"). ":", 'index_no',@$myrow['index_no'], 25, 75);
text_row(_("Cash Number"). ":", 'cash_no',@$myrow['cash_no'], 25, 75);
text_row(_("Cash Date"). ":", 'cash_date',@$myrow['cash_date'], 25, 75);
text_row(_("Value"). ":", 'value',@$myrow['value'], 25, 75);
text_row(_("No Of Pkg"). ":", 'no_of_pkg',@$myrow['no_of_pkg'], 25, 75);
text_row(_("POD"). ":", 'POD',@$myrow['POD'], 25, 75);
text_row(_("Gross Weight"). ":", 'gross_weight',@$myrow['gross_weight'], 25, 75);

end_outer_table(1);

if (isset($_POST['closed']) && $_POST['closed'] == 1)
    display_note(_("This Dimension is closed."), 0, 0, "class='currentfg'");

if ($selected_id != -1)
{
    echo "<br>";
    submit_center_first('UPDATE_ITEM', _("Update"), _('Save changes to dimension'), 'default');
    if ($_POST['closed'] == 1)
        submit('reopen', _("Re-open This Dimension"), true, _('Mark this dimension as re-opened'), true);
    else
        submit('close', _("Close This Dimension"), true, _('Mark this dimension as closed'), true);
    submit_center_last('delete', _("Delete This Dimension"), _('Delete unused dimension'), true);
}
else
{
    submit_center('ADD_ITEM', _("Add"), true, '', 'default');
}
end_form();

//--------------------------------------------------------------------------------------------

end_page();

Your further help is highly needed.

I think autofill is already enable in browser settings that is why in Phone field the autofill values are shown and I don't think that in Customers Setup we have used $_SESSION variable for this input field.

Any suggestions

I am in a Fix. Trying to create a custom module and have added some more text based input fields in dimension_entry.php. When we enter any Value in Item Field (for e.g) the next time if entering the same item, then I have to type the whole value. Ideally the browser shall give me the list of previously feeded values in the same field. Just like it happens at other places of FA Forms like in customers.php any phone number once added is always made available by the browser to be selected in the same input filed.

Any special settings required for this? My clients are frustrated that they have to type in full the whole value again and again.

The code I have used for this is below

text_row(_("Item"). ":", 'item',null, 25, 75);

the screen shot of the page is here

Any guidance is highly appreciated.

Thanks

If customer is set to inactive, even then it is visible in Journal Entry Counter Party List.

Ok I did it. I downloaded from https://frontaccounting.com/wbt/pages/download/downloads-for-release-2.3fonts.php and followed the instructions

I downloaded the ae_tholoth.zip file but how to install it? I have linux shared hosting server

475

(21 replies, posted in Reporting)

you can try this small extension

Customer Balances