B2B pay on invoice for PrestaShop 8.2 and 9.x: approved customers pay with payment terms (Net 15/30/60, EOM) inside a credit limit, add their PO number and get the due date on the order and the PDF invoice. Credit check at checkout, payments as PrestaShop order payments, invoices that stay open when the order ships, reminders, automatic holds when overdue, credit applications, a printable statement and an aging report. Uses PrestaShop's own B2B fields. No overrides.
Tested on 9.2.0 & 8.2.8Version 1.0.0Compatible with PrestaShop 8.2 – 9.x No core file edits
Built forPrestaShop
Know who owes you what (sample data)1 of 7
What it does
B2B pay on invoice for PrestaShop 8.2 and 9.x: approved customers pay with payment terms (Net 15/30/60, EOM) inside a credit limit, add their PO number and get the due date on the order and the PDF invoice. Credit check at checkout, payments as PrestaShop order payments, invoices that stay open when the order ships, reminders, automatic holds when overdue, credit applications, a printable statement and an aging report. Uses PrestaShop's own B2B fields. No overrides.
Sell on credit without losing track. Business customers expect to order now and pay in 30 days. PrestaShop has B2B fields for it, but no payment method that uses them. Net Terms & Credit Limits gives approved customers payment terms and a credit limit, checks every order against the credit left, and follows each invoice until it is paid.
Features
At checkout
"Pay on invoice (Net 30)" with the due date and the credit left
PO number: off, optional or required
Above the credit: hidden with a clear note, or accepted and held for credit review
Paused while an invoice is overdue; checked again on the server
For your customers
My account > Credit account: available credit, balance, overdue, every invoice
Printable statement
Apply for a credit account
For you
Limits and terms per customer, per group, or from PrestaShop's B2B fields; Net 15/30/60 or EOM
Due date, terms and PO number on the order and the PDF invoice
Payments as PrestaShop order payments, part payments too; orders stay open when they ship
Reminders before, on and after the due date; accounts on hold when too late, released once paid
Download & installOne module .zip for PrestaShop 8.2 and 9.x, installed in Modules > Module Manager > Upload a module. Download it from My licenses right after payment.
12 months of updates & supportNew versions and help for 12 months (24 or 36 months at checkout). After that the module keeps working; renew anytime at 50%.
License for your storeOne production domain with all its subdomains; staging and local development hosts are free. How licensing works
30-day refundFull refund within 30 days of your first purchase, no reason needed. Refund policy
Tested buildsPrestaShop 8.2 – 9.x. Tested on PrestaShop 9.2.0 and PrestaShop 8.2.8.
Documentation & supportFull guide (Installation, Configuration, Usage, FAQ) on this page. Tickets from your account, first reply within 1 business day.
Compatibility
Net Terms & Credit Limits works with PrestaShop 8.2 – 9.x.
We list the builds we install and test on. “Tested” means the test plan ran on that build; “Supported” means the build is inside the supported range.
Compatibility
Version
Range
Runs on
Status
PrestaShop 9
9.0 – 9.2
PHP 8.1 – 8.4
Tested on 9.2.0
PrestaShop 8.2
8.2.0 – 8.2.x
PHP 7.2.5 – 8.1
Tested on 8.2.8
1.0.0
Latest
First release: pay on invoice with payment terms and credit limits, PO numbers, due dates on the PDF invoice, credit review above the limit, payments through PrestaShop order payments, reminders, automatic holds, credit applications, statement, receivables overview and aging report.
How do I install the module?
Upload. Modules > Module Manager > Upload a module: drop the .zip from My licenses. One package for PrestaShop 8.2 and 9.x.
Configure. Click Configure. Settings follow the shop context, so in a multistore you set them for all shops or per shop.
Enter the license key. Paste the key from My licenses in the License panel and save. You have 14 days to do it; local and staging addresses are included.
PrestaShop 8.2 – 9.x. Tested on PrestaShop 9.2.0 and PrestaShop 8.2.8. The Compatibility tab lists every version range.
Do the modules use overrides?
No. They work through PrestaShop hooks, widgets and the core product customization system. Nothing is written to /override and no core file is changed, so PrestaShop updates and other modules keep working.
Which themes do they work with?
They are tested on Classic and Hummingbird, the two themes PrestaShop ships. Themes based on them work; a theme that removes the standard product page containers may need a small CSS adjustment, and support helps with that.
Do they work with multistore?
Yes. Settings follow the shop context, like PrestaShop's own modules. A license covers one production domain with its subdomains, so shops on other domains need a license each.
What does the license cover?
One production store domain with every subdomain (www, shop., staging.), plus local development hosts such as localhost, *.local and *.test. A store on another domain needs its own license; a second-store license is 40% off. You have 14 days after installing to enter the key. 12 months of updates and support are included; after that the module keeps working and renewals are 50% off. How licensing works
Can I get a refund?
Yes. Ask for a full refund within 30 days of your first purchase, no reason needed: open a ticket or write to [email protected] with your order number. The money goes back to the card or bank account you paid with within 5 business days of approval. Refund policy
How do I get help?
Open a ticket from your account, so your license details are attached. We answer Monday to Friday: bug reports within 1 business day, how-to questions within 2. Support policy. Not a customer yet? Ask a pre-sales question.
Business customers expect to order now and pay in 30 days. PrestaShop 8 and 9 have B2B fields for an allowed outstanding amount and payment days, but no payment method that uses them, no due dates and nothing that follows an unpaid invoice. Net Terms & Credit Limits adds all of it.
Pay on invoice: a payment method for approved customers with their payment terms (Net 15, 30, 60, due on receipt, or EOM), the due date of an order placed today and the credit left
Credit limits: per customer, per customer group, or from PrestaShop's own B2B fields; every order is checked against the available credit, on the server too
PO number: off, optional or required; shown on the order, the PDF invoice, the reminders and the statement
Above the credit: hide the method (the customer sees why) or accept the order and hold it in "Credit review"
Overdue: paying on invoice pauses while an invoice is overdue; accounts are put on hold after a number of days and released by themselves once paid
Payments: recorded on the order page as PrestaShop order payments (part payments too); orders stay open when they ship instead of being marked paid by the core
Reminders: e-mails before, on and after the due date, by a daily job, a cron address or "Send reminder now"
Customers: My account > Credit account with the balance, every invoice and a printable statement; credit applications with approve and decline e-mails
Reports: receivables overview, invoice list with search, accounts, aging report, CSV export
No overrides, no outside service.
Tested on
PrestaShop
9.2.0 and 8.2.8
Storefront
Hummingbird and Classic
Back office
PrestaShop 9 and 8 admin themes
Receivables overview
Installation
Requirements
PrestaShop 8.2.0 to 9.x, PHP 7.2.5 to 8.5 (as your PrestaShop version needs)
Working e-mail settings (Advanced Parameters > E-mail) for reminders and application e-mails
A daily cron job is optional: the daily reminders also run when you open Customers > Net terms
Install
Modules > Module Manager > Upload a module: drop kvnetterms-1.0.0.zip.
Open Customers > Net terms > Settings.
Choose who may pay on invoice: tick approved customer groups (for example a "Wholesale" group), approve applications, or open accounts one by one on the Accounts tab.
Set the default credit limit and payment terms.
Optional: add the cron address shown on the settings page to your server, once a day.
Own-site edition: enter your licence key on the Settings tab.
The module creates two order states: Awaiting invoice payment (a PDF invoice is created at once) and Credit review. Currencies, countries and carriers of the method are set like for any payment module under Payment > Preferences.
Update
Upload the new zip the same way. Accounts, invoices, applications and settings stay.
Uninstall
Uninstalling deletes the credit accounts, the invoice terms (due dates, PO numbers, reminders) and the applications of the module. Orders, their payments and PDF invoices stay in PrestaShop; the two order states are hidden from the lists but stay on the orders that use them.
Configuration
All settings are under Customers > Net terms > Settings.
Credit accounts
Setting
What it does
Offer paying on invoice
Shows "Pay on invoice" to approved customers and the credit application in My account. Admin screens, invoices and reminders always work.
Approved customer groups
Customers in these groups have an account with the default limit and terms without applying. A status set on a customer wins over the group.
Default credit limit
In the default currency. Used when a customer has no limit of their own. 0 = no limit.
Payment terms (days)
Net 15, 30, 60 ... 0 = due on receipt.
Due date counts from
The order date, or the end of the order month (Net 30 EOM).
Use the PrestaShop B2B fields
With B2B mode on (Customers > Customer settings), a customer's "Allowed outstanding amount" and "Maximum number of payment days" become their limit and terms unless you set them on the account.
Checkout
Setting
What it does
Order above the available credit
Do not offer paying on invoice (a note above the payment methods tells the customer why), or Accept it and hold it for credit review (the order gets the state "Credit review"; move it on when you agree).
PO number
Do not ask, optional or required. A required PO number is checked on the server too.
Pause while an invoice is overdue
Customers with an overdue invoice cannot place a new order on invoice until it is paid.
Put accounts on hold after (days overdue)
The daily job puts the account on hold and e-mails the customer; released by itself once the overdue invoices are paid. 0 = never.
Keep invoices open when an order ships
PrestaShop records a payment for the whole order when it moves to a "paid" state such as Shipped or Delivered. With this on, the invoice stays open until its payments are recorded. "Payment accepted" still closes it.
Credit applications
Customers without an account can apply under My account > Credit account.
E-mail the store about new applications
Sent to the shop e-mail of Shop Parameters > Contact.
Terms on the PDF invoice
Adds payment terms, due date and PO number to the PrestaShop invoice PDF.
Settings
Reminders
Setting
Default
Reminder days before the due date
3 (0 = none)
Reminder on the due date
yes
When overdue, remind every (days)
7
Overdue reminders at most
3
Each reminder is sent once per invoice. If the daily job could not run for a few days it sends only the reminder that fits today, not every missed one. A new due date starts the reminders again. Orders in credit review get no reminders.
One customer
Accounts tab > Edit, or the Manage credit account button on the customer page:
Credit account: Decided by customer group (default), Approved, On hold, No credit account, Declined
Credit limit: empty = the B2B field or the default, 0 = no limit
Payment terms (days): empty = the B2B field or the default
Hold reason: shown to the customer while the account is on hold
Private note: only for your team
To open an account for a customer who never applied, type the e-mail next to Open a credit account.
E-mails
All e-mails use one template, mails/en/kvnt_notice.html / .txt of the module (copy it into your theme's modules/kvnetterms/mails/en/ to restyle it): invoice reminders, account on hold, account active again, application approved, application declined, and the new application notice for the store. The PrestaShop order confirmation names the payment method with its terms, for example "Pay on invoice (Net 30)".
Licence
Own-site edition: enter the licence key at the bottom of the settings. Without an active licence, new orders on invoice and new applications are not offered. Existing invoices, payments, reminders and every admin screen keep working.
Usage
At checkout
A signed-in customer with an approved account sees Pay on invoice (Net 30) next to your other payment methods. Under it: the payment terms, the due date of an order placed today, the credit left and the PO number field.
Pay on invoice at checkout
When the order does not fit (above the available credit, an overdue invoice, account on hold) the method is not offered and a short note above the payment methods says why. The server checks the account, the credit and the PO number again when the order is placed.
The order gets the state Awaiting invoice payment and a PDF invoice at once; stock is reduced as usual. The confirmation page, the customer's order page and the PDF invoice show the terms, the due date and the PO number.
My account > Credit account
The customer sees the available credit, the balance and the overdue amount, the payment terms, and the invoices (Open, Paid, All) with the due date, the amount still to pay and the state. Print statement opens a printable statement of the open invoices.
Credit account in My account
Customers without an account see the application form (company, VAT or company number, phone, the credit they need, a message).
On the order (back office)
The Net terms invoice card in the side column of the order page shows the state, terms, due date, PO number, amount, paid and still to pay, with the payments.
Record payment: amount (the open amount is filled in; more is capped), date, method and reference. The payment is a normal PrestaShop order payment, so it also shows in the order's Payment block. Payments added with PrestaShop's own payment form count too.
x next to a payment removes it (a wrong amount).
Send reminder now e-mails the customer at once.
Change the due date or the PO number and click Update.
Net terms card on the order
Orders you create in the back office with "Net Terms & Credit Limits" as payment become invoices with the customer's terms. Cancelled orders become void; credit slips lower the amount to pay.
Customers > Net terms
Receivables: outstanding and overdue totals, due in the next 7 days, accounts on hold, waiting applications, the aging bar, the largest balances, the next invoices due, and Run now for the daily job.
Invoices: Open, Overdue, Credit review, Paid, Void and All, search by order, company, e-mail or PO number, CSV export.
Accounts: every customer with an account or an invoice, with terms, limit, balance, available and overdue; Edit per customer; Open a credit account by e-mail.
Applications: approve with a limit and terms (empty = the defaults) or decline with a reason; the customer is e-mailed.
Aging report: open amounts per customer in Not yet due, 1-30, 31-60, 61-90 and over 90 days late, with totals and CSV export.
ApplicationsAging report
FAQ
Who can pay on invoice?
Customers in the approved groups, customers whose account you approved (application or Accounts tab), and nobody else. Guests never see the method.
Does it use PrestaShop's B2B fields?
Yes, when B2B mode is on: "Allowed outstanding amount" becomes the credit limit and "Maximum number of payment days" the terms, unless you set them on the account.
Why does my order stay open after I set it to Shipped?
PrestaShop normally records a payment for the whole order when it moves to a "paid" state such as Shipped. For an invoice nobody has paid yet that would be wrong, so the module keeps it open (setting "Keep invoices open when an order ships"). Record the payment when the money arrives, or set the order to "Payment accepted".
Is the credit limit checked again when the order is placed?
Yes. The server checks the account, the overdue invoices, the credit and a required PO number again; a forged request cannot place an order on invoice.
Can customers pay part of an invoice?
Record every payment you receive; the invoice stays open until it is paid in full.
Which currency do limits use?
Limits, balances and the aging report are in the default currency. Invoices keep the order currency; orders in other currencies are converted with the order's rate.
Do I need a cron job?
No. The daily job runs when you open Customers > Net terms. For reminders at the same time every day, add the cron address from the settings page.
Does it work with multistore?
Invoices belong to the shop of the order; credit accounts are per customer. Tested on single-shop stores.
The department store theme for PrestaShop 8.2 and 9.x: colour-coded departments, a department list beside the hero slider with two side promos, a big search with a department picker, tabbed product grids, a 2 + 1 + 2 offer grid, deals of the day with real countdowns, a department showcase, a promotions band and a three-column product page with a sticky buy box. Four styles (Meridian, Harbor, Citrus, Night), every colour editable. A child theme of Classic, no core changes.
Stop AI crawlers, scrapers, vulnerability scanners and unwanted countries before PrestaShop 8.2 or 9.x builds a page. Googlebot and Bingbot are verified by DNS and always allowed; 50+ bots get one switch each; country rules use free GeoIP databases and can close only the checkout; IP and network lists, rate limits for search, filters and forms, honeypots and the add to cart flood fix; a one-second challenge instead of a captcha; learning mode, dashboard, log, IP tester and Cloudflare export. Two hooks, no overrides.
Import and update products from supplier CSV, XML and JSON feeds in PrestaShop 8.2 or 9.x on a schedule: URL, FTP, SFTP or upload; field mapping with real sample values; match by reference, EAN-13, supplier reference or MPN; markup by price band and category with .99 rounding; a price guard that holds back big drops and below-cost prices; combinations from feed rows; stock-only syncs; products missing for N runs set to stock 0 with a safety limit; a dry-run preview with old and new values, run history with a row log and undo. No overrides, no storefront hooks.