Release 2.0.15 (#3970)
This commit is contained in:
@@ -77,4 +77,9 @@ final class DefaultInvoiceFormatter implements InvoiceFormatter
|
||||
$this->locale = $locale;
|
||||
$this->formatter = null;
|
||||
}
|
||||
|
||||
public function getFormattedAmount(float $amount): string
|
||||
{
|
||||
return $this->getFormatter()->amount($amount);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ final class InvoiceItemDefaultHydrator implements InvoiceItemHydrator
|
||||
|
||||
if ($item->isFixedRate()) {
|
||||
$appliedRate = $item->getFixedRate();
|
||||
$amount = $item->getAmount();
|
||||
$amount = $formatter->getFormattedAmount($item->getAmount());
|
||||
}
|
||||
|
||||
$activity = $item->getActivity();
|
||||
@@ -83,12 +83,18 @@ final class InvoiceItemDefaultHydrator implements InvoiceItemHydrator
|
||||
'entry.date' => $formatter->getFormattedDateTime($begin),
|
||||
'entry.week' => \intval($begin->format('W')),
|
||||
'entry.weekyear' => $begin->format('o'),
|
||||
'entry.user_id' => $user->getId(),
|
||||
'entry.user_name' => $user->getUserIdentifier(),
|
||||
'entry.user_title' => $user->getTitle() ?? '',
|
||||
'entry.user_alias' => $user->getAlias() ?? '',
|
||||
];
|
||||
|
||||
if (null !== $user) {
|
||||
$values = array_merge($values, [
|
||||
'entry.user_id' => $user->getId(),
|
||||
'entry.user_name' => $user->getUserIdentifier(),
|
||||
'entry.user_title' => $user->getTitle() ?? '',
|
||||
'entry.user_alias' => $user->getAlias() ?? '',
|
||||
'entry.user_display' => $user->getDisplayName() ?? '',
|
||||
]);
|
||||
}
|
||||
|
||||
if (null !== $activity) {
|
||||
$values = array_merge($values, [
|
||||
'entry.activity' => $activity->getName(),
|
||||
|
||||
@@ -35,7 +35,8 @@ final class InvoiceModelCustomerHydrator implements InvoiceModelHydrator
|
||||
'customer.name' => $customer->getName() ?? '',
|
||||
'customer.contact' => $customer->getContact() ?? '',
|
||||
'customer.company' => $customer->getCompany() ?? '',
|
||||
'customer.vat' => $customer->getVatId() ?? '',
|
||||
'customer.vat' => $customer->getVatId() ?? '', // deprecated since 2.0.15
|
||||
'customer.vat_id' => $customer->getVatId() ?? '',
|
||||
'customer.number' => $customer->getNumber() ?? '',
|
||||
'customer.country' => $customer->getCountry(),
|
||||
'customer.homepage' => $customer->getHomepage() ?? '',
|
||||
|
||||
@@ -22,9 +22,6 @@ final class InvoiceModelDefaultHydrator implements InvoiceModelHydrator
|
||||
$subtotal = $model->getCalculator()->getSubtotal();
|
||||
$formatter = $model->getFormatter();
|
||||
|
||||
$begin = $model->getQuery()->getBegin();
|
||||
$end = $model->getQuery()->getEnd();
|
||||
|
||||
$values = [
|
||||
'invoice.due_date' => $formatter->getFormattedDateTime($model->getDueDate()),
|
||||
'invoice.date' => $formatter->getFormattedDateTime($model->getInvoiceDate()),
|
||||
@@ -33,6 +30,7 @@ final class InvoiceModelDefaultHydrator implements InvoiceModelHydrator
|
||||
'invoice.language' => $model->getTemplate()->getLanguage(), // since 1.9
|
||||
'invoice.currency_symbol' => $formatter->getCurrencySymbol($currency),
|
||||
'invoice.vat' => $model->getCalculator()->getVat(),
|
||||
'invoice.tax_hide' => $model->isHideZeroTax() && $tax === 0.00,
|
||||
'invoice.tax' => $formatter->getFormattedMoney($tax, $currency),
|
||||
'invoice.tax_nc' => $formatter->getFormattedMoney($tax, $currency, false),
|
||||
'invoice.tax_plain' => $tax,
|
||||
@@ -65,25 +63,66 @@ final class InvoiceModelDefaultHydrator implements InvoiceModelHydrator
|
||||
'query.end_month' => '', // since 1.9
|
||||
'query.end_month_number' => '', // since 1.9
|
||||
'query.end_year' => '', // since 1.9
|
||||
|
||||
// since 2.0.15
|
||||
'user.see_others' => ($model->getQuery()?->getUser() === null),
|
||||
];
|
||||
|
||||
if ($begin !== null) {
|
||||
$values = array_merge($values, [
|
||||
'query.day' => $begin->format('d'), // @deprecated - but impossible to delete
|
||||
'query.month' => $formatter->getFormattedMonthName($begin), // @deprecated - but impossible to delete
|
||||
'query.month_number' => $begin->format('m'), // @deprecated - but impossible to delete
|
||||
'query.year' => $begin->format('Y'), // @deprecated - but impossible to delete
|
||||
'query.begin' => $formatter->getFormattedDateTime($begin),
|
||||
'query.begin_day' => $begin->format('d'),
|
||||
'query.begin_month' => $formatter->getFormattedMonthName($begin),
|
||||
'query.begin_month_number' => $begin->format('m'),
|
||||
'query.begin_year' => $begin->format('Y'),
|
||||
'query.end' => $formatter->getFormattedDateTime($end), // since 1.9
|
||||
'query.end_day' => $end->format('d'), // since 1.9
|
||||
'query.end_month' => $formatter->getFormattedMonthName($end), // since 1.9
|
||||
'query.end_month_number' => $end->format('m'), // since 1.9
|
||||
'query.end_year' => $end->format('Y'), // since 1.9
|
||||
]);
|
||||
$query = $model->getQuery();
|
||||
if ($query !== null) {
|
||||
$begin = $query->getBegin();
|
||||
$end = $query->getEnd();
|
||||
|
||||
if ($begin !== null) {
|
||||
$values = array_merge($values, [
|
||||
'query.day' => $begin->format('d'),
|
||||
// @deprecated - but impossible to delete
|
||||
'query.month' => $formatter->getFormattedMonthName($begin),
|
||||
// @deprecated - but impossible to delete
|
||||
'query.month_number' => $begin->format('m'),
|
||||
// @deprecated - but impossible to delete
|
||||
'query.year' => $begin->format('Y'),
|
||||
// @deprecated - but impossible to delete
|
||||
'query.begin' => $formatter->getFormattedDateTime($begin),
|
||||
'query.begin_day' => $begin->format('d'),
|
||||
'query.begin_month' => $formatter->getFormattedMonthName($begin),
|
||||
'query.begin_month_number' => $begin->format('m'),
|
||||
'query.begin_year' => $begin->format('Y'),
|
||||
'query.end' => $formatter->getFormattedDateTime($end),
|
||||
// since 1.9
|
||||
'query.end_day' => $end->format('d'),
|
||||
// since 1.9
|
||||
'query.end_month' => $formatter->getFormattedMonthName($end),
|
||||
// since 1.9
|
||||
'query.end_month_number' => $end->format('m'),
|
||||
// since 1.9
|
||||
'query.end_year' => $end->format('Y'),
|
||||
// since 1.9
|
||||
]);
|
||||
}
|
||||
|
||||
// since 2.0.15
|
||||
$activity = $query->getActivity();
|
||||
if ($activity !== null) {
|
||||
$prefix = 'query.activity.';
|
||||
|
||||
$values = array_merge($values, [
|
||||
$prefix . 'name' => $activity->getName() ?? '',
|
||||
$prefix . 'comment' => $activity->getComment() ?? '',
|
||||
]);
|
||||
}
|
||||
|
||||
// since 2.0.15
|
||||
$project = $query->getProject();
|
||||
if ($project !== null) {
|
||||
$prefix = 'query.project.';
|
||||
|
||||
$values = array_merge($values, [
|
||||
$prefix . 'name' => $project->getName() ?? '',
|
||||
$prefix . 'comment' => $project->getComment() ?? '',
|
||||
$prefix . 'order_number' => $project->getOrderNumber(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
$entries = $model->getEntries();
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
|
||||
namespace App\Invoice\Hydrator;
|
||||
|
||||
use App\Entity\UserPreference;
|
||||
use App\Invoice\InvoiceModel;
|
||||
use App\Invoice\InvoiceModelHydrator;
|
||||
|
||||
@@ -28,9 +27,9 @@ final class InvoiceModelUserHydrator implements InvoiceModelHydrator
|
||||
'user.email' => $user->getEmail(),
|
||||
'user.title' => $user->getTitle() ?? '',
|
||||
'user.alias' => $user->getAlias() ?? '',
|
||||
'user.display' => $user->getDisplayName() ?? '',
|
||||
];
|
||||
|
||||
/** @var UserPreference $metaField */
|
||||
foreach ($user->getPreferences() as $metaField) {
|
||||
$values = array_merge($values, [
|
||||
'user.meta.' . $metaField->getName() => $metaField->getValue(),
|
||||
|
||||
@@ -24,6 +24,8 @@ interface InvoiceFormatter
|
||||
|
||||
public function getFormattedTime(DateTime $date): string;
|
||||
|
||||
public function getFormattedAmount(float $amount): string;
|
||||
|
||||
public function getFormattedMoney(float $amount, ?string $currency, bool $withCurrency = true): string;
|
||||
|
||||
public function getFormattedMonthName(DateTime $date): string;
|
||||
|
||||
@@ -278,7 +278,7 @@ final class ServiceInvoice
|
||||
{
|
||||
$document = $this->getDocumentByName($model->getTemplate()->getRenderer());
|
||||
if (null === $document) {
|
||||
throw new \Exception('Unknown invoice document: ' . $model->getTemplate()->getRenderer());
|
||||
throw new \Exception('Please adjust your invoice template, the renderer is invalid: ' . $model->getTemplate()->getRenderer());
|
||||
}
|
||||
|
||||
foreach ($this->getRenderer() as $renderer) {
|
||||
@@ -426,7 +426,7 @@ final class ServiceInvoice
|
||||
|
||||
$calculator = $this->getCalculatorByName($template->getCalculator());
|
||||
if (null === $calculator) {
|
||||
throw new \Exception('Please adjust your invoice template, the invoice calculator is invalid: ' . $template->getCalculator());
|
||||
throw new \Exception('Please adjust your invoice template, the sum calculator is invalid: ' . $template->getCalculator());
|
||||
}
|
||||
|
||||
$model->setCalculator($calculator);
|
||||
|
||||
Reference in New Issue
Block a user