Working on recurring & analytics

This commit is contained in:
David Bomba 2020-10-07 14:00:32 +11:00
parent ff00ed3815
commit b8b3149582
8 changed files with 228 additions and 9 deletions

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\DataMapper\Analytics;
class EmailInvoiceFailure
{
/**
* The type of Sample.
*
* Monotonically incrementing counter
*
* - counter
*
* @var string
*/
public $type = 'mixed_metric';
/**
* The name of the counter.
* @var string
*/
public $name = 'job.failure.email_invoice';
/**
* The datetime of the counter measurement.
*
* date("Y-m-d H:i:s")
*
* @var DateTime
*/
public $datetime;
/**
* The Class failure name
* set to 0.
*
* @var string
*/
public $string_metric5 = '';
/**
* The exception string
* set to 0.
*
* @var string
*/
public $string_metric6 = '';
}

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\DataMapper\Analytics;
class MigrationFailure
{
/**
* The type of Sample.
*
* Monotonically incrementing counter
*
* - counter
*
* @var string
*/
public $type = 'mixed_metric';
/**
* The name of the counter.
* @var string
*/
public $name = 'job.failure.migration';
/**
* The datetime of the counter measurement.
*
* date("Y-m-d H:i:s")
*
* @var DateTime
*/
public $datetime;
/**
* The Class failure name
* set to 0.
*
* @var string
*/
public $string_metric5 = '';
/**
* The exception string
* set to 0.
*
* @var string
*/
public $string_metric6 = '';
}

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\DataMapper\Analytics;
class SendRecurringFailure
{
/**
* The type of Sample.
*
* Monotonically incrementing counter
*
* - counter
*
* @var string
*/
public $type = 'mixed_metric';
/**
* The name of the counter.
* @var string
*/
public $name = 'job.failure.send_recurring';
/**
* The datetime of the counter measurement.
*
* date("Y-m-d H:i:s")
*
* @var DateTime
*/
public $datetime;
/**
* The Class failure name
* set to 0.
*
* @var string
*/
public $string_metric5 = '';
/**
* The exception string
* set to 0.
*
* @var string
*/
public $string_metric6 = '';
}

View File

@ -30,7 +30,7 @@ class RecurringInvoiceToInvoiceFactory
$invoice->terms = $recurring_invoice->terms;
$invoice->public_notes = $recurring_invoice->public_notes;
$invoice->private_notes = $recurring_invoice->private_notes;
$invoice->date = date_create()->format($client->date_format());
//$invoice->date = now()->format($client->date_format());
$invoice->due_date = $recurring_invoice->calculateDueDate($recurring_invoice->next_send_date);
$invoice->is_deleted = $recurring_invoice->is_deleted;
$invoice->line_items = $recurring_invoice->line_items;

View File

@ -11,6 +11,7 @@
namespace App\Jobs\Invoice;
use App\DataMapper\Analytics\EmailInvoiceFailure;
use App\Events\Invoice\InvoiceWasEmailed;
use App\Events\Invoice\InvoiceWasEmailedAndFailed;
use App\Helpers\Email\InvoiceEmail;
@ -30,6 +31,7 @@ use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Mail;
use Symfony\Component\Mime\Test\Constraint\EmailTextBodyContains;
use Turbo124\Beacon\Facades\LightLogs;
/*Multi Mailer implemented*/
@ -95,4 +97,17 @@ class EmailInvoice extends BaseMailerJob implements ShouldQueue
/* Mark invoice sent */
$this->invoice_invitation->invoice->service()->markSent()->save();
}
public function failed($exception = null)
{
info('the job failed');
$job_failure = new EmailInvoiceFailure();
$job_failure->string_metric5 = get_class($this);
$job_failure->string_metric6 = $exception->getMessage();
LightLogs::create($job_failure)
->batch();
}
}

View File

