diff --git a/app/Console/Commands/CreateSingleAccount.php b/app/Console/Commands/CreateSingleAccount.php index 839f4f2769..0909f4dfeb 100644 --- a/app/Console/Commands/CreateSingleAccount.php +++ b/app/Console/Commands/CreateSingleAccount.php @@ -143,6 +143,12 @@ class CreateSingleAccount extends Command 'portal_domain' => 'http://ninja.test:8000', 'track_inventory' => true ]); + + $custom_fields = new \stdClass(); + $custom_fields->client1 = 'CKey|single_line_text'; + $custom_fields->client2 = 'AKey|single_line_text'; + $company->custom_fields = $custom_fields; + $faker = \Faker\Factory::create(); $settings = $company->settings; @@ -256,7 +262,11 @@ class CreateSingleAccount extends Command 'company_id' => $company->id, 'name' => 'cypress' ]); - + + $client->custom_value1 = $company->company_key; + $client->custom_value2 = $account->key; + $client->save(); + ClientContact::factory()->create([ 'user_id' => $user->id, 'client_id' => $client->id, @@ -422,6 +432,36 @@ class CreateSingleAccount extends Command 'quantity' => 1, ]); + $pe5 = Product::factory()->create([ + 'user_id' => $user->id, + 'company_id' => $company->id, + 'product_key' => 'enterprise_plan_5', + 'notes' => 'The Enterprise Plan 5', + 'cost' => 28, + 'price' => 28, + 'quantity' => 1, + ]); + + $pe10 = Product::factory()->create([ + 'user_id' => $user->id, + 'company_id' => $company->id, + 'product_key' => 'enterprise_plan_10', + 'notes' => 'The Enterprise Plan 10', + 'cost' => 56, + 'price' => 56, + 'quantity' => 1, + ]); + + $pe20 = Product::factory()->create([ + 'user_id' => $user->id, + 'company_id' => $company->id, + 'product_key' => 'enterprise_plan_20', + 'notes' => 'The Enterprise Plan 20', + 'cost' => 112, + 'price' => 112, + 'quantity' => 1, + ]); + $p3 = Product::factory()->create([ 'user_id' => $user->id, 'company_id' => $company->id, @@ -432,6 +472,28 @@ class CreateSingleAccount extends Command 'quantity' => 1, ]); + + $p4= Product::factory()->create([ + 'user_id' => $user->id, + 'company_id' => $company->id, + 'product_key' => 'docuninja_user', + 'notes' => 'The DocuNinja Monthly User Plan', + 'cost' => 6, + 'price' => 6, + 'quantity' => 1, + ]); + + + $p5 = Product::factory()->create([ + 'user_id' => $user->id, + 'company_id' => $company->id, + 'product_key' => 'docuninja_user_annual', + 'notes' => 'The DocuNinja Annual User Plan', + 'cost' => 60, + 'price' => 60, + 'quantity' => 1, + ]); + $webhook_config = [ 'post_purchase_url' => 'http://ninja.test:8000/api/admin/plan', 'post_purchase_rest_method' => 'post', @@ -464,6 +526,80 @@ class CreateSingleAccount extends Command $sub->allow_plan_changes = true; $sub->frequency_id = RecurringInvoice::FREQUENCY_MONTHLY; $sub->save(); + + if(!\App\Models\Subscription::find(6)){ + + $sub = SubscriptionFactory::create($company->id, $user->id); + $sub->id = 6; + $sub->name = " PRO Pro Plan"; + $sub->group_id = $gs->id; + $sub->recurring_product_ids = "{$p1->hashed_id}"; + $sub->webhook_configuration = $webhook_config; + $sub->allow_plan_changes = true; + $sub->frequency_id = RecurringInvoice::FREQUENCY_MONTHLY; + $sub->save(); + + } + + if (!\App\Models\Subscription::find(11)) { + + $sub = SubscriptionFactory::create($company->id, $user->id); + $sub->id = 11; + $sub->name = " EEE Enterprise Plan"; + $sub->group_id = $gs->id; + $sub->recurring_product_ids = "{$p2->hashed_id}"; + $sub->webhook_configuration = $webhook_config; + $sub->allow_plan_changes = true; + $sub->frequency_id = RecurringInvoice::FREQUENCY_MONTHLY; + $sub->max_seats_limit =2; + $sub->per_seat_enabled = true; + $sub->save(); + + } + + $_sub = $sub->replicate(); + $_sub->id = 41; + $_sub->name = "Enterprise Plan 3-5 Users"; + $_sub->recurring_product_ids = "{$pe5->hashed_id}"; + $_sub->max_seats_limit =5; + $_sub->per_seat_enabled = true; + $_sub->save(); + + $_sub = $sub->replicate(); + $_sub->id = 46; + $_sub->name = "Enterprise Plan 6-10 Users"; + $_sub->recurring_product_ids = "{$pe10->hashed_id}"; + $_sub->max_seats_limit =10; + $_sub->per_seat_enabled = true; + $_sub->save(); + + $_sub = $sub->replicate(); + $_sub->id = 51; + $_sub->name = "Enterprise Plan 11-20 Users"; + $_sub->recurring_product_ids = "{$pe20->hashed_id}"; + $_sub->max_seats_limit =20; + $_sub->per_seat_enabled = true; + $_sub->save(); + + + $sub = SubscriptionFactory::create($company->id, $user->id); + $sub->name = "DocuNinja Monthly Plan"; + $sub->group_id = $gs->id; + $sub->recurring_product_ids = "{$p4->hashed_id}"; + $sub->webhook_configuration = $webhook_config; + $sub->allow_plan_changes = true; + $sub->frequency_id = RecurringInvoice::FREQUENCY_MONTHLY; + $sub->save(); + + $sub = SubscriptionFactory::create($company->id, $user->id); + $sub->name = "DocuNinja Annual Plan"; + $sub->group_id = $gs->id; + $sub->recurring_product_ids = "{$p5->hashed_id}"; + $sub->webhook_configuration = $webhook_config; + $sub->allow_plan_changes = true; + $sub->frequency_id = RecurringInvoice::FREQUENCY_ANNUALLY; + $sub->save(); + } private function createClient($company, $user) diff --git a/app/Http/Controllers/EInvoicePeppolController.php b/app/Http/Controllers/EInvoicePeppolController.php index decc84a3a3..a6398b9f06 100644 --- a/app/Http/Controllers/EInvoicePeppolController.php +++ b/app/Http/Controllers/EInvoicePeppolController.php @@ -51,6 +51,7 @@ class EInvoicePeppolController extends BaseController */ public function setup(StoreEntityRequest $request, Storecove $storecove): Response|JsonResponse { + /** * @var \App\Models\Company */ diff --git a/app/Libraries/MultiDB.php b/app/Libraries/MultiDB.php index 02f92f9a18..b85ef0a465 100644 --- a/app/Libraries/MultiDB.php +++ b/app/Libraries/MultiDB.php @@ -208,7 +208,7 @@ class MultiDB foreach (self::$dbs as $db) { self::setDB($db); - if ($user = User::on($db)->where($data)->withTrashed()->first()) { + if ($user = User::where($data)->withTrashed()->first()) { return $user; } } @@ -330,8 +330,9 @@ class MultiDB $current_db = config('database.default'); foreach (self::$dbs as $db) { + self::setDB($db); - if ($ct = CompanyToken::on($db)->with([ + if ($ct = CompanyToken::with([ 'user.account', 'company', 'account', @@ -563,9 +564,8 @@ class MultiDB $current_db = config('database.default'); foreach (self::$dbs as $db) { - if ($company = Company::on($db)->where($query_array)->first()) { - self::setDb($db); - + self::setDb($db); + if ($company = Company::where($query_array)->first()) { return $company; } } @@ -625,7 +625,6 @@ class MultiDB foreach (self::$dbs as $db) { if ($invite = $class::on($db)->where('key', $invitation_key)->exists()) { self::setDb($db); - return true; } } diff --git a/app/Services/EDocument/Gateway/Storecove/StorecoveProxy.php b/app/Services/EDocument/Gateway/Storecove/StorecoveProxy.php index 7c7de15c26..8061b44872 100644 --- a/app/Services/EDocument/Gateway/Storecove/StorecoveProxy.php +++ b/app/Services/EDocument/Gateway/Storecove/StorecoveProxy.php @@ -233,7 +233,7 @@ class StorecoveProxy ->withHeaders($this->getHeaders()) ->post($uri, $payload); - if ($response->successful()) { + if ($response->successful()) { if ($response->hasHeader('X-EINVOICE-QUOTA')) { // @dave is there any case this will run when user is not logged in? (async) diff --git a/lang/en/texts.php b/lang/en/texts.php index 6f1443598d..597df23bdc 100644 --- a/lang/en/texts.php +++ b/lang/en/texts.php @@ -1869,7 +1869,7 @@ $lang = array( 'upgrade_for_features' => 'Upgrade For More Features', 'pay_annually_discount' => 'Pay annually for 10 months + 2 free!', 'pro_upgrade_title' => 'Ninja Pro', - 'pro_upgrade_feature1' => 'YourBrand.InvoiceNinja.com', + 'pro_upgrade_feature1' => 'YourBrand.invoicing.co', 'pro_upgrade_feature2' => 'Customize every aspect of your invoice!', 'enterprise_upgrade_feature1' => 'Set permissions for multiple-users', 'enterprise_upgrade_feature2' => 'Attach 3rd party files to invoices & expenses', @@ -5530,7 +5530,7 @@ $lang = array( 'premium_business_plus_label' => 'Premium Business+', 'pro_plan_feature_1' => 'Unlimited Clients & Invoices', 'pro_plan_feature_2' => 'Remove "Created by Invoice Ninja"', - 'pro_plan_feature_3' => 'Email Invoices via Gmail & MSN', + 'pro_plan_feature_3' => 'Email Invoices via Gmail & Microsoft', 'pro_plan_feature_4' => 'Email Invoices via your custom SMTP', 'pro_plan_feature_5' => 'Branded URL: "YourSite".Invoicing.co', 'pro_plan_feature_6' => '11 Professional Invoice Templates', @@ -5546,10 +5546,10 @@ $lang = array( 'pro_plan_feature_16' => 'Interlink 10 Companies with 1 Login', 'pro_plan_feature_17' => 'Create Unique "Client Group" Settings', 'pro_plan_feature_18' => 'Auto Sales Tax Calculation (US States)', - 'enterprise_plan_feature_1' => 'Create Additional Account Users (up to 50!) & Set Permissions per User', - 'enterprise_plan_feature_2' => 'Attach Files to Emails & Client-Portal (pdf, jpg, ppt, xls, doc & more)', - 'enterprise_plan_feature_3' => 'Fully Branded Client Portal: "Billing.YourCompany.com"', - 'enterprise_plan_feature_4' => 'Integrate Your Financial Accounts and Sync Banking Transactions via Yodlee or Nordigen Banking Platforms', + 'enterprise_plan_feature_1' => 'Additional Account Users & Permissions', + 'enterprise_plan_feature_2' => 'Upload & Attach Files', + 'enterprise_plan_feature_3' => 'Custom Portal Domain: "Billing.YourCompany.com"', + 'enterprise_plan_feature_4' => 'Connect your bank accounts for syncing', 'premium_business_plus_feature_1' => 'Developer Concierge', 'premium_business_plus_feature_2' => 'Direct Priority Support', 'premium_business_plus_feature_3' => 'Invoice Design Service', diff --git a/routes/api.php b/routes/api.php index 0e71b6111e..e34a5f0730 100644 --- a/routes/api.php +++ b/routes/api.php @@ -139,7 +139,7 @@ Route::group(['middleware' => ['throttle:login', 'api_secret_check', 'email_db'] Route::post('api/v1/reset_password', [ForgotPasswordController::class, 'sendResetLinkEmail']); }); -Route::group(['middleware' => ['throttle:api', 'api_db', 'token_auth', 'valid_json','locale'], 'prefix' => 'api/v1', 'as' => 'api.'], function () { +Route::group(['middleware' => ['throttle:api', 'token_auth', 'valid_json','locale'], 'prefix' => 'api/v1', 'as' => 'api.'], function () { Route::post('password_timeout', PasswordTimeoutController::class)->name('password_timeout'); Route::put('accounts/{account}', [AccountController::class, 'update'])->name('account.update'); diff --git a/routes/client.php b/routes/client.php index 9aa3ac962a..48fb93cb0c 100644 --- a/routes/client.php +++ b/routes/client.php @@ -123,7 +123,7 @@ Route::get('client/subscriptions/{subscription}/purchase', [App\Http\Controllers Route::get('client/subscriptions/{subscription}/purchase/v2', [App\Http\Controllers\ClientPortal\SubscriptionPurchaseController::class, 'upgrade'])->name('client.subscription.upgrade')->middleware('domain_db'); Route::get('client/subscriptions/{subscription}/purchase/v3', [App\Http\Controllers\ClientPortal\SubscriptionPurchaseController::class, 'v3'])->name('client.subscription.v3')->middleware('domain_db'); -Route::group(['middleware' => ['api_db','invite_db'], 'prefix' => 'client', 'as' => 'client.'], function () { +Route::group(['middleware' => ['invite_db'], 'prefix' => 'client', 'as' => 'client.'], function () { /*Invitation catches*/ Route::get('recurring_invoice/{invitation_key}', [App\Http\Controllers\ClientPortal\InvitationController::class, 'recurringRouter']); Route::get('invoice/{invitation_key}', [App\Http\Controllers\ClientPortal\InvitationController::class, 'invoiceRouter']);