{"id":337393,"date":"2026-07-12T17:30:43","date_gmt":"2026-07-12T17:30:43","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/easy-order-processing-for-woocommerce\/"},"modified":"2026-07-13T06:10:29","modified_gmt":"2026-07-13T06:10:29","slug":"ordercrm-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/ordercrm-for-woocommerce\/","author":12501445,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"3.3.4","stable_tag":"3.3.4","tested":"7.0.1","requires":"5.6","requires_php":"8.0","requires_plugins":null,"header_name":"OrderCRM for WooCommerce","header_author":"Dima Dumchikov","header_description":"Frontend order management dashboard for WooCommerce \u2014 filter orders, search clients, view sales charts without admin access.","assets_banners_color":"","last_updated":"2026-07-13 06:10:29","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/facebook.com\/dima.dumchikov","rating":0,"author_block_rating":0,"active_installs":0,"downloads":24,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"3.3.4":{"tag":"3.3.4","author":"Timon-Dimon","date":"2026-07-13 06:10:29"}},"upgrade_notice":{"3.3.4":"<p>WordPress.org slug is now <code>ordercrm-for-woocommerce<\/code> \u2014 rename the plugin folder after update. CRM login events appear in Logs again. Plugin Check readme compliance.<\/p>","3.3.3":"<p>Optional brand sales reports in CRM and PDF export (OrderCRM \u2192 Reports). Existing reports unchanged when no brands are selected.<\/p>","3.2.9":"<p>Admin settings: logo upload moved to the <strong>General<\/strong> tab (the <strong>Logo<\/strong> tab is removed). Bookmarks to <code>?tab=logo<\/code> still open General settings. No CRM frontend changes.<\/p>","3.2.8":"<p>Compatibility and quality release: tested with WordPress 7.0; Plugin Check compliance for WordPress.org directory. No CRM UI or workflow changes.<\/p>","3.2.7":"<p>Internal refactor of the create-order page (view-model in Order Service). No CRM UI or workflow changes. Staging verified: add-order, order card, products, reports.<\/p>","3.2.3":"<p>CRM UX: logs user filter shows last name first (A\u2013Z); products page adds a Brand filter when WooCommerce Brands (<code>product_brand<\/code>) is enabled. PDF export shows a progress animation. Activity log cache clears in the background \u2014 no action required.<\/p>","3.2.2":"<p>Performance and stability: order mutations no longer block on full report cache SQL; reports refresh in the background within about a minute. Includes small fixes for WooCommerce email templates, WP 6.7 admin i18n, and theme asset loading. No CRM UI changes.<\/p>","3.2.1":"<p>Transactional email fix: CRM order actions now send WooCommerce emails reliably (create order, notes, status, AST tracking). Default is synchronous delivery \u2014 no theme code changes needed. Compatible with PDF Invoices attachment on new-order emails when that plugin is configured.<\/p>","3.2.0":"<p>Maintenance release: login\/logout activity log cleanup now uses WooCommerce Action Scheduler (more reliable than WP-Cron). No CRM UI changes. After update, optional check: WooCommerce \u2192 Status \u2192 Scheduled Actions \u2014 recurring job <code>sales_crm_delete_old_login_logout_logs<\/code> in group <code>sales-crm<\/code>.<\/p>","3.1.9":"<p>Maintenance release: centralized orders table display logic (no UI change). Recommended after update: quick smoke on Dashboard, All Orders, Reports, and Customer card.<\/p>","3.1.8":"<p>Hotfix: CRM logout no longer opens the WordPress wp-login.php confirmation screen.<\/p>","3.1.7":"<p>Critical hotfix: restores CRM login for administrators and CRM users blocked by false &quot;no access&quot; after 3.1.5\u20133.1.6. Update immediately.<\/p>","3.1.6":"<p>Hotfix: fixes false CRM login error on production HTTPS (WordPress <code>error<\/code> query var collision). Purge cache for <code>\/crm-login\/<\/code> after update.<\/p>","3.1.5":"<p>Hotfix: CRM login page no longer shows a false error on first visit. Clear page cache for <code>\/crm-login\/<\/code> after update if your host caches HTML.<\/p>","3.1.4":"<p>Reports cache (T-09) and deferred emails on all order mutations (T-10): faster CRM reports and order card updates. No UX changes \u2014 run your usual CRM smoke (reports, order status, PDF) after update.<\/p>","3.1.3":"<p>List and activity-log performance (T-08, T-12): faster CRM lists and logs screen on large stores. No UX changes \u2014 run your usual CRM smoke and REST\/phase runners after update.<\/p>","3.1.2":"<p>RBAC alignment (wave 6.1): unified CRM capability checks across UI, REST, and role settings. Re-save CRM roles in admin if custom permissions look stale; run your usual CRM smoke and REST runner after update.<\/p>","3.1.1":"<p>Modular architecture (wave 5), products list service, and <code>GET \/products<\/code> REST. Stock filter shows all WooCommerce stock statuses. Run CRM smoke on <code>\/crm-dashboard\/products\/<\/code> and your usual REST runner after update.<\/p>","3.1.0":"<p>Wave 3 complete: customer and activity-log repositories, thinner templates, activity-log filter fixes, phone mask on create-order, variation price hotfix. Run your usual CRM smoke test after update; Plugin Check recommended before org release.<\/p>","3.0.3":"<p>Wave 2 architecture complete: unified CRM order creation, order sub-services, and order-card POST via service layer. Run your usual CRM + HPOS smoke tests after update.<\/p>","3.0.2":"<p>Order data access refactored (repository + order service); optional Strangler flag for creating orders from CRM. Security phases B\u2013D and tax alignment included\u2014run your usual CRM + HPOS smoke tests. Re-compile Russian <code>.mo<\/code> if you maintain custom translations.<\/p>","3.0.1":"<p>Service-layer cleanup, PDF export reliability, mobile blocked page styling, and translation fix for discount log strings. Re-compile <code>languages\/sales-crm-ru_RU.mo<\/code> if you ship custom PO files. Remove <code>SALES_CRM_DISABLE_PDF_RATE_LIMIT<\/code> from wp-config if you added it for testing.<\/p>","3.0.0":"<p><strong>PHP 8.0+ required.<\/strong> Upgrade PHP on the server before updating from 2.1.x. Feature flag <code>WOO_SALES_CRM_V3_ENABLED<\/code> (optional in wp-config) controls the Strangler \/ refactored branch for 3.0; default is off.<\/p>","2.1.2":"<p>Report PDF export (mPDF), PHP GD + mbstring required at activation, bundled vendor for PDF. Re-compile Russian .mo if you ship custom translations.<\/p>","2.1.1":"<p>Enhanced CRM Reports: flexible periods, charts, TOP-5 products by demand, and clearer order list for the selected range. Update translations (.mo) if you use Russian.<\/p>","1.2.8.4":"<p>Major localization update! Complete Russian translation with 376+ translated strings and important functionality fixes. Automatic translation loading - no configuration needed.<\/p>","1.2.7.4":"<p>This update includes a new automatic update system that will safely migrate your existing order statuses. No manual intervention required.<\/p>"},"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3605450,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["3.3.4"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Dashboard overview with current orders","2":"Customer profile management","3":"Order status group configuration","4":"Activity log and reporting","5":"Sales reports with period filters and product demand summary"}},"plugin_section":[],"plugin_tags":[17666,21473,158896,138902,286],"plugin_category":[45],"plugin_contributors":[271267],"plugin_business_model":[],"class_list":["post-337393","plugin","type-plugin","status-publish","hentry","plugin_tags-customer-management","plugin_tags-order-management","plugin_tags-sales-dashboard","plugin_tags-sales-reports","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-timon-dimon","plugin_committers-timon-dimon"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/ordercrm-for-woocommerce\/assets\/icon-256x256.png?rev=3605450","icon_2x":"https:\/\/ps.w.org\/ordercrm-for-woocommerce\/assets\/icon-256x256.png?rev=3605450","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>OrderCRM for WooCommerce transforms your store's order management into a powerful, standalone frontend dashboard. Sales managers can filter orders by status, date, or customer, perform quick searches, and view detailed sales reports with interactive charts \u2014 all without accessing the WordPress admin area. Perfect for medium-sized businesses handling up to 1,000 orders per month.<\/p>\n\n<h3>Why OrderCRM?<\/h3>\n\n<ul>\n<li>\ud83d\ude80 <strong>Frontend Dashboard<\/strong> \u2014 No admin access required. Your sales team works from a secure, custom interface.<\/li>\n<li>\ud83d\udd0d <strong>Advanced Filters<\/strong> \u2014 Filter orders by status, date range, customer name, or order ID in seconds.<\/li>\n<li>\u26a1 <strong>Quick Search<\/strong> \u2014 Find orders and clients instantly with our fast search engine.<\/li>\n<li>\ud83d\udcca <strong>Sales Reports<\/strong> \u2014 Visualize revenue trends with beautiful charts and period-based reports.<\/li>\n<li>\ud83d\udd12 <strong>Secure by Design<\/strong> \u2014 Sales managers get only the tools they need \u2014 no accidental site breakage.<\/li>\n<\/ul>\n\n<h4>Recommended Plugins<\/h4>\n\n<p>For full functionality, we recommend installing these additional plugins:\n* <strong>Advanced Shipment Tracking (Free)<\/strong> - For tracking number management\n* <strong>WooCommerce PDF Invoices &amp; Packing Slips<\/strong> - For invoice generation<\/p>\n\n<h3>Support<\/h3>\n\n<p>For support and feature requests, please use the <a href=\"https:\/\/wordpress.org\/support\/plugin\/ordercrm-for-woocommerce\/\">WordPress.org support forum<\/a> for this plugin.<\/p>\n\n<h3>Credits<\/h3>\n\n<p>Developed by <a href=\"http:\/\/facebook.com\/dima.dumchikov\">Dima Dumchikov<\/a><\/p>\n\n<h3>License<\/h3>\n\n<p>This plugin is licensed under the GPL v2 or later.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to the <code>\/wp-content\/plugins\/ordercrm-for-woocommerce<\/code> directory, or install through WordPress admin panel (the package includes Composer dependencies under <code>vendor\/<\/code> for PDF export \u2014 no server-side <code>composer install<\/code> is required for typical ZIP installs)<\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress (PHP <strong>GD<\/strong> and <strong>mbstring<\/strong> extensions are required \u2014 activation will stop with a clear message if they are missing)<\/li>\n<li>Configure the plugin settings under <strong>OrderCRM<\/strong> in your admin panel<\/li>\n<li>Set up order status groups in the 'Statuses' tab<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20work%20with%20custom%20order%20statuses%3F\"><h3>Does this plugin work with custom order statuses?<\/h3><\/dt>\n<dd><p>Yes! The plugin is designed to work with any custom order statuses, including those created by other plugins like Advanced Shipment Tracking.<\/p><\/dd>\n<dt id=\"how%20do%20i%20configure%20order%20status%20groups%3F\"><h3>How do I configure order status groups?<\/h3><\/dt>\n<dd><p>Go to OrderCRM \u2192 Settings \u2192 Statuses in your admin panel. You can organize statuses into three groups: \"In Progress\", \"Completed\", and \"Cancelled\".<\/p><\/dd>\n<dt id=\"will%20updating%20the%20plugin%20affect%20my%20existing%20orders%3F\"><h3>Will updating the plugin affect my existing orders?<\/h3><\/dt>\n<dd><p>No. The plugin includes an automatic update system that safely migrates order statuses without data loss.<\/p><\/dd>\n<dt id=\"is%20this%20plugin%20compatible%20with%20other%20woocommerce%20plugins%3F\"><h3>Is this plugin compatible with other WooCommerce plugins?<\/h3><\/dt>\n<dd><p>Yes, the plugin is designed to work alongside other WooCommerce plugins without conflicts.<\/p><\/dd>\n<dt id=\"what%20are%20the%20system%20requirements%3F\"><h3>What are the system requirements?<\/h3><\/dt>\n<dd><ul>\n<li>WordPress 5.6 or higher<\/li>\n<li>WooCommerce 5.0 or higher<\/li>\n<li>PHP 8.0 or higher<\/li>\n<li>PHP extensions <strong>GD<\/strong> and <strong>mbstring<\/strong> (required for sales report PDF export via mPDF)<\/li>\n<\/ul><\/dd>\n<dt id=\"is%20report%20pdf%20stored%20on%20the%20server%20in%20uploads%3F\"><h3>Is report PDF stored on the server in uploads?<\/h3><\/dt>\n<dd><p>No. The PDF is generated on demand and sent in the AJAX response only; it is not saved as a public file in the media library or uploads folder, to reduce exposure of commercial data.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>3.3.4<\/h4>\n\n<ul>\n<li><strong>WordPress.org slug:<\/strong> folder, main file, text domain, and wp-admin menu slug <code>ordercrm-for-woocommerce<\/code> (<code>[unique]-for-woocommerce<\/code> pattern); display name <strong>OrderCRM for WooCommerce<\/strong> unchanged.<\/li>\n<li><strong>Plugin Check:<\/strong> readme short description (\u2264150 chars), 5 tags, Upgrade Notice (\u2264300 chars), Tested up to <strong>7.0<\/strong> \u2014 zero warnings on local check.<\/li>\n<li><strong>CRM logs:<\/strong> login via <code>\/crm-login\/<\/code> writes <strong>CRM login<\/strong> activity (explicit log after <code>wp_signon<\/code>, symmetric with REST logout).<\/li>\n<li><strong>Transactional emails:<\/strong> customer notification when CRM changes order status across transitions without WooCommerce core email hook (e.g. custom statuses).<\/li>\n<li><strong>Stability:<\/strong> output buffering in <code>OrderCRM_Routes::load_template()<\/code>; Chart.js <strong>4.5.1<\/strong>; wp-admin Roles\/Users tab fixes (role slug normalization, readable role names).<\/li>\n<\/ul>\n\n<h4>3.3.3<\/h4>\n\n<ul>\n<li><strong>wp-admin \u2014 Reports tab:<\/strong> new settings tab (before HPOS Test) to select <code>product_brand<\/code> terms in three columns (A\u2013Z); saved to <code>reports_selected_product_brands<\/code>; Post\/Redirect\/Get save flow.<\/li>\n<li><strong>CRM Reports \u2014 selected brands block:<\/strong> after non-completed orders table, shows TOP-5 products and TOP-5 categories pie for selected brands only (Completed + Processing statuses); <strong>Selected brands:<\/strong> label lists chosen names; block is hidden on screen and in PDF when no brands are selected.<\/li>\n<li><strong>CRM Reports PDF:<\/strong> includes selected-brands section and <code>brands_categories_chart_image<\/code> snapshot (<code>#salesBrandsCategoriesChart<\/code>) with SVG fallback.<\/li>\n<li><strong>UI:<\/strong> selected-brands block background <code>#B2BEB5<\/code> (distinct from all-products statistics <code>#DBDBDB<\/code>).<\/li>\n<\/ul>\n\n<h4>3.3.2<\/h4>\n\n<ul>\n<li><strong>Security hardening (Release E, staged):<\/strong> Stage 5.1 strict nonce mode for CRM REST reads added behind feature-flag <code>SALES_CRM_STRICT_REST_NONCE<\/code> (default OFF), with staged rollout\/rollback controls and staging smoke validation.<\/li>\n<li><strong>Post-smoke hotfixes:<\/strong> customer lookup schema compatibility for environments without <code>wc_customer_lookup.num_orders<\/code>; CRM login asset isolation fix to avoid plugin-induced root-relative static requests; logs UI refresh delay reduced to 10 seconds (<code>sales_crm_logs_cache_invalidate_delay<\/code> default).<\/li>\n<\/ul>\n\n<h4>3.3.1<\/h4>\n\n<ul>\n<li><strong>Security hardening (Release D completed):<\/strong> legacy invoice storage migration (Stage 4.1) finalized with protected storage, lazy + background migration, and reversible metadata rollback flow.<\/li>\n<li><strong>Security hardening:<\/strong> CRM REST same-origin policy (Stage 4.2) enabled for routes <code>\/sales-crm\/v1\/*<\/code> with <code>Origin<\/code> validation and explicit cross-origin <code>403<\/code> blocking, without frontend\/report regressions on staging.<\/li>\n<\/ul>\n\n<h4>3.3.0<\/h4>\n\n<ul>\n<li><strong>Security hardening (Release B completed):<\/strong> invoice storage directory is protected (<code>sales-crm-invoices<\/code>, deny direct access) and invoice filenames are now unpredictable (<code>{order}-{random}.{ext}<\/code>) while user download name remains unchanged.<\/li>\n<li><strong>Security hardening:<\/strong> staged verifications passed for Stage 1.1, 1.2, 1.3, 2.1 and 2.2 on test environment without CRM UI regressions.<\/li>\n<\/ul>\n\n<h4>3.2.9<\/h4>\n\n<ul>\n<li><strong>wp-admin \u2014 General tab:<\/strong> logo settings are now on the <strong>General<\/strong> settings tab (single form, one Save button). The separate <strong>Logo<\/strong> tab was removed; legacy <code>?tab=logo<\/code> redirects to General.<\/li>\n<li><strong>i18n (ru_RU):<\/strong> success notice after saving General settings \u2014 \u00ab\u041e\u0431\u0449\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b.\u00bb<\/li>\n<\/ul>\n\n<h4>3.2.8<\/h4>\n\n<ul>\n<li><strong>WordPress.org Plugin Check:<\/strong> full compliance (0 errors, 0 warnings) on release ZIP \u2014 directory submission readiness.<\/li>\n<li><strong>Compatibility:<\/strong> Tested up to WordPress 7.0 (<code>readme.txt<\/code> and plugin header synchronized).<\/li>\n<li><strong>i18n:<\/strong> translators comments for placeholder strings in order status labels and frontend messages.<\/li>\n<li><strong>Verification:<\/strong> Plugin Check and staging smoke \u00a719 <strong>2026-07-07<\/strong> \u2014 no CRM UI or workflow changes.<\/li>\n<\/ul>\n\n<h4>3.2.7<\/h4>\n\n<ul>\n<li><strong>Create order \u2014 view-model (T-TPL-4d):<\/strong> <code>handle_add_order_page_post()<\/code> and <code>get_add_order_view()<\/code> centralize POST dispatch and display data (totals, customer, country options); <code>add-order.php<\/code> template is display-focused. No CRM UI changes.<\/li>\n<li><strong>Verification:<\/strong> staging smoke <strong>2026-07-06<\/strong> \u2014 add-order (#2234, #2237), cross-smoke \u00a719 (order card, products, reports, logout\/login); phase-g runner <code>all_checks_passed: true<\/code>.<\/li>\n<\/ul>\n\n<h4>3.2.6<\/h4>\n\n<ul>\n<li><strong>Create order \u2014 customer &amp; discount POST (T-TPL-4c-i):<\/strong> search\/select customer, apply discount %, and clear draft handled in <code>Sales_CRM_Order_Service::handle_add_order_draft_mutations_post()<\/code>; template dispatches a single service call; REST customer selection unchanged.<\/li>\n<li><strong>Create order \u2014 create POST (T-TPL-4c-ii):<\/strong> order creation and new customer creation moved to <code>handle_create_order_post()<\/code> and <code>handle_create_new_customer_post()<\/code> (redirect to order card, JS fallback when headers already sent).<\/li>\n<li><strong>Verification:<\/strong> staging smoke <strong>2026-07-06<\/strong> \u2014 4c-i (search\/select, discount, clear); 4c-ii (create with existing customer, create with new customer + phone, order #2223, transactional email); <strong>HPOS on<\/strong>.<\/li>\n<\/ul>\n\n<h4>3.2.5<\/h4>\n\n<ul>\n<li><strong>Create order \u2014 draft session (T-TPL-4a):<\/strong> temporary cart and customer data use <code>Sales_CRM_Order_Draft_Session<\/code> (WC session with user-meta fallback); template no longer defines global session helpers.<\/li>\n<li><strong>Create order \u2014 cart POST (T-TPL-4b):<\/strong> add \/ remove \/ edit quantity handled in <code>Sales_CRM_Order_Service::handle_temp_cart_post()<\/code>; correct message when adding the same simple SKU again (<strong>Product quantity increased.<\/strong>).<\/li>\n<li><strong>Create order \u2014 totals:<\/strong> draft order footer totals (subtotal, VAT, discount) recalculate correctly for simple and variation lines; CRM discount % is kept after <strong>Create customer<\/strong>.<\/li>\n<li><strong>CRM products catalog (T-TPL-3):<\/strong> product list filters and POST update logic moved to <code>Sales_CRM_Products_List_Service<\/code>; template is display-focused.<\/li>\n<li><strong>CRM Reports pie chart:<\/strong> improved category label layout (less overlap; HTML legend).<\/li>\n<li><strong>Verification:<\/strong> staging smoke <strong>2026-07-06<\/strong> \u2014 add-order cart, totals, discount + new customer; products catalog.<\/li>\n<\/ul>\n\n<h4>3.2.4<\/h4>\n\n<ul>\n<li><strong>CRM Reports \u2014 category pie chart:<\/strong> on <code>\/crm-dashboard\/reports\/<\/code>, <strong>Statistics among all products<\/strong> shows TOP-5 products (table) and <strong>TOP-5 categories<\/strong> (Chart.js pie, integer % to 100, <strong>Other<\/strong> for the rest); cached per report period.<\/li>\n<li><strong>CRM Reports PDF:<\/strong> category pie chart above the sold-products table; sync and async export paths; SVG fallback when chart PNG is unavailable.<\/li>\n<li><strong>CRM Reports layout:<\/strong> section heading styled like other CRM table blocks (<code>sales-crm-table-container<\/code>).<\/li>\n<li><strong>wp-admin \u2014 Statuses tab (T-TPL-1):<\/strong> saving status groups uses Post\/Redirect\/Get \u2014 after <strong>Save<\/strong>, page refresh (F5) no longer shows browser resubmit warning; standard green success notice; checkbox selections persist correctly. Template is display-only; logic in <code>Sales_CRM_Admin_Settings<\/code>.<\/li>\n<li><strong>Verification:<\/strong> staging smoke <strong>2026-07-03<\/strong> \u2014 reports pie on screen + PDF; Statuses tab Save, PRG, notice.<\/li>\n<\/ul>\n\n<h4>3.2.3<\/h4>\n\n<ul>\n<li><strong>CRM logs filter:<\/strong> user dropdown on <code>\/crm-dashboard\/logs\/<\/code> shows names as <strong>Last name First name<\/strong>, sorted A\u2013Z by last name (same display rules as customer\/order profiles).<\/li>\n<li><strong>CRM products filter:<\/strong> <strong>Brand<\/strong> select on <code>\/crm-dashboard\/products\/<\/code> built from WooCommerce <code>product_brand<\/code> taxonomy (A\u2013Z); combines with search, category, and stock filters; REST <code>GET \/products<\/code> accepts <code>brand<\/code> query param. Select is hidden when the taxonomy is not registered.<\/li>\n<li><strong>Report PDF:<\/strong> visible preparation animation on export; optional async generation path (filter <code>sales_crm_pdf_export_async_enabled<\/code>, default <strong>off<\/strong> \u2014 sync download unchanged).<\/li>\n<li><strong>Performance:<\/strong> activity log cache invalidation debounced via Action Scheduler (T-11.4) \u2014 faster order\/log writes on busy stores; new log rows appear within ~20 s.<\/li>\n<li><strong>Verification:<\/strong> staging smoke <strong>2026-07-02<\/strong> (phase-g <code>wave682_*<\/code>, <code>wave683_*<\/code>, <code>wave684_*<\/code>).<\/li>\n<\/ul>\n\n<h4>3.2.2<\/h4>\n\n<ul>\n<li><strong>Report cache (performance):<\/strong> after order status changes and new orders, CRM report transients clear via WooCommerce Action Scheduler (debounced, typically within 30\u201360 seconds) instead of heavy synchronous SQL on every mutation \u2014 faster order card REST responses. Report numbers stay the same; brief delay before refreshed totals is expected. Filters: <code>sales_crm_deferred_report_cache_invalidation_enabled<\/code>, <code>sales_crm_report_cache_invalidate_delay<\/code>.<\/li>\n<li><strong>Fixes:<\/strong> WooCommerce refunded-order email shim (theme template recursion); admin settings tab labels on WP 6.7+; CRM frontend asset dequeue when <code>wp_enqueue_scripts<\/code> already ran.<\/li>\n<li><strong>Verification:<\/strong> staging smoke <strong>2026-07-01<\/strong> (phase-g <code>wave682_*<\/code>, report invalidation after debounce). No CRM UI changes.<\/li>\n<\/ul>\n\n<h4>3.2.1<\/h4>\n\n<ul>\n<li><strong>Transactional emails from CRM:<\/strong> WooCommerce customer and admin notifications on create order, customer notes, status changes, and AST tracking \u2014 reliable delivery via synchronous sending by default (no theme <code>functions.php<\/code> defer filters required).<\/li>\n<li><strong>Create order:<\/strong> status remains <code>pending<\/code> in the database; client receives the standard WooCommerce notification (<code>customer_on_hold_order<\/code>); managers receive New order; <code>billing_email<\/code> required with user-email fallback.<\/li>\n<li><strong>Optional defer:<\/strong> filters <code>sales_crm_enable_wc_deferred_transactional_emails<\/code> and <code>sales_crm_defer_transactional_emails_on_order_mutation<\/code> default to <strong>false<\/strong>; set to <code>true<\/code> for faster REST TTFB with queue flush on REST\/shutdown.<\/li>\n<li><strong>Compatibility:<\/strong> verified with Advanced Shipment Tracking and WooCommerce PDF Invoices &amp; Packing Slips (staging orders #2155, #2159, 2026-07-01). No CRM UI changes.<\/li>\n<\/ul>\n\n<h4>3.2.0<\/h4>\n\n<ul>\n<li><strong>Background jobs (T-11.0):<\/strong> WooCommerce Action Scheduler integration via <code>Sales_CRM_Background_Jobs<\/code> (group <code>sales-crm<\/code>); runtime runner <code>wave68_*<\/code> checks.<\/li>\n<li><strong>Login\/logout log cleanup (T-11.1):<\/strong> daily housekeeping moved from WP-Cron to Action Scheduler (<code>sales_crm_delete_old_login_logout_logs<\/code>); legacy WP-Cron removed on migrate; filter <code>sales_crm_login_logout_log_retention_days<\/code> (default 62 days). No UX change.<\/li>\n<li><strong>WP 6.7+ i18n:<\/strong> translations load on <code>init<\/code>; lazy admin settings tabs; capability slugs without early <code>__()<\/code> on <code>plugins_loaded<\/code>; early custom order status registration without textdomain before <code>init<\/code>.<\/li>\n<li><strong>WooCommerce email compat:<\/strong> plugin shim when the active theme overrides <code>customer-refunded-order.php<\/code> without <code>$user_login<\/code>.<\/li>\n<li><strong>Verification:<\/strong> staging smoke runner <strong>2026-06-30<\/strong> (<code>all_checks_passed: true<\/code>, <code>wave68_login_logout_cleanup_*<\/code>).<\/li>\n<\/ul>\n\n<h4>3.1.9<\/h4>\n\n<ul>\n<li><strong>Templates (T-03):<\/strong> orders list table (<code>orders-table.php<\/code>) \u2014 all display logic moved to <code>Sales_CRM_Order_Service::build_orders_table_rows()<\/code>; customer card sidebar totals use pre-formatted HTML from <code>get_customer_profile_for_view()<\/code>. No UX changes; staging smoke passed.<\/li>\n<li><strong>Ops (T-14):<\/strong> production HTTPS\/TLS and cookie-auth verification documented (<code>PRODUCTION_HTTPS_CHECKLIST.md<\/code>); runtime runner checks <code>wave67_*<\/code> (cookie pattern, login nocache, URL scheme on HTTPS).<\/li>\n<li><strong>Diagnostics:<\/strong> phase-g runner prefers sample order ID from REST orders list (<code>shop_order<\/code>) for reliable wave4\/wave64 checks.<\/li>\n<\/ul>\n\n<h4>3.1.8<\/h4>\n\n<ul>\n<li><strong>Hotfix \u2014 CRM logout:<\/strong> sidebar \"Logout\" uses REST <code>POST \/auth\/logout<\/code> (class <code>sales-crm-logout<\/code>) instead of <code>wp_logout_url()<\/code> \u2014 no WordPress \"confirm logout\" page; redirect straight to <code>\/crm-login\/<\/code>.<\/li>\n<\/ul>\n\n<h4>3.1.7<\/h4>\n\n<ul>\n<li><strong>Hotfix \u2014 CRM login (critical):<\/strong> removed post-login <code>has_crm_access()<\/code> check that logged out valid users with false <code>no_access<\/code> (regression from 3.1.5\u20133.1.6). Access is enforced on CRM pages after redirect \u2014 same as before 3.1.5.<\/li>\n<li><strong>wp_signon():<\/strong> restored <code>wp_signon( $creds, false )<\/code> as in 3.1.4 for production HTTPS cookie compatibility.<\/li>\n<li><strong>Login page:<\/strong> <code>data-sales-crm-version<\/code> on <code>&lt;body&gt;<\/code> for deploy verification when HTML comments are stripped.<\/li>\n<\/ul>\n\n<h4>3.1.6<\/h4>\n\n<ul>\n<li><strong>Hotfix \u2014 CRM login (root cause):<\/strong> stop reading WordPress core <code>error<\/code> query var on <code>\/crm-login\/<\/code> (collision caused false \"An error occurred during login\" banner on HTTPS production). CRM errors now use <code>crm_login_error<\/code> only.<\/li>\n<li><strong>Login:<\/strong> fallback route detection by URI when rewrite query var is missing; fix theme stylesheet MIME error on login page.<\/li>\n<\/ul>\n\n<h4>3.1.5<\/h4>\n\n<ul>\n<li><strong>Hotfix \u2014 CRM login:<\/strong> fixed false error banner \"An error occurred during login\" on <code>\/crm-login\/<\/code> when the form was not submitted (stale nonce redirect, unknown <code>error<\/code> query codes, or cached login HTML).<\/li>\n<li><strong>Login:<\/strong> explicit message for expired form session (<code>invalid_nonce<\/code>); show errors only for known codes; <code>wp_signon()<\/code> uses secure cookies on HTTPS; check CRM access after sign-in; <code>nocache_headers()<\/code> on the login page.<\/li>\n<\/ul>\n\n<h4>3.1.4<\/h4>\n\n<ul>\n<li><strong>Reports cache (wave 6.3, T-09):<\/strong> transient caching for heavy CRM reports (sales stats, TOP-5 line items, year list); faster <code>\/crm-reports\/<\/code> and PDF export on repeat views; cache invalidates on order status change and new orders. No UX changes.<\/li>\n<li><strong>Deferred transactional emails (T-10):<\/strong> WooCommerce emails deferred on all CRM order mutations (status, line items, discount, invoice, AST tracking); faster order card REST responses. Enable <strong>Deferred transactional emails<\/strong> in WooCommerce \u2192 Settings \u2192 Advanced \u2192 Features for best results.<\/li>\n<li><strong>Verification:<\/strong> staging smoke + runtime runners <code>wave64_*<\/code> and <code>wave65_*<\/code>.<\/li>\n<\/ul>\n\n<h4>3.1.3<\/h4>\n\n<ul>\n<li><strong>List performance (wave 6.2, T-08):<\/strong> batch prefetch for customers, orders, and products lists; reduced N+1 without UX changes to tables or REST contracts.<\/li>\n<li><strong>Activity logs (T-12 \/ phase F):<\/strong> bounded merge total in <code>get_logs()<\/code> \u2014 removes unbounded PHP merge for pagination count; faster logs screen on large datasets.<\/li>\n<li><strong>Verification:<\/strong> staging smoke + runtime runners <code>wave62_*<\/code> and <code>wave63_*<\/code>; phase-f scenarios S1\u2013S6 passed.<\/li>\n<\/ul>\n\n<h4>3.1.2<\/h4>\n\n<ul>\n<li><strong>RBAC (wave 6.1, T-07):<\/strong> centralized CRM capability checks via <code>sales_crm_user_can()<\/code> and <code>Sales_CRM_Capabilities<\/code>; aligned UI menus, REST permission callbacks, and CRM role settings sync.<\/li>\n<li><strong>Order notes:<\/strong> permission uses <code>add_order_notes<\/code> (with legacy <code>edit_sales_crm<\/code> fallback) consistently in templates and REST.<\/li>\n<li><strong>Reports PDF:<\/strong> export allowed for CRM admin UI or users with <code>view_reports<\/code> capability.<\/li>\n<li><strong>Verification:<\/strong> staging role smoke and runtime runner <code>wave61_rbac_*<\/code> passed.<\/li>\n<\/ul>\n\n<h4>3.1.1<\/h4>\n\n<ul>\n<li><strong>Architecture (wave 5):<\/strong> domain classes moved under <code>includes\/modules\/<\/code> \u2014 <code>orders\/<\/code>, <code>customers\/<\/code>, <code>logs\/<\/code>, <code>products\/<\/code> with module loaders.<\/li>\n<li><strong>Products catalog (T-01):<\/strong> list\/read logic in <code>Sales_CRM_Products_List_Service<\/code>; CRM products page uses a prepared view-model (no SQL in template).<\/li>\n<li><strong>REST:<\/strong> <code>GET \/sales-crm\/v1\/products<\/code> \u2014 paginated catalog list with filters (<code>search<\/code>, <code>category<\/code>, <code>stock<\/code>, <code>page<\/code>); stock filter accepts all WooCommerce stock statuses (including custom statuses such as out of production).<\/li>\n<li><strong>Products UI:<\/strong> stock status filter and edit modal both use <code>wc_get_product_stock_status_options()<\/code>; fixes for status-only updates from the dashboard modal.<\/li>\n<li><strong>CRM UI \u2192 REST (wave 4):<\/strong> CRM frontend migrated from legacy AJAX to <code>sales-crm\/v1<\/code> (orders, customers, products search, order card, catalog edit, logout, invoices, report PDF); see <code>CHANGELOG.md<\/code> for full notes.<\/li>\n<li><strong>Fixed:<\/strong> block adding <code>outofstock<\/code> \/ <code>out_of_production<\/code> items to orders; faster order status change (deferred transactional emails).<\/li>\n<\/ul>\n\n<h4>3.1.0<\/h4>\n\n<ul>\n<li><strong>Architecture (wave 3 complete):<\/strong> <code>Sales_CRM_Customer_Repository<\/code> and <code>Sales_CRM_Activity_Log_Repository<\/code>; DTO read-models for customer list\/profile and activity logs; templates <code>customer.php<\/code>, <code>customers.php<\/code>, and <code>logs.php<\/code> use service layer instead of direct DB\/user API calls.<\/li>\n<li><strong>Activity log:<\/strong> clearer event sources (manager notes, tracking number, line-item changes); filter \"Order note\" maps to manual manager notes only.<\/li>\n<li><strong>Create order:<\/strong> reliable intl-tel-input phone mask (country flag, placeholder, BY\/UA\/RU validation); scripts enqueued via <code>sales_crm_enqueue_phone_input_assets()<\/code>.<\/li>\n<li><strong>Fixed:<\/strong> variation line price 0 when WooCommerce <code>_price<\/code> meta is empty; CRM discount VAT display; customer password reset white screen.<\/li>\n<li><strong>Docs:<\/strong> <code>docs\/reports\/WAVE_3_ACCEPTANCE_REPORT.md<\/code>; see <code>CHANGELOG.md<\/code> for full developer notes.<\/li>\n<\/ul>\n\n<h4>3.0.3<\/h4>\n\n<ul>\n<li><strong>Architecture (wave 2 complete):<\/strong> order logic split into sub-services \u2014 <code>Sales_CRM_Order_Discount_Service<\/code>, <code>Sales_CRM_Order_Line_Item_Service<\/code>, <code>Sales_CRM_Order_Crm_Actions_Service<\/code>, shared <code>Sales_CRM_Order_Mutation_Support<\/code>; <code>Sales_CRM_Order_Service<\/code> is a thin facade delegating to them.<\/li>\n<li><strong>Create order:<\/strong> legacy <code>wc_create_order()<\/code> path removed from <code>add-order.php<\/code>; creation always uses <code>Sales_CRM_Order_Service::create_order_from_crm_session()<\/code> (no <code>WOO_SALES_CRM_V3_ENABLED<\/code> branch).<\/li>\n<li><strong>Order list:<\/strong> <code>Sales_CRM_Order_Repository::query_for_crm_list()<\/code> \u2014 single entry for CRM status-group filters before <code>wc_get_orders<\/code>.<\/li>\n<li><strong>Order card (POST):<\/strong> all mutations via order service (status, notes, qty, SKU, discount, address, AST); CRM discount meta recalculated after SKU add \/ line remove when a percent discount is active.<\/li>\n<li><strong>VAT label:<\/strong> <code>get_vat_rate_label_for_order()<\/code> and <strong>VAT (XX%)<\/strong> in order totals; historical rate from order tax snapshot.<\/li>\n<li><strong>Docs:<\/strong> wave 2 marked closed in <code>ARCHITECTURE_IDEALSTATE_PLAN.md<\/code>; updated <code>SERVICES_FACADE.md<\/code>.<\/li>\n<li><strong>VAT with CRM discount:<\/strong> VAT and subtotal rows in the order totals table are scaled proportionally when a CRM discount is applied (taxable base after discount); without discount, values match WooCommerce <code>get_total_tax()<\/code> \/ <code>get_subtotal()<\/code>.<\/li>\n<li><strong>Order totals row order:<\/strong> gross total and discount first, then subtotal without VAT and VAT breakdown, then final total with discount (<code>order-items-table.php<\/code>).<\/li>\n<li><strong>Docs:<\/strong> <code>docs\/guides\/WOOCOMMERCE_TAX_PRICING_CRM.md<\/code> \u2014 CRM discount and VAT calculation (with\/without discount).<\/li>\n<li><strong>Architecture:<\/strong> <code>Sales_CRM_Order_Repository<\/code> and <code>Sales_CRM_Service_Factory::order_repository()<\/code>; optional <strong>Strangler<\/strong> path for <strong>Create order<\/strong> in CRM when <code>WOO_SALES_CRM_V3_ENABLED<\/code> is set in wp-config (<code>Sales_CRM_Order_Service::create_order_from_crm_session<\/code>). Template views use order service helpers (<code>get_wc_order<\/code>, <code>get_order_statuses_for_ui<\/code>, <code>get_status_display_name<\/code>, <code>get_order_notes_for_display<\/code>) instead of scattered WooCommerce calls.<\/li>\n<li><strong>Security \/ refactor (internal):<\/strong> Phase <strong>B<\/strong> order notes via WC API; phases <strong>C<\/strong> (SQL hardening) and <strong>D<\/strong> (XSS escapes) per project docs; full-tree <strong>WPCS<\/strong> pass remains the project baseline.<\/li>\n<li><strong>Pricing &amp; tax:<\/strong> CRM order line totals and product\/dashboard pricing aligned with WooCommerce tax settings (<code>wc_prices_include_tax<\/code>, WC totals); preview totals for the temporary cart use a short-lived <code>WC_Order<\/code> + <code>calculate_totals()<\/code>.<\/li>\n<li><strong>VAT rate label:<\/strong> order totals show <strong>VAT (XX%)<\/strong> \/ <strong>\u041d\u0414\u0421 (XX%)<\/strong> next to the tax amount; rate from the order tax snapshot (historical) with fallback to current WC standard rates; see <code>docs\/guides\/WOOCOMMERCE_TAX_PRICING_CRM.md<\/code>.<\/li>\n<li><strong>Docs:<\/strong> <code>ARCHITECTURE_IDEALSTATE_PLAN.md<\/code>, template order-logic inventory, Strangler create-order acceptance on staging (see <code>CHANGELOG.md<\/code>).<\/li>\n<li><strong>i18n:<\/strong> new\/updated Russian strings for order-service errors and <code>VAT (%s):<\/code> \u2014 recompile <code>languages\/sales-crm-ru_RU.mo<\/code> if you ship custom PO files.<\/li>\n<\/ul>\n\n<h4>3.0.1<\/h4>\n\n<ul>\n<li><strong>Architecture:<\/strong> centralized <strong>facade services<\/strong> \u2014 <code>Sales_CRM_Customer_Service<\/code>, <code>Sales_CRM_Log_Service<\/code> (with <code>log()<\/code> for WC logger and CRM login\/logout events), continued use of <code>Sales_CRM_Order_Service<\/code>; <code>Sales_CRM_Orders<\/code> loads customer display data via Customer Service; plugin boot order updated (<code>customers<\/code> \u2192 <code>customer-service<\/code> \u2192 <code>orders<\/code>).<\/li>\n<li><strong>Logging:<\/strong> CRM activity and admin flows use <code>Sales_CRM_Log_Service<\/code> instead of direct <code>Sales_CRM_Logger<\/code> in touched code; <code>Sales_CRM_Admin_Settings::get_logs()<\/code> uses the same log pipeline as the CRM logs UI.<\/li>\n<li><strong>Reports PDF:<\/strong> more reliable download (output buffer flush before binary, relaxed chart PNG validation with graceful skip, client detects <code>%PDF<\/code> even if <code>Content-Type<\/code> is wrong); AJAX URL uses <strong>relative<\/strong> <code>admin-ajax.php<\/code>; header band uses <strong>primary color<\/strong> from settings.<\/li>\n<li><strong>Testing:<\/strong> optional <code>define( 'SALES_CRM_DISABLE_PDF_RATE_LIMIT', true );<\/code> in wp-config disables PDF rate limiting (remove after tests).<\/li>\n<li><strong>Mobile block page:<\/strong> <code>&lt;body class=\"mobile-blocked-page\"&gt;<\/code> so <strong>primary color<\/strong> background from settings applies.<\/li>\n<li><strong>i18n:<\/strong> fixed Russian catalog entry for discount log line (<code>msgid<\/code> must match <code>__()<\/code> placeholders <code>%1$s<\/code> \/ <code>%2$d<\/code>); recompile <code>.mo<\/code> after <code>.po<\/code> updates.<\/li>\n<li>Developer changelog: <code>CHANGELOG.md<\/code> (Keep a Changelog); internal docs: <code>docs\/features\/SERVICES_FACADE.md<\/code>, updated <code>REPORTS_PDF_EXPORT.md<\/code> and <code>REFACTORING_3_0_STRATEGY.md<\/code>.<\/li>\n<li><strong>Refactoring phase A (docs):<\/strong> updated <code>docs\/reports\/HPOS_CODE_INVENTORY.md<\/code>; added <code>REFACTORING_SECURITY_AUDIT_MATRIX.md<\/code> and <code>REFACTORING_ACCEPTANCE_CRITERIA.md<\/code> (audit matrix + formal acceptance criteria for next phases).<\/li>\n<\/ul>\n\n<h4>3.0.0<\/h4>\n\n<ul>\n<li><strong>Breaking:<\/strong> minimum <strong>PHP 8.0<\/strong> required (PHP 7.x no longer supported). Upgrade PHP before updating; use 2.1.x on older PHP if needed.<\/li>\n<li><strong>Baseline for large refactor:<\/strong> internal strategy uses <strong>Strangler pattern<\/strong> \u2014 new code paths can be gated with <code>WOO_SALES_CRM_V3_ENABLED<\/code> (aligned with CRM 3.0 naming; see <code>developer\/docs\/reports\/REFACTORING_3_0_STRATEGY.md<\/code>).<\/li>\n<li>Optional: set <code>define('WOO_SALES_CRM_V3_ENABLED', true);<\/code> or <code>CRM_V3_ENABLED<\/code> in <strong>wp-config.php<\/strong> when you are ready to test the refactored branch (default remains legacy). Old names <code>WOO_SALES_CRM_V2_ENABLED<\/code> \/ <code>CRM_V2_ENABLED<\/code> are still read for backward compatibility.<\/li>\n<li>Version alignment: <code>version.php<\/code>, plugin header, and Stable tag set to <strong>3.0.0<\/strong>; Composer <code>require<\/code> PHP <strong>^8.0<\/strong>.<\/li>\n<li>HPOS-related order migrations already use WooCommerce APIs where previously adjusted (see project docs).<\/li>\n<\/ul>\n\n<h4>2.1.2<\/h4>\n\n<ul>\n<li>Reports: <strong>Download PDF<\/strong> \u2014 export the selected period to PDF (mPDF); chart embedded as PNG from the on-screen canvas<\/li>\n<li>Reports PDF: full list of non-completed orders for the period; product table includes all aggregated rows with total quantity greater than one (screen still shows TOP-5)<\/li>\n<li>Reports PDF: header logo from CRM settings; page numbers; currency uses the <code>rub.<\/code> string in PDF output where the ruble glyph is unreliable in PDF fonts<\/li>\n<li>Security: PDF output is not cached under <code>uploads<\/code>; delivery only through authenticated AJAX (<code>view_reports<\/code> \/ administrator)<\/li>\n<li>Anti-abuse: rate limiting for PDF generation (default: about once per hour per user, optional IP-based limit; filterable)<\/li>\n<li>Activation: require PHP extensions <strong>GD<\/strong> and <strong>mbstring<\/strong> (aligned with mPDF)<\/li>\n<li>Bundled <code>composer.json<\/code>, <code>composer.lock<\/code>, and <code>vendor\/<\/code> (mPDF) for \u201cupload and run\u201d installs; developer docs: <code>docs\/features\/REPORTS_PDF_EXPORT.md<\/code><\/li>\n<li>Russian translations updated for PDF and activation messages<\/li>\n<\/ul>\n\n<h4>2.1.1<\/h4>\n\n<ul>\n<li>Reports: choose month, quarter, or year; Apply filter; year dropdown lists only years that have orders (classic posts + HPOS)<\/li>\n<li>Reports: Chart.js graphs adapted to period (daily \/ quarterly multi-series \/ yearly by month)<\/li>\n<li>Reports: \"Products for period (TOP-5)\" \u2014 aggregate quantities by SKU from Completed + In Progress status groups (per CRM settings)<\/li>\n<li>Reports: \"Orders for period\" lists non-completed orders only; pagination uses CRM \"items per page\" setting<\/li>\n<li>Reports: amounts shown with store currency via wc_price(); chart bootstrapped from reports-chart.js (no inline scripts in template)<\/li>\n<li>Updated Russian translations for new strings<\/li>\n<\/ul>\n\n<h4>1.2.9.3<\/h4>\n\n<ul>\n<li>Added CRM order identification icon (dashicons-desktop) in order lists<\/li>\n<li>CRM-created orders now display a blue desktop icon next to order numbers<\/li>\n<li>Icon appears in dashboard, orders, and customer sections<\/li>\n<li>Added tooltip showing which manager created the order via CRM<\/li>\n<li>Enhanced order tracking for CRM vs. regular website orders<\/li>\n<li>Improved visual distinction between order creation methods<\/li>\n<\/ul>\n\n<h4>1.2.8.7<\/h4>\n\n<ul>\n<li>Customer search fix: Completely redesigned customer search algorithm<\/li>\n<li>Fixed incomplete customer search results - now finds all customers with matching names<\/li>\n<li>Enhanced search functionality across all CRM sections (customers list, order creation)<\/li>\n<li>Improved search by first name, last name, full name, and phone numbers<\/li>\n<li>Added comprehensive search across WordPress user fields and meta fields<\/li>\n<li>Eliminated duplicate results in customer search<\/li>\n<li>Performance optimization: Enhanced logging system with intelligent caching<\/li>\n<li>Optimized log retrieval with 5-minute caching for improved performance<\/li>\n<li>Improved SQL queries for system logs and order notes processing<\/li>\n<li>Enhanced pagination and filtering for better user experience<\/li>\n<li>Reduced database load through efficient log processing<\/li>\n<li>Added automatic cache clearing when new logs are created<\/li>\n<li>Optimized memory usage for large log datasets<\/li>\n<li>Improved overall CRM dashboard responsiveness<\/li>\n<li>Performance optimization: Enhanced logging system with intelligent caching<\/li>\n<li>Optimized log retrieval with 5-minute caching for improved performance<\/li>\n<li>Improved SQL queries for system logs and order notes processing<\/li>\n<li>Enhanced pagination and filtering for better user experience<\/li>\n<li>Reduced database load through efficient log processing<\/li>\n<li>Added automatic cache clearing when new logs are created<\/li>\n<li>Optimized memory usage for large log datasets<\/li>\n<li>Improved overall CRM dashboard responsiveness<\/li>\n<\/ul>\n\n<h4>1.2.8.6<\/h4>\n\n<ul>\n<li>Critical bug fix: Resolved empty products display issue in CRM dashboard<\/li>\n<li>Performance optimization with improved SQL queries and caching system<\/li>\n<li>Replaced inefficient nested SQL subqueries with optimized JOIN operations<\/li>\n<li>Implemented comprehensive caching for product search, categories, and filters<\/li>\n<li>Fixed critical memory usage issue with unlimited product loading (limit -1)<\/li>\n<li>Added new Sales_CRM_Cache_Manager class for intelligent caching<\/li>\n<li>Optimized database queries for 3-5x faster performance<\/li>\n<li>Implemented automatic cache clearing on product and category changes<\/li>\n<li>Reduced memory usage by 70-90% through result limiting<\/li>\n<li>Added 90%+ cache hit rate for frequently accessed data<\/li>\n<li>Enhanced overall system responsiveness and scalability<\/li>\n<\/ul>\n\n<h4>1.2.8.4<\/h4>\n\n<ul>\n<li>Complete Russian localization with 376+ translated strings<\/li>\n<li>Full interface translation for all frontend and backend elements<\/li>\n<li>Improved localization system with automatic language detection<\/li>\n<li>Fixed product search functionality by SKU and category filtering<\/li>\n<li>Resolved display issues with added items in order creation<\/li>\n<li>Enhanced JavaScript localization replacing hardcoded English strings<\/li>\n<li>Optimized translation file compilation and loading system<\/li>\n<li>Added debugging support for translation loading<\/li>\n<li>Comprehensive localization coverage: menus, forms, notifications, modals<\/li>\n<li>Improved user experience for Russian-speaking users<\/li>\n<\/ul>\n\n<h4>1.2.8.0<\/h4>\n\n<ul>\n<li>Added default plugin logo implementation across all CRM pages<\/li>\n<li>Implemented automatic fallback to default logo when no custom logo is uploaded<\/li>\n<li>Enhanced logo display on login, mobile-blocked, no-access pages and main CRM layout<\/li>\n<li>Added new methods in admin settings class for logo management with default fallback<\/li>\n<li>Improved user experience with consistent branding across all CRM interfaces<\/li>\n<li>Maintained backward compatibility with existing custom logo functionality<\/li>\n<\/ul>\n\n<h4>1.2.7.8<\/h4>\n\n<ul>\n<li>Implemented PHPCS (PHP CodeSniffer) for automatic code formatting<\/li>\n<li>Added WordPress coding standards compliance with adapted rules for plugins<\/li>\n<li>Created comprehensive development tools and automation scripts<\/li>\n<li>Organized project structure according to WordPress\/WooCommerce standards<\/li>\n<li>Added detailed documentation for code formatting and development workflow<\/li>\n<li>Prepared plugin for production deployment with clean file structure<\/li>\n<li>Enhanced code quality and maintainability standards<\/li>\n<\/ul>\n\n<h4>1.2.7.7<\/h4>\n\n<ul>\n<li>Added HPOS (High-Performance Order Storage) compatibility testing<\/li>\n<li>Implemented new \"HPOS Test\" tab in admin settings with two-column layout<\/li>\n<li>Enhanced HPOS status detection with multiple fallback methods<\/li>\n<li>Improved error handling for HPOS compatibility checks<\/li>\n<li>Added comprehensive HPOS compatibility information and testing instructions<\/li>\n<li>Removed debug logging for production use<\/li>\n<li>Cleaned up test files and prepared for release<\/li>\n<\/ul>\n\n<h4>1.2.7.6<\/h4>\n\n<ul>\n<li>Migrated from PHP sessions to WC()-&gt;session for better compatibility<\/li>\n<li>Fixed customer data persistence issues in order creation<\/li>\n<li>Improved menu order: moved \"Products\" above \"Reports\"<\/li>\n<li>Enhanced AJAX customer selection functionality<\/li>\n<li>Optimized temporary data storage using WooCommerce session system<\/li>\n<li>Added fallback to user meta for authenticated users<\/li>\n<\/ul>\n\n<h4>1.2.7.4<\/h4>\n\n<ul>\n<li>Added automatic update system for order statuses<\/li>\n<li>Implemented flexible status group management<\/li>\n<li>Fixed compatibility issues with Advanced Shipment Tracking<\/li>\n<li>Improved order display logic in dashboard<\/li>\n<li>Added comprehensive error handling<\/li>\n<li>Removed debug logging for production use<\/li>\n<\/ul>\n\n<h4>1.2.7.2<\/h4>\n\n<ul>\n<li>Enhanced customer search functionality<\/li>\n<li>Improved order tracking system<\/li>\n<li>Bug fixes and performance improvements<\/li>\n<\/ul>\n\n<h4>1.2.7.1<\/h4>\n\n<ul>\n<li>Initial release with core CRM functionality<\/li>\n<li>Basic order and customer management<\/li>\n<li>Activity logging system<\/li>\n<\/ul>","raw_excerpt":"WooCommerce frontend CRM: filter orders, search customers, and view sales charts\u2014no WordPress admin access required.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/337393","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=337393"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/timon-dimon"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=337393"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=337393"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=337393"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=337393"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=337393"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=337393"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}