Merge pull request #7784 from turbo124/v5-stable

v5.5.17
This commit is contained in:
David Bomba 2022-08-27 19:45:58 +10:00 committed by GitHub
commit 62c101d247
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 79194 additions and 78864 deletions

View File

@ -1 +1 @@
5.5.16 5.5.17

View File

@ -232,7 +232,12 @@ class BaseController extends Controller
$query->where('clients.updated_at', '>=', $updated_at)->with('contacts.company', 'gateway_tokens', 'documents'); $query->where('clients.updated_at', '>=', $updated_at)->with('contacts.company', 'gateway_tokens', 'documents');
if (! $user->hasPermission('view_client')) { if (! $user->hasPermission('view_client')) {
// $query->where('clients.user_id', $user->id)->orWhere('clients.assigned_user_id', $user->id);
$query->whereNested(function($query) use ($user) {
$query->where('clients.user_id', $user->id)->orWhere('clients.assigned_user_id', $user->id); $query->where('clients.user_id', $user->id)->orWhere('clients.assigned_user_id', $user->id);
});
} }
}, },
'company.company_gateways' => function ($query) use ($user) { 'company.company_gateways' => function ($query) use ($user) {
@ -246,7 +251,11 @@ class BaseController extends Controller
$query->where('updated_at', '>=', $updated_at)->with('invitations', 'documents'); $query->where('updated_at', '>=', $updated_at)->with('invitations', 'documents');
if (! $user->hasPermission('view_credit')) { if (! $user->hasPermission('view_credit')) {
// $query->where('credits.user_id', $user->id)->orWhere('credits.assigned_user_id', $user->id);
$query->whereNested(function($query) use ($user) {
$query->where('credits.user_id', $user->id)->orWhere('credits.assigned_user_id', $user->id); $query->where('credits.user_id', $user->id)->orWhere('credits.assigned_user_id', $user->id);
});
} }
}, },
'company.designs'=> function ($query) use ($updated_at, $user) { 'company.designs'=> function ($query) use ($updated_at, $user) {
@ -263,7 +272,11 @@ class BaseController extends Controller
$query->where('updated_at', '>=', $updated_at)->with('documents'); $query->where('updated_at', '>=', $updated_at)->with('documents');
if (! $user->hasPermission('view_expense')) { if (! $user->hasPermission('view_expense')) {
// $query->where('expenses.user_id', $user->id)->orWhere('expenses.assigned_user_id', $user->id);
$query->whereNested(function($query) use ($user) {
$query->where('expenses.user_id', $user->id)->orWhere('expenses.assigned_user_id', $user->id); $query->where('expenses.user_id', $user->id)->orWhere('expenses.assigned_user_id', $user->id);
});
} }
}, },
'company.groups' => function ($query) use ($updated_at, $user) { 'company.groups' => function ($query) use ($updated_at, $user) {
@ -276,14 +289,25 @@ class BaseController extends Controller
$query->where('updated_at', '>=', $updated_at)->with('invitations', 'documents'); $query->where('updated_at', '>=', $updated_at)->with('invitations', 'documents');
if (! $user->hasPermission('view_invoice')) { if (! $user->hasPermission('view_invoice')) {
// $query->where('invoices.user_id', $user->id)->orWhere('invoices.assigned_user_id', $user->id);
$query->whereNested(function($query) use ($user) {
$query->where('invoices.user_id', $user->id)->orWhere('invoices.assigned_user_id', $user->id); $query->where('invoices.user_id', $user->id)->orWhere('invoices.assigned_user_id', $user->id);
});
} }
}, },
'company.payments'=> function ($query) use ($updated_at, $user) { 'company.payments'=> function ($query) use ($updated_at, $user) {
$query->where('updated_at', '>=', $updated_at)->with('paymentables', 'documents'); $query->where('updated_at', '>=', $updated_at)->with('paymentables', 'documents');
if (! $user->hasPermission('view_payment')) { if (! $user->hasPermission('view_payment')) {
// $query->where('payments.user_id', $user->id)->orWhere('payments.assigned_user_id', $user->id);
$query->whereNested(function($query) use ($user) {
$query->where('payments.user_id', $user->id)->orWhere('payments.assigned_user_id', $user->id); $query->where('payments.user_id', $user->id)->orWhere('payments.assigned_user_id', $user->id);
});
} }
}, },
'company.payment_terms'=> function ($query) use ($updated_at, $user) { 'company.payment_terms'=> function ($query) use ($updated_at, $user) {
@ -297,49 +321,88 @@ class BaseController extends Controller
$query->where('updated_at', '>=', $updated_at)->with('documents'); $query->where('updated_at', '>=', $updated_at)->with('documents');
if (! $user->hasPermission('view_product')) { if (! $user->hasPermission('view_product')) {
// $query->where('products.user_id', $user->id)->orWhere('products.assigned_user_id', $user->id);
$query->whereNested(function($query) use ($user) {
$query->where('products.user_id', $user->id)->orWhere('products.assigned_user_id', $user->id); $query->where('products.user_id', $user->id)->orWhere('products.assigned_user_id', $user->id);
});
} }
}, },
'company.projects'=> function ($query) use ($updated_at, $user) { 'company.projects'=> function ($query) use ($updated_at, $user) {
$query->where('updated_at', '>=', $updated_at)->with('documents'); $query->where('updated_at', '>=', $updated_at)->with('documents');
if (! $user->hasPermission('view_project')) { if (! $user->hasPermission('view_project')) {
// $query->where('projects.user_id', $user->id)->orWhere('projects.assigned_user_id', $user->id);
$query->whereNested(function($query) use ($user) {
$query->where('projects.user_id', $user->id)->orWhere('projects.assigned_user_id', $user->id); $query->where('projects.user_id', $user->id)->orWhere('projects.assigned_user_id', $user->id);
});
} }
}, },
'company.purchase_orders'=> function ($query) use ($updated_at, $user) { 'company.purchase_orders'=> function ($query) use ($updated_at, $user) {
$query->where('updated_at', '>=', $updated_at)->with('documents'); $query->where('updated_at', '>=', $updated_at)->with('documents');
if (! $user->hasPermission('view_purchase_order')) { if (! $user->hasPermission('view_purchase_order')) {
// $query->where('purchase_orders.user_id', $user->id)->orWhere('purchase_orders.assigned_user_id', $user->id);
$query->whereNested(function($query) use ($user) {
$query->where('purchase_orders.user_id', $user->id)->orWhere('purchase_orders.assigned_user_id', $user->id); $query->where('purchase_orders.user_id', $user->id)->orWhere('purchase_orders.assigned_user_id', $user->id);
});
} }
}, },
'company.quotes'=> function ($query) use ($updated_at, $user) { 'company.quotes'=> function ($query) use ($updated_at, $user) {
$query->where('updated_at', '>=', $updated_at)->with('invitations', 'documents'); $query->where('updated_at', '>=', $updated_at)->with('invitations', 'documents');
if (! $user->hasPermission('view_quote')) { if (! $user->hasPermission('view_quote')) {
// $query->where('quotes.user_id', $user->id)->orWhere('quotes.assigned_user_id', $user->id);
$query->whereNested(function($query) use ($user) {
$query->where('quotes.user_id', $user->id)->orWhere('quotes.assigned_user_id', $user->id); $query->where('quotes.user_id', $user->id)->orWhere('quotes.assigned_user_id', $user->id);
});
} }
}, },
'company.recurring_invoices'=> function ($query) use ($updated_at, $user) { 'company.recurring_invoices'=> function ($query) use ($updated_at, $user) {
$query->where('updated_at', '>=', $updated_at)->with('invitations', 'documents', 'client.gateway_tokens', 'client.group_settings', 'client.company'); $query->where('updated_at', '>=', $updated_at)->with('invitations', 'documents', 'client.gateway_tokens', 'client.group_settings', 'client.company');
if (! $user->hasPermission('view_recurring_invoice')) { if (! $user->hasPermission('view_recurring_invoice')) {
// $query->where('recurring_invoices.user_id', $user->id)->orWhere('recurring_invoices.assigned_user_id', $user->id);
$query->whereNested(function($query) use ($user) {
$query->where('recurring_invoices.user_id', $user->id)->orWhere('recurring_invoices.assigned_user_id', $user->id); $query->where('recurring_invoices.user_id', $user->id)->orWhere('recurring_invoices.assigned_user_id', $user->id);
});
} }
}, },
'company.recurring_expenses'=> function ($query) use ($updated_at, $user) { 'company.recurring_expenses'=> function ($query) use ($updated_at, $user) {
$query->where('updated_at', '>=', $updated_at)->with('documents'); $query->where('updated_at', '>=', $updated_at)->with('documents');
if (! $user->hasPermission('view_recurring_expense')) { if (! $user->hasPermission('view_recurring_expense')) {
// $query->where('recurring_expenses.user_id', $user->id)->orWhere('recurring_expenses.assigned_user_id', $user->id);
$query->whereNested(function($query) use ($user) {
$query->where('recurring_expenses.user_id', $user->id)->orWhere('recurring_expenses.assigned_user_id', $user->id); $query->where('recurring_expenses.user_id', $user->id)->orWhere('recurring_expenses.assigned_user_id', $user->id);
});
} }
}, },
'company.tasks'=> function ($query) use ($updated_at, $user) { 'company.tasks'=> function ($query) use ($updated_at, $user) {
$query->where('updated_at', '>=', $updated_at)->with('documents'); $query->where('updated_at', '>=', $updated_at)->with('documents');
if (! $user->hasPermission('view_task')) { if (! $user->hasPermission('view_task')) {
// $query->where('tasks.user_id', $user->id)->orWhere('tasks.assigned_user_id', $user->id);
$query->whereNested(function($query) use ($user) {
$query->where('tasks.user_id', $user->id)->orWhere('tasks.assigned_user_id', $user->id); $query->where('tasks.user_id', $user->id)->orWhere('tasks.assigned_user_id', $user->id);
});
} }
}, },
'company.tax_rates'=> function ($query) use ($updated_at, $user) { 'company.tax_rates'=> function ($query) use ($updated_at, $user) {
@ -349,7 +412,12 @@ class BaseController extends Controller
$query->where('updated_at', '>=', $updated_at)->with('contacts', 'documents'); $query->where('updated_at', '>=', $updated_at)->with('contacts', 'documents');
if (! $user->hasPermission('view_vendor')) { if (! $user->hasPermission('view_vendor')) {
// $query->where('vendors.user_id', $user->id)->orWhere('vendors.assigned_user_id', $user->id);
$query->whereNested(function($query) use ($user) {
$query->where('vendors.user_id', $user->id)->orWhere('vendors.assigned_user_id', $user->id); $query->where('vendors.user_id', $user->id)->orWhere('vendors.assigned_user_id', $user->id);
});
} }
}, },
'company.expense_categories'=> function ($query) use ($updated_at, $user) { 'company.expense_categories'=> function ($query) use ($updated_at, $user) {
@ -480,7 +548,12 @@ class BaseController extends Controller
$query->where('clients.created_at', '>=', $created_at)->with('contacts.company', 'gateway_tokens', 'documents'); $query->where('clients.created_at', '>=', $created_at)->with('contacts.company', 'gateway_tokens', 'documents');
if (! $user->hasPermission('view_client')) { if (! $user->hasPermission('view_client')) {
// $query->where('clients.user_id', $user->id)->orWhere('clients.assigned_user_id', $user->id);
$query->whereNested(function($query) use ($user) {
$query->where('clients.user_id', $user->id)->orWhere('clients.assigned_user_id', $user->id); $query->where('clients.user_id', $user->id)->orWhere('clients.assigned_user_id', $user->id);
});
} }
}, },
'company.company_gateways' => function ($query) use ($user) { 'company.company_gateways' => function ($query) use ($user) {
@ -494,7 +567,11 @@ class BaseController extends Controller
$query->where('created_at', '>=', $created_at)->with('invitations', 'documents'); $query->where('created_at', '>=', $created_at)->with('invitations', 'documents');
if (! $user->hasPermission('view_credit')) { if (! $user->hasPermission('view_credit')) {
// $query->where('credits.user_id', $user->id)->orWhere('credits.assigned_user_id', $user->id);
$query->whereNested(function($query) use ($user) {
$query->where('credits.user_id', $user->id)->orWhere('credits.assigned_user_id', $user->id); $query->where('credits.user_id', $user->id)->orWhere('credits.assigned_user_id', $user->id);
});
} }
}, },
'company.documents'=> function ($query) use ($created_at, $user) { 'company.documents'=> function ($query) use ($created_at, $user) {
@ -504,7 +581,13 @@ class BaseController extends Controller
$query->where('created_at', '>=', $created_at)->with('documents'); $query->where('created_at', '>=', $created_at)->with('documents');
if (! $user->hasPermission('view_expense')) { if (! $user->hasPermission('view_expense')) {
// $query->where('expenses.user_id', $user->id)->orWhere('expenses.assigned_user_id', $user->id);
$query->whereNested(function($query) use ($user) {
$query->where('expenses.user_id', $user->id)->orWhere('expenses.assigned_user_id', $user->id); $query->where('expenses.user_id', $user->id)->orWhere('expenses.assigned_user_id', $user->id);
});
} }
}, },
'company.groups' => function ($query) use ($created_at, $user) { 'company.groups' => function ($query) use ($created_at, $user) {
@ -514,14 +597,24 @@ class BaseController extends Controller
$query->where('created_at', '>=', $created_at)->with('invitations', 'documents'); $query->where('created_at', '>=', $created_at)->with('invitations', 'documents');
if (! $user->hasPermission('view_invoice')) { if (! $user->hasPermission('view_invoice')) {
// $query->where('invoices.user_id', $user->id)->orWhere('invoices.assigned_user_id', $user->id);
$query->whereNested(function($query) use ($user) {
$query->where('invoices.user_id', $user->id)->orWhere('invoices.assigned_user_id', $user->id); $query->where('invoices.user_id', $user->id)->orWhere('invoices.assigned_user_id', $user->id);
});
} }
}, },
'company.payments'=> function ($query) use ($created_at, $user) { 'company.payments'=> function ($query) use ($created_at, $user) {
$query->where('created_at', '>=', $created_at)->with('paymentables', 'documents'); $query->where('created_at', '>=', $created_at)->with('paymentables', 'documents');
if (! $user->hasPermission('view_payment')) { if (! $user->hasPermission('view_payment')) {
// $query->where('payments.user_id', $user->id)->orWhere('payments.assigned_user_id', $user->id);
$query->whereNested(function($query) use ($user) {
$query->where('payments.user_id', $user->id)->orWhere('payments.assigned_user_id', $user->id); $query->where('payments.user_id', $user->id)->orWhere('payments.assigned_user_id', $user->id);
});
} }
}, },
'company.payment_terms'=> function ($query) use ($created_at, $user) { 'company.payment_terms'=> function ($query) use ($created_at, $user) {
@ -531,42 +624,67 @@ class BaseController extends Controller
$query->where('created_at', '>=', $created_at)->with('documents'); $query->where('created_at', '>=', $created_at)->with('documents');
if (! $user->hasPermission('view_product')) { if (! $user->hasPermission('view_product')) {
// $query->where('products.user_id', $user->id)->orWhere('products.assigned_user_id', $user->id);
$query->whereNested(function($query) use ($user) {
$query->where('products.user_id', $user->id)->orWhere('products.assigned_user_id', $user->id); $query->where('products.user_id', $user->id)->orWhere('products.assigned_user_id', $user->id);
});
} }
}, },
'company.projects'=> function ($query) use ($created_at, $user) { 'company.projects'=> function ($query) use ($created_at, $user) {
$query->where('created_at', '>=', $created_at)->with('documents'); $query->where('created_at', '>=', $created_at)->with('documents');
if (! $user->hasPermission('view_project')) { if (! $user->hasPermission('view_project')) {
// $query->where('projects.user_id', $user->id)->orWhere('projects.assigned_user_id', $user->id);
$query->whereNested(function($query) use ($user) {
$query->where('projects.user_id', $user->id)->orWhere('projects.assigned_user_id', $user->id); $query->where('projects.user_id', $user->id)->orWhere('projects.assigned_user_id', $user->id);
});
} }
}, },
'company.purchase_orders'=> function ($query) use ($created_at, $user) { 'company.purchase_orders'=> function ($query) use ($created_at, $user) {
$query->where('created_at', '>=', $created_at)->with('documents'); $query->where('created_at', '>=', $created_at)->with('documents');
if (! $user->hasPermission('view_purchase_order')) { if (! $user->hasPermission('view_purchase_order')) {
// $query->where('purchase_orders.user_id', $user->id)->orWhere('purchase_orders.assigned_user_id', $user->id);
$query->whereNested(function($query) use ($user) {
$query->where('purchase_orders.user_id', $user->id)->orWhere('purchase_orders.assigned_user_id', $user->id); $query->where('purchase_orders.user_id', $user->id)->orWhere('purchase_orders.assigned_user_id', $user->id);
});
} }
}, },
'company.quotes'=> function ($query) use ($created_at, $user) { 'company.quotes'=> function ($query) use ($created_at, $user) {
$query->where('created_at', '>=', $created_at)->with('invitations', 'documents'); $query->where('created_at', '>=', $created_at)->with('invitations', 'documents');
if (! $user->hasPermission('view_quote')) { if (! $user->hasPermission('view_quote')) {
// $query->where('quotes.user_id', $user->id)->orWhere('quotes.assigned_user_id', $user->id);
$query->whereNested(function($query) use ($user) {
$query->where('quotes.user_id', $user->id)->orWhere('quotes.assigned_user_id', $user->id); $query->where('quotes.user_id', $user->id)->orWhere('quotes.assigned_user_id', $user->id);
});
} }
}, },
'company.recurring_invoices'=> function ($query) use ($created_at, $user) { 'company.recurring_invoices'=> function ($query) use ($created_at, $user) {
$query->where('created_at', '>=', $created_at)->with('invitations', 'documents', 'client.gateway_tokens', 'client.group_settings', 'client.company'); $query->where('created_at', '>=', $created_at)->with('invitations', 'documents', 'client.gateway_tokens', 'client.group_settings', 'client.company');
if (! $user->hasPermission('view_recurring_invoice')) { if (! $user->hasPermission('view_recurring_invoice')) {
// $query->where('recurring_invoices.user_id', $user->id)->orWhere('recurring_invoices.assigned_user_id', $user->id);
$query->whereNested(function($query) use ($user) {
$query->where('recurring_invoices.user_id', $user->id)->orWhere('recurring_invoices.assigned_user_id', $user->id); $query->where('recurring_invoices.user_id', $user->id)->orWhere('recurring_invoices.assigned_user_id', $user->id);
});
} }
}, },
'company.tasks'=> function ($query) use ($created_at, $user) { 'company.tasks'=> function ($query) use ($created_at, $user) {
$query->where('created_at', '>=', $created_at)->with('documents'); $query->where('created_at', '>=', $created_at)->with('documents');
if (! $user->hasPermission('view_task')) { if (! $user->hasPermission('view_task')) {
// $query->where('tasks.user_id', $user->id)->orWhere('tasks.assigned_user_id', $user->id);
$query->whereNested(function($query) use ($user) {
$query->where('tasks.user_id', $user->id)->orWhere('tasks.assigned_user_id', $user->id); $query->where('tasks.user_id', $user->id)->orWhere('tasks.assigned_user_id', $user->id);
});
} }
}, },
'company.tax_rates' => function ($query) use ($created_at, $user) { 'company.tax_rates' => function ($query) use ($created_at, $user) {
@ -576,7 +694,12 @@ class BaseController extends Controller
$query->where('created_at', '>=', $created_at)->with('contacts', 'documents'); $query->where('created_at', '>=', $created_at)->with('contacts', 'documents');
if (! $user->hasPermission('view_vendor')) { if (! $user->hasPermission('view_vendor')) {
// $query->where('vendors.user_id', $user->id)->orWhere('vendors.assigned_user_id', $user->id);
$query->whereNested(function($query) use ($user) {
$query->where('vendors.user_id', $user->id)->orWhere('vendors.assigned_user_id', $user->id); $query->where('vendors.user_id', $user->id)->orWhere('vendors.assigned_user_id', $user->id);
});
} }
}, },
'company.expense_categories'=> function ($query) use ($created_at, $user) { 'company.expense_categories'=> function ($query) use ($created_at, $user) {
@ -610,7 +733,12 @@ class BaseController extends Controller
$query->where('created_at', '>=', $created_at)->with('documents'); $query->where('created_at', '>=', $created_at)->with('documents');
if (! $user->hasPermission('view_recurring_expense')) { if (! $user->hasPermission('view_recurring_expense')) {
// $query->where('recurring_expenses.user_id', $user->id)->orWhere('recurring_expenses.assigned_user_id', $user->id);
$query->whereNested(function($query) use ($user) {
$query->where('recurring_expenses.user_id', $user->id)->orWhere('recurring_expenses.assigned_user_id', $user->id); $query->where('recurring_expenses.user_id', $user->id)->orWhere('recurring_expenses.assigned_user_id', $user->id);
});
} }
}, },
] ]

