mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2024-11-11 05:32:39 +01:00
Merge pull request #7657 from turbo124/v5-develop
Ensure signature is provided in client portal prior to moving to next step
This commit is contained in:
commit
419405b858
@ -49,6 +49,7 @@ class InvoiceFactory
|
|||||||
$invoice->user_id = $user_id;
|
$invoice->user_id = $user_id;
|
||||||
$invoice->company_id = $company_id;
|
$invoice->company_id = $company_id;
|
||||||
$invoice->recurring_id = null;
|
$invoice->recurring_id = null;
|
||||||
|
$invoice->exchange_rate = 1;
|
||||||
|
|
||||||
return $invoice;
|
return $invoice;
|
||||||
}
|
}
|
||||||
|
@ -269,10 +269,7 @@ class SelfUpdateController extends BaseController
|
|||||||
if(strpos($file->getPathname(), '.git') !== false)
|
if(strpos($file->getPathname(), '.git') !== false)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
//nlog($file->getPathname());
|
|
||||||
|
|
||||||
if ($file->isFile() && ! $file->isWritable()) {
|
if ($file->isFile() && ! $file->isWritable()) {
|
||||||
// throw new FilePermissionsFailure($file);
|
|
||||||
nlog("Cannot update system because {$file->getFileName()} is not writable");
|
nlog("Cannot update system because {$file->getFileName()} is not writable");
|
||||||
throw new FilePermissionsFailure("Cannot update system because {$file->getFileName()} is not writable");
|
throw new FilePermissionsFailure("Cannot update system because {$file->getFileName()} is not writable");
|
||||||
return false;
|
return false;
|
||||||
|
@ -17,12 +17,15 @@ use App\Events\Invoice\InvoiceWasUpdated;
|
|||||||
use App\Helpers\Invoice\InvoiceSum;
|
use App\Helpers\Invoice\InvoiceSum;
|
||||||
use App\Helpers\Invoice\InvoiceSumInclusive;
|
use App\Helpers\Invoice\InvoiceSumInclusive;
|
||||||
use App\Jobs\Entity\CreateEntityPdf;
|
use App\Jobs\Entity\CreateEntityPdf;
|
||||||
|
use App\Models\Expense;
|
||||||
use App\Models\Presenters\InvoicePresenter;
|
use App\Models\Presenters\InvoicePresenter;
|
||||||
|
use App\Models\Task;
|
||||||
use App\Services\Invoice\InvoiceService;
|
use App\Services\Invoice\InvoiceService;
|
||||||
use App\Services\Ledger\LedgerService;
|
use App\Services\Ledger\LedgerService;
|
||||||
use App\Utils\Ninja;
|
use App\Utils\Ninja;
|
||||||
use App\Utils\Traits\Invoice\ActionsInvoice;
|
use App\Utils\Traits\Invoice\ActionsInvoice;
|
||||||
use App\Utils\Traits\MakesDates;
|
use App\Utils\Traits\MakesDates;
|
||||||
|
use App\Utils\Traits\MakesHash;
|
||||||
use App\Utils\Traits\MakesInvoiceValues;
|
use App\Utils\Traits\MakesInvoiceValues;
|
||||||
use App\Utils\Traits\MakesReminders;
|
use App\Utils\Traits\MakesReminders;
|
||||||
use App\Utils\Traits\NumberFormatter;
|
use App\Utils\Traits\NumberFormatter;
|
||||||
@ -562,6 +565,56 @@ class Invoice extends BaseModel
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function expense_documents()
|
||||||
|
{
|
||||||
|
|
||||||
|
$line_items = $this->line_items;
|
||||||
|
|
||||||
|
$expense_ids = [];
|
||||||
|
|
||||||
|
foreach($line_items as $item)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(property_exists($item, 'expense_id'))
|
||||||
|
{
|
||||||
|
$expense_ids[] = $item->expense_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return Expense::whereIn('id', $this->transformKeys($expense_ids))
|
||||||
|
->where('invoice_documents', 1)
|
||||||
|
->where('company_id', $this->company_id)
|
||||||
|
->cursor();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function task_documents()
|
||||||
|
{
|
||||||
|
|
||||||
|
$line_items = $this->line_items;
|
||||||
|
|
||||||
|
$task_ids = [];
|
||||||
|
|
||||||
|
foreach($line_items as $item)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(property_exists($item, 'task_id'))
|
||||||
|
{
|
||||||
|
$task_ids[] = $item->task_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task::whereIn('id', $this->transformKeys($task_ids))
|
||||||
|
->whereHas('company', function($query){
|
||||||
|
$query->where('invoice_task_documents', 1);
|
||||||
|
})
|
||||||
|
->where('company_id', $this->company_id)
|
||||||
|
->cursor();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public function translate_entity()
|
public function translate_entity()
|
||||||
{
|
{
|
||||||
return ctrans('texts.invoice');
|
return ctrans('texts.invoice');
|
||||||
|
@ -155,6 +155,7 @@ class VendorHtmlEngine
|
|||||||
$data['$purchase_order.date'] = &$data['$date'];
|
$data['$purchase_order.date'] = &$data['$date'];
|
||||||
$data['$purchase_order.po_number'] = &$data['$poNumber'];
|
$data['$purchase_order.po_number'] = &$data['$poNumber'];
|
||||||
$data['$purchase_order.due_date'] = &$data['$due_date'];
|
$data['$purchase_order.due_date'] = &$data['$due_date'];
|
||||||
|
$data['$entity_issued_to'] = ['value' => '', 'label' => ctrans("texts.purchase_order_issued_to")];
|
||||||
|
|
||||||
$data['$portal_url'] = ['value' => $this->invitation->getPortalLink(), 'label' =>''];
|
$data['$portal_url'] = ['value' => $this->invitation->getPortalLink(), 'label' =>''];
|
||||||
|
|
||||||
|
2
public/css/app.css
vendored
2
public/css/app.css
vendored
File diff suppressed because one or more lines are too long
2
public/js/clients/invoices/payment.js
vendored
2
public/js/clients/invoices/payment.js
vendored
@ -1,2 +1,2 @@
|
|||||||
/*! For license information please see payment.js.LICENSE.txt */
|
/*! For license information please see payment.js.LICENSE.txt */
|
||||||
(()=>{function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}var t=function(){function t(e,n){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),this.shouldDisplayTerms=e,this.shouldDisplaySignature=n,this.termsAccepted=!1,this.submitting=!1}var n,i,a;return n=t,(i=[{key:"handleMethodSelect",value:function(e){var t=this;document.getElementById("company_gateway_id").value=e.dataset.companyGatewayId,document.getElementById("payment_method_id").value=e.dataset.gatewayTypeId,this.shouldDisplaySignature&&!this.shouldDisplayTerms&&(this.displayTerms(),document.getElementById("accept-terms-button").addEventListener("click",(function(){t.termsAccepted=!0,t.submitForm()}))),!this.shouldDisplaySignature&&this.shouldDisplayTerms&&(this.displaySignature(),document.getElementById("signature-next-step").addEventListener("click",(function(){document.querySelector('input[name="signature"').value=t.signaturePad.toDataURL(),t.submitForm()}))),this.shouldDisplaySignature&&this.shouldDisplayTerms&&(this.displaySignature(),document.getElementById("signature-next-step").addEventListener("click",(function(){t.displayTerms(),document.getElementById("accept-terms-button").addEventListener("click",(function(){document.querySelector('input[name="signature"').value=t.signaturePad.toDataURL(),t.termsAccepted=!0,t.submitForm()}))}))),this.shouldDisplaySignature||this.shouldDisplayTerms||this.submitForm()}},{key:"submitForm",value:function(){this.submitting=!0,document.getElementById("payment-form").submit()}},{key:"displayTerms",value:function(){document.getElementById("displayTermsModal").removeAttribute("style")}},{key:"displaySignature",value:function(){document.getElementById("displaySignatureModal").removeAttribute("style");var e=new SignaturePad(document.getElementById("signature-pad"),{penColor:"rgb(0, 0, 0)"});this.signaturePad=e}},{key:"handle",value:function(){var e=this;document.querySelectorAll(".dropdown-gateway-button").forEach((function(t){t.addEventListener("click",(function(){e.submitting||e.handleMethodSelect(t)}))}))}}])&&e(n.prototype,i),a&&e(n,a),Object.defineProperty(n,"prototype",{writable:!1}),t}(),n=document.querySelector('meta[name="require-invoice-signature"]').content,i=document.querySelector('meta[name="show-invoice-terms"]').content;new t(Boolean(+n),Boolean(+i)).handle()})();
|
(()=>{function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}var t=function(){function t(e,n){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),this.shouldDisplayTerms=e,this.shouldDisplaySignature=n,this.termsAccepted=!1,this.submitting=!1}var n,i,a;return n=t,(i=[{key:"handleMethodSelect",value:function(e){var t=this;document.getElementById("company_gateway_id").value=e.dataset.companyGatewayId,document.getElementById("payment_method_id").value=e.dataset.gatewayTypeId,this.shouldDisplaySignature&&!this.shouldDisplayTerms&&(this.signaturePad.isEmpty()&&alert("Please sign"),this.displayTerms(),document.getElementById("accept-terms-button").addEventListener("click",(function(){t.termsAccepted=!0,t.submitForm()}))),!this.shouldDisplaySignature&&this.shouldDisplayTerms&&(this.displaySignature(),document.getElementById("signature-next-step").addEventListener("click",(function(){document.querySelector('input[name="signature"').value=t.signaturePad.toDataURL(),t.submitForm()}))),this.shouldDisplaySignature&&this.shouldDisplayTerms&&(this.displaySignature(),document.getElementById("signature-next-step").addEventListener("click",(function(){t.displayTerms(),document.getElementById("accept-terms-button").addEventListener("click",(function(){document.querySelector('input[name="signature"').value=t.signaturePad.toDataURL(),t.termsAccepted=!0,t.submitForm()}))}))),this.shouldDisplaySignature||this.shouldDisplayTerms||this.submitForm()}},{key:"submitForm",value:function(){this.submitting=!0,document.getElementById("payment-form").submit()}},{key:"displayTerms",value:function(){document.getElementById("displayTermsModal").removeAttribute("style")}},{key:"displaySignature",value:function(){document.getElementById("displaySignatureModal").removeAttribute("style");var e=new SignaturePad(document.getElementById("signature-pad"),{penColor:"rgb(0, 0, 0)"});e.onEnd=function(){document.getElementById("signature-next-step").disabled=!1},this.signaturePad=e}},{key:"handle",value:function(){var e=this;document.getElementById("signature-next-step").disabled=!0,document.querySelectorAll(".dropdown-gateway-button").forEach((function(t){t.addEventListener("click",(function(){e.submitting||e.handleMethodSelect(t)}))}))}}])&&e(n.prototype,i),a&&e(n,a),Object.defineProperty(n,"prototype",{writable:!1}),t}(),n=document.querySelector('meta[name="require-invoice-signature"]').content,i=document.querySelector('meta[name="show-invoice-terms"]').content;new t(Boolean(+n),Boolean(+i)).handle()})();
|
83
public/js/clients/payments/forte-ach-payment.js
vendored
83
public/js/clients/payments/forte-ach-payment.js
vendored
@ -1,81 +1,2 @@
|
|||||||
/******/ (() => { // webpackBootstrap
|
/*! For license information please see forte-ach-payment.js.LICENSE.txt */
|
||||||
var __webpack_exports__ = {};
|
(()=>{function e(e,n){for(var t=0;t<n.length;t++){var o=n[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function n(n,t,o){return t&&e(n.prototype,t),o&&e(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n}function t(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}var o=n((function e(n){var o=this;!function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}(this,e),t(this,"handleAuthorization",(function(){var e=document.getElementById("account-number").value,n=document.getElementById("routing-number").value,t={api_login_id:o.apiLoginId,account_number:e,routing_number:n,account_type:"checking"};return document.getElementById("pay-now")&&(document.getElementById("pay-now").disabled=!0,document.querySelector("#pay-now > svg").classList.remove("hidden"),document.querySelector("#pay-now > span").classList.add("hidden")),forte.createToken(t).success(o.successResponseHandler).error(o.failedResponseHandler),!1})),t(this,"successResponseHandler",(function(e){return document.getElementById("payment_token").value=e.onetime_token,document.getElementById("server_response").submit(),!1})),t(this,"failedResponseHandler",(function(e){var n='<div class="alert alert-failure mb-4"><ul><li>'+e.response_description+"</li></ul></div>";return document.getElementById("forte_errors").innerHTML=n,document.getElementById("pay-now").disabled=!1,document.querySelector("#pay-now > svg").classList.add("hidden"),document.querySelector("#pay-now > span").classList.remove("hidden"),!1})),t(this,"handle",(function(){var e=document.getElementById("pay-now");return e&&e.addEventListener("click",(function(e){o.handleAuthorization()})),o})),this.apiLoginId=n}));new o(document.querySelector('meta[name="forte-api-login-id"]').content).handle()})();
|
||||||
/*!************************************************************!*\
|
|
||||||
!*** ./resources/js/clients/payments/forte-ach-payment.js ***!
|
|
||||||
\************************************************************/
|
|
||||||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
||||||
|
|
||||||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Invoice Ninja (https://invoiceninja.com)
|
|
||||||
*
|
|
||||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
|
||||||
*
|
|
||||||
* @copyright Copyright (c) 2021. Invoice Ninja LLC (https://invoiceninja.com)
|
|
||||||
*
|
|
||||||
* @license https://opensource.org/licenses/AAL
|
|
||||||
*/
|
|
||||||
var ForteAuthorizeACH = function ForteAuthorizeACH(apiLoginId) {
|
|
||||||
var _this = this;
|
|
||||||
|
|
||||||
_classCallCheck(this, ForteAuthorizeACH);
|
|
||||||
|
|
||||||
_defineProperty(this, "handleAuthorization", function () {
|
|
||||||
var account_number = document.getElementById('account-number').value;
|
|
||||||
var routing_number = document.getElementById('routing-number').value;
|
|
||||||
var data = {
|
|
||||||
api_login_id: _this.apiLoginId,
|
|
||||||
account_number: account_number,
|
|
||||||
routing_number: routing_number,
|
|
||||||
account_type: 'checking'
|
|
||||||
};
|
|
||||||
var payNowButton = document.getElementById('pay-now');
|
|
||||||
|
|
||||||
if (payNowButton) {
|
|
||||||
document.getElementById('pay-now').disabled = true;
|
|
||||||
document.querySelector('#pay-now > svg').classList.remove('hidden');
|
|
||||||
document.querySelector('#pay-now > span').classList.add('hidden');
|
|
||||||
} // console.log(data);
|
|
||||||
|
|
||||||
|
|
||||||
forte.createToken(data).success(_this.successResponseHandler).error(_this.failedResponseHandler);
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
_defineProperty(this, "successResponseHandler", function (response) {
|
|
||||||
document.getElementById('payment_token').value = response.onetime_token;
|
|
||||||
document.getElementById('server_response').submit();
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
_defineProperty(this, "failedResponseHandler", function (response) {
|
|
||||||
var errors = '<div class="alert alert-failure mb-4"><ul><li>' + response.response_description + '</li></ul></div>';
|
|
||||||
document.getElementById('forte_errors').innerHTML = errors;
|
|
||||||
document.getElementById('pay-now').disabled = false;
|
|
||||||
document.querySelector('#pay-now > svg').classList.add('hidden');
|
|
||||||
document.querySelector('#pay-now > span').classList.remove('hidden');
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
_defineProperty(this, "handle", function () {
|
|
||||||
var payNowButton = document.getElementById('pay-now');
|
|
||||||
|
|
||||||
if (payNowButton) {
|
|
||||||
payNowButton.addEventListener('click', function (e) {
|
|
||||||
_this.handleAuthorization();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return _this;
|
|
||||||
});
|
|
||||||
|
|
||||||
this.apiLoginId = apiLoginId;
|
|
||||||
};
|
|
||||||
|
|
||||||
var apiLoginId = document.querySelector('meta[name="forte-api-login-id"]').content;
|
|
||||||
/** @handle */
|
|
||||||
|
|
||||||
new ForteAuthorizeACH(apiLoginId).handle();
|
|
||||||
/******/ })()
|
|
||||||
;
|
|
@ -1,82 +1,2 @@
|
|||||||
/******/ (() => { // webpackBootstrap
|
/*! For license information please see forte-credit-card-payment.js.LICENSE.txt */
|
||||||
var __webpack_exports__ = {};
|
(()=>{function e(e,n){for(var t=0;t<n.length;t++){var r=n[t];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function n(n,t,r){return t&&e(n.prototype,t),r&&e(n,r),Object.defineProperty(n,"prototype",{writable:!1}),n}function t(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}var r=n((function e(n){var r=this;!function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}(this,e),t(this,"handleAuthorization",(function(){var e=$("#my-card"),n={api_login_id:r.apiLoginId,card_number:e.CardJs("cardNumber").replace(/[^\d]/g,""),expire_year:e.CardJs("expiryYear").replace(/[^\d]/g,""),expire_month:e.CardJs("expiryMonth").replace(/[^\d]/g,""),cvv:document.getElementById("cvv").value.replace(/[^\d]/g,"")};return document.getElementById("pay-now")&&(document.getElementById("pay-now").disabled=!0,document.querySelector("#pay-now > svg").classList.remove("hidden"),document.querySelector("#pay-now > span").classList.add("hidden")),forte.createToken(n).success(r.successResponseHandler).error(r.failedResponseHandler),!1})),t(this,"successResponseHandler",(function(e){return document.getElementById("payment_token").value=e.onetime_token,document.getElementById("card_brand").value=e.card_type,document.getElementById("server_response").submit(),!1})),t(this,"failedResponseHandler",(function(e){var n='<div class="alert alert-failure mb-4"><ul><li>'+e.response_description+"</li></ul></div>";return document.getElementById("forte_errors").innerHTML=n,document.getElementById("pay-now").disabled=!1,document.querySelector("#pay-now > svg").classList.add("hidden"),document.querySelector("#pay-now > span").classList.remove("hidden"),!1})),t(this,"handle",(function(){var e=document.getElementById("pay-now");return e&&e.addEventListener("click",(function(e){r.handleAuthorization()})),r})),this.apiLoginId=n,this.cardHolderName=document.getElementById("cardholder_name")}));new r(document.querySelector('meta[name="forte-api-login-id"]').content).handle()})();
|
||||||
/*!********************************************************************!*\
|
|
||||||
!*** ./resources/js/clients/payments/forte-credit-card-payment.js ***!
|
|
||||||
\********************************************************************/
|
|
||||||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
||||||
|
|
||||||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Invoice Ninja (https://invoiceninja.com)
|
|
||||||
*
|
|
||||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
|
||||||
*
|
|
||||||
* @copyright Copyright (c) 2021. Invoice Ninja LLC (https://invoiceninja.com)
|
|
||||||
*
|
|
||||||
* @license https://opensource.org/licenses/AAL
|
|
||||||
*/
|
|
||||||
var ForteAuthorizeCard = function ForteAuthorizeCard(apiLoginId) {
|
|
||||||
var _this = this;
|
|
||||||
|
|
||||||
_classCallCheck(this, ForteAuthorizeCard);
|
|
||||||
|
|
||||||
_defineProperty(this, "handleAuthorization", function () {
|
|
||||||
var myCard = $('#my-card');
|
|
||||||
var data = {
|
|
||||||
api_login_id: _this.apiLoginId,
|
|
||||||
card_number: myCard.CardJs('cardNumber').replace(/[^\d]/g, ''),
|
|
||||||
expire_year: myCard.CardJs('expiryYear').replace(/[^\d]/g, ''),
|
|
||||||
expire_month: myCard.CardJs('expiryMonth').replace(/[^\d]/g, ''),
|
|
||||||
cvv: document.getElementById('cvv').value.replace(/[^\d]/g, '')
|
|
||||||
};
|
|
||||||
var payNowButton = document.getElementById('pay-now');
|
|
||||||
|
|
||||||
if (payNowButton) {
|
|
||||||
document.getElementById('pay-now').disabled = true;
|
|
||||||
document.querySelector('#pay-now > svg').classList.remove('hidden');
|
|
||||||
document.querySelector('#pay-now > span').classList.add('hidden');
|
|
||||||
}
|
|
||||||
|
|
||||||
forte.createToken(data).success(_this.successResponseHandler).error(_this.failedResponseHandler);
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
_defineProperty(this, "successResponseHandler", function (response) {
|
|
||||||
document.getElementById('payment_token').value = response.onetime_token;
|
|
||||||
document.getElementById('card_brand').value = response.card_type;
|
|
||||||
document.getElementById('server_response').submit();
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
_defineProperty(this, "failedResponseHandler", function (response) {
|
|
||||||
var errors = '<div class="alert alert-failure mb-4"><ul><li>' + response.response_description + '</li></ul></div>';
|
|
||||||
document.getElementById('forte_errors').innerHTML = errors;
|
|
||||||
document.getElementById('pay-now').disabled = false;
|
|
||||||
document.querySelector('#pay-now > svg').classList.add('hidden');
|
|
||||||
document.querySelector('#pay-now > span').classList.remove('hidden');
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
_defineProperty(this, "handle", function () {
|
|
||||||
var payNowButton = document.getElementById('pay-now');
|
|
||||||
|
|
||||||
if (payNowButton) {
|
|
||||||
payNowButton.addEventListener('click', function (e) {
|
|
||||||
_this.handleAuthorization();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return _this;
|
|
||||||
});
|
|
||||||
|
|
||||||
this.apiLoginId = apiLoginId;
|
|
||||||
this.cardHolderName = document.getElementById('cardholder_name');
|
|
||||||
};
|
|
||||||
|
|
||||||
var apiLoginId = document.querySelector('meta[name="forte-api-login-id"]').content;
|
|
||||||
/** @handle */
|
|
||||||
|
|
||||||
new ForteAuthorizeCard(apiLoginId).handle();
|
|
||||||
/******/ })()
|
|
||||||
;
|
|
2
public/js/clients/purchase_orders/accept.js
vendored
2
public/js/clients/purchase_orders/accept.js
vendored
@ -1,2 +1,2 @@
|
|||||||
/*! For license information please see accept.js.LICENSE.txt */
|
/*! For license information please see accept.js.LICENSE.txt */
|
||||||
(()=>{function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}var t=function(){function t(e,n){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),this.shouldDisplaySignature=e,this.shouldDisplayTerms=n,this.termsAccepted=!1}var n,a,r;return n=t,(a=[{key:"submitForm",value:function(){document.getElementById("approve-form").submit()}},{key:"displaySignature",value:function(){document.getElementById("displaySignatureModal").removeAttribute("style");var e=new SignaturePad(document.getElementById("signature-pad"),{penColor:"rgb(0, 0, 0)"});this.signaturePad=e}},{key:"displayTerms",value:function(){document.getElementById("displayTermsModal").removeAttribute("style")}},{key:"handle",value:function(){var e=this;document.getElementById("approve-button").addEventListener("click",(function(){e.shouldDisplaySignature&&e.shouldDisplayTerms&&(e.displaySignature(),document.getElementById("signature-next-step").addEventListener("click",(function(){e.displayTerms(),document.getElementById("accept-terms-button").addEventListener("click",(function(){document.querySelector('input[name="signature"').value=e.signaturePad.toDataURL(),e.termsAccepted=!0,e.submitForm()}))}))),e.shouldDisplaySignature&&!e.shouldDisplayTerms&&(e.displaySignature(),document.getElementById("signature-next-step").addEventListener("click",(function(){document.querySelector('input[name="signature"').value=e.signaturePad.toDataURL(),e.submitForm()}))),!e.shouldDisplaySignature&&e.shouldDisplayTerms&&(e.displayTerms(),document.getElementById("accept-terms-button").addEventListener("click",(function(){e.termsAccepted=!0,e.submitForm()}))),e.shouldDisplaySignature||e.shouldDisplayTerms||e.submitForm()}))}}])&&e(n.prototype,a),r&&e(n,r),Object.defineProperty(n,"prototype",{writable:!1}),t}(),n=document.querySelector('meta[name="require-purchase_order-signature"]').content,a=document.querySelector('meta[name="show-purchase_order-terms"]').content;new t(Boolean(+n),Boolean(+a)).handle()})();
|
(()=>{function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}var t=function(){function t(e,n){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),this.shouldDisplaySignature=e,this.shouldDisplayTerms=n,this.termsAccepted=!1}var n,a,r;return n=t,(a=[{key:"submitForm",value:function(){document.getElementById("approve-form").submit()}},{key:"displaySignature",value:function(){document.getElementById("displaySignatureModal").removeAttribute("style");var e=new SignaturePad(document.getElementById("signature-pad"),{penColor:"rgb(0, 0, 0)"});e.onEnd=function(){document.getElementById("signature-next-step").disabled=!1},this.signaturePad=e}},{key:"displayTerms",value:function(){document.getElementById("displayTermsModal").removeAttribute("style")}},{key:"handle",value:function(){var e=this;document.getElementById("signature-next-step").disabled=!0,document.getElementById("approve-button").addEventListener("click",(function(){e.shouldDisplaySignature&&e.shouldDisplayTerms&&(e.displaySignature(),document.getElementById("signature-next-step").addEventListener("click",(function(){e.displayTerms(),document.getElementById("accept-terms-button").addEventListener("click",(function(){document.querySelector('input[name="signature"').value=e.signaturePad.toDataURL(),e.termsAccepted=!0,e.submitForm()}))}))),e.shouldDisplaySignature&&!e.shouldDisplayTerms&&(e.displaySignature(),document.getElementById("signature-next-step").addEventListener("click",(function(){document.querySelector('input[name="signature"').value=e.signaturePad.toDataURL(),e.submitForm()}))),!e.shouldDisplaySignature&&e.shouldDisplayTerms&&(e.displayTerms(),document.getElementById("accept-terms-button").addEventListener("click",(function(){e.termsAccepted=!0,e.submitForm()}))),e.shouldDisplaySignature||e.shouldDisplayTerms||e.submitForm()}))}}])&&e(n.prototype,a),r&&e(n,r),Object.defineProperty(n,"prototype",{writable:!1}),t}(),n=document.querySelector('meta[name="require-purchase_order-signature"]').content,a=document.querySelector('meta[name="show-purchase_order-terms"]').content;new t(Boolean(+n),Boolean(+a)).handle()})();
|
2
public/js/clients/quotes/approve.js
vendored
2
public/js/clients/quotes/approve.js
vendored
@ -1,2 +1,2 @@
|
|||||||
/*! For license information please see approve.js.LICENSE.txt */
|
/*! For license information please see approve.js.LICENSE.txt */
|
||||||
(()=>{function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}var t=function(){function t(e,n){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),this.shouldDisplaySignature=e,this.shouldDisplayTerms=n,this.termsAccepted=!1}var n,a,r;return n=t,(a=[{key:"submitForm",value:function(){document.getElementById("approve-form").submit()}},{key:"displaySignature",value:function(){document.getElementById("displaySignatureModal").removeAttribute("style");var e=new SignaturePad(document.getElementById("signature-pad"),{penColor:"rgb(0, 0, 0)"});this.signaturePad=e}},{key:"displayTerms",value:function(){document.getElementById("displayTermsModal").removeAttribute("style")}},{key:"handle",value:function(){var e=this;document.getElementById("approve-button").addEventListener("click",(function(){e.shouldDisplaySignature&&e.shouldDisplayTerms&&(e.displaySignature(),document.getElementById("signature-next-step").addEventListener("click",(function(){e.displayTerms(),document.getElementById("accept-terms-button").addEventListener("click",(function(){document.querySelector('input[name="signature"').value=e.signaturePad.toDataURL(),e.termsAccepted=!0,e.submitForm()}))}))),e.shouldDisplaySignature&&!e.shouldDisplayTerms&&(e.displaySignature(),document.getElementById("signature-next-step").addEventListener("click",(function(){document.querySelector('input[name="signature"').value=e.signaturePad.toDataURL(),e.submitForm()}))),!e.shouldDisplaySignature&&e.shouldDisplayTerms&&(e.displayTerms(),document.getElementById("accept-terms-button").addEventListener("click",(function(){e.termsAccepted=!0,e.submitForm()}))),e.shouldDisplaySignature||e.shouldDisplayTerms||e.submitForm()}))}}])&&e(n.prototype,a),r&&e(n,r),Object.defineProperty(n,"prototype",{writable:!1}),t}(),n=document.querySelector('meta[name="require-quote-signature"]').content,a=document.querySelector('meta[name="show-quote-terms"]').content;new t(Boolean(+n),Boolean(+a)).handle()})();
|
(()=>{function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}var t=function(){function t(e,n){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),this.shouldDisplaySignature=e,this.shouldDisplayTerms=n,this.termsAccepted=!1}var n,a,u;return n=t,(a=[{key:"submitForm",value:function(){document.getElementById("approve-form").submit()}},{key:"displaySignature",value:function(){document.getElementById("displaySignatureModal").removeAttribute("style");var e=new SignaturePad(document.getElementById("signature-pad"),{penColor:"rgb(0, 0, 0)"});e.onEnd=function(){document.getElementById("signature-next-step").disabled=!1},this.signaturePad=e}},{key:"displayTerms",value:function(){document.getElementById("displayTermsModal").removeAttribute("style")}},{key:"handle",value:function(){var e=this;document.getElementById("signature-next-step").disabled=!0,document.getElementById("approve-button").addEventListener("click",(function(){e.shouldDisplaySignature&&e.shouldDisplayTerms&&(e.displaySignature(),document.getElementById("signature-next-step").addEventListener("click",(function(){e.displayTerms(),document.getElementById("accept-terms-button").addEventListener("click",(function(){document.querySelector('input[name="signature"').value=e.signaturePad.toDataURL(),e.termsAccepted=!0,e.submitForm()}))}))),e.shouldDisplaySignature&&!e.shouldDisplayTerms&&(e.displaySignature(),document.getElementById("signature-next-step").addEventListener("click",(function(){document.querySelector('input[name="signature"').value=e.signaturePad.toDataURL(),e.submitForm()}))),!e.shouldDisplaySignature&&e.shouldDisplayTerms&&(e.displayTerms(),document.getElementById("accept-terms-button").addEventListener("click",(function(){e.termsAccepted=!0,e.submitForm()}))),e.shouldDisplaySignature||e.shouldDisplayTerms||e.submitForm()}))}}])&&e(n.prototype,a),u&&e(n,u),Object.defineProperty(n,"prototype",{writable:!1}),t}(),n=document.querySelector('meta[name="require-quote-signature"]').content,a=document.querySelector('meta[name="show-quote-terms"]').content;new t(Boolean(+n),Boolean(+a)).handle()})();
|
@ -2,16 +2,18 @@
|
|||||||
"/js/app.js": "/js/app.js?id=384185bf9d293949134d09b890c81369",
|
"/js/app.js": "/js/app.js?id=384185bf9d293949134d09b890c81369",
|
||||||
"/js/clients/payment_methods/authorize-authorize-card.js": "/js/clients/payment_methods/authorize-authorize-card.js?id=9fb77e87fe0f85a367050e08f79ec9df",
|
"/js/clients/payment_methods/authorize-authorize-card.js": "/js/clients/payment_methods/authorize-authorize-card.js?id=9fb77e87fe0f85a367050e08f79ec9df",
|
||||||
"/js/clients/payments/authorize-credit-card-payment.js": "/js/clients/payments/authorize-credit-card-payment.js?id=803182f668c39d631ca5c55437876da4",
|
"/js/clients/payments/authorize-credit-card-payment.js": "/js/clients/payments/authorize-credit-card-payment.js?id=803182f668c39d631ca5c55437876da4",
|
||||||
|
"/js/clients/payments/forte-credit-card-payment.js": "/js/clients/payments/forte-credit-card-payment.js?id=6e9f466c5504d3753f9b4ffc6f947095",
|
||||||
|
"/js/clients/payments/forte-ach-payment.js": "/js/clients/payments/forte-ach-payment.js?id=1d10fcc52a1f15858e5da216f1df45ec",
|
||||||
"/js/clients/payments/stripe-ach.js": "/js/clients/payments/stripe-ach.js?id=7bed15f51bca764378d9a3aa605b8664",
|
"/js/clients/payments/stripe-ach.js": "/js/clients/payments/stripe-ach.js?id=7bed15f51bca764378d9a3aa605b8664",
|
||||||
"/js/clients/invoices/action-selectors.js": "/js/clients/invoices/action-selectors.js?id=d4f86ddee4e8a1d6e9719010aa0fe62b",
|
"/js/clients/invoices/action-selectors.js": "/js/clients/invoices/action-selectors.js?id=d4f86ddee4e8a1d6e9719010aa0fe62b",
|
||||||
"/js/clients/purchase_orders/action-selectors.js": "/js/clients/purchase_orders/action-selectors.js?id=160b8161599fc2429b449b0970d3ba6c",
|
"/js/clients/purchase_orders/action-selectors.js": "/js/clients/purchase_orders/action-selectors.js?id=160b8161599fc2429b449b0970d3ba6c",
|
||||||
"/js/clients/purchase_orders/accept.js": "/js/clients/purchase_orders/accept.js?id=2b5fed3ae34a6fd4db171a77ba72496e",
|
"/js/clients/purchase_orders/accept.js": "/js/clients/purchase_orders/accept.js?id=ddd4aa4069ea79411eeec367b7d5986d",
|
||||||
"/js/clients/invoices/payment.js": "/js/clients/invoices/payment.js?id=b88ad7c8881cc87df07b129c5a7c76df",
|
"/js/clients/invoices/payment.js": "/js/clients/invoices/payment.js?id=ada766ace95b727ecdbb6d3a09bf5a8e",
|
||||||
"/js/clients/payments/stripe-sofort.js": "/js/clients/payments/stripe-sofort.js?id=1c5493a4c53a5b862d07ee1818179ea9",
|
"/js/clients/payments/stripe-sofort.js": "/js/clients/payments/stripe-sofort.js?id=1c5493a4c53a5b862d07ee1818179ea9",
|
||||||
"/js/clients/payments/stripe-alipay.js": "/js/clients/payments/stripe-alipay.js?id=0274ab4f8d2b411f2a2fe5142301e7af",
|
"/js/clients/payments/stripe-alipay.js": "/js/clients/payments/stripe-alipay.js?id=0274ab4f8d2b411f2a2fe5142301e7af",
|
||||||
"/js/clients/payments/checkout-credit-card.js": "/js/clients/payments/checkout-credit-card.js?id=4bd34a0b160f6f29b3096d870ac4d308",
|
"/js/clients/payments/checkout-credit-card.js": "/js/clients/payments/checkout-credit-card.js?id=4bd34a0b160f6f29b3096d870ac4d308",
|
||||||
"/js/clients/quotes/action-selectors.js": "/js/clients/quotes/action-selectors.js?id=6fb63bae43d077b5061f4dadfe8dffc8",
|
"/js/clients/quotes/action-selectors.js": "/js/clients/quotes/action-selectors.js?id=6fb63bae43d077b5061f4dadfe8dffc8",
|
||||||
"/js/clients/quotes/approve.js": "/js/clients/quotes/approve.js?id=02d55a65841106a2e9309468c83879a9",
|
"/js/clients/quotes/approve.js": "/js/clients/quotes/approve.js?id=9e7110c9077a0f94627b0af4002d30d6",
|
||||||
"/js/clients/payments/stripe-credit-card.js": "/js/clients/payments/stripe-credit-card.js?id=62871ea440059c401bdc9458a41cfa3f",
|
"/js/clients/payments/stripe-credit-card.js": "/js/clients/payments/stripe-credit-card.js?id=62871ea440059c401bdc9458a41cfa3f",
|
||||||
"/js/setup/setup.js": "/js/setup/setup.js?id=87367cce4927b42a92defdbae7a64711",
|
"/js/setup/setup.js": "/js/setup/setup.js?id=87367cce4927b42a92defdbae7a64711",
|
||||||
"/js/clients/payments/card-js.min.js": "/js/clients/payments/card-js.min.js?id=8ce33c3deae058ad314fb8357e5be63b",
|
"/js/clients/payments/card-js.min.js": "/js/clients/payments/card-js.min.js?id=8ce33c3deae058ad314fb8357e5be63b",
|
||||||
@ -40,7 +42,7 @@
|
|||||||
"/js/clients/payments/stripe-przelewy24.js": "/js/clients/payments/stripe-przelewy24.js?id=3d53d2f7d0291d9f92cf7414dd2d351c",
|
"/js/clients/payments/stripe-przelewy24.js": "/js/clients/payments/stripe-przelewy24.js?id=3d53d2f7d0291d9f92cf7414dd2d351c",
|
||||||
"/js/clients/payments/stripe-browserpay.js": "/js/clients/payments/stripe-browserpay.js?id=db71055862995fd6ae21becfc587a3de",
|
"/js/clients/payments/stripe-browserpay.js": "/js/clients/payments/stripe-browserpay.js?id=db71055862995fd6ae21becfc587a3de",
|
||||||
"/js/clients/payments/stripe-fpx.js": "/js/clients/payments/stripe-fpx.js?id=914a6846ad1e5584635e7430fef76875",
|
"/js/clients/payments/stripe-fpx.js": "/js/clients/payments/stripe-fpx.js?id=914a6846ad1e5584635e7430fef76875",
|
||||||
"/css/app.css": "/css/app.css?id=6419fb85c22d562d4ec14800980801e7",
|
"/css/app.css": "/css/app.css?id=9cae1171423003d13f5880afe40d3ede",
|
||||||
"/css/card-js.min.css": "/css/card-js.min.css?id=62afeb675235451543ada60afcedcb7c",
|
"/css/card-js.min.css": "/css/card-js.min.css?id=62afeb675235451543ada60afcedcb7c",
|
||||||
"/vendor/clipboard.min.js": "/vendor/clipboard.min.js?id=15f52a1ee547f2bdd46e56747332ca2d"
|
"/vendor/clipboard.min.js": "/vendor/clipboard.min.js?id=15f52a1ee547f2bdd46e56747332ca2d"
|
||||||
}
|
}
|
||||||
|
11
resources/js/clients/invoices/payment.js
vendored
11
resources/js/clients/invoices/payment.js
vendored
@ -17,12 +17,17 @@ class Payment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
handleMethodSelect(element) {
|
handleMethodSelect(element) {
|
||||||
|
|
||||||
document.getElementById("company_gateway_id").value =
|
document.getElementById("company_gateway_id").value =
|
||||||
element.dataset.companyGatewayId;
|
element.dataset.companyGatewayId;
|
||||||
document.getElementById("payment_method_id").value =
|
document.getElementById("payment_method_id").value =
|
||||||
element.dataset.gatewayTypeId;
|
element.dataset.gatewayTypeId;
|
||||||
|
|
||||||
if (this.shouldDisplaySignature && !this.shouldDisplayTerms) {
|
if (this.shouldDisplaySignature && !this.shouldDisplayTerms) {
|
||||||
|
|
||||||
|
if(this.signaturePad.isEmpty())
|
||||||
|
alert("Please sign");
|
||||||
|
|
||||||
this.displayTerms();
|
this.displayTerms();
|
||||||
|
|
||||||
document
|
document
|
||||||
@ -91,10 +96,16 @@ class Payment {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
signaturePad.onEnd = function(){
|
||||||
|
document.getElementById("signature-next-step").disabled = false;
|
||||||
|
};
|
||||||
|
|
||||||
this.signaturePad = signaturePad;
|
this.signaturePad = signaturePad;
|
||||||
}
|
}
|
||||||
|
|
||||||
handle() {
|
handle() {
|
||||||
|
document.getElementById("signature-next-step").disabled = true;
|
||||||
|
|
||||||
document
|
document
|
||||||
.querySelectorAll(".dropdown-gateway-button")
|
.querySelectorAll(".dropdown-gateway-button")
|
||||||
.forEach(element => {
|
.forEach(element => {
|
||||||
|
@ -32,6 +32,10 @@ class Accept {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
signaturePad.onEnd = function(){
|
||||||
|
document.getElementById("signature-next-step").disabled = false;
|
||||||
|
};
|
||||||
|
|
||||||
this.signaturePad = signaturePad;
|
this.signaturePad = signaturePad;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,6 +45,9 @@ class Accept {
|
|||||||
}
|
}
|
||||||
|
|
||||||
handle() {
|
handle() {
|
||||||
|
|
||||||
|
document.getElementById("signature-next-step").disabled = true;
|
||||||
|
|
||||||
document
|
document
|
||||||
.getElementById('approve-button')
|
.getElementById('approve-button')
|
||||||
.addEventListener('click', () => {
|
.addEventListener('click', () => {
|
||||||
|
8
resources/js/clients/quotes/approve.js
vendored
8
resources/js/clients/quotes/approve.js
vendored
@ -32,6 +32,11 @@ class Approve {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
signaturePad.onEnd = function(){
|
||||||
|
document.getElementById("signature-next-step").disabled = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
this.signaturePad = signaturePad;
|
this.signaturePad = signaturePad;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,6 +46,9 @@ class Approve {
|
|||||||
}
|
}
|
||||||
|
|
||||||
handle() {
|
handle() {
|
||||||
|
|
||||||
|
document.getElementById("signature-next-step").disabled = true;
|
||||||
|
|
||||||
document
|
document
|
||||||
.getElementById('approve-button')
|
.getElementById('approve-button')
|
||||||
.addEventListener('click', () => {
|
.addEventListener('click', () => {
|
||||||
|
@ -4712,6 +4712,7 @@ $LANG = array(
|
|||||||
'view_map' => 'View Map',
|
'view_map' => 'View Map',
|
||||||
'set_default_design' => 'Set Default Design',
|
'set_default_design' => 'Set Default Design',
|
||||||
'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments',
|
'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments',
|
||||||
|
'purchase_order_issued_to' => 'Purchase Order issued to',
|
||||||
'archive_task_status' => 'Archive Task Status',
|
'archive_task_status' => 'Archive Task Status',
|
||||||
'delete_task_status' => 'Delete Task Status',
|
'delete_task_status' => 'Delete Task Status',
|
||||||
'restore_task_status' => 'Restore Task Status',
|
'restore_task_status' => 'Restore Task Status',
|
||||||
|
@ -42,8 +42,9 @@
|
|||||||
</div>
|
</div>
|
||||||
@endforeach
|
@endforeach
|
||||||
|
|
||||||
@if($entity->expense && $entity->expense->invoice_documents)
|
@if($entity instanceof App\Models\Invoice)
|
||||||
@foreach ($entity->expense->documents as $document)
|
@foreach ($entity->expense_documents() as $expense)
|
||||||
|
@foreach($expense->documents as $document)
|
||||||
<div class="inline-flex items-center space-x-1">
|
<div class="inline-flex items-center space-x-1">
|
||||||
<a href="{{ route('client.documents.show', $document->hashed_id) }}" target="_blank"
|
<a href="{{ route('client.documents.show', $document->hashed_id) }}" target="_blank"
|
||||||
class="block text-sm button-link text-primary">{{ Illuminate\Support\Str::limit($document->name, 40) }}</a>
|
class="block text-sm button-link text-primary">{{ Illuminate\Support\Str::limit($document->name, 40) }}</a>
|
||||||
@ -61,10 +62,12 @@
|
|||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
@endforeach
|
@endforeach
|
||||||
|
@endforeach
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
@if($entity->task && $entity->company->invoice_task_documents)
|
@if($entity instanceof App\Models\Invoice)
|
||||||
@foreach ($entity->task->documents as $document)
|
@foreach ($entity->task_documents() as $task)
|
||||||
|
@foreach($task->documents as $document)
|
||||||
<div class="inline-flex items-center space-x-1">
|
<div class="inline-flex items-center space-x-1">
|
||||||
<a href="{{ route('client.documents.show', $document->hashed_id) }}" target="_blank"
|
<a href="{{ route('client.documents.show', $document->hashed_id) }}" target="_blank"
|
||||||
class="block text-sm button-link text-primary">{{ Illuminate\Support\Str::limit($document->name, 40) }}</a>
|
class="block text-sm button-link text-primary">{{ Illuminate\Support\Str::limit($document->name, 40) }}</a>
|
||||||
@ -82,6 +85,7 @@
|
|||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
@endforeach
|
@endforeach
|
||||||
|
@endforeach
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
Reference in New Issue
Block a user