This commit is contained in:
David Bomba 2025-06-20 08:30:08 +10:00
parent c5cdf2c7d8
commit 1f98257db8
8 changed files with 87 additions and 50 deletions

View File

@ -1 +1 @@
5.12.3
5.12.4

View File

@ -64,6 +64,9 @@ class SendToAdmin implements ShouldQueue
$export = new $this->report_class($this->company, $this->request);
$csv = base64_encode($export->run());
$size_mb = round(strlen($csv) / (1024 * 1024), 2); // Size in MB
nlog("Report Size: MB " . $size_mb);
$files = [];
$files[] = ['file' => $csv, 'file_name' => "{$this->file_name}", 'mime' => 'text/csv'];

View File

@ -20,10 +20,7 @@ class PDF extends FPDI
public function Footer()
{
$this->SetXY(config('ninja.pdf_page_numbering_x_alignment'), config('ninja.pdf_page_numbering_y_alignment'));
$this->SetFont('Arial', 'I', 9);
$this->SetTextColor(135, 135, 135);
$trans = ctrans('texts.pdf_page_info', ['current' => $this->PageNo(), 'total' => '{nb}']);
@ -33,7 +30,20 @@ class PDF extends FPDI
} catch (\Exception $e) {
}
$this->Cell(0, 5, $trans, 0, 0, $this->text_alignment);
// Set Y position
$this->SetY(config('ninja.pdf_page_numbering_y_alignment'));
// Set X position based on alignment
if ($this->text_alignment == 'L') {
$this->SetX(config('ninja.pdf_page_numbering_y_alignment')); // 10mm from left edge
$this->Cell($this->GetPageWidth() - 10, 5, $trans, 0, 0, 'L');
} elseif ($this->text_alignment == 'R') {
$this->SetX(0);
$this->Cell($this->GetPageWidth(), 5, $trans, 0, 0, 'R');
} else {
$this->SetX(0);
$this->Cell($this->GetPageWidth(), 5, $trans, 0, 0, 'C');
}
}
public function setAlignment($alignment)

View File

