Merge pull request #3924 from turbo124/v2

Working on credit payments
This commit is contained in:
David Bomba 2020-07-22 21:36:08 +10:00 committed by GitHub
commit 4f50dd81c6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
22 changed files with 717 additions and 27 deletions

View File

@ -0,0 +1,45 @@
<?php
/**
* Invoice Ninja (https://invoiceninja.com)
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2020. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://opensource.org/licenses/AAL
*/
namespace App\Events\Credit;
use App\Models\Credit;
use Illuminate\Queue\SerializesModels;
/**
* Class CreditWasRestored.
*/
class CreditWasRestored
{
use SerializesModels;
/**
* @var Client
*/
public $credit;
public $company;
public $event_vars;
/**
* Create a new event instance.
*
* @param Client $client
*/
public function __construct(Credit $credit, Company $company, array $event_vars)
{
$this->credit = $credit;
$this->company = $company;
$this->event_vars = $event_vars;
}
}

View File

@ -25,6 +25,8 @@ class QuoteWasApproved
{ {
use Dispatchable, InteractsWithSockets, SerializesModels; use Dispatchable, InteractsWithSockets, SerializesModels;
public $contact;
public $quote; public $quote;
public $company; public $company;
@ -35,8 +37,9 @@ class QuoteWasApproved
* *
* @return void * @return void
*/ */
public function __construct(Quote $quote, Company $company, array $event_vars) public function __construct(ClientContact $contact, Quote $quote, Company $company, array $event_vars)
{ {
$this->contact = $contact;
$this->quote = $quote; $this->quote = $quote;
$this->company = $company; $this->company = $company;
$this->event_vars = $event_vars; $this->event_vars = $event_vars;

View File

@ -109,7 +109,7 @@ class QuoteController extends Controller
if ($process) { if ($process) {
foreach ($quotes as $quote) { foreach ($quotes as $quote) {
$quote->service()->approve()->save(); $quote->service()->approve()->save();
event(new QuoteWasApproved($quote, $quote->company, Ninja::eventVars())); event(new QuoteWasApproved(auth()->user(), $quote, $quote->company, Ninja::eventVars()));
} }
return redirect() return redirect()

View File

@ -27,8 +27,6 @@ class CompanyUserController extends BaseController
public function __construct() public function __construct()
{ {
parent::__construct(); parent::__construct();
//$this->middleware('guest');
} }
/** /**
@ -38,7 +36,6 @@ class CompanyUserController extends BaseController
*/ */
public function index() public function index()
{ {
// return view('signup.index');
} }
/** /**
@ -48,11 +45,10 @@ class CompanyUserController extends BaseController
*/ */
public function create() public function create()
{ {
//
} }
public function store(CreateAccountRequest $request) public function store()
{ {
} }
@ -125,8 +121,8 @@ class CompanyUserController extends BaseController
*/ */
public function update(UpdateCompanyUserRequest $request, User $user) public function update(UpdateCompanyUserRequest $request, User $user)
{ {
$company = auth()->user()->company();
$company = auth()->user()->company();
$company_user = CompanyUser::whereUserId($user->id)->whereCompanyId($company->id)->first(); $company_user = CompanyUser::whereUserId($user->id)->whereCompanyId($company->id)->first();
@ -145,6 +141,7 @@ class CompanyUserController extends BaseController
$company_user->save(); $company_user->save();
return $this->itemResponse($company_user->fresh()); return $this->itemResponse($company_user->fresh());
} }
/** /**

View File

@ -13,6 +13,8 @@ namespace App\Http\Controllers;
use App\DataMapper\CompanySettings; use App\DataMapper\CompanySettings;
use App\DataMapper\DefaultSettings; use App\DataMapper\DefaultSettings;
use App\Events\User\UserEmailAddressChangedNewEmail;
use App\Events\User\UserEmailAddressChangedOldEmail;
use App\Factory\UserFactory; use App\Factory\UserFactory;
use App\Filters\UserFilters; use App\Filters\UserFilters;
use App\Http\Controllers\Traits\VerifiesUserEmail; use App\Http\Controllers\Traits\VerifiesUserEmail;
@ -25,11 +27,13 @@ use App\Http\Requests\User\ShowUserRequest;
use App\Http\Requests\User\StoreUserRequest; use App\Http\Requests\User\StoreUserRequest;
use App\Http\Requests\User\UpdateUserRequest; use App\Http\Requests\User\UpdateUserRequest;
use App\Jobs\Company\CreateCompanyToken; use App\Jobs\Company\CreateCompanyToken;
use App\Jobs\User\UserEmailChanged;
use App\Models\CompanyToken; use App\Models\CompanyToken;
use App\Models\CompanyUser; use App\Models\CompanyUser;
use App\Models\User; use App\Models\User;
use App\Repositories\UserRepository; use App\Repositories\UserRepository;
use App\Transformers\UserTransformer; use App\Transformers\UserTransformer;
use App\Utils\Ninja;
use App\Utils\Traits\MakesHash; use App\Utils\Traits\MakesHash;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
@ -367,8 +371,14 @@ class UserController extends BaseController
*/ */
public function update(UpdateUserRequest $request, User $user) public function update(UpdateUserRequest $request, User $user)
{ {
$old_email = $user->email;
$new_email = $request->input('email');
$user = $this->user_repo->save($request->all(), $user); $user = $this->user_repo->save($request->all(), $user);
if($user)
UserEmailChanged::dispatch($new_email, $old_email, auth()->user()->company());
return $this->itemResponse($user); return $this->itemResponse($user);
} }

View File

@ -83,6 +83,24 @@ class ValidCreditsRules implements Rule
return false; return false;
} }
if(count($this->input['credits']) >=1){
$total_payments = $this->input['amount'] + array_sum(array_column($this->input['credits'], 'amount'));
info(print_r($this->input,1));
info("total payments = {$total_payments}");
info("total credits available = " . array_sum(array_column($this->input['credits'], 'amount')));
info("total invoices payable = " . array_sum(array_column($this->input['invoices'], 'amount')));
if($total_payments > array_sum(array_column($this->input['invoices'], 'amount'))){
$this->error_msg = "Sum of total payments and credits is greater than the total of invoices";
return false;
}
}
return true; return true;
} }

View File

@ -49,14 +49,15 @@ class QuoteWorkflowSettings implements ShouldQueue
*/ */
public function handle() public function handle()
{ {
if ($this->client->getSetting('auto_archive_quote')) {
$this->base_repository->archive($this->quote);
}
if ($this->client->getSetting('auto_email_quote')) { if ($this->client->getSetting('auto_email_quote')) {
$this->quote->invitations->each(function ($invitation, $key) { $this->quote->invitations->each(function ($invitation, $key) {
$this->quote->service()->sendEmail($invitation->contact); $this->quote->service()->sendEmail($invitation->contact);
}); });
} }
if ($this->client->getSetting('auto_archive_quote')) {
$this->base_repository->archive($this->quote);
}
} }
} }