View File

@ -98,6 +98,27 @@ class NinjaPlanController extends Controller
$stripe_response = json_decode($request->input('gateway_response')); $stripe_response = json_decode($request->input('gateway_response'));
$customer = $gateway_driver->findOrCreateCustomer(); $customer = $gateway_driver->findOrCreateCustomer();
//27-08-2022 Ensure customer is updated appropriately
$update_client_object['name'] = $client->present()->name();
$update_client_object['phone'] = substr($client->present()->phone(), 0, 20);
$update_client_object['address']['line1'] = $client->address1 ?: '';
$update_client_object['address']['line2'] = $client->address2 ?: '';
$update_client_object['address']['city'] = $client->city ?: '';
$update_client_object['address']['postal_code'] = $client->postal_code ?: '';
$update_client_object['address']['state'] = $client->state ?: '';
$update_client_object['address']['country'] = $client->country ? $client->country->iso_3166_2 : '';
$update_client_object['shipping']['name'] = $client->present()->name();
$update_client_object['shipping']['address']['line1'] = $client->shipping_address1 ?: '';
$update_client_object['shipping']['address']['line2'] = $client->shipping_address2 ?: '';
$update_client_object['shipping']['address']['city'] = $client->shipping_city ?: '';
$update_client_object['shipping']['address']['postal_code'] = $client->shipping_postal_code ?: '';
$update_client_object['shipping']['address']['state'] = $client->shipping_state ?: '';
$update_client_object['shipping']['address']['country'] = $client->shipping_country ? $client->shipping_country->iso_3166_2 : '';
\Stripe\Customer::update($customer->id, $update_client_object, $gateway_driver->stripe_connect_auth);
$gateway_driver->attach($stripe_response->payment_method, $customer); $gateway_driver->attach($stripe_response->payment_method, $customer);
$method = $gateway_driver->getStripePaymentMethod($stripe_response->payment_method); $method = $gateway_driver->getStripePaymentMethod($stripe_response->payment_method);

