diff --git a/app/Abstracts/Export.php b/app/Abstracts/Export.php
index 3e4eb5adb..068d3c2f3 100644
--- a/app/Abstracts/Export.php
+++ b/app/Abstracts/Export.php
@@ -48,13 +48,18 @@ abstract class Export implements FromCollection, HasLocalePreference, ShouldAuto
{
$map = [];
- $date_fields = ['paid_at', 'invoiced_at', 'billed_at', 'due_at', 'issued_at', 'created_at', 'transferred_at'];
+ $date_fields = ['paid_at', 'invoiced_at', 'billed_at', 'due_at', 'issued_at', 'transferred_at'];
$evil_chars = ['=', '+', '-', '@'];
foreach ($this->fields as $field) {
$value = $model->$field;
+ // created_by is equal to the owner id. Therefore, the value in export is owner email.
+ if ($field == 'created_by') {
+ $value = $model->owner->email ?? null;
+ }
+
if (in_array($field, $date_fields)) {
$value = ExcelDate::PHPToExcel(Date::parse($value)->format('Y-m-d'));
}
diff --git a/app/Abstracts/Import.php b/app/Abstracts/Import.php
index c02e7ed84..eb05b9ab0 100644
--- a/app/Abstracts/Import.php
+++ b/app/Abstracts/Import.php
@@ -39,7 +39,12 @@ abstract class Import implements HasLocalePreference, ShouldQueue, SkipsEmptyRow
public function map($row): array
{
$row['company_id'] = company_id();
- $row['created_by'] = $this->user->id;
+
+ // created_by is equal to the owner id. Therefore, the value in export is owner email.
+ if (isset($row['created_by'])) {
+ $row['created_by'] = $this->getCreatedById($row);
+ }
+
$row['created_from'] = $this->getSourcePrefix() . 'import';
// Make enabled field integer
diff --git a/app/Exports/Sales/Customers.php b/app/Exports/Sales/Customers.php
index d464df2dd..08e3a758b 100644
--- a/app/Exports/Sales/Customers.php
+++ b/app/Exports/Sales/Customers.php
@@ -22,6 +22,8 @@ class Customers extends Export
$model->country = $country;
+ $model->can_login = $model->user_id ? true : false;
+
return parent::map($model);
}
@@ -41,6 +43,7 @@ class Customers extends Export
'currency_code',
'reference',
'enabled',
+ 'can_login',
];
}
}
diff --git a/app/Imports/Banking/Transfers.php b/app/Imports/Banking/Transfers.php
index 9c0023df8..6943eff92 100644
--- a/app/Imports/Banking/Transfers.php
+++ b/app/Imports/Banking/Transfers.php
@@ -41,10 +41,10 @@ class Transfers extends Import
return [
'from_account_id' => 'required|integer',
'from_currency_code' => 'required|string|currency',
- 'from_currency_rate' => 'required',
+ 'from_currency_rate' => 'required|gt:0',
'to_account_id' => 'required|integer',
'to_currency_code' => 'required|string|currency',
- 'to_currency_rate' => 'required',
+ 'to_currency_rate' => 'required|gt:0',
'amount' => 'required|amount',
'transferred_at' => 'required|date_format:Y-m-d',
'payment_method' => 'required|string',
diff --git a/app/Imports/Purchases/Sheets/Bills.php b/app/Imports/Purchases/Sheets/Bills.php
index a1b3cac99..8a6c7206b 100644
--- a/app/Imports/Purchases/Sheets/Bills.php
+++ b/app/Imports/Purchases/Sheets/Bills.php
@@ -43,7 +43,7 @@ class Bills extends Import
{
$rules['bill_number'] = Str::replaceFirst('unique:documents,NULL', 'unique:documents,document_number', $rules['document_number']);
$rules['billed_at'] = $rules['issued_at'];
- $rules['currency_rate'] = 'required';
+ $rules['currency_rate'] = 'required|gt:0';
unset($rules['document_number'], $rules['issued_at'], $rules['type']);
diff --git a/app/Imports/Sales/Customers.php b/app/Imports/Sales/Customers.php
index 414a982a2..03c02b9c6 100644
--- a/app/Imports/Sales/Customers.php
+++ b/app/Imports/Sales/Customers.php
@@ -3,6 +3,7 @@
namespace App\Imports\Sales;
use App\Abstracts\Import;
+use App\Models\Auth\User;
use App\Http\Requests\Common\Contact as Request;
use App\Models\Common\Contact as Model;
@@ -26,6 +27,10 @@ class Customers extends Import
$row['currency_code'] = $this->getCurrencyCode($row);
$row['user_id'] = null;
+ if (isset($row['can_login']) && isset($row['email'])) {
+ $row['user_id'] = User::where('email', $row['email'])->first()?->id ?? null;
+ }
+
return $row;
}
}
diff --git a/app/Imports/Sales/Sheets/Invoices.php b/app/Imports/Sales/Sheets/Invoices.php
index 440d84d48..aeb831de8 100644
--- a/app/Imports/Sales/Sheets/Invoices.php
+++ b/app/Imports/Sales/Sheets/Invoices.php
@@ -43,7 +43,7 @@ class Invoices extends Import
{
$rules['invoice_number'] = Str::replaceFirst('unique:documents,NULL', 'unique:documents,document_number', $rules['document_number']);
$rules['invoiced_at'] = $rules['issued_at'];
- $rules['currency_rate'] = 'required';
+ $rules['currency_rate'] = 'required|gt:0';
unset($rules['document_number'], $rules['issued_at'], $rules['type']);
diff --git a/app/Models/Document/Document.php b/app/Models/Document/Document.php
index 323956a38..edf79ae79 100644
--- a/app/Models/Document/Document.php
+++ b/app/Models/Document/Document.php
@@ -538,17 +538,29 @@ class Document extends Model
if ($this->status != 'paid' && (empty($this->transactions->count()) || (! empty($this->transactions->count()) && $this->paid != $this->amount))) {
try {
- $actions[] = [
- 'type' => 'button',
- 'title' => trans('invoices.add_payment'),
- 'icon' => 'paid',
- 'url' => route('modals.documents.document.transactions.create', $this->id),
- 'permission' => 'read-' . $group . '-' . $permission_prefix,
- 'attributes' => [
- 'id' => 'index-line-actions-payment-' . $this->type . '-' . $this->id,
- '@click' => 'onAddPayment("' . route('modals.documents.document.transactions.create', $this->id) . '")',
- ],
- ];
+ if ($this->totals->count()) {
+ $actions[] = [
+ 'type' => 'button',
+ 'title' => trans('invoices.add_payment'),
+ 'icon' => 'paid',
+ 'url' => route('modals.documents.document.transactions.create', $this->id),
+ 'permission' => 'read-' . $group . '-' . $permission_prefix,
+ 'attributes' => [
+ 'id' => 'index-line-actions-payment-' . $this->type . '-' . $this->id,
+ '@click' => 'onAddPayment("' . route('modals.documents.document.transactions.create', $this->id) . '")',
+ ],
+ ];
+ } else {
+ $actions[] = [
+ 'type' => 'button',
+ 'title' => trans('invoices.messages.totals_required', ['type' => $this->type]),
+ 'icon' => 'paid',
+ 'permission' => 'read-' . $group . '-' . $permission_prefix,
+ 'attributes' => [
+ "disabled" => "disabled",
+ ],
+ ];
+ }
} catch (\Exception $e) {}
}
diff --git a/app/Traits/Import.php b/app/Traits/Import.php
index e04b113ec..8681e785c 100644
--- a/app/Traits/Import.php
+++ b/app/Traits/Import.php
@@ -14,6 +14,7 @@ use App\Jobs\Common\CreateItem;
use App\Jobs\Setting\CreateCategory;
use App\Jobs\Setting\CreateCurrency;
use App\Jobs\Setting\CreateTax;
+use App\Models\Auth\User;
use App\Models\Banking\Account;
use App\Models\Common\Contact;
use App\Models\Common\Item;
@@ -110,6 +111,17 @@ trait Import
return $currency->code;
}
+ public function getCreatedById($row)
+ {
+ $user = User::where('email', $row['created_by'])->first();
+
+ if (! empty($user)) {
+ return $user->id;
+ }
+
+ return $this->user->id;
+ }
+
public function getDocumentId($row)
{
$id = isset($row['document_id']) ? $row['document_id'] : null;
diff --git a/resources/lang/en-GB/invoices.php b/resources/lang/en-GB/invoices.php
index 5186448b9..99040dc6a 100644
--- a/resources/lang/en-GB/invoices.php
+++ b/resources/lang/en-GB/invoices.php
@@ -50,6 +50,8 @@ return [
'messages' => [
'email_required' => 'No email address for this customer!',
+ 'totals_required' => 'Invoice totals are required Please edit the :type and save it again.',
+
'draft' => 'This is a DRAFT invoice and will be reflected to charts after it gets sent.',
'status' => [
diff --git a/resources/views/components/documents/show/content.blade.php b/resources/views/components/documents/show/content.blade.php
index 34ec22538..174cf979d 100644
--- a/resources/views/components/documents/show/content.blade.php
+++ b/resources/views/components/documents/show/content.blade.php
@@ -34,6 +34,10 @@
@if ($document->status == 'draft')
@endif
+
+ @if (! $document->totals->count())
+
+ @endif
@endif
@stack('status_message_end')
diff --git a/resources/views/components/documents/show/get-paid.blade.php b/resources/views/components/documents/show/get-paid.blade.php
index 73822a701..01a720103 100644
--- a/resources/views/components/documents/show/get-paid.blade.php
+++ b/resources/views/components/documents/show/get-paid.blade.php
@@ -11,15 +11,23 @@
@stack('timeline_get_paid_body_button_payment_start')
@if (! $hideAddPayment)
- @if ($document->status != 'paid' && (empty($document->transactions->count()) || (! empty($document->transactions->count()) && $document->paid != $document->amount)))
- id) }}')"
- id="show-slider-actions-payment-{{ $document->type }}"
- class="px-3 py-1.5 mb-3 sm:mb-0 rounded-lg text-xs font-medium leading-6 bg-green hover:bg-green-700 text-white disabled:bg-green-100"
- override="class"
- >
- {{ trans('invoices.add_payment') }}
-
+ @if ($document->totals->count())
+ @if ($document->status != 'paid' && (empty($document->transactions->count()) || (! empty($document->transactions->count()) && $document->paid != $document->amount)))
+ id) }}')"
+ id="show-slider-actions-payment-{{ $document->type }}"
+ class="px-3 py-1.5 mb-3 sm:mb-0 rounded-lg text-xs font-medium leading-6 bg-green hover:bg-green-700 text-white disabled:bg-green-100"
+ override="class"
+ >
+ {{ trans('invoices.add_payment') }}
+
+ @endif
+ @else
+
+
+ {{ trans('invoices.add_payment') }}
+
+
@endif
@endif
diff --git a/resources/views/components/documents/show/make-payment.blade.php b/resources/views/components/documents/show/make-payment.blade.php
index c382bae9a..5b4dd39d5 100644
--- a/resources/views/components/documents/show/make-payment.blade.php
+++ b/resources/views/components/documents/show/make-payment.blade.php
@@ -11,15 +11,23 @@
@stack('timeline_get_paid_body_button_payment_start')
@if (! $hideAddPayment)
- @if ($document->status != 'paid' && (empty($document->transactions->count()) || (! empty($document->transactions->count()) && $document->paid != $document->amount)) )
- id) }}')"
- id="show-slider-actions-payment-{{ $document->type }}"
- class="px-3 py-1.5 mb-3 sm:mb-0 rounded-lg text-xs font-medium leading-6 bg-green hover:bg-green-700 text-white disabled:bg-green-100"
- override="class"
- >
- {{ trans('invoices.add_payment') }}
-
+ @if ($document->totals->count())
+ @if ($document->status != 'paid' && (empty($document->transactions->count()) || (! empty($document->transactions->count()) && $document->paid != $document->amount)) )
+ id) }}')"
+ id="show-slider-actions-payment-{{ $document->type }}"
+ class="px-3 py-1.5 mb-3 sm:mb-0 rounded-lg text-xs font-medium leading-6 bg-green hover:bg-green-700 text-white disabled:bg-green-100"
+ override="class"
+ >
+ {{ trans('invoices.add_payment') }}
+
+ @endif
+ @else
+
+
+ {{ trans('invoices.add_payment') }}
+
+
@endif
@endif