View File

@ -0,0 +1,109 @@
<?php
/**
* Invoice Ninja (https://invoiceninja.com)
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2020. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://opensource.org/licenses/AAL
*/
namespace App\Jobs\User;
use App\Jobs\Mail\BaseMailerJob;
use App\Jobs\Util\SystemLogger;
use App\Libraries\MultiDB;
use App\Mail\User\UserNotificationMailer;
use App\Models\Company;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Http\Request;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Mail;
use Illuminate\Bus\Queueable;
class UserEmailChanged extends BaseMailerJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $new_email;
protected $old_email;
protected $company;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct(string $new_email, string $old_email, Company $company)
{
$this->new_email = $new_email;
$this->old_email = $old_email;
$this->company = $company;
}
public function handle()
{
//Set DB
MultiDB::setDb($this->company->db);
//if we need to set an email driver do it now
$this->setMailDriver($this->company->settings->email_sending_method);
$mail_obj = new \stdClass;
$mail_obj->subject = ctrans('texts.email_address_changed');
$mail_obj->markdown = 'email.admin.generic';
$mail_obj->from = [$this->company->owner()->email, $this->company->owner()->present()->name()];
$mail_obj->tag = $this->company->company_key;
$mail_obj->data = $this->getData();
//send email
Mail::to($this->old_email)
->send(new UserNotificationMailer($mail_obj));
Mail::to($this->new_email)
->send(new UserNotificationMailer($mail_obj));
//catch errors
if (count(Mail::failures()) > 0) {
$this->logMailError(Mail::failures());
}
}
private function getData()
{
return [
'title' => ctrans('texts.email_address_changed'),
'message' => ctrans(
'texts.email_address_changed_message',
['old_email' => $this->old_email,
'new_email' => $this->new_email,
]
),
'url' => config('ninja.app_url'),
'button' => ctrans('texts.account_login'),
'signature' => $this->company->owner()->signature,
'logo' => $this->company->present()->logo(),
];
}
private function logMailError($errors)
{
SystemLogger::dispatch(
$errors,
SystemLog::CATEGORY_MAIL,
SystemLog::EVENT_MAIL_SEND,
SystemLog::TYPE_FAILURE,
$this->company
);
}
}

