diff --git a/app/Http/Requests/Email/SendEmailRequest.php b/app/Http/Requests/Email/SendEmailRequest.php index a08ea4ba112f..c9ab8aff95f5 100644 --- a/app/Http/Requests/Email/SendEmailRequest.php +++ b/app/Http/Requests/Email/SendEmailRequest.php @@ -63,7 +63,7 @@ class SendEmailRequest extends Request $user = auth()->user(); return [ - 'template' => 'bail|required|in:'.implode(',', $this->templates), + 'template' => 'bail|required|string|in:'.implode(',', $this->templates), 'entity' => 'bail|required|in:App\Models\Invoice,App\Models\Quote,App\Models\Credit,App\Models\RecurringInvoice,App\Models\PurchaseOrder,App\Models\Payment', 'entity_id' => ['bail', 'required', Rule::exists($this->entity_plural, 'id')->where('company_id', $user->company()->id)], 'cc_email.*' => 'bail|sometimes|email', diff --git a/app/Http/Requests/Expense/UpdateExpenseRequest.php b/app/Http/Requests/Expense/UpdateExpenseRequest.php index 812449e30b38..50c496cf3301 100644 --- a/app/Http/Requests/Expense/UpdateExpenseRequest.php +++ b/app/Http/Requests/Expense/UpdateExpenseRequest.php @@ -56,7 +56,7 @@ class UpdateExpenseRequest extends Request $rules['invoice_id'] = 'bail|sometimes|nullable|exists:invoices,id,company_id,'.$user->company()->id; $rules['documents'] = 'bail|sometimes|array'; $rules['amount'] = ['sometimes', 'bail', 'nullable', 'numeric', 'max:99999999999999']; - + return $this->globalRules($rules); } diff --git a/app/Repositories/ExpenseRepository.php b/app/Repositories/ExpenseRepository.php index ab83f2f80fb1..54feb009584b 100644 --- a/app/Repositories/ExpenseRepository.php +++ b/app/Repositories/ExpenseRepository.php @@ -46,7 +46,7 @@ class ExpenseRepository extends BaseRepository /** @var \App\Models\User $user */ $user = auth()->user(); - $payment_date = &$data['payment_date']; + $payment_date = isset($data['payment_date']) ? $data['payment_date'] : false; if($payment_date && $payment_date == $expense->payment_date) { //do nothing diff --git a/app/Transformers/CompanyTransformer.php b/app/Transformers/CompanyTransformer.php index 97710a2b92a5..f13090bb63de 100644 --- a/app/Transformers/CompanyTransformer.php +++ b/app/Transformers/CompanyTransformer.php @@ -211,7 +211,7 @@ class CompanyTransformer extends EntityTransformer 'smtp_password' => $company->smtp_password ? '********' : '', 'smtp_local_domain' => (string)$company->smtp_local_domain ?? '', 'smtp_verify_peer' => (bool)$company->smtp_verify_peer, - // 'e_invoice' => $company->e_invoice ?: new \stdClass(), + 'e_invoice' => $company->e_invoice ?: new \stdClass(), ]; } diff --git a/database/migrations/2024_07_10_043241_2024_07_10_invoice_id_index_on_projects_table.php b/database/migrations/2024_07_10_043241_2024_07_10_invoice_id_index_on_projects_table.php new file mode 100644 index 000000000000..a2d5eeeaf535 --- /dev/null +++ b/database/migrations/2024_07_10_043241_2024_07_10_invoice_id_index_on_projects_table.php @@ -0,0 +1,31 @@ +index(['project_id','deleted_at']); + }); + + Schema::table('quotes', function (Blueprint $table) { + $table->index(['project_id','deleted_at']); + }); + + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + // + } +}; diff --git a/tests/Feature/ExpenseApiTest.php b/tests/Feature/ExpenseApiTest.php index 5cf695cb90d1..81d7dafbf2ab 100644 --- a/tests/Feature/ExpenseApiTest.php +++ b/tests/Feature/ExpenseApiTest.php @@ -47,6 +47,46 @@ class ExpenseApiTest extends TestCase Model::reguard(); } + + + public function testVendorPayment() + { + $data = [ + 'amount' => 100, + 'payment_date' => now()->format('Y-m-d'), + 'vendor_id' => $this->vendor->hashed_id, + 'date' => '2021-10-01', + ]; + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->postJson('/api/v1/expenses', $data); + + + $arr = $response->json(); + $response->assertStatus(200); + + $this->assertEquals($this->vendor->hashed_id, $arr['data']['vendor_id']); + $this->assertEquals(now()->format('Y-m-d'), $arr['data']['payment_date']); + + $data = [ + 'amount' => 100, + ]; + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->putJson('/api/v1/expenses/'.$arr['data']['id'], $data); + + $arr = $response->json(); + $response->assertStatus(200); + + $this->assertEquals(now()->format('Y-m-d'), $arr['data']['payment_date']); + + } + + public function testExpensePutWithVendorStatus() { diff --git a/tests/Feature/VendorApiTest.php b/tests/Feature/VendorApiTest.php index 386a691e9b5f..f47359235a4b 100644 --- a/tests/Feature/VendorApiTest.php +++ b/tests/Feature/VendorApiTest.php @@ -47,7 +47,6 @@ class VendorApiTest extends TestCase Model::reguard(); } - public function testVendorContactCreation() { $data = [