1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-11-12 14:12:44 +01:00

BTCPay : Improve refund

Signed-off-by: Nisaba <34550856+Nisaba@users.noreply.github.com>
This commit is contained in:
Nisaba 2024-05-30 13:34:43 +00:00 committed by GitHub
parent 354cc3343b
commit 5a5420603e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 138 additions and 239 deletions

View File

@ -20,6 +20,10 @@ use App\Utils\Traits\MakesHash;
use App\PaymentDrivers\Common\MethodInterface;
use App\Http\Requests\ClientPortal\Payments\PaymentResponseRequest;
use App\Exceptions\PaymentFailed;
use Illuminate\Mail\Mailables\Address;
use App\Services\Email\EmailObject;
use App\Services\Email\Email;
use Illuminate\Support\Facades\App;
class BTCPay implements MethodInterface
{
@ -128,18 +132,55 @@ class BTCPay implements MethodInterface
public function refund(Payment $payment, $amount)
{
try {
$invoice = $payment->invoices()->first();
$isPartialRefund = ($amount < $payment->amount);
if ($amount == $payment->amount) {
$refundVariant = "Fiat";
$refundPaymentMethod = "BTC";
$refundDescription = "Full refund";
$refundCustomCurrency = null;
$refundCustomAmount = null;
} else {
$refundVariant = "Custom";
$refundPaymentMethod = "";
$refundDescription = "Partial refund";
$refundCustomCurrency = $payment->currency;
$refundCustomAmount = $amount;
}
$client = new \BTCPayServer\Client\Invoice($this->driver_class->btcpay_url, $this->driver_class->api_key);
$refund = $client->refundInvoice($this->driver_class->store_id, $payment->transaction_reference);
$refund = $client->refundInvoice(
$this->driver_class->store_id,
$payment->transaction_reference,
$refundVariant,
$refundPaymentMethod,
null,
$refundDescription,
0,
$refundCustomAmount,
$refundCustomCurrency
);
App::setLocale($payment->company->getLocale());
/* $data = [];
$data['InvoiceNumber'] = $invoice->number;
$data['isPartialRefund'] = $isPartialRefund;
$data['BTCPayLink'] = $refund->getViewLink();*/
$mo = new EmailObject();
$mo->subject = ctrans('texts.btcpay_refund_subject');
$mo->body = ctrans('texts.btcpay_refund_body') . '<br>' . $refund->getViewLink();
$mo->text_body = ctrans('texts.btcpay_refund_body') . '\n' . $refund->getViewLink();
$mo->company_key = $payment->company->company_key;
$mo->html_template = 'email.template.generic';
$mo->to = [new Address($payment->client->present()->email(), $payment->client->present()->name())];
$mo->email_template_body = 'btcpay_refund_subject';
$mo->email_template_subject = 'btcpay_refund_body';
return $refund->getViewLink();
Email::dispatch($mo, $payment->company);
$data = [
'transaction_reference' => $refund->getId(),
'transaction_response' => json_encode($refund),
'success' => true,
'description' => "Please follow this link to claim your refund: " . $refund->getViewLink(),
'code' => 202,
];
return $data;
} catch (\Throwable $e) {
throw new PaymentFailed('Error during BTCPay refund : ' . $e->getMessage());
}

View File

@ -79,10 +79,14 @@ class BTCPayPaymentDriver extends BaseDriver
return $this->payment_method->paymentView($data); //this is your custom implementation from here
}
public function processPaymentResponse($request)
{
return $this->payment_method->paymentResponse($request);
}
public function processWebhookRequest()
{
$webhook_payload = file_get_contents('php://input');
//file_put_contents("/home/claude/invoiceninja/storage/my.log", $webhook_payload);
$btcpayRep = json_decode($webhook_payload);
if ($btcpayRep == null) {

View File

@ -199,7 +199,7 @@ $lang = array(
'removed_logo' => 'Successfully removed logo',
'sent_message' => 'Successfully sent message',
'invoice_error' => 'Please make sure to select a client and correct any errors',
'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!.',
'limit_clients' => 'Sorry, this will exceed the limit of :count clients. Please upgrade to a paid plan.',
'payment_error' => 'There was an error processing your payment. Please try again later.',
'registration_required' => 'Registration Required',
'confirmation_required' => 'Please confirm your email address, :link to resend the confirmation email.',
@ -460,9 +460,9 @@ $lang = array(
'edit_token' => 'Edit Token',
'delete_token' => 'Delete Token',
'token' => 'Token',
'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Delete Payment Gateway',
'edit_gateway' => 'Edit Payment Gateway',
'add_gateway' => 'Add Gateway',
'delete_gateway' => 'Delete Gateway',
'edit_gateway' => 'Edit Gateway',
'updated_gateway' => 'Successfully updated gateway',
'created_gateway' => 'Successfully created gateway',
'deleted_gateway' => 'Successfully deleted gateway',
@ -605,6 +605,7 @@ $lang = array(
'email_error' => 'There was a problem sending the email',
'confirm_recurring_timing' => 'Note: emails are sent at the start of the hour.',
'confirm_recurring_timing_not_sent' => 'Note: invoices are created at the start of the hour.',
'payment_terms_help' => 'Sets the default <b>invoice due date</b>',
'unlink_account' => 'Unlink Account',
'unlink' => 'Unlink',
'show_address' => 'Show Address',
@ -1172,8 +1173,8 @@ $lang = array(
'invoice_number_padding' => 'Padding',
'preview' => 'Preview',
'list_vendors' => 'List Vendors',
'add_users_not_supported' => 'Upgrade to the Enterprise Plan to add additional users to your account.',
'enterprise_plan_features' => 'The Enterprise Plan adds support for multiple users and file attachments, :link to see the full list of features.',
'add_users_not_supported' => 'Upgrade to the Enterprise plan to add additional users to your account.',
'enterprise_plan_features' => 'The Enterprise plan adds support for multiple users and file attachments, :link to see the full list of features.',
'return_to_app' => 'Return To App',
@ -1322,7 +1323,7 @@ $lang = array(
'security' => 'Security',
'see_whats_new' => 'See what\'s new in v:version',
'wait_for_upload' => 'Please wait for the document upload to complete.',
'upgrade_for_permissions' => 'Upgrade to our Enterprise Plan to enable permissions.',
'upgrade_for_permissions' => 'Upgrade to our Enterprise plan to enable permissions.',
'enable_second_tax_rate' => 'Enable specifying a <b>second tax rate</b>',
'payment_file' => 'Payment File',
'expense_file' => 'Expense File',
@ -2058,6 +2059,7 @@ $lang = array(
'freq_two_months' => 'Two months',
'freq_yearly' => 'Annually',
'profile' => 'Profile',
'payment_type_help' => 'Sets the default <b>manual payment type</b>.',
'industry_Construction' => 'Construction',
'your_statement' => 'Your Statement',
'statement_issued_to' => 'Statement issued to',
@ -2195,9 +2197,7 @@ $lang = array(
'encryption' => 'Encryption',
'mailgun_domain' => 'Mailgun Domain',
'mailgun_private_key' => 'Mailgun Private Key',
'brevo_domain' => 'Brevo Domain',
'brevo_private_key' => 'Brevo Private Key',
'send_test_email' => 'Send Test Email',
'send_test_email' => 'Send test email',
'select_label' => 'Select Label',
'label' => 'Label',
'service' => 'Service',
@ -2695,7 +2695,7 @@ $lang = array(
'no_assets' => 'No images, drag to upload',
'add_image' => 'Add Image',
'select_image' => 'Select Image',
'upgrade_to_upload_images' => 'Upgrade to the Enterprise Plan to upload images',
'upgrade_to_upload_images' => 'Upgrade to the enterprise plan to upload images',
'delete_image' => 'Delete Image',
'delete_image_help' => 'Warning: deleting the image will remove it from all proposals.',
'amount_variable_help' => 'Note: the invoice $amount field will use the partial/deposit field if set otherwise it will use the invoice balance.',
@ -3051,7 +3051,7 @@ $lang = array(
'valid_until_days' => 'Valid Until',
'valid_until_days_help' => 'Automatically sets the <b>Valid Until</b> value on quotes to this many days in the future. Leave blank to disable.',
'usually_pays_in_days' => 'Days',
'requires_an_enterprise_plan' => 'Requires an Enterprise Plan',
'requires_an_enterprise_plan' => 'Requires an enterprise plan',
'take_picture' => 'Take Picture',
'upload_file' => 'Upload File',
'new_document' => 'New Document',
@ -3153,7 +3153,7 @@ $lang = array(
'archived_group' => 'Successfully archived group',
'deleted_group' => 'Successfully deleted group',
'restored_group' => 'Successfully restored group',
'upload_logo' => 'Upload Your Company Logo',
'upload_logo' => 'Upload Logo',
'uploaded_logo' => 'Successfully uploaded logo',
'saved_settings' => 'Successfully saved settings',
'device_settings' => 'Device Settings',
@ -3975,7 +3975,7 @@ $lang = array(
'notification_credit_bounced_subject' => 'Unable to deliver Credit :invoice',
'save_payment_method_details' => 'Save payment method details',
'new_card' => 'New card',
'new_bank_account' => 'Add Bank Account',
'new_bank_account' => 'New bank account',
'company_limit_reached' => 'Limit of :limit companies per account.',
'credits_applied_validation' => 'Total credits applied cannot be MORE than total of invoices',
'credit_number_taken' => 'Credit number already taken',
@ -4029,7 +4029,7 @@ $lang = array(
'user_detached' => 'User detached from company',
'create_webhook_failure' => 'Failed to create Webhook',
'payment_message_extended' => 'Thank you for your payment of :amount for :invoice',
'online_payments_minimum_note' => 'Note: Online payments are supported only if amount is larger than $1 or currency equivalent.',
'online_payments_minimum_note' => 'Note: Online payments are supported only if amount is bigger than $1 or currency equivalent.',
'payment_token_not_found' => 'Payment token not found, please try again. If an issue still persist, try with another payment method',
'vendor_address1' => 'Vendor Street',
'vendor_address2' => 'Vendor Apt/Suite',
@ -4170,7 +4170,7 @@ $lang = array(
'one_time_purchases' => 'One time purchases',
'recurring_purchases' => 'Recurring purchases',
'you_might_be_interested_in_following' => 'You might be interested in the following',
'quotes_with_status_sent_can_be_approved' => 'Only quotes with "Sent" status can be approved. Expired quotes cannot be approved.',
'quotes_with_status_sent_can_be_approved' => 'Only quotes with "Sent" status can be approved.',
'no_quotes_available_for_download' => 'No quotes available for download.',
'copyright' => 'Copyright',
'user_created_user' => ':user created :created_user at :time',
@ -4236,7 +4236,7 @@ $lang = array(
'payment_type_Bancontact' => 'Bancontact',
'payment_type_BECS' => 'BECS',
'payment_type_ACSS' => 'ACSS',
'gross_line_total' => 'Gross Line Total',
'gross_line_total' => 'Gross line total',
'lang_Slovak' => 'Slovak',
'normal' => 'Normal',
'large' => 'Large',
@ -4847,7 +4847,6 @@ $lang = array(
'email_alignment' => 'Email Alignment',
'pdf_preview_location' => 'PDF Preview Location',
'mailgun' => 'Mailgun',
'brevo' => 'Brevo',
'postmark' => 'Postmark',
'microsoft' => 'Microsoft',
'click_plus_to_create_record' => 'Click + to create a record',
@ -5086,6 +5085,7 @@ $lang = array(
'mercado_pago' => 'Mercado Pago',
'mybank' => 'MyBank',
'paypal_paylater' => 'Pay in 4',
'paid_date' => 'Paid Date',
'district' => 'District',
'region' => 'Region',
'county' => 'County',
@ -5099,8 +5099,6 @@ $lang = array(
'drop_files_here' => 'Drop files here',
'upload_files' => 'Upload Files',
'download_e_invoice' => 'Download E-Invoice',
'download_e_credit' => 'Download E-Credit',
'download_e_quote' => 'Download E-Quote',
'triangular_tax_info' => 'Intra-community triangular transaction',
'intracommunity_tax_info' => 'Tax-free intra-community delivery',
'reverse_tax_info' => 'Please note that this supply is subject to reverse charge',
@ -5193,7 +5191,7 @@ $lang = array(
'nordigen_handler_error_heading_account_config_invalid' => 'Missing Credentials',
'nordigen_handler_error_contents_account_config_invalid' => 'Invalid or missing credentials for Gocardless Bank Account Data. Contact support for help, if this issue persists.',
'nordigen_handler_error_heading_not_available' => 'Not Available',
'nordigen_handler_error_contents_not_available' => 'Feature unavailable, Enterprise Plan only.',
'nordigen_handler_error_contents_not_available' => 'Feature unavailable, enterprise plan only.',
'nordigen_handler_error_heading_institution_invalid' => 'Invalid Institution',
'nordigen_handler_error_contents_institution_invalid' => 'The provided institution-id is invalid or no longer valid.',
'nordigen_handler_error_heading_ref_invalid' => 'Invalid Reference',
@ -5203,7 +5201,7 @@ $lang = array(
'nordigen_handler_error_heading_requisition_invalid_status' => 'Not Ready',
'nordigen_handler_error_contents_requisition_invalid_status' => 'You called this site too early. Please finish authorization and refresh this page. Contact support for help, if this issue persists.',
'nordigen_handler_error_heading_requisition_no_accounts' => 'No Accounts selected',
'nordigen_handler_error_contents_requisition_no_accounts' => 'The service has not returned any valid accounts. Consider restarting the flow.',
'nordigen_handler_error_contents_requisition_no_accounts' => 'The service has not returned any valid accounts. Considder restarting the flow.',
'nordigen_handler_restart' => 'Restart flow.',
'nordigen_handler_return' => 'Return to application.',
'lang_Lao' => 'Lao',
@ -5239,95 +5237,12 @@ $lang = array(
'user_sales' => 'User Sales',
'iframe_url' => 'iFrame URL',
'user_unsubscribed' => 'User unsubscribed from emails :link',
'out_of_stock' => 'Out of stock',
'step_dependency_fail' => 'Component ":step" requires at least one of it\'s dependencies (":dependencies") in the list.',
'step_dependency_order_fail' => 'Component ":step" depends on ":dependency". Make component(s) order is correct.',
'step_authentication_fail' => 'You must include at least one of authentication methods.',
'auth.login' => 'Login',
'auth.login-or-register' => 'Login or Register',
'auth.register' => 'Register',
'cart' => 'Cart',
'methods' => 'Methods',
'rff' => 'Required fields form',
'add_step' => 'Add step',
'steps' => 'Steps',
'steps_order_help' => 'The order of the steps is important. The first step should not depend on any other step. The second step should depend on the first step, and so on.',
'other_steps' => 'Other steps',
'use_available_payments' => 'Use Available Payments',
'test_email_sent' => 'Successfully sent email',
'gateway_type' => 'Gateway Type',
'save_template_body' => 'Would you like to save this import mapping as a template for future use?',
'save_as_template' => 'Save Template Mapping',
'checkout_only_for_existing_customers' => 'Checkout is enabled only for existing customers. Please login with existing account to checkout.',
'checkout_only_for_new_customers' => 'Checkout is enabled only for new customers. Please register a new account to checkout.',
'auto_bill_standard_invoices_help' => 'Auto bill standard invoices on the due date',
'auto_bill_on_help' => 'Auto bill on send date OR due date (recurring invoices)',
'use_available_credits_help' => 'Apply any credit balances to payments prior to charging a payment method',
'use_unapplied_payments' => 'Use unapplied payments',
'use_unapplied_payments_help' => 'Apply any payment balances prior to charging a payment method',
'payment_terms_help' => 'The number of days after the invoice date that payment is due',
'payment_type_help' => 'The default payment type to be used for payments',
'quote_valid_until_help' => 'The number of days that the quote is valid for',
'expense_payment_type_help' => 'The default expense payment type to be used',
'paylater' => 'Pay in 4',
'payment_provider' => 'Payment Provider',
'select_email_provider' => 'Set your email as the sending user',
'purchase_order_items' => 'Purchase Order Items',
'csv_rows_length' => 'No data found in this CSV file',
'accept_payments_online' => 'Accept Payments Online',
'all_payment_gateways' => 'View all payment gateways',
'product_cost' => 'Product cost',
'duration_words' => 'Duration in words',
'upcoming_recurring_invoices' => 'Upcoming Recurring Invoices',
'shipping_country_id' => 'Shipping Country',
'show_table_footer' => 'Show table footer',
'show_table_footer_help' => 'Displays the totals in the footer of the table',
'total_invoices' => 'Total Invoices',
'add_to_group' => 'Add to group',
'check_credentials' => 'Check Credentials',
'valid_credentials' => 'Credentials are valid',
'e_quote' => 'E-Quote',
'e_credit' => 'E-Credit',
'e_purchase_order' => 'E-Purchase Order',
'e_quote_type' => 'E-Quote Type',
'unlock_unlimited_clients' => 'Please upgrade to unlock unlimited clients!',
'download_e_purchase_order' => 'Download E-Purchase Order',
'flutter_web_warning' => 'We recommend using the new web app or the desktop app for the best performance',
'rappen_rounding' => 'Rappen Rounding',
'rappen_rounding_help' => 'Round amount to 5 cents',
'assign_group' => 'Assign group',
'paypal_advanced_cards' => 'Advanced Card Payments',
'local_domain_help' => 'EHLO domain (optional)',
'port_help' => 'ie. 25,587,465',
'host_help' => 'ie. smtp.gmail.com',
'always_show_required_fields' => 'Allows show required fields form',
'always_show_required_fields_help' => 'Displays the required fields form always at checkout',
'advanced_cards' => 'Advanced Cards',
'activity_140' => 'Statement sent to :client',
'invoice_net_amount' => 'Invoice Net Amount',
'round_to_minutes' => 'Round To Minutes',
'1_minute' => '1 Minute',
'5_minutes' => '5 Minutes',
'15_minutes' => '15 Minutes',
'30_minutes' => '30 Minutes',
'1_hour' => '1 Hour',
'1_day' => '1 Day',
'round_tasks' => 'Round Tasks',
'round_tasks_help' => 'Round time intervals when saving tasks',
'direction' => 'Direction',
'round_up' => 'Round Up',
'round_down' => 'Round Down',
'task_round_to_nearest' => 'Round To Nearest',
'bulk_updated' => 'Successfully updated data',
'bulk_update' => 'Bulk Update',
'calculate' => 'Calculate',
'sum' => 'Sum',
'money' => 'Money',
'web_app' => 'Web App',
'desktop_app' => 'Desktop App',
'disconnected' => 'Disconnected',
'reconnect' => 'Reconnect',
'e_invoice_settings' => 'E-Invoice Settings',
'btcpay_refund_subject' => 'Refund of your invoice via BTCPay',
'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
);
return $lang;

View File

@ -199,7 +199,7 @@ $lang = array(
'removed_logo' => 'Logo supprimé avec succès',
'sent_message' => 'Message envoyé avec succès',
'invoice_error' => 'Veuillez vous assurer de sélectionner un client et de corriger les erreurs',
'limit_clients' => 'Vous avez atteint la limite de clients :count sur les comptes gratuits. Félicitations pour votre succès !.',
'limit_clients' => 'Désolé, cela va dépasser la limite de :count clients. Veuillez passer à un forfait payant.',
'payment_error' => 'Il y a eu une erreur lors du traitement de votre paiement. Veuillez réessayer ultérieurement',
'registration_required' => 'Enregistrement Requis',
'confirmation_required' => 'Veuillez confirmer votre adresse e-mail, :link pour renvoyer l\'e-mail de confirmation.',
@ -460,9 +460,9 @@ $lang = array(
'edit_token' => 'Éditer ce jeton',
'delete_token' => 'Supprimer ce jeton',
'token' => 'Jeton',
'add_gateway' => 'Ajouter une passerelle de paiement',
'delete_gateway' => 'Supprimer la passerelle de paiement',
'edit_gateway' => 'Modifier la passerelle de paiement',
'add_gateway' => 'Ajouter une passerelle',
'delete_gateway' => 'Supprimer la passerelle',
'edit_gateway' => 'Éditer la passerelle',
'updated_gateway' => 'Passerelle mise à jour avec succès',
'created_gateway' => 'Passerelle créée avec succès',
'deleted_gateway' => 'Passerelle supprimée avec succès',
@ -506,8 +506,8 @@ $lang = array(
'auto_wrap' => 'Retour à la ligne automatique',
'duplicate_post' => 'Attention: la page précédente a été soumise deux fois. La deuxième soumission a été ignorée.',
'view_documentation' => 'Voir documentation',
'app_title' => 'Facturation en ligne gratuite',
'app_description' => 'Invoice Ninja est une solution gratuite et à code ouvert pour la facturation et la facturation des clients. Avec Invoice Ninja, vous pouvez facilement créer et envoyer de belles factures depuis n&#39;importe quel appareil ayant accès au Web. Vos clients peuvent imprimer vos factures, les télécharger sous forme de fichiers PDF et même vous payer en ligne depuis le système.',
'app_title' => 'Free Online Invoicing',
'app_description' => 'Invoice Ninja is a free, open-code solution for invoicing and billing customers. With Invoice Ninja, you can easily build and send beautiful invoices from any device that has access to the web. Your clients can print your invoices, download them as pdf files, and even pay you online from within the system.',
'rows' => 'lignes',
'www' => 'www',
'logo' => 'Logo',
@ -605,6 +605,7 @@ $lang = array(
'email_error' => 'Il y a eu un problème en envoyant l\'e-mail',
'confirm_recurring_timing' => 'Note : les e-mails sont envoyés au début de l\'heure.',
'confirm_recurring_timing_not_sent' => 'Note : les factures sont créées au début de l\'heure.',
'payment_terms_help' => 'Définit <b>la date d\'échéance de la facture</b> par défaut ',
'unlink_account' => 'Dissocier le compte',
'unlink' => 'Dissocier',
'show_address' => 'Montrer l\'adresse',
@ -692,9 +693,9 @@ $lang = array(
'disable' => 'Désactiver',
'invoice_quote_number' => 'Numéro des devis & factures',
'invoice_charges' => 'Majoration de facture',
'notification_invoice_bounced' => 'Nous n&#39;avons pas pu transmettre la facture :invoice à :contact .<br><br> :error',
'notification_invoice_bounced' => 'We were unable to deliver Invoice :invoice to :contact. <br><br> :error',
'notification_invoice_bounced_subject' => 'Impossible d\'envoyer la facture :invoice',
'notification_quote_bounced' => 'Nous n&#39;avons pas pu transmettre le devis :invoice à :contact .<br><br> :error',
'notification_quote_bounced' => 'We were unable to deliver Quote :invoice to :contact. <br><br> :error',
'notification_quote_bounced_subject' => 'Impossible d\'envoyer le devis :invoice',
'custom_invoice_link' => 'Personnaliser le lien de la facture',
'total_invoiced' => 'Total facturé',
@ -1172,8 +1173,8 @@ $lang = array(
'invoice_number_padding' => 'Remplissage',
'preview' => 'Prévisualisation',
'list_vendors' => 'Liste des fournisseurs',
'add_users_not_supported' => 'Passez au plan Entreprise pour ajouter des utilisateurs supplémentaires à votre compte.',
'enterprise_plan_features' => 'Le plan Entreprise ajoute la prise en charge de plusieurs utilisateurs et pièces jointes, :link pour voir la liste complète des fonctionnalités.',
'add_users_not_supported' => 'Passez au Plan Enterprise pour ajouter des utilisateurs supplémentaires à votre compte.',
'enterprise_plan_features' => 'Le plan entreprise ajoute le support pour de multiples utilisateurs ainsi que l\'ajout de pièces jointes, :link pour voir la liste complète des fonctionnalités.',
'return_to_app' => 'Retourner à l\'App',
@ -1322,7 +1323,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'security' => 'Sécurité',
'see_whats_new' => 'Voir les nouveautés dans la version v:version',
'wait_for_upload' => 'Veuillez patienter pendant le chargement du fichier',
'upgrade_for_permissions' => 'Passez à notre plan Entreprise pour activer les autorisations.',
'upgrade_for_permissions' => 'Adhérez à notre Plan entreprise pour activer les permissions.',
'enable_second_tax_rate' => 'Activer la spécification d\'un <b>second taux de taxe</b>',
'payment_file' => 'Fichier de paiement',
'expense_file' => 'Fichier de dépense',
@ -2058,6 +2059,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'freq_two_months' => 'Deux mois',
'freq_yearly' => 'Annuellement',
'profile' => 'Profil',
'payment_type_help' => 'Définit le <b>type de paiement manuel </b> par défaut.',
'industry_Construction' => 'Construction',
'your_statement' => 'Votre relevé',
'statement_issued_to' => 'Relevé délivré à',
@ -2195,9 +2197,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'encryption' => 'Chiffrement',
'mailgun_domain' => 'Domaine Mailgun',
'mailgun_private_key' => 'Mailgun Private Key',
'brevo_domain' => 'Domaine de Brevo',
'brevo_private_key' => 'Clé privée Brevo',
'send_test_email' => 'Send Test Email',
'send_test_email' => 'Envoyer un courriel de test',
'select_label' => 'Sélectionnez le label',
'label' => 'Intitulé',
'service' => 'Service',
@ -2695,7 +2695,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'no_assets' => 'Aucune image, faites glisser pour envoyer',
'add_image' => 'Ajouter une image',
'select_image' => 'Sélectionner une image',
'upgrade_to_upload_images' => 'Passez au plan Entreprise pour télécharger des images',
'upgrade_to_upload_images' => 'Mettre à niveau vers le plan entreprise pour envoyer des images',
'delete_image' => 'Supprimer l\'image',
'delete_image_help' => 'Attention : supprimer l\'image la retirera de toutes les propositions.',
'amount_variable_help' => 'Note: le champ $amount de la facture utilisera le champ d\'acompte. Il utilisera le solde de la facture, si spécifié autrement.',
@ -3010,7 +3010,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'hosted_login' => 'Authentification Hosted',
'selfhost_login' => 'Authentification Selfhost',
'google_login' => 'Authentification Google',
'thanks_for_patience' => 'Merci de votre patience pendant que nous travaillons à la mise en œuvre de ces fonctionnalités.<br><br> Nous espérons les terminer dans les prochains mois.<br><br> D&#39;ici là, nous continuerons à soutenir le',
'thanks_for_patience' => 'Thank for your patience while we work to implement these features.<br><br>We hope to have them completed in the next few months.<br><br>Until then we\'ll continue to support the',
'legacy_mobile_app' => 'Ancienne App mobile',
'today' => 'Aujourd\'hui',
'current' => 'Actuel',
@ -3051,7 +3051,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'valid_until_days' => 'Ισχύει Μέχρι',
'valid_until_days_help' => 'Définit automatiquement la valeur <b>Valable jusqu\'au</b> sur les devis pour autant de jours à venir. Laissez vide pour désactiver.',
'usually_pays_in_days' => 'Jours',
'requires_an_enterprise_plan' => 'Nécessite un forfait Entreprise',
'requires_an_enterprise_plan' => 'Χρειάζεται πλάνο επιχείρησης',
'take_picture' => 'Φωτογραφίσετε ',
'upload_file' => 'Envoyer un fichier',
'new_document' => 'Νέο Έγγραφο ',
@ -3153,7 +3153,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'archived_group' => 'Le groupe a été archivé avec succès',
'deleted_group' => 'Le groupe a été supprimé avec succès',
'restored_group' => 'Le groupe a été restauré avec succès',
'upload_logo' => 'Téléchargez le logo de votre entreprise',
'upload_logo' => 'Envoyer le logo',
'uploaded_logo' => 'Le logo a été envoyé avec succès',
'saved_settings' => 'Les paramètres ont été enregistrés avec succès',
'device_settings' => 'Paramètres de l\'appareil',
@ -3868,7 +3868,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'cancellation_pending' => 'Annulation en cours, nous vous contacterons !',
'list_of_payments' => 'Liste des paiements',
'payment_details' => 'Détails du paiement',
'list_of_payment_invoices' => 'Factures associées',
'list_of_payment_invoices' => 'Associate invoices',
'list_of_payment_methods' => 'Liste des moyens de paiement',
'payment_method_details' => 'Détails du mode de paiement',
'permanently_remove_payment_method' => 'Supprimer définitivement ce mode de paiement.',
@ -3975,7 +3975,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'notification_credit_bounced_subject' => 'Impossible de livrer Crédit : invoice',
'save_payment_method_details' => 'Enregister les détails du moyen de paiement',
'new_card' => 'Nouvelle carte',
'new_bank_account' => 'Ajouter un compte bancaire',
'new_bank_account' => 'Nouveau compte bancaire',
'company_limit_reached' => 'Limite de :limit entreprises par compte.',
'credits_applied_validation' => 'Le total des crédits appliqués ne peut pas dépasser le total des factures',
'credit_number_taken' => 'Numéro de crédit déjà pris',
@ -4029,7 +4029,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'user_detached' => 'Utilisateur détaché de l\'entreprise',
'create_webhook_failure' => 'Échec de la création du Webhook',
'payment_message_extended' => 'Merci pour votre paiement de :amount pour :invoice',
'online_payments_minimum_note' => 'Note: Online payments are supported only if amount is larger than $1 or currency equivalent.',
'online_payments_minimum_note' => 'Remarque : Les paiements en ligne ne sont pris en charge que si le montant est supérieur à 1 $ ou l\'équivalent en devise.',
'payment_token_not_found' => 'Le jeton de paiement est introuvable. Veuillez essayer de nouveau. Si le problème persiste, essayez avec un autre mode de paiement',
'vendor_address1' => 'Rue du fournisseur',
'vendor_address2' => 'Appt/Bâtiment du fournisseur',
@ -4170,7 +4170,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'one_time_purchases' => 'Achat une fois seulement',
'recurring_purchases' => 'Achat récurrent',
'you_might_be_interested_in_following' => 'Ceci pourrait vous intéresser',
'quotes_with_status_sent_can_be_approved' => 'Only quotes with "Sent" status can be approved. Expired quotes cannot be approved.',
'quotes_with_status_sent_can_be_approved' => 'Seuls les devis avec le statut "Envoyé" peuvent être approuvés.',
'no_quotes_available_for_download' => 'Aucun devis disponible au téléchargement.',
'copyright' => 'droits d\'auteur',
'user_created_user' => ':user a créé :created_user à :time',
@ -4236,7 +4236,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'payment_type_Bancontact' => 'Bancontact',
'payment_type_BECS' => 'BECS',
'payment_type_ACSS' => 'CASS',
'gross_line_total' => 'Total brut',
'gross_line_total' => 'Total brut de la ligne',
'lang_Slovak' => 'slovaque',
'normal' => 'Normal',
'large' => 'Grand',
@ -4847,7 +4847,6 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'email_alignment' => 'Alignement des e-mails',
'pdf_preview_location' => 'Emplacement de prévisualisation PDF',
'mailgun' => 'Mailgun',
'brevo' => 'Brevo',
'postmark' => 'Cachet de la poste',
'microsoft' => 'Microsoft',
'click_plus_to_create_record' => 'Cliquez sur + pour créer un enregistrement',
@ -4926,7 +4925,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'no_assigned_tasks' => 'Aucune tâche facturable pour ce projet',
'authorization_failure' => 'Autorisations insuffisantes pour effectuer cette action',
'authorization_sms_failure' => 'Veuillez vérifier votre compte pour envoyer des e-mails.',
'white_label_body' => 'Merci d&#39;avoir acheté une licence en marque blanche.<br><br> Votre clé de licence est :<br><br> :license_key<br><br> Vous pouvez gérer votre licence ici : https://invoiceninja.invoicing.co/client/login',
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key <br><br> You can manage your license here: https://invoiceninja.invoicing.co/client/login',
'payment_type_Klarna' => 'Klarna',
'payment_type_Interac E Transfer' => 'Virement Interac E',
'xinvoice_payable' => 'Payable sous :payeddue days net jusqu\'au :paydate',
@ -5086,11 +5085,12 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'mercado_pago' => 'Mercado Pago',
'mybank' => 'Ma banque',
'paypal_paylater' => 'Payez en 4',
'paid_date' => 'La date de paiement',
'district' => 'District',
'region' => 'Région',
'county' => 'Comté',
'tax_details' => 'Détails fiscaux',
'activity_10_online' => ':contact a effectué le paiement :payment pour la facture :invoice pour :client',
'activity_10_online' => ':contact made payment :payment for invoice :invoice for :client',
'activity_10_manual' => ':user a saisi le paiement :payment pour la facture :invoice pour :client',
'default_payment_type' => 'Type de paiement par défaut',
'number_precision' => 'Précision du nombre',
@ -5099,8 +5099,6 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'drop_files_here' => 'Déposez les fichiers ici',
'upload_files' => 'Télécharger des fichiers',
'download_e_invoice' => 'Télécharger la facture électronique',
'download_e_credit' => 'Télécharger le crédit électronique',
'download_e_quote' => 'Télécharger le devis électronique',
'triangular_tax_info' => 'Article 141 de la directive 2006/112/CE opération triangulaire',
'intracommunity_tax_info' => 'Livraison désignée à l\'article 262 ter du CGI TVA due par le preneur',
'reverse_tax_info' => 'Exonération des TVA article 283-2 du CGI TVA due par le preneur',
@ -5122,7 +5120,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'set_private' => 'Définir comme privé',
'individual' => 'Individuel',
'business' => 'Entreprise',
'partnership' => 'Partenariat',
'partnership' => 'Partnership',
'trust' => 'Confiance',
'charity' => 'Charité',
'government' => 'Gouvernement',
@ -5193,7 +5191,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'nordigen_handler_error_heading_account_config_invalid' => 'Informations d&#39;identification manquantes',
'nordigen_handler_error_contents_account_config_invalid' => 'Identifiants invalides ou manquants pour les données du compte bancaire Gocardless. Contactez le support pour obtenir de l&#39;aide si ce problème persiste.',
'nordigen_handler_error_heading_not_available' => 'Pas disponible',
'nordigen_handler_error_contents_not_available' => 'Fonctionnalité non disponible, plan Entreprise uniquement.',
'nordigen_handler_error_contents_not_available' => 'Fonctionnalité non disponible, forfait entreprise uniquement.',
'nordigen_handler_error_heading_institution_invalid' => 'Institution invalide',
'nordigen_handler_error_contents_institution_invalid' => 'L&#39;identifiant de l&#39;établissement fourni n&#39;est pas valide ou n&#39;est plus valide.',
'nordigen_handler_error_heading_ref_invalid' => 'Référence invalide',
@ -5206,100 +5204,41 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'nordigen_handler_error_contents_requisition_no_accounts' => 'Le service n&#39;a renvoyé aucun compte valide. Pensez à redémarrer le flux.',
'nordigen_handler_restart' => 'Redémarrez le flux.',
'nordigen_handler_return' => 'Retour à la candidature.',
'lang_Lao' => 'Laotien',
'currency_lao_kip' => 'Kip laotien',
'yodlee_regions' => 'Régions : États-Unis, Royaume-Uni, Australie et Inde',
'nordigen_regions' => 'Régions : Europe et Royaume-Uni',
'select_provider' => 'Sélectionnez le fournisseur',
'nordigen_requisition_subject' => 'La demande a expiré, veuillez vous authentifier à nouveau.',
'nordigen_requisition_body' => 'L&#39;accès aux flux des comptes bancaires a expiré comme indiqué dans le Contrat de l&#39;utilisateur final.<br><br> Veuillez vous connecter à Invoice Ninja et vous authentifier à nouveau auprès de vos banques pour continuer à recevoir des transactions.',
'lang_Lao' => 'Lao',
'currency_lao_kip' => 'Lao kip',
'yodlee_regions' => 'Regions: USA, UK, Australia & India',
'nordigen_regions' => 'Regions: Europe & UK',
'select_provider' => 'Select Provider',
'nordigen_requisition_subject' => 'Requisition expired, please reauthenticate.',
'nordigen_requisition_body' => 'Access to bank account feeds has expired as set in End User Agreement. <br><br>Please log into Invoice Ninja and re-authenticate with your banks to continue receiving transactions.',
'participant' => 'Participant',
'participant_name' => 'Nom du participant',
'client_unsubscribed' => 'Client désabonné des e-mails.',
'client_unsubscribed_help' => 'Le client :client s&#39;est désabonné de vos e-mails. Le client doit consentir à recevoir de futurs e-mails de votre part.',
'resubscribe' => 'Réabonnez-vous',
'subscribe' => 'S&#39;abonner',
'subscribe_help' => 'Vous êtes actuellement abonné et continuerez à recevoir des communications par courrier électronique.',
'unsubscribe_help' => 'Vous n&#39;êtes actuellement pas abonné et ne recevrez donc pas d&#39;e-mails pour le moment.',
'notification_purchase_order_bounced' => 'Nous n&#39;avons pas pu livrer le bon de commande :invoice à :contact .<br><br> :error',
'notification_purchase_order_bounced_subject' => 'Impossible de livrer le bon de commande :invoice',
'show_pdfhtml_on_mobile' => 'Afficher la version HTML de l&#39;entité lors de la visualisation sur mobile',
'show_pdfhtml_on_mobile_help' => 'Pour une visualisation améliorée, affiche une version HTML de la facture/devis lors de la visualisation sur mobile.',
'please_select_an_invoice_or_credit' => 'Veuillez sélectionner une facture ou un crédit',
'mobile_version' => 'Version mobile',
'participant_name' => 'Participant name',
'client_unsubscribed' => 'Client unsubscribed from emails.',
'client_unsubscribed_help' => 'Client :client has unsubscribed from your e-mails. The client needs to consent to receive future emails from you.',
'resubscribe' => 'Resubscribe',
'subscribe' => 'Subscribe',
'subscribe_help' => 'You are currently subscribed and will continue to receive email communications.',
'unsubscribe_help' => 'You are currently not subscribed, and therefore, will not receive emails at this time.',
'notification_purchase_order_bounced' => 'We were unable to deliver Purchase Order :invoice to :contact. <br><br> :error',
'notification_purchase_order_bounced_subject' => 'Unable to deliver Purchase Order :invoice',
'show_pdfhtml_on_mobile' => 'Display HTML version of entity when viewing on mobile',
'show_pdfhtml_on_mobile_help' => 'For improved visualization, displays a HTML version of the invoice/quote when viewing on mobile.',
'please_select_an_invoice_or_credit' => 'Please select an invoice or credit',
'mobile_version' => 'Mobile Version',
'venmo' => 'Venmo',
'my_bank' => 'Ma banque',
'pay_later' => 'Payer plus tard',
'local_domain' => 'Domaine local',
'verify_peer' => 'Vérifier le pair',
'nordigen_help' => 'Remarque : la connexion d&#39;un compte nécessite une clé API GoCardless/Nordigen',
'ar_detailed' => 'Comptes clients détaillés',
'ar_summary' => 'Sommaire des comptes clients',
'client_sales' => 'Ventes clients',
'user_sales' => 'Ventes aux utilisateurs',
'iframe_url' => 'URL iFrame',
'user_unsubscribed' => 'Utilisateur désabonné des e-mails :link',
'out_of_stock' => 'En rupture de stock',
'step_dependency_fail' => 'Le composant &quot;:step&quot; nécessite au moins une de ses dépendances (&quot;:dependencies&quot;) dans la liste.',
'step_dependency_order_fail' => 'Le composant &quot;:step&quot; dépend de &quot;:dependency&quot;. Assurez-vous que lordre des composants est correct.',
'step_authentication_fail' => 'Vous devez inclure au moins une des méthodes d&#39;authentification.',
'auth.login' => 'Se connecter',
'auth.login-or-register' => 'Connexion ou Inscription',
'auth.register' => 'Registre',
'cart' => 'Chariot',
'methods' => 'Méthodes',
'rff' => 'Formulaire de champs obligatoires',
'add_step' => 'Ajouter une étape',
'steps' => 'Pas',
'steps_order_help' => 'L&#39;ordre des étapes est important. La première étape ne devrait dépendre daucune autre étape. La deuxième étape doit dépendre de la première étape, et ainsi de suite.',
'other_steps' => 'Autres étapes',
'use_available_payments' => 'Utiliser les paiements disponibles',
'test_email_sent' => 'E-mail envoyé avec succès',
'gateway_type' => 'Type de passerelle',
'save_template_body' => 'Souhaitez-vous enregistrer ce mappage dimportation en tant que modèle pour une utilisation future ?',
'save_as_template' => 'Enregistrer le mappage de modèle',
'checkout_only_for_existing_customers' => 'Le paiement est activé uniquement pour les clients existants. Veuillez vous connecter avec votre compte existant pour procéder au paiement.',
'checkout_only_for_new_customers' => 'Le paiement est activé uniquement pour les nouveaux clients. Veuillez créer un nouveau compte pour procéder au paiement.',
'auto_bill_standard_invoices_help' => 'Factures standard facturées automatiquement à la date d&#39;échéance',
'auto_bill_on_help' => 'Facture automatique à la date d&#39;envoi OU à la date d&#39;échéance (factures récurrentes)',
'use_available_credits_help' => 'Appliquer tout solde créditeur aux paiements avant de facturer un mode de paiement',
'use_unapplied_payments' => 'Utiliser les paiements non imputés',
'use_unapplied_payments_help' => 'Appliquer tous les soldes de paiement avant de facturer un mode de paiement',
'payment_terms_help' => 'Le nombre de jours après la date de facture pendant lequel le paiement est dû',
'payment_type_help' => 'Le type de paiement par défaut à utiliser pour les paiements',
'quote_valid_until_help' => 'Le nombre de jours pendant lesquels le devis est valable',
'expense_payment_type_help' => 'Le type de paiement de dépenses par défaut à utiliser',
'paylater' => 'Payer en 4',
'payment_provider' => 'Fournisseur de paiement',
'select_email_provider' => 'Définissez votre adresse e-mail comme utilisateur expéditeur',
'purchase_order_items' => 'Articles de bon de commande',
'csv_rows_length' => 'Aucune donnée trouvée dans ce fichier CSV',
'accept_payments_online' => 'Acceptez les paiements en ligne',
'all_payment_gateways' => 'Voir toutes les passerelles de paiement',
'product_cost' => 'Coût du produit',
'duration_words' => 'Durée en mots',
'upcoming_recurring_invoices' => 'Factures récurrentes à venir',
'shipping_country_id' => 'Pays de livraison',
'show_table_footer' => 'Afficher le pied de page du tableau',
'show_table_footer_help' => 'Affiche les totaux en pied de page du tableau',
'total_invoices' => 'Total des factures',
'add_to_group' => 'Ajouter au groupe',
'check_credentials' => 'Vérifier les informations d&#39;identification',
'valid_credentials' => 'Les informations d&#39;identification sont valides',
'e_quote' => 'Devis électronique',
'e_credit' => 'E-Crédit',
'e_purchase_order' => 'Bon de commande électronique',
'e_quote_type' => 'Type de devis électronique',
'unlock_unlimited_clients' => 'Veuillez effectuer une mise à niveau pour débloquer un nombre illimité de clients !',
'download_e_purchase_order' => 'Télécharger le bon de commande électronique',
'flutter_web_warning' => 'Nous vous recommandons d&#39;utiliser la nouvelle application Web ou l&#39;application de bureau pour obtenir les meilleures performances.',
'rappen_rounding' => 'Arrondi de Rappen',
'rappen_rounding_help' => 'Montant rond à 5 centimes',
'assign_group' => 'Attribuer un groupe',
'paypal_advanced_cards' => 'Advanced Card Payments',
'local_domain_help' => 'EHLO domain (optional)',
'port_help' => 'ie. 25,587,465',
'host_help' => 'ie. smtp.gmail.com',
'my_bank' => 'MyBank',
'pay_later' => 'Pay Later',
'local_domain' => 'Local Domain',
'verify_peer' => 'Verify Peer',
'nordigen_help' => 'Note: connecting an account requires a GoCardless/Nordigen API key',
'ar_detailed' => 'Accounts Receivable Detailed',
'ar_summary' => 'Accounts Receivable Summary',
'client_sales' => 'Client Sales',
'user_sales' => 'User Sales',
'iframe_url' => 'iFrame URL',
'user_unsubscribed' => 'User unsubscribed from emails :link',
'btcpay_refund_subject' => 'Remboursement de votre facture via BTCPay',
'btcpay_refund_body' => 'Un remboursement qui vous est destiné a été émis. Pour l\'obtenir via BTCPay, veuillez cliquer sur ce lien:',
);
return $lang;