diff --git a/app/Export/CSV/BaseExport.php b/app/Export/CSV/BaseExport.php index e36cab4e346a..c3d9c2fdeb4f 100644 --- a/app/Export/CSV/BaseExport.php +++ b/app/Export/CSV/BaseExport.php @@ -836,36 +836,62 @@ class BaseExport protected function addClientFilter($query, $clients): Builder { - $transformed_clients = $this->transformKeys(explode(',', $clients)); - - $query->whereIn('client_id', $transformed_clients); + if(is_string($clients)) + $clients = explode(',', $clients); + + $transformed_clients = $this->transformKeys($clients); + + nlog($clients); + nlog($transformed_clients); + + if(count($transformed_clients) > 0) + $query->whereIn('client_id', $transformed_clients); return $query; } protected function addVendorFilter($query, $vendors): Builder { - $transformed_vendors = $this->transformKeys(explode(',', $vendors)); - $query->whereIn('vendor_id', $transformed_vendors); + if(is_string($vendors)) { + $vendors = explode(',', $vendors); + } + + $transformed_vendors = $this->transformKeys($vendors); + + if(count($transformed_vendors) > 0) + $query->whereIn('vendor_id', $transformed_vendors); return $query; } protected function addProjectFilter($query, $projects): Builder { - $transformed_projects = $this->transformKeys(explode(',', $projects)); - $query->whereIn('project_id', $transformed_projects); + if(is_string($projects)) { + $projects = explode(',', $projects); + } + + $transformed_projects = $this->transformKeys($projects); + + if(count($transformed_projects) > 0) + $query->whereIn('project_id', $transformed_projects); return $query; } protected function addCategoryFilter($query, $expense_categories): Builder { - $transformed_expense_categories = $this->transformKeys(explode(',', $expense_categories)); - $query->whereIn('category_id', $transformed_expense_categories); + if(is_string($expense_categories)) { + $expense_categories = explode(',', $expense_categories); + } + + $transformed_expense_categories = $this->transformKeys($expense_categories); + + + if(count($transformed_expense_categories) > 0) + $query->whereIn('category_id', $transformed_expense_categories); return $query; } @@ -875,7 +901,6 @@ class BaseExport $status_parameters = explode(',', $status); - if(in_array('all', $status_parameters)) { return $query; } @@ -931,6 +956,8 @@ class BaseExport $date_range = $this->input['date_range']; + nlog($date_range); + if (array_key_exists('date_key', $this->input) && strlen($this->input['date_key']) > 1) { $this->date_key = $this->input['date_key']; } @@ -1262,7 +1289,7 @@ class BaseExport public function queueDocuments(Builder $query) { - + nlog("queue docs pls"); if($query->getModel() instanceof Document) $documents = $query->pluck('id')->toArray(); else{ @@ -1274,6 +1301,7 @@ class BaseExport } nlog($documents); + if(count($documents) > 0) { $user = $this->company->owner(); diff --git a/app/Export/CSV/ExpenseExport.php b/app/Export/CSV/ExpenseExport.php index 3ab505511330..50fd64835e5e 100644 --- a/app/Export/CSV/ExpenseExport.php +++ b/app/Export/CSV/ExpenseExport.php @@ -104,6 +104,7 @@ class ExpenseExport extends BaseExport $query = $this->addCategoryFilter($query, $this->input['categories']); } + nlog($this->input); if($this->input['document_email_attachment'] ?? false) { $this->queueDocuments($query); } @@ -122,6 +123,8 @@ class ExpenseExport extends BaseExport //insert the header $this->csv->insertOne($this->buildHeader()); + nlog("expense counter = "); + nlog($query->count()); $query->cursor() ->each(function ($expense) { $this->csv->insertOne($this->buildRow($expense)); diff --git a/app/Export/Decorators/ClientDecorator.php b/app/Export/Decorators/ClientDecorator.php index fd9d5f0eeda3..4f1a45d35b65 100644 --- a/app/Export/Decorators/ClientDecorator.php +++ b/app/Export/Decorators/ClientDecorator.php @@ -29,7 +29,7 @@ class ClientDecorator extends Decorator implements DecoratorInterface if($client && method_exists($this, $key)) { return $this->{$key}($client); - } elseif($client && $client->{$key}) { + } elseif($client && ($client->{$key} ?? false)) { return $client->{$key}; } diff --git a/app/Export/Decorators/ContactDecorator.php b/app/Export/Decorators/ContactDecorator.php index 800a549688b0..921ad85f666f 100644 --- a/app/Export/Decorators/ContactDecorator.php +++ b/app/Export/Decorators/ContactDecorator.php @@ -27,7 +27,7 @@ class ContactDecorator implements DecoratorInterface if($contact && method_exists($this, $key)) { return $this->{$key}($contact); - } elseif($contact && $contact->{$key}) { + } elseif($contact && ($contact->{$key} ?? false)) { return $contact->{$key}; } diff --git a/app/Export/Decorators/CreditDecorator.php b/app/Export/Decorators/CreditDecorator.php index 683c89dfd954..55e764b1c3f9 100644 --- a/app/Export/Decorators/CreditDecorator.php +++ b/app/Export/Decorators/CreditDecorator.php @@ -27,7 +27,7 @@ class CreditDecorator implements DecoratorInterface if($credit && method_exists($this, $key)) { return $this->{$key}($credit); - } elseif($credit && $credit->{$key}) { + } elseif($credit && ($credit->{$key} ?? false)) { return $credit->{$key}; } diff --git a/app/Export/Decorators/ExpenseDecorator.php b/app/Export/Decorators/ExpenseDecorator.php index 682b6d3a6bec..47e414844f53 100644 --- a/app/Export/Decorators/ExpenseDecorator.php +++ b/app/Export/Decorators/ExpenseDecorator.php @@ -27,7 +27,7 @@ class ExpenseDecorator implements DecoratorInterface if($expense && method_exists($this, $key)) { return $this->{$key}($expense); - } elseif($expense && $expense->{$key}) { + } elseif($expense && ($expense->{$key} ?? false)) { return $expense->{$key}; } @@ -35,6 +35,11 @@ class ExpenseDecorator implements DecoratorInterface } + public function category(Expense $expense) + { + return $this->category_id($expense); + } + public function category_id(Expense $expense) { return $expense->category ? $expense->category->name : ''; diff --git a/app/Export/Decorators/InvoiceDecorator.php b/app/Export/Decorators/InvoiceDecorator.php index 592890df4326..8dd6d36e439d 100644 --- a/app/Export/Decorators/InvoiceDecorator.php +++ b/app/Export/Decorators/InvoiceDecorator.php @@ -29,7 +29,7 @@ class InvoiceDecorator extends Decorator implements DecoratorInterface if($invoice && method_exists($this, $key)) { return $this->{$key}($invoice); - } elseif($invoice && $invoice->{$key}) { + } elseif($invoice && ($invoice->{$key} ?? false)) { return $invoice->{$key}; } diff --git a/app/Export/Decorators/PaymentDecorator.php b/app/Export/Decorators/PaymentDecorator.php index 7f02d03fd4f0..64827668fa87 100644 --- a/app/Export/Decorators/PaymentDecorator.php +++ b/app/Export/Decorators/PaymentDecorator.php @@ -41,7 +41,7 @@ class PaymentDecorator extends Decorator implements DecoratorInterface if($payment && method_exists($this, $key)) { return $this->{$key}($payment); - } elseif($payment && $payment->{$key}) { + } elseif($payment && ($payment->{$key} ?? false)) { return $payment->{$key}; } diff --git a/app/Export/Decorators/ProductDecorator.php b/app/Export/Decorators/ProductDecorator.php index d1fd5cac60e3..1e95cd13c9db 100644 --- a/app/Export/Decorators/ProductDecorator.php +++ b/app/Export/Decorators/ProductDecorator.php @@ -27,7 +27,7 @@ class ProductDecorator implements DecoratorInterface if($product && method_exists($this, $key)) { return $this->{$key}($product); - } elseif($product->{$key}) { + } elseif($product->{$key} ?? false) { return $product->{$key} ?? ''; } diff --git a/app/Export/Decorators/PurchaseOrderDecorator.php b/app/Export/Decorators/PurchaseOrderDecorator.php index 362f155174da..9f922e686b5d 100644 --- a/app/Export/Decorators/PurchaseOrderDecorator.php +++ b/app/Export/Decorators/PurchaseOrderDecorator.php @@ -27,7 +27,7 @@ class PurchaseOrderDecorator extends Decorator implements DecoratorInterface if($purchase_order && method_exists($this, $key)) { return $this->{$key}($purchase_order); - } elseif($purchase_order->{$key}) { + } elseif($purchase_order->{$key} ?? false) { return $purchase_order->{$key} ?? ''; } diff --git a/app/Export/Decorators/QuoteDecorator.php b/app/Export/Decorators/QuoteDecorator.php index 2a9b89db3c08..4137e255423d 100644 --- a/app/Export/Decorators/QuoteDecorator.php +++ b/app/Export/Decorators/QuoteDecorator.php @@ -27,7 +27,7 @@ class QuoteDecorator extends Decorator implements DecoratorInterface if($quote && method_exists($this, $key)) { return $this->{$key}($quote); - } elseif($quote->{$key}) { + } elseif($quote->{$key} ?? false) { return $quote->{$key} ?? ''; } diff --git a/app/Export/Decorators/RecurringInvoiceDecorator.php b/app/Export/Decorators/RecurringInvoiceDecorator.php index 61df48d38f8d..613e60b1a6c4 100644 --- a/app/Export/Decorators/RecurringInvoiceDecorator.php +++ b/app/Export/Decorators/RecurringInvoiceDecorator.php @@ -27,7 +27,7 @@ class RecurringInvoiceDecorator extends Decorator implements DecoratorInterface if($recurring_invoice && method_exists($this, $key)) { return $this->{$key}($recurring_invoice); - } elseif($recurring_invoice->{$key}) { + } elseif($recurring_invoice->{$key} ?? false) { return $recurring_invoice->{$key} ?? ''; } diff --git a/app/Export/Decorators/TaskDecorator.php b/app/Export/Decorators/TaskDecorator.php index 7a3af2b7f9a6..5fbb2f3e6ef5 100644 --- a/app/Export/Decorators/TaskDecorator.php +++ b/app/Export/Decorators/TaskDecorator.php @@ -30,7 +30,7 @@ class TaskDecorator extends Decorator implements DecoratorInterface if($task && method_exists($this, $key)) { return $this->{$key}($task); - } elseif($task && $task->{$key}) { + } elseif($task && $task->{$key} ?? false) { return $task->{$key}; } diff --git a/app/Export/Decorators/VendorContactDecorator.php b/app/Export/Decorators/VendorContactDecorator.php index b3dd08c8b383..ae02d43a6fd7 100644 --- a/app/Export/Decorators/VendorContactDecorator.php +++ b/app/Export/Decorators/VendorContactDecorator.php @@ -27,7 +27,7 @@ class VendorContactDecorator implements DecoratorInterface if($contact && method_exists($this, $key)) { return $this->{$key}($contact); - } elseif($contact && $contact->{$key}) { + } elseif($contact && ($contact->{$key} ?? false)) { return $contact->{$key} ?? ''; } diff --git a/app/Export/Decorators/VendorDecorator.php b/app/Export/Decorators/VendorDecorator.php index aa09c73eef41..0b14957a4cef 100644 --- a/app/Export/Decorators/VendorDecorator.php +++ b/app/Export/Decorators/VendorDecorator.php @@ -27,7 +27,7 @@ class VendorDecorator extends Decorator implements DecoratorInterface if($vendor && method_exists($this, $key)) { return $this->{$key}($vendor); - } elseif($vendor->{$key}) { + } elseif($vendor->{$key} ?? false) { return $vendor->{$key} ?? ''; } diff --git a/app/Http/ValidationRules/PaymentAppliedValidAmount.php b/app/Http/ValidationRules/PaymentAppliedValidAmount.php index 3a72df8c628d..9c0ea741e79c 100644 --- a/app/Http/ValidationRules/PaymentAppliedValidAmount.php +++ b/app/Http/ValidationRules/PaymentAppliedValidAmount.php @@ -84,7 +84,14 @@ class PaymentAppliedValidAmount implements Rule $inv = $inv_collection->firstWhere('id', $invoice['invoice_id']); - if ($inv->balance < $invoice['amount']) { + nlog($inv->status_id); + nlog($inv->amount); + nlog($invoice['amount']); + + if($inv->status_id == Invoice::STATUS_DRAFT && $inv->amount >= $invoice['amount']){ + + } + elseif ($inv->balance < $invoice['amount']) { $this->message = 'Amount cannot be greater than invoice balance'; return false; diff --git a/app/Jobs/Ninja/TaskScheduler.php b/app/Jobs/Ninja/TaskScheduler.php index a3c78d5a5615..af0c2efc9c58 100644 --- a/app/Jobs/Ninja/TaskScheduler.php +++ b/app/Jobs/Ninja/TaskScheduler.php @@ -56,7 +56,15 @@ class TaskScheduler implements ShouldQueue ->where('next_run', '<=', now()) ->cursor() ->each(function ($scheduler) { - $this->doJob($scheduler); + + nlog("Doing job {$scheduler->name}"); + + try { + $scheduler->service()->runTask(); + } catch(\Exception $e) { + nlog($e->getMessage()); + } + }); @@ -73,19 +81,19 @@ class TaskScheduler implements ShouldQueue ->where('next_run', '<=', now()) ->cursor() ->each(function ($scheduler) { - $this->doJob($scheduler); + + nlog("Doing job {$scheduler->name}"); + + try { + /** @var \App\Models\Scheduler $scheduler */ + $scheduler->service()->runTask(); + } catch(\Exception $e) { + nlog($e->getMessage()); + } + + }); } } - private function doJob(Scheduler $scheduler) - { - nlog("Doing job {$scheduler->name}"); - - try { - $scheduler->service()->runTask(); - } catch(\Exception $e) { - nlog($e->getMessage()); - } - } } diff --git a/app/Jobs/Payment/EmailPayment.php b/app/Jobs/Payment/EmailPayment.php index 2054d18ec0ee..c40f40de7905 100644 --- a/app/Jobs/Payment/EmailPayment.php +++ b/app/Jobs/Payment/EmailPayment.php @@ -58,7 +58,7 @@ class EmailPayment implements ShouldQueue */ public function handle() { - if ($this->company->is_disabled || (!$this->contact->email ?? false)) { + if ($this->company->is_disabled || (!$this->contact?->email ?? false)) { nlog("company disabled - or - contact email not found"); return; } diff --git a/app/Jobs/Util/Import.php b/app/Jobs/Util/Import.php index cf65f4576284..e1bcfd757aa3 100644 --- a/app/Jobs/Util/Import.php +++ b/app/Jobs/Util/Import.php @@ -1144,6 +1144,8 @@ class Import implements ShouldQueue ); $key = "invoices_{$resource['id']}"; + + nlog($invoice->id); $this->ids['invoices'][$key] = [ 'old' => $resource['id'], @@ -1406,7 +1408,8 @@ class Import implements ShouldQueue $payment->save(); } - + nlog($payment->id); + $old_user_key = array_key_exists('user_id', $resource) ?? $this->user->id; $this->ids['payments'] = [ diff --git a/app/Notifications/Ninja/EmailQuotaNotification.php b/app/Notifications/Ninja/EmailQuotaNotification.php index 8874ee98a014..d1ff56592969 100644 --- a/app/Notifications/Ninja/EmailQuotaNotification.php +++ b/app/Notifications/Ninja/EmailQuotaNotification.php @@ -67,8 +67,10 @@ class EmailQuotaNotification extends Notification $content = "Email quota exceeded by Account {$this->account->key} \n"; $owner = $this->account->companies()->first()->owner(); + $owner_name = $owner->present()->name() ?? 'No Owner Found'; + $owner_email = $owner->email ?? 'No Owner Email Found'; - $content .= "Owner {$owner->present()->name() } | {$owner->email}"; + $content .= "Owner {$owner_name} | {$owner_email}"; return (new SlackMessage()) ->success() diff --git a/app/Services/Scheduler/EmailReport.php b/app/Services/Scheduler/EmailReport.php index 4d0c1e910894..bb06fdf69b2f 100644 --- a/app/Services/Scheduler/EmailReport.php +++ b/app/Services/Scheduler/EmailReport.php @@ -59,21 +59,13 @@ class EmailReport { $start_end_dates = $this->calculateStartAndEndDates($this->scheduler->parameters); + $data = $this->scheduler->parameters; - $data = []; - - $data = [ - 'start_date' => $start_end_dates[0], - 'end_date' => $start_end_dates[1], - 'date_range' => 'custom', - 'client_id' => null, - 'report_keys' => [] - ]; - - if (isset($this->scheduler->parameters['clients']) && count($this->scheduler->parameters['clients']) >= 1) { - $data['clients'] = $this->transformKeys($this->scheduler->parameters['clients']); - } - + $data['start_date'] = $start_end_dates[0]; + $data['end_date'] = $start_end_dates[1]; + $data['date_range'] = $data['date_range'] ?? 'all'; + $data['report_keys'] = $data['report_keys'] ?? []; + $export = false; match($this->scheduler->parameters['report_name']) { diff --git a/tests/Feature/Account/AccountEmailQuotaTest.php b/tests/Feature/Account/AccountEmailQuotaTest.php index 6d242e52a38e..ba44053e19df 100644 --- a/tests/Feature/Account/AccountEmailQuotaTest.php +++ b/tests/Feature/Account/AccountEmailQuotaTest.php @@ -73,7 +73,7 @@ class AccountEmailQuotaTest extends TestCase $company->track_inventory = true; $company->settings = $settings; $company->save(); - + /** @vart \App\Models\Account $account */ $account->default_company_id = $company->id; $account->save(); diff --git a/tests/Unit/ClientSettingsTest.php b/tests/Unit/ClientSettingsTest.php index 5d520811d5ae..008c08f286d7 100644 --- a/tests/Unit/ClientSettingsTest.php +++ b/tests/Unit/ClientSettingsTest.php @@ -265,7 +265,7 @@ class ClientSettingsTest extends TestCase ])->post('/api/v1/clients/', $data); } catch (ValidationException $e) { $message = json_decode($e->validator->getMessageBag(), 1); - nlog($message); + // nlog($message); } $response->assertStatus(302);