diff --git a/app/DataMapper/InvoiceItem.php b/app/DataMapper/InvoiceItem.php
index 974121958fed..35328227bdb3 100644
--- a/app/DataMapper/InvoiceItem.php
+++ b/app/DataMapper/InvoiceItem.php
@@ -51,7 +51,7 @@ class InvoiceItem
public $custom_value4 = '';
- public $type_id = '1'; //1 = product, 2 = service, 3 unpaid gateway fee, 4 paid gateway fee, 5 late fee
+ public $type_id = '1'; //1 = product, 2 = service, 3 unpaid gateway fee, 4 paid gateway fee, 5 late fee, 6 promo code
public static $casts = [
'type_id' => 'string',
diff --git a/app/Services/BillingSubscription/BillingSubscriptionService.php b/app/Services/BillingSubscription/BillingSubscriptionService.php
index 62eba98640ab..9d406b4b2d44 100644
--- a/app/Services/BillingSubscription/BillingSubscriptionService.php
+++ b/app/Services/BillingSubscription/BillingSubscriptionService.php
@@ -56,7 +56,7 @@ class BillingSubscriptionService
{
$invoice_repo = new InvoiceRepository();
- $data['line_items'] = $this->createLineItems($data['quantity']);
+ $data['line_items'] = $this->createLineItems($data);
/*
If trial_enabled -> return early
@@ -74,27 +74,45 @@ class BillingSubscriptionService
}
- private function createLineItems($quantity): array
+ private function createLineItems($data): array
{
$line_items = [];
$product = $this->billing_subscription->product;
$item = new InvoiceItem;
- $item->quantity = $quantity;
+ $item->quantity = $data['quantity'];
$item->product_key = $product->product_key;
$item->notes = $product->notes;
$item->cost = $product->price;
+ $item->tax_rate1 = $product->tax_rate1 ?: 0;
+ $item->tax_name1 = $product->tax_name1 ?: '';
+ $item->tax_rate2 = $product->tax_rate2 ?: 0;
+ $item->tax_name2 = $product->tax_name2 ?: '';
+ $item->tax_rate3 = $product->tax_rate3 ?: 0;
+ $item->tax_name3 = $product->tax_name3 ?: '';
+ $item->custom_value1 = $product->custom_value1 ?: '';
+ $item->custom_value2 = $product->custom_value2 ?: '';
+ $item->custom_value3 = $product->custom_value3 ?: '';
+ $item->custom_value4 = $product->custom_value4 ?: '';
+
//$item->type_id need to switch whether the subscription is a service or product
$line_items[] = $item;
//do we have a promocode? enter this as a line item.
+ if(strlen($data['coupon']) >=1)
+ $line_items = $this->createPromoLine($data);
return $line_items;
}
+ private function createPromoLine($data)
+ {
+ $item = new InvoiceItem;
+ }
+
private function convertInvoiceToRecurring()
{
//The first invoice is a plain invoice - the second is fired on the recurring schedule.
diff --git a/resources/lang/en/texts.php b/resources/lang/en/texts.php
index 427445d983be..06a296e0945c 100644
--- a/resources/lang/en/texts.php
+++ b/resources/lang/en/texts.php
@@ -1976,7 +1976,7 @@ $LANG = array(
'require_invoice_signature_help' => 'Require client to provide their signature.',
'require_quote_signature' => 'Quote Signature',
'require_quote_signature_help' => 'Require client to provide their signature.',
- 'i_agree' => 'I Agree To',
+ 'i_agree' => 'I Agree To The Terms',
'sign_here' => 'Please sign here:',
'authorization' => 'Authorization',
'signed' => 'Signed',
@@ -3449,10 +3449,10 @@ $LANG = array(
'client_country' => 'Client Country',
'client_is_active' => 'Client is Active',
'client_balance' => 'Client Balance',
- 'client_address1' => 'Client Address 1',
- 'client_address2' => 'Client Address 2',
- 'client_shipping_address1' => 'Client Shipping Address 1',
- 'client_shipping_address2' => 'Client Shipping Address 2',
+ 'client_address1' => 'Client Street',
+ 'client_address2' => 'Client Apt/Suite',
+ 'client_shipping_address1' => 'Client Shipping Street',
+ 'client_shipping_address2' => 'Client Shipping Apt/Suite',
'tax_rate1' => 'Tax Rate 1',
'tax_rate2' => 'Tax Rate 2',
'tax_rate3' => 'Tax Rate 3',
@@ -3532,8 +3532,8 @@ $LANG = array(
'marked_credit_as_sent' => 'Successfully marked credit as sent',
'email_subject_payment_partial' => 'Email Partial Payment Subject',
'is_approved' => 'Is Approved',
- 'migration_went_wrong' => 'Oops, something went wrong! Make sure you did proper setup with V2 of Invoice Ninja, before starting migration.',
- 'cross_migration_message' => 'Cross account migration is not allowed. Please read more about it here: https://invoiceninja.github.io/cross-site-migration.html',
+ 'migration_went_wrong' => 'Oops, something went wrong! Please make sure you have setup an Invoice Ninja v5 instance before starting the migration.',
+ 'cross_migration_message' => 'Cross account migration is not allowed. Please read more about it here: https://invoiceninja.github.io/docs/migration/#troubleshooting',
'email_credit' => 'Email Credit',
'client_email_not_set' => 'Client does not have an email address set',
'ledger' => 'Ledger',
@@ -3912,7 +3912,7 @@ $LANG = array(
'show' => 'Show',
'empty_columns' => 'Empty Columns',
'project_name' => 'Project Name',
- 'counter_pattern_error' => 'To use :client_counter please add either :number or :id_number to prevent conflicts',
+ 'counter_pattern_error' => 'To use :client_counter please add either :client_number or :client_id_number to prevent conflicts',
'this_quarter' => 'This Quarter',
'to_update_run' => 'To update run',
'registration_url' => 'Registration URL',
@@ -3968,8 +3968,8 @@ $LANG = array(
'list_of_recurring_invoices' => 'List of recurring invoices',
'details_of_recurring_invoice' => 'Here are some details about recurring invoice',
'cancellation' => 'Cancellation',
- 'about_cancellation' => 'In case you want to stop the recurring invoice, please click the request the cancellation.',
- 'cancellation_warning' => 'Warning! You are requesting a cancellation of this service. Your service may be cancelled with no further notification to you.',
+ 'about_cancellation' => 'In case you want to stop the recurring invoice,\n please click the request the cancellation.',
+ 'cancellation_warning' => 'Warning! You are requesting a cancellation of this service.\n Your service may be cancelled with no further notification to you.',
'cancellation_pending' => 'Cancellation pending, we\'ll be in touch!',
'list_of_payments' => 'List of payments',
'payment_details' => 'Details of the payment',
@@ -4135,19 +4135,26 @@ $LANG = array(
'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 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',
+ 'partially_unapplied' => 'Partially Unapplied',
+ 'select_a_gmail_user' => 'Please select a user authenticated with Gmail',
+ 'list_long_press' => 'List Long Press',
+ 'show_actions' => 'Show Actions',
+ 'start_multiselect' => 'Start Multiselect',
+ 'email_sent_to_confirm_email' => 'An email has been sent to confirm the email address',
+ 'converted_paid_to_date' => 'Converted Paid to Date',
+ 'converted_credit_balance' => 'Converted Credit Balance',
+ 'converted_total' => 'Converted Total',
+ 'reply_to_name' => 'Reply-To Name',
+ 'payment_status_-2' => 'Partially Unapplied',
+ 'color_theme' => 'Color Theme',
'start_migration' => 'Start Migration',
'recurring_cancellation_request' => 'Request for recurring invoice cancellation from :contact',
'recurring_cancellation_request_body' => ':contact from Client :client requested to cancel Recurring Invoice :invoice',
'hello' => 'Hello',
'group_documents' => 'Group documents',
'quote_approval_confirmation_label' => 'Are you sure you want to approve this quote?',
-
- 'click_agree_to_accept_terms' => 'Click "Agree" to Accept Terms.',
- 'agree' => 'Agree',
-
- 'pending_approval' => 'Pending Approval',
'migration_select_company_label' => 'Select companies to migrate',
'force_migration' => 'Force migration',
'require_password_with_social_login' => 'Require Password with Social Login',
@@ -4160,7 +4167,7 @@ $LANG = array(
'security_settings' => 'Security Settings',
'resend_email' => 'Resend Email',
'confirm_your_email_address' => 'Please confirm your email address',
- 'freshbooks' => 'FreshBooks',
+ 'freshbooks' => 'FreshBooks',
'invoice2go' => 'Invoice2go',
'invoicely' => 'Invoicely',
'waveaccounting' => 'Wave Accounting',
@@ -4170,6 +4177,29 @@ $LANG = array(
'migration_auth_label' => 'Let\'s continue by authenticating.',
'api_secret' => 'API secret',
'migration_api_secret_notice' => 'You can find API_SECRET in the .env file or Invoice Ninja v5. If property is missing, leave field blank.',
+ 'use_last_email' => 'Use last email',
+ 'activate_company' => 'Activate Company',
+ 'activate_company_help' => 'Enable emails, recurring invoices and notifications',
+ 'an_error_occurred_try_again' => 'An error occurred, please try again',
+ 'please_first_set_a_password' => 'Please first set a password',
+ 'changing_phone_disables_two_factor' => 'Warning: Changing your phone number will disable 2FA',
+ 'help_translate' => 'Help Translate',
+ 'please_select_a_country' => 'Please select a country',
+ 'disabled_two_factor' => 'Successfully disabled 2FA',
+ 'connected_google' => 'Successfully connected account',
+ 'disconnected_google' => 'Successfully disconnected account',
+ 'delivered' => 'Delivered',
+ 'spam' => 'Spam',
+ 'view_docs' => 'View Docs',
+ 'enter_phone_to_enable_two_factor' => 'Please provide a mobile phone number to enable two factor authentication',
+ 'send_sms' => 'Send SMS',
+ 'sms_code' => 'SMS Code',
+ 'connect_google' => 'Connect Google',
+ 'disconnect_google' => 'Disconnect Google',
+ 'disable_two_factor' => 'Disable Two Factor',
+ 'invoice_task_datelog' => 'Invoice Task Datelog',
+ 'invoice_task_datelog_help' => 'Add date details to the invoice line items',
+ 'promo_code' => 'Promo code',
);
return $LANG;