Updates for structure of payment entities

This commit is contained in:
David Bomba 2023-10-08 15:06:34 +11:00
parent a9fd7d4a54
commit 9fee3c538c
6 changed files with 68 additions and 49 deletions

View File

@ -31,14 +31,8 @@ class EmailPayment implements ShouldQueue
{ {
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $payment;
public $email_builder; public $email_builder;
private $contact;
private $company;
public $settings; public $settings;
/** /**
@ -49,11 +43,8 @@ class EmailPayment implements ShouldQueue
* @param $contact * @param $contact
* @param $company * @param $company
*/ */
public function __construct(Payment $payment, Company $company, ?ClientContact $contact) public function __construct(public Payment $payment, private Company $company, private ?ClientContact $contact)
{ {
$this->payment = $payment;
$this->contact = $contact;
$this->company = $company;
$this->settings = $payment->client->getMergedSettings(); $this->settings = $payment->client->getMergedSettings();
} }

View File

@ -32,14 +32,8 @@ class EmailRefundPayment implements ShouldQueue
{ {
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $payment;
public $email_builder; public $email_builder;
private $contact;
private $company;
public $settings; public $settings;
/** /**
@ -50,11 +44,8 @@ class EmailRefundPayment implements ShouldQueue
* @param $contact * @param $contact
* @param $company * @param $company
*/ */
public function __construct(Payment $payment, Company $company, ClientContact $contact) public function __construct(public Payment $payment, private Company $company, private ?ClientContact $contact)
{ {
$this->payment = $payment;
$this->contact = $contact;
$this->company = $company;
$this->settings = $payment->client->getMergedSettings(); $this->settings = $payment->client->getMergedSettings();
} }
@ -84,7 +75,9 @@ class EmailRefundPayment implements ShouldQueue
$template_data['body'] = ctrans('texts.refunded_payment').' $payment.refunded <br><br>$invoices'; $template_data['body'] = ctrans('texts.refunded_payment').' $payment.refunded <br><br>$invoices';
$template_data['subject'] = ctrans('texts.refunded_payment'); $template_data['subject'] = ctrans('texts.refunded_payment');
$email_builder = (new PaymentEmailEngine($this->payment, $this->contact, $template_data))->build(); $email_builder = new PaymentEmailEngine($this->payment, $this->contact, $template_data);
$email_builder->is_refund = true;
$email_builder->build();
$invitation = null; $invitation = null;

View File

@ -15,12 +15,14 @@ use App\Utils\Ninja;
use App\Utils\Number; use App\Utils\Number;
use App\Utils\Helpers; use App\Utils\Helpers;
use App\Models\Account; use App\Models\Account;
use App\Models\Payment;
use App\Utils\Traits\MakesDates; use App\Utils\Traits\MakesDates;
use App\Jobs\Entity\CreateRawPdf; use App\Jobs\Entity\CreateRawPdf;
use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\URL; use Illuminate\Support\Facades\URL;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
use App\DataMapper\EmailTemplateDefaults; use App\DataMapper\EmailTemplateDefaults;
use App\Services\Template\TemplateAction;
class PaymentEmailEngine extends BaseEmailEngine class PaymentEmailEngine extends BaseEmailEngine
{ {
@ -44,6 +46,8 @@ class PaymentEmailEngine extends BaseEmailEngine
private $payment_template_subject; private $payment_template_subject;
public bool $is_refund = false;
public function __construct($payment, $contact, $template_data = null) public function __construct($payment, $contact, $template_data = null)
{ {
$this->payment = $payment; $this->payment = $payment;
@ -92,9 +96,44 @@ class PaymentEmailEngine extends BaseEmailEngine
if ($this->client->getSetting('pdf_email_attachment') !== false && $this->company->account->hasFeature(Account::FEATURE_PDF_ATTACHMENT)) { if ($this->client->getSetting('pdf_email_attachment') !== false && $this->company->account->hasFeature(Account::FEATURE_PDF_ATTACHMENT)) {
$this->payment->invoices->each(function ($invoice) { $this->payment->invoices->each(function ($invoice) {
$pdf = ((new CreateRawPdf($invoice->invitations->first(), $invoice->company->db))->handle());
$this->setAttachments([['file' => base64_encode($pdf), 'name' => $invoice->numberFormatter().'.pdf']]); if($this->is_refund && strlen($invoice->client->getSetting('payment_refund_design_id')) > 2) {
$pdf = (new TemplateAction(
[$this->payment->hashed_id],
$invoice->client->getSetting('payment_refund_design_id'),
Payment::class,
$this->payment->user_id,
$this->payment->company,
$this->payment->company->db,
'nohash',
false
))->handle();
$file_name = ctrans('texts.payment_refund_receipt', ['number' => $this->payment->number ]) . '.pdf';
$file_name = str_replace(' ', '_', $file_name);
}
elseif(!$this->is_refund && strlen($invoice->client->getSetting('payment_receipt_design_id')) > 2){
$pdf = (new TemplateAction(
[$this->payment->hashed_id],
$invoice->client->getSetting('payment_refund_design_id'),
Payment::class,
$this->payment->user_id,
$this->payment->company,
$this->payment->company->db,
'nohash',
false))->handle();
$file_name = ctrans('texts.payment_receipt', ['number' => $this->payment->number ]) . '.pdf';
$file_name = str_replace(' ', '_', $file_name);
}
else {
$pdf = ((new CreateRawPdf($invoice->invitations->first(), $invoice->company->db))->handle());
$file_name = $invoice->numberFormatter().'.pdf';
}
$this->setAttachments([['file' => base64_encode($pdf), 'name' => $file_name]]);
//attach invoice documents also to payments //attach invoice documents also to payments
if ($this->client->getSetting('document_email_attachment') !== false) { if ($this->client->getSetting('document_email_attachment') !== false) {

View File

@ -74,7 +74,8 @@ class TemplateAction implements ShouldQueue
* *
*/ */
public function handle() public function handle()
{ { nlog("inside template action");
MultiDB::setDb($this->db); MultiDB::setDb($this->db);
$key = $this->resolveEntityString(); $key = $this->resolveEntityString();
@ -85,16 +86,22 @@ class TemplateAction implements ShouldQueue
$template_service = new TemplateService($template); $template_service = new TemplateService($template);
if($this->entity == Invoice::class) { match($this->entity){
$resource->with('payments', 'client'); Invoice::class => $resource->with('payments', 'client'),
} Quote::class => $resource->with('client'),
Task::class => $resource->with('client'),
Credit::class => $resource->with('client'),
RecurringInvoice::class => $resource->with('client'),
Project::class => $resource->with('client'),
Expense::class => $resource->with('client'),
Payment::class => $resource->with('invoices', 'client'),
};
$result = $resource->withTrashed() $result = $resource->withTrashed()
->whereIn('id', $this->transformKeys($this->ids)) ->whereIn('id', $this->transformKeys($this->ids))
->where('company_id', $this->company->id) ->where('company_id', $this->company->id)
->get(); ->get();
if($result->count() <= 1) if($result->count() <= 1)
$data[$key] = collect($result); $data[$key] = collect($result);
else else
@ -103,15 +110,16 @@ class TemplateAction implements ShouldQueue
$ts = $template_service->build($data); $ts = $template_service->build($data);
nlog($ts->getHtml()); nlog($ts->getHtml());
$pdf = $ts->getPdf();
if($this->send_email) if($this->send_email) {
$pdf = $ts->getPdf();
$this->sendEmail($pdf, $template); $this->sendEmail($pdf, $template);
}
else { else {
$pdf = $ts->getPdf();
$filename = "templates/{$this->hash}.pdf"; $filename = "templates/{$this->hash}.pdf";
Storage::disk(config('filesystems.default'))->put($filename, $pdf); Storage::disk(config('filesystems.default'))->put($filename, $pdf);
return $pdf;
} }
} }

View File

@ -514,6 +514,8 @@ class TemplateService
'custom_value2' => $payment->custom_value2 ?? '', 'custom_value2' => $payment->custom_value2 ?? '',
'custom_value3' => $payment->custom_value3 ?? '', 'custom_value3' => $payment->custom_value3 ?? '',
'custom_value4' => $payment->custom_value4 ?? '', 'custom_value4' => $payment->custom_value4 ?? '',
'created_at' => $this->translateDate($payment->created_at, $payment->client->date_format(), $payment->client->locale()),
'updated_at' => $this->translateDate($payment->updated_at, $payment->client->date_format(), $payment->client->locale()),
'client' => [ 'client' => [
'name' => $payment->client->present()->name(), 'name' => $payment->client->present()->name(),
'balance' => $payment->client->balance, 'balance' => $payment->client->balance,
@ -587,27 +589,11 @@ class TemplateService
{ {
$payments = $payments->map(function ($payment) { $payments = $payments->map(function ($payment) {
// nlog(microtime(true));
return $this->transformPayment($payment); return $this->transformPayment($payment);
})->toArray(); })->toArray();
return $payments; return $payments;
// $it = new PaymentTransformer();
// $it->setDefaultIncludes(['client','invoices','paymentables']);
// $manager = new Manager();
// $manager->parseIncludes(['client','invoices','paymentables']);
// $resource = new \League\Fractal\Resource\Collection($payments, $it, null);
// $resources = $manager->createData($resource)->toArray();
// foreach($resources['data'] as $key => $resource) {
// $resources['data'][$key]['client'] = $resource['client']['data'] ?? [];
// $resources['data'][$key]['client']['contacts'] = $resource['client']['data']['contacts']['data'] ?? [];
// $resources['data'][$key]['invoices'] = $invoice['invoices']['data'] ?? [];
// }
// return $resources['data'];
} }

View File

@ -5161,6 +5161,8 @@ $LANG = array(
'show_document_preview' => 'Show Document Preview', 'show_document_preview' => 'Show Document Preview',
'cash_accounting' => 'Cash accounting', 'cash_accounting' => 'Cash accounting',
'click_or_drop_files_here' => 'Click or drop files here', 'click_or_drop_files_here' => 'Click or drop files here',
'payment_refund_receipt' => 'Payment Refund Receipt # :number',
'payment_receipt' => 'Payment Receipt # :number',
); );
return $LANG; return $LANG;