View File

@ -181,7 +181,6 @@ class QuoteController extends Controller
if ($process) { if ($process) {
foreach ($quotes as $quote) { foreach ($quotes as $quote) {
$quote->service()->approve(auth()->user())->save(); $quote->service()->approve(auth()->user())->save();
// event(new QuoteWasApproved(auth()->guard('contact')->user(), $quote, $quote->company, Ninja::eventVars()));
if (request()->has('signature') && ! is_null(request()->signature) && ! empty(request()->signature)) { if (request()->has('signature') && ! is_null(request()->signature) && ! empty(request()->signature)) {
InjectSignature::dispatch($quote, request()->signature); InjectSignature::dispatch($quote, request()->signature);

View File

@ -69,7 +69,7 @@ class StoreExpenseRequest extends Request
/* Ensure the project is related */ /* Ensure the project is related */
if (array_key_exists('project_id', $input) && isset($input['project_id'])) { if (array_key_exists('project_id', $input) && isset($input['project_id'])) {
$project = Project::withTrashed()->find($input['project_id'])->company()->first(); $project = Project::withTrashed()->where('id', $input['project_id'])->company()->first();
if($project){ if($project){
$input['client_id'] = $project->client_id; $input['client_id'] = $project->client_id;

View File

@ -64,7 +64,7 @@ class UpdateExpenseRequest extends Request
/* Ensure the project is related */ /* Ensure the project is related */
if (array_key_exists('project_id', $input) && isset($input['project_id'])) { if (array_key_exists('project_id', $input) && isset($input['project_id'])) {
$project = Project::withTrashed()->find($input['project_id'])->company()->first(); $project = Project::withTrashed()->where('id', $input['project_id'])->company()->first();
if($project){ if($project){
$input['client_id'] = $project->client_id; $input['client_id'] = $project->client_id;

View File

@ -85,6 +85,11 @@ class CreateAccount
$sp794f3f->hosted_client_count = config('ninja.quotas.free.clients'); $sp794f3f->hosted_client_count = config('ninja.quotas.free.clients');
$sp794f3f->hosted_company_count = config('ninja.quotas.free.max_companies'); $sp794f3f->hosted_company_count = config('ninja.quotas.free.max_companies');
$sp794f3f->account_sms_verified = true; $sp794f3f->account_sms_verified = true;
if(in_array($this->getDomain($this->request['email']), ['gmail.com', 'hotmail.com', 'outlook.com', 'yahoo.com'])){
$sp794f3f->account_sms_verified = false;
}
// $sp794f3f->trial_started = now(); // $sp794f3f->trial_started = now();
// $sp794f3f->trial_plan = 'pro'; // $sp794f3f->trial_plan = 'pro';
} }
@ -155,4 +160,19 @@ class CreateAccount
return $sp794f3f; return $sp794f3f;
} }
private function getDomain($email)
{
if( filter_var( $email, FILTER_VALIDATE_EMAIL ) ) {
// split on @ and return last value of array (the domain)
$domain = explode('@', $email);
$domain_name = end($domain);
return $domain_name;
}
return 'gmail.com';
}
} }

View File

@ -120,6 +120,7 @@ class Company extends BaseModel
'inventory_notification_threshold', 'inventory_notification_threshold',
'stock_notification', 'stock_notification',
'enabled_expense_tax_rates', 'enabled_expense_tax_rates',
'invoice_task_project',
]; ];
protected $hidden = [ protected $hidden = [

View File

@ -73,7 +73,10 @@ class PaymentRepository extends BaseRepository {
unset($data['exchange_rate']); unset($data['exchange_rate']);
$is_existing_payment = false; $is_existing_payment = false;
$client = Client::where('id', $data['client_id'])->withTrashed()->first();
\DB::connection(config('database.default'))->transaction(function () use ($data) {
$client = Client::where('id', $data['client_id'])->withTrashed()->lockForUpdate()->first();
/*We only update the paid to date ONCE per payment*/ /*We only update the paid to date ONCE per payment*/
if (array_key_exists('invoices', $data) && is_array($data['invoices']) && count($data['invoices']) > 0) { if (array_key_exists('invoices', $data) && is_array($data['invoices']) && count($data['invoices']) > 0) {
@ -81,21 +84,28 @@ class PaymentRepository extends BaseRepository {
$data['amount'] = array_sum(array_column($data['invoices'], 'amount')); $data['amount'] = array_sum(array_column($data['invoices'], 'amount'));
} }
$client->service()->updatePaidToDate($data['amount'])->save(); // $client->service()->updatePaidToDate($data['amount'])->save();
$client->paid_to_date += $data['amount'];
$client->save();
} }
else{ else{
//this fixes an edge case with unapplied payments //this fixes an edge case with unapplied payments
$client->service()->updatePaidToDate($data['amount'])->save(); // $client->service()->updatePaidToDate($data['amount'])->save();
$client->paid_to_date += $data['amount'];
$client->save();
} }
if (array_key_exists('credits', $data) && is_array($data['credits']) && count($data['credits']) > 0) { if (array_key_exists('credits', $data) && is_array($data['credits']) && count($data['credits']) > 0) {
$_credit_totals = array_sum(array_column($data['credits'], 'amount')); $_credit_totals = array_sum(array_column($data['credits'], 'amount'));
$client->service()->updatePaidToDate($_credit_totals)->save(); // $client->service()->updatePaidToDate($_credit_totals)->save();
$client->paid_to_date += $_credit_totals;
$client->save();
} }
}, 1);
} }
/*Fill the payment*/ /*Fill the payment*/

View File

@ -70,7 +70,8 @@ class InstantPayment
$invoices->each(function ($invoice) { $invoices->each(function ($invoice) {
$invoice->service() $invoice->service()
->markSent() ->markSent()
->removeUnpaidGatewayFees(); ->removeUnpaidGatewayFees()
->save();
}); });
/* pop non payable invoice from the $payable_invoices array */ /* pop non payable invoice from the $payable_invoices array */

View File

@ -49,6 +49,6 @@ class SendEmail
} }
}); });
$this->credit->service()->markSent(); $this->credit->service()->markSent()->save();
} }
} }

