diff --git a/app/Http/Controllers/BaseController.php b/app/Http/Controllers/BaseController.php index 549468bf5..e234298df 100644 --- a/app/Http/Controllers/BaseController.php +++ b/app/Http/Controllers/BaseController.php @@ -148,26 +148,25 @@ class BaseController extends Controller $query->with( [ - 'company' => function ($query) use($updated_at){$query->where('updated_at', '>=', 0);}, - 'company.activities' => function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, + 'company' => function ($query) use($updated_at){$query->whereNotNull('updated_at');}, 'company.clients' =>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, 'company.tax_rates'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, 'company.groups'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, 'company.company_gateways.gateway'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, 'company.clients.contacts'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, 'company.products'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, - 'company.invoices.company'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, + 'company.invoices'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, 'company.invoices.invitations.contact'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, - 'company.invoices.invitations.company'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, + 'company.invoices.invitations'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, 'company.invoices.documents'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, 'company.payments.paymentables'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, 'company.quotes.invitations.contact'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, - 'company.quotes.invitations.company'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, + 'company.quotes.invitations'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, 'company.quotes.documents'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, 'company.credits.documents'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, 'company.credits.invitations.contact'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, - 'company.credits.invitations.company'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, - 'company.payment_terms.company'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, + 'company.credits.invitations'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, + 'company.payment_terms'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, 'company.vendors.contacts'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, 'company.expenses'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, 'company.tasks'=>function ($query) use($updated_at){$query->where('updated_at', '>=', $updated_at);}, diff --git a/app/Http/Requests/Invoice/StoreInvoiceRequest.php b/app/Http/Requests/Invoice/StoreInvoiceRequest.php index 10f6d72a7..dfcc0ba9c 100644 --- a/app/Http/Requests/Invoice/StoreInvoiceRequest.php +++ b/app/Http/Requests/Invoice/StoreInvoiceRequest.php @@ -12,6 +12,7 @@ namespace App\Http\Requests\Invoice; use App\Http\Requests\Request; +use App\Http\ValidationRules\Invoice\UniqueInvoiceNumberRule; use App\Models\ClientContact; use App\Models\Invoice; use App\Utils\Traits\CleanLineItems; @@ -51,7 +52,8 @@ class StoreInvoiceRequest extends Request $rules['invitations.*.client_contact_id'] = 'distinct'; - + $rules['number'] = new UniqueInvoiceNumberRule($this->all()); + return $rules; } diff --git a/app/Http/ValidationRules/Invoice/UniqueInvoiceNumberRule.php b/app/Http/ValidationRules/Invoice/UniqueInvoiceNumberRule.php new file mode 100644 index 000000000..c3997f9ff --- /dev/null +++ b/app/Http/ValidationRules/Invoice/UniqueInvoiceNumberRule.php @@ -0,0 +1,70 @@ +input = $input; + } + + /** + * @param string $attribute + * @param mixed $value + * @return bool + */ + public function passes($attribute, $value) + { + return $this->checkIfInvoiceNumberUnique(); //if it exists, return false! + } + + /** + * @return string + */ + public function message() + { + return "Invoice number already taken"; + } + + /** + * @param $email + * + * //off,when_sent,when_paid + * + * @return bool + */ + private function checkIfInvoiceNumberUnique() : bool + { + + $invoice = Invoice::where('client_id', $this->input['client_id']) + ->where('number', $this->input['number']) + ->withTrashed() + ->first(); + + if($invoice) + return false; + + return true; + } +} diff --git a/app/Listeners/Activity/CreatedCreditActivity.php b/app/Listeners/Activity/CreatedCreditActivity.php index a2406e618..06529160a 100644 --- a/app/Listeners/Activity/CreatedCreditActivity.php +++ b/app/Listeners/Activity/CreatedCreditActivity.php @@ -45,6 +45,8 @@ class CreatedCreditActivity implements ShouldQueue $fields->credit_id = $event->credit->id; $fields->user_id = $event->credit->user_id; + $fields->client_id = $event->credit->client_id; + $fields->company_id = $event->credit->company_id; $fields->activity_type_id = Activity::CREATE_CREDIT; diff --git a/app/Listeners/Activity/CreatedQuoteActivity.php b/app/Listeners/Activity/CreatedQuoteActivity.php index 5b6bd86d7..2ff84f49a 100644 --- a/app/Listeners/Activity/CreatedQuoteActivity.php +++ b/app/Listeners/Activity/CreatedQuoteActivity.php @@ -44,6 +44,7 @@ class CreatedQuoteActivity implements ShouldQueue $fields = new \stdClass; $fields->quote_id = $event->quote->id; + $fields->client_id = $event->quote->client_id; $fields->user_id = $event->quote->user_id; $fields->company_id = $event->quote->company_id; $fields->activity_type_id = Activity::CREATE_QUOTE; diff --git a/app/Listeners/Activity/CreditArchivedActivity.php b/app/Listeners/Activity/CreditArchivedActivity.php index 1936fda8e..d5a52c97d 100644 --- a/app/Listeners/Activity/CreditArchivedActivity.php +++ b/app/Listeners/Activity/CreditArchivedActivity.php @@ -46,7 +46,8 @@ class CreditArchivedActivity implements ShouldQueue $fields = new \stdClass; $fields->payment_id = $event->credit->id; - $fields->user_id = $event->credit->user_id; + $fields->client_id = $event->credit->client_id; + $fields->user_id = $event->credit->user_id; $fields->company_id = $event->credit->company_id; $fields->activity_type_id = Activity::ARCHIVE_CREDIT; diff --git a/app/Listeners/Activity/PaymentArchivedActivity.php b/app/Listeners/Activity/PaymentArchivedActivity.php index 816e257ef..de3d7cd5d 100644 --- a/app/Listeners/Activity/PaymentArchivedActivity.php +++ b/app/Listeners/Activity/PaymentArchivedActivity.php @@ -50,6 +50,7 @@ class PaymentArchivedActivity implements ShouldQueue $fields = new \stdClass; $fields->payment_id = $payment->id; + $fields->client_id = $payment->client_id; $fields->user_id = $payment->user_id; $fields->company_id = $payment->company_id; $fields->activity_type_id = Activity::ARCHIVE_PAYMENT; diff --git a/app/Listeners/Activity/PaymentCreatedActivity.php b/app/Listeners/Activity/PaymentCreatedActivity.php index ba6c6b607..9ba47b05c 100644 --- a/app/Listeners/Activity/PaymentCreatedActivity.php +++ b/app/Listeners/Activity/PaymentCreatedActivity.php @@ -50,6 +50,7 @@ class PaymentCreatedActivity implements ShouldQueue $fields = new \stdClass; $fields->payment_id = $payment->id; + $fields->client_id = $payment->client_id; $fields->user_id = $payment->user_id; $fields->company_id = $payment->company_id; $fields->activity_type_id = Activity::CREATE_PAYMENT; diff --git a/app/Listeners/Activity/PaymentDeletedActivity.php b/app/Listeners/Activity/PaymentDeletedActivity.php index 171ee63f1..24754367d 100644 --- a/app/Listeners/Activity/PaymentDeletedActivity.php +++ b/app/Listeners/Activity/PaymentDeletedActivity.php @@ -50,6 +50,7 @@ class PaymentDeletedActivity implements ShouldQueue $fields = new \stdClass; $fields->payment_id = $payment->id; + $fields->client_id = $payment->client_id; $fields->user_id = $payment->user_id; $fields->company_id = $payment->company_id; $fields->activity_type_id = Activity::DELETE_PAYMENT; diff --git a/app/Listeners/Activity/PaymentRefundedActivity.php b/app/Listeners/Activity/PaymentRefundedActivity.php index 67c75af9c..582fce25b 100644 --- a/app/Listeners/Activity/PaymentRefundedActivity.php +++ b/app/Listeners/Activity/PaymentRefundedActivity.php @@ -43,6 +43,7 @@ class PaymentRefundedActivity implements ShouldQueue $fields = new \stdClass; $fields->client_id = $event->payment->id; + $fields->client_id = $event->payment->client_id; $fields->user_id = $event->payment->user_id; $fields->company_id = $event->payment->company_id; $fields->activity_type_id = Activity::REFUNDED_PAYMENT; diff --git a/app/Listeners/Activity/PaymentUpdatedActivity.php b/app/Listeners/Activity/PaymentUpdatedActivity.php index 5185b5621..b18e6ca12 100644 --- a/app/Listeners/Activity/PaymentUpdatedActivity.php +++ b/app/Listeners/Activity/PaymentUpdatedActivity.php @@ -50,6 +50,7 @@ class PaymentUpdatedActivity implements ShouldQueue $fields = new \stdClass; $fields->payment_id = $payment->id; + $fields->client_id = $payment->client_id; $fields->user_id = $payment->user_id; $fields->company_id = $payment->company_id; $fields->activity_type_id = Activity::UPDATE_PAYMENT; diff --git a/app/Listeners/Activity/QuoteUpdatedActivity.php b/app/Listeners/Activity/QuoteUpdatedActivity.php index 9a8da1507..9f3e4025a 100644 --- a/app/Listeners/Activity/QuoteUpdatedActivity.php +++ b/app/Listeners/Activity/QuoteUpdatedActivity.php @@ -50,7 +50,8 @@ class QuoteUpdatedActivity implements ShouldQueue $fields = new \stdClass; $fields->payment_id = $quote->id; - $fields->user_id = $quote->user_id; + $fields->client_id = $quote->client_id; + $fields->user_id = $quote->user_id; $fields->company_id = $quote->company_id; $fields->activity_type_id = Activity::UPDATE_QUOTE; diff --git a/app/Listeners/Activity/UpdatedCreditActivity.php b/app/Listeners/Activity/UpdatedCreditActivity.php index fb1868980..cef717924 100644 --- a/app/Listeners/Activity/UpdatedCreditActivity.php +++ b/app/Listeners/Activity/UpdatedCreditActivity.php @@ -44,6 +44,7 @@ class UpdatedCreditActivity implements ShouldQueue $fields = new \stdClass; $fields->credit_id = $event->credit->id; + $fields->client_id = $event->credit->client_id; $fields->user_id = $event->credit->user_id; $fields->company_id = $event->credit->company_id; $fields->activity_type_id = Activity::UPDATE_CREDIT; diff --git a/app/Listeners/Credit/CreditRestoredActivity.php b/app/Listeners/Credit/CreditRestoredActivity.php index 4920fb343..3111df9dd 100644 --- a/app/Listeners/Credit/CreditRestoredActivity.php +++ b/app/Listeners/Credit/CreditRestoredActivity.php @@ -48,6 +48,7 @@ class CreditRestoredActivity implements ShouldQueue $fields = new \stdClass; $fields->credit_id = $event->credit->id; + $fields->client_id = $event->credit->client_id; $fields->user_id = $event->credit->user_id; $fields->company_id = $event->credit->company_id; $fields->activity_type_id = Activity::RESTORE_CREDIT; diff --git a/app/Listeners/Invoice/CreateInvoiceActivity.php b/app/Listeners/Invoice/CreateInvoiceActivity.php index c9d94d625..38f5a8dc8 100644 --- a/app/Listeners/Invoice/CreateInvoiceActivity.php +++ b/app/Listeners/Invoice/CreateInvoiceActivity.php @@ -47,7 +47,8 @@ class CreateInvoiceActivity implements ShouldQueue $fields = new \stdClass; $fields->invoice_id = $event->invoice->id; - $fields->user_id = $event->invoice->user_id; + $fields->client_id = $event->invoice->client_id; + $fields->user_id = $event->invoice->user_id; $fields->company_id = $event->invoice->company_id; $fields->activity_type_id = Activity::CREATE_INVOICE; diff --git a/app/Listeners/Invoice/CreateInvoiceHtmlBackup.php b/app/Listeners/Invoice/CreateInvoiceHtmlBackup.php index 1f4e4b73b..d50a799ca 100644 --- a/app/Listeners/Invoice/CreateInvoiceHtmlBackup.php +++ b/app/Listeners/Invoice/CreateInvoiceHtmlBackup.php @@ -43,7 +43,8 @@ class CreateInvoiceHtmlBackup implements ShouldQueue $fields = new \stdClass; $fields->invoice_id = $event->invoice->id; - $fields->user_id = $event->invoice->user_id; + $fields->client_id = $event->invoice->client_id; + $fields->user_id = $event->invoice->user_id; $fields->company_id = $event->invoice->company_id; $fields->activity_type_id = Activity::MARK_SENT_INVOICE; diff --git a/app/Listeners/Invoice/InvoiceArchivedActivity.php b/app/Listeners/Invoice/InvoiceArchivedActivity.php index c38db35b7..895eb7d27 100644 --- a/app/Listeners/Invoice/InvoiceArchivedActivity.php +++ b/app/Listeners/Invoice/InvoiceArchivedActivity.php @@ -48,6 +48,7 @@ class InvoiceArchivedActivity implements ShouldQueue $fields = new \stdClass; $fields->invoice_id = $event->invoice->id; + $fields->client_id = $event->invoice->client_id; $fields->user_id = $event->invoice->user_id; $fields->company_id = $event->invoice->company_id; $fields->activity_type_id = Activity::ARCHIVE_INVOICE; diff --git a/app/Listeners/Invoice/InvoiceCancelledActivity.php b/app/Listeners/Invoice/InvoiceCancelledActivity.php index efb816ff5..9a2e820b6 100644 --- a/app/Listeners/Invoice/InvoiceCancelledActivity.php +++ b/app/Listeners/Invoice/InvoiceCancelledActivity.php @@ -48,7 +48,8 @@ class InvoiceCancelledActivity implements ShouldQueue $fields = new \stdClass; $fields->invoice_id = $event->invoice->id; - $fields->user_id = $event->invoice->user_id; + $fields->client_id = $event->invoice->client_id; + $fields->user_id = $event->invoice->user_id; $fields->company_id = $event->invoice->company_id; $fields->activity_type_id = Activity::CANCELLED_INVOICE; diff --git a/app/Listeners/Invoice/InvoiceDeletedActivity.php b/app/Listeners/Invoice/InvoiceDeletedActivity.php index 436232b0f..0b4eee507 100644 --- a/app/Listeners/Invoice/InvoiceDeletedActivity.php +++ b/app/Listeners/Invoice/InvoiceDeletedActivity.php @@ -48,7 +48,8 @@ class InvoiceDeletedActivity implements ShouldQueue $fields = new \stdClass; $fields->invoice_id = $event->invoice->id; - $fields->user_id = $event->invoice->user_id; + $fields->client_id = $event->invoice->client_id; + $fields->user_id = $event->invoice->user_id; $fields->company_id = $event->invoice->company_id; $fields->activity_type_id = Activity::DELETE_INVOICE; diff --git a/app/Listeners/Invoice/InvoiceEmailFailedActivity.php b/app/Listeners/Invoice/InvoiceEmailFailedActivity.php index 6a4f02873..4f924638e 100644 --- a/app/Listeners/Invoice/InvoiceEmailFailedActivity.php +++ b/app/Listeners/Invoice/InvoiceEmailFailedActivity.php @@ -47,7 +47,8 @@ class InvoiceEmailFailedActivity implements ShouldQueue $fields = new \stdClass; $fields->invoice_id = $event->invoice->id; - $fields->user_id = $event->invoice->user_id; + $fields->client_id = $event->invoice->client_id; + $fields->user_id = $event->invoice->user_id; $fields->company_id = $event->invoice->company_id; $fields->activity_type_id = Activity::EMAIL_INVOICE_FAILED; diff --git a/app/Listeners/Invoice/InvoiceRestoredActivity.php b/app/Listeners/Invoice/InvoiceRestoredActivity.php index 1832ccdc8..78e799481 100644 --- a/app/Listeners/Invoice/InvoiceRestoredActivity.php +++ b/app/Listeners/Invoice/InvoiceRestoredActivity.php @@ -48,7 +48,8 @@ class InvoiceRestoredActivity implements ShouldQueue $fields = new \stdClass; $fields->invoice_id = $event->invoice->id; - $fields->user_id = $event->invoice->user_id; + $fields->client_id = $event->invoice->client_id; + $fields->user_id = $event->invoice->user_id; $fields->company_id = $event->invoice->company_id; $fields->activity_type_id = Activity::RESTORE_INVOICE; diff --git a/app/Listeners/Invoice/InvoiceReversedActivity.php b/app/Listeners/Invoice/InvoiceReversedActivity.php index 8d42772dd..7f4656279 100644 --- a/app/Listeners/Invoice/InvoiceReversedActivity.php +++ b/app/Listeners/Invoice/InvoiceReversedActivity.php @@ -47,7 +47,8 @@ class InvoiceReversedActivity implements ShouldQueue $fields = new \stdClass; $fields->invoice_id = $event->invoice->id; - $fields->user_id = $event->invoice->user_id; + $fields->client_id = $event->invoice->client_id; + $fields->user_id = $event->invoice->user_id; $fields->company_id = $event->invoice->company_id; $fields->activity_type_id = Activity::REVERSED_INVOICE; diff --git a/app/Listeners/Payment/PaymentRestoredActivity.php b/app/Listeners/Payment/PaymentRestoredActivity.php index 828a0b046..ec97e9a57 100644 --- a/app/Listeners/Payment/PaymentRestoredActivity.php +++ b/app/Listeners/Payment/PaymentRestoredActivity.php @@ -48,7 +48,8 @@ class PaymentRestoredActivity implements ShouldQueue $fields = new \stdClass; $fields->payment_id = $event->payment->id; - $fields->user_id = $event->payment->user_id; + $fields->client_id = $event->payment->client_id; + $fields->user_id = $event->payment->user_id; $fields->company_id = $event->payment->company_id; $fields->activity_type_id = Activity::RESTORE_PAYMENT; diff --git a/app/Listeners/Quote/QuoteApprovedActivity.php b/app/Listeners/Quote/QuoteApprovedActivity.php index 5ac5c14d4..844593568 100644 --- a/app/Listeners/Quote/QuoteApprovedActivity.php +++ b/app/Listeners/Quote/QuoteApprovedActivity.php @@ -48,7 +48,8 @@ class QuoteApprovedActivity implements ShouldQueue $fields = new \stdClass; $fields->quote_id = $event->quote->id; - $fields->user_id = $event->quote->user_id; + $fields->client_id = $event->quote->client_id; + $fields->user_id = $event->quote->user_id; $fields->client_contact_id = $event->contact->id; $fields->company_id = $event->payment->company_id; $fields->activity_type_id = Activity::RESTORE_PAYMENT; diff --git a/app/Listeners/Quote/QuoteArchivedActivity.php b/app/Listeners/Quote/QuoteArchivedActivity.php index ea8cfb7d8..56dc5e770 100644 --- a/app/Listeners/Quote/QuoteArchivedActivity.php +++ b/app/Listeners/Quote/QuoteArchivedActivity.php @@ -48,7 +48,8 @@ class QuoteArchivedActivity implements ShouldQueue $fields = new \stdClass; $fields->quote_id = $event->quote->id; - $fields->user_id = $event->quote->user_id; + $fields->client_id = $event->quote->client_id; + $fields->user_id = $event->quote->user_id; $fields->company_id = $event->quote->company_id; $fields->activity_type_id = Activity::ARCHIVE_QUOTE; diff --git a/app/Listeners/Quote/QuoteDeletedActivity.php b/app/Listeners/Quote/QuoteDeletedActivity.php index f20f12a83..bea34f112 100644 --- a/app/Listeners/Quote/QuoteDeletedActivity.php +++ b/app/Listeners/Quote/QuoteDeletedActivity.php @@ -48,7 +48,8 @@ class QuoteDeletedActivity implements ShouldQueue $fields = new \stdClass; $fields->quote_id = $event->quote->id; - $fields->user_id = $event->quote->user_id; + $fields->client_id = $event->quote->client_id; + $fields->user_id = $event->quote->user_id; $fields->company_id = $event->quote->company_id; $fields->activity_type_id = Activity::DELETE_QUOTE; diff --git a/app/Listeners/Quote/QuoteEmailActivity.php b/app/Listeners/Quote/QuoteEmailActivity.php index dffcb72ce..13b4ecdf4 100644 --- a/app/Listeners/Quote/QuoteEmailActivity.php +++ b/app/Listeners/Quote/QuoteEmailActivity.php @@ -47,7 +47,8 @@ class QuoteEmailActivity implements ShouldQueue $fields = new \stdClass; $fields->quote_id = $event->invitation->quote->id; - $fields->user_id = $event->invitation->quote->user_id; + $fields->client_id = $event->invitation->quote->client_id; + $fields->user_id = $event->invitation->quote->user_id; $fields->company_id = $event->invitation->quote->company_id; $fields->client_contact_id = $event->invitation->quote->client_contact_id; $fields->activity_type_id = Activity::EMAIL_QUOTE; diff --git a/app/Listeners/Quote/QuoteRestoredActivity.php b/app/Listeners/Quote/QuoteRestoredActivity.php index 9c15bd911..2b480e556 100644 --- a/app/Listeners/Quote/QuoteRestoredActivity.php +++ b/app/Listeners/Quote/QuoteRestoredActivity.php @@ -48,7 +48,8 @@ class QuoteRestoredActivity implements ShouldQueue $fields = new \stdClass; $fields->quote_id = $event->quote->id; - $fields->user_id = $event->quote->user_id; + $fields->client_id = $event->quote->client_id; + $fields->user_id = $event->quote->user_id; $fields->company_id = $event->quote->company_id; $fields->activity_type_id = Activity::RESTORE_QUOTE;