@ -17,8 +17,8 @@ return [
'require_https' => env('REQUIRE_HTTPS', true),
'app_url' => rtrim(env('APP_URL', ''), '/'),
'app_domain' => env('APP_DOMAIN', 'invoicing.co'),
'app_version' => env('APP_VERSION', '5.12.3'),
'app_tag' => env('APP_TAG', '5.12.3'),
'app_version' => env('APP_VERSION', '5.12.4'),
'app_tag' => env('APP_TAG', '5.12.4'),
'minimum_client_version' => '5.0.16',
'terms_version' => '1.0.1',
'api_secret' => env('API_SECRET', false),
@ -257,7 +257,7 @@ return [
'storecove_email_catchall' => env('STORECOVE_CATCHALL_EMAIL',false),
'qvalia_api_key' => env('QVALIA_API_KEY', false),
'qvalia_partner_number' => env('QVALIA_PARTNER_NUMBER', false),
'pdf_page_numbering_x_alignment' => env('PDF_PAGE_NUMBER_X', 0),
'pdf_page_numbering_x_alignment' => env('PDF_PAGE_NUMBER_X', 5),
'pdf_page_numbering_y_alignment' => env('PDF_PAGE_NUMBER_Y', -6),
'hosted_einvoice_secret' => env('HOSTED_EINVOICE_SECRET', null),
'e_invoice_quota_warning' => env('E_INVOICE_QUOTA_WARNING', 15),

View File

@ -144,7 +144,7 @@ $lang = array(
'payment_amount' => 'Zahlungsbetrag',
'payment_date' => 'Zahlungsdatum',
'credit_amount' => 'Gutschriftsbetrag',
'credit_balance' => 'Gutschrifsstand',
'credit_balance' => 'Gutschriftsstand',
'credit_date' => 'Gutschriftsdatum',
'empty_table' => 'Es sind keine Daten vorhanden',
'select' => 'Wählen',
@ -739,7 +739,7 @@ $lang = array(
'activity_7' => ':contact hat Rechnung :invoice für :client angesehen',
'activity_8' => ':user archivierte Rechnung :invoice',
'activity_9' => ':user löschte Rechnung :invoice',
'activity_10' => ':user hat die Zahlung :payment über :payment_amount der Rechnung :invoice für Kunde :client eingegeben.',
'activity_10' => ':user hat die Zahlung :payment über :payment_amount der Rechnung :invoice für Kunde :client eingegeben',
'activity_11' => ':user aktualisierte Zahlung :payment',
'activity_12' => ':user archivierte Zahlung :payment',
'activity_13' => ':user löschte Zahlung :payment',
@ -4877,7 +4877,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'number_of_payments' => 'Anzahl der Zahlungen',
'number_of_payments_helper' => 'Die Häufigkeit, mit der diese Zahlung erfolgt',
'pre_payment_indefinitely' => 'Fortfahren bis auf Widerruf',
'notification_payment_emailed' => 'Zahlung :payment wurde per E-Mail an den Kunden gesendet',
'notification_payment_emailed' => 'Zahlung :payment wurde per E-Mail an den Kunden :client gesendet',
'notification_payment_emailed_subject' => 'Zahlung :payment wurde per E-Mail gesendet',
'record_not_found' => 'Aufnahme nicht gefunden',
'minimum_payment_amount' => 'Mindestzahlungsbetrag',
@ -4887,7 +4887,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'cc_email' => 'CC-E-Mail',
'payment_balance' => 'Zahlungsbilanz',
'view_report_permission' => 'Benutzern Zugriff auf die Berichte gewähren, Daten sind auf verfügbare Berechtigungen beschränkt',
'activity_138' => 'Zahlung :payment wurde per E-Mail an den Kunden :client',
'activity_138' => 'Zahlung :payment wurde per E-Mail an den Kunden :client gesendet',
'one_time_products' => 'Einmalige Produkte',
'optional_one_time_products' => 'Optionale einmalige Produkte',
'required' => 'Erforderlich',
@ -5589,6 +5589,12 @@ Leistungsempfängers',
'activity_150' => 'Account deleted :notes',
'docuninja' => 'DocuNinja',
'pro_rata' => 'Pro Rata',
'change_docuninja_plan' => 'Change DocuNinja Plan',
'downgrade_end_of_cycle' => 'Your plan will automatically downgrade at the end of the current billing cycle.',
'docuninja_change_users' => 'New DocuNinja user limit',
'docuninja_disable_warning' => 'This will remove all access to your DocuNinja account.',
'docuninja_downgrade_info' => 'Your user limit will automatically be reduced at the end of the current billing cycle.',
'recurring_invoice_item' => 'Recurring Invoice Item',
);
return $lang;

View File

@ -104,7 +104,7 @@ $lang = array(
<li>":YEAR+1 suscripción anual" >> "2015 suscripción anual"</li>
<li>"Pago retenido para :QUARTER+1" >> "Pago retenido para T2"</li>
</ul>',
'recurring_quotes' => 'Presupuestos Recurrentes',
'recurring_quotes' => 'Cotizaciones Recurrentes',
'in_total_revenue' => 'Ingreso Total',
'billed_client' => 'Cliente Facturado',
'billed_clients' => 'Clientes Facturados',
@ -303,37 +303,37 @@ $lang = array(
'chart_builder' => 'Constructor de Gráficas',
'ninja_email_footer' => 'Creado por :site | Crea. Envia. Recibe tus Pagos.',
'go_pro' => 'Hazte Pro',
'quote' => 'Presupuesto',
'quotes' => 'Presupuestos',
'quote_number' => 'Número de Presupuesto',
'quote_number_short' => 'Presupuesto Nº ',
'quote_date' => 'Fecha de Presupuesto',
'quote_total' => 'Total Presupuestado',
'your_quote' => 'Su Presupuesto',
'quote' => 'Cotización',
'quotes' => 'Cotizaciones',
'quote_number' => 'Número de Cotización',
'quote_number_short' => 'Cotización Nº ',
'quote_date' => 'Fecha de Cotización',
'quote_total' => 'Total Cotizado',
'your_quote' => 'Su Cotización',
'total' => 'Total',
'clone' => 'Clonar',
'new_quote' => 'Nuevo Presupuesto',
'create_quote' => 'Crear Presupuesto',
'edit_quote' => 'Editar Presupuesto',
'archive_quote' => 'Archivar Presupuesto',
'delete_quote' => 'Eliminar Presupuesto',
'save_quote' => 'Guardar Presupuesto',
'email_quote' => 'Enviar Presupuesto',
'clone_quote' => 'Clonar Presupuesto',
'new_quote' => 'Nueva Cotización',
'create_quote' => 'Crear Cotización',
'edit_quote' => 'Editar Cotización',
'archive_quote' => 'Archivar Cotización',
'delete_quote' => 'Eliminar Cotización',
'save_quote' => 'Guardar Cotización',
'email_quote' => 'Enviar Cotización',
'clone_quote' => 'Clonar Cotización',
'convert_to_invoice' => 'Convertir a Factura',
'view_invoice' => 'Ver Factura',
'view_client' => 'Ver Cliente',
'view_quote' => 'Ver Presupuesto',
'updated_quote' => 'Presupuesto actualizado correctamente',
'created_quote' => 'Presupuesto creado correctamente',
'cloned_quote' => 'Presupuesto clonado correctamente',
'emailed_quote' => 'Presupuesto enviado correctamente',
'archived_quote' => 'Presupuesto archivado correctamente',
'archived_quotes' => ':count Presupuestos archivados correctamente',
'deleted_quote' => 'Presupuesto eliminado correctamente',
'deleted_quotes' => ':count Presupuestos eliminados correctamente',
'converted_to_invoice' => 'Presupuesto convertido a factura correctamente',
'quote_subject' => 'Nueva presupuesto :number de :account',
'view_quote' => 'Ver Cotización',
'updated_quote' => 'Cotización actualizada correctamente',
'created_quote' => 'Cotización creada correctamente',
'cloned_quote' => 'Cotización clonada correctamente',
'emailed_quote' => 'Cotización enviada correctamente',
'archived_quote' => 'Cotización archivada correctamente',
'archived_quotes' => ':count Cotizaciones archivadas correctamente',
'deleted_quote' => 'Cotización eliminada correctamente',
'deleted_quotes' => ':count Cotizaciones eliminadas correctamente',
'converted_to_invoice' => 'Cotizaciones convertidas a factura correctamente',
'quote_subject' => 'Nueva Cotización :number de :account',
'quote_message' => 'Para ver el presupuesto por un importe de :amount, haga click en el enlace de abajo.',
'quote_link_message' => 'Para ver su presupuesto haga click en el enlace de abajo:',
'notification_quote_sent_subject' => 'El presupuesto :invoice se ha enviada al cliente :client',
@ -1865,7 +1865,7 @@ Una vez que tenga los montos, vuelva a esta página de métodos de pago y haga c
'upgrade_for_features' => 'Actualizate para más características',
'pay_annually_discount' => '¡Pague anualmente por 10 meses + 2 gratis!',
'pro_upgrade_title' => 'Ninja Pro',
'pro_upgrade_feature1' => 'YourBrand.invoicing.co',
'pro_upgrade_feature1' => 'SuMarcaFactura.com',
'pro_upgrade_feature2' => '¡Personaliza cada detalle de tu factura!',
'enterprise_upgrade_feature1' => 'Establecer permisos para múltiples usuarios',
'enterprise_upgrade_feature2' => 'Adjuntar archivos de terceros a facturas y gastos',
@ -5527,7 +5527,7 @@ De lo contrario, este campo deberá dejarse en blanco.',
'premium_business_plus_label' => 'Premium Business+',
'pro_plan_feature_1' => 'Clientes y facturas ilimitados',
'pro_plan_feature_2' => 'Eliminar &quot;Creado por Invoice Ninja&quot;',
'pro_plan_feature_3' => 'Email Invoices via Gmail & Microsoft',
'pro_plan_feature_3' => 'Enviar facturas a través de gMail & Microsoft',
'pro_plan_feature_4' => 'Facturas por correo electrónico a través de su SMTP personalizado',
'pro_plan_feature_5' => 'URL de marca: &quot;YourSite&quot;.Invoicing.co',
'pro_plan_feature_6' => '11 plantillas de facturas profesionales',
@ -5543,10 +5543,10 @@ De lo contrario, este campo deberá dejarse en blanco.',
'pro_plan_feature_16' => 'Interlink 10 Empresas con 1 Login',
'pro_plan_feature_17' => 'Crear configuraciones únicas de &quot;Grupo de clientes&quot;',
'pro_plan_feature_18' => 'Cálculo del impuesto sobre las ventas de automóviles (estados de EE. UU.)',
'enterprise_plan_feature_1' => 'Additional Account Users & Permissions',
'enterprise_plan_feature_2' => 'Upload & Attach Files',
'enterprise_plan_feature_3' => 'Custom Portal Domain',
'enterprise_plan_feature_4' => 'Bank account sync',
'enterprise_plan_feature_1' => 'Usuarios Adicionales de la Cuenta & Permisos',
'enterprise_plan_feature_2' => 'Subir y Adjuntar Documentos',
'enterprise_plan_feature_3' => 'Dominio Personalizado del Portal',
'enterprise_plan_feature_4' => 'Sync de Cuenta Bancaria',
'premium_business_plus_feature_1' => 'Conserje para desarrolladores',
'premium_business_plus_feature_2' => 'Apoyo prioritario directo',
'premium_business_plus_feature_3' => 'Servicio de diseño de facturas',
@ -5573,15 +5573,21 @@ De lo contrario, este campo deberá dejarse en blanco.',
'deleted_location' => 'Ubicación eliminada',
'currency_caribbean_guilder' => 'Caribbean Guilder',
'is_shipping' => 'Is Shipping',
'added_location' => 'Successfully added location',
'send_emails' => 'Send Emails',
'send_emails_permission' => 'Allow user to send emails',
'cancel_trial' => 'Cancel Trial',
'added_location' => 'Exitosamente se añadió localidad',
'send_emails' => 'Enviar Correos Electrónicos',
'send_emails_permission' => 'Permitir al usuario enviar correos electrónicos',
'cancel_trial' => 'Cancelar Prueba',
'cancel_trial_description' => 'This will cancel your trial and remove all paid features from your account.',
'existing_gateway' => 'Gateway already exists',
'activity_150' => 'Account deleted :notes',
'activity_150' => 'Cuenta borrada',
'docuninja' => 'DocuNinja',
'pro_rata' => 'Pro Rata',
'change_docuninja_plan' => 'Change DocuNinja Plan',
'downgrade_end_of_cycle' => 'Your plan will automatically downgrade at the end of the current billing cycle.',
'docuninja_change_users' => 'New DocuNinja user limit',
'docuninja_disable_warning' => 'This will remove all access to your DocuNinja account.',
'docuninja_downgrade_info' => 'Your user limit will automatically be reduced at the end of the current billing cycle.',
'recurring_invoice_item' => 'Recurring Invoice Item',
);
return $lang;

View File

@ -5583,6 +5583,12 @@ Développe automatiquement la section des notes dans le tableau de produits pour
'activity_150' => 'Compte supprimé :notes',
'docuninja' => 'DocuNinja',
'pro_rata' => 'Pro Rata',
'change_docuninja_plan' => 'Changez de plan DocuNinja',
'downgrade_end_of_cycle' => 'Votre plan sera automatiquement ajusté à la fin de votre cycle de paiement.',
'docuninja_change_users' => 'Nouvelle limite d\'utilisateur DocuNinja',
'docuninja_disable_warning' => 'Retirer les accès à votre compte DocuNinja',
'docuninja_downgrade_info' => 'Votre limite d\'utilisateur sera automatiquement ajusté à la fin de votre cycle de paiement.',
'recurring_invoice_item' => 'Article de facture récurrente',
);
return $lang;

View File

@ -5585,6 +5585,12 @@ $lang = array(
'activity_150' => 'tài khoản đã xóa :notes',
'docuninja' => 'DocuNinja',
'pro_rata' => 'Tỷ lệ',
'change_docuninja_plan' => 'Thay đổi gói DocuNinja',
'downgrade_end_of_cycle' => 'Gói cước của bạn sẽ tự động hạ cấp vào cuối chu kỳ thanh toán hiện tại.',
'docuninja_change_users' => 'Giới hạn Người dùng DocuNinja mới',
'docuninja_disable_warning' => 'Thao tác này sẽ xóa tất cả quyền truy cập đến tài khoản DocuNinja của bạn.',
'docuninja_downgrade_info' => 'Hạn mức Người dùng của bạn sẽ tự động giảm vào cuối chu kỳ thanh toán hiện tại.',
'recurring_invoice_item' => 'Định kỳ Hóa đơn Item',
);
return $lang;