diff --git a/app/Export/CSV/RecurringInvoiceExport.php b/app/Export/CSV/RecurringInvoiceExport.php
index 30accbd22511..1bacb9d6a301 100644
--- a/app/Export/CSV/RecurringInvoiceExport.php
+++ b/app/Export/CSV/RecurringInvoiceExport.php
@@ -54,6 +54,7 @@ class RecurringInvoiceExport extends BaseExport
'po_number' => 'po_number',
'private_notes' => 'private_notes',
'public_notes' => 'public_notes',
+ 'next_send_date' => 'next_send_date',
'status' => 'status_id',
'tax_name1' => 'tax_name1',
'tax_name2' => 'tax_name2',
@@ -66,6 +67,7 @@ class RecurringInvoiceExport extends BaseExport
'currency' => 'currency_id',
'vendor' => 'vendor_id',
'project' => 'project_id',
+ 'frequency' => 'frequency_id'
];
private array $decorate_keys = [
@@ -162,6 +164,8 @@ class RecurringInvoiceExport extends BaseExport
$entity['vendor'] = $invoice->vendor ? $invoice->vendor->name : '';
}
+ $entity['frequency'] = $invoice->frequencyForKey($invoice->frequency_id);
+
return $entity;
}
}
diff --git a/app/Http/Controllers/OpenAPI/VendorSchema.php b/app/Http/Controllers/OpenAPI/VendorSchema.php
index 8cf71c4ca9ea..a50df21d6f07 100644
--- a/app/Http/Controllers/OpenAPI/VendorSchema.php
+++ b/app/Http/Controllers/OpenAPI/VendorSchema.php
@@ -26,7 +26,7 @@
* @OA\Property(property="city", type="string", example="", description="________"),
* @OA\Property(property="state", type="string", example="", description="________"),
* @OA\Property(property="postal_code", type="string", example="", description="________"),
- * @OA\Property(property="work_phone", type="string", example="555-3434-3434", description="The client phone number"),
+ * @OA\Property(property="phone", type="string", example="555-3434-3434", description="The client phone number"),
* @OA\Property(property="country_id", type="string", example="", description="________"),
* @OA\Property(property="currency_id", type="string", example="4", description="________"),
* @OA\Property(property="custom_value1", type="string", example="", description="________"),
diff --git a/app/Http/Requests/BankIntegration/StoreBankIntegrationRequest.php b/app/Http/Requests/BankIntegration/StoreBankIntegrationRequest.php
index 933f5848624d..80b53208a712 100644
--- a/app/Http/Requests/BankIntegration/StoreBankIntegrationRequest.php
+++ b/app/Http/Requests/BankIntegration/StoreBankIntegrationRequest.php
@@ -44,7 +44,7 @@ class StoreBankIntegrationRequest extends Request
{
$input = $this->all();
- if(!array_key_exists('provider_name', $input) || strlen($input['provider_name']) == 0 && array_key_exists('bank_account_name', $input))
+ if((!array_key_exists('provider_name', $input) || strlen($input['provider_name']) == 0) && array_key_exists('bank_account_name', $input))
$input['provider_name'] = $input['bank_account_name'];
$this->replace($input);
diff --git a/app/Http/Requests/BankTransaction/StoreBankTransactionRequest.php b/app/Http/Requests/BankTransaction/StoreBankTransactionRequest.php
index 529eaa79a61a..c2e6fe68bde9 100644
--- a/app/Http/Requests/BankTransaction/StoreBankTransactionRequest.php
+++ b/app/Http/Requests/BankTransaction/StoreBankTransactionRequest.php
@@ -34,8 +34,7 @@ class StoreBankTransactionRequest extends Request
$rules = [];
- if(isset($this->bank_integration_id))
- $rules['bank_integration_id'] = 'bail|required|exists:bank_integrations,id,company_id,'.auth()->user()->company()->id.',is_deleted,0';
+ $rules['bank_integration_id'] = 'bail|required|exists:bank_integrations,id,company_id,'.auth()->user()->company()->id.',is_deleted,0';
return $rules;
}
@@ -44,7 +43,9 @@ class StoreBankTransactionRequest extends Request
{
$input = $this->all();
- if(array_key_exists('bank_integration_id', $input) && strlen($input['bank_integration_id']) > 1 && !is_numeric($input['bank_integration_id']))
+ if(array_key_exists('bank_integration_id', $input) && $input['bank_integration_id'] == "")
+ unset($input['bank_integration_id']);
+ elseif(array_key_exists('bank_integration_id', $input) && strlen($input['bank_integration_id']) > 1 && !is_numeric($input['bank_integration_id']))
$input['bank_integration_id'] = $this->decodePrimaryKey($input['bank_integration_id']);
$this->replace($input);
diff --git a/app/Http/Requests/BankTransaction/UpdateBankTransactionRequest.php b/app/Http/Requests/BankTransaction/UpdateBankTransactionRequest.php
index 4f251c916766..54f789714316 100644
--- a/app/Http/Requests/BankTransaction/UpdateBankTransactionRequest.php
+++ b/app/Http/Requests/BankTransaction/UpdateBankTransactionRequest.php
@@ -45,8 +45,7 @@ class UpdateBankTransactionRequest extends Request
if(isset($this->expense_id))
$rules['expense_id'] = 'bail|required|exists:expenses,id,company_id,'.auth()->user()->company()->id.',is_deleted,0';
- if(isset($this->bank_integration_id))
- $rules['bank_integration_id'] = 'bail|required|exists:bank_integrations,id,company_id,'.auth()->user()->company()->id.',is_deleted,0';
+ $rules['bank_integration_id'] = 'bail|required|exists:bank_integrations,id,company_id,'.auth()->user()->company()->id.',is_deleted,0';
return $rules;
@@ -69,7 +68,9 @@ class UpdateBankTransactionRequest extends Request
if(array_key_exists('ninja_category_id', $input) && strlen($input['ninja_category_id']) > 1)
$input['ninja_category_id'] = $this->decodePrimaryKey($input['ninja_category_id']);
- if(array_key_exists('bank_integration_id', $input) && strlen($input['bank_integration_id']) > 1)
+ if(array_key_exists('bank_integration_id', $input) && $input['bank_integration_id'] == "")
+ unset($input['bank_integration_id']);
+ elseif(array_key_exists('bank_integration_id', $input) && strlen($input['bank_integration_id']) > 1)
$input['bank_integration_id'] = $this->decodePrimaryKey($input['bank_integration_id']);
$this->replace($input);
diff --git a/app/Import/Transformer/Csv/ClientTransformer.php b/app/Import/Transformer/Csv/ClientTransformer.php
index a2c4721bb8eb..543ad1cd205a 100644
--- a/app/Import/Transformer/Csv/ClientTransformer.php
+++ b/app/Import/Transformer/Csv/ClientTransformer.php
@@ -38,7 +38,7 @@ class ClientTransformer extends BaseTransformer
return [
'company_id' => $this->company->id,
'name' => $this->getString($data, 'client.name'),
- 'work_phone' => $this->getString($data, 'client.phone'),
+ 'phone' => $this->getString($data, 'client.phone'),
'address1' => $this->getString($data, 'client.address1'),
'address2' => $this->getString($data, 'client.address2'),
'postal_code' => $this->getString($data, 'client.postal_code'),
diff --git a/app/Import/Transformer/Wave/ClientTransformer.php b/app/Import/Transformer/Wave/ClientTransformer.php
index c5681e411152..844560f48679 100644
--- a/app/Import/Transformer/Wave/ClientTransformer.php
+++ b/app/Import/Transformer/Wave/ClientTransformer.php
@@ -42,7 +42,7 @@ class ClientTransformer extends BaseTransformer
'company_id' => $this->company->id,
'name' => $this->getString($data, 'customer_name'),
'number' => $this->getValueOrNull($data, 'account_number'),
- 'work_phone' => $this->getString($data, 'phone'),
+ 'phone' => $this->getString($data, 'phone'),
'website' => $this->getString($data, 'website'),
'country_id' => ! empty($data['country']) ? $this->getCountryId($data['country']) : null,
'state' => $this->getString($data, 'province/state'),
diff --git a/app/Import/Transformers/ClientTransformer.php b/app/Import/Transformers/ClientTransformer.php
index 1e7ed43ae226..a77af36b5693 100644
--- a/app/Import/Transformers/ClientTransformer.php
+++ b/app/Import/Transformers/ClientTransformer.php
@@ -35,7 +35,7 @@ class ClientTransformer extends BaseTransformer
return [
'company_id' => $this->maps['company']->id,
'name' => $this->getString($data, 'client.name'),
- 'work_phone' => $this->getString($data, 'client.phone'),
+ 'phone' => $this->getString($data, 'client.phone'),
'address1' => $this->getString($data, 'client.address1'),
'address2' => $this->getString($data, 'client.address2'),
'city' => $this->getString($data, 'client.city'),
diff --git a/app/Import/Transformers/Csv/ClientTransformer.php b/app/Import/Transformers/Csv/ClientTransformer.php
index 55d0baa8a1fa..44f826e1bbb5 100644
--- a/app/Import/Transformers/Csv/ClientTransformer.php
+++ b/app/Import/Transformers/Csv/ClientTransformer.php
@@ -37,7 +37,7 @@ class ClientTransformer extends BaseTransformer
return [
'company_id' => $this->maps['company']->id,
'name' => $this->getString($data, 'client.name'),
- 'work_phone' => $this->getString($data, 'client.phone'),
+ 'phone' => $this->getString($data, 'client.phone'),
'address1' => $this->getString($data, 'client.address1'),
'address2' => $this->getString($data, 'client.address2'),
'postal_code' => $this->getString($data, 'client.postal_code'),
diff --git a/app/Import/Transformers/Freshbooks/ClientTransformer.php b/app/Import/Transformers/Freshbooks/ClientTransformer.php
index bfa8743ed62d..5b82f400c223 100644
--- a/app/Import/Transformers/Freshbooks/ClientTransformer.php
+++ b/app/Import/Transformers/Freshbooks/ClientTransformer.php
@@ -34,7 +34,7 @@ class ClientTransformer extends BaseTransformer
return [
'company_id' => $this->maps['company']->id,
'name' => $this->getString($data, 'Organization'),
- 'work_phone' => $this->getString($data, 'Phone'),
+ 'phone' => $this->getString($data, 'Phone'),
'address1' => $this->getString($data, 'Street'),
'city' => $this->getString($data, 'City'),
'state' => $this->getString($data, 'Province/State'),
diff --git a/app/Import/Transformers/Invoicely/ClientTransformer.php b/app/Import/Transformers/Invoicely/ClientTransformer.php
index ddf3645b3610..5e2d58ae4a09 100644
--- a/app/Import/Transformers/Invoicely/ClientTransformer.php
+++ b/app/Import/Transformers/Invoicely/ClientTransformer.php
@@ -34,7 +34,7 @@ class ClientTransformer extends BaseTransformer
return [
'company_id' => $this->maps['company']->id,
'name' => $this->getString($data, 'Client Name'),
- 'work_phone' => $this->getString($data, 'Phone'),
+ 'phone' => $this->getString($data, 'Phone'),
'country_id' => isset($data['Country']) ? $this->getCountryIdBy2($data['Country']) : null,
'credit_balance' => 0,
'settings' => new \stdClass,
diff --git a/app/Import/Transformers/Waveaccounting/ClientTransformer.php b/app/Import/Transformers/Waveaccounting/ClientTransformer.php
index a19616f968f1..f9b95a42e487 100644
--- a/app/Import/Transformers/Waveaccounting/ClientTransformer.php
+++ b/app/Import/Transformers/Waveaccounting/ClientTransformer.php
@@ -42,7 +42,7 @@ class ClientTransformer extends BaseTransformer
'company_id' => $this->maps['company']->id,
'name' => $this->getString($data, 'customer_name'),
'number' => $this->getString($data, 'account_number'),
- 'work_phone' => $this->getString($data, 'phone'),
+ 'phone' => $this->getString($data, 'phone'),
'website' => $this->getString($data, 'website'),
'country_id' => ! empty($data['country']) ? $this->getCountryId($data['country']) : null,
'state' => $this->getString($data, 'province/state'),
diff --git a/app/Import/Transformers/Zoho/ClientTransformer.php b/app/Import/Transformers/Zoho/ClientTransformer.php
index e8e618d189be..6895fabdaeb2 100644
--- a/app/Import/Transformers/Zoho/ClientTransformer.php
+++ b/app/Import/Transformers/Zoho/ClientTransformer.php
@@ -41,7 +41,7 @@ class ClientTransformer extends BaseTransformer
return [
'company_id' => $this->maps['company']->id,
'name' => $this->getString($data, 'Company Name'),
- 'work_phone' => $this->getString($data, 'Phone'),
+ 'phone' => $this->getString($data, 'Phone'),
'private_notes' => $this->getString($data, 'Notes'),
'website' => $this->getString($data, 'Website'),
'id_number' => $this->getString($data, 'Customer ID'),
diff --git a/app/Jobs/Bank/MatchBankTransactions.php b/app/Jobs/Bank/MatchBankTransactions.php
index 9f5260e204ab..0532d51e8b58 100644
--- a/app/Jobs/Bank/MatchBankTransactions.php
+++ b/app/Jobs/Bank/MatchBankTransactions.php
@@ -266,7 +266,7 @@ class MatchBankTransactions implements ShouldQueue
/* Create Payment */
$payment = PaymentFactory::create($this->invoice->company_id, $this->invoice->user_id);
- $payment->amount = $amount;
+ $payment->amount = $this->bt->amount;
$payment->applied = $this->applied_amount;
$payment->status_id = Payment::STATUS_COMPLETED;
$payment->client_id = $this->invoice->client_id;
@@ -315,7 +315,7 @@ class MatchBankTransactions implements ShouldQueue
$this->invoice
->client
->service()
- ->updateBalanceAndPaidToDate($amount*-1, $amount)
+ ->updateBalanceAndPaidToDate($this->applied_amount*-1, $amount)
->save();
$this->invoice = $this->invoice
diff --git a/app/Models/Presenters/CompanyPresenter.php b/app/Models/Presenters/CompanyPresenter.php
index 57408a788590..9d44bee8c60d 100644
--- a/app/Models/Presenters/CompanyPresenter.php
+++ b/app/Models/Presenters/CompanyPresenter.php
@@ -119,7 +119,7 @@ class CompanyPresenter extends EntityPresenter
$str .= e($country->name).'
';
}
if ($settings->phone) {
- $str .= ctrans('texts.work_phone').': '.e($settings->phone).'
';
+ $str .= ctrans('texts.phone').': '.e($settings->phone).'
';
}
if ($settings->email) {
$str .= ctrans('texts.work_email').': '.e($settings->email).'
';
diff --git a/app/PaymentDrivers/CheckoutCom/CreditCard.php b/app/PaymentDrivers/CheckoutCom/CreditCard.php
index 27e6c4d67243..1ada04574b5e 100644
--- a/app/PaymentDrivers/CheckoutCom/CreditCard.php
+++ b/app/PaymentDrivers/CheckoutCom/CreditCard.php
@@ -94,8 +94,6 @@ class CreditCard implements MethodInterface
$customerRequest = $this->checkout->getCustomer();
- nlog($customerRequest);
-
$request = $this->bootRequest($gateway_response->token);
$request->capture = false;
$request->reference = '$1 payment for authorization.';
diff --git a/app/PaymentDrivers/CheckoutComPaymentDriver.php b/app/PaymentDrivers/CheckoutComPaymentDriver.php
index daa9aa7fcd68..c59534a05788 100644
--- a/app/PaymentDrivers/CheckoutComPaymentDriver.php
+++ b/app/PaymentDrivers/CheckoutComPaymentDriver.php
@@ -34,6 +34,7 @@ use Checkout\CheckoutArgumentException;
use Checkout\CheckoutAuthorizationException;
use Checkout\CheckoutDefaultSdk;
use Checkout\CheckoutFourSdk;
+use Checkout\Common\Phone;
use Checkout\Customers\CustomerRequest;
use Checkout\Customers\Four\CustomerRequest as FourCustomerRequest;
use Checkout\Environment;
@@ -300,9 +301,12 @@ class CheckoutComPaymentDriver extends BaseDriver
$request = new CustomerRequest();
}
- $request->email = $this->client->present()->email();
- $request->name = $this->client->present()->name();
- $request->phone = $this->client->present()->phone();
+ $phone = new Phone();
+ $phone->number = $this->client->present()->phone();
+
+ $request->email = $this->client->present()->email();
+ $request->name = $this->client->present()->name();
+ $request->phone = $phone;
try {
$response = $this->gateway->getCustomersClient()->create($request);
diff --git a/app/PaymentDrivers/Stripe/Jobs/PaymentIntentWebhook.php b/app/PaymentDrivers/Stripe/Jobs/PaymentIntentWebhook.php
index 1caf382e567f..d3a8ad40e7d6 100644
--- a/app/PaymentDrivers/Stripe/Jobs/PaymentIntentWebhook.php
+++ b/app/PaymentDrivers/Stripe/Jobs/PaymentIntentWebhook.php
@@ -66,11 +66,9 @@ class PaymentIntentWebhook implements ShouldQueue
{
$payment = Payment::query()
->where('company_id', $company->id)
- ->where(function ($query) use ($transaction) {
- $query->where('transaction_reference', $transaction['payment_intent'])
- ->orWhere('transaction_reference', $transaction['id']);
- })
+ ->where('transaction_reference', $transaction['payment_intent'])
->first();
+
}
else
{
diff --git a/app/Repositories/ClientRepository.php b/app/Repositories/ClientRepository.php
index 23c6ae8cee28..6114916e80ad 100644
--- a/app/Repositories/ClientRepository.php
+++ b/app/Repositories/ClientRepository.php
@@ -56,6 +56,8 @@ class ClientRepository extends BaseRepository
*/
public function save(array $data, Client $client) : ?Client
{
+ $contact_data = $data;
+ unset($data['contacts']);
/* When uploading documents, only the document array is sent, so we must return early*/
if (array_key_exists('documents', $data) && count($data['documents']) >= 1) {
@@ -67,7 +69,7 @@ class ClientRepository extends BaseRepository
$client->fill($data);
if (array_key_exists('settings', $data)) {
- $client->saveSettings($data['settings'], $client);
+ $client->settings = $client->saveSettings($data['settings'], $client);
}
if (! $client->country_id) {
@@ -75,19 +77,9 @@ class ClientRepository extends BaseRepository
$client->country_id = $company->settings->country_id;
}
- try{
- $client->save();
- }
- catch(\Exception $e) {
-
- nlog("client save failed");
- nlog($data);
-
- }
+ $client->save();
if (! isset($client->number) || empty($client->number) || strlen($client->number) == 0) {
- // $client->number = $this->getNextClientNumber($client);
- // $client->save();
$x = 1;
@@ -111,7 +103,7 @@ class ClientRepository extends BaseRepository
$data['name'] = $client->present()->name();
}
- $this->contact_repo->save($data, $client);
+ $this->contact_repo->save($contact_data, $client);
return $client;
}
diff --git a/app/Services/Invoice/HandleRestore.php b/app/Services/Invoice/HandleRestore.php
index 412013aceb4c..0d46f8717e40 100644
--- a/app/Services/Invoice/HandleRestore.php
+++ b/app/Services/Invoice/HandleRestore.php
@@ -44,11 +44,12 @@ class HandleRestore extends AbstractService
return $this->invoice;
}
- //determine whether we need to un-delete payments OR just modify the payment amount /applied balances.
-
+ //cannot restore an invoice with a deleted payment
foreach ($this->invoice->payments as $payment) {
- //restore the payment record
- $this->invoice->restore();
+
+ if(($this->invoice->paid_to_date == 0) && $payment->is_deleted)
+ return $this->invoice;
+
}
//adjust ledger balance
@@ -56,8 +57,7 @@ class HandleRestore extends AbstractService
$this->invoice->client
->service()
- ->updateBalance($this->invoice->balance)
- ->updatePaidToDate($this->invoice->paid_to_date)
+ ->updateBalanceAndPaidToDate($this->invoice->balance,$this->invoice->paid_to_date)
->save();
$this->windBackInvoiceNumber();
@@ -120,11 +120,11 @@ class HandleRestore extends AbstractService
if ($this->adjustment_amount == $this->total_payments) {
$this->invoice->payments()->update(['payments.deleted_at' => null, 'payments.is_deleted' => false]);
- } else {
+ }
//adjust payments down by the amount applied to the invoice payment.
- $this->invoice->payments->each(function ($payment) {
+ $this->invoice->payments->fresh()->each(function ($payment) {
$payment_adjustment = $payment->paymentables
->where('paymentable_type', '=', 'invoices')
->where('paymentable_id', $this->invoice->id)
@@ -141,8 +141,7 @@ class HandleRestore extends AbstractService
$payment->restore();
$payment->save();
});
- }
-
+
return $this;
}
diff --git a/app/Services/Invoice/MarkInvoiceDeleted.php b/app/Services/Invoice/MarkInvoiceDeleted.php
index b16c468c7c1e..e317c403ade6 100644
--- a/app/Services/Invoice/MarkInvoiceDeleted.php
+++ b/app/Services/Invoice/MarkInvoiceDeleted.php
@@ -53,16 +53,6 @@ class MarkInvoiceDeleted extends AbstractService
->adjustPaidToDateAndBalance()
->adjustLedger();
- $transaction = [
- 'invoice' => $this->invoice->transaction_event(),
- 'payment' => $this->invoice->payments()->exists() ? $this->invoice->payments()->first()->transaction_event() : [],
- 'client' => $this->invoice->client->transaction_event(),
- 'credit' => [],
- 'metadata' => ['total_payments' => $this->total_payments, 'balance_adjustment' => $this->balance_adjustment, 'adjustment_amount' => $this->adjustment_amount],
- ];
-
- // TransactionLog::dispatch(TransactionEvent::INVOICE_DELETED, $transaction, $this->invoice->company->db);
-
return $this->invoice;
}
@@ -87,26 +77,17 @@ class MarkInvoiceDeleted extends AbstractService
return $this;
}
- // @deprecated
- private function adjustBalance()
- {
- // $client = $this->invoice->client->fresh();
- // $client->balance += $this->balance_adjustment * -1;
- // $client->save();
-
- // $this->invoice->client->service()->updateBalance($this->balance_adjustment * -1)->save(); //reduces the client balance by the invoice amount.
-
- return $this;
- }
-
/* Adjust the payment amounts */
private function adjustPayments()
{
//if total payments = adjustment amount - that means we need to delete the payments as well.
- if ($this->adjustment_amount == $this->total_payments) {
+nlog($this->adjustment_amount);
+nlog($this->total_payments);
+
+ if ($this->adjustment_amount == $this->total_payments)
$this->invoice->payments()->update(['payments.deleted_at' => now(), 'payments.is_deleted' => true]);
- } else {
+
//adjust payments down by the amount applied to the invoice payment.
@@ -125,7 +106,7 @@ class MarkInvoiceDeleted extends AbstractService
$payment->applied -= $payment_adjustment;
$payment->save();
});
- }
+
return $this;
}
diff --git a/app/Utils/Traits/ClientGroupSettingsSaver.php b/app/Utils/Traits/ClientGroupSettingsSaver.php
index 67c2b6a774b3..270f2e0588cb 100644
--- a/app/Utils/Traits/ClientGroupSettingsSaver.php
+++ b/app/Utils/Traits/ClientGroupSettingsSaver.php
@@ -30,7 +30,7 @@ trait ClientGroupSettingsSaver
* Saves a setting object.
*
* Works for groups|clients|companies
- * @param array $settings The request input settings array
+ * @param array|object $settings The request input settings array
* @param object $entity The entity which the settings belongs to
* @return void
*/
@@ -64,19 +64,6 @@ trait ClientGroupSettingsSaver
$entity_settings->{$key} = $value;
}
- $entity->settings = $entity_settings;
-
- try{
- $entity->save();
- }
- catch(\Exception $e){
-
- nlog("client settings failure");
- nlog($entity_settings);
- nlog($e->getMessage());
-
- }
-
return $entity_settings;
}
diff --git a/tests/Feature/ClientApiTest.php b/tests/Feature/ClientApiTest.php
index aae531575656..40b11fc70a4a 100644
--- a/tests/Feature/ClientApiTest.php
+++ b/tests/Feature/ClientApiTest.php
@@ -11,12 +11,20 @@
namespace Tests\Feature;
+use App\DataMapper\ClientSettings;
+use App\Factory\ClientFactory;
+use App\Http\Requests\Client\StoreClientRequest;
+use App\Models\Client;
use App\Models\Country;
+use App\Repositories\ClientContactRepository;
+use App\Repositories\ClientRepository;
use App\Utils\Number;
+use App\Utils\Traits\ClientGroupSettingsSaver;
use App\Utils\Traits\MakesHash;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Support\Facades\Session;
+use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;
use Tests\MockAccountData;
use Tests\TestCase;
@@ -30,6 +38,7 @@ class ClientApiTest extends TestCase
use MakesHash;
use DatabaseTransactions;
use MockAccountData;
+ use ClientGroupSettingsSaver;
protected function setUp() :void
{
@@ -44,6 +53,302 @@ class ClientApiTest extends TestCase
Model::reguard();
}
+ public function testCsvImportRepositoryPersistance()
+ {
+ Client::unguard();
+
+ $data = [
+ 'company_id' => $this->company->id,
+ 'name' => 'Christian xx',
+ 'phone' => '',
+ 'address1' => '',
+ 'address2' => '',
+ 'postal_code' => '',
+ 'city' => '',
+ 'state' => '',
+ 'shipping_address1' => '',
+ 'shipping_address2' => '',
+ 'shipping_city' => '',
+ 'shipping_state' => '',
+ 'shipping_postal_code' => '',
+ 'public_notes' => '',
+ 'private_notes' => '',
+ 'website' => '',
+ 'vat_number' => '',
+ 'id_number' => '',
+ 'custom_value1' => '',
+ 'custom_value2' => '',
+ 'custom_value3' => '',
+ 'custom_value4' => '',
+ 'balance' => '0',
+ 'paid_to_date' => '0',
+ 'credit_balance' => 0,
+ 'settings' => [
+ 'entity' => 'App\\Models\\Client',
+ 'currency_id' => '3',
+ ],
+ 'client_hash' => 'xx',
+ 'contacts' =>
+ [
+ [
+ 'first_name' => '',
+ 'last_name' => '',
+ 'email' => '',
+ 'phone' => '',
+ 'custom_value1' => '',
+ 'custom_value2' => '',
+ 'custom_value3' => '',
+ 'custom_value4' => '',
+ ]
+ ],
+ 'country_id' => NULL,
+ 'shipping_country_id' => NULL,
+ 'user_id' => $this->user->id,
+ ];
+
+ $repository_name = ClientRepository::class;
+ $factory_name = ClientFactory::class;
+
+ $repository = app()->make($repository_name);
+ $repository->import_mode = true;
+
+ $c = $repository->save(array_diff_key($data, ['user_id' => false]), ClientFactory::create($this->company->id, $this->user->id));
+
+ Client::reguard();
+
+ $c->refresh();
+
+ $this->assertEquals("3", $c->settings->currency_id);
+
+ }
+
+ public function testClientSettingsSave()
+ {
+
+ $std = new \stdClass;
+ $std->entity = 'App\\Models\\Client';
+ $std->currency_id = 3;
+
+ $this->settings = $this->client->settings;
+
+ $this->saveSettings($std, $this->client);
+
+ $this->assertTrue(true);
+
+ }
+
+
+ public function testClientSettingsSave2()
+ {
+
+ $std = new \stdClass;
+ $std->entity = 'App\\Models\\Client';
+ $std->industry_id = '';
+ $std->size_id = '';
+ $std->currency_id = 3;
+
+ $this->settings = $this->client->settings;
+
+ $this->saveSettings($std, $this->client);
+
+ $this->assertTrue(true);
+
+ }
+
+ public function testClientStoreValidation()
+ {
+
+ auth()->login($this->user, false);
+ auth()->user()->setCompany($this->company);
+
+ $data = array (
+ 'company_id' => $this->company->id,
+ 'name' => 'Christian xx',
+ 'phone' => '',
+ 'address1' => '',
+ 'address2' => '',
+ 'postal_code' => '',
+ 'city' => '',
+ 'state' => '',
+ 'shipping_address1' => '',
+ 'shipping_address2' => '',
+ 'shipping_city' => '',
+ 'shipping_state' => '',
+ 'shipping_postal_code' => '',
+ 'public_notes' => '',
+ 'private_notes' => '',
+ 'website' => '',
+ 'vat_number' => '',
+ 'id_number' => '',
+ 'custom_value1' => '',
+ 'custom_value2' => '',
+ 'custom_value3' => '',
+ 'custom_value4' => '',
+ 'balance' => '0',
+ 'paid_to_date' => '0',
+ 'credit_balance' => 0,
+ 'settings' =>
+ (object) array(
+ 'entity' => 'App\\Models\\Client',
+ 'currency_id' => '3',
+ ),
+ 'client_hash' => 'xx',
+ 'contacts' =>
+ array (
+ 0 =>
+ array (
+ 'first_name' => '',
+ 'last_name' => '',
+ 'email' => '',
+ 'phone' => '',
+ 'custom_value1' => '',
+ 'custom_value2' => '',
+ 'custom_value3' => '',
+ 'custom_value4' => '',
+ ),
+ ),
+ 'country_id' => NULL,
+ 'shipping_country_id' => NULL,
+ 'user_id' => $this->user->id,
+ );
+
+
+ $request_name = StoreClientRequest::class;
+ $repository_name = ClientRepository::class;
+ $factory_name = ClientFactory::class;
+
+ $repository = app()->make($repository_name);
+ $repository->import_mode = true;
+
+ $_syn_request_class = new $request_name;
+ $_syn_request_class->setContainer(app());
+ $_syn_request_class->initialize($data);
+ $_syn_request_class->prepareForValidation();
+
+ $validator = Validator::make($_syn_request_class->all(), $_syn_request_class->rules());
+
+ $_syn_request_class->setValidator($validator);
+
+ $this->assertFalse($validator->fails());
+
+
+ }
+
+
+
+ public function testClientImportDataStructure()
+ {
+
+
+ $data = array (
+ 'company_id' => $this->company->id,
+ 'name' => 'Christian xx',
+ 'phone' => '',
+ 'address1' => '',
+ 'address2' => '',
+ 'postal_code' => '',
+ 'city' => '',
+ 'state' => '',
+ 'shipping_address1' => '',
+ 'shipping_address2' => '',
+ 'shipping_city' => '',
+ 'shipping_state' => '',
+ 'shipping_postal_code' => '',
+ 'public_notes' => '',
+ 'private_notes' => '',
+ 'website' => '',
+ 'vat_number' => '',
+ 'id_number' => '',
+ 'custom_value1' => '',
+ 'custom_value2' => '',
+ 'custom_value3' => '',
+ 'custom_value4' => '',
+ 'balance' => '0',
+ 'paid_to_date' => '0',
+ 'credit_balance' => 0,
+ 'settings' =>
+ (object) array(
+ 'entity' => 'App\\Models\\Client',
+ 'currency_id' => '3',
+ ),
+ 'client_hash' => 'xx',
+ 'contacts' =>
+ array (
+ 0 =>
+ array (
+ 'first_name' => '',
+ 'last_name' => '',
+ 'email' => '',
+ 'phone' => '',
+ 'custom_value1' => '',
+ 'custom_value2' => '',
+ 'custom_value3' => '',
+ 'custom_value4' => '',
+ ),
+ ),
+ 'country_id' => NULL,
+ 'shipping_country_id' => NULL,
+ 'user_id' => $this->user->id,
+ );
+
+ $crepo = new ClientRepository(new ClientContactRepository());
+
+ $c = $crepo->save(array_diff_key($data, ['user_id' => false]), ClientFactory::create($this->company->id, $this->user->id));
+ $c->saveQuietly();
+
+ $this->assertEquals('Christian xx', $c->name);
+ $this->assertEquals('3', $c->settings->currency_id);
+ }
+
+ public function testClientCsvImport()
+ {
+
+ $settings = ClientSettings::defaults();
+ $settings->currency_id = "840";
+
+ $data = [
+ 'name' => $this->faker->firstName(),
+ 'id_number' => 'Coolio',
+ 'settings' => (array)$settings,
+ 'contacts' => [
+ [
+ 'first_name' => '',
+ 'last_name' => '',
+ 'email' => '',
+ 'phone' => '',
+ 'custom_value1' => '',
+ 'custom_value2' => '',
+ 'custom_value3' => '',
+ 'custom_value4' => '',
+ ]
+ ]
+ ];
+
+ $response = false;
+
+ try {
+ $response = $this->withHeaders([
+ 'X-API-SECRET' => config('ninja.api_secret'),
+ 'X-API-TOKEN' => $this->token,
+ ])->post('/api/v1/clients/', $data);
+ } catch (ValidationException $e) {
+ $message = json_decode($e->validator->getMessageBag(), 1);
+ nlog($message);
+ }
+
+ $response->assertStatus(200);
+
+ $crepo = new ClientRepository(new ClientContactRepository());
+
+ $c = $crepo->save($data, ClientFactory::create($this->company->id, $this->user->id));
+ $c->saveQuietly();
+
+
+ }
+
+
+
+
public function testIllegalPropertiesInClientSettings()
{
$settings = [
diff --git a/tests/Feature/DeleteInvoiceTest.php b/tests/Feature/DeleteInvoiceTest.php
index d49f6f27c9e9..8dcf2daf4764 100644
--- a/tests/Feature/DeleteInvoiceTest.php
+++ b/tests/Feature/DeleteInvoiceTest.php
@@ -162,6 +162,7 @@ class DeleteInvoiceTest extends TestCase
$payment = $payment->fresh();
$this->assertTrue($payment->is_deleted);
+ $this->assertEquals(0, $payment->amount);
$this->assertEquals(4, $payment->status_id);
$client->fresh();