mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-05-24 02:14:21 -04:00
Localizing Dates
This commit is contained in:
parent
a41c15984b
commit
62feba5a51
@ -295,7 +295,7 @@ class SendReminders implements ShouldQueue
|
||||
$invoice_item = new InvoiceItem;
|
||||
$invoice_item->type_id = '5';
|
||||
$invoice_item->product_key = trans('texts.fee');
|
||||
$invoice_item->notes = ctrans('texts.late_fee_added', ['date' => $this->formatDate(now()->startOfDay(), $invoice->client->date_format())]);
|
||||
$invoice_item->notes = ctrans('texts.late_fee_added', ['date' => $this->translateDate(now()->startOfDay(), $invoice->client->date_format(), $invoice->client->locale())]);
|
||||
$invoice_item->quantity = 1;
|
||||
$invoice_item->cost = $fee;
|
||||
|
||||
|
@ -87,7 +87,7 @@ class PaymentEmailEngine extends BaseEmailEngine
|
||||
$data['$entity'] = ['value' => '', 'label' => ctrans('texts.payment')];
|
||||
$data['$payment.amount'] = ['value' => Number::formatMoney($this->payment->amount, $this->client) ?: ' ', 'label' => ctrans('texts.amount')];
|
||||
$data['$amount'] = &$data['$payment.amount'];
|
||||
$data['$payment.date'] = ['value' => $this->formatDate($this->payment->date, $this->client->date_format()), 'label' => ctrans('texts.payment_date')];
|
||||
$data['$payment.date'] = ['value' => $this->translateDate($this->payment->date, $this->client->date_format(), $this->client->locale()), 'label' => ctrans('texts.payment_date')];
|
||||
$data['$transaction_reference'] = ['value' => $this->payment->transaction_reference, 'label' => ctrans('texts.transaction_reference')];
|
||||
$data['$public_notes'] = ['value' => $this->payment->public_notes, 'label' => ctrans('texts.notes')];
|
||||
|
||||
|
@ -223,6 +223,16 @@ class Client extends BaseModel implements HasLocalePreference
|
||||
})->first()->format;
|
||||
}
|
||||
|
||||
public function translated_date_format()
|
||||
{
|
||||
$date_formats = Cache::get('date_formats');
|
||||
|
||||
return $date_formats->filter(function ($item) {
|
||||
return $item->id == $this->getSetting('date_format_id');
|
||||
})->first()->translated_format;
|
||||
|
||||
}
|
||||
|
||||
public function currency()
|
||||
{
|
||||
$currencies = Cache::get('currencies');
|
||||
|
@ -64,7 +64,7 @@ class Helpers
|
||||
|
||||
switch ($custom_field) {
|
||||
case 'date':
|
||||
return is_null($client) ? $value : $this->formatDate($value, $client->date_format());
|
||||
return is_null($client) ? $value : $this->translateDate($value, $client->date_format(), $client->locale());
|
||||
break;
|
||||
|
||||
case 'switch':
|
||||
|
@ -105,15 +105,15 @@ class HtmlEngine
|
||||
$data['$total_tax_values'] = ['value' => $this->totalTaxValues(), 'label' => ctrans('texts.taxes')];
|
||||
$data['$line_tax_labels'] = ['value' => $this->lineTaxLabels(), 'label' => ctrans('texts.taxes')];
|
||||
$data['$line_tax_values'] = ['value' => $this->lineTaxValues(), 'label' => ctrans('texts.taxes')];
|
||||
$data['$date'] = ['value' => $this->formatDate($this->entity->date, $this->entity->client->date_format()) ?: ' ', 'label' => ctrans('texts.date')];
|
||||
$data['$date'] = ['value' => $this->translateDate($this->entity->date, $this->entity->client->date_format(), $this->entity->client->locale()) ?: ' ', 'label' => ctrans('texts.date')];
|
||||
|
||||
$data['$invoice.date'] = &$data['$date'];
|
||||
$data['$due_date'] = ['value' => $this->formatDate($this->entity->due_date, $this->entity->client->date_format()) ?: ' ', 'label' => ctrans('texts.'.$this->entity_string.'_due_date')];
|
||||
$data['$payment_due'] = ['value' => $this->formatDate($this->entity->due_date, $this->entity->client->date_format()) ?: ' ', 'label' => ctrans('texts.payment_due')];
|
||||
$data['$due_date'] = ['value' => $this->translateDate($this->entity->due_date, $this->entity->client->date_format(), $this->entity->client->locale()) ?: ' ', 'label' => ctrans('texts.'.$this->entity_string.'_due_date')];
|
||||
$data['$payment_due'] = ['value' => $this->translateDate($this->entity->due_date, $this->entity->client->date_format(), $this->entity->client->locale()) ?: ' ', 'label' => ctrans('texts.payment_due')];
|
||||
$data['$invoice.due_date'] = &$data['$due_date'];
|
||||
$data['$invoice.number'] = ['value' => $this->entity->number ?: ' ', 'label' => ctrans('texts.invoice_number')];
|
||||
$data['$invoice.po_number'] = ['value' => $this->entity->po_number ?: ' ', 'label' => ctrans('texts.po_number')];
|
||||
$data['$entity.datetime'] = ['value' => $this->formatDatetime($this->entity->created_at, $this->entity->client->date_format()), 'label' => ctrans('texts.date')];
|
||||
$data['$entity.datetime'] = ['value' => $this->formatDatetime($this->entity->created_at, $this->entity->client->date_format(), $this->entity->client->locale()), 'label' => ctrans('texts.date')];
|
||||
$data['$invoice.datetime'] = &$data['$entity.datetime'];
|
||||
$data['$quote.datetime'] = &$data['$entity.datetime'];
|
||||
$data['$credit.datetime'] = &$data['$entity.datetime'];
|
||||
@ -180,7 +180,7 @@ class HtmlEngine
|
||||
$data['$credit.number'] = ['value' => $this->entity->number ?: ' ', 'label' => ctrans('texts.credit_number')];
|
||||
$data['$credit.total'] = &$data['$credit.total'];
|
||||
$data['$credit.po_number'] = &$data['$invoice.po_number'];
|
||||
$data['$credit.date'] = ['value' => $this->formatDate($this->entity->date, $this->entity->client->date_format()), 'label' => ctrans('texts.credit_date')];
|
||||
$data['$credit.date'] = ['value' => $this->translateDate($this->entity->date, $this->entity->client->date_format(), $this->entity->client->locale()), 'label' => ctrans('texts.credit_date')];
|
||||
$data['$balance'] = ['value' => Number::formatMoney($this->entity_calc->getBalance(), $this->client) ?: ' ', 'label' => ctrans('texts.balance')];
|
||||
$data['$credit.balance'] = &$data['$balance'];
|
||||
|
||||
@ -199,13 +199,13 @@ class HtmlEngine
|
||||
$data['$entity_issued_to'] = ['value' => '', 'label' => ctrans("texts.{$this->entity_string}_issued_to")];
|
||||
$data['$your_entity'] = ['value' => '', 'label' => ctrans("texts.your_{$this->entity_string}")];
|
||||
|
||||
$data['$quote.date'] = ['value' => $this->formatDate($this->entity->date, $this->entity->client->date_format()) ?: ' ', 'label' => ctrans('texts.quote_date')];
|
||||
$data['$quote.date'] = ['value' => $this->translateDate($this->entity->date, $this->entity->client->date_format(), $this->entity->client->locale()) ?: ' ', 'label' => ctrans('texts.quote_date')];
|
||||
$data['$quote.number'] = ['value' => $this->entity->number ?: ' ', 'label' => ctrans('texts.quote_number')];
|
||||
$data['$quote.po_number'] = &$data['$invoice.po_number'];
|
||||
$data['$quote.quote_number'] = &$data['$quote.number'];
|
||||
$data['$quote_no'] = &$data['$quote.number'];
|
||||
$data['$quote.quote_no'] = &$data['$quote.number'];
|
||||
$data['$quote.valid_until'] = ['value' => $this->formatDate($this->entity->due_date, $this->client->date_format()), 'label' => ctrans('texts.valid_until')];
|
||||
$data['$quote.valid_until'] = ['value' => $this->translateDate($this->entity->due_date, $this->client->date_format(), $this->entity->client->locale()), 'label' => ctrans('texts.valid_until')];
|
||||
$data['$credit_amount'] = ['value' => Number::formatMoney($this->entity_calc->getTotal(), $this->client) ?: ' ', 'label' => ctrans('texts.credit_amount')];
|
||||
$data['$credit_balance'] = ['value' => Number::formatMoney($this->entity->balance, $this->client) ?: ' ', 'label' => ctrans('texts.credit_balance')];
|
||||
|
||||
@ -361,8 +361,6 @@ class HtmlEngine
|
||||
$arrKeysLength = array_map('strlen', array_keys($data));
|
||||
array_multisort($arrKeysLength, SORT_DESC, $data);
|
||||
|
||||
//info(print_r($data,1));
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
@ -220,10 +220,8 @@ trait CompanySettingsSaver
|
||||
switch ($key) {
|
||||
case 'int':
|
||||
case 'integer':
|
||||
if(is_string($value))
|
||||
return false;
|
||||
|
||||
return is_int($value) || ctype_digit(strval(abs($value)));
|
||||
return ctype_digit(strval(abs($value)));
|
||||
// return is_int($value) || ctype_digit(strval(abs($value)));
|
||||
case 'real':
|
||||
case 'float':
|
||||
case 'double':
|
||||
|
@ -60,9 +60,6 @@ trait MakesDates
|
||||
if (!isset($date)) {
|
||||
return '';
|
||||
}
|
||||
// if (!$date || strlen($date) < 1) {
|
||||
// return '';
|
||||
// }
|
||||
|
||||
if (is_string($date)) {
|
||||
$date = $this->convertToDateObject($date);
|
||||
@ -99,4 +96,13 @@ trait MakesDates
|
||||
$dt->setTimezone(new DateTimeZone('UTC'));
|
||||
return $dt;
|
||||
}
|
||||
}
|
||||
|
||||
public function translateDate($date, $format, $locale)
|
||||
{
|
||||
|
||||
Carbon::setLocale($locale);
|
||||
return Carbon::parse($date)->translatedFormat($format);
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -1,80 +0,0 @@
|
||||
<?php
|
||||
|
||||
use App\Models\DateFormat;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class AddTranslatedDateColumn extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('date_formats', function(Blueprint $table){
|
||||
$table->string('translated_format')->default('');
|
||||
});
|
||||
|
||||
|
||||
//add multi DB support
|
||||
|
||||
if(DateFormat::count() > 0 )
|
||||
{
|
||||
$date_format = DateFormat::where('format', 'd/M/Y')->first();
|
||||
$date_format->update(['translated_format' => '%d/%b/%Y']);
|
||||
|
||||
$date_format = DateFormat::where('format', 'd-M-Y')->first();
|
||||
$date_format->update(['translated_format' => '%d-%b-%Y']);
|
||||
|
||||
$date_format = DateFormat::where('format', 'd/F/Y')->first();
|
||||
$date_format->update(['translated_format' => '%d/%B/%Y']);
|
||||
|
||||
$date_format = DateFormat::where('format', 'd-F-Y')->first();
|
||||
$date_format->update(['translated_format' => '%d-%B-%Y']);
|
||||
|
||||
$date_format = DateFormat::where('format', 'M j, Y')->first();
|
||||
$date_format->update(['translated_format' => '%b %d, %Y']);
|
||||
|
||||
$date_format = DateFormat::where('format', 'F j, Y')->first();
|
||||
$date_format->update(['translated_format' => '%B %d, %Y']);
|
||||
|
||||
$date_format = DateFormat::where('format', 'D M j, Y')->first();
|
||||
$date_format->update(['translated_format' => '%a %b %d, %Y']);
|
||||
|
||||
$date_format = DateFormat::where('format', 'Y-m-d')->first();
|
||||
$date_format->update(['translated_format' => '%Y-%m-%d']);
|
||||
|
||||
$date_format = DateFormat::where('format', 'd-m-Y')->first();
|
||||
$date_format->update(['translated_format' => '%d-%m-%Y']);
|
||||
|
||||
$date_format = DateFormat::where('format', 'm/d/Y')->first();
|
||||
$date_format->update(['translated_format' => '%m/%d/%Y']);
|
||||
|
||||
$date_format = DateFormat::where('format', 'd.m.Y')->first();
|
||||
$date_format->update(['translated_format' => '%d.%m.%Y']);
|
||||
|
||||
$date_format = DateFormat::where('format', 'j. m. Y')->first();
|
||||
$date_format->update(['translated_format' => '%d. %m. %Y']);
|
||||
|
||||
$date_format = DateFormat::where('format', 'j. F Y')->first();
|
||||
$date_format->update(['translated_format' => '%d. %B %Y']);
|
||||
|
||||
$date_format = DateFormat::where('format', 'd/m/Y')->first();
|
||||
$date_format->update(['translated_format' => '%d/%m/%Y']);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
@ -23,20 +23,20 @@ class DateFormatsSeeder extends Seeder
|
||||
|
||||
// Date formats
|
||||
$formats = [
|
||||
['id' => 1, 'format' => 'd/M/Y', 'format_moment' => 'DD/MMM/YYYY', 'format_dart' => 'dd/MMM/yyyy', 'translated_format' => '%d/%b/%Y'],
|
||||
['id' => 2, 'format' => 'd-M-Y', 'format_moment' => 'DD-MMM-YYYY', 'format_dart' => 'dd-MMM-yyyy', 'translated_format' => '%d-%b-%Y'],
|
||||
['id' => 3, 'format' => 'd/F/Y', 'format_moment' => 'DD/MMMM/YYYY', 'format_dart' => 'dd/MMMM/yyyy', 'translated_format' => '%d/%B/%Y'],
|
||||
['id' => 4, 'format' => 'd-F-Y', 'format_moment' => 'DD-MMMM-YYYY', 'format_dart' => 'dd-MMMM-yyyy', 'translated_format' => '%d-%B-%Y'],
|
||||
['id' => 5, 'format' => 'M j, Y', 'format_moment' => 'MMM D, YYYY', 'format_dart' => 'MMM d, yyyy', 'translated_format' => '%b %d, %Y'],
|
||||
['id' => 6, 'format' => 'F j, Y', 'format_moment' => 'MMMM D, YYYY', 'format_dart' => 'MMMM d, yyyy', 'translated_format' => '%B %d, %Y'],
|
||||
['id' => 7, 'format' => 'D M j, Y', 'format_moment' => 'ddd MMM Do, YYYY', 'format_dart' => 'EEE MMM d, yyyy', 'translated_format' => '%a %b %d, %Y'],
|
||||
['id' => 8, 'format' => 'Y-m-d', 'format_moment' => 'YYYY-MM-DD', 'format_dart' => 'yyyy-MM-dd', 'translated_format' => '%Y-%m-%d'],
|
||||
['id' => 9, 'format' => 'd-m-Y', 'format_moment' => 'DD-MM-YYYY', 'format_dart' => 'dd-MM-yyyy', 'translated_format' => '%d-%m-%Y'],
|
||||
['id' => 10, 'format' => 'm/d/Y', 'format_moment' => 'MM/DD/YYYY', 'format_dart' => 'MM/dd/yyyy', 'translated_format' => '%m/%d/%Y'],
|
||||
['id' => 11, 'format' => 'd.m.Y', 'format_moment' => 'D.MM.YYYY', 'format_dart' => 'dd.MM.yyyy', 'translated_format' => '%d.%m.%Y'],
|
||||
['id' => 12, 'format' => 'j. M. Y', 'format_moment' => 'DD. MMM. YYYY', 'format_dart' => 'd. MMM. yyyy', 'translated_format' => '%d. %m. %Y'],
|
||||
['id' => 13, 'format' => 'j. F Y', 'format_moment' => 'DD. MMMM YYYY', 'format_dart' => 'd. MMMM yyyy', 'translated_format' => '%d. %B %Y'],
|
||||
['id' => 14, 'format' => 'd/m/Y', 'format_moment' => 'DD/MM/YYY', 'format_dart' => 'dd/MM/yyyy', 'translated_format' => '%d/%m/%Y'],
|
||||
['id' => 1, 'format' => 'd/M/Y', 'format_moment' => 'DD/MMM/YYYY', 'format_dart' => 'dd/MMM/yyyy'],
|
||||
['id' => 2, 'format' => 'd-M-Y', 'format_moment' => 'DD-MMM-YYYY', 'format_dart' => 'dd-MMM-yyyy'],
|
||||
['id' => 3, 'format' => 'd/F/Y', 'format_moment' => 'DD/MMMM/YYYY', 'format_dart' => 'dd/MMMM/yyyy'],
|
||||
['id' => 4, 'format' => 'd-F-Y', 'format_moment' => 'DD-MMMM-YYYY', 'format_dart' => 'dd-MMMM-yyyy'],
|
||||
['id' => 5, 'format' => 'M j, Y', 'format_moment' => 'MMM D, YYYY', 'format_dart' => 'MMM d, yyyy'],
|
||||
['id' => 6, 'format' => 'F j, Y', 'format_moment' => 'MMMM D, YYYY', 'format_dart' => 'MMMM d, yyyy'],
|
||||
['id' => 7, 'format' => 'D M j, Y', 'format_moment' => 'ddd MMM Do, YYYY', 'format_dart' => 'EEE MMM d, yyyy'],
|
||||
['id' => 8, 'format' => 'Y-m-d', 'format_moment' => 'YYYY-MM-DD', 'format_dart' => 'yyyy-MM-dd'],
|
||||
['id' => 9, 'format' => 'd-m-Y', 'format_moment' => 'DD-MM-YYYY', 'format_dart' => 'dd-MM-yyyy'],
|
||||
['id' => 10, 'format' => 'm/d/Y', 'format_moment' => 'MM/DD/YYYY', 'format_dart' => 'MM/dd/yyyy'],
|
||||
['id' => 11, 'format' => 'd.m.Y', 'format_moment' => 'D.MM.YYYY', 'format_dart' => 'dd.MM.yyyy'],
|
||||
['id' => 12, 'format' => 'j. M. Y', 'format_moment' => 'DD. MMM. YYYY', 'format_dart' => 'd. MMM. yyyy'],
|
||||
['id' => 13, 'format' => 'j. F Y', 'format_moment' => 'DD. MMMM YYYY', 'format_dart' => 'd. MMMM yyyy'],
|
||||
['id' => 14, 'format' => 'd/m/Y', 'format_moment' => 'DD/MM/YYY', 'format_dart' => 'dd/MM/yyyy'],
|
||||
];
|
||||
|
||||
foreach ($formats as $format) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user