View File

@ -0,0 +1,58 @@
<?php
/**
* Invoice Ninja (https://invoiceninja.com)
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2020. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://opensource.org/licenses/AAL
*/
namespace App\Listeners\Credit;
use App\Libraries\MultiDB;
use App\Models\Activity;
use App\Models\ClientContact;
use App\Models\InvoiceInvitation;
use App\Repositories\ActivityRepository;
use App\Utils\Traits\MakesHash;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Log;
class CreditRestoredActivity implements ShouldQueue
{
protected $activity_repo;
/**
* Create the event listener.
*
* @return void
*/
public function __construct(ActivityRepository $activity_repo)
{
$this->activity_repo = $activity_repo;
}
/**
* Handle the event.
*
* @param object $event
* @return void
*/
public function handle($event)
{
MultiDB::setDb($event->company->db);
$fields = new \stdClass;
$fields->credit_id = $event->credit->id;
$fields->user_id = $event->credit->user_id;
$fields->company_id = $event->credit->company_id;
$fields->activity_type_id = Activity::RESTORE_CREDIT;
$this->activity_repo->save($fields, $event->credit, $event->event_vars);
}
}

View File

@ -0,0 +1,57 @@
<?php
/**
* Invoice Ninja (https://invoiceninja.com)
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2020. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://opensource.org/licenses/AAL
*/
namespace App\Listeners\Invoice;
use App\Libraries\MultiDB;
use App\Models\Activity;
use App\Models\ClientContact;
use App\Models\InvoiceInvitation;
use App\Repositories\ActivityRepository;
use App\Utils\Traits\MakesHash;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Log;
class InvoiceRestoredActivity implements ShouldQueue
{
protected $activity_repo;
/**
* Create the event listener.
*
* @return void
*/
public function __construct(ActivityRepository $activity_repo)
{
$this->activity_repo = $activity_repo;
}
/**
* Handle the event.
*
* @param object $event
* @return void
*/
public function handle($event)
{
MultiDB::setDb($event->company->db);
$fields = new \stdClass;
$fields->invoice_id = $event->invoice->id;
$fields->user_id = $event->invoice->user_id;
$fields->company_id = $event->invoice->company_id;
$fields->activity_type_id = Activity::RESTORE_INVOICE;
$this->activity_repo->save($fields, $event->invoice, $event->event_vars);
}
}

View File

@ -0,0 +1,57 @@
<?php
/**
* Invoice Ninja (https://invoiceninja.com)
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2020. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://opensource.org/licenses/AAL
*/
namespace App\Listeners\Payment;
use App\Libraries\MultiDB;
use App\Models\Activity;
use App\Models\ClientContact;
use App\Models\InvoiceInvitation;
use App\Repositories\ActivityRepository;
use App\Utils\Traits\MakesHash;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Log;
class PaymentRestoredActivity implements ShouldQueue
{
protected $activity_repo;
/**
* Create the event listener.
*
* @return void
*/
public function __construct(ActivityRepository $activity_repo)
{
$this->activity_repo = $activity_repo;
}
/**
* Handle the event.
*
* @param object $event
* @return void
*/
public function handle($event)
{
MultiDB::setDb($event->company->db);
$fields = new \stdClass;
$fields->payment_id = $event->payment->id;
$fields->user_id = $event->payment->user_id;
$fields->company_id = $event->payment->company_id;
$fields->activity_type_id = Activity::RESTORE_PAYMENT;
$this->activity_repo->save($fields, $event->payment, $event->event_vars);
}
}

