Merge pull request #8656 from turbo124/v5-develop

Change length of Webhook Urls
This commit is contained in:
David Bomba 2023-07-21 13:20:19 +10:00 committed by GitHub
commit 6355220387
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
23 changed files with 272 additions and 218 deletions

View File

@ -148,6 +148,8 @@ class ActivityController extends BaseController
} }
} }
$activity->company->setLocale();
if (isset($activity->invoice_id)) { if (isset($activity->invoice_id)) {
$filename = $activity->invoice->numberFormatter().'.pdf'; $filename = $activity->invoice->numberFormatter().'.pdf';
} elseif (isset($activity->quote_id)) { } elseif (isset($activity->quote_id)) {

View File

@ -85,23 +85,21 @@ class InvitationController extends Controller
->with('contact.client') ->with('contact.client')
->firstOrFail(); ->firstOrFail();
//09-03-2023 do not show entity if the invitation has been trashed.
if ($invitation->trashed() || $invitation->{$entity}->is_deleted) { if ($invitation->trashed() || $invitation->{$entity}->is_deleted) {
return $this->render('generic.not_available', ['account' => $invitation->company->account, 'company' => $invitation->company]); return $this->render('generic.not_available', ['account' => $invitation->company->account, 'company' => $invitation->company]);
} }
/* 12/01/2022 Clean up an edge case where if the contact is trashed, restore if a invitation comes back. */
if ($invitation->contact->trashed()) { if ($invitation->contact->trashed()) {
$invitation->contact->restore(); $invitation->contact->restore();
} }
/* Return early if we have the correct client_hash embedded */
$client_contact = $invitation->contact; $client_contact = $invitation->contact;
if (empty($client_contact->email)) { if (empty($client_contact->email)) {
$client_contact->email = Str::random(15) . "@example.com"; $client_contact->email = Str::random(15) . "@example.com";
} $client_contact->save(); $client_contact->save();
}
if (request()->has('client_hash') && request()->input('client_hash') == $invitation->contact->client->client_hash) { if (request()->has('client_hash') && request()->input('client_hash') == $invitation->contact->client->client_hash) {
request()->session()->invalidate(); request()->session()->invalidate();
auth()->guard('contact')->loginUsingId($client_contact->id, true); auth()->guard('contact')->loginUsingId($client_contact->id, true);

View File

@ -11,34 +11,35 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Events\Credit\CreditWasCreated; use App\Utils\Ninja;
use App\Events\Credit\CreditWasUpdated; use App\Models\Client;
use App\Factory\CloneCreditFactory; use App\Models\Credit;
use App\Models\Account;
use App\Models\Invoice;
use Illuminate\Http\Response;
use App\Factory\CreditFactory; use App\Factory\CreditFactory;
use App\Filters\CreditFilters; use App\Filters\CreditFilters;
use App\Http\Requests\Credit\ActionCreditRequest; use App\Jobs\Credit\ZipCredits;
use App\Utils\Traits\MakesHash;
use App\Jobs\Entity\EmailEntity;
use App\Factory\CloneCreditFactory;
use App\Services\PdfMaker\PdfMerge;
use Illuminate\Support\Facades\App;
use App\Utils\Traits\SavesDocuments;
use App\Repositories\CreditRepository;
use App\Events\Credit\CreditWasCreated;
use App\Events\Credit\CreditWasUpdated;
use App\Transformers\CreditTransformer;
use Illuminate\Support\Facades\Storage;
use App\Http\Requests\Credit\BulkCreditRequest; use App\Http\Requests\Credit\BulkCreditRequest;
use App\Http\Requests\Credit\CreateCreditRequest;
use App\Http\Requests\Credit\DestroyCreditRequest;
use App\Http\Requests\Credit\EditCreditRequest; use App\Http\Requests\Credit\EditCreditRequest;
use App\Http\Requests\Credit\ShowCreditRequest; use App\Http\Requests\Credit\ShowCreditRequest;
use App\Http\Requests\Credit\StoreCreditRequest; use App\Http\Requests\Credit\StoreCreditRequest;
use App\Http\Requests\Credit\ActionCreditRequest;
use App\Http\Requests\Credit\CreateCreditRequest;
use App\Http\Requests\Credit\UpdateCreditRequest; use App\Http\Requests\Credit\UpdateCreditRequest;
use App\Http\Requests\Credit\UploadCreditRequest; use App\Http\Requests\Credit\UploadCreditRequest;
use App\Jobs\Credit\ZipCredits; use App\Http\Requests\Credit\DestroyCreditRequest;
use App\Jobs\Entity\EmailEntity;
use App\Models\Account;
use App\Models\Client;
use App\Models\Credit;
use App\Models\Invoice;
use App\Repositories\CreditRepository;
use App\Services\PdfMaker\PdfMerge;
use App\Transformers\CreditTransformer;
use App\Utils\Ninja;
use App\Utils\Traits\MakesHash;
use App\Utils\Traits\SavesDocuments;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Storage;
/** /**
* Class CreditController. * Class CreditController.
@ -691,6 +692,8 @@ class CreditController extends BaseController
$credit = $invitation->credit; $credit = $invitation->credit;
App::setLocale($invitation->contact->preferredLocale());
$file = $credit->service()->getCreditPdf($invitation); $file = $credit->service()->getCreditPdf($invitation);
$headers = ['Content-Type' => 'application/pdf']; $headers = ['Content-Type' => 'application/pdf'];

View File

@ -12,38 +12,39 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Events\Invoice\InvoiceWasCreated; use App\Utils\Ninja;
use App\Events\Invoice\InvoiceWasUpdated; use App\Models\Quote;
use App\Factory\CloneInvoiceFactory; use App\Models\Account;
use App\Factory\CloneInvoiceToQuoteFactory; use App\Models\Invoice;
use App\Jobs\Cron\AutoBill;
use Illuminate\Http\Response;
use App\Factory\InvoiceFactory; use App\Factory\InvoiceFactory;
use App\Filters\InvoiceFilters; use App\Filters\InvoiceFilters;
use App\Http\Requests\Invoice\ActionInvoiceRequest; use App\Utils\Traits\MakesHash;
use App\Jobs\Invoice\ZipInvoices;
use App\Services\PdfMaker\PdfMerge;
use Illuminate\Support\Facades\App;
use App\Factory\CloneInvoiceFactory;
use App\Jobs\Invoice\BulkInvoiceJob;
use App\Utils\Traits\SavesDocuments;
use App\Jobs\Invoice\UpdateReminders;
use App\Transformers\QuoteTransformer;
use App\Repositories\InvoiceRepository;
use Illuminate\Support\Facades\Storage;
use App\Transformers\InvoiceTransformer;
use App\Events\Invoice\InvoiceWasCreated;
use App\Events\Invoice\InvoiceWasUpdated;
use App\Factory\CloneInvoiceToQuoteFactory;
use App\Http\Requests\Invoice\BulkInvoiceRequest; use App\Http\Requests\Invoice\BulkInvoiceRequest;
use App\Http\Requests\Invoice\CreateInvoiceRequest;
use App\Http\Requests\Invoice\DestroyInvoiceRequest;
use App\Http\Requests\Invoice\EditInvoiceRequest; use App\Http\Requests\Invoice\EditInvoiceRequest;
use App\Http\Requests\Invoice\ShowInvoiceRequest; use App\Http\Requests\Invoice\ShowInvoiceRequest;
use App\Http\Requests\Invoice\StoreInvoiceRequest; use App\Http\Requests\Invoice\StoreInvoiceRequest;
use App\Http\Requests\Invoice\ActionInvoiceRequest;
use App\Http\Requests\Invoice\CreateInvoiceRequest;
use App\Http\Requests\Invoice\UpdateInvoiceRequest; use App\Http\Requests\Invoice\UpdateInvoiceRequest;
use App\Http\Requests\Invoice\UpdateReminderRequest;
use App\Http\Requests\Invoice\UploadInvoiceRequest; use App\Http\Requests\Invoice\UploadInvoiceRequest;
use App\Jobs\Cron\AutoBill; use App\Http\Requests\Invoice\DestroyInvoiceRequest;
use App\Jobs\Invoice\BulkInvoiceJob; use App\Http\Requests\Invoice\UpdateReminderRequest;
use App\Jobs\Invoice\UpdateReminders;
use App\Jobs\Invoice\ZipInvoices;
use App\Models\Account;
use App\Models\Invoice;
use App\Models\Quote;
use App\Repositories\InvoiceRepository;
use App\Services\PdfMaker\PdfMerge;
use App\Transformers\InvoiceTransformer;
use App\Transformers\QuoteTransformer;
use App\Utils\Ninja;
use App\Utils\Traits\MakesHash;
use App\Utils\Traits\SavesDocuments;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Storage;
/** /**
* Class InvoiceController. * Class InvoiceController.
@ -821,6 +822,8 @@ class InvoiceController extends BaseController
$invoice = $invitation->invoice; $invoice = $invitation->invoice;
App::setLocale($invitation->contact->preferredLocale());
$file_name = $invoice->numberFormatter().'.pdf'; $file_name = $invoice->numberFormatter().'.pdf';
$file = (new \App\Jobs\Entity\CreateRawPdf($invitation, $invitation->company->db))->handle(); $file = (new \App\Jobs\Entity\CreateRawPdf($invitation, $invitation->company->db))->handle();

View File

@ -285,7 +285,7 @@ class PreviewController extends BaseController
return $maker->getCompiledHTML(); return $maker->getCompiledHTML();
} }
} catch(\Exception $e) { } catch(\Exception $e) {
nlog($e->getMessage()); // nlog($e->getMessage());
DB::connection(config('database.default'))->rollBack(); DB::connection(config('database.default'))->rollBack();
return; return;

View File

@ -11,6 +11,7 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Utils\Ninja;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Jobs\Util\UnlinkFile; use App\Jobs\Util\UnlinkFile;
use App\Exceptions\SystemError; use App\Exceptions\SystemError;

View File

@ -11,32 +11,33 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Events\PurchaseOrder\PurchaseOrderWasCreated; use App\Utils\Ninja;
use App\Events\PurchaseOrder\PurchaseOrderWasUpdated; use App\Models\Client;
use App\Models\Account;
use App\Models\PurchaseOrder;
use Illuminate\Http\Response;
use App\Utils\Traits\MakesHash;
use App\Services\PdfMaker\PdfMerge;
use Illuminate\Support\Facades\App;
use App\Utils\Traits\SavesDocuments;
use App\Factory\PurchaseOrderFactory; use App\Factory\PurchaseOrderFactory;
use App\Filters\PurchaseOrderFilters; use App\Filters\PurchaseOrderFilters;
use App\Http\Requests\PurchaseOrder\ActionPurchaseOrderRequest; use Illuminate\Support\Facades\Storage;
use App\Jobs\PurchaseOrder\ZipPurchaseOrders;
use App\Repositories\PurchaseOrderRepository;
use App\Jobs\PurchaseOrder\PurchaseOrderEmail;
use App\Transformers\PurchaseOrderTransformer;
use App\Events\PurchaseOrder\PurchaseOrderWasCreated;
use App\Events\PurchaseOrder\PurchaseOrderWasUpdated;
use App\Http\Requests\PurchaseOrder\BulkPurchaseOrderRequest; use App\Http\Requests\PurchaseOrder\BulkPurchaseOrderRequest;
use App\Http\Requests\PurchaseOrder\CreatePurchaseOrderRequest;
use App\Http\Requests\PurchaseOrder\DestroyPurchaseOrderRequest;
use App\Http\Requests\PurchaseOrder\EditPurchaseOrderRequest; use App\Http\Requests\PurchaseOrder\EditPurchaseOrderRequest;
use App\Http\Requests\PurchaseOrder\ShowPurchaseOrderRequest; use App\Http\Requests\PurchaseOrder\ShowPurchaseOrderRequest;
use App\Http\Requests\PurchaseOrder\StorePurchaseOrderRequest; use App\Http\Requests\PurchaseOrder\StorePurchaseOrderRequest;
use App\Http\Requests\PurchaseOrder\ActionPurchaseOrderRequest;
use App\Http\Requests\PurchaseOrder\CreatePurchaseOrderRequest;
use App\Http\Requests\PurchaseOrder\UpdatePurchaseOrderRequest; use App\Http\Requests\PurchaseOrder\UpdatePurchaseOrderRequest;
use App\Http\Requests\PurchaseOrder\UploadPurchaseOrderRequest; use App\Http\Requests\PurchaseOrder\UploadPurchaseOrderRequest;
use App\Jobs\PurchaseOrder\PurchaseOrderEmail; use App\Http\Requests\PurchaseOrder\DestroyPurchaseOrderRequest;
use App\Jobs\PurchaseOrder\ZipPurchaseOrders;
use App\Models\Account;
use App\Models\Client;
use App\Models\PurchaseOrder;
use App\Repositories\PurchaseOrderRepository;
use App\Services\PdfMaker\PdfMerge;
use App\Transformers\PurchaseOrderTransformer;
use App\Utils\Ninja;
use App\Utils\Traits\MakesHash;
use App\Utils\Traits\SavesDocuments;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Storage;
class PurchaseOrderController extends BaseController class PurchaseOrderController extends BaseController
{ {

View File

@ -11,38 +11,39 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Events\Quote\QuoteWasCreated; use App\Utils\Ninja;
use App\Events\Quote\QuoteWasUpdated; use App\Models\Quote;
use App\Factory\CloneQuoteFactory; use App\Models\Client;
use App\Factory\CloneQuoteToInvoiceFactory; use App\Models\Account;
use App\Factory\CloneQuoteToProjectFactory; use App\Models\Invoice;
use Illuminate\Http\Request;
use App\Factory\QuoteFactory; use App\Factory\QuoteFactory;
use App\Filters\QuoteFilters; use App\Filters\QuoteFilters;
use App\Http\Requests\Quote\ActionQuoteRequest; use App\Jobs\Quote\ZipQuotes;
use App\Http\Requests\Quote\BulkActionQuoteRequest; use Illuminate\Http\Response;
use App\Http\Requests\Quote\CreateQuoteRequest; use App\Utils\Traits\MakesHash;
use App\Http\Requests\Quote\DestroyQuoteRequest; use App\Factory\CloneQuoteFactory;
use App\Services\PdfMaker\PdfMerge;
use Illuminate\Support\Facades\App;
use App\Utils\Traits\SavesDocuments;
use App\Events\Quote\QuoteWasCreated;
use App\Events\Quote\QuoteWasUpdated;
use App\Repositories\QuoteRepository;
use App\Transformers\QuoteTransformer;
use App\Utils\Traits\GeneratesCounter;
use Illuminate\Support\Facades\Storage;
use App\Transformers\InvoiceTransformer;
use App\Factory\CloneQuoteToInvoiceFactory;
use App\Factory\CloneQuoteToProjectFactory;
use App\Http\Requests\Quote\EditQuoteRequest; use App\Http\Requests\Quote\EditQuoteRequest;
use App\Http\Requests\Quote\ShowQuoteRequest; use App\Http\Requests\Quote\ShowQuoteRequest;
use App\Http\Requests\Quote\StoreQuoteRequest; use App\Http\Requests\Quote\StoreQuoteRequest;
use App\Http\Requests\Quote\ActionQuoteRequest;
use App\Http\Requests\Quote\CreateQuoteRequest;
use App\Http\Requests\Quote\UpdateQuoteRequest; use App\Http\Requests\Quote\UpdateQuoteRequest;
use App\Http\Requests\Quote\UploadQuoteRequest; use App\Http\Requests\Quote\UploadQuoteRequest;
use App\Jobs\Quote\ZipQuotes; use App\Http\Requests\Quote\DestroyQuoteRequest;
use App\Models\Account; use App\Http\Requests\Quote\BulkActionQuoteRequest;
use App\Models\Client;
use App\Models\Invoice;
use App\Models\Quote;
use App\Repositories\QuoteRepository;
use App\Services\PdfMaker\PdfMerge;
use App\Transformers\InvoiceTransformer;
use App\Transformers\QuoteTransformer;
use App\Utils\Ninja;
use App\Utils\Traits\GeneratesCounter;
use App\Utils\Traits\MakesHash;
use App\Utils\Traits\SavesDocuments;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Storage;
/** /**
* Class QuoteController. * Class QuoteController.
@ -824,6 +825,8 @@ class QuoteController extends BaseController
$contact = $invitation->contact; $contact = $invitation->contact;
$quote = $invitation->quote; $quote = $invitation->quote;
App::setLocale($invitation->contact->preferredLocale());
$file = $quote->service()->getQuotePdf($contact); $file = $quote->service()->getQuotePdf($contact);

View File

@ -11,29 +11,28 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Events\RecurringInvoice\RecurringInvoiceWasCreated; use App\Utils\Ninja;
use App\Events\RecurringInvoice\RecurringInvoiceWasUpdated; use App\Models\Account;
use Illuminate\Http\Response;
use App\Utils\Traits\MakesHash;
use App\Models\RecurringInvoice;
use App\Utils\Traits\SavesDocuments;
use App\Factory\RecurringInvoiceFactory; use App\Factory\RecurringInvoiceFactory;
use App\Filters\RecurringInvoiceFilters; use App\Filters\RecurringInvoiceFilters;
use App\Http\Requests\RecurringInvoice\ActionRecurringInvoiceRequest; use App\Jobs\RecurringInvoice\UpdateRecurring;
use App\Repositories\RecurringInvoiceRepository;
use App\Transformers\RecurringInvoiceTransformer;
use App\Events\RecurringInvoice\RecurringInvoiceWasCreated;
use App\Events\RecurringInvoice\RecurringInvoiceWasUpdated;
use App\Http\Requests\RecurringInvoice\BulkRecurringInvoiceRequest; use App\Http\Requests\RecurringInvoice\BulkRecurringInvoiceRequest;
use App\Http\Requests\RecurringInvoice\CreateRecurringInvoiceRequest;
use App\Http\Requests\RecurringInvoice\DestroyRecurringInvoiceRequest;
use App\Http\Requests\RecurringInvoice\EditRecurringInvoiceRequest; use App\Http\Requests\RecurringInvoice\EditRecurringInvoiceRequest;
use App\Http\Requests\RecurringInvoice\ShowRecurringInvoiceRequest; use App\Http\Requests\RecurringInvoice\ShowRecurringInvoiceRequest;
use App\Http\Requests\RecurringInvoice\StoreRecurringInvoiceRequest; use App\Http\Requests\RecurringInvoice\StoreRecurringInvoiceRequest;
use App\Http\Requests\RecurringInvoice\ActionRecurringInvoiceRequest;
use App\Http\Requests\RecurringInvoice\CreateRecurringInvoiceRequest;
use App\Http\Requests\RecurringInvoice\UpdateRecurringInvoiceRequest; use App\Http\Requests\RecurringInvoice\UpdateRecurringInvoiceRequest;
use App\Http\Requests\RecurringInvoice\UploadRecurringInvoiceRequest; use App\Http\Requests\RecurringInvoice\UploadRecurringInvoiceRequest;
use App\Jobs\RecurringInvoice\UpdateRecurring; use App\Http\Requests\RecurringInvoice\DestroyRecurringInvoiceRequest;
use App\Models\Account;
use App\Models\RecurringInvoice;
use App\Repositories\RecurringInvoiceRepository;
use App\Transformers\RecurringInvoiceTransformer;
use App\Utils\Ninja;
use App\Utils\Traits\MakesHash;
use App\Utils\Traits\SavesDocuments;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Storage;
/** /**
* Class RecurringInvoiceController. * Class RecurringInvoiceController.
@ -566,6 +565,8 @@ class RecurringInvoiceController extends BaseController
} }
$invoice = $invitation->recurring_invoice; $invoice = $invitation->recurring_invoice;
\Illuminate\Support\Facades\App::setLocale($invitation->contact->preferredLocale());
$file_name = $invoice->numberFormatter().'.pdf'; $file_name = $invoice->numberFormatter().'.pdf';

View File

@ -53,7 +53,7 @@ class SelfUpdateController extends BaseController
nlog('Test filesystem is writable'); nlog('Test filesystem is writable');
$this->testWritable(); // $this->testWritable();
nlog('Clear cache directory'); nlog('Clear cache directory');

View File

@ -11,16 +11,17 @@
namespace App\Http\Controllers\VendorPortal; namespace App\Http\Controllers\VendorPortal;
use App\Events\Misc\InvitationWasViewed;
use App\Events\PurchaseOrder\PurchaseOrderWasViewed;
use App\Http\Controllers\Controller;
use App\Jobs\Vendor\CreatePurchaseOrderPdf;
use App\Models\PurchaseOrderInvitation;
use App\Utils\Ninja; use App\Utils\Ninja;
use App\Utils\Traits\MakesDates;
use App\Utils\Traits\MakesHash;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use App\Utils\Traits\MakesHash;
use App\Utils\Traits\MakesDates;
use Illuminate\Support\Facades\App;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use App\Models\PurchaseOrderInvitation;
use App\Events\Misc\InvitationWasViewed;
use App\Jobs\Vendor\CreatePurchaseOrderPdf;
use App\Events\PurchaseOrder\PurchaseOrderWasViewed;
/** /**
* Class InvitationController. * Class InvitationController.
@ -89,6 +90,8 @@ class InvitationController extends Controller
return response()->json(["message" => "no record found"], 400); return response()->json(["message" => "no record found"], 400);
} }
App::setLocale($invitation->contact->preferredLocale());
$file_name = $invitation->purchase_order->numberFormatter().'.pdf'; $file_name = $invitation->purchase_order->numberFormatter().'.pdf';
$file = (new CreatePurchaseOrderPdf($invitation))->rawPdf(); $file = (new CreatePurchaseOrderPdf($invitation))->rawPdf();

View File

@ -20,15 +20,12 @@ use Illuminate\Support\Str;
use App\Models\QuoteInvitation; use App\Models\QuoteInvitation;
use App\Utils\VendorHtmlEngine; use App\Utils\VendorHtmlEngine;
use App\Models\CreditInvitation; use App\Models\CreditInvitation;
use App\Services\Pdf\PdfBuilder;
use App\Services\Pdf\PdfService;
use App\Models\InvoiceInvitation; use App\Models\InvoiceInvitation;
use App\Services\Pdf\PdfDesigner;
use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Cache;
use App\Services\Pdf\PdfConfiguration;
use App\Models\PurchaseOrderInvitation; use App\Models\PurchaseOrderInvitation;
use App\Models\RecurringInvoiceInvitation; use App\Models\RecurringInvoiceInvitation;
use App\Jobs\Vendor\CreatePurchaseOrderPdf; use App\Jobs\Vendor\CreatePurchaseOrderPdf;
use App\Services\PdfMaker\Designs\Utilities\DesignHelpers;
class PdfSlot extends Component class PdfSlot extends Component
{ {
@ -52,6 +49,8 @@ class PdfSlot extends Component
public $show_quantity = true; public $show_quantity = true;
public $show_line_total = true;
public $route_entity = 'client'; public $route_entity = 'client';
public function mount() public function mount()
@ -104,11 +103,12 @@ class PdfSlot extends Component
$this->settings = $this->entity->client ? $this->entity->client->getMergedSettings() : $this->entity->company->settings; $this->settings = $this->entity->client ? $this->entity->client->getMergedSettings() : $this->entity->company->settings;
$this->show_cost = in_array('$product.unit_cost', $this->settings->pdf_variables->product_columns); $this->show_cost = in_array('$product.unit_cost', $this->settings->pdf_variables->product_columns);
$this->show_quantity = in_array('$product.quantity', $this->settings->pdf_variables->product_columns); $this->show_line_total = in_array('$product.line_total', $this->settings->pdf_variables->product_columns);
if($this->entity_type == 'quote' && !$this->settings->sync_invoice_quote_columns ){ if($this->entity_type == 'quote' && !$this->settings->sync_invoice_quote_columns ){
$this->show_cost = in_array('$product.unit_cost', $this->settings->pdf_variables->product_quote_columns); $this->show_cost = in_array('$product.unit_cost', $this->settings->pdf_variables->product_quote_columns);
$this->show_quantity = in_array('$product.quantity', $this->settings->pdf_variables->product_quote_columns); $this->show_quantity = in_array('$product.quantity', $this->settings->pdf_variables->product_quote_columns);
$this->show_line_total = in_array('$product.line_total', $this->settings->pdf_variables->product_quote_columns);
} }
$this->html_variables = $this->entity->client ? $this->html_variables = $this->entity->client ?
@ -173,20 +173,20 @@ class PdfSlot extends Component
if($this->entity_type == 'invoice' || $this->entity_type == 'recurring_invoice') { if($this->entity_type == 'invoice' || $this->entity_type == 'recurring_invoice') {
foreach($this->settings->pdf_variables->invoice_details as $variable) foreach($this->settings->pdf_variables->invoice_details as $variable)
$entity_details .= "<div class='flex px-3 block'><p class= w-36 block'>{$variable}_label</p><p class='pl-1 w-36 block entity-field'>{$variable}</p></div>"; $entity_details .= "<div class='flex px-5 block'><p class= w-36 block'>{$variable}_label</p><p class='pl-5 w-36 block entity-field'>{$variable}</p></div>";
} }
elseif($this->entity_type == 'quote'){ elseif($this->entity_type == 'quote'){
foreach($this->settings->pdf_variables->quote_details as $variable) foreach($this->settings->pdf_variables->quote_details as $variable)
$entity_details .= "<div class='flex px-3 block'><p class= w-36 block'>{$variable}_label</p><p class='pl-1 w-36 block entity-field'>{$variable}</p></div>"; $entity_details .= "<div class='flex px-5 block'><p class= w-36 block'>{$variable}_label</p><p class='pl-5 w-36 block entity-field'>{$variable}</p></div>";
} }
elseif($this->entity_type == 'credit') { elseif($this->entity_type == 'credit') {
foreach($this->settings->pdf_variables->credit_details as $variable) foreach($this->settings->pdf_variables->credit_details as $variable)
$entity_details .= "<div class='flex px-3 block'><p class= w-36 block'>{$variable}_label</p><p class='pl-1 w-36 block entity-field'>{$variable}</p></div>"; $entity_details .= "<div class='flex px-5 block'><p class= w-36 block'>{$variable}_label</p><p class='pl-5 w-36 block entity-field'>{$variable}</p></div>";
} }
elseif($this->entity_type == 'purchase_order'){ elseif($this->entity_type == 'purchase_order'){
foreach($this->settings->pdf_variables->purchase_order_details as $variable) foreach($this->settings->pdf_variables->purchase_order_details as $variable)
$entity_details .= "<div class='flex px-3 block'><p class= w-36 block'>{$variable}_label</p><p class='pl-1 w-36 block entity-field'>{$variable}</p></div>"; $entity_details .= "<div class='flex px-5 block'><p class= w-36 block'>{$variable}_label</p><p class='pl-5 w-36 block entity-field'>{$variable}</p></div>";
} }
return $this->convertVariables($entity_details); return $this->convertVariables($entity_details);
@ -229,13 +229,16 @@ class PdfSlot extends Component
private function getProducts() private function getProducts()
{ {
$product_items = collect($this->entity->line_items)->filter(function ($item) { $product_items = collect($this->entity->line_items)->filter(function ($item) {
return $item->type_id == 1 || $item->type_id == 6 || $item->type_id == 5; return $item->type_id == 1 || $item->type_id == 6 || $item->type_id == 5;
})->map(function ($item){ })->map(function ($item){
return [ return [
'quantity' => $item->quantity, 'quantity' => $item->quantity,
'cost' => Number::formatMoney($item->cost, $this->entity->client ?: $this->entity->vendor), 'cost' => Number::formatMoney($item->cost, $this->entity->client ?: $this->entity->vendor),
'notes' => $item->notes, 'notes' => $this->invitation->company->markdown_enabled ? DesignHelpers::parseMarkdownToHtml($item->notes) : $item->notes,
'line_total' => Number::formatMoney($item->line_total, $this->entity->client ?: $this->entity->vendor), 'line_total' => Number::formatMoney($item->line_total, $this->entity->client ?: $this->entity->vendor),
]; ];
}); });
@ -251,7 +254,7 @@ class PdfSlot extends Component
return [ return [
'quantity' => $item->quantity, 'quantity' => $item->quantity,
'cost' => Number::formatMoney($item->cost, $this->entity->client ?: $this->entity->vendor), 'cost' => Number::formatMoney($item->cost, $this->entity->client ?: $this->entity->vendor),
'notes' => $item->notes, 'notes' => $this->invitation->company->markdown_enabled ? DesignHelpers::parseMarkdownToHtml($item->notes) : $item->notes,
'line_total' => Number::formatMoney($item->line_total, $this->entity->client ?: $this->entity->vendor), 'line_total' => Number::formatMoney($item->line_total, $this->entity->client ?: $this->entity->vendor),
]; ];
}); });

View File

@ -53,7 +53,6 @@ class SetInviteDb
/* Try and determine the DB from the invitation key STRING*/ /* Try and determine the DB from the invitation key STRING*/
if (config('ninja.db.multi_db_enabled')) { if (config('ninja.db.multi_db_enabled')) {
// nlog("/ Try and determine the DB from the invitation key /");
$hashids = new Hashids(config('ninja.hash_salt'), 10); $hashids = new Hashids(config('ninja.hash_salt'), 10);
$segments = explode('-', $request->route('invitation_key')); $segments = explode('-', $request->route('invitation_key'));

View File

@ -477,8 +477,12 @@ class BaseImport
} }
nlog($invoice_data); nlog($invoice_data);
$saveable_invoice_data = $invoice_data;
if(array_key_exists('payments', $saveable_invoice_data))
unset($saveable_invoice_data['payments']);
$invoice_repository->save($invoice_data, $invoice); $invoice_repository->save($saveable_invoice_data, $invoice);
$count++; $count++;
// If we're doing a generic CSV import, only import payment data if we're not importing a payment CSV. // If we're doing a generic CSV import, only import payment data if we're not importing a payment CSV.
@ -504,7 +508,7 @@ class BaseImport
]; ];
/* Make sure we don't apply any payments to invoices with a Zero Amount*/ /* Make sure we don't apply any payments to invoices with a Zero Amount*/
if ($invoice->amount > 0) { if ($invoice->amount > 0 && $payment_data['amount'] > 0) {
$payment = $payment_repository->save( $payment = $payment_repository->save(
$payment_data, $payment_data,

View File

@ -441,15 +441,15 @@ class CompanyExport implements ShouldQueue
$path = 'backups'; $path = 'backups';
Storage::makeDirectory(public_path('storage/backups/')); Storage::makeDirectory(storage_path('backups/'));
try { try {
mkdir(public_path('storage/backups/')); mkdir(storage_path('backups/'));
} catch(\Exception $e) { } catch(\Exception $e) {
nlog("could not create directory"); nlog("could not create directory");
} }
$zip_path = public_path('storage/backups/'.$file_name); $zip_path = storage_path('backups/'.$file_name);
$zip = new \ZipArchive(); $zip = new \ZipArchive();
if ($zip->open($zip_path, \ZipArchive::CREATE)!==true) { if ($zip->open($zip_path, \ZipArchive::CREATE)!==true) {
@ -459,14 +459,16 @@ class CompanyExport implements ShouldQueue
$zip->addFromString("backup.json", json_encode($this->export_data)); $zip->addFromString("backup.json", json_encode($this->export_data));
$zip->close(); $zip->close();
if (Ninja::isHosted()) { Storage::disk(config('filesystems.default'))->put('backups/'.$file_name, file_get_contents($zip_path));
Storage::disk(config('filesystems.default'))->put('backups/'.$file_name, file_get_contents($zip_path)); unlink($zip_path);
}
$storage_file_path = Storage::disk(config('filesystems.default'))->url('backups/'.$file_name); if(Ninja::isSelfHost())
$storage_path = Storage::disk(config('filesystems.default'))->path('backups/'.$file_name); $storage_path = 'backups/'.$file_name;
else
$storage_path = Storage::disk(config('filesystems.default'))->path('backups/'.$file_name);
$url = Cache::get($this->hash); $url = Cache::get($this->hash);
Cache::put($this->hash, $storage_path, now()->addHour()); Cache::put($this->hash, $storage_path, now()->addHour());
App::forgetInstance('translator'); App::forgetInstance('translator');

View File

@ -16,6 +16,7 @@ use App\Casts\EncryptedCast;
use App\Utils\Traits\AppSetup; use App\Utils\Traits\AppSetup;
use App\Utils\Traits\MakesHash; use App\Utils\Traits\MakesHash;
use App\DataMapper\CompanySettings; use App\DataMapper\CompanySettings;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Cache;
use Laracasts\Presenter\PresentableTrait; use Laracasts\Presenter\PresentableTrait;
use App\Utils\Traits\CompanySettingsSaver; use App\Utils\Traits\CompanySettingsSaver;
@ -686,6 +687,11 @@ class Company extends BaseModel
return $this->getLocale(); return $this->getLocale();
} }
public function setLocale()
{
App::setLocale($this->getLocale());
}
public function getSetting($setting) public function getSetting($setting)
{ {
if (property_exists($this->settings, $setting) != false) { if (property_exists($this->settings, $setting) != false) {

View File

@ -43,10 +43,14 @@ class VendorRepository extends BaseRepository
*/ */
public function save(array $data, Vendor $vendor) : ?Vendor public function save(array $data, Vendor $vendor) : ?Vendor
{ {
$vendor->fill($data); $saveable_vendor = $data;
nlog($data); if(array_key_exists('contacts', $data)) {
unset($saveable_vendor['contacts']);
}
$vendor->fill($saveable_vendor);
$vendor->saveQuietly(); $vendor->saveQuietly();
if ($vendor->number == '' || ! $vendor->number) { if ($vendor->number == '' || ! $vendor->number) {

View File

@ -11,11 +11,11 @@
namespace App\Services\PurchaseOrder; namespace App\Services\PurchaseOrder;
use App\Jobs\Vendor\CreatePurchaseOrderPdf;
use App\Models\PurchaseOrder; use App\Models\PurchaseOrder;
use App\Models\VendorContact; use App\Models\VendorContact;
use App\Services\AbstractService; use App\Services\AbstractService;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
use App\Jobs\Vendor\CreatePurchaseOrderPdf;
class GetPurchaseOrderPdf extends AbstractService class GetPurchaseOrderPdf extends AbstractService
{ {
@ -31,6 +31,7 @@ class GetPurchaseOrderPdf extends AbstractService
$invitation = $this->purchase_order->invitations()->where('vendor_contact_id', $this->contact->id)->first(); $invitation = $this->purchase_order->invitations()->where('vendor_contact_id', $this->contact->id)->first();
if (! $invitation) { if (! $invitation) {
$invitation = $this->purchase_order->invitations()->first(); $invitation = $this->purchase_order->invitations()->first();
} }

View File

@ -130,6 +130,7 @@ class TaskTransformer extends EntityTransformer
'status_sort_order' => (int) $task->status_sort_order, //deprecated 5.0.34 'status_sort_order' => (int) $task->status_sort_order, //deprecated 5.0.34
'is_date_based' => (bool) $task->is_date_based, 'is_date_based' => (bool) $task->is_date_based,
'status_order' => is_null($task->status_order) ? null : (int) $task->status_order, 'status_order' => is_null($task->status_order) ? null : (int) $task->status_order,
'date' => $task->calculated_start_date ?: '',
]; ];
} }
} }

146
composer.lock generated
View File

@ -424,16 +424,16 @@
}, },
{ {
"name": "aws/aws-sdk-php", "name": "aws/aws-sdk-php",
"version": "3.275.7", "version": "3.276.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/aws/aws-sdk-php.git", "url": "https://github.com/aws/aws-sdk-php.git",
"reference": "54dcef3349c81b46c0f5f6e54b5f9bfb5db19903" "reference": "78c9510280512121e8fdaa9538b744778ab48bf9"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/54dcef3349c81b46c0f5f6e54b5f9bfb5db19903", "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/78c9510280512121e8fdaa9538b744778ab48bf9",
"reference": "54dcef3349c81b46c0f5f6e54b5f9bfb5db19903", "reference": "78c9510280512121e8fdaa9538b744778ab48bf9",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -513,9 +513,9 @@
"support": { "support": {
"forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
"issues": "https://github.com/aws/aws-sdk-php/issues", "issues": "https://github.com/aws/aws-sdk-php/issues",
"source": "https://github.com/aws/aws-sdk-php/tree/3.275.7" "source": "https://github.com/aws/aws-sdk-php/tree/3.276.2"
}, },
"time": "2023-07-13T18:21:04+00:00" "time": "2023-07-20T18:16:37+00:00"
}, },
{ {
"name": "bacon/bacon-qr-code", "name": "bacon/bacon-qr-code",
@ -2167,16 +2167,16 @@
}, },
{ {
"name": "firebase/php-jwt", "name": "firebase/php-jwt",
"version": "v6.8.0", "version": "v6.8.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/firebase/php-jwt.git", "url": "https://github.com/firebase/php-jwt.git",
"reference": "48b0210c51718d682e53210c24d25c5a10a2299b" "reference": "5dbc8959427416b8ee09a100d7a8588c00fb2e26"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/firebase/php-jwt/zipball/48b0210c51718d682e53210c24d25c5a10a2299b", "url": "https://api.github.com/repos/firebase/php-jwt/zipball/5dbc8959427416b8ee09a100d7a8588c00fb2e26",
"reference": "48b0210c51718d682e53210c24d25c5a10a2299b", "reference": "5dbc8959427416b8ee09a100d7a8588c00fb2e26",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2224,9 +2224,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/firebase/php-jwt/issues", "issues": "https://github.com/firebase/php-jwt/issues",
"source": "https://github.com/firebase/php-jwt/tree/v6.8.0" "source": "https://github.com/firebase/php-jwt/tree/v6.8.1"
}, },
"time": "2023-06-20T16:45:35+00:00" "time": "2023-07-14T18:33:00+00:00"
}, },
{ {
"name": "fruitcake/php-cors", "name": "fruitcake/php-cors",
@ -2485,16 +2485,16 @@
}, },
{ {
"name": "google/apiclient-services", "name": "google/apiclient-services",
"version": "v0.308.0", "version": "v0.309.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/googleapis/google-api-php-client-services.git", "url": "https://github.com/googleapis/google-api-php-client-services.git",
"reference": "85cf00383e6bf6eca131bd3261b7859ea418a578" "reference": "562f8e5ddbca68d52afc3bf47d03839e78722026"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/85cf00383e6bf6eca131bd3261b7859ea418a578", "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/562f8e5ddbca68d52afc3bf47d03839e78722026",
"reference": "85cf00383e6bf6eca131bd3261b7859ea418a578", "reference": "562f8e5ddbca68d52afc3bf47d03839e78722026",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2523,9 +2523,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/googleapis/google-api-php-client-services/issues", "issues": "https://github.com/googleapis/google-api-php-client-services/issues",
"source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.308.0" "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.309.0"
}, },
"time": "2023-07-09T01:06:13+00:00" "time": "2023-07-16T01:08:14+00:00"
}, },
{ {
"name": "google/auth", "name": "google/auth",
@ -4554,16 +4554,16 @@
}, },
{ {
"name": "laravel/socialite", "name": "laravel/socialite",
"version": "v5.7.0", "version": "v5.8.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laravel/socialite.git", "url": "https://github.com/laravel/socialite.git",
"reference": "f5996f499e14db15407201a6bfbaba3ce6ce736c" "reference": "50148edf24b6cd3e428aa9bc06a5d915b24376bb"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laravel/socialite/zipball/f5996f499e14db15407201a6bfbaba3ce6ce736c", "url": "https://api.github.com/repos/laravel/socialite/zipball/50148edf24b6cd3e428aa9bc06a5d915b24376bb",
"reference": "f5996f499e14db15407201a6bfbaba3ce6ce736c", "reference": "50148edf24b6cd3e428aa9bc06a5d915b24376bb",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -4620,7 +4620,7 @@
"issues": "https://github.com/laravel/socialite/issues", "issues": "https://github.com/laravel/socialite/issues",
"source": "https://github.com/laravel/socialite" "source": "https://github.com/laravel/socialite"
}, },
"time": "2023-07-08T20:51:43+00:00" "time": "2023-07-14T14:22:58+00:00"
}, },
{ {
"name": "laravel/tinker", "name": "laravel/tinker",
@ -5716,16 +5716,16 @@
}, },
{ {
"name": "microsoft/microsoft-graph", "name": "microsoft/microsoft-graph",
"version": "1.102.0", "version": "1.103.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/microsoftgraph/msgraph-sdk-php.git", "url": "https://github.com/microsoftgraph/msgraph-sdk-php.git",
"reference": "4b450b06ac9df3868bbdbddb31bfcc4595f643bc" "reference": "6e325c22145dbed4e51970ffecca4d7648c3c27e"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/microsoftgraph/msgraph-sdk-php/zipball/4b450b06ac9df3868bbdbddb31bfcc4595f643bc", "url": "https://api.github.com/repos/microsoftgraph/msgraph-sdk-php/zipball/6e325c22145dbed4e51970ffecca4d7648c3c27e",
"reference": "4b450b06ac9df3868bbdbddb31bfcc4595f643bc", "reference": "6e325c22145dbed4e51970ffecca4d7648c3c27e",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -5762,22 +5762,22 @@
"homepage": "https://developer.microsoft.com/en-us/graph", "homepage": "https://developer.microsoft.com/en-us/graph",
"support": { "support": {
"issues": "https://github.com/microsoftgraph/msgraph-sdk-php/issues", "issues": "https://github.com/microsoftgraph/msgraph-sdk-php/issues",
"source": "https://github.com/microsoftgraph/msgraph-sdk-php/tree/1.102.0" "source": "https://github.com/microsoftgraph/msgraph-sdk-php/tree/1.103.0"
}, },
"time": "2023-07-05T13:07:19+00:00" "time": "2023-07-19T03:27:15+00:00"
}, },
{ {
"name": "mollie/mollie-api-php", "name": "mollie/mollie-api-php",
"version": "v2.58.0", "version": "v2.59.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/mollie/mollie-api-php.git", "url": "https://github.com/mollie/mollie-api-php.git",
"reference": "5120e5b3e4622a290b64acf87266ea47d10d7301" "reference": "9834e5779c695d1cc278b2c78ee514de9434b084"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/mollie/mollie-api-php/zipball/5120e5b3e4622a290b64acf87266ea47d10d7301", "url": "https://api.github.com/repos/mollie/mollie-api-php/zipball/9834e5779c695d1cc278b2c78ee514de9434b084",
"reference": "5120e5b3e4622a290b64acf87266ea47d10d7301", "reference": "9834e5779c695d1cc278b2c78ee514de9434b084",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -5854,9 +5854,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/mollie/mollie-api-php/issues", "issues": "https://github.com/mollie/mollie-api-php/issues",
"source": "https://github.com/mollie/mollie-api-php/tree/v2.58.0" "source": "https://github.com/mollie/mollie-api-php/tree/v2.59.0"
}, },
"time": "2023-07-11T12:01:27+00:00" "time": "2023-07-18T13:41:40+00:00"
}, },
{ {
"name": "moneyphp/money", "name": "moneyphp/money",
@ -8514,16 +8514,16 @@
}, },
{ {
"name": "psy/psysh", "name": "psy/psysh",
"version": "v0.11.18", "version": "v0.11.19",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/bobthecow/psysh.git", "url": "https://github.com/bobthecow/psysh.git",
"reference": "4f00ee9e236fa6a48f4560d1300b9c961a70a7ec" "reference": "1724ceff278daeeac5a006744633bacbb2dc4706"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/bobthecow/psysh/zipball/4f00ee9e236fa6a48f4560d1300b9c961a70a7ec", "url": "https://api.github.com/repos/bobthecow/psysh/zipball/1724ceff278daeeac5a006744633bacbb2dc4706",
"reference": "4f00ee9e236fa6a48f4560d1300b9c961a70a7ec", "reference": "1724ceff278daeeac5a006744633bacbb2dc4706",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -8584,9 +8584,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/bobthecow/psysh/issues", "issues": "https://github.com/bobthecow/psysh/issues",
"source": "https://github.com/bobthecow/psysh/tree/v0.11.18" "source": "https://github.com/bobthecow/psysh/tree/v0.11.19"
}, },
"time": "2023-05-23T02:31:11+00:00" "time": "2023-07-15T19:42:19+00:00"
}, },
{ {
"name": "pusher/pusher-php-server", "name": "pusher/pusher-php-server",
@ -15188,16 +15188,16 @@
}, },
{ {
"name": "friendsofphp/php-cs-fixer", "name": "friendsofphp/php-cs-fixer",
"version": "v3.21.1", "version": "v3.22.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
"reference": "229b55b3eae4729a8e2a321441ba40fcb3720b86" "reference": "92b019f6c8d79aa26349d0db7671d37440dc0ff3"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/229b55b3eae4729a8e2a321441ba40fcb3720b86", "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/92b019f6c8d79aa26349d0db7671d37440dc0ff3",
"reference": "229b55b3eae4729a8e2a321441ba40fcb3720b86", "reference": "92b019f6c8d79aa26349d0db7671d37440dc0ff3",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -15207,7 +15207,7 @@
"doctrine/lexer": "^2 || ^3", "doctrine/lexer": "^2 || ^3",
"ext-json": "*", "ext-json": "*",
"ext-tokenizer": "*", "ext-tokenizer": "*",
"php": "^8.0.1", "php": "^7.4 || ^8.0",
"sebastian/diff": "^4.0 || ^5.0", "sebastian/diff": "^4.0 || ^5.0",
"symfony/console": "^5.4 || ^6.0", "symfony/console": "^5.4 || ^6.0",
"symfony/event-dispatcher": "^5.4 || ^6.0", "symfony/event-dispatcher": "^5.4 || ^6.0",
@ -15221,6 +15221,7 @@
"symfony/stopwatch": "^5.4 || ^6.0" "symfony/stopwatch": "^5.4 || ^6.0"
}, },
"require-dev": { "require-dev": {
"facile-it/paraunit": "^1.3 || ^2.0",
"justinrainbow/json-schema": "^5.2", "justinrainbow/json-schema": "^5.2",
"keradus/cli-executor": "^2.0", "keradus/cli-executor": "^2.0",
"mikey179/vfsstream": "^1.6.11", "mikey179/vfsstream": "^1.6.11",
@ -15272,7 +15273,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.21.1" "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.22.0"
}, },
"funding": [ "funding": [
{ {
@ -15280,7 +15281,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2023-07-05T21:50:25+00:00" "time": "2023-07-16T23:08:06+00:00"
}, },
{ {
"name": "hamcrest/hamcrest-php", "name": "hamcrest/hamcrest-php",
@ -15460,37 +15461,33 @@
}, },
{ {
"name": "mockery/mockery", "name": "mockery/mockery",
"version": "1.6.2", "version": "1.6.4",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/mockery/mockery.git", "url": "https://github.com/mockery/mockery.git",
"reference": "13a7fa2642c76c58fa2806ef7f565344c817a191" "reference": "d1413755e26fe56a63455f7753221c86cbb88f66"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/mockery/mockery/zipball/13a7fa2642c76c58fa2806ef7f565344c817a191", "url": "https://api.github.com/repos/mockery/mockery/zipball/d1413755e26fe56a63455f7753221c86cbb88f66",
"reference": "13a7fa2642c76c58fa2806ef7f565344c817a191", "reference": "d1413755e26fe56a63455f7753221c86cbb88f66",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"hamcrest/hamcrest-php": "^2.0.1", "hamcrest/hamcrest-php": "^2.0.1",
"lib-pcre": ">=7.0", "lib-pcre": ">=7.0",
"php": "^7.4 || ^8.0" "php": ">=7.4,<8.3"
}, },
"conflict": { "conflict": {
"phpunit/phpunit": "<8.0" "phpunit/phpunit": "<8.0"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^8.5 || ^9.3", "phpunit/phpunit": "^8.5 || ^9.3",
"psalm/plugin-phpunit": "^0.18", "psalm/plugin-phpunit": "^0.18.4",
"vimeo/psalm": "^5.9" "symplify/easy-coding-standard": "^11.5.0",
"vimeo/psalm": "^5.13.1"
}, },
"type": "library", "type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.6.x-dev"
}
},
"autoload": { "autoload": {
"files": [ "files": [
"library/helpers.php", "library/helpers.php",
@ -15508,12 +15505,20 @@
{ {
"name": "Pádraic Brady", "name": "Pádraic Brady",
"email": "padraic.brady@gmail.com", "email": "padraic.brady@gmail.com",
"homepage": "http://blog.astrumfutura.com" "homepage": "https://github.com/padraic",
"role": "Author"
}, },
{ {
"name": "Dave Marshall", "name": "Dave Marshall",
"email": "dave.marshall@atstsolutions.co.uk", "email": "dave.marshall@atstsolutions.co.uk",
"homepage": "http://davedevelopment.co.uk" "homepage": "https://davedevelopment.co.uk",
"role": "Developer"
},
{
"name": "Nathanael Esayeas",
"email": "nathanael.esayeas@protonmail.com",
"homepage": "https://github.com/ghostwriter",
"role": "Lead Developer"
} }
], ],
"description": "Mockery is a simple yet flexible PHP mock object framework", "description": "Mockery is a simple yet flexible PHP mock object framework",
@ -15531,10 +15536,13 @@
"testing" "testing"
], ],
"support": { "support": {
"docs": "https://docs.mockery.io/",
"issues": "https://github.com/mockery/mockery/issues", "issues": "https://github.com/mockery/mockery/issues",
"source": "https://github.com/mockery/mockery/tree/1.6.2" "rss": "https://github.com/mockery/mockery/releases.atom",
"security": "https://github.com/mockery/mockery/security/advisories",
"source": "https://github.com/mockery/mockery"
}, },
"time": "2023-06-07T09:07:52+00:00" "time": "2023-07-19T15:51:02+00:00"
}, },
{ {
"name": "myclabs/deep-copy", "name": "myclabs/deep-copy",
@ -16140,16 +16148,16 @@
}, },
{ {
"name": "phpstan/phpstan", "name": "phpstan/phpstan",
"version": "1.10.25", "version": "1.10.26",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phpstan/phpstan.git", "url": "https://github.com/phpstan/phpstan.git",
"reference": "578f4e70d117f9a90699324c555922800ac38d8c" "reference": "5d660cbb7e1b89253a47147ae44044f49832351f"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/578f4e70d117f9a90699324c555922800ac38d8c", "url": "https://api.github.com/repos/phpstan/phpstan/zipball/5d660cbb7e1b89253a47147ae44044f49832351f",
"reference": "578f4e70d117f9a90699324c555922800ac38d8c", "reference": "5d660cbb7e1b89253a47147ae44044f49832351f",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -16198,7 +16206,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-07-06T12:11:37+00:00" "time": "2023-07-19T12:44:37+00:00"
}, },
{ {
"name": "phpunit/php-code-coverage", "name": "phpunit/php-code-coverage",

View File

@ -16,6 +16,10 @@ return new class extends Migration
Schema::table('tasks', function (Blueprint $table) { Schema::table('tasks', function (Blueprint $table) {
$table->date('calculated_start_date')->nullable(); $table->date('calculated_start_date')->nullable();
}); });
Schema::table('webhooks', function (Blueprint $table){
$table->text('target_url')->change();
});
} }
/** /**

View File

@ -86,11 +86,16 @@ span {
{{ $product['cost'] }} {{ $product['cost'] }}
@endif @endif
</p> </p>
<p class="overflow-ellipsis overflow-hidden px-1 mb-2">{{ $product['notes'] }}</p> <p class="overflow-ellipsis overflow-hidden px-1 mb-2">{!! $product['notes'] !!}</p>
</div> </div>
</div> </div>
</td> </td>
<td style="text-align:right; padding-right:2px;">{{ $product['line_total'] }}</td>
<td style="text-align:right; padding-right:2px;">
@if($show_line_total)
{{ $product['line_total'] }}
@endif
</td>
</tr> </tr>
@endforeach @endforeach
</tbody> </tbody>
@ -101,19 +106,19 @@ span {
<div id="task-details" class="py-6 mr-3 ml-3"> <div id="task-details" class="py-6 mr-3 ml-3">
<table width="100%"> <table width="100%">
<thead> <thead>
<tr class="border-bottom"> <tr class="border-b-2">
<th style="text-align:left; width:70%; padding-left:2px;">Service</th> <th style="text-align:left; width:70%; padding-left:2px;">Service</th>
<th style="text-align:right; width:30%; padding-right:2px;">Amount</th> <th style="text-align:right; width:30%; padding-right:2px;">Amount</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@foreach($services as $service) @foreach($services as $service)
<tr style="display: table-row;"> <tr style="display: table-row;" class="border-b-2">
<td> <td>
<div class=""> <div class="">
<div class=""> <div class="">
<p class="mt-2">{{ $service['quantity'] }} × {{ $service['cost'] }}</p> <p class="mt-2">{{ $service['quantity'] }} × {{ $service['cost'] }}</p>
<p class="overflow-ellipsis overflow-hidden px-1 mb-2">{{ $service['notes'] }}</p> <p class="overflow-ellipsis overflow-hidden px-1 mb-2">{!! $service['notes'] !!}</p>
</div> </div>
</div> </div>
</td> </td>

View File

@ -33,6 +33,8 @@ class CreditsTest extends TestCase
use DatabaseTransactions; use DatabaseTransactions;
use AppSetup; use AppSetup;
private $faker;
protected function setUp(): void protected function setUp(): void
{ {
parent::setUp(); parent::setUp();