Hello @rafat

If you already translate HRM's strings and now want to public that translation then just public your .po file here
Or if you don't know how to deploy new translations into your system do the following:
  1 - Download the po file that has included new FrontHrm strings here : https://www.dropbox.com/s/tn8iaclfw96ft …  3.po?dl=0
  2 - Open the downloaded file with your code editor, in this file you will see strings that has been translated like this

#: admin/company_preferences.php:227
msgid "Domicile:"
msgstr "محل الأقامة :"

and string that has not been translated will have empty msgstr like this

#: admin/company_preferences.php:59
msgid "Add Price from Std Cost field must be number."
msgstr ""

  3 - Now please fill all the not translated section, save the .po file then upload it here, I will compile it to .mo file then public the new translation

Thank you in advance

Yes, next FA major release, a coding standard should be issued

You can also avoid the issue by adding exchange rate manually in banking & general ledger/ exchange rates

config.php is in the FA root folder
$dflt_xr_provider on the line 182

The default exchange rates provider ECB does not support UGX, so you have to open the file config.php then change variable $dflt_xr_provider value from 0 to 1 (EXCHANGE-RATES.ORG) or 2 (GOOGLE)

What is your currency code ?

Try install some other charts of accounts to see if one of them match with your system ?

your problem has been fixed @mnhpiash
Dowload the lastest snap shoot here: https://github.com/notrinos/FrontHrm/archive/module.zip

@joe
should default utf-8 font be dejavusans instead of dejavu ? We have no dejavu bold font pack so that reports can show the bold characters

Try font files attached here, this is the files that I'm using on my system with the same setting without bold issue
https://www.dropbox.com/s/s2tj56yo2qrlb … s.zip?dl=0

Another approach you can do a little modification in the core so that dont need to install language manually, it will works with Indonesian but Im not sure with other languages.
Download all dejavusans and dejavusansb font files here then paste into reporting/fonts folder
https://github.com/overblog/tcpdf/tree/master/fonts
Replace line 160 of reporting/includes/class.pdf.inc with this code:

default :          $fontname = "dejavusans";         break;

Now Indonesian language can be used with it's default encoding utf-8

You may need to restart Apache

Please add your language manually:

- Go to Setup/Install Update Languages and check if English (US) already installed then remove it
- Manually create an empty folder lang/en_US/LC_MESSAGES
- Press button Add new language manually then enter the following parameters:

Language Code: en_US
Language Name: Indo
Encoding: iso-8859-1
Right To Left: No
Default Language: No

The two file PO, MO please choose the coresponding file in the lang/id_ID/LC_MESSAGES
Click Update then you can go to Preferences then select new added language (Indo)

open lang/installed_languages.inc find your language array then replace 'encoding' => 'utf-8' with 'encoding' => 'iso-8859-1'
In case of Indonesian it will be like this:

array (
    'name' => 'Indonesian',
    'package' => 'id_ID',
    'code' => 'id_ID',
    'encoding' => 'iso-8859-1',
    'version' => '2.4.1-3',
    'path' => 'lang/id_ID',
  ),

tested with fixed asset transfer without problem as well
the new file can be downloaded here: download

try replace the inventory/includes/stock_transfers_ui.inc with this code (also in attachment) then check if any problem

<?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>.
***********************************************************************/
include_once($path_to_root . "/includes/ui.inc");
include_once($path_to_root . "/includes/ui/items_cart.inc");

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

function add_to_order(&$order, $new_item, $new_item_qty, $standard_cost)
{
    $kit = get_item_kit($new_item);

    foreach($kit as $item) {
        if ($order->find_cart_item($item['stock_id']))
            display_error(_("For Part :") . $item['stock_id'] . " " . "This item is already on this document. You can change the quantity on the existing line if necessary.");
        else
            $order->add_to_cart (count($order->line_items), $item['stock_id'], $new_item_qty * $item['quantity'], $standard_cost);
    }
   
}

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

function display_order_header(&$order)
{
    global $Refs;

    start_outer_table(TABLESTYLE, "width='70%'");

    table_section(1);
   
    locations_list_row(_("From Location:"), 'FromStockLocation', null, false, false, $order->fixed_asset);
    locations_list_row(_("To Location:"), 'ToStockLocation', null,false, false, $order->fixed_asset);

    table_section(2, "50%");

    date_row(_("Date:"), 'AdjDate', '', true);

    ref_row(_("Reference:"), 'ref', '', $Refs->get_next(ST_LOCTRANSFER, null, array('date'=>get_post('AdjDate'), 'location'=> get_post('FromStockLocation'))),
         false, ST_LOCTRANSFER);

    end_outer_table(1); // outer table
}

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