View File

@ -0,0 +1,58 @@
<?php
/**
* Invoice Ninja (https://invoiceninja.com)
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2020. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://opensource.org/licenses/AAL
*/
namespace App\Listeners\Quote;
use App\Libraries\MultiDB;
use App\Models\Activity;
use App\Models\ClientContact;
use App\Models\InvoiceInvitation;
use App\Repositories\ActivityRepository;
use App\Utils\Traits\MakesHash;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Log;
class QuoteApprovedActivity implements ShouldQueue
{
protected $activity_repo;
/**
* Create the event listener.
*
* @return void
*/
public function __construct(ActivityRepository $activity_repo)
{
$this->activity_repo = $activity_repo;
}
/**
* Handle the event.
*
* @param object $event
* @return void
*/
public function handle($event)
{
MultiDB::setDb($event->company->db);
$fields = new \stdClass;
$fields->quote_id = $event->quote->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;
$this->activity_repo->save($fields, $event->payment, $event->event_vars);
}
}

View File

@ -0,0 +1,57 @@
<?php
/**
* Invoice Ninja (https://invoiceninja.com)
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2020. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://opensource.org/licenses/AAL
*/
namespace App\Listeners\Quote;
use App\Libraries\MultiDB;
use App\Models\Activity;
use App\Models\ClientContact;
use App\Models\InvoiceInvitation;
use App\Repositories\ActivityRepository;
use App\Utils\Traits\MakesHash;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Log;
class QuoteArchivedActivity implements ShouldQueue
{
protected $activity_repo;
/**
* Create the event listener.
*
* @return void
*/
public function __construct(ActivityRepository $activity_repo)
{
$this->activity_repo = $activity_repo;
}
/**
* Handle the event.
*
* @param object $event
* @return void
*/
public function handle($event)
{
MultiDB::setDb($event->company->db);
$fields = new \stdClass;
$fields->quote_id = $event->quote->id;
$fields->user_id = $event->quote->user_id;
$fields->company_id = $event->quote->company_id;
$fields->activity_type_id = Activity::ARCHIVE_QUOTE;
$this->activity_repo->save($fields, $event->quote, $event->event_vars);
}
}

View File

@ -0,0 +1,57 @@
<?php
/**
* Invoice Ninja (https://invoiceninja.com)
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2020. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://opensource.org/licenses/AAL
*/
namespace App\Listeners\Quote;
use App\Libraries\MultiDB;
use App\Models\Activity;
use App\Models\ClientContact;
use App\Models\InvoiceInvitation;
use App\Repositories\ActivityRepository;
use App\Utils\Traits\MakesHash;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Log;
class QuoteDeletedActivity implements ShouldQueue
{
protected $activity_repo;
/**
* Create the event listener.
*
* @return void
*/
public function __construct(ActivityRepository $activity_repo)
{
$this->activity_repo = $activity_repo;
}
/**
* Handle the event.
*
* @param object $event
* @return void
*/
public function handle($event)
{
MultiDB::setDb($event->company->db);
$fields = new \stdClass;
$fields->quote_id = $event->quote->id;
$fields->user_id = $event->quote->user_id;
$fields->company_id = $event->quote->company_id;
$fields->activity_type_id = Activity::DELETE_QUOTE;
$this->activity_repo->save($fields, $event->quote, $event->event_vars);
}
}

View File

@ -0,0 +1,57 @@
<?php
/**
* Invoice Ninja (https://invoiceninja.com)
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2020. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://opensource.org/licenses/AAL
*/
namespace App\Listeners\Quote;
use App\Libraries\MultiDB;
use App\Models\Activity;
use App\Models\ClientContact;
use App\Models\InvoiceInvitation;
use App\Repositories\ActivityRepository;
use App\Utils\Traits\MakesHash;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Log;
class QuoteRestoredActivity implements ShouldQueue
{
protected $activity_repo;
/**
* Create the event listener.
*
* @return void
*/
public function __construct(ActivityRepository $activity_repo)
{
$this->activity_repo = $activity_repo;
}
/**
* Handle the event.
*
* @param object $event
* @return void
*/
public function handle($event)
{
MultiDB::setDb($event->company->db);
$fields = new \stdClass;
$fields->quote_id = $event->quote->id;
$fields->user_id = $event->quote->user_id;
$fields->company_id = $event->quote->company_id;
$fields->activity_type_id = Activity::RESTORE_QUOTE;
$this->activity_repo->save($fields, $event->quote, $event->event_vars);
}
}

