When you Edit Bank Payment or Bank Deposit, FA voids previous entry and creates new entry.
Void sets all values to ZERO and mark the entry as voided.

May be during this process anomaly occured and marking entry voided failed.

If this happens regularly then this needs to be debug in depth.

Check Sheets add the demand form your sales orders and shows what you have in hand after all orders and what you have already ordered. That is not supposed to be same as Inventory Movement.

You can print the name of User who created invoice. For that you need some customizations.

Great Shehroz,
Thanks for your work.
I appreciate.

Thanks, let me know if you face any problem.
I will fix that

Vyapar also uses this method for transactions sharing as explained in this video using your own personal whatsApp.
https://www.youtube.com/watch?v=ALZqGYoqcSg

This method is 100% safe as long as you are not using for bulk messages

Hi Community Members,
I have develped an UnOfficial WhatsApp API Module.
It has Pros and Cons both.
So Choice is yours

Pros of Unofficial APIs
* You bypass Meta’s per-message pricing entirely. Whether you are sending a transactional receipt or a promotional blast, there are zero official WhatsApp fees.
* No Approvals or Templates: You do not need to submit message templates to Meta for approval. You can send any content, at any time, without waiting for the official green light.
* No 24-Hour Service Window: Unlike the official API, which restricts free-form replies to a 24-hour window after a customer messages you, unofficial APIs allow you to initiate or reply to conversations whenever you want.
* Simultaneous Mobile App Use: Because these tools typically work by mimicking a "Linked Device" (WhatsApp Web), you can keep your primary phone number active on your physical smartphone while still automating messages through the API.
* Access to Native Features: Unofficial APIs often support features that the official Cloud API restricts, such as creating and managing WhatsApp Groups, updating Statuses, and interacting with Communities.
* Instant Setup: There is no lengthy Meta Business verification process. You can generate a QR code, scan it, and start testing your API integration in minutes.

Cons of Unofficial APIs
* High Risk of Permanent Bans: This is the biggest drawback. Unofficial APIs strictly violate Meta’s Terms of Service. If WhatsApp's automated systems detect bot-like behavior, non-human typing speeds, or spam patterns, your phone number can be permanently banned without warning.
* Zero Official Support: If your number gets banned or a message fails to deliver, you have no recourse or customer support from Meta.
* No Official "Green Tick": You cannot apply for the verified Official Business Account badge (the green checkmark), which can lower trust for customers interacting with your brand.

I am attaching the zip file here.
Install it in the latest version of FA.

1. Create Invoice.
2. Add Chat Id in the customer setup. It can be number with country code without + Or the Customers Group Id.
3. Open Customer INquiry page
4. Send WhatsApp.
5. It will check for company email (if not defined) for creating session
6. It will ask for scanning like whatsapp web
7. Now you can send invoice, payments, delivery notes

Let me know your feedback.

Actually it must be
write_bank_transaction($entry->trans_type, $bank_account, $entry, $entry->tran_date, // FA built-in function
            0,0,0, $entry->reference, $entry->memo_, false);

I downlaod this official extention of FA

ON line 69 there is a function call

add_bank_transaction($entry->trans_type, $bank_account, $entry, $entry->tran_date, // FA built-in function
            false, false, false, $entry->reference, $entry->memo_, false);

But there is no bulit in function with this name.

9

(7 replies, posted in Report Bugs here)

EXCHANGE-RATES.ORG can also fetch historical rates

elseif ($provider == 'EXCHANGE-RATES.ORG')
    {
        if ($date != Today())
            $filename = "/exchange-rate-history/{$curr_b}-{$curr_a}-".date2sql($date);
        else
            $filename = "/converter/{$curr_b}-{$curr_a}";
        $site = "exchange-rates.org";
        $proto = 'https://';
        $contents=file_get_contents($proto.$site.$filename);

    
    }

10

(0 replies, posted in Reporting)

I can see there is a function in pdf_report.inc that includes some Customer Header Template from
/reporting/forms folder

function NewPage() 
    {
        if ($this->pageNumber==0)
        {
            // check if there is pdf header template for this report
            // and set if it is found
            $tmpl_pdf = find_custom_file("/reporting/forms/".$this->headerTmpl.".pdf");
            if ($tmpl_pdf) {
                $this->tmplSize = $this->setSourceFile($tmpl_pdf);
            }
        }

        $this->pageNumber++;
        parent::newPage();

        if ($this->tmplSize) {
            $this->row = $this->pageHeight - $this->topMargin; // reset row
            $id = $this->importPage(min($this->pageNumber, $this->tmplSize));
            $this->useTemplate($id);
        }

        // include related php file if any
        $tmpl_php = find_custom_file("/reporting/forms/".$this->headerTmpl.".php");
        if ($tmpl_php) {
            include($tmpl_php);
        }

        if (method_exists($this, $this->headerTmpl))    // draw predefined page layout if any
            $this->{$this->headerTmpl}();
    }

