diff --git a/app/Http/Controllers/ClientPortal/InvoiceController.php b/app/Http/Controllers/ClientPortal/InvoiceController.php index 4caecece5c..4b835e8ef4 100644 --- a/app/Http/Controllers/ClientPortal/InvoiceController.php +++ b/app/Http/Controllers/ClientPortal/InvoiceController.php @@ -56,7 +56,7 @@ class InvoiceController extends Controller { set_time_limit(0); - $invoice->service()->removeUnpaidGatewayFees()->save(); + // $invoice->service()->removeUnpaidGatewayFees()->save(); $invitation = $invoice->invitations()->where('client_contact_id', auth()->guard('contact')->user()->id)->first(); diff --git a/app/Jobs/Mail/NinjaMailerJob.php b/app/Jobs/Mail/NinjaMailerJob.php index 1b9331d8ad..a04e9dbcd9 100644 --- a/app/Jobs/Mail/NinjaMailerJob.php +++ b/app/Jobs/Mail/NinjaMailerJob.php @@ -51,7 +51,7 @@ class NinjaMailerJob implements ShouldQueue public $tries = 3; //number of retries - public $backoff = 10; //seconds to wait until retry + public $backoff = 30; //seconds to wait until retry public $deleteWhenMissingModels = true; diff --git a/app/Models/Vendor.php b/app/Models/Vendor.php index ba9fbb96c0..24fcf324ff 100644 --- a/app/Models/Vendor.php +++ b/app/Models/Vendor.php @@ -108,12 +108,13 @@ class Vendor extends BaseModel } if (! $this->currency_id) { - $this->currency_id = 1; + return $this->company->currency(); } return $currencies->filter(function ($item) { return $item->id == $this->currency_id; })->first(); + } public function company() diff --git a/app/Utils/VendorHtmlEngine.php b/app/Utils/VendorHtmlEngine.php index f9fd0e03c4..b373db5545 100644 --- a/app/Utils/VendorHtmlEngine.php +++ b/app/Utils/VendorHtmlEngine.php @@ -29,6 +29,11 @@ use Exception; use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\Cache; +/** + * Note the premise used here is that any currencies will be formatted back to the company currency and not + * user the vendor currency, if we continue to extend on vendor, we will need to relook at this + */ + class VendorHtmlEngine { use MakesDates; @@ -164,16 +169,16 @@ class VendorHtmlEngine $data['$entity_number'] = &$data['$number']; $data['$discount'] = ['value' => $this->entity->discount, 'label' => ctrans('texts.discount')]; - $data['$subtotal'] = ['value' => Number::formatMoney($this->entity_calc->getSubTotal(), $this->vendor) ?: ' ', 'label' => ctrans('texts.subtotal')]; - $data['$gross_subtotal'] = ['value' => Number::formatMoney($this->entity_calc->getGrossSubTotal(), $this->vendor) ?: ' ', 'label' => ctrans('texts.subtotal')]; + $data['$subtotal'] = ['value' => Number::formatMoney($this->entity_calc->getSubTotal(), $this->company) ?: ' ', 'label' => ctrans('texts.subtotal')]; + $data['$gross_subtotal'] = ['value' => Number::formatMoney($this->entity_calc->getGrossSubTotal(), $this->company) ?: ' ', 'label' => ctrans('texts.subtotal')]; if($this->entity->uses_inclusive_taxes) - $data['$net_subtotal'] = ['value' => Number::formatMoney(($this->entity_calc->getSubTotal() - $this->entity->total_taxes - $this->entity_calc->getTotalDiscount()), $this->vendor) ?: ' ', 'label' => ctrans('texts.net_subtotal')]; + $data['$net_subtotal'] = ['value' => Number::formatMoney(($this->entity_calc->getSubTotal() - $this->entity->total_taxes - $this->entity_calc->getTotalDiscount()), $this->company) ?: ' ', 'label' => ctrans('texts.net_subtotal')]; else - $data['$net_subtotal'] = ['value' => Number::formatMoney($this->entity_calc->getSubTotal() - $this->entity_calc->getTotalDiscount(), $this->vendor) ?: ' ', 'label' => ctrans('texts.net_subtotal')]; + $data['$net_subtotal'] = ['value' => Number::formatMoney($this->entity_calc->getSubTotal() - $this->entity_calc->getTotalDiscount(), $this->company) ?: ' ', 'label' => ctrans('texts.net_subtotal')]; if ($this->entity->partial > 0) { - $data['$balance_due'] = ['value' => Number::formatMoney($this->entity->partial, $this->vendor) ?: ' ', 'label' => ctrans('texts.partial_due')]; + $data['$balance_due'] = ['value' => Number::formatMoney($this->entity->partial, $this->company) ?: ' ', 'label' => ctrans('texts.partial_due')]; $data['$balance_due_raw'] = ['value' => $this->entity->partial, 'label' => ctrans('texts.partial_due')]; $data['$amount_raw'] = ['value' => $this->entity->partial, 'label' => ctrans('texts.partial_due')]; $data['$due_date'] = ['value' => $this->translateDate($this->entity->partial_due_date, $this->company->date_format(), $this->company->locale()) ?: ' ', 'label' => ctrans('texts.'.$this->entity_string.'_due_date')]; @@ -181,12 +186,12 @@ class VendorHtmlEngine } else { if($this->entity->status_id == 1){ - $data['$balance_due'] = ['value' => Number::formatMoney($this->entity->amount, $this->vendor) ?: ' ', 'label' => ctrans('texts.balance_due')]; + $data['$balance_due'] = ['value' => Number::formatMoney($this->entity->amount, $this->company) ?: ' ', 'label' => ctrans('texts.balance_due')]; $data['$balance_due_raw'] = ['value' => $this->entity->amount, 'label' => ctrans('texts.balance_due')]; $data['$amount_raw'] = ['value' => $this->entity->amount, 'label' => ctrans('texts.amount')]; } else{ - $data['$balance_due'] = ['value' => Number::formatMoney($this->entity->balance, $this->vendor) ?: ' ', 'label' => ctrans('texts.balance_due')]; + $data['$balance_due'] = ['value' => Number::formatMoney($this->entity->balance, $this->company) ?: ' ', 'label' => ctrans('texts.balance_due')]; $data['$balance_due_raw'] = ['value' => $this->entity->balance, 'label' => ctrans('texts.balance_due')]; $data['$amount_raw'] = ['value' => $this->entity->amount, 'label' => ctrans('texts.amount')]; } @@ -194,18 +199,18 @@ class VendorHtmlEngine // $data['$balance_due'] = $data['$balance_due']; $data['$outstanding'] = &$data['$balance_due']; - $data['$partial_due'] = ['value' => Number::formatMoney($this->entity->partial, $this->vendor) ?: ' ', 'label' => ctrans('texts.partial_due')]; + $data['$partial_due'] = ['value' => Number::formatMoney($this->entity->partial, $this->company) ?: ' ', 'label' => ctrans('texts.partial_due')]; $data['$partial'] = &$data['$partial_due']; - $data['$total'] = ['value' => Number::formatMoney($this->entity_calc->getTotal(), $this->vendor) ?: ' ', 'label' => ctrans('texts.total')]; + $data['$total'] = ['value' => Number::formatMoney($this->entity_calc->getTotal(), $this->company) ?: ' ', 'label' => ctrans('texts.total')]; $data['$purchase_order.total'] = &$data['$total']; $data['$amount'] = &$data['$total']; $data['$amount_due'] = ['value' => &$data['$total']['value'], 'label' => ctrans('texts.amount_due')]; - $data['$balance'] = ['value' => Number::formatMoney($this->entity_calc->getBalance(), $this->vendor) ?: ' ', 'label' => ctrans('texts.balance')]; + $data['$balance'] = ['value' => Number::formatMoney($this->entity_calc->getBalance(), $this->company) ?: ' ', 'label' => ctrans('texts.balance')]; - $data['$taxes'] = ['value' => Number::formatMoney($this->entity_calc->getItemTotalTaxes(), $this->vendor) ?: ' ', 'label' => ctrans('texts.taxes')]; + $data['$taxes'] = ['value' => Number::formatMoney($this->entity_calc->getItemTotalTaxes(), $this->company) ?: ' ', 'label' => ctrans('texts.taxes')]; $data['$user.name'] = ['value' => $this->entity->user->present()->name(), 'label' => ctrans('texts.name')]; $data['$user.first_name'] = ['value' => $this->entity->user->first_name, 'label' => ctrans('texts.first_name')]; @@ -277,7 +282,7 @@ class VendorHtmlEngine $data['$vendor.currency'] = ['value' => $this->vendor->currency()->code, 'label' => '']; - $data['$paid_to_date'] = ['value' => Number::formatMoney($this->entity->paid_to_date, $this->vendor), 'label' => ctrans('texts.paid_to_date')]; + $data['$paid_to_date'] = ['value' => Number::formatMoney($this->entity->paid_to_date, $this->company), 'label' => ctrans('texts.paid_to_date')]; $data['$contact.full_name'] = ['value' => $this->contact->present()->name(), 'label' => ctrans('texts.name')]; $data['$contact'] = &$data['$contact.full_name']; @@ -332,10 +337,10 @@ class VendorHtmlEngine $data['$company.custom3'] = &$data['$company3']; $data['$company.custom4'] = &$data['$company4']; - $data['$custom_surcharge1'] = ['value' => Number::formatMoney($this->entity->custom_surcharge1, $this->vendor) ?: ' ', 'label' => $this->helpers->makeCustomField($this->company->custom_fields, 'surcharge1')]; - $data['$custom_surcharge2'] = ['value' => Number::formatMoney($this->entity->custom_surcharge2, $this->vendor) ?: ' ', 'label' => $this->helpers->makeCustomField($this->company->custom_fields, 'surcharge2')]; - $data['$custom_surcharge3'] = ['value' => Number::formatMoney($this->entity->custom_surcharge3, $this->vendor) ?: ' ', 'label' => $this->helpers->makeCustomField($this->company->custom_fields, 'surcharge3')]; - $data['$custom_surcharge4'] = ['value' => Number::formatMoney($this->entity->custom_surcharge4, $this->vendor) ?: ' ', 'label' => $this->helpers->makeCustomField($this->company->custom_fields, 'surcharge4')]; + $data['$custom_surcharge1'] = ['value' => Number::formatMoney($this->entity->custom_surcharge1, $this->company) ?: ' ', 'label' => $this->helpers->makeCustomField($this->company->custom_fields, 'surcharge1')]; + $data['$custom_surcharge2'] = ['value' => Number::formatMoney($this->entity->custom_surcharge2, $this->company) ?: ' ', 'label' => $this->helpers->makeCustomField($this->company->custom_fields, 'surcharge2')]; + $data['$custom_surcharge3'] = ['value' => Number::formatMoney($this->entity->custom_surcharge3, $this->company) ?: ' ', 'label' => $this->helpers->makeCustomField($this->company->custom_fields, 'surcharge3')]; + $data['$custom_surcharge4'] = ['value' => Number::formatMoney($this->entity->custom_surcharge4, $this->company) ?: ' ', 'label' => $this->helpers->makeCustomField($this->company->custom_fields, 'surcharge4')]; $data['$product.item'] = ['value' => '', 'label' => ctrans('texts.item')]; $data['$product.date'] = ['value' => '', 'label' => ctrans('texts.date')]; @@ -608,7 +613,7 @@ class VendorHtmlEngine foreach ($tax_map as $tax) { $data .= ''; $data .= ''.$tax['name'].''; - $data .= ''.Number::formatMoney($tax['total'], $this->vendor).''; + $data .= ''.Number::formatMoney($tax['total'], $this->company).''; } return $data; @@ -621,7 +626,7 @@ class VendorHtmlEngine $data = ''; foreach ($tax_map as $tax) { - $data .= ''.Number::formatMoney($tax['total'], $this->vendor).''; + $data .= ''.Number::formatMoney($tax['total'], $this->company).''; } return $data; @@ -639,7 +644,7 @@ class VendorHtmlEngine $data .= ''; $data .= ''; $data .= ''.$tax['name'].''; - $data .= ''.Number::formatMoney($tax['total'], $this->vendor).''; + $data .= ''.Number::formatMoney($tax['total'], $this->company).''; } return $data; diff --git a/tests/Feature/Payments/StorePaymentValidationTest.php b/tests/Feature/Payments/StorePaymentValidationTest.php index 8b72e985ac..1dce4cbd6b 100644 --- a/tests/Feature/Payments/StorePaymentValidationTest.php +++ b/tests/Feature/Payments/StorePaymentValidationTest.php @@ -215,5 +215,8 @@ class StorePaymentValidationTest extends TestCase } catch (ValidationException $e) { $response->assertStatus(302); } + + $response->assertStatus(302); + } } diff --git a/tests/Feature/TaskStatusSortOnUpdateTest.php b/tests/Feature/TaskStatusSortOnUpdateTest.php deleted file mode 100644 index 3b1f57e5ad..0000000000 --- a/tests/Feature/TaskStatusSortOnUpdateTest.php +++ /dev/null @@ -1,92 +0,0 @@ -makeTestData(); - - $this->withoutMiddleware( - ThrottleRequests::class - ); - } - - // public function testTasksSort() - // { - - // $project = Project::factory()->create([ - // 'user_id' => $this->user->id, - // 'company_id' => $this->company->id, - // 'name' => 'Test Project', - // ]); - - // for($x=0; $x<10; $x++) - // { - // $task = Task::factory()->create([ - // 'user_id' => $this->user->id, - // 'company_id' => $this->company->id, - // 'project_id' => $project->id - // ]); - - // $task->status_id = TaskStatus::where('company_id', $this->company->id)->first()->id; - // $task->save(); - // } - - // $this->assertTrue($task->project()->exists()); - // $this->assertEquals($task->project->tasks->count(), 10); - - // $task->status_order = 1; - - // $response = $this->withHeaders([ - // 'X-API-SECRET' => config('ninja.api_secret'), - // 'X-API-TOKEN' => $this->token, - // ])->put('/api/v1/tasks/'.$this->encodePrimaryKey($task->id), $task->toArray()); - - // $response->assertStatus(200); - - // $this->assertEquals($task->fresh()->status_order, 1); - - // $task->status_order = 10; - - // $response = $this->withHeaders([ - // 'X-API-SECRET' => config('ninja.api_secret'), - // 'X-API-TOKEN' => $this->token, - // ])->put('/api/v1/tasks/'.$this->encodePrimaryKey($task->id), $task->toArray()); - - // $response->assertStatus(200); - - // nlog($task->fresh()->project->tasks->toArray()); - - // $this->assertEquals($task->fresh()->status_order, 9); - - // } -}