{"id":311108,"date":"2026-06-16T17:48:50","date_gmt":"2026-06-16T17:48:50","guid":{"rendered":"https:\/\/en-ca.wordpress.org\/plugins\/otto-contracts\/"},"modified":"2026-06-16T17:48:24","modified_gmt":"2026-06-16T17:48:24","slug":"contract-pilot","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/contract-pilot\/","author":20630705,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"9.47.4","stable_tag":"9.47.4","tested":"7.0","requires":"6.3","requires_php":"7.4","requires_plugins":null,"header_name":"Contract Pilot","header_author":"jjpsos","header_description":"Manage contracts and related business records.","assets_banners_color":"e8edfc","last_updated":"2026-06-16 17:48:24","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/www.softestate.net\/contribution\/","header_plugin_uri":"https:\/\/www.softestate.net\/","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":25,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"9.47.4":{"tag":"9.47.4","author":"jjpsos","date":"2026-06-16 17:48:24"}},"upgrade_notice":{"9.47.4":"<p>Built-in CSV import and export have been removed from the core plugin and are available as a separate add-on. No database changes.<\/p>","9.47.3":"<p>Version 9.47.3 release.<\/p>","9.47.2":"<p>Passive admin views, contract\/bill layout and print fixes, expense view correction, and Plugin Check cleanups.<\/p>","9.47.1":"<p>Version 9.47.1 release.<\/p>","9.46.4":"<p>Replaces bundled Chart.js and Inputmask with lightweight custom admin modules. No database changes; charts and amount fields behave the same.<\/p>","9.40.0":"<p>Duplicate-prevention and numbering integrity release. Includes idempotent create protection, cache invalidation for next-number reads, and a guarded unique <code>(type, number)<\/code> migration.<\/p>","9.39.1":"<p>Maintenance and admin cleanup release.<\/p>","9.33.9":"<p>Contracts\/Bills attachment functionality removed and admin notices streamlined.<\/p>","9.33.8":"<p>Feature Access now uses direct safety-lock toggles (no secret code), plus admin UI cleanup and tab-order refinements.<\/p>","9.33.4":"<p>Currency and exchange-rate UI refinements; readme maintenance.<\/p>","9.33.3":"<p>Maintenance, documentation, and WordPress.org listing preparation.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3574856,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3574856,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3574856,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3574856,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["9.47.4"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[2526,2360,264060],"plugin_category":[39],"plugin_contributors":[267381],"plugin_business_model":[],"class_list":["post-311108","plugin","type-plugin","status-publish","hentry","plugin_tags-accounting","plugin_tags-business","plugin_tags-contracts","plugin_category-business","plugin_contributors-jjpsos","plugin_committers-jjpsos"],"banners":{"banner":"https:\/\/ps.w.org\/contract-pilot\/assets\/banner-772x250.png?rev=3574856","banner_2x":"https:\/\/ps.w.org\/contract-pilot\/assets\/banner-1544x500.png?rev=3574856","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/contract-pilot\/assets\/icon-128x128.png?rev=3574856","icon_2x":"https:\/\/ps.w.org\/contract-pilot\/assets\/icon-256x256.png?rev=3574856","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Contract Pilot helps you manage contracts and related business records in WordPress. Go to https:\/\/www.softestate.net\/contract-pilot\/ for a showcase of advanced features. Thank you for your aid, https:\/\/www.softestate.net\/contribution\/, to this open source project.<\/p>\n\n<p>See the Credits section for copyright holders, bundled libraries, and GPL attribution requirements.<\/p>\n\n<h3>Credits<\/h3>\n\n<p>This plugin includes work by James Sosontovich (support@softestate.net) (see the root LICENSE file and plugin source headers). Additional contributors appear in bundled third-party libraries under the vendor directory. All named authors and copyright lines are part of this plugin\u2019s GPL-licensed distribution and must be preserved in copies and derivatives, as required by the GNU General Public License.<\/p>\n\n<p>Bundled third-party code includes Composer class loader components in the vendor directory. Former ByteKit plugin\/model code is vendored inside this plugin under includes\/Foundation and includes\/Database (GPL-3.0+, Sultan Nasir Uddin \/ Byteever, adapted for Contract Pilot). See each package for its full license and copyright notices.<\/p>\n\n<p>Bundled JavaScript and CSS in assets\/ (human-readable source is included in this plugin; there is no separate minified or compiled build step for these files):<\/p>\n\n<p>First-party JavaScript (Contract Pilot \/ James Sosontovich, GPL-2.0+):<\/p>\n\n<ul>\n<li>assets\/scripts\/admin.js \u2014 Admin UI: forms, settings, charts, datepickers, SelectWoo integration.<\/li>\n<li>assets\/scripts\/form.js \u2014 Form helper: event binding, values, blocking overlay.<\/li>\n<li>assets\/scripts\/modal.js \u2014 Modal dialogs (uses WordPress core wp-backbone; Backbone is not bundled).<\/li>\n<li>assets\/scripts\/line-chart.js \u2014 Dashboard and overview line charts (Canvas 2D; no external charting library).<\/li>\n<li>assets\/scripts\/amount-mask.js \u2014 Blur-only currency formatting for admin amount fields.<\/li>\n<li>assets\/packages\/money.js \u2014 Admin money helpers (format\/unformat for USD\/CAD).<\/li>\n<\/ul>\n\n<p>Third-party JavaScript (full readable source bundled in this plugin):<\/p>\n\n<ul>\n<li>SelectWoo 1.0.11 \u2014 assets\/scripts\/select2.js \u2014 https:\/\/github.com\/woocommerce\/selectWoo (MIT). Includes readable Almond 0.3.3 (MIT, https:\/\/github.com\/requirejs\/almond) and jQuery Mousewheel 3.1.13 (MIT, https:\/\/github.com\/jquery\/jquery-mousewheel) as part of the same file.<\/li>\n<li>printThis \u2014 assets\/scripts\/printthis.js \u2014 https:\/\/github.com\/jasonday\/printThis (MIT).<\/li>\n<\/ul>\n\n<p>First-party CSS (Contract Pilot \/ James Sosontovich, GPL-2.0+):<\/p>\n\n<ul>\n<li>assets\/styles\/admin.css \u2014 Admin styles (LTR); source of truth for admin styling, including datepicker layout rules.<\/li>\n<li>assets\/styles\/admin-rtl.css \u2014 Admin styles (RTL); generated from admin.css with rtlcss 4.3.0 (readable output, not minified). Regenerate: NPM_CONFIG_CACHE=\/tmp\/cp-npm-cache npx rtlcss@4.3.0 assets\/styles\/admin.css assets\/styles\/admin-rtl.css<\/li>\n<li>assets\/styles\/frontend.css \u2014 Public invoice and payment page styles.<\/li>\n<\/ul>\n\n<p>First-party SVG assets (Contract Pilot \/ James Sosontovich, GPL-2.0+):<\/p>\n\n<ul>\n<li>assets\/icon-128x128.svg, assets\/icon-256x256.svg \u2014 Plugin icons.<\/li>\n<li>assets\/banner-772x250.svg, assets\/banner-1544x500.svg \u2014 Plugin banners.<\/li>\n<\/ul>\n\n<p>WordPress.org plugin directory assets (not runtime code; *.asset.php files list script\/style dependencies and versions for WordPress enqueue):<\/p>\n\n<ul>\n<li>assets\/scripts\/<em>.asset.php, assets\/packages\/money.asset.php, assets\/styles\/<\/em>.asset.php<\/li>\n<\/ul>\n\n<p>WordPress core assets used but not bundled (loaded via wp_enqueue_script \/ wp_enqueue_style):<\/p>\n\n<ul>\n<li>jquery-ui-datepicker (script) \u2014 Date fields in admin.<\/li>\n<li>wp-jquery-ui-dialog (stylesheet) \u2014 Base jQuery UI widget styles for admin; Contract Pilot admin.css adds datepicker layout on top.<\/li>\n<li>wp-backbone (script) \u2014 Used by assets\/scripts\/modal.js only; Backbone and Underscore are not bundled in this plugin.<\/li>\n<\/ul>\n\n<h3>Features<\/h3>\n\n<ul>\n<li>Admin Dashboard with sales, expenses, and profits reporting overview charts.<\/li>\n<li>Contracts (sales side): contracts\/invoices, payments, and customers.<\/li>\n<li>Services (items catalog) for billable work used on documents.<\/li>\n<li>Purchases: expenses and aid.<\/li>\n<li>Banking safety area (toggle on\/off Feature Access).<\/li>\n<li>Reports for sales, expenses, profits (including filters and breakdowns).<\/li>\n<li>Settings for general options, currencies, taxes, categories.<\/li>\n<li>CSV import and export are available as a separate add-on (see https:\/\/www.softestate.net\/contract-pilot\/).<\/li>\n<li>Admin AJAX for in-app actions (contract payments, bill expenses, service line items); no public REST API.<\/li>\n<li>WooCommerce compatibility layer (where applicable).<\/li>\n<li>Background processing via Action Scheduler (bundled) for scheduled tasks.<\/li>\n<li>Note: use only USD or CAD as default banking account currency.<\/li>\n<li>Showcase options (see plugin site): multi-currency bank accounts, shared links, clone contracts, email via SMTP, open PDF and Mail app, recurring (otto) contracts, payment-count (otto) clone.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/contract-pilot\/<\/code> (or install the ZIP via <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>). The folder name should match the slug you use on your site; <code>contract-pilot<\/code> matches this plugin\u2019s text domain.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen.<\/li>\n<li>Use the <strong>Contract Pilot<\/strong> menu in the admin area to configure and manage data.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20this%20a%20fully%20functioning%20business%20app%3F\"><h3>Is this a fully functioning business app?<\/h3><\/dt>\n<dd><p>Yes, all basic features are enabled. Additional custom Add-ons are available.<\/p><\/dd>\n<dt id=\"how%20secure%20are%20payments%20in%20contract%20pilot%3F\"><h3>How secure are payments in Contract Pilot?<\/h3><\/dt>\n<dd><p>Contract Pilot follows WordPress security best practices for data handling and access control. Payment security and PCI scope depend on the gateway, processor, and deployment you choose, so review your provider's current compliance and security documentation.<\/p><\/dd>\n<dt id=\"what%20about%20privacy%20and%20where%20is%20my%20data%20stored%3F\"><h3>What about privacy and where is my data stored?<\/h3><\/dt>\n<dd><p>Business and accounting information you enter (contacts, documents, transactions, settings, and related metadata) is stored in your WordPress site's database and files under your control. By default, Contract Pilot does not send that content to the plugin author's servers or third parties for processing. If you use optional integrations, hosting backups, or external services outside this plugin, those services follow their own privacy and retention policies.<\/p><\/dd>\n<dt id=\"what%20would%20help%20support%20this%20open%20source%20project%3F\"><h3>What would help support this open source project?<\/h3><\/dt>\n<dd><p>Contributions are welcome.<\/p><\/dd>\n<dt id=\"where%20do%20i%20get%20support%3F\"><h3>Where do I get support?<\/h3><\/dt>\n<dd><p>Use the plugin support forum on WordPress.org once the plugin is listed, or the contact details provided by the plugin author.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>9.47.4<\/h4>\n\n<ul>\n<li>Removed built-in CSV import and export from the core plugin (available as a separate add-on; see https:\/\/www.softestate.net\/contract-pilot\/).<\/li>\n<li>Removed Tools admin screen, related capabilities, and filesystem helpers used only for import\/export.<\/li>\n<\/ul>\n\n<h4>9.47.3<\/h4>\n\n<ul>\n<li>Version bump release.<\/li>\n<\/ul>\n\n<h4>9.47.2<\/h4>\n\n<ul>\n<li>Admin views: passive edit\/view\/list templates (Tier 2); handlers load data, views render only.<\/li>\n<li>Contracts\/Bills: layout fixes for edit\/view items table; service descriptions on print; discount UI hidden on read-only views.<\/li>\n<li>Expenses: view screen now uses the correct read-only template.<\/li>\n<li>Plugin Check: naming-convention fixes for hooks and template loop variables.<\/li>\n<\/ul>\n\n<h4>9.47.1<\/h4>\n\n<ul>\n<li>Version bump release.<\/li>\n<\/ul>\n\n<h4>9.46.4<\/h4>\n\n<ul>\n<li>Charts: replace bundled Chart.js with a custom, human-readable line-chart module (Canvas 2D) for dashboard, account, and customer overview charts.<\/li>\n<li>Amount fields: replace bundled Inputmask with a custom blur-only amount-mask module for admin currency inputs.<\/li>\n<li>Datepicker styling: remove minified jquery-ui.css; use WordPress core wp-jquery-ui-dialog plus readable datepicker rules in admin.css.<\/li>\n<li>Packaging: remove chartjs.js, inputmask.js, timepicker.js, and jquery-ui.css; document all bundled JavaScript, CSS, and SVG assets in readme Credits.<\/li>\n<\/ul>\n\n<h4>9.40.0<\/h4>\n\n<ul>\n<li>Duplicate-prevention hardening: create-request idempotency added to contract\/bill\/payment\/expense admin create flows.<\/li>\n<li>Numbering reliability: max-number cache invalidation wired to document\/transaction save and delete lifecycles.<\/li>\n<li>Schema safety: guarded <code>(type, number)<\/code> unique index migration added for <code>pilot_documents<\/code> (migration halts with report when duplicates exist).<\/li>\n<li>Document number collision handling: bounded retries for auto-generated numbers and clear validation message for explicit duplicate numbers.<\/li>\n<\/ul>\n\n<h4>9.39.1<\/h4>\n\n<ul>\n<li>Admin: removed promotional and review-related UI (plugin list review link, admin footer review text, legacy dismissible notice pipeline, database-update admin banner, unused notice view and stub classes).<\/li>\n<li>Packaging: readme Changelog and Upgrade Notice aligned with Stable tag; duplicate Installer and Bills PHP files removed so Composer classmaps stay unambiguous.<\/li>\n<li>General maintenance and compatibility updates on the 9.34.x\u20139.39.x line (intermediate tags are not listed individually in this readme).<\/li>\n<\/ul>\n\n<h4>9.33.9<\/h4>\n\n<ul>\n<li>Contracts\/Bills: removed attachment functionality from Contracts and Bills edit\/view flows.<\/li>\n<li>Admin notices: disabled promotional\/review notices to keep admin UI clean and stable.<\/li>\n<\/ul>\n\n<h4>9.33.8<\/h4>\n\n<ul>\n<li>Settings: removed secret-code dependency from Feature Access; added direct enable\/lock controls for current user.<\/li>\n<li>Settings UI: hid Access Control and Banking\/Tools diagnostics from General view; updated tab ordering.<\/li>\n<\/ul>\n\n<h4>9.33.4<\/h4>\n\n<ul>\n<li>Admin: streamline currency and exchange-rate fields where the site uses a single base currency (banking accounts, customers, contracts, payments, expenses, transfers).<\/li>\n<li>Readme: keep Stable tag and changelog in sync.<\/li>\n<\/ul>\n\n<h4>9.33.3<\/h4>\n\n<ul>\n<li>WordPress.org readme: description, installation, FAQ, features, credits, Donate link, and contribution URLs.<\/li>\n<li>Copyright: James Sosontovich; plugin header and LICENSE updated.<\/li>\n<li>Initial public listing preparation: documentation, text domain, and compatibility updates; LICENSE and uninstall.php for packaging.<\/li>\n<\/ul>","raw_excerpt":"Contract Pilot helps you manage contracts and related business records in WordPress. Visit the plugin site for features and contribute to the project.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/311108","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=311108"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/jjpsos"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=311108"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=311108"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=311108"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=311108"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=311108"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=311108"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}