{"id":377893,"date":"2026-10-02T10:33:19","date_gmt":"2026-10-02T10:33:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/nimble-lead-to-cash\/"},"modified":"2026-10-11T20:55:02","modified_gmt":"2026-10-11T20:55:02","slug":"nimble-lead-to-cash","status":"publish","type":"plugin","link":"https:\/\/vec.wordpress.org\/plugins\/nimble-lead-to-cash\/","author":23555215,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.37.25","stable_tag":"1.37.25","tested":"7.1.3","requires":"6.5","requires_php":"8.1","requires_plugins":null,"header_name":"Nimble Lead to Cash","header_author":"NimblePlugins","header_description":"Turn WordPress enquiries into customers with a simple, self-hosted sales pipeline.","assets_banners_color":"5c5e92","last_updated":"2026-10-11 20:55:02","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/nimbleplugins.com\/lead-to-cash\/","header_author_uri":"https:\/\/nimbleplugins.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":438,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.37.10":{"tag":"1.37.10","author":"nimbleplugin","date":"2026-10-08 07:38:52","revision":3733892},"1.37.17":{"tag":"1.37.17","author":"nimbleplugin","date":"2026-10-08 20:10:28","revision":3735454},"1.37.25":{"tag":"1.37.25","author":"nimbleplugin","date":"2026-10-11 20:55:02","revision":3740123},"1.37.6":{"tag":"1.37.6","author":"nimbleplugin","date":"2026-10-02 10:32:47","revision":3724570},"1.37.7":{"tag":"1.37.7","author":"nimbleplugin","date":"2026-10-03 07:02:55","revision":3725852},"1.37.8":{"tag":"1.37.8","author":"nimbleplugin","date":"2026-10-03 07:55:32","revision":3725901}},"upgrade_notice":{"1.4.46":"<p>The encryption key moves out of wp-content automatically. If you have defined NIMBLE_LTC_ENCRYPTION_KEY_B64 in wp-config.php, nothing changes at all. Do not roll back to an older version after updating.<\/p>","1.4.45":"<p>Removes the licence client entirely. Every feature is unchanged.<\/p>","1.4.18":"<p>Small dashboard navigation styling refinement only.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3724568,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3724568,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3724568,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3724568,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.37.10","1.37.17","1.37.25","1.37.6","1.37.7","1.37.8"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3724568,"resolution":"1","location":"assets","locale":"","width":1288,"height":904},"screenshot-10.png":{"filename":"screenshot-10.png","revision":3724568,"resolution":"10","location":"assets","locale":"","width":1289,"height":903},"screenshot-11.png":{"filename":"screenshot-11.png","revision":3724568,"resolution":"11","location":"assets","locale":"","width":1286,"height":906},"screenshot-12.png":{"filename":"screenshot-12.png","revision":3724568,"resolution":"12","location":"assets","locale":"","width":1303,"height":904},"screenshot-13.png":{"filename":"screenshot-13.png","revision":3724568,"resolution":"13","location":"assets","locale":"","width":1290,"height":907},"screenshot-14.png":{"filename":"screenshot-14.png","revision":3724568,"resolution":"14","location":"assets","locale":"","width":1287,"height":906},"screenshot-15.png":{"filename":"screenshot-15.png","revision":3724568,"resolution":"15","location":"assets","locale":"","width":1184,"height":874},"screenshot-16.png":{"filename":"screenshot-16.png","revision":3724568,"resolution":"16","location":"assets","locale":"","width":1301,"height":907},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3724568,"resolution":"2","location":"assets","locale":"","width":1290,"height":905},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3724568,"resolution":"3","location":"assets","locale":"","width":1288,"height":906},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3724568,"resolution":"4","location":"assets","locale":"","width":1283,"height":848},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3724568,"resolution":"5","location":"assets","locale":"","width":1290,"height":908},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3724568,"resolution":"6","location":"assets","locale":"","width":1291,"height":907},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3724568,"resolution":"7","location":"assets","locale":"","width":1288,"height":907},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3724568,"resolution":"8","location":"assets","locale":"","width":1287,"height":905},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3724568,"resolution":"9","location":"assets","locale":"","width":1289,"height":907}},"screenshots":{"1":"The dashboard: today's work, what is overdue and where money is waiting, on one screen.","2":"The same screen in light mode. Each user picks the theme on their own device.","3":"Enquiries as they arrive, with source, owner, status and the next step for each.","4":"Actions that have passed their date are raised before you start: done, or moved to a new one.","5":"Quotes from draft to sent, with value and expiry date on every line.","6":"A quote being written: customer, addresses, introduction and line items.","7":"The customer directory, with enquiries, invoices and outstanding amount per customer.","8":"A customer record: details, figures, enquiries and documents, with the activity history beside it.","9":"Jobs with owner, deadline, priority, economy and time booked.","10":"Invoices from draft to paid, including credit notes and what is overdue.","11":"An invoice with its lifecycle, payment terms and the actions it allows.","12":"Completed jobs, newest first, with the invoices linked to them.","13":"Reports: enquiries, win rate, what was quoted, invoiced and paid, and how long payment took.","14":"The audit log: every change, who made it and what it touched.","15":"Plugin settings in wp-admin: language, currency, VAT and what happens on uninstall.","16":"First run: a short setup that asks only for the choices needed from day one."}},"plugin_section":[],"plugin_tags":[1150,7619,10868,335,225690],"plugin_category":[58],"plugin_contributors":[279560],"plugin_business_model":[],"class_list":["post-377893","plugin","type-plugin","status-publish","hentry","plugin_tags-crm","plugin_tags-customers","plugin_tags-enquiries","plugin_tags-leads","plugin_tags-sales-pipeline","plugin_category-user-management","plugin_contributors-nimbleplugin","plugin_committers-nimbleplugin"],"banners":{"banner":"https:\/\/ps.w.org\/nimble-lead-to-cash\/assets\/banner-772x250.png?rev=3724568","banner_2x":"https:\/\/ps.w.org\/nimble-lead-to-cash\/assets\/banner-1544x500.png?rev=3724568","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/nimble-lead-to-cash\/assets\/icon-128x128.png?rev=3724568","icon_2x":"https:\/\/ps.w.org\/nimble-lead-to-cash\/assets\/icon-256x256.png?rev=3724568","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/nimble-lead-to-cash\/assets\/screenshot-1.png?rev=3724568","caption":"The dashboard: today's work, what is overdue and where money is waiting, on one screen."},{"src":"https:\/\/ps.w.org\/nimble-lead-to-cash\/assets\/screenshot-2.png?rev=3724568","caption":"The same screen in light mode. Each user picks the theme on their own device."},{"src":"https:\/\/ps.w.org\/nimble-lead-to-cash\/assets\/screenshot-3.png?rev=3724568","caption":"Enquiries as they arrive, with source, owner, status and the next step for each."},{"src":"https:\/\/ps.w.org\/nimble-lead-to-cash\/assets\/screenshot-4.png?rev=3724568","caption":"Actions that have passed their date are raised before you start: done, or moved to a new one."},{"src":"https:\/\/ps.w.org\/nimble-lead-to-cash\/assets\/screenshot-5.png?rev=3724568","caption":"Quotes from draft to sent, with value and expiry date on every line."},{"src":"https:\/\/ps.w.org\/nimble-lead-to-cash\/assets\/screenshot-6.png?rev=3724568","caption":"A quote being written: customer, addresses, introduction and line items."},{"src":"https:\/\/ps.w.org\/nimble-lead-to-cash\/assets\/screenshot-7.png?rev=3724568","caption":"The customer directory, with enquiries, invoices and outstanding amount per customer."},{"src":"https:\/\/ps.w.org\/nimble-lead-to-cash\/assets\/screenshot-8.png?rev=3724568","caption":"A customer record: details, figures, enquiries and documents, with the activity history beside it."},{"src":"https:\/\/ps.w.org\/nimble-lead-to-cash\/assets\/screenshot-9.png?rev=3724568","caption":"Jobs with owner, deadline, priority, economy and time booked."},{"src":"https:\/\/ps.w.org\/nimble-lead-to-cash\/assets\/screenshot-10.png?rev=3724568","caption":"Invoices from draft to paid, including credit notes and what is overdue."},{"src":"https:\/\/ps.w.org\/nimble-lead-to-cash\/assets\/screenshot-11.png?rev=3724568","caption":"An invoice with its lifecycle, payment terms and the actions it allows."},{"src":"https:\/\/ps.w.org\/nimble-lead-to-cash\/assets\/screenshot-12.png?rev=3724568","caption":"Completed jobs, newest first, with the invoices linked to them."},{"src":"https:\/\/ps.w.org\/nimble-lead-to-cash\/assets\/screenshot-13.png?rev=3724568","caption":"Reports: enquiries, win rate, what was quoted, invoiced and paid, and how long payment took."},{"src":"https:\/\/ps.w.org\/nimble-lead-to-cash\/assets\/screenshot-14.png?rev=3724568","caption":"The audit log: every change, who made it and what it touched."},{"src":"https:\/\/ps.w.org\/nimble-lead-to-cash\/assets\/screenshot-15.png?rev=3724568","caption":"Plugin settings in wp-admin: language, currency, VAT and what happens on uninstall."},{"src":"https:\/\/ps.w.org\/nimble-lead-to-cash\/assets\/screenshot-16.png?rev=3724568","caption":"First run: a short setup that asks only for the choices needed from day one."}],"raw_content":"<!--section=description-->\n<p>Lead to Cash by NimblePlugins is a self-hosted workflow for service businesses that want to manage the path from enquiry to invoice inside WordPress.<\/p>\n\n<p>https:\/\/youtu.be\/JbFvNNL2Wfo<\/p>\n\n<p>The Free plugin includes:<\/p>\n\n<ul>\n<li>Enquiries and manual lead creation<\/li>\n<li>Customers<\/li>\n<li>Quotes and PDF documents<\/li>\n<li>Jobs and completed work<\/li>\n<li>Invoices and payment tracking<\/li>\n<li>Standard reports and an audit log<\/li>\n<li>In-app notifications<\/li>\n<li>Search and export tools<\/li>\n<li>Local encryption of sensitive fields<\/li>\n<li>WordPress personal-data export and erasure integration<\/li>\n<li>English as the default product language<\/li>\n<li>Danish language and economic defaults<\/li>\n<li>A searchable Help &amp; FAQ centre in English and Danish<\/li>\n<li>Lead to Cash user administration in WordPress<\/li>\n<li>Scheduled backups of Lead to Cash data, kept on the server, with restore and import of a saved backup file<\/li>\n<\/ul>\n\n<p>Lead to Cash contains no licence check, no account requirement and no time limit. A product key applies only to the separately installed Lead to Cash Pro add-on, whose code is not part of this plugin.<\/p>\n\n<p>Your operational data is stored in dedicated tables in your WordPress database, and backups are kept there too. It leaves the server only when you ask it to: see External services.<\/p>\n\n<p>Product information: https:\/\/nimbleplugins.com\/lead-to-cash\/<\/p>\n\n<h3>External services<\/h3>\n\n<p>Lead to Cash runs on your own server and never contacts NimblePlugins. It contacts the services below, and only for the feature named.<\/p>\n\n<h4>Danish company register, CVR (only when a user looks up a CVR number)<\/h4>\n\n<p>When a user enters a Danish CVR number on a customer card and asks for the details, the eight-digit number is sent to cvrapi.dk to fetch the registered company name and address. The request also carries this site's host name in the User-Agent header, because cvrapi.dk rejects anonymous calls. Nothing else is sent, and no customer data leaves the site. An answer is cached for twelve hours, so looking the same number up again does not call out again.<\/p>\n\n<p>Service: https:\/\/cvrapi.dk\/ - Terms: https:\/\/cvrapi.dk\/terms - What data they hold and why: https:\/\/cvrapi.dk\/help<\/p>\n\n<h4>VAT-number lookup (only when a user clicks it)<\/h4>\n\n<p>When a user looks up a customer's VAT number, the country code and the number are sent to the European Commission's VIES service (ec.europa.eu) to fetch the registered company name and address. Nothing else is sent. Service: https:\/\/ec.europa.eu\/taxation_customs\/vies\/ - Legal notice: https:\/\/commission.europa.eu\/legal-notice_en - Privacy: https:\/\/commission.europa.eu\/privacy-policy-websites-managed-european-commission_en<\/p>\n\n<h4>Logo and payment QR image<\/h4>\n\n<p>If the company logo or payment QR code is given as a web address, Lead to Cash downloads that image to place it in PDF documents. Only the address you enter is requested, and nothing about your data is sent. Normally this is an image in your own media library.<\/p>\n\n<h4>Backup destinations (only with the separate Pro add-on)<\/h4>\n\n<p>Lead to Cash takes backups and keeps them on this server. Sending a copy somewhere else is what Pro adds: Pro registers the destinations, and without Pro there are none, so a backup stays where it was made.<\/p>\n\n<p>This package does contain the Dropbox client class, because Pro builds on it rather than carrying its own copy. It is never reached without Pro: every path to it runs through a destination, and no destination exists until Pro registers one.<\/p>\n\n<p>With Pro installed and a destination configured, the backup archive is uploaded to the destination you chose, each time a backup runs. The archive contains all Lead to Cash data, so choose a destination you would trust with the database itself.<\/p>\n\n<p>Dropbox: https:\/\/www.dropbox.com\/ - Terms: https:\/\/www.dropbox.com\/terms - Privacy: https:\/\/www.dropbox.com\/privacy<\/p>\n\n<p>Google Drive: https:\/\/www.google.com\/drive\/ - Terms: https:\/\/policies.google.com\/terms - Privacy: https:\/\/policies.google.com\/privacy<\/p>\n\n<p>OneDrive and SharePoint: https:\/\/www.microsoft.com\/microsoft-365\/onedrive - Terms: https:\/\/www.microsoft.com\/servicesagreement - Privacy: https:\/\/www.microsoft.com\/en-us\/privacy\/privacystatement<\/p>\n\n<p>SFTP and webhook destinations go to an address you enter yourself; no third party is involved beyond the one you choose.<\/p>\n\n<h3>Source code<\/h3>\n\n<p>Lead to Cash has no build step. The JavaScript and CSS shipped in frontend\/ and admin\/ are the source: written by hand, not generated, bundled or minified, and they are the same files the browser loads. There is nothing to un-minify, and there are no build tools to document.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>Lead to Cash stores contact details, enquiry details, notes, document data and activity history in the local WordPress database. Sensitive fields are encrypted locally.<\/p>\n\n<p>The plugin integrates with WordPress personal-data export and erasure tools. Site administrators remain responsible for defining suitable retention periods. Financial records may need to be retained under applicable bookkeeping rules.<\/p>\n\n<p>Lead to Cash does not contact NimblePlugins. Backups sent to a destination contain all Lead to Cash data; choose a destination you would trust with the database itself.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install the ZIP through Plugins &gt; Add New &gt; Upload Plugin, or upload the <code>nimble-lead-to-cash<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate Lead to Cash by NimblePlugins.<\/li>\n<li>Open Lead to Cash in the WordPress admin menu.<\/li>\n<li>Configure language and company settings.<\/li>\n<li>Open the private Lead to Cash app from the admin menu.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20pro%20required%3F\"><h3>Is Pro required?<\/h3><\/dt>\n<dd><p>No. The workflow for enquiries, customers, quotes, jobs, invoices, reports and exports is complete on its own.<\/p><\/dd>\n<dt id=\"where%20is%20customer%20data%20stored%3F\"><h3>Where is customer data stored?<\/h3><\/dt>\n<dd><p>In dedicated tables in the site's WordPress database. Sensitive contact and activity fields are encrypted with a local installation key.<\/p><\/dd>\n<dt id=\"does%20the%20free%20plugin%20send%20telemetry%3F\"><h3>Does the Free plugin send telemetry?<\/h3><\/dt>\n<dd><p>No. Lead to Cash sends no analytics or telemetry.<\/p><\/dd>\n<dt id=\"where%20is%20the%20encryption%20key%20stored%3F\"><h3>Where is the encryption key stored?<\/h3><\/dt>\n<dd><p>Sensitive fields are encrypted locally with a key that is never sent anywhere. The key is read from the constant NIMBLE_LTC_ENCRYPTION_KEY_B64 in wp-config.php if you define one, and otherwise from an option in the database.<\/p>\n\n<p>Defining it in wp-config.php is recommended. It keeps the key out of the database, so a database copy on its own \u2014 a support export, a shared dump, or a vulnerability in another plugin \u2014 cannot decrypt your customer data. Lead to Cash &gt; Overview shows the exact line to add and can remove the database copy once it is in place.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20contact%20an%20external%20service%3F\"><h3>Does the plugin contact an external service?<\/h3><\/dt>\n<dd><p>Only when you use a feature that needs one: the VAT-number lookup, or a logo or QR image you point at by web address. Nothing is sent to NimblePlugins, and nothing is sent at all until a user asks for it. Backups stay on this server. See External services for the details.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20deactivate%20the%20plugin%3F\"><h3>What happens if I deactivate the plugin?<\/h3><\/dt>\n<dd><p>Data is preserved. Deactivation does not remove customer or pipeline data.<\/p><\/dd>\n<dt id=\"can%20i%20delete%20all%20plugin%20data%20on%20uninstall%3F\"><h3>Can I delete all plugin data on uninstall?<\/h3><\/dt>\n<dd><p>Yes. This is opt-in under Lead to Cash settings. If enabled before uninstalling Free, plugin-owned database tables, settings, private storage, local backups and the encryption key are removed. Leave the option disabled to preserve records.<\/p><\/dd>\n<dt id=\"can%20i%20export%20or%20erase%20personal%20data%3F\"><h3>Can I export or erase personal data?<\/h3><\/dt>\n<dd><p>Yes. The plugin integrates with WordPress Tools &gt; Export Personal Data and Erase Personal Data.<\/p><\/dd>\n<dt id=\"what%20changes%20when%20danish%20is%20selected%3F\"><h3>What changes when Danish is selected?<\/h3><\/dt>\n<dd><p>New documents use Danish defaults such as DKK, 25% VAT, CVR labels and Danish document prefixes. Existing saved documents keep their historical values.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.37.25<\/h4>\n\n<ul>\n<li>Gennemf\u00f8rt \u00e9n regel i rapporten: det realiserede vinder altid. Er der\nf\u00f8rst en faktura p\u00e5 en opgave eller en henvendelse, ER fakturaen v\u00e6rdien,\nog budgettet eller det aftalte bel\u00f8b t\u00e6ller ikke med nogen steder - hverken\nsom rest eller som et h\u00f8jere tal.<\/li>\n<li>Restbel\u00f8bet p\u00e5 delvist fakturerede opgaver er fjernet helt.<\/li>\n<li>\"Gns. hvor v\u00e6rdien er kendt\" tog f\u00f8r det st\u00f8rste af det fakturerede og det\naftalte. Et budget, ingen nogensinde fakturerede, kunne dermed sl\u00e5 den\nfaktura, der afsluttede sagen. Nu er det fakturaen, n\u00e5r der er en.<\/li>\n<li>\"Aftalt, endnu ikke faktureret\" d\u00e6kker nu kun sager helt uden faktura.<\/li>\n<\/ul>\n\n<h4>1.37.24<\/h4>\n\n<ul>\n<li>Noterne under Samlet opgavev\u00e6rdi er fjernet. Opdelingen st\u00e5r allerede p\u00e5\nsiden, og tre linjer under et tal g\u00f8r kortet sv\u00e6rere at l\u00e6se, ikke lettere.<\/li>\n<\/ul>\n\n<h4>1.37.23<\/h4>\n\n<ul>\n<li>Henvendelsesraten talte forud. Med en periode, der l\u00f8b til 31. december,\nblev november og december regnet med som stille m\u00e5neder, og raten blev\ndelt med tid, der ikke var g\u00e5et: 48 henvendelser blev til 9,1 om m\u00e5neden\ni stedet for 18,7. Den regner nu frem til i dag, som ugelisten altid har\ngjort.<\/li>\n<\/ul>\n\n<h4>1.37.22<\/h4>\n\n<ul>\n<li>Rapporter m\u00e5lte v\u00e6rdi p\u00e5 henvendelser. En henvendelse er ikke en v\u00e6rdi, og\nen kunde er det heller ikke - v\u00e6rdien opst\u00e5r f\u00f8rst, n\u00e5r nogen skriver ned,\nhvad en opgave koster. Kortet hedder nu \"Samlet opgavev\u00e6rdi\" og er det\nfakturerede plus budgettet p\u00e5 de opgaver, der endnu ikke er faktureret.<\/li>\n<li>Er en opgave budgetteret h\u00f8jere, end den er faktureret, st\u00e5r forskellen\nfrem som aftalt, ikke endnu faktureret arbejde. F\u00f8r forsvandt den helt.<\/li>\n<li>Rapportperioden starter som hele indev\u00e6rende \u00e5r, 1. januar til 31. december,\ni stedet for et vindue, der gled en dag frem hver morgen.<\/li>\n<\/ul>\n\n<h4>1.37.21<\/h4>\n\n<ul>\n<li>Statusfilteret \"Alle\" p\u00e5 opgavelisten skjulte de afsluttede. Det modsagde sit\neget navn, og en afsluttet opgave kunne kun ses i den separate\nAfsluttede-visning. \"Alle\" betyder nu alle.<\/li>\n<li>\"Planlagt\" er valgt som standard, for det er den liste, man handler p\u00e5.<\/li>\n<\/ul>\n\n<h4>1.37.20<\/h4>\n\n<ul>\n<li>Opgaver kunne blive til tvillinger. Gemmestien afgjorde opret-eller-opdat\u00e9r\nud fra et data-attribut p\u00e5 formularen, som blev nulstillet, hver gang\ndialogen blev lukket. En formular, der havde mistet sit id, oprettede derfor\nen ny opgave i stedet for at gemme den, der stod p\u00e5 sk\u00e6rmen. Identiteten\nl\u00e6ses nu af selve posten; attributtet er kun et krydstjek.<\/li>\n<li>Opretter du en opgave p\u00e5 en kunde, der allerede har en \u00e5ben, viser appen de\neksisterende og sp\u00f8rger, f\u00f8r den opretter. Serveren afviser en ubekr\u00e6ftet\ndublet og sender de \u00e5bne opgaver med tilbage, s\u00e5 sp\u00f8rgsm\u00e5let kan n\u00e6vne dem.\nDet er et sp\u00f8rgsm\u00e5l, ikke et forbud \u2014 to \u00e5bne opgaver p\u00e5 samme kunde er ofte\nrigtigt.<\/li>\n<li>N\u00f8gletallet p\u00e5 opgavelisten var \u00e9t tal, der lagde fakturerede bel\u00f8b sammen\nmed h\u00e5ndtastede budgetter, og som talte alle opgaver med \u2014 ogs\u00e5 de\nafsluttede, tabellen ikke viser. Samme arbejde kunne derfor t\u00e6lle to gange:\n\u00e9n gang som oms\u00e6tning p\u00e5 den afsluttede opgave, \u00e9n gang som forventning p\u00e5\ntvillingen. Det er nu to tal \u2014 Faktureret og Forventet \u2014 og begge f\u00f8lger det,\nder st\u00e5r i listen, s\u00e5 filter og s\u00f8gning virker p\u00e5 dem.<\/li>\n<li>\u00d8konomikolonnen blandede momsgrundlag: fakturerede opgaver viste bel\u00f8b\ninklusive moms, resten viste budget uden. Alt vises nu ekskl. moms, og det\nst\u00e5r i kolonneoverskriften.<\/li>\n<\/ul>\n\n<h4>1.37.19<\/h4>\n\n<ul>\n<li>Appens adresse kan nu v\u00e6lges. Har sitet allerede en side p\u00e5 \/lead-to-cash\/ \u2014\nen produktside, en landingsside \u2014 n\u00e6gtede pluginnet at blive aktiveret, og\neneste udvej var at omd\u00f8be den eksisterende side. Det er ikke rimeligt at\nforlange af et site, der havde adressen f\u00f8rst. S\u00e6t\n  define( 'NIMBLE_LTC_APP_SLUG', 'din-slug' ); i wp-config.php f\u00f8r\naktivering, s\u00e5 bruger appen den i stedet. Pro henter PWA'ens id, start_url,\nscope og Service-Worker-Allowed fra samme konstant, s\u00e5 det f\u00f8lger med.<\/li>\n<li>Fejlbeskeden ved adressekonflikt sagde ikke, hvad man skulle g\u00f8re, og skrev\naltid \"\/lead-to-cash\/\" selv hvis appen l\u00e5 et andet sted. Den viser nu den\nrigtige adresse og n\u00e6vner konstanten.<\/li>\n<li>Bem\u00e6rk: \u00e6ndrer man adressen p\u00e5 en eksisterende installation, skal\npermalinks gemmes igen, og PWA'en skifter scope, s\u00e5 genveje m\u00e5 tilf\u00f8jes\nforfra.<\/li>\n<\/ul>\n\n<h4>1.37.18<\/h4>\n\n<ul>\n<li>Kundekortets overskrift stacker nu ordentligt p\u00e5 telefon. Henvisningen \"Ogs\u00e5\nkunde som \u2026\" klemte sig ind ved siden af navnet, wrappede over tre linjer og\nmaste lukkekrydset. Navn og kryds beholder den f\u00f8rste r\u00e6kke, og henvisningen\nf\u00e5r en r\u00e6kke for sig selv nedenunder. Et langt kundenavn kan ikke l\u00e6ngere\nvokse chippen \u2014 den afkortes med ellipse.<\/li>\n<\/ul>\n\n<h4>1.37.17<\/h4>\n\n<ul>\n<li>Henvisningen \"Ogs\u00e5 kunde som \u2026\" flugter nu med kundens navn i kortets\noverskrift, og den er endelig guld. Farverne gik f\u00f8r gennem en k\u00e6de af\nCSS-variabler inde i color-mix(); brister et led i den k\u00e6de, bliver\nvariablen ugyldig, teksten arver hvid og baggrunden falder tilbage til den\nalmindelige knapstil \u2014 pr\u00e6cis den bl\u00e5, den ikke m\u00e5tte v\u00e6re. Farverne st\u00e5r nu\ndirekte, med en m\u00f8rk guld til lyst tema og en lys til m\u00f8rkt.<\/li>\n<\/ul>\n\n<h4>1.37.16<\/h4>\n\n<ul>\n<li>Henvisningen \"Ogs\u00e5 kunde som \u2026\" er flyttet helt op i kortets egen overskrift,\nved siden af kundens navn, og er nu guld. Guld bruges ikke andre steder i\nproduktet, s\u00e5 den kan hverken forveksles med de bl\u00e5 handlingsknapper eller\nmed noget andet. P\u00e5 smalle sk\u00e6rme falder den ned p\u00e5 sin egen linje.<\/li>\n<\/ul>\n\n<h4>1.37.15<\/h4>\n\n<ul>\n<li>Henvisningen \"Ogs\u00e5 kunde som \u2026\" er flyttet op i toppen af kundekortet, lige\nunder \"Kontakt oprettet \u2026\", og har f\u00e5et sin egen farve. Den lignede f\u00f8r en\nprim\u00e6r handlingsknap ved siden af \"Opret tilbud\" \u2014 temaet giver en bar\n den prim\u00e6re knapstil, og .link-button fandtes ikke i Free. Den er nu\nen chip i accentfarven, s\u00e5 den ikke forveksles med kortets handlinger.<\/li>\n<\/ul>\n\n<h4>1.37.14<\/h4>\n\n<ul>\n<li>Retter en fejl i 1.37.13, der gjorde alle kundekort ubrugelige med \"Cannot\nset properties of null (setting 'hidden')\". Henvisningslinjen \"Ogs\u00e5 kunde\nsom \u2026\" blev sat ind i skabelonen med forkert elementtype, s\u00e5 et <code>&lt;\/div&gt;<\/code> kom\ntil at lukke et <code>&lt;section&gt;<\/code>. Resten af kortet endte dermed uden for DOM'en,\nog opslaget p\u00e5 det f\u00f8rste element derefter gav null.<\/li>\n<\/ul>\n\n<h4>1.37.13<\/h4>\n\n<ul>\n<li>Privat og erhverv holdes nu adskilt p\u00e5 kundekortet. De samme mennesker er\nofte kunde to gange med vilje \u2014 privat og gennem deres selskab \u2014 og det er to\nkunder med hver sine henvendelser og hvert sit regnskab. Henvendelser,\nhandlinger og aktivitetslog blev sl\u00e5et sammen p\u00e5 tv\u00e6rs af kontakter med samme\nmail eller telefonnummer, s\u00e5 det private kort viste selskabets henvendelser og\nomvendt. Det g\u00f8r de ikke l\u00e6ngere.<\/li>\n<li>I stedet st\u00e5r der \u00f8verst p\u00e5 kortet \"Ogs\u00e5 kunde som \u2026\" med et klik over til\nden anden. Det er den ene linje, hvor de to kender hinanden.<\/li>\n<li>1.37.12 slog fakturaerne sammen samme vej. Det er rullet tilbage: et kort\nviser sine egne fakturaer og sit eget udest\u00e5ende, s\u00e5 selskabets g\u00e6ld ikke\nlander p\u00e5 privatpersonen.<\/li>\n<\/ul>\n\n<h4>1.37.12<\/h4>\n\n<ul>\n<li>Kundekortet viser nu fakturaerne for alle kontakter, der h\u00f8rer til samme\nperson. En kunde kan ligge p\u00e5 mere end \u00e9n kontaktr\u00e6kke \u2014 en privat og det\nselskab, der faktureres igennem, koblet p\u00e5 samme mail eller telefon \u2014 og\nhenvendelserne og aktivitetsloggen har hele tiden vist dem alle. Kun\nfakturalisten gjorde det ikke, s\u00e5 kortet modsagde sig selv: loggen fortalte\nat en faktura var sendt, mens listen nedenunder sagde ingen fakturaer.<\/li>\n<li>V\u00e6rdikolonnen p\u00e5 henvendelserne viser det fakturerede bel\u00f8b, n\u00e5r der er\nfaktureret p\u00e5 opgaven, og ellers estimatet. Kladder t\u00e6ller ikke med \u2014 der er\nintet faktureret, f\u00f8r dokumentet er udstedt \u2014 og kreditnotaer tr\u00e6kkes fra, s\u00e5\nen krediteret opgave ikke st\u00e5r med penge, der er givet tilbage.<\/li>\n<\/ul>\n\n<h4>1.37.11<\/h4>\n\n<ul>\n<li>A credit note can be issued again. It has no due date - it is immediate, and the VAT rules ask a credit note for the same ten things they ask an invoice for, a due date among none of them - so the one the plugin creates correctly leaves that field empty. Finalising it then refused the note as its own work: \"The due date is invalid.\" Three more places would have refused it next, and the dialog's date field was marked required, so the browser stopped the save before any of it. All four now make the exception for a credit note, and only for a credit note: an invoice without a due date is still refused.<\/li>\n<li>The contact person can be set on an invoice. It is the \"Att.\" line the document prints, and until now it was whatever stood on the customer when the invoice was made, with no way to change it. The invoice keeps its own copy of the customer, so a different att. here changes this one document and leaves the customer record, and every other invoice, alone - which is what is wanted when the work was agreed with one person and the invoice goes to another. Shown for business customers, because a contact person is not stored on a private one.<\/li>\n<\/ul>\n\n<h4>1.37.10<\/h4>\n\n<ul>\n<li>Luft mellem vilk\u00e5rene og underskriften i tilbudsbrevet. Afstanden var mindre\nend mellem to linjer i afsnittet selv, s\u00e5 \"Med venlig hilsen\" lagde sig op ad\nden sidste betingelse og lignede en linje mere i vilk\u00e5rene.<\/li>\n<\/ul>\n\n<p>The full history from 1.0.0 onwards is in changelog.txt, which ships with\nthe plugin.<\/p>\n\n<h4>1.37.9<\/h4>\n\n<ul>\n<li>The payment QR code reaches the invoice the customer receives. A payment add-on fills the QR slot, and to build a code for one particular invoice it has to know which invoice it is - but the filter was called without it, leaving the add-on to work it out from the web address. That only matched the preview and download links, so the code appeared where the business looks and was missing from the PDF sent by email and from the archived copy. The invoice is now handed to the filter, and the same code appears wherever the invoice is rendered.<\/li>\n<\/ul>\n\n<h4>1.37.8<\/h4>\n\n<ul>\n<li>Signing in lasts. The session had a flat eight-hour life from the moment of signing in and was never extended - so a working day that began at eight ended with being signed out at four, mid-task, with a two-factor code to find. It now slides: an authenticated request pushes the expiry forward, throttled to the same five-minute write that already recorded activity, and a session in regular use stays valid. Fourteen days without use ends it, and a ceiling of ninety days from the sign-in applies however much it is used, so a session cannot live indefinitely.<\/li>\n<li>A device can be remembered, so the two-factor code is not demanded on every sign-in. The choice appears beside the code field, and only when Nimble Security is installed and the site has turned remembered devices on. The password is still required on a remembered device - only the code is skipped - and the device can be removed again from Nimble Security at any time.<\/li>\n<\/ul>\n\n<h4>1.37.7<\/h4>\n\n<ul>\n<li>The enquiry, customer and job screens are usable on a phone again. Their two columns never stacked: the activity sidebar held its 280px floor while the form column gave up everything, leaving it 114px wide on a 412px screen, with every field clipped to a few letters. The stacking rule existed, but a media query carries no specificity, so the general rule lost to the narrower one these dialogs brought with them. It is now stated at that scope. Measured at 412, 390 and 360px; the desktop layout is unchanged to the pixel.<\/li>\n<li>Settings, documents had the same fault one screen over - the side panel's second column came out ten pixels wide on a phone. Fixed in the same place.<\/li>\n<li>The frontend now reads its translations from WordPress. Its JavaScript asked for a text domain the plugin does not declare, and script translations were never registered, so every translation of the 486 frontend strings was decorative. The domain is aligned and the script registered, which means an approved translation on translate.wordpress.org now arrives without a release.<\/li>\n<li>137 strings that the bundled dictionary did not cover appeared in English inside a translated interface. They are filled in, and the build now refuses to package a frontend where that is true again.<\/li>\n<\/ul>\n\n<h4>1.37.6<\/h4>\n\n<ul>\n<li>A status you choose now survives an update. A one-off repair that aligned every enquiry with its newest action sat in the schema installer, which runs on every activation and every schema change - so each update quietly rolled back any status a person had set since, with nothing written to the timeline to say it had happened. It now runs once: an installation that already has a schema version is marked as done rather than repaired again, and only a fresh install, which has no enquiries to touch, reaches the query at all.<\/li>\n<li>The same repair left only Won and Lost alone, while the two live rules also protect Quote sent. A sent quote could therefore be rolled back to \"Meeting\" by an update. The three are now treated the same in all three places.<\/li>\n<li>An invoice notification arrives on the due date, not three days early. The query asked for everything due within three days; it now asks for what is due. Quotes keep their three days' notice - a quote expires by itself and there is something to do before it does, while an invoice needs nothing until it is actually due.<\/li>\n<\/ul>\n\n<h4>1.37.5<\/h4>\n\n<ul>\n<li>The readme now documents every external service the plugin can reach, with\nwhat is sent, when, and links to each service's terms and privacy policy.<\/li>\n<li>Corrected the readme and a code comment that said the code for off-site\nbackup destinations ships with the Pro add-on. The Dropbox client class\nships here; Pro builds on it. Without Pro it is never reached.<\/li>\n<li>The Danish translation files are no longer bundled. Translations now come\nfrom translate.wordpress.org, which keeps them current without a release.<\/li>\n<\/ul>\n\n<h4>1.37.4<\/h4>\n\n<ul>\n<li>The report CSV export was written in Danish throughout, even when the app was\nset to English, so an English user got a Danish file from an English screen.\nEvery row label is now translated; the Danish wording is unchanged.<\/li>\n<li>Two dashboard tiles counted invoices with the Danish word \"fakturaer\" in the\nEnglish interface. They now say \"invoice\" or \"invoices\".<\/li>\n<\/ul>\n\n<h4>1.37.3<\/h4>\n\n<ul>\n<li>Two labels were written in Danish directly in the template, so they stayed\nDanish whatever language the app was set to: the \"Create credit note\" button\non an invoice, and the default quote introduction field in settings. Both are\nEnglish now, with the Danish kept in the translation dictionary, so a Danish\nuser sees no change.<\/li>\n<\/ul>\n\n<h4>1.37.2<\/h4>\n\n<ul>\n<li>The Easy Setup screen drew its mark as the letter N in a coloured box rather\nthan using the plugin's own icon. It now shows the icon itself.<\/li>\n<\/ul>\n\n<h4>1.37.1<\/h4>\n\n<ul>\n<li>The app icon was the family's blue, which belongs to Nimble Security. Lead to\nCash is indigo. The icon in the browser tab, on the sign-in screen, in the\nsidebar and on the installed app now matches the plugin's own colour, and so\ndoes the mark on the Easy Setup screen, which had the old blue written into\nthe stylesheet rather than taking it from the icon.<\/li>\n<\/ul>\n\n<h4>1.37.0<\/h4>\n\n<ul>\n<li>The enquiry, customer and job screens are now laid out the same way. Activity\nsits in a column on the right in all three, so nothing moves when an enquiry\nbecomes a customer, and the save bar stays at the foot of the window however\nlong the record is.<\/li>\n<li>The same screens are considerably shorter. Fields are tighter, a postcode,\ncity and country share one line, and a billing address that matches the work\naddress is a single line instead of a repeated form. A customer record that\nneeded 2,944 pixels of scrolling now needs 1,645.<\/li>\n<li>Every section is a card with its own heading, so the seams between contact\ndetails, actions, documents, invoices and activity are visible at a glance.<\/li>\n<li>Documents on an enquiry were nested inside the actions panel and looked like\npart of it. It is its own section now.<\/li>\n<\/ul>\n\n<h4>1.36.3<\/h4>\n\n<ul>\n<li>Renamed TermsAttachment::prepare() to attachment(). Plugin Check treats every\ncall named prepare() as $wpdb-&gt;prepare() and reads its first parameter, which\na method without parameters does not have; the check crashed on the file\nrather than reporting anything about it. Behaviour is unchanged.<\/li>\n<\/ul>\n\n<h4>1.36.2<\/h4>\n\n<ul>\n<li>Five repository files were missing the note that explains their access-scope\nclauses, so the report still listed them. No code changed.<\/li>\n<\/ul>","raw_excerpt":"Manage enquiries, customers, quotes, jobs, invoices and reports in a self-hosted WordPress workflow.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/377893","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=377893"}],"author":[{"embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/nimbleplugin"}],"wp:attachment":[{"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=377893"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=377893"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=377893"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=377893"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=377893"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=377893"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}