Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Correção dos descontos nas taxas de inscrição e somatória dos cupons #178

Merged
merged 109 commits into from
Jun 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
109 commits
Select commit Hold shift + click to select a range
9e67ee1
feat:Foram feitas alterações para que o plugin tenha compatibilidade …
lucastgama Feb 16, 2024
e0e1487
fix: Refatorando o codigo para o code climate
lucastgama Feb 16, 2024
0667af1
fix:Code Climate
lucastgama Feb 19, 2024
58ca519
fix:Code Climate
lucastgama Feb 19, 2024
1dea700
fix:Code Climate
lucastgama Feb 19, 2024
5062d7d
fix:Code Climate
lucastgama Feb 19, 2024
f93167e
fix:Code Climate
lucastgama Feb 19, 2024
ec41f27
fix:Code Climate
lucastgama Feb 19, 2024
e3543fc
fix:Code Climate
lucastgama Feb 19, 2024
a90fc2a
fix:Code Climate
lucastgama Feb 19, 2024
18d5d35
fix:Code Climate
lucastgama Feb 19, 2024
a3c0f10
fix:Code Climate
lucastgama Feb 19, 2024
0bd0702
fix:Code Climate
lucastgama Feb 19, 2024
300054a
fix:variavel adicionada na funçao update_order_status
lucastgama Feb 20, 2024
8de7ebc
feat: Correção do card 62, sobre o cupom que não esta sendo aplicada …
lucastgama Feb 28, 2024
31398ad
Merge branch 'apiki_tratativa_cupons_desconto' into apiki_atualizacao…
lucastgama Feb 28, 2024
dbd3e0e
docs:Atualizando o arquivo de documentação
lucastgama Feb 28, 2024
d07a452
fix: alterações exigidas pelo code climate
lucastgama Feb 28, 2024
97b89ff
fix: alterações exigidas pelo code climate
lucastgama Feb 28, 2024
8c916b2
fix: alterações exigidas pelo code climate
lucastgama Feb 28, 2024
bc52708
fix: alterações exigidas pelo code climate
lucastgama Feb 28, 2024
c4999ad
fix: alterações exigidas pelo code climate, alteração na função aply_…
lucastgama Feb 28, 2024
c6cc773
fix: foi feita a alteração na logica da função apply_remainder antes …
lucastgama Feb 28, 2024
27ac574
fix:Corrigido bug na função de cupons de assinaturas que resultava em…
lucastgama Mar 1, 2024
3d2dfbf
fix: correção na divisão do frete para os produtos avulsos
lucastgama Mar 1, 2024
28f11a5
feat: melhorias no webhooks e em seus retornos
lucastgama Apr 10, 2024
75fa9ad
fix:Resolvido conflito de merge em readme.txt
lucastgama Apr 17, 2024
3206bc3
fix: Codeclimate
lucastgama Apr 17, 2024
29e8adf
fix: nova função para enviar mensagens de erro e nova função para atu…
lucastgama Apr 17, 2024
b4d6562
fix: Alteração na função subscription_canceled para ficar de acordo …
lucastgama Apr 18, 2024
b8b589f
fix: Alteração na função bill_created, remoção de linhas e aplicando …
lucastgama Apr 18, 2024
c9019d4
fix: Alterações nos espaços do bill_paid
lucastgama Apr 18, 2024
1de5aa8
fix: Alterações nos espaços do handle_exception_rejected
lucastgama Apr 18, 2024
1b7f93d
fix: Espaçamentos exigidos pelo codeclimate
lucastgama Apr 19, 2024
61d2163
fix: Espaçamentos exigidos pelo codeclimate
lucastgama Apr 19, 2024
68479c8
fix: Espaçamentos exigidos pelo codeclimate
lucastgama Apr 19, 2024
666c4b6
fix: Espaçamentos exigidos pelo codeclimate
lucastgama Apr 19, 2024
ff960dd
fix: Espaçamentos exigidos pelo codeclimate apenas da linha 157 para …
lucastgama Apr 19, 2024
922dfde
fix: Espaçamentos exigidos pelo codeclimate apenas da linha 157 para …
lucastgama Apr 19, 2024
5ea4857
fix: Espaçamentos exigidos pelo codeclimate apenas da linha 157 para …
lucastgama Apr 19, 2024
39ebca9
fix: Espaçamentos exigidos pelo code climate
lucastgama Apr 19, 2024
969f8d5
fix: Espaçamentos exigidos pelo code climate
lucastgama Apr 19, 2024
dd04610
fix: Validando linha 157
lucastgama Apr 19, 2024
4da50b8
fix: Alterando formatação da função bill_created
lucastgama Apr 19, 2024
5ad43f9
fix: Alterando formatação da função bill_created
lucastgama Apr 19, 2024
b91aec5
fix: Alterando formatação da função bill_created
lucastgama Apr 19, 2024
ed61a1d
fix: Alterando formatação da função bill_created
lucastgama Apr 19, 2024
4264872
fix: Remoção do return
lucastgama Apr 19, 2024
c255101
fix: Remoção dos espaços
lucastgama Apr 19, 2024
68bf788
fix: linha 157 de 8 espaços para 4
lucastgama Apr 19, 2024
de4bac6
fix: linha 157 de 4 espaços para 8
lucastgama Apr 19, 2024
266f198
fix: linha 157 de 4 espaços para 8
lucastgama Apr 19, 2024
d530a47
fix: Alterada a posição da função bill_created
lucastgama Apr 19, 2024
b2b0cbc
fix: Alterada o espaçamento
lucastgama Apr 19, 2024
89c0fde
fix: Alterada o espaçamento
lucastgama Apr 19, 2024
599b82e
fix: Atualizado a branch
lucastgama Apr 19, 2024
72afd0c
fix: Alterada o espaçamento
lucastgama Apr 19, 2024
311f506
fix: Alterada o espaçamento
lucastgama Apr 19, 2024
0192502
fix: Alterada o espaçamento bill_created
lucastgama Apr 19, 2024
e2669e7
fix: Alterada o espaçamento bill_paid
lucastgama Apr 19, 2024
bfdcc3b
fix: Alterada o espaçamento subscription_canceled
lucastgama Apr 19, 2024
43ddc2c
fix: Alterada o espaçamento subscription_reactivated
lucastgama Apr 19, 2024
4319c0f
fix: Alterada o espaçamento subscription_reactivated
lucastgama Apr 19, 2024
6bdfe14
fix: Alterada o espaçamento subscription_reactivated
lucastgama Apr 19, 2024
3c55ae4
Merge changes from apiki_webhooks branch
lucastgama May 3, 2024
33a040c
feat: Adição da função para limita a mesma assinatura
lucastgama May 6, 2024
c1a411c
fix:Desconto com porcentagem e desconto fixos arrumados, foi necessar…
lucastgama May 10, 2024
647c253
fix: alterações no fee
lucastgama May 14, 2024
0822836
fix: remove error_log
lucastgama May 14, 2024
7894aa9
fix: remoção de elses nao utilizados
lucastgama May 15, 2024
e5c3a65
fix:conflitos com o merge
lucastgama May 15, 2024
dbf34b5
fix: remoção de comentarios e funções que estavam sendo utilizadas pa…
lucastgama May 20, 2024
bc4e237
feat: alteração no webhook bill_created para que posso alterar a assi…
lucastgama May 21, 2024
b1fe48e
feat: Alterações completa, no momento as assinaturas trial não passam…
lucastgama May 22, 2024
02f6f02
fix: Descontos em porcentagem agora desconta o produto e a taxa de in…
lucastgama Jun 3, 2024
4eadb7c
feat: remoção das funções de auxilio para trial com cupom, alteração …
lucastgama Jun 10, 2024
d62b35c
feat: Cupons do tipo 'fixed_product' agora são multiplicados pela qua…
lucastgama Jun 11, 2024
bee967e
fix: Arredondamento de cupons de porcentagem para baixo quando os núm…
lucastgama Jun 12, 2024
cbee2df
fix: Remoção do arrendodamento dos cupons de porcentagens
lucastgama Jun 12, 2024
dd72eda
fix: Melhoria na complexidades cognitivas das funções, limit_same_sub…
lucastgama Jun 13, 2024
d87f220
fix: Melhoria na complexidade cognitiva da função calculate_discount
lucastgama Jun 13, 2024
375d121
fix: Melhoria na complexidade cognitiva da função build_product_items…
lucastgama Jun 13, 2024
9bf124c
fix: remoção do foreach dentro de outro foreach com os mesmo parametros
lucastgama Jun 14, 2024
7974052
fix: Remoção das alterações feitas na função build_discount_item_for_…
lucastgama Jun 14, 2024
7b35113
fix: Remoção das linhas nao utilizadas na função build_discount_item_…
lucastgama Jun 14, 2024
09ffbf2
fix: Atualização da função bill_created, diminuição da complexidade
lucastgama Jun 17, 2024
0baa800
fix: Correção dos espaços exigidos no arquivo VindiWoocommerce
lucastgama Jun 17, 2024
8717d5d
fix: Correção do else na função apply_remainder e evitando acesso est…
lucastgama Jun 17, 2024
90bff0d
fix: Evitando multiplos retornos na função bill_created
lucastgama Jun 17, 2024
d640357
fix: Espaçamento no arquivo VindiWoocommerce
lucastgama Jun 17, 2024
75615f2
fix: Espaçamento no arquivo Webhooks
lucastgama Jun 17, 2024
9ee6f5d
fix: Espaçamento
lucastgama Jun 17, 2024
2548f6b
fix: Espaçamento
lucastgama Jun 17, 2024
57a0d36
fix: Espaçamento
lucastgama Jun 17, 2024
17f7a59
fix: Removendo metodos da class VindiWebhooks
lucastgama Jun 17, 2024
ad45a23
fix: Criação de uma nova classe dentro do arquivo webhooks para auxil…
lucastgama Jun 18, 2024
2dda72f
fix: Criação de uma nova classe dentro do arquivo webhooks para auxil…
lucastgama Jun 18, 2024
0976762
fix: Novo arquivo com classes auxiliadores para o webhooks
lucastgama Jun 18, 2024
e2123c4
fix: Novo arquivo com classes auxiliadores para o webhooks
lucastgama Jun 18, 2024
6ce5600
fix: Novo arquivo com classes auxiliadores para o webhooks
lucastgama Jun 18, 2024
6510770
fix: Espaçamentos
lucastgama Jun 18, 2024
78da903
fix: Espaçamentos
lucastgama Jun 18, 2024
ce7bd4b
fix: Funções no webhooksHelpes escrita de forma errada
lucastgama Jun 18, 2024
56864f8
fix: Funções no webhooksHelpes escrita de forma errada
lucastgama Jun 18, 2024
a8c89f5
fix: Corrigido espaçamento nas funções do webhookHelpers e ajustado p…
lucastgama Jun 18, 2024
4e50b15
fix: Corrigido espaçamento nas funções do webhookHelpers e ajustado p…
lucastgama Jun 18, 2024
69f12e9
fix: Corrigido espaçamento nas funções do webhookHelpers e ajustado p…
lucastgama Jun 18, 2024
95fb78a
fix: webhooks atualização dos status da assinatura
lucastgama Jun 20, 2024
5742ebb
fix: webhooks atualização dos status da assinatura
lucastgama Jun 20, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 15 additions & 2 deletions readme.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@ Tested up to: 6.4
WC requires at least: 3.0.0
WC tested up to: 8.6.1
Requires PHP: 5.6
Stable Tag: 1.3.0
Stable Tag: 1.3.2
License: GPLv3
License URI: http://www.gnu.org/licenses/gpl-3.0.html

