mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
Merge for templates
This commit is contained in:
commit
f8cab32e53
@ -56,7 +56,10 @@ class StoreTaskRequest extends Request
|
|||||||
|
|
||||||
$rules['time_log'] = ['bail',function ($attribute, $values, $fail) {
|
$rules['time_log'] = ['bail',function ($attribute, $values, $fail) {
|
||||||
|
|
||||||
if(!is_array(json_decode($values, true))) {
|
if(is_string($values))
|
||||||
|
$values = json_decode($values, true);
|
||||||
|
|
||||||
|
if(!is_array($values)) {
|
||||||
$fail('The '.$attribute.' must be a valid array.');
|
$fail('The '.$attribute.' must be a valid array.');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -38,9 +38,6 @@ class UpdateTaskRequest extends Request
|
|||||||
/** @var \App\Models\User $user */
|
/** @var \App\Models\User $user */
|
||||||
$user = auth()->user();
|
$user = auth()->user();
|
||||||
|
|
||||||
/** @var \App\Models\User $user */
|
|
||||||
$user = auth()->user();
|
|
||||||
|
|
||||||
return $user->can('edit', $this->task);
|
return $user->can('edit', $this->task);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -65,7 +62,11 @@ class UpdateTaskRequest extends Request
|
|||||||
|
|
||||||
$rules['time_log'] = ['bail', function ($attribute, $values, $fail) {
|
$rules['time_log'] = ['bail', function ($attribute, $values, $fail) {
|
||||||
|
|
||||||
if(!is_array(json_decode($values, true))) {
|
if(is_string($values)) {
|
||||||
|
$values = json_decode($values, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!is_array($values)) {
|
||||||
$fail('The '.$attribute.' must be a valid array.');
|
$fail('The '.$attribute.' must be a valid array.');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@ use App\Models\Quote;
|
|||||||
use App\Utils\Number;
|
use App\Utils\Number;
|
||||||
use Twig\Error\Error;
|
use Twig\Error\Error;
|
||||||
use App\Models\Client;
|
use App\Models\Client;
|
||||||
|
use App\Models\Company;
|
||||||
use App\Models\Credit;
|
use App\Models\Credit;
|
||||||
use App\Models\Design;
|
use App\Models\Design;
|
||||||
use App\Models\Vendor;
|
use App\Models\Vendor;
|
||||||
@ -40,17 +41,12 @@ use App\Utils\PaymentHtmlEngine;
|
|||||||
use App\Utils\Traits\MakesDates;
|
use App\Utils\Traits\MakesDates;
|
||||||
use App\Utils\Traits\Pdf\PdfMaker;
|
use App\Utils\Traits\Pdf\PdfMaker;
|
||||||
use App\Utils\VendorHtmlEngine;
|
use App\Utils\VendorHtmlEngine;
|
||||||
use League\Fractal\Manager;
|
use League\CommonMark\CommonMarkConverter;
|
||||||
use League\Fractal\Serializer\ArraySerializer;
|
|
||||||
use Twig\Environment;
|
|
||||||
use Twig\Error\Error;
|
use Twig\Error\Error;
|
||||||
use Twig\Error\LoaderError;
|
use Twig\Error\LoaderError;
|
||||||
use Twig\Error\RuntimeError;
|
use Twig\Error\RuntimeError;
|
||||||
use Twig\Error\SyntaxError;
|
use Twig\Error\SyntaxError;
|
||||||
use Twig\Extension\DebugExtension;
|
|
||||||
use Twig\Extension\StringLoaderExtension;
|
|
||||||
use Twig\Extra\Intl\IntlExtension;
|
use Twig\Extra\Intl\IntlExtension;
|
||||||
use Twig\Loader\FilesystemLoader;
|
|
||||||
use Twig\Sandbox\SecurityError;
|
use Twig\Sandbox\SecurityError;
|
||||||
use Twig\TwigFilter;
|
use Twig\TwigFilter;
|
||||||
use Twig\TwigFunction;
|
use Twig\TwigFunction;
|
||||||
@ -78,7 +74,7 @@ class TemplateService
|
|||||||
|
|
||||||
private \DomDocument $document;
|
private \DomDocument $document;
|
||||||
|
|
||||||
public Environment $twig;
|
public \Twig\Environment $twig;
|
||||||
|
|
||||||
private string $compiled_html = '';
|
private string $compiled_html = '';
|
||||||
|
|
||||||
@ -122,8 +118,7 @@ class TemplateService
|
|||||||
$this->twig = new Environment($loader, [
|
$this->twig = new Environment($loader, [
|
||||||
'debug' => true,
|
'debug' => true,
|
||||||
]);
|
]);
|
||||||
|
$string_extension = new \Twig\Extension\StringLoaderExtension();
|
||||||
$string_extension = new StringLoaderExtension();
|
|
||||||
$this->twig->addExtension($string_extension);
|
$this->twig->addExtension($string_extension);
|
||||||
$this->twig->addExtension(new IntlExtension());
|
$this->twig->addExtension(new IntlExtension());
|
||||||
$this->twig->addExtension(new DebugExtension());
|
$this->twig->addExtension(new DebugExtension());
|
||||||
@ -133,7 +128,7 @@ class TemplateService
|
|||||||
});
|
});
|
||||||
$this->twig->addFunction($function);
|
$this->twig->addFunction($function);
|
||||||
|
|
||||||
$filter = new TwigFilter('sum', function (array $array, string $column) {
|
$filter = new \Twig\TwigFilter('sum', function (array $array, string $column) {
|
||||||
return array_sum(array_column($array, $column));
|
return array_sum(array_column($array, $column));
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -292,7 +287,7 @@ class TemplateService
|
|||||||
>>>>>>> support_for_custom_statement_designs
|
>>>>>>> support_for_custom_statement_designs
|
||||||
} catch(SecurityError $e) {
|
} catch(SecurityError $e) {
|
||||||
nlog("security = " . $e->getMessage());
|
nlog("security = " . $e->getMessage());
|
||||||
continue;
|
throw ($e);
|
||||||
}
|
}
|
||||||
|
|
||||||
$template = $template->render($this->data);
|
$template = $template->render($this->data);
|
||||||
@ -630,11 +625,7 @@ class TemplateService
|
|||||||
*/
|
*/
|
||||||
public function padLineItems(array $items, Vendor | Client $client_or_vendor): array
|
public function padLineItems(array $items, Vendor | Client $client_or_vendor): array
|
||||||
{
|
{
|
||||||
<<<<<<< HEAD
|
|
||||||
return collect($items)->map(function ($item) use ($client) {
|
|
||||||
=======
|
|
||||||
return collect($items)->map(function ($item) use ($client_or_vendor) {
|
return collect($items)->map(function ($item) use ($client_or_vendor) {
|
||||||
>>>>>>> support_for_custom_statement_designs
|
|
||||||
|
|
||||||
$item->cost_raw = $item->cost ?? 0;
|
$item->cost_raw = $item->cost ?? 0;
|
||||||
$item->discount_raw = $item->discount ?? 0;
|
$item->discount_raw = $item->discount ?? 0;
|
||||||
@ -643,18 +634,6 @@ class TemplateService
|
|||||||
$item->tax_amount_raw = $item->tax_amount ?? 0;
|
$item->tax_amount_raw = $item->tax_amount ?? 0;
|
||||||
$item->product_cost_raw = $item->product_cost ?? 0;
|
$item->product_cost_raw = $item->product_cost ?? 0;
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
$item->cost = Number::formatMoney($item->cost_raw, $client);
|
|
||||||
|
|
||||||
if($item->is_amount_discount) {
|
|
||||||
$item->discount = Number::formatMoney($item->discount_raw, $client);
|
|
||||||
}
|
|
||||||
|
|
||||||
$item->line_total = Number::formatMoney($item->line_total_raw, $client);
|
|
||||||
$item->gross_line_total = Number::formatMoney($item->gross_line_total_raw, $client);
|
|
||||||
$item->tax_amount = Number::formatMoney($item->tax_amount_raw, $client);
|
|
||||||
$item->product_cost = Number::formatMoney($item->product_cost_raw, $client);
|
|
||||||
=======
|
|
||||||
$item->cost = Number::formatMoney($item->cost_raw, $client_or_vendor);
|
$item->cost = Number::formatMoney($item->cost_raw, $client_or_vendor);
|
||||||
|
|
||||||
if($item->is_amount_discount) {
|
if($item->is_amount_discount) {
|
||||||
@ -665,7 +644,6 @@ class TemplateService
|
|||||||
$item->gross_line_total = Number::formatMoney($item->gross_line_total_raw, $client_or_vendor);
|
$item->gross_line_total = Number::formatMoney($item->gross_line_total_raw, $client_or_vendor);
|
||||||
$item->tax_amount = Number::formatMoney($item->tax_amount_raw, $client_or_vendor);
|
$item->tax_amount = Number::formatMoney($item->tax_amount_raw, $client_or_vendor);
|
||||||
$item->product_cost = Number::formatMoney($item->product_cost_raw, $client_or_vendor);
|
$item->product_cost = Number::formatMoney($item->product_cost_raw, $client_or_vendor);
|
||||||
>>>>>>> support_for_custom_statement_designs
|
|
||||||
|
|
||||||
return $item;
|
return $item;
|
||||||
|
|
||||||
@ -732,7 +710,7 @@ class TemplateService
|
|||||||
'balance_raw' => ($payment->amount - $payment->refunded - $payment->applied),
|
'balance_raw' => ($payment->amount - $payment->refunded - $payment->applied),
|
||||||
'date' => $this->translateDate($payment->date, $payment->client->date_format(), $payment->client->locale()),
|
'date' => $this->translateDate($payment->date, $payment->client->date_format(), $payment->client->locale()),
|
||||||
'method' => $payment->translatedType(),
|
'method' => $payment->translatedType(),
|
||||||
'currency' => $payment->currency->code ?? $payment->company->currency()->code,
|
'currency' => $payment->currency->code,
|
||||||
'exchange_rate' => $payment->exchange_rate,
|
'exchange_rate' => $payment->exchange_rate,
|
||||||
'transaction_reference' => $payment->transaction_reference,
|
'transaction_reference' => $payment->transaction_reference,
|
||||||
'is_manual' => $payment->is_manual,
|
'is_manual' => $payment->is_manual,
|
||||||
@ -813,7 +791,7 @@ class TemplateService
|
|||||||
public function processQuotes($quotes): array
|
public function processQuotes($quotes): array
|
||||||
{
|
{
|
||||||
|
|
||||||
return collect($quotes)->map(function ($quote){
|
return collect($quotes)->map(function ($quote) {
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'amount' => Number::formatMoney($quote->amount, $quote->client),
|
'amount' => Number::formatMoney($quote->amount, $quote->client),
|
||||||
@ -888,7 +866,8 @@ class TemplateService
|
|||||||
$credits = collect($credits)
|
$credits = collect($credits)
|
||||||
->map(function ($credit) {
|
->map(function ($credit) {
|
||||||
|
|
||||||
<<<<<<< HEAD
|
$this->entity = $credit;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'amount' => Number::formatMoney($credit->amount, $credit->client),
|
'amount' => Number::formatMoney($credit->amount, $credit->client),
|
||||||
'balance' => Number::formatMoney($credit->balance, $credit->client),
|
'balance' => Number::formatMoney($credit->balance, $credit->client),
|
||||||
@ -1041,7 +1020,7 @@ class TemplateService
|
|||||||
public function processTasks($tasks, bool $nested = false): array
|
public function processTasks($tasks, bool $nested = false): array
|
||||||
{
|
{
|
||||||
|
|
||||||
return collect($tasks)->map(function ($task) use ($nested){
|
return collect($tasks)->map(function ($task) use ($nested) {
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'number' => (string) $task->number ?: '',
|
'number' => (string) $task->number ?: '',
|
||||||
@ -1050,7 +1029,7 @@ class TemplateService
|
|||||||
'rate' => Number::formatMoney($task->rate ?? 0, $task->client ?? $task->company),
|
'rate' => Number::formatMoney($task->rate ?? 0, $task->client ?? $task->company),
|
||||||
'created_at' => $this->translateDate($task->created_at, $task->client ? $task->client->date_format() : $task->company->date_format(), $task->client ? $task->client->locale() : $task->company->locale()),
|
'created_at' => $this->translateDate($task->created_at, $task->client ? $task->client->date_format() : $task->company->date_format(), $task->client ? $task->client->locale() : $task->company->locale()),
|
||||||
'updated_at' => $this->translateDate($task->updated_at, $task->client ? $task->client->date_format() : $task->company->date_format(), $task->client ? $task->client->locale() : $task->company->locale()),
|
'updated_at' => $this->translateDate($task->updated_at, $task->client ? $task->client->date_format() : $task->company->date_format(), $task->client ? $task->client->locale() : $task->company->locale()),
|
||||||
'date' => $task->calculated_start_date ? $this->translateDate($task->calculated_start_date , $task->client ? $task->client->date_format() : $task->company->date_format(), $task->client ? $task->client->locale() : $task->company->locale()) : '',
|
'date' => $task->calculated_start_date ? $this->translateDate($task->calculated_start_date, $task->client ? $task->client->date_format() : $task->company->date_format(), $task->client ? $task->client->locale() : $task->company->locale()) : '',
|
||||||
// 'invoice_id' => $this->encodePrimaryKey($task->invoice_id) ?: '',
|
// 'invoice_id' => $this->encodePrimaryKey($task->invoice_id) ?: '',
|
||||||
'project' => ($task->project && !$nested) ? $this->transformProject($task->project, true) : [],
|
'project' => ($task->project && !$nested) ? $this->transformProject($task->project, true) : [],
|
||||||
'time_log' => $task->processLogs(),
|
'time_log' => $task->processLogs(),
|
||||||
@ -1082,7 +1061,7 @@ class TemplateService
|
|||||||
{
|
{
|
||||||
|
|
||||||
return
|
return
|
||||||
collect($projects)->map(function ($project){
|
collect($projects)->map(function ($project) {
|
||||||
|
|
||||||
return $this->transformProject($project);
|
return $this->transformProject($project);
|
||||||
|
|
||||||
@ -1129,7 +1108,7 @@ class TemplateService
|
|||||||
public function processPurchaseOrders($purchase_orders): array
|
public function processPurchaseOrders($purchase_orders): array
|
||||||
{
|
{
|
||||||
|
|
||||||
return collect($purchase_orders)->map(function ($purchase_order){
|
return collect($purchase_orders)->map(function ($purchase_order) {
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'vendor' => $purchase_order->vendor ? [
|
'vendor' => $purchase_order->vendor ? [
|
||||||
@ -1251,7 +1230,7 @@ class TemplateService
|
|||||||
collect($stacks)->filter(function ($stack) {
|
collect($stacks)->filter(function ($stack) {
|
||||||
return $this->document->getElementById($stack) ?? false;
|
return $this->document->getElementById($stack) ?? false;
|
||||||
})
|
})
|
||||||
->map(function ($stack){
|
->map(function ($stack) {
|
||||||
$node = $this->document->getElementById($stack);
|
$node = $this->document->getElementById($stack);
|
||||||
return ['stack' => $stack, 'labels' => $node->getAttribute('labels')];
|
return ['stack' => $stack, 'labels' => $node->getAttribute('labels')];
|
||||||
})
|
})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user