I was not right @Boxygen, I have just tested again on original dimension entry and the name field did not suggest the earlier values.
The problem is not browser, version or OS.

I guess the meta_forward() function somehow cleared all the earlier values, you may need to dig into Ajax system to find out where it is.

You can check by comment out the meta_forward() statement and see the values stored for the next entry (remember to keep $Ajax->activate('_page_body') ).

ah, the added line

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

is not necessary, because I don't have other files in the clearing folder so the page needs include this to show its elements.

Your demo does not work as expected, Then it should be a browser and version issue / OS issue, as @apmuthu said

Yes, also for items field I tested.

Let's try these codes
I tested on my local machine and the input field suggesting all before values
https://prnt.sc/hr11p4

<?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");
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 . "/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();
    $Ajax->activate('_page_body');
    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");
        }
    }
}
// --------------------------------------------------------------------------------------
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();

I see, because you redirect the page in add_dim() and update_dim() so the Ajax  will never be executed, in this case you have to call $Ajax->activate('_page_body'); before the if(can_process()).
This way just a workaroud for your problem

Try to move

$Ajax->activate('_page_body');

out of the can_process()
I guess if any statement in can_process() fails then $Ajax->activate('_page_body'); will not execute.

Try to add the flowing:

if (isset($_POST['update'])) {
    $Ajax->activate('_page_body');
}

assuming your update button name attribute is update

Yes, maybe is_deduction would be better, I will check soon.

About payslip_no field that's my fault when I did not refer to how to store transactions in FA schema, now to fix this will need changes a lot. I will try to improve it soon, maybe next month.

Great to see that we can now installing 3rd modules without any permission.

No @apmuthu, it will be incremented every time we add accounts in the Payroll Accounts page

stefan wrote:

Great module!
Is the printing active in the demo, I can't find it.

I missed a step in the instruction which I wrote myself.
Thanks @stefan, updated.

261

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

Alaa wrote:

great work really..
any update soon?

Next will have a comment system for tasks, but not soon @Alaa

262

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

The date based tasks filter was created

263

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

boxygen wrote:

Great work @notrinos. What is the difference between Ready Tasks and Done Tasks?

Secondly  if tasks list go longer then there shall be filter option based on dates I think

Good ideal @Boxygen, this will be implemented soon.

You should try to comment out $this->Line() one by one in the header2.inc and see the changes, and comment out line 71 of this file to disable the logo.
I have not tested it.

265

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

apmuthu wrote:

@notrinos: replace CRLF with LF (Unix line endings) in the 2 jquery files in your js folder and you may want to update your README.md to this one.

Thanks @apmuthu, those have been updated, but I'm not sure I understand what is line endings.

266

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

The initial features are working now, the demo and source code have been updated.

267

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

Yes, indeed. There maybe a problem in server so javascript was not running, the demo will be updated soon

268

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

From now on FA has one more open source extension for Project Management.
This extension uses Kanban method to visualizer your work flow.

What is Kanban ?

- It is a scheduling system for tracking work flow developed by Taiichi Ohno from Toyota
- Kanban became an effective tool to support running a production system as a whole
- Helps you to identify potential bottlenecks in your process and fix them so work can flow through it cost-effectively at an optimal speed or throughput.

Read more about Kanban in the Wikipedia

Source codes

Demo

Look forward for the feedbacks to make this better.

Ah, I caught the point, right.

Would it be better to make popup links instead ?

I have found google does not convert following currencies STD,  ITL, IRR, FRF, DEM, VND, BYR to USD but it does opposite (USD to those currencies).

Should we change lines 213-225 of gl_db_rates.inc

elseif ($provider == 'GOOGLE')
    {
        $val = '';
        
        $regexp = "%([\d|.]+)\s+{$curr_a}\s+=\s+<span\sclass=(.*)>([\d|.]+)\s+{$curr_b}\s*</span>%s";
        if (preg_match($regexp, $contents, $matches)) 
        {
            $val = $matches[3];
            $val = str_replace(',', '', $val);
            if ($val != 0)
                $val = 1 / $val;
        }
    }

TO

    elseif ($provider == 'GOOGLE')
    {
        $val = '';
        
        $regexp = "%([\d|.]+)\s+{$curr_a}\s+=\s+<span\sclass=(.*)>([\d|.]+)\s+{$curr_b}\s*</span>%s";
        if (preg_match($regexp, $contents, $matches)) 
        {
            $val = $matches[3];
            $val = str_replace(',', '', $val);
            if ($val != 0)
                $val = 1 / $val;
        }
// Start of New Code lines
        if(!$val) {
                $filename = "/finance/converter?a=1&from={$curr_b}&to={$curr_a}";
                $regexp = "%([\d|.]+)\s+{$curr_b}\s+=\s+<span\sclass=(.*)>([\d|.]+)\s+{$curr_a}\s*</span>%s";
                $contents = url_get_contents("http://".$site.$filename);
                if (preg_match($regexp, $contents, $matches))  {
                    $val = $matches[3];
                    $val = str_replace(',', '', $val);
                }
        }
// End of New code lines
    }

to adapting to the google's issue ?

if this issue will not be solved FA will shows folowing red error comment:
number_format() expects parameter 2 to be integer, float given in file: C:\xampp\htdocs\fa243\includes\current_user.inc at line 318

System show the red comment Upgrade MySQL server to version at least 4.1 while my database version is 10.1.28-MariaDB.

I think all versions of MariaDB are ok for FA so line 27 of system_test.inc needs to be changed to:

$test['result'] = $test['test']>='4.1' || explode('-', $test['test'])[1] == 'MariaDB';

To avoid the user's misread.

I think the check must be called after the page display because it calls end_page


function check_db_has_suppliers($msg)
{
    global $path_to_root;
    if (!db_has_suppliers())
    {
        display_error($msg, true);
        end_page();
        exit;   
    }   
}

Yes, it occurs when create new invoice or credit note while no supplier defined.

Supplier Invoices and Supplier Credit Notes appear as white screen on fresh install without demo data.

Fixes:

Perhaps function check_db_has_suppliers() was called before the function page() called.