Venda de assinaturas de produtos e serviços pelo plugin de cobrança recorrente para o WooCommerce.

== Description ==
O **Vindi WooCommerce** oferece uma solução completa para pagamentos únicos e assinaturas com cartão de crédito e boleto utilizando o [Woocommerce Subscriptions](https://www.woothemes.com/products/woocommerce-subscriptions/). Basta ter [uma conta habilitada na Vindi](https://www.vindi.com.br/cadastro/) para começar a cobrar seus clientes.
O **Vindi WooCommerce** oferece uma solução completa para pagamentos únicos e assinaturas com cartão de crédito, boleto, bolePix e Pix utilizando o [Woocommerce Subscriptions](https://www.woothemes.com/products/woocommerce-subscriptions/). Basta ter [uma conta habilitada na Vindi](https://www.vindi.com.br/cadastro/) para começar a cobrar seus clientes.

A [Vindi](https://www.vindi.com.br/) é líder em cobrança recorrente no Brasil. Com milhares de clientes usando soluções como pagamento online, soluções de notas fiscais integradas, emissão de boletos por email e PDF, integrações com ERPs e diversos relatórios, a Vindi possibilita um sistema online completo para negócios de venda recorrente. Além disso, empresas podem usar o gateway de pagamento integrado ao billing recorrente ou para faturas avulsas.

Expand All @@ -40,11 +40,24 @@ Para dúvidas e suporte técnico, entre em contato com a equipe Vindi através d

== Changelog ==

= 1.3.2 - 22/05/2024 =
-Lançamento da versão de patch.
- **Correção:** As assinaturas com trial não estão mais passando do tempo limite
- **Correção:** Texto da descrição do plugin agora possui bolePix e Pix
- **Correção:** Alteração do texto que informava a proibição de ter assinatura e produto avulso no mesmo carrinho

= 1.3.1 - 15/05/2024 =
-Lançamento da versão de patch.
- **Correção:** Utilização de cupons para desconto dos produtos que possuem taxa
- **Correção:** Não é mais possível a comprar de uma assinatura com produto avulso no mesmo carrinho
- **Correção:** Não pode mais comprar duas assinaturas iguais

= 1.3.0 - 06/05/2024 =
-Lançamento da versão de patch.
- **Melhoria:** Refatoração nas funções de processamento de webhooks
- **Correção:** Atualização de expressões regulares para identificação de bandeiras de cartão


= 1.2.9 - 18/04/2024 =
-Lançamento da versão de patch.
- **Correção:** Utilização da função save durante atualização de metadados com HPOS
Expand Down
256 changes: 191 additions & 65 deletions src/VindiWoocommerce.php
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<?php

namespace VindiPaymentGateways;

use WC_Subscriptions_Product;
Expand All @@ -11,71 +12,71 @@
*/
class WcVindiPayment extends AbstractInstance
{
/**
* @var string
*/
const TEMPLATE_DIR = '/templates/';
/**
* @var string
*/
const TEMPLATE_DIR = '/templates/';

/**
* @var string
*/
const WC_API_CALLBACK = 'vindi_webhook';
/**
* @var string
*/
const WC_API_CALLBACK = 'vindi_webhook';

/**
* Instance of this class.
*
* @var object
*/
static $instance = null;
/**
* Instance of this class.
*
* @var object
*/
static $instance = null;

/**
* @var VindiPaymentGateway\VindiLanguages
*/
private $languages;
/**
* @var VindiPaymentGateway\VindiLanguages
*/
private $languages;

/**
* @var VindiPaymentGateway\VindiSettings
*/
private $settings;
/**
* @var VindiPaymentGateway\VindiSettings
*/
private $settings;

/**
* @var VindiPaymentGateway\VindiControllers
*/
private $controllers;
/**
* @var VindiPaymentGateway\VindiControllers
*/
private $controllers;

/**
* @var VindiPaymentGateway\VindiWebhooks
*/
private $webhooks;
/**
* @var VindiPaymentGateway\VindiWebhooks
*/
private $webhooks;

/**
* @var VindiPaymentGateway\FrontendFilesLoader
*/
private $frontend_files_loader;
/**
* @var VindiPaymentGateway\FrontendFilesLoader
*/
private $frontend_files_loader;

/**
* @var VindiPaymentGateway\VindiSubscriptionStatusHandler
*/
private $subscription_status_handler;
/**
* @var VindiPaymentGateway\VindiSubscriptionStatusHandler
*/
private $subscription_status_handler;

/**
* @var VindiPaymentGateway\ProductsMetabox
*/
/**
* @var VindiPaymentGateway\ProductsMetabox
*/
private $product_metabox;

/**
* @var VindiPaymentGateway\VindiProductStatus
*/
/**
* @var VindiPaymentGateway\VindiProductStatus
*/
private $vindi_status_notifier;

/**
* @var VindiPaymentGateway\InterestPriceHandler
*/
/**
* @var VindiPaymentGateway\InterestPriceHandler
*/
private $interest_price_handler;

/**
* @var VindiWCSRenewalDisable
*/
/**
* @var VindiWCSRenewalDisable
*/
private $wcs_renewal_disable;

public function __construct()
Expand All @@ -99,20 +100,24 @@ public function __construct()


/**
* Add Gateway to Woocommerce
*/
* Add Gateway to Woocommerce
*/
add_filter('woocommerce_payment_gateways', array(&$this, 'add_gateway'));

/**
* Register webhook handler
*/
* Register webhook handler
*/
add_action('woocommerce_api_' . self::WC_API_CALLBACK, array(
$this->webhooks, 'handle'
));

add_filter('woocommerce_add_to_cart_validation', [$this, 'limit_same_subscriptions'], 10, 3);
add_filter('woocommerce_update_cart_validation', [$this, 'limit_duplicate_subscriptions_cart_update'], 10, 4);
add_filter('woocommerce_add_to_cart_validation', [$this, 'disallow_subscription_single_product_cart'], 10, 4);
add_filter('woocommerce_cart_needs_payment', [$this, 'filter_woocommerce_cart_needs_payment'], 10, 2);
add_action('wp_ajax_renew_pix_charge', [$this, 'renew_pix_charge']);
add_action('wp_ajax_nopriv_renew_pix_charge', [$this, 'renew_pix_charge']);
do_action('woocommerce_set_cart_cookies', true);
}

/**
Expand All @@ -129,6 +134,8 @@ public function init()
require_once plugin_dir_path(__FILE__) . '/i18n/Languages.php';
require_once plugin_dir_path(__FILE__) . '/services/VindiHelpers.php';
require_once plugin_dir_path(__FILE__) . '/services/Webhooks.php';
require_once plugin_dir_path(__FILE__) . '/services/WebhooksHelpers.php';


// Loading Abstract Method and Utils
require_once plugin_dir_path(__FILE__) . '/utils/PaymentGateway.php';
Expand All @@ -137,7 +144,7 @@ public function init()
require_once plugin_dir_path(__FILE__) . '/utils/PostMeta.php';

require_once plugin_dir_path(__FILE__) . '/includes/admin/CouponsMetaBox.php';
require_once plugin_dir_path(__FILE__) . '/includes/admin/ProductsMetabox.php';
require_once plugin_dir_path(__FILE__) . '/includes/admin/ProductsMetabox.php';
require_once plugin_dir_path(__FILE__) . '/includes/admin/Settings.php';
require_once plugin_dir_path(__FILE__) . '/includes/gateways/CreditPayment.php';
require_once plugin_dir_path(__FILE__) . '/includes/gateways/BankSlipPayment.php';
Expand Down Expand Up @@ -211,20 +218,21 @@ private function cart_has_trial($cart)
$items = $cart->get_cart();
foreach ($items as $item) {
if (class_exists('WC_Subscriptions_Product')
&& WC_Subscriptions_Product::get_trial_length($item['product_id']) > 0) {
return true;
&& WC_Subscriptions_Product::get_trial_length($item['product_id']) > 0
) {
return true;
}
}

return false;
}

public function renew_pix_charge()
{
$order_id = filter_input(INPUT_POST, 'order_id', FILTER_SANITIZE_NUMBER_INT);
$charge_id = filter_input(INPUT_POST, 'charge_id', FILTER_SANITIZE_NUMBER_INT);
$subscription_id = filter_input(INPUT_POST, 'subscription_id', FILTER_SANITIZE_NUMBER_INT);

$order = wc_get_order($order_id);
$vindi_order = $order->get_meta('vindi_order', true);

Expand All @@ -237,12 +245,12 @@ public function renew_pix_charge()

$subscription = $vindi_order[$subscription_id];
$bill = [
'id' => $subscription['bill']['id'],
'status' => $subscription['bill']['status'],
'charge_id' => $charge['id'],
'pix_expiration' => $last_transaction['max_days_to_keep_waiting_payment'],
'pix_code' => $last_transaction['qrcode_original_path'],
'pix_qr' => $last_transaction['qrcode_path'],
'id' => $subscription['bill']['id'],
'status' => $subscription['bill']['status'],
'charge_id' => $charge['id'],
'pix_expiration' => $last_transaction['max_days_to_keep_waiting_payment'],
'pix_code' => $last_transaction['qrcode_original_path'],
'pix_qr' => $last_transaction['qrcode_path'],
];

$vindi_order[$subscription_id]['bill'] = $bill;
Expand All @@ -251,6 +259,124 @@ public function renew_pix_charge()
}
}
}

public function limit_same_subscriptions($passed, $product_id, $quantity)
{
$product = wc_get_product($product_id);

if ($product->is_virtual()) {
return $passed;
}

if (WC_Subscriptions_Product::is_subscription($product_id)) {
$subscription_count = $this->get_subscription_count($product_id);

if ($subscription_count + $quantity > 1) {
wc_add_notice('Você só pode ter até 1 assinatura do mesmo produto no seu carrinho.', 'error');
return false;
}
}

return $passed;
}

public function get_subscription_count($product_id)
{
$cart = WC()->cart->get_cart();
$subscription_count = 0;

foreach ($cart as $cart_item) {
if ($cart_item['data']->get_id() === $product_id) {
$subscription_count += $cart_item['quantity'];
}
}

return $subscription_count;
}

public function limit_duplicate_subscriptions_cart_update($passed, $cart_item_key, $values, $quantity)
{
$product_id = $values['product_id'];
$product = wc_get_product($product_id);

if ($this->is_virtual_product($product)) {
return $passed;
}

if ($this->subscription_exceeds_limit($product_id, $quantity)) {
return false;
}

return $passed;
}

public function is_virtual_product($product)
{
return $product->is_virtual();
}

public function subscription_exceeds_limit($product_id, $quantity)
{
if (WC_Subscriptions_Product::is_subscription($product_id)) {
$subscription_count = $this->count_subscriptions_in_cart($product_id);

if ($subscription_count >= 1 && $quantity > 1) {
$message ='Você só pode ter até 1 assinatura do mesmo produto no seu carrinho.';
wc_add_notice(__($message, 'vindi-payment-gateway'), 'error');
return true;
}
}

return false;
}

public function count_subscriptions_in_cart($product_id)
{
$subscription_count = 0;
foreach (WC()->cart->get_cart() as $cart_item) {
if ($cart_item['data']->get_id() === $product_id) {
$subscription_count++;
}
}
return $subscription_count;
}

public function disallow_subscription_single_product_cart($passed, $product_id, $quantity)
{
$product = wc_get_product($product_id);

if ($product->is_virtual()) {
return $passed;
}

if ($this->is_cart_mixed_with_subscription($product_id)) {
wc_add_notice(__('Olá! Finalize a compra da assinatura adicionada
ao carrinho antes de adicionar outra assinatura ou produto.', 'vindi-payment-gateway'), 'error');
return false;
}

return $passed;
}

public function is_cart_mixed_with_subscription($product_id)
{
$cart = WC()->cart->get_cart();
if (empty($cart)) {
return false;
}

$is_subscription = false;
$new_product_subscription = WC_Subscriptions_Product::is_subscription($product_id);

foreach ($cart as $cart_item) {
if (WC_Subscriptions_Product::is_subscription($cart_item['data']->get_id())) {
$is_subscription = true;
break;
}
}

return $is_subscription !== $new_product_subscription;
}
}

add_action('plugins_loaded', array(WcVindiPayment::class, 'get_instance'));
Loading
Loading