function display_transfer_items($title, &$order)
{
    global $path_to_root;

    display_heading($title);
    div_start('items_table');
    start_table(TABLESTYLE, "width='80%'");
    $th = array(_("Item Code"), _("Item Description"), _("Quantity"), _("Unit"), '');
    if (!$order->fixed_asset && count($order->line_items)) $th[] = '';
    table_header($th);
    $k = 0;  //row colour counter

    $low_stock = $order->check_qoh($_POST['FromStockLocation'], $_POST['AdjDate'], true);
    $id = find_submit('Edit');
    foreach ($order->line_items as $line_no=>$stock_item)
    {

        if ($id != $line_no)
        {
            if (in_array($stock_item->stock_id, $low_stock))
                start_row("class='stockmankobg'");    // notice low stock status
            else
                alt_table_row_color($k);

            if ($order->fixed_asset)
                label_cell($stock_item->stock_id);
            else
                view_stock_status_cell($stock_item->stock_id);
            label_cell($stock_item->item_description);
            qty_cell($stock_item->quantity, false, get_qty_dec($stock_item->stock_id));
            label_cell($stock_item->units);

             if (!$order->fixed_asset)
                edit_button_cell("Edit$line_no", _("Edit"),    _('Edit document line'));
            delete_button_cell("Delete$line_no", _("Delete"), _('Remove line from document'));
            end_row();
        }
        else
        {
            transfer_edit_item_controls($order, $line_no);
        }
    }

    if ($id == -1)
        transfer_edit_item_controls($order);

    end_table();
    if ($low_stock)
        display_note(_("Marked items have insufficient quantities in stock as on day of transfer."), 0, 1, "class='stockmankofg'");
    div_end();
}

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

function transfer_edit_item_controls(&$order, $line_no=-1)
{
    global $Ajax;
    start_row();

    $id = find_submit('Edit');
    if ($line_no != -1 && $line_no == $id)
    {
        $_POST['stock_id'] = $order->line_items[$id]->stock_id;
        $_POST['qty'] = qty_format($order->line_items[$id]->quantity, $order->line_items[$id]->stock_id, $dec);
        $_POST['units'] = $order->line_items[$id]->units;

        hidden('stock_id', $_POST['stock_id']);
        label_cell($_POST['stock_id']);
        label_cell($order->line_items[$id]->item_description);
        $Ajax->activate('items_table');
    }
    else
    {
        if ($order->fixed_asset)
            stock_disposable_fa_list_cells(null, 'stock_id', null, false, true, $order->line_items);
        else
            sales_items_list_cells(null,'stock_id', null, false, true, true);
            // stock_costable_items_list_cells(null, 'stock_id', null, false, true);

        if (list_updated('stock_id')) {
                $Ajax->activate('units');
                $Ajax->activate('qty');
        }

        $item_info = get_item_edit_info($_POST['stock_id']);

        $dec = $item_info['decimals'];
           $_POST['qty'] = number_format2(0, $dec);
        $_POST['units'] = $item_info["units"];
    }

    if ($order->fixed_asset) {
        hidden('qty', 1);
        qty_cell(1, false, 0);
    } else
        small_qty_cells(null, 'qty', $_POST['qty'], null, null, $dec);

    label_cell($_POST['units'], '', 'units');

    if ($id != -1)
    {
        button_cell('UpdateItem', _("Update"),
                _('Confirm changes'), ICON_UPDATE);
        button_cell('CancelItemChanges', _("Cancel"),
                _('Cancel changes'), ICON_CANCEL);
        hidden('LineNo', $line_no);
        set_focus('qty');
    }
    else
    {
        submit_cells('AddItem', _("Add Item"), "colspan=2",
            _('Add new item to document'), true);
    }

    end_row();
}


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

function transfer_options_controls()
{
      echo "<br>";
      start_table();

      textarea_row(_("Memo"), 'memo_', null, 50, 3);

      end_table(1);
}


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

The following 4 files is my modification to allow user can search customer, supplier by their phones
Especially searching customers by phone number is very common in retail activities.

It would be more realistic to link sales person with sales order instead of only with branch the way it is now.
We will still need to keep the current relationship between sales person and branch so that can have a default salesman every time select a branch on a sales order.
This is a real situation that I have encountered when implementing systems for service providers such as spa, salon, law firms office...

line 640 of sales_order_db.inc needs to be replaced by:

$last_query=db_query($sql, "Could not retrieve last order detail");

Please read post #85 #86 #87

96

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

The error message pointed out how to solve your problem

SQL script execution failed in line 2: Erreur de syntaxe près de ') ENGINE=InnoDB' à la ligne 19

Please remove the last comma in the SQL script

97

(10 replies, posted in Development)

In the next major release please remove all DEFAULT '0000-00-00' for every date fields
Since SQL Mode now strict mode it is an invalid value for Mysql date data
In the reference below they said:

The DATE type is used for values with a date part but no time part. MySQL retrieves and displays DATE values in 'YYYY-MM-DD' format. The supported range is '1000-01-01' to '9999-12-31'.

https://dev.mysql.com/doc/refman/5.7/en/datetime.html

98

(4 replies, posted in Translations)

Which language are you using? I'm running FA on Nginx without locales problem.

The error message talked about how to solve your problem.
Go to Setup->System and General Ledger Setup then select Deffered Income Acount

100

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

This problem has been solved here
Read post #85 #86 #87