I am not sure How to use this If I add some custom header page in my module. Any help, ideas, sample?

In config.php set go_debug = 2; and then try and share the error here

Somehow I got some solution by Changing some lines in the function exception_handler()
Whole function is mentioned below

function exception_handler($exception)
{
    $trace = $exception->getTrace();
    $str_trace = "";
    foreach ($trace as $line){
        $str_trace .= $line['file']." at Line ".$line['line'] . "<br>";
    }

    error_handler(
        E_ERROR,
        sprintf(_("Unhandled exception [%s]: %s. %s."), $exception->getCode(), $exception->getMessage(), $str_trace),
        $exception->getFile(),
        $exception->getLine()
    );
    end_page();
}

Adding Comparative Bug Display for PHP 7.4 vs PHP 8.1+

https://postimg.cc/HrzNvY5K/b73f5e8d

This is not helpful for Debugging the problem because it is not pin pointing the file from where the problem is aroused.

In PHP 7.4 it gives error like this

DATABASE ERROR : The sales area could not be updated error code : 1054 error message : Unknown column 'descriptio' in 'field list' sql that failed was : UPDATE 0_areas SET descriptio='Global' WHERE area_code = '1' /home/sites/39b/7/7d21587bd2/public_html/dev/includes/errors.inc:235: trigger_error('DATABASE ERROR : The sales area could not be updated error code : 1054 error message : Unknown column 'descriptio' in 'field list' sql that failed was : UPDATE 0_areas SET descriptio='Global' WHERE area_code = '1' ','256') /home/sites/39b/7/7d21587bd2/public_html/dev/includes/errors.inc:261: display_db_error('The sales area could not be updated','UPDATE 0_areas SET descriptio='Global' WHERE area_code = '1'','') /home/sites/39b/7/7d21587bd2/public_html/dev/includes/db/connect_db_mysqli.inc:103: check_db_error('The sales area could not be updated','UPDATE 0_areas SET descriptio='Global' WHERE area_code = '1'','1') /home/sites/39b/7/7d21587bd2/public_html/dev/sales/includes/db/sales_groups_db.inc:71: db_query('UPDATE 0_areas SET descriptio='Global' WHERE area_code = '1'','The sales area could not be updated') /home/sites/39b/7/7d21587bd2/public_html/dev/sales/manage/sales_areas.php:38: update_sales_area('1','Global')

but in php 8.1+ it does not show Backtrace

Unhandled exception [1054]: Unknown column 'descriptio' in 'field list'. in file: /home/sites/39b/7/7d21587bd2/public_html/dev/includes/db/connect_db_mysqli.inc at line 80 exception_handler((mysqli_sql_exception Object))

How to Fix?

I want to print Arabic Customer Name On Invoice.
I don't want full Arabic with RTL Font.
I am using dejavusans font.
It is showing Arabic But it showing it LTR so breaking all characters of Arabic in LTR.

How to Fix this?

Screenshot
https://postimg.cc/6TP2QTWV/179e47e5

17

(2 replies, posted in Report Bugs here)

Please change the go_debug = 2 in config.php and then check

18

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

I think No

I have re bundled module to fetch price of each item upon scan and few other improvements and unnecessary code removed.

19

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

Here is a small module that adds items in the Cart using Bar Code Scan

20

(6 replies, posted in Report Bugs here)

Can you manually approve this account

21

(6 replies, posted in Report Bugs here)

Nothing in spam

https://imgur.com/a/WaU5452

I advised my junior to join forum.
But he is not receiving confirmation link email.

https://imgur.com/a/9r7dDJr

Requested email is

huzaziz1@gmail.com

Average Cost Calculation at FA

1. 10 pcs of Item A purchased at $15
2. 6 pcs are sold
3. 15 pcs of Item A purchased at $18

avg cost = ((15*18)+(4*15)) / 19 = 17.36

This is the formula of Avg Cost

However the problem at FA is that if you even Stock IN it calculates the Avg Cost. Even if you do Stock Transfer it calculates Avg Cost. Even the Voding Stock Moves affects the Average Cost

I have some modifications and conditions applied in

function void_stock_move()

if (!in_array ($type ,array(ST_LOCTRANSFER))) //condition added by faisal
            if(!get_company_pref ('controlled_avg_cost') || in_array ($type, array(ST_WORKORDER, ST_MANURECEIVE, ST_SUPPRECEIVE)))
               update_average_material_cost($row["supplier_id"], $row["stock_id"],
                     $unit_cost, -$row["qty"], sql2date($row["tran_date"]), false, "Void Stock Move # $type_no and type = ".$systypes_array[$type]);

This function also is modified but the idea is to limit it on all Transaction Types

24

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

@tom this extension will access the wordpress database directly hence needed to be on the same server. Right?

Great work