=== PayPal POS for WooCommerce ===
Contributors: paypal, syde, zettle, woocommerce, biont, alexp11223, danieldudzic
Tags: point-of-sale, inventory, stock-sync, woocommerce, pos
Requires at least: 6.8
Tested up to: 7.1
Requires PHP: 8.2
Stable tag: 2.0.0
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html

Sell online with WooCommerce and in person with PayPal POS, and keep your products and stock in sync across both.

== Description ==

Run one shop, not two. **PayPal POS for WooCommerce** connects your WooCommerce store to your PayPal POS (Point of Sale) account, so the products you manage online are the same products you sell in person, with stock levels that stay accurate on both sides.

WooCommerce stays your single source of truth. You build and manage your catalog where you already work, push it to your PayPal POS product library, and start selling at the counter. When something sells, online or in store, inventory updates on the other side automatically. No spreadsheets, no double entry, no end-of-day stock surprises.

= What you can do =

* **Connect in minutes.** Link your WooCommerce store to PayPal POS and sync your product library through a guided onboarding flow.
* **Send your catalog to the counter.** Export a selection of products, or your entire catalog, from WooCommerce to your PayPal POS product library.
* **Manage everything in one place.** Edit products in WooCommerce and let your changes flow through to PayPal POS automatically.
* **Keep stock accurate in real time.** Stock changes sync both ways between WooCommerce and PayPal POS, so a sale on either side updates the other.
* **Choose what syncs.** Exclude individual products from sync when you want to keep them online only.

= Built for omnichannel sellers =

If WooCommerce is the heart of your business and PayPal POS is how you take payments in person, this plugin keeps the two in step. It focuses on what matters most when you sell across channels: one catalog and one accurate stock count, everywhere you sell.

= About PayPal POS =

PayPal POS is PayPal's point of sale system for taking payments in person, with card readers, terminals, and the PayPal POS app. You will need an active PayPal POS account to use this plugin. PayPal POS does not process payments through this plugin; payments are taken on your PayPal POS hardware and app.