View File

@ -0,0 +1,46 @@
<?php
/**
* Invoice Ninja (https://invoiceninja.com)
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2020. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://opensource.org/licenses/AAL
*/
namespace App\Mail\User;
use App\Models\User;
use Illuminate\Mail\Mailable;
class UserNotificationMailer extends Mailable
{
public $mail_obj;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($mail_obj)
{
$this->mail_obj = $mail_obj;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->from($this->mail_obj->from[0], $this->mail_obj->from[1]) //todo
->subject($this->mail_obj->subject)
->markdown($this->mail_obj->markdown, $this->mail_obj->data)
->withSwiftMessage(function ($message) {
$message->getHeaders()->addTextHeader('Tag', $this->mail_obj->tag);
});
}
}

View File

@ -36,14 +36,14 @@ class Activity extends StaticModel
const UPDATE_QUOTE=19; // const UPDATE_QUOTE=19; //
const EMAIL_QUOTE=20; // const EMAIL_QUOTE=20; //
const VIEW_QUOTE=21; // const VIEW_QUOTE=21; //
const ARCHIVE_QUOTE=22; const ARCHIVE_QUOTE=22; //
const DELETE_QUOTE=23; const DELETE_QUOTE=23; //
const RESTORE_QUOTE=24; const RESTORE_QUOTE=24; //
const RESTORE_INVOICE=25; const RESTORE_INVOICE=25; //
const RESTORE_CLIENT=26; const RESTORE_CLIENT=26; //
const RESTORE_PAYMENT=27; const RESTORE_PAYMENT=27; //
const RESTORE_CREDIT=28; const RESTORE_CREDIT=28; //
const APPROVE_QUOTE=29; const APPROVE_QUOTE=29; //
const CREATE_VENDOR=30; const CREATE_VENDOR=30;
const ARCHIVE_VENDOR=31; const ARCHIVE_VENDOR=31;
const DELETE_VENDOR=32; const DELETE_VENDOR=32;

View File