@ -11,6 +11,7 @@
namespace App\Jobs\RecurringInvoice;
use App\DataMapper\Analytics\SendRecurringFailure;
use App\Events\Invoice\InvoiceWasEmailed;
use App\Factory\RecurringInvoiceToInvoiceFactory;
use App\Helpers\Email\InvoiceEmail;
@ -26,6 +27,7 @@ use Illuminate\Http\Request;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Carbon;
use Turbo124\Beacon\Facades\LightLogs;
class SendRecurring implements ShouldQueue
{
@ -58,7 +60,9 @@ class SendRecurring implements ShouldQueue
// Generate Standard Invoice
$invoice = RecurringInvoiceToInvoiceFactory::create($this->recurring_invoice, $this->recurring_invoice->client);
$invoice->date = now()->format('Y-m-d');
$invoice = $invoice->service()
->markSent()
->applyNumber()
@ -71,9 +75,10 @@ class SendRecurring implements ShouldQueue
$email_builder = (new InvoiceEmail())->build($invitation);
EmailInvoice::dispatch($email_builder, $invitation, $invoice->company);
info("Firing email for invoice {$invoice->number}");
if($invitation->contact && strlen($invitation->contact->email) >=1){
EmailInvoice::dispatch($email_builder, $invitation, $invoice->company);
info("Firing email for invoice {$invoice->number}");
}
});
@ -101,4 +106,18 @@ class SendRecurring implements ShouldQueue
}
public function failed($exception = null)
{
info('the job failed');
$job_failure = new SendRecurringFailure();
$job_failure->string_metric5 = get_class($this);
$job_failure->string_metric6 = $exception->getMessage();
LightLogs::create($job_failure)
->batch();
info(print_r($exception->getMessage(), 1));
}
}

View File

@ -11,6 +11,7 @@
namespace App\Jobs\Util;
use App\DataMapper\Analytics\MigrationFailure;
use App\DataMapper\CompanySettings;
use App\Exceptions\MigrationValidatorFailed;
use App\Exceptions\ResourceDependencyMissing;
@ -72,6 +73,7 @@ use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str;
use Turbo124\Beacon\Facades\LightLogs;
class Import implements ShouldQueue
{
@ -966,6 +968,15 @@ class Import implements ShouldQueue
public function failed($exception = null)
{
info('the job failed');
$job_failure = new MigrationFailure();
$job_failure->string_metric5 = get_class($this);
$job_failure->string_metric6 = $exception->getMessage();
LightLogs::create($job_failure)
->batch();
info(print_r($exception->getMessage(), 1));
}
}

View File

@ -64,11 +64,12 @@ trait GeneratesCounter
//Return a valid counter
$pattern = $client->getSetting('invoice_number_pattern');
$padding = $client->getSetting('counter_padding');
$invoice_number = $this->checkEntityNumber(Invoice::class, $client, $counter, $padding, $pattern);
$prefix = '';
if($invoice && $invoice->recurring_id)
$invoice_number = $this->prefixCounter($invoice_number, $client->getSetting('recurring_number_prefix'));
$prefix = $client->getSetting('recurring_number_prefix');
$invoice_number = $this->checkEntityNumber(Invoice::class, $client, $counter, $padding, $pattern, $prefix);
$this->incrementCounter($counter_entity, 'invoice_number_counter');
@ -289,7 +290,7 @@ trait GeneratesCounter
*
* @return string The padded and prefixed entity number
*/
private function checkEntityNumber($class, $entity, $counter, $padding, $pattern)
private function checkEntityNumber($class, $entity, $counter, $padding, $pattern, $prefix = '')
{
$check = false;
@ -298,6 +299,8 @@ trait GeneratesCounter
$number = $this->applyNumberPattern($entity, $number, $pattern);
$number = $this->prefixCounter($number, $prefix);
if ($class == Invoice::class || $class == RecurringInvoice::class)
$check = $class::whereCompanyId($entity->company_id)->whereNumber($number)->withTrashed()->first();
elseif ($class == Client::class || $class == Vendor::class)