PayPal POS is available in the following countries: [US](https://www.paypal.com/business/pos?utm_source=local_partnership&utm_medium=ecommerce&utm_campaign=woocommerce), [GB](https://www.zettle.com/gb/integrations/e-commerce/woocommerce?utm_source=local_partnership&utm_medium=ecommerce&utm_campaign=woocommerce), [FR](https://www.zettle.com/fr/integrations/e-commerce/woocommerce?utm_source=local_partnership&utm_medium=ecommerce&utm_campaign=woocommerce), [SE](https://www.zettle.com/se/integrationer/e-handel/woocommerce?utm_source=local_partnership&utm_medium=ecommerce&utm_campaign=woocommerce), [NO](https://www.zettle.com/no/integrasjoner/e-handel/woocommerce?utm_source=local_partnership&utm_medium=ecommerce&utm_campaign=woocommerce), [FI](https://www.zettle.com/fi/integraatiot/verkkokauppa/woocommerce?utm_source=local_partnership&utm_medium=ecommerce&utm_campaign=woocommerce), [DK](https://www.zettle.com/dk/integrationer/e-commerce/woocommerce?utm_source=local_partnership&utm_medium=ecommerce&utm_campaign=woocommerce), [NL](https://www.zettle.com/nl/koppelingen/webshop/woocommerce?utm_source=local_partnership&utm_medium=ecommerce&utm_campaign=woocommerce), [DE](https://www.zettle.com/de/integrationen/e-commerce/woocommerce?utm_source=local_partnership&utm_medium=ecommerce&utm_campaign=woocommerce), [ES](https://www.zettle.com/es/integraciones/woocommerce?utm_source=local_partnership&utm_medium=ecommerce&utm_campaign=woocommerce), [IT](https://www.zettle.com/it/integrazioni/woocommerce?utm_source=local_partnership&utm_medium=ecommerce&utm_campaign=woocommerce), [BR](https://www.zettle.com/br/integracoes/woocommerce?utm_source=local_partnership&utm_medium=ecommerce&utm_campaign=woocommerce), [MX](https://www.zettle.com/mx/integraciones/woocommerce?utm_source=local_partnership&utm_medium=ecommerce&utm_campaign=woocommerce)

== Installation ==

= Requirements =

* WordPress 6.8 or higher
* WooCommerce 10.2 or higher
* PHP 8.2 or higher
* An active PayPal POS account

= Automatic installation =

1. Log in to your WordPress dashboard.
2. Go to *Plugins* and then *Add New*.
3. Search for *PayPal POS for WooCommerce*. Check that *PayPal* is listed as the author.
4. Click *Install Now* and wait for WordPress to confirm the installation.
5. Activate the plugin, then open *WooCommerce -> Settings -> PayPal Point of Sale* to connect your account.

= Manual installation =

1. Download the plugin archive from this page using the *Download* button.
2. Unpack the archive and upload the folder to `wp-content/plugins` on your server via FTP.
3. Go to *Plugins -> Installed Plugins* and click *Activate* on *PayPal POS for WooCommerce*.
4. Open *WooCommerce -> Settings -> PayPal Point of Sale* to connect your account.

== Frequently Asked Questions ==

= Does this plugin process payments? =

No. Payments are taken on your PayPal POS hardware and the PayPal POS app. This plugin keeps your WooCommerce catalog and stock in sync with PayPal POS.
To receive payments in your WooCommerce store via PayPal, use our [WooCommerce PayPal Payments](https://wordpress.org/plugins/woocommerce-paypal-payments/) plugin.

= Which way does stock sync? =

Both ways. A sale or stock change in WooCommerce updates PayPal POS, and a sale or stock change in PayPal POS updates WooCommerce.

= Where do I manage my products? =

In WooCommerce. It stays your source of truth. The changes you make there sync to your PayPal POS product library.

= Can I keep some products out of PayPal POS? =

Yes. You can exclude individual products from sync so they stay online only.

= Do I need a PayPal POS account? =

Yes. PayPal POS must be available in your country and you need an active account. See the country list in the description.

= Where can I find documentation? =

[You can find detailed documentation in the PayPal POS for WooCommerce docs](https://woocommerce.com/document/paypal-zettle-pos-for-woocommerce/).

= Where do I report security bugs found in this plugin? =

Please report security bugs found in the source code of the PayPal POS plugin through the [Patchstack Vulnerability Disclosure Program](https://patchstack.com/database/vdp/88f8897e-5d46-4b3a-b0eb-f67f7fafc16b). The Patchstack team will assist you with verification, CVE assignment, and notify the developers of this plugin.

== Screenshots ==

1. Take payments in person with PayPal POS while you manage everything in WooCommerce.
2. Connecting your store to PayPal POS, step 1.
3. Connecting your store to PayPal POS, step 2.
4. Connecting your store to PayPal POS, step 3.
5. Connecting your store to PayPal POS, step 4.
6. Syncing your product library to PayPal POS.
7. WooCommerce connected to PayPal POS.
8. Excluding a product from sync.

== Changelog ==

= 2.0.0 =

* Enhancement - Rebranded plugin to PayPal POS for WooCommerce
* Enhancement - Hide PayPal POS integration tab for grouped and external products
* Enhancement - Scope plugin code to prevent dependency conflicts
* Enhancement - Migrate modularity implementation to inpsyde/modularity
* Enhancement - Migrate from Psalm to PHPStan
* Enhancement - Introduced Patchstack mVDP program
* Fix - Early translation loading resulting in _load_textdomain_just_in_time notice

= 1.6.1 =
- Support latest WordPress 6.8 & WooCommerce 9.8.

= 1.6.0 =
- Prevent error when WooCommerce Product meta contains corrupted data.
- WP 6.7 deprecation warnings for translation loading.
- Early Initialization of wptexturize().
- Minimum required PHP version raised to PHP 7.4.
- Support latest WordPress 6.7 & WooCommerce 9.4.

= 1.5.9 =
- Support latest WP, WC.

= 1.5.8 =
- Added "Requires Plugins" header for WooCommerce.
- Fixed missing price when publishing a new product.
- Fixed accessing non-existing database tables on the first activation.
- Fixed PHP 8.2 deprecations.
- Executing shutdown hooks early to improve compatibility.

= 1.5.7 =
- Fixed a link in the onboarding.
- Fixed handling of column name variable type in `manage_posts_custom_column` filter.
- Fixed some random stock sync failures (clearing cache).

= 1.5.6 =
- Migrate to inventory v3 API.
- Fixed database migration query error (in Query Monitor logs etc.).

= 1.5.5 =
- WC High-Performance Order Storage compatibility declaration.
- PHP 8.1 compatibility.
- Allow merchant with WC Shop Manager role to manage the plugin.

= 1.5.4 =
- Use WP HTTP client by default (added paypal-point-of-sale.http.client filter for switching back to the php-http cUrl wrapper).
- Load product statuses in batches, not one per request.
- Do not subscribe to unneeded webhooks.
- Register webhooks at the end of onboarding.

= 1.5.3 =
- Do not send the price unit to avoid its removal.
- Do not rely on variant order in the balance change webhook handler.

= 1.5.2 =
- Fix the package compatibility with PHP 7.2.

= 1.5.1 =
- Optimize auth checks to reduce amount of requests to Zettle.
- Fixed API key change detection when saving settings, so that it takes effect immediately.
- Fixed fatal error on the settings page when auth fails.
- Delete some missing options during resetting/uninstallation (webhooks, integration id, ...).

= 1.5.0 =
- Add plugin status data on the WC Status page.
- Show unhandled errors in CLI mode.
- Add more info to the status on the settings/onboarding page.
- Show admin notice if unsupported PHP version.
- Check required PHP extensions, show notice if not present.
- Disable price sync if currency changed.
- Show a message during onboarding and do not allow price sync if tax rates are not added in WC.
- Support for `dhii/module-interface` 0.3.x.
- Use WP-based image validator.
- Use file extension to determine image type, do not use exif.
- Handle disconnection via JS dialog.
- Format dates using WP settings.
- Do not send variant description.
- Do not expose the API key in the page source code and input fields.
- Show the error about missing tax rate in the status column to improve logs and make it more clear.
- Fix barcode scanning when changing product type and when creating a new product.
- Do not duplicate validation in SDK and sync modules, update/fix validation rules.
- Validate stock quantity to not attempt sync if > 99999.
- Check if can auth before performing actions requiring auth on plugin load and plugin deactivation.
- Improve error message in log when image URL is empty.
- Handle scheduled publishing of products (was not triggering sync).

= 1.4.2 =
- Send `taxExempt` only for sales tax.

= 1.4.1 =
- Add US signup link.

= 1.4.0 =
- Sync barcodes.
- Add barcode input field with ability to scan via camera. Can be overriden via `paypal-point-of-sale.barcode.value`, `paypal-point-of-sale.barcode.standard-input-ui-enabled` filters.
- Send `taxExempt` and `createWithDefaultTax` for new products on sales tax accounts.
- Show warning during onboarding if no default taxes for sales tax.
- Use `taxationType` instead of now redundant `usesVat`.
- Set expiration time for account settings transient.
- Use `createWithDefaultTax` for VAT when no price sync, to simplify VAT handling and fix error when adding a new variation to a variable product.

= 1.3.1 =
- Clear cache (transients) after plugin upgrade.

= 1.3.0 =
* Syncing prices with or without taxes depending on Zettle taxationMode.
* Use "tax" instead of "VAT" in text, to fit all countries.

= 1.2.0 =
* Fix heartbeat filter (Elementor plugin compatibility).
* Support Zettle accounts without VAT.

= 1.1.0 =
* Delete/register WebHooks on plugin deactivation/activation.
* Execute queue on shutdown only if on admin pages to improve performance.
* Use Inpsyde client_id when requesting the API token (for tracking purposes).
* Fix API key validation request during onboarding.
* Skip stock sync if no changes to avoid errors after merging products during onboarding.

= 1.0.0 =
* First release.

== Upgrade Notice ==
