diff --git a/app/Jobs/Entity/CreateEntityPdf.php b/app/Jobs/Entity/CreateEntityPdf.php
index 90ed8079a247..e28c288fc457 100644
--- a/app/Jobs/Entity/CreateEntityPdf.php
+++ b/app/Jobs/Entity/CreateEntityPdf.php
@@ -136,6 +136,11 @@ class CreateEntityPdf implements ShouldQueue
$entity_design_id = 2;
$design = Design::find($entity_design_id);
+
+ /* Catch all in case migration doesn't pass back a valid design */
+ if(!$design)
+ $design = Design::find(2);
+
$html = new HtmlEngine($this->invitation);
if ($design->is_custom) {
diff --git a/app/PaymentDrivers/PayPalExpressPaymentDriver.php b/app/PaymentDrivers/PayPalExpressPaymentDriver.php
index 996adf4118f1..6273265069b1 100644
--- a/app/PaymentDrivers/PayPalExpressPaymentDriver.php
+++ b/app/PaymentDrivers/PayPalExpressPaymentDriver.php
@@ -211,7 +211,7 @@ class PayPalExpressPaymentDriver extends BaseDriver
return new Item([
'name' => $lineItem->product_key,
- 'description' => substr($lineItem->notes, 0, 100),
+ 'description' => substr(strip_tags($lineItem->notes), 0, 100),
'price' => $lineItem->cost,
'quantity' => $lineItem->quantity,
]);
diff --git a/app/PaymentDrivers/WePay/ACH.php b/app/PaymentDrivers/WePay/ACH.php
index 02dc8aa3f7d1..467729fdf240 100644
--- a/app/PaymentDrivers/WePay/ACH.php
+++ b/app/PaymentDrivers/WePay/ACH.php
@@ -161,7 +161,7 @@ class ACH
{
$meta = $token->meta;
$meta->state = $response->state;
- $token->meta;
+ $token->meta = $meta;
$token->save();
return redirect()->route('client.payment_methods.index');
diff --git a/app/Repositories/Migration/PaymentMigrationRepository.php b/app/Repositories/Migration/PaymentMigrationRepository.php
index 49980b60368f..7564d873c9cf 100644
--- a/app/Repositories/Migration/PaymentMigrationRepository.php
+++ b/app/Repositories/Migration/PaymentMigrationRepository.php
@@ -208,7 +208,9 @@ class PaymentMigrationRepository extends BaseRepository
$exchange_rate = new CurrencyApi();
$payment->exchange_rate = $exchange_rate->exchangeRate($client_currency, $company_currency, Carbon::parse($payment->date));
- $payment->exchange_currency_id = $client_currency;
+ // $payment->exchange_currency_id = $client_currency;
+ $payment->exchange_currency_id = $company_currency;
+
}
return $payment;
diff --git a/app/Repositories/PaymentRepository.php b/app/Repositories/PaymentRepository.php
index e0d881682316..e17cff099658 100644
--- a/app/Repositories/PaymentRepository.php
+++ b/app/Repositories/PaymentRepository.php
@@ -199,7 +199,9 @@ class PaymentRepository extends BaseRepository {
$exchange_rate = new CurrencyApi();
$payment->exchange_rate = $exchange_rate->exchangeRate($client_currency, $company_currency, Carbon::parse($payment->date));
- $payment->exchange_currency_id = $client_currency;
+ // $payment->exchange_currency_id = $client_currency;
+ $payment->exchange_currency_id = $company_currency;
+
}
return $payment;
diff --git a/app/Services/Invoice/MarkPaid.php b/app/Services/Invoice/MarkPaid.php
index ff1e0a4b5c93..68563ee5dfc7 100644
--- a/app/Services/Invoice/MarkPaid.php
+++ b/app/Services/Invoice/MarkPaid.php
@@ -113,7 +113,9 @@ class MarkPaid extends AbstractService
$exchange_rate = new CurrencyApi();
$payment->exchange_rate = $exchange_rate->exchangeRate($client_currency, $company_currency, Carbon::parse($payment->date));
- $payment->exchange_currency_id = $client_currency;
+ //$payment->exchange_currency_id = $client_currency; // 23/06/2021
+ $payment->exchange_currency_id = $company_currency;
+
$payment->save();
}
diff --git a/app/Utils/HtmlEngine.php b/app/Utils/HtmlEngine.php
index b6f6ddebb6c9..66aa53066d0e 100644
--- a/app/Utils/HtmlEngine.php
+++ b/app/Utils/HtmlEngine.php
@@ -109,11 +109,15 @@ class HtmlEngine
$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['$invoiceDate'] = &$data['$date'];
$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['$dueDate'] = &$data['$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['$poNumber'] = &$data['$invoice.po_number'];
$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'];
@@ -125,6 +129,7 @@ class HtmlEngine
$data['$entity.terms'] = ['value' => $this->entity->terms ?: '', 'label' => ctrans('texts.invoice_terms')];
$data['$terms'] = &$data['$entity.terms'];
$data['$view_link'] = ['value' => ''.ctrans('texts.view_invoice').'', 'label' => ctrans('texts.view_invoice')];
+ $data['$viewLink'] = &$data['$view_link'];
$data['$view_url'] = ['value' => $this->invitation->getLink(), 'label' => ctrans('texts.view_invoice')];
$data['$date'] = ['value' => $this->translateDate($this->entity->date, $this->entity->client->date_format(), $this->entity->client->locale()) ?: ' ', 'label' => ctrans('texts.invoice_date')];
@@ -139,6 +144,7 @@ class HtmlEngine
$data['$entity.terms'] = ['value' => $this->entity->terms ?: '', 'label' => ctrans('texts.quote_terms')];
$data['$terms'] = &$data['$entity.terms'];
$data['$view_link'] = ['value' => ''.ctrans('texts.view_quote').'', 'label' => ctrans('texts.view_quote')];
+ $data['$viewLink'] = &$data['$view_link'];
$data['$view_url'] = ['value' => $this->invitation->getLink(), 'label' => ctrans('texts.view_quote')];
$data['$date'] = ['value' => $this->translateDate($this->entity->date, $this->entity->client->date_format(), $this->entity->client->locale()) ?: ' ', 'label' => ctrans('texts.quote_date')];
}
@@ -149,6 +155,7 @@ class HtmlEngine
$data['$entity.terms'] = ['value' => $this->entity->terms ?: '', 'label' => ctrans('texts.credit_terms')];
$data['$terms'] = &$data['$entity.terms'];
$data['$view_link'] = ['value' => ''.ctrans('texts.view_credit').'', 'label' => ctrans('texts.view_credit')];
+ $data['$viewLink'] = &$data['$view_link'];
$data['$view_url'] = ['value' => $this->invitation->getLink(), 'label' => ctrans('texts.view_credit')];
// $data['$view_link'] = ['value' => $this->invitation->getLink(), 'label' => ctrans('texts.view_credit')];
$data['$date'] = ['value' => $this->translateDate($this->entity->date, $this->entity->client->date_format(), $this->entity->client->locale()) ?: ' ', 'label' => ctrans('texts.credit_date')];
@@ -171,11 +178,13 @@ class HtmlEngine
}
- $data['$quote.balance_due'] = $data['$balance_due'];
- $data['$invoice.balance_due'] = $data['$balance_due'];
+ $data['$quote.balance_due'] = &$data['$balance_due'];
+ $data['$invoice.balance_due'] = &$data['$balance_due'];
// $data['$balance_due'] = $data['$balance_due'];
- $data['$outstanding'] = $data['$balance_due'];
+ $data['$outstanding'] = &$data['$balance_due'];
$data['$partial_due'] = ['value' => Number::formatMoney($this->entity->partial, $this->client) ?: ' ', 'label' => ctrans('texts.partial_due')];
+ $data['$partial'] = &$data['$partial_due'];
+
$data['$total'] = ['value' => Number::formatMoney($this->entity_calc->getTotal(), $this->client) ?: ' ', 'label' => ctrans('texts.total')];
$data['$amount'] = &$data['$total'];
$data['$amount_due'] = ['value' => &$data['$total']['value'], 'label' => ctrans('texts.amount_due')];
@@ -205,6 +214,7 @@ class HtmlEngine
$data['$invoice.public_notes'] = ['value' => $this->entity->public_notes ?: '', 'label' => ctrans('texts.public_notes')];
$data['$entity.public_notes'] = &$data['$invoice.public_notes'];
$data['$public_notes'] = &$data['$invoice.public_notes'];
+ $data['$notes'] = &$data['$public_notes'];
$data['$entity_issued_to'] = ['value' => '', 'label' => ctrans("texts.{$this->entity_string}_issued_to")];
$data['$your_entity'] = ['value' => '', 'label' => ctrans("texts.your_{$this->entity_string}")];
@@ -249,6 +259,8 @@ class HtmlEngine
$data['$email'] = ['value' => isset($this->contact) ? $this->contact->email : 'no contact email on record', 'label' => ctrans('texts.email')];
$data['$client_name'] = ['value' => $this->entity->present()->clientName() ?: ' ', 'label' => ctrans('texts.client_name')];
$data['$client.name'] = &$data['$client_name'];
+ $data['$client'] = &$data['$client_name'];
+
$data['$client.address1'] = &$data['$address1'];
$data['$client.address2'] = &$data['$address2'];
$data['$client_address'] = ['value' => $this->client->present()->address() ?: ' ', 'label' => ctrans('texts.address')];
@@ -272,11 +284,15 @@ class HtmlEngine
$data['$paid_to_date'] = ['value' => Number::formatMoney($this->entity->paid_to_date, $this->client), 'label' => ctrans('texts.paid_to_date')];
$data['$contact.full_name'] = ['value' => $this->contact->present()->name(), 'label' => ctrans('texts.name')];
+ $data['$contact'] = &$data['$contact.full_name'];
+
$data['$contact.email'] = ['value' => $this->contact->email, 'label' => ctrans('texts.email')];
$data['$contact.phone'] = ['value' => $this->contact->phone, 'label' => ctrans('texts.phone')];
$data['$contact.name'] = ['value' => isset($this->contact) ? $this->contact->present()->name() : $this->client->present()->name(), 'label' => ctrans('texts.contact_name')];
$data['$contact.first_name'] = ['value' => isset($this->contact) ? $this->contact->first_name : '', 'label' => ctrans('texts.first_name')];
+ $data['$firstName'] = &$data['$contact.first_name'];
+
$data['$contact.last_name'] = ['value' => isset($this->contact) ? $this->contact->last_name : '', 'label' => ctrans('texts.last_name')];
@@ -288,6 +304,8 @@ class HtmlEngine
$data['$company.city_state_postal'] = ['value' => $this->company->present()->cityStateZip($this->settings->city, $this->settings->state, $this->settings->postal_code, false) ?: ' ', 'label' => ctrans('texts.city_state_postal')];
$data['$company.postal_city_state'] = ['value' => $this->company->present()->cityStateZip($this->settings->city, $this->settings->state, $this->settings->postal_code, true) ?: ' ', 'label' => ctrans('texts.postal_city_state')];
$data['$company.name'] = ['value' => $this->settings->name ?: ctrans('texts.untitled_account'), 'label' => ctrans('texts.company_name')];
+ $data['$account'] = &$data['$company.name'];
+
$data['$company.address1'] = ['value' => $this->settings->address1 ?: ' ', 'label' => ctrans('texts.address1')];
$data['$company.address2'] = ['value' => $this->settings->address2 ?: ' ', 'label' => ctrans('texts.address2')];
$data['$company.city'] = ['value' => $this->settings->city ?: ' ', 'label' => ctrans('texts.city')];
@@ -302,6 +320,7 @@ class HtmlEngine
$data['$company.address'] = ['value' => $this->company->present()->address($this->settings) ?: ' ', 'label' => ctrans('texts.address')];
$data['$signature'] = ['value' => $this->settings->email_signature ?: ' ', 'label' => ''];
+ $data['$emailSignature'] = &$data['$signature'];
$data['$spc_qr_code'] = ['value' => $this->company->present()->getSpcQrCode($this->client->currency()->code, $this->entity->number, $this->entity->balance, $this->helpers->formatCustomFieldValue($this->company->custom_fields, 'company1', $this->settings->custom_value1, $this->client)), 'label' => ''];
@@ -393,6 +412,8 @@ class HtmlEngine
$data['$page_layout'] = ['value' => property_exists($this->settings, 'page_layout') ? $this->settings->page_layout : 'Portrait', 'label' => ''];
$data['$tech_hero_image'] = ['value' => asset('images/pdf-designs/tech-hero-image.jpg'), 'label' => ''];
+ $data['$autoBill'] = ['value' => ctrans('texts.auto_bill_notification_placeholder'), 'label' => ''];
+ $data['$auto_bill'] = &$data['$autoBill'];
$arrKeysLength = array_map('strlen', array_keys($data));
array_multisort($arrKeysLength, SORT_DESC, $data);
diff --git a/app/Utils/Traits/GeneratesCounter.php b/app/Utils/Traits/GeneratesCounter.php
index 32344893f79c..4a2f9ba2cffc 100644
--- a/app/Utils/Traits/GeneratesCounter.php
+++ b/app/Utils/Traits/GeneratesCounter.php
@@ -568,13 +568,21 @@ trait GeneratesCounter
$search[] = '{$client_counter}';
$replace[] = $counter;
+ $search[] = '{$clientCounter}';
+ $replace[] = $counter;
+
$search[] = '{$group_counter}';
$replace[] = $counter;
- if (strstr($pattern, '{$user_id}')) {
+ $search[] = '{$year}';
+ $replace[] = date('Y');
+
+ if (strstr($pattern, '{$user_id}') || strstr($pattern, '{$userId}')) {
$user_id = $entity->user_id ? $entity->user_id : 0;
$search[] = '{$user_id}';
$replace[] = str_pad(($user_id), 2, '0', STR_PAD_LEFT);
+ $search[] = '{$userId}';
+ $replace[] = str_pad(($user_id), 2, '0', STR_PAD_LEFT);
}
$matches = false;
@@ -624,9 +632,15 @@ trait GeneratesCounter
$search[] = '{$client_custom1}';
$replace[] = $client->custom_value1;
+ $search[] = '{$clientCustom1}';
+ $replace[] = $client->custom_value1;
+
$search[] = '{$client_custom2}';
$replace[] = $client->custom_value2;
+ $search[] = '{$clientCustom2}';
+ $replace[] = $client->custom_value2;
+
$search[] = '{$client_custom3}';
$replace[] = $client->custom_value3;
@@ -638,6 +652,9 @@ trait GeneratesCounter
$search[] = '{$client_id_number}';
$replace[] = $client->id_number;
+
+ $search[] = '{$clientIdNumber}';
+ $replace[] = $client->id_number;
}
return str_replace($search, $replace, $pattern);