View File

@ -42,7 +42,7 @@ class ApplyPaymentAmount extends AbstractService
public function run() public function run()
{ {
if ($this->invoice->status_id == Invoice::STATUS_DRAFT) { if ($this->invoice->status_id == Invoice::STATUS_DRAFT) {
$this->invoice->service()->markSent(); $this->invoice->service()->markSent()->save();
} }
/*Don't double pay*/ /*Don't double pay*/

View File

@ -178,6 +178,7 @@ class CompanyTransformer extends EntityTransformer
'track_inventory' => (bool) $company->track_inventory, 'track_inventory' => (bool) $company->track_inventory,
'enable_applying_payments' => (bool) $company->enable_applying_payments, 'enable_applying_payments' => (bool) $company->enable_applying_payments,
'enabled_expense_tax_rates' => (int) $company->enabled_expense_tax_rates, 'enabled_expense_tax_rates' => (int) $company->enabled_expense_tax_rates,
'invoice_task_project' => (bool) $company->invoice_task_project,
]; ];
} }

View File

@ -14,6 +14,7 @@ namespace App\Transformers;
use App\Models\PurchaseOrder; use App\Models\PurchaseOrder;
use App\Models\PurchaseOrderInvitation; use App\Models\PurchaseOrderInvitation;
use App\Models\Vendor;
use App\Transformers\DocumentTransformer; use App\Transformers\DocumentTransformer;
use App\Utils\Traits\MakesHash; use App\Utils\Traits\MakesHash;
@ -27,7 +28,8 @@ class PurchaseOrderTransformer extends EntityTransformer
]; ];
protected $availableIncludes = [ protected $availableIncludes = [
'expense' 'expense',
'vendor',
]; ];
public function includeInvitations(PurchaseOrder $purchase_order) public function includeInvitations(PurchaseOrder $purchase_order)
@ -49,7 +51,22 @@ class PurchaseOrderTransformer extends EntityTransformer
{ {
$transformer = new ExpenseTransformer($this->serializer); $transformer = new ExpenseTransformer($this->serializer);
return $this->includeItem($purchase_order->expense, $transformer, Document::class); if (!$purchase_order->expense) {
return null;
}
return $this->includeItem($purchase_order->expense, $transformer, Expense::class);
}
public function includeVendor(PurchaseOrder $purchase_order)
{
$transformer = new VendorTransformer($this->serializer);
if (!$purchase_order->vendor) {
return null;
}
return $this->includeItem($purchase_order->vendor, $transformer, Vendor::class);
} }
public function transform(PurchaseOrder $purchase_order) public function transform(PurchaseOrder $purchase_order)