@ -65,7 +65,8 @@ class Payment extends BaseModel
'date', 'date',
'transaction_reference', 'transaction_reference',
'number', 'number',
'is_manual' 'is_manual',
'private_notes',
]; ];
protected $casts = [ protected $casts = [

View File

@ -26,6 +26,7 @@ use App\Events\Credit\CreditWasCreated;
use App\Events\Credit\CreditWasDeleted; use App\Events\Credit\CreditWasDeleted;
use App\Events\Credit\CreditWasEmailedAndFailed; use App\Events\Credit\CreditWasEmailedAndFailed;
use App\Events\Credit\CreditWasMarkedSent; use App\Events\Credit\CreditWasMarkedSent;
use App\Events\Credit\CreditWasRestored;
use App\Events\Credit\CreditWasUpdated; use App\Events\Credit\CreditWasUpdated;
use App\Events\Design\DesignWasArchived; use App\Events\Design\DesignWasArchived;
use App\Events\Invoice\InvoiceWasArchived; use App\Events\Invoice\InvoiceWasArchived;
@ -35,6 +36,7 @@ use App\Events\Invoice\InvoiceWasDeleted;
use App\Events\Invoice\InvoiceWasEmailed; use App\Events\Invoice\InvoiceWasEmailed;
use App\Events\Invoice\InvoiceWasMarkedSent; use App\Events\Invoice\InvoiceWasMarkedSent;
use App\Events\Invoice\InvoiceWasPaid; use App\Events\Invoice\InvoiceWasPaid;
use App\Events\Invoice\InvoiceWasRestored;
use App\Events\Invoice\InvoiceWasReversed; use App\Events\Invoice\InvoiceWasReversed;
use App\Events\Invoice\InvoiceWasUpdated; use App\Events\Invoice\InvoiceWasUpdated;
use App\Events\Invoice\InvoiceWasViewed; use App\Events\Invoice\InvoiceWasViewed;
@ -43,11 +45,15 @@ use App\Events\Payment\PaymentWasArchived;
use App\Events\Payment\PaymentWasCreated; use App\Events\Payment\PaymentWasCreated;
use App\Events\Payment\PaymentWasDeleted; use App\Events\Payment\PaymentWasDeleted;
use App\Events\Payment\PaymentWasRefunded; use App\Events\Payment\PaymentWasRefunded;
use App\Events\Payment\PaymentWasRestored;
use App\Events\Payment\PaymentWasUpdated; use App\Events\Payment\PaymentWasUpdated;
use App\Events\Payment\PaymentWasVoided; use App\Events\Payment\PaymentWasVoided;
use App\Events\Quote\QuoteWasApproved; use App\Events\Quote\QuoteWasApproved;
use App\Events\Quote\QuoteWasArchived;
use App\Events\Quote\QuoteWasCreated; use App\Events\Quote\QuoteWasCreated;
use App\Events\Quote\QuoteWasDeleted;
use App\Events\Quote\QuoteWasEmailed; use App\Events\Quote\QuoteWasEmailed;
use App\Events\Quote\QuoteWasRestored;
use App\Events\Quote\QuoteWasUpdated; use App\Events\Quote\QuoteWasUpdated;
use App\Events\Quote\QuoteWasViewed; use App\Events\Quote\QuoteWasViewed;
use App\Events\User\UserLoggedIn; use App\Events\User\UserLoggedIn;
@ -69,6 +75,7 @@ use App\Listeners\Activity\QuoteUpdatedActivity;
use App\Listeners\Activity\RestoreClientActivity; use App\Listeners\Activity\RestoreClientActivity;
use App\Listeners\Activity\UpdatedCreditActivity; use App\Listeners\Activity\UpdatedCreditActivity;
use App\Listeners\Contact\UpdateContactLastLogin; use App\Listeners\Contact\UpdateContactLastLogin;
use App\Listeners\Credit\CreditRestoredActivity;
use App\Listeners\Document\DeleteCompanyDocuments; use App\Listeners\Document\DeleteCompanyDocuments;
use App\Listeners\Invoice\CreateInvoiceActivity; use App\Listeners\Invoice\CreateInvoiceActivity;
use App\Listeners\Invoice\CreateInvoiceHtmlBackup; use App\Listeners\Invoice\CreateInvoiceHtmlBackup;
@ -79,12 +86,17 @@ use App\Listeners\Invoice\InvoiceDeletedActivity;
use App\Listeners\Invoice\InvoiceEmailActivity; use App\Listeners\Invoice\InvoiceEmailActivity;
use App\Listeners\Invoice\InvoiceEmailFailedActivity; use App\Listeners\Invoice\InvoiceEmailFailedActivity;
use App\Listeners\Invoice\InvoiceEmailedNotification; use App\Listeners\Invoice\InvoiceEmailedNotification;
use App\Listeners\Invoice\InvoiceRestoredActivity;
use App\Listeners\Invoice\InvoiceViewedActivity; use App\Listeners\Invoice\InvoiceViewedActivity;
use App\Listeners\Invoice\UpdateInvoiceActivity; use App\Listeners\Invoice\UpdateInvoiceActivity;
use App\Listeners\Invoice\UpdateInvoiceInvitations; use App\Listeners\Invoice\UpdateInvoiceInvitations;
use App\Listeners\Misc\InvitationViewedListener; use App\Listeners\Misc\InvitationViewedListener;
use App\Listeners\Payment\PaymentNotification; use App\Listeners\Payment\PaymentNotification;
use App\Listeners\Payment\PaymentRestoredActivity;
use App\Listeners\Quote\QuoteArchivedActivity;
use App\Listeners\Quote\QuoteDeletedActivity;
use App\Listeners\Quote\QuoteEmailActivity; use App\Listeners\Quote\QuoteEmailActivity;
use App\Listeners\Quote\QuoteRestoredActivity;
use App\Listeners\Quote\QuoteViewedActivity; use App\Listeners\Quote\QuoteViewedActivity;
use App\Listeners\Quote\ReachWorkflowSettings; use App\Listeners\Quote\ReachWorkflowSettings;
use App\Listeners\SendVerificationNotification; use App\Listeners\SendVerificationNotification;
@ -132,6 +144,9 @@ class EventServiceProvider extends ServiceProvider
PaymentWasVoided::class => [ PaymentWasVoided::class => [
PaymentVoidedActivity::class, PaymentVoidedActivity::class,
], ],
PaymentWasRestored::class =>[
PaymentRestoredActivity::class,
],
// Clients // Clients
ClientWasCreated::class =>[ ClientWasCreated::class =>[
CreatedClientActivity::class, CreatedClientActivity::class,
@ -176,6 +191,9 @@ class EventServiceProvider extends ServiceProvider
CreditWasArchived::class => [ CreditWasArchived::class => [
CreditArchivedActivity::class, CreditArchivedActivity::class,
], ],
CreditWasRestored::class => [
CreditRestoredActivity::class,
],
//Designs //Designs
DesignWasArchived::class => [ DesignWasArchived::class => [
], ],
@ -216,6 +234,9 @@ class EventServiceProvider extends ServiceProvider
InvoiceWasArchived::class => [ InvoiceWasArchived::class => [
InvoiceArchivedActivity::class, InvoiceArchivedActivity::class,
], ],
InvoiceWasRestored::class => [
InvoiceRestoredActivity::class,
],
InvoiceWasReversed::class => [ InvoiceWasReversed::class => [
], ],
InvoiceWasCancelled::class => [ InvoiceWasCancelled::class => [
@ -241,7 +262,15 @@ class EventServiceProvider extends ServiceProvider
QuoteWasViewed::class => [ QuoteWasViewed::class => [
QuoteViewedActivity::class, QuoteViewedActivity::class,
], ],
QuoteWasArchived::class => [
QuoteArchivedActivity::class,
],
QuoteWasDeleted::class => [
QuoteDeletedActivity::class,
],
QuoteWasRestored::class => [
QuoteRestoredActivity::class,
],
]; ];
/** /**

View File

@ -82,13 +82,15 @@ class PaymentRepository extends BaseRepository
$data['amount'] = array_sum(array_column($data['invoices'], 'amount')); $data['amount'] = array_sum(array_column($data['invoices'], 'amount'));
$client = Client::find($data['client_id']); $client = Client::find($data['client_id']);
info("updating client balance from {$client->balance} by this much ".$data['amount']); //info("updating client balance from {$client->balance} by this much ".$data['amount']);
$client->service()->updatePaidToDate($data['amount'])->save(); $client->service()->updatePaidToDate($data['amount'])->save();
} }
} }
//info(print_r($data,1));
/*Fill the payment*/ /*Fill the payment*/
$payment->fill($data); $payment->fill($data);
$payment->status_id = Payment::STATUS_COMPLETED; $payment->status_id = Payment::STATUS_COMPLETED;

View File

@ -0,0 +1,28 @@
<?php
/**
* Invoice Ninja (https://invoiceninja.com)
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2020. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://opensource.org/licenses/AAL
*/
namespace App\Services\Recurring;
use App\Models\RecurringInvoice;
class RecurringService
{
protected $recurring_entity;
public function __construct($recurring_entity)
{
$this->recurring_entity = $recurring_entity;
}
//set schedules - update next_send_dates
}

10
composer.lock generated
View File

@ -5841,16 +5841,16 @@
}, },
{ {
"name": "spatie/browsershot", "name": "spatie/browsershot",
"version": "3.37.1", "version": "3.37.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/spatie/browsershot.git", "url": "https://github.com/spatie/browsershot.git",
"reference": "7d526a458ce870a07669bd2416313a4d62f3f15d" "reference": "32d2984079ed8fe690f4dc5b7b6c205ae0a7b0fd"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/spatie/browsershot/zipball/7d526a458ce870a07669bd2416313a4d62f3f15d", "url": "https://api.github.com/repos/spatie/browsershot/zipball/32d2984079ed8fe690f4dc5b7b6c205ae0a7b0fd",
"reference": "7d526a458ce870a07669bd2416313a4d62f3f15d", "reference": "32d2984079ed8fe690f4dc5b7b6c205ae0a7b0fd",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -5899,7 +5899,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2020-07-08T07:20:45+00:00" "time": "2020-07-21T22:40:58+00:00"
}, },
{ {
"name": "spatie/image", "name": "spatie/image",