View File

@ -95,12 +95,6 @@ return [
'strict' => env('DB_STRICT', false), 'strict' => env('DB_STRICT', false),
'engine' => 'InnoDB ROW_FORMAT=DYNAMIC', 'engine' => 'InnoDB ROW_FORMAT=DYNAMIC',
'options' => [], 'options' => [],
// 'options' => [
// PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,
// PDO::MYSQL_ATTR_SSL_KEY => env("DB_CLIENT_KEY", ''),
// PDO::MYSQL_ATTR_SSL_CERT => env("DB_CLIENT_CERT", ''),
// PDO::MYSQL_ATTR_SSL_CA => env("DB_CA_CERT", ''),
// ],
], ],
'db-ninja-01a' => [ 'db-ninja-01a' => [

View File

@ -14,8 +14,8 @@ return [
'require_https' => env('REQUIRE_HTTPS', true), 'require_https' => env('REQUIRE_HTTPS', true),
'app_url' => rtrim(env('APP_URL', ''), '/'), 'app_url' => rtrim(env('APP_URL', ''), '/'),
'app_domain' => env('APP_DOMAIN', 'invoicing.co'), 'app_domain' => env('APP_DOMAIN', 'invoicing.co'),
'app_version' => '5.5.16', 'app_version' => '5.5.17',
'app_tag' => '5.5.16', 'app_tag' => '5.5.17',
'minimum_client_version' => '5.0.16', 'minimum_client_version' => '5.0.16',
'terms_version' => '1.0.1', 'terms_version' => '1.0.1',
'api_secret' => env('API_SECRET', ''), 'api_secret' => env('API_SECRET', ''),

View File

@ -0,0 +1,31 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
//
Schema::table('companies', function (Blueprint $table) {
$table->boolean('invoice_task_project')->default(0);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
};

View File

@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('purchase_order_invitations', function (Blueprint $table) {
$table->enum('email_status', ['delivered', 'bounced', 'spam'])->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
}
};

View File

@ -4767,6 +4767,9 @@ $LANG = array(
'bulk_email_invoices' => 'Email Invoices', 'bulk_email_invoices' => 'Email Invoices',
'bulk_email_quotes' => 'Email Quotes', 'bulk_email_quotes' => 'Email Quotes',
'bulk_email_credits' => 'Email Credits', 'bulk_email_credits' => 'Email Credits',
'archive_purchase_order' => 'Archive Purchase Order',
'restore_purchase_order' => 'Restore Purchase Order',
'delete_purchase_order' => 'Delete Purchase Order',
); );
return $LANG; return $LANG;

View File

@ -7,7 +7,7 @@ const RESOURCES = {
"canvaskit/profiling/canvaskit.js": "ae2949af4efc61d28a4a80fffa1db900", "canvaskit/profiling/canvaskit.js": "ae2949af4efc61d28a4a80fffa1db900",
"canvaskit/profiling/canvaskit.wasm": "95e736ab31147d1b2c7b25f11d4c32cd", "canvaskit/profiling/canvaskit.wasm": "95e736ab31147d1b2c7b25f11d4c32cd",
"canvaskit/canvaskit.wasm": "4b83d89d9fecbea8ca46f2f760c5a9ba", "canvaskit/canvaskit.wasm": "4b83d89d9fecbea8ca46f2f760c5a9ba",
"main.dart.js": "809c193905ea4c80a7c0b2b0e484e1db", "main.dart.js": "3234746bf3c8a3ccec3cf901969c352c",
"favicon.ico": "51636d3a390451561744c42188ccd628", "favicon.ico": "51636d3a390451561744c42188ccd628",
"assets/AssetManifest.json": "759f9ef9973f7e26c2a51450b55bb9fa", "assets/AssetManifest.json": "759f9ef9973f7e26c2a51450b55bb9fa",
"assets/assets/google_fonts/Roboto-Regular.ttf": "8a36205bd9b83e03af0591a004bc97f4", "assets/assets/google_fonts/Roboto-Regular.ttf": "8a36205bd9b83e03af0591a004bc97f4",
@ -295,9 +295,9 @@ const RESOURCES = {
"assets/FontManifest.json": "087fb858dc3cbfbf6baf6a30004922f1", "assets/FontManifest.json": "087fb858dc3cbfbf6baf6a30004922f1",
"assets/NOTICES": "254a5bf1eeb00601955e148b31cb925c", "assets/NOTICES": "254a5bf1eeb00601955e148b31cb925c",
"flutter.js": "eb2682e33f25cd8f1fc59011497c35f8", "flutter.js": "eb2682e33f25cd8f1fc59011497c35f8",
"/": "f1ab1648b6acf56aebbd6ae07968a461", "/": "48872e415511ff066e9403545e4ba572",
"favicon.png": "dca91c54388f52eded692718d5a98b8b", "favicon.png": "dca91c54388f52eded692718d5a98b8b",
"version.json": "a10748384e57f928f4d2871ac7563faf", "version.json": "9eca00898047311eda7456072e79d77d",
"manifest.json": "ef43d90e57aa7682d7e2cfba2f484a40", "manifest.json": "ef43d90e57aa7682d7e2cfba2f484a40",
"icons/Icon-192.png": "bb1cf5f6982006952211c7c8404ffbed", "icons/Icon-192.png": "bb1cf5f6982006952211c7c8404ffbed",
"icons/Icon-512.png": "0f9aff01367f0a0c69773d25ca16ef35" "icons/Icon-512.png": "0f9aff01367f0a0c69773d25ca16ef35"

78643
public/main.dart.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

78401
public/main.foss.dart.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
{"app_name":"invoiceninja_flutter","version":"5.0.91","build_number":"91","package_name":"invoiceninja_flutter"} {"app_name":"invoiceninja_flutter","version":"5.0.92","build_number":"92","package_name":"invoiceninja_flutter"}