mirror of
https://github.com/crater-invoice/crater.git
synced 2025-10-28 04:01:10 -04:00
Compare commits
126 Commits
dark-calen
...
fcd992179e
| Author | SHA1 | Date | |
|---|---|---|---|
| fcd992179e | |||
| d057b27560 | |||
| 6c66f0634b | |||
| b6eb1eef78 | |||
| da184cb13e | |||
| ff8519764e | |||
| 55163888b3 | |||
| 0ea6bce713 | |||
| c8ea2a7f3d | |||
| 078d928206 | |||
| 01f01b8607 | |||
| 1314821bb1 | |||
| 40d2d7435b | |||
| 36f334dc87 | |||
| dfd13bf9de | |||
| afb8cab71a | |||
| 6f0c9c6923 | |||
| a7b1fe87ea | |||
| a2970402b9 | |||
| 2934b9fc3f | |||
| ebf19636e1 | |||
| cbc13d4884 | |||
| b02803e7c5 | |||
| 194a8cb235 | |||
| 8fd045e378 | |||
| 7a11fbd02a | |||
| 5bc213299f | |||
| 2b5b4ab603 | |||
| 8a47cab96c | |||
| 606fed3e68 | |||
| d227ad4e6b | |||
| 835d61d73c | |||
| 6bb89db25e | |||
| 3f0fd04ad3 | |||
| 6c3e1b1135 | |||
| e331bc18ab | |||
| 67549fd299 | |||
| e6cea15a5b | |||
| 9471cfbca3 | |||
| e0da5e8eb8 | |||
| 1328e36306 | |||
| 5a5ed65202 | |||
| 598e5801bc | |||
| 427fb7675f | |||
| 4ce313b10a | |||
| 12d4107c13 | |||
| 41ba8fc849 | |||
| 2ba2d83478 | |||
| f421cd1677 | |||
| 16b4533892 | |||
| 3afdfe3fda | |||
| ebdfd83b04 | |||
| 26ba2d8d28 | |||
| 22377bc407 | |||
| 65b7a2c78e | |||
| d8ca49572b | |||
| f28d67629f | |||
| fa9c0824d2 | |||
| d8ad7d1c09 | |||
| f3eba0ca98 | |||
| 0046ce1675 | |||
| 1ea4048e98 | |||
| 3922da67db | |||
| d939c7340f | |||
| a1540dcbc1 | |||
| df89e1d248 | |||
| c4d79a8b63 | |||
| 5d875af7be | |||
| 9734ccf9fa | |||
| 8080fe86ca | |||
| 43b3f00dff | |||
| 9f3b39a685 | |||
| 309b2e0888 | |||
| ca60a4830d | |||
| ee96724b81 | |||
| c3250d6141 | |||
| d2a8477087 | |||
| 718657b0a4 | |||
| 1acac8f129 | |||
| 176b207335 | |||
| 77d7ae0fe4 | |||
| fc222fc6de | |||
| fa9d28e66b | |||
| a87ef11edc | |||
| 221f272da9 | |||
| b022cbad59 | |||
| d342bc9771 | |||
| c236012f4e | |||
| c50a2a5988 | |||
| f07f488148 | |||
| 46ba42478f | |||
| ddfea9d827 | |||
| 25aa4ac198 | |||
| 2081580640 | |||
| b20277d1b7 | |||
| 9fded639b9 | |||
| a19266a29c | |||
| d07d2243a9 | |||
| 19a23983ab | |||
| 3545ebb7a4 | |||
| e0ab4136a9 | |||
| 7ee0ceba0c | |||
| 2ca332f33c | |||
| fd3a1524ad | |||
| 889df7b9a6 | |||
| 73f36981e4 | |||
| e3460384d0 | |||
| a793d53b31 | |||
| 59854f016b | |||
| 411e2bf7b7 | |||
| fc46391dec | |||
| 15bfbfdaf3 | |||
| 9d7cc7548a | |||
| 7e460249bc | |||
| fd68cea4de | |||
| 0268b808d5 | |||
| 532422feca | |||
| f3cb1f6af6 | |||
| 5b0e1fc5a8 | |||
| 6f68f57791 | |||
| 6db63b3aae | |||
| c8e7378725 | |||
| cf1e90aa40 | |||
| 3d476f66f9 | |||
| 5f0925416e | |||
| a3a1f51d34 |
162
.github/workflows/uffizzi-build.yml
vendored
162
.github/workflows/uffizzi-build.yml
vendored
@ -1,162 +0,0 @@
|
|||||||
name: Build PR Image
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
types: [opened,synchronize,reopened,closed]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
|
|
||||||
build-application:
|
|
||||||
name: Build and Push `application`
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: ${{ github.event_name != 'pull_request' || github.event.action != 'closed' }}
|
|
||||||
outputs:
|
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
|
||||||
steps:
|
|
||||||
- name: Checkout git repo
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v2
|
|
||||||
- name: Generate UUID image name
|
|
||||||
id: uuid
|
|
||||||
run: echo "UUID_TAG_APP=$(uuidgen)" >> $GITHUB_ENV
|
|
||||||
- name: Docker metadata
|
|
||||||
id: meta
|
|
||||||
uses: docker/metadata-action@v3
|
|
||||||
with:
|
|
||||||
images: registry.uffizzi.com/${{ env.UUID_TAG_APP }}
|
|
||||||
tags: type=raw,value=60d
|
|
||||||
- name: Build and Push Image to registry.uffizzi.com ephemeral registry
|
|
||||||
uses: docker/build-push-action@v2
|
|
||||||
with:
|
|
||||||
push: true
|
|
||||||
context: ./
|
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
|
||||||
file: ./uffizzi/Dockerfile
|
|
||||||
cache-from: type=gha
|
|
||||||
cache-to: type=gha,mode=max
|
|
||||||
|
|
||||||
|
|
||||||
build-nginx:
|
|
||||||
name: Build and Push `nginx`
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: ${{ github.event_name != 'pull_request' || github.event.action != 'closed' }}
|
|
||||||
outputs:
|
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
|
||||||
steps:
|
|
||||||
- name: Checkout git repo
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v2
|
|
||||||
- name: Generate UUID image name
|
|
||||||
id: uuid
|
|
||||||
run: echo "UUID_TAG_NGINX=$(uuidgen)" >> $GITHUB_ENV
|
|
||||||
- name: Docker metadata
|
|
||||||
id: meta
|
|
||||||
uses: docker/metadata-action@v3
|
|
||||||
with:
|
|
||||||
images: registry.uffizzi.com/${{ env.UUID_TAG_NGINX }}
|
|
||||||
tags: type=raw,value=60d
|
|
||||||
- name: Build and Push Image to Uffizzi ephemeral registry
|
|
||||||
uses: docker/build-push-action@v2
|
|
||||||
with:
|
|
||||||
push: true
|
|
||||||
context: ./
|
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
|
||||||
file: ./uffizzi/nginx/Dockerfile
|
|
||||||
cache-from: type=gha
|
|
||||||
cache-to: type=gha,mode=max
|
|
||||||
|
|
||||||
|
|
||||||
build-crond:
|
|
||||||
name: Build and Push `crond`
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: ${{ github.event_name != 'pull_request' || github.event.action != 'closed' }}
|
|
||||||
outputs:
|
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
|
||||||
steps:
|
|
||||||
- name: Checkout git repo
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v2
|
|
||||||
- name: Generate UUID image name
|
|
||||||
id: uuid
|
|
||||||
run: echo "UUID_TAG_CROND=$(uuidgen)" >> $GITHUB_ENV
|
|
||||||
- name: Docker metadata
|
|
||||||
id: meta
|
|
||||||
uses: docker/metadata-action@v3
|
|
||||||
with:
|
|
||||||
images: registry.uffizzi.com/${{ env.UUID_TAG_CROND }}
|
|
||||||
tags: type=raw,value=60d
|
|
||||||
- name: Build and Push Image to registry.uffizzi.com ephemeral registry
|
|
||||||
uses: docker/build-push-action@v2
|
|
||||||
with:
|
|
||||||
push: true
|
|
||||||
context: ./
|
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
|
||||||
file: ./uffizzi/crond/Dockerfile
|
|
||||||
cache-from: type=gha
|
|
||||||
cache-to: type=gha,mode=max
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
render-compose-file:
|
|
||||||
name: Render Docker Compose File
|
|
||||||
# Pass output of this workflow to another triggered by `workflow_run` event.
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
outputs:
|
|
||||||
compose-file-cache-key: ${{ steps.hash.outputs.hash }}
|
|
||||||
needs:
|
|
||||||
- build-application
|
|
||||||
- build-nginx
|
|
||||||
- build-crond
|
|
||||||
steps:
|
|
||||||
- name: Checkout git repo
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
- name: Render Compose File
|
|
||||||
run: |
|
|
||||||
APP_IMAGE=$(echo ${{ needs.build-application.outputs.tags }})
|
|
||||||
export APP_IMAGE
|
|
||||||
NGINX_IMAGE=$(echo ${{ needs.build-nginx.outputs.tags }})
|
|
||||||
export NGINX_IMAGE
|
|
||||||
CROND_IMAGE=$(echo ${{ needs.build-crond.outputs.tags }})
|
|
||||||
export CROND_IMAGE
|
|
||||||
# Render simple template from environment variables.
|
|
||||||
envsubst < ./uffizzi/docker-compose.uffizzi.yml > docker-compose.rendered.yml
|
|
||||||
cat docker-compose.rendered.yml
|
|
||||||
- name: Upload Rendered Compose File as Artifact
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: preview-spec
|
|
||||||
path: docker-compose.rendered.yml
|
|
||||||
retention-days: 2
|
|
||||||
- name: Serialize PR Event to File
|
|
||||||
run: |
|
|
||||||
cat << EOF > event.json
|
|
||||||
${{ toJSON(github.event) }}
|
|
||||||
|
|
||||||
EOF
|
|
||||||
- name: Upload PR Event as Artifact
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: preview-spec
|
|
||||||
path: event.json
|
|
||||||
retention-days: 2
|
|
||||||
|
|
||||||
delete-preview:
|
|
||||||
name: Call for Preview Deletion
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: ${{ github.event.action == 'closed' }}
|
|
||||||
steps:
|
|
||||||
# If this PR is closing, we will not render a compose file nor pass it to the next workflow.
|
|
||||||
- name: Serialize PR Event to File
|
|
||||||
run: echo '${{ toJSON(github.event) }}' > event.json
|
|
||||||
- name: Upload PR Event as Artifact
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: preview-spec
|
|
||||||
path: event.json
|
|
||||||
retention-days: 2
|
|
||||||
|
|
||||||
84
.github/workflows/uffizzi-preview.yml
vendored
84
.github/workflows/uffizzi-preview.yml
vendored
@ -1,84 +0,0 @@
|
|||||||
name: Deploy Uffizzi Preview
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_run:
|
|
||||||
workflows:
|
|
||||||
- "Build PR Image"
|
|
||||||
types:
|
|
||||||
- completed
|
|
||||||
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
cache-compose-file:
|
|
||||||
name: Cache Compose File
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
outputs:
|
|
||||||
compose-file-cache-key: ${{ env.COMPOSE_FILE_HASH }}
|
|
||||||
pr-number: ${{ env.PR_NUMBER }}
|
|
||||||
steps:
|
|
||||||
- name: 'Download artifacts'
|
|
||||||
# Fetch output (zip archive) from the workflow run that triggered this workflow.
|
|
||||||
uses: actions/github-script@v6
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
run_id: context.payload.workflow_run.id,
|
|
||||||
});
|
|
||||||
let matchArtifact = allArtifacts.data.artifacts.filter((artifact) => {
|
|
||||||
return artifact.name == "preview-spec"
|
|
||||||
})[0];
|
|
||||||
let download = await github.rest.actions.downloadArtifact({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
artifact_id: matchArtifact.id,
|
|
||||||
archive_format: 'zip',
|
|
||||||
});
|
|
||||||
let fs = require('fs');
|
|
||||||
fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/preview-spec.zip`, Buffer.from(download.data));
|
|
||||||
- name: 'Unzip artifact'
|
|
||||||
run: unzip preview-spec.zip
|
|
||||||
- name: Read Event into ENV
|
|
||||||
run: |
|
|
||||||
echo 'EVENT_JSON<<EOF' >> $GITHUB_ENV
|
|
||||||
cat event.json >> $GITHUB_ENV
|
|
||||||
echo 'EOF' >> $GITHUB_ENV
|
|
||||||
- name: Hash Rendered Compose File
|
|
||||||
id: hash
|
|
||||||
# If the previous workflow was triggered by a PR close event, we will not have a compose file artifact.
|
|
||||||
if: ${{ fromJSON(env.EVENT_JSON).action != 'closed' }}
|
|
||||||
run: echo "COMPOSE_FILE_HASH=$(md5sum docker-compose.rendered.yml | awk '{ print $1 }')" >> $GITHUB_ENV
|
|
||||||
- name: Cache Rendered Compose File
|
|
||||||
if: ${{ fromJSON(env.EVENT_JSON).action != 'closed' }}
|
|
||||||
uses: actions/cache@v3
|
|
||||||
with:
|
|
||||||
path: docker-compose.rendered.yml
|
|
||||||
key: ${{ env.COMPOSE_FILE_HASH }}
|
|
||||||
|
|
||||||
- name: Read PR Number From Event Object
|
|
||||||
id: pr
|
|
||||||
run: echo "PR_NUMBER=${{ fromJSON(env.EVENT_JSON).number }}" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: DEBUG - Print Job Outputs
|
|
||||||
if: ${{ runner.debug }}
|
|
||||||
run: |
|
|
||||||
echo "PR number: ${{ env.PR_NUMBER }}"
|
|
||||||
echo "Compose file hash: ${{ env.COMPOSE_FILE_HASH }}"
|
|
||||||
cat event.json
|
|
||||||
deploy-uffizzi-preview:
|
|
||||||
name: Use Remote Workflow to Preview on Uffizzi
|
|
||||||
needs:
|
|
||||||
- cache-compose-file
|
|
||||||
uses: UffizziCloud/preview-action/.github/workflows/reusable.yaml@v2.6.1
|
|
||||||
with:
|
|
||||||
# If this workflow was triggered by a PR close event, cache-key will be an empty string
|
|
||||||
# and this reusable workflow will delete the preview deployment.
|
|
||||||
compose-file-cache-key: ${{ needs.cache-compose-file.outputs.compose-file-cache-key }}
|
|
||||||
compose-file-cache-path: docker-compose.rendered.yml
|
|
||||||
server: https://app.uffizzi.com/
|
|
||||||
pr-number: ${{ needs.cache-compose-file.outputs.pr-number }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
pull-requests: write
|
|
||||||
id-token: write
|
|
||||||
1
.gitignore
vendored
1
.gitignore
vendored
@ -16,4 +16,3 @@ Homestead.yaml
|
|||||||
.gitkeep
|
.gitkeep
|
||||||
/public/docs
|
/public/docs
|
||||||
/.scribe
|
/.scribe
|
||||||
!storage/fonts/.gitkeep
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
FROM php:8.1-fpm
|
FROM php:7.4-fpm
|
||||||
|
|
||||||
# Arguments defined in docker-compose.yml
|
# Arguments defined in docker-compose.yml
|
||||||
ARG user
|
ARG user
|
||||||
|
|||||||
@ -103,7 +103,6 @@ class CustomerStatsController extends Controller
|
|||||||
)
|
)
|
||||||
->whereCompany()
|
->whereCompany()
|
||||||
->whereCustomer($customer->id)
|
->whereCustomer($customer->id)
|
||||||
->where('status', '<>', Invoice::STATUS_DRAFT)
|
|
||||||
->sum('total');
|
->sum('total');
|
||||||
$totalReceipts = Payment::whereBetween(
|
$totalReceipts = Payment::whereBetween(
|
||||||
'payment_date',
|
'payment_date',
|
||||||
|
|||||||
@ -104,7 +104,6 @@ class DashboardController extends Controller
|
|||||||
'invoice_date',
|
'invoice_date',
|
||||||
[$startDate->format('Y-m-d'), $start->format('Y-m-d')]
|
[$startDate->format('Y-m-d'), $start->format('Y-m-d')]
|
||||||
)
|
)
|
||||||
->where('status', '<>', Invoice::STATUS_DRAFT)
|
|
||||||
->whereCompany()
|
->whereCompany()
|
||||||
->sum('base_total');
|
->sum('base_total');
|
||||||
|
|
||||||
@ -142,7 +141,6 @@ class DashboardController extends Controller
|
|||||||
$recent_due_invoices = Invoice::with('customer')
|
$recent_due_invoices = Invoice::with('customer')
|
||||||
->whereCompany()
|
->whereCompany()
|
||||||
->where('base_due_amount', '>', 0)
|
->where('base_due_amount', '>', 0)
|
||||||
->where('status', '<>', Invoice::STATUS_DRAFT)
|
|
||||||
->take(5)
|
->take(5)
|
||||||
->latest()
|
->latest()
|
||||||
->get();
|
->get();
|
||||||
|
|||||||
@ -24,7 +24,6 @@ class InvoicesController extends Controller
|
|||||||
$limit = $request->has('limit') ? $request->limit : 10;
|
$limit = $request->has('limit') ? $request->limit : 10;
|
||||||
|
|
||||||
$invoices = Invoice::whereCompany()
|
$invoices = Invoice::whereCompany()
|
||||||
->whereTabFilters($request->tab_status)
|
|
||||||
->join('customers', 'customers.id', '=', 'invoices.customer_id')
|
->join('customers', 'customers.id', '=', 'invoices.customer_id')
|
||||||
->applyFilters($request->all())
|
->applyFilters($request->all())
|
||||||
->select('invoices.*', 'customers.name')
|
->select('invoices.*', 'customers.name')
|
||||||
|
|||||||
@ -2,15 +2,14 @@
|
|||||||
|
|
||||||
namespace Crater\Http\Controllers\V1\Admin\Report;
|
namespace Crater\Http\Controllers\V1\Admin\Report;
|
||||||
|
|
||||||
use PDF;
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
|
use Crater\Http\Controllers\Controller;
|
||||||
use Crater\Models\Company;
|
use Crater\Models\Company;
|
||||||
use Crater\Models\Currency;
|
use Crater\Models\CompanySetting;
|
||||||
use Crater\Models\Customer;
|
use Crater\Models\Customer;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Crater\Models\CompanySetting;
|
|
||||||
use Illuminate\Support\Facades\App;
|
use Illuminate\Support\Facades\App;
|
||||||
use Crater\Http\Controllers\Controller;
|
use PDF;
|
||||||
|
|
||||||
class CustomerSalesReportController extends Controller
|
class CustomerSalesReportController extends Controller
|
||||||
{
|
{
|
||||||
@ -57,7 +56,6 @@ class CustomerSalesReportController extends Controller
|
|||||||
$dateFormat = CompanySetting::getSetting('carbon_date_format', $company->id);
|
$dateFormat = CompanySetting::getSetting('carbon_date_format', $company->id);
|
||||||
$from_date = Carbon::createFromFormat('Y-m-d', $request->from_date)->format($dateFormat);
|
$from_date = Carbon::createFromFormat('Y-m-d', $request->from_date)->format($dateFormat);
|
||||||
$to_date = Carbon::createFromFormat('Y-m-d', $request->to_date)->format($dateFormat);
|
$to_date = Carbon::createFromFormat('Y-m-d', $request->to_date)->format($dateFormat);
|
||||||
$currency = Currency::findOrFail(CompanySetting::getSetting('currency', $company->id));
|
|
||||||
|
|
||||||
$colors = [
|
$colors = [
|
||||||
'primary_text_color',
|
'primary_text_color',
|
||||||
@ -82,7 +80,6 @@ class CustomerSalesReportController extends Controller
|
|||||||
'company' => $company,
|
'company' => $company,
|
||||||
'from_date' => $from_date,
|
'from_date' => $from_date,
|
||||||
'to_date' => $to_date,
|
'to_date' => $to_date,
|
||||||
'currency' => $currency,
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$pdf = PDF::loadView('app.pdf.reports.sales-customers');
|
$pdf = PDF::loadView('app.pdf.reports.sales-customers');
|
||||||
|
|||||||
@ -2,15 +2,14 @@
|
|||||||
|
|
||||||
namespace Crater\Http\Controllers\V1\Admin\Report;
|
namespace Crater\Http\Controllers\V1\Admin\Report;
|
||||||
|
|
||||||
use PDF;
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Crater\Models\Company;
|
|
||||||
use Crater\Models\Expense;
|
|
||||||
use Crater\Models\Currency;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Crater\Models\CompanySetting;
|
|
||||||
use Illuminate\Support\Facades\App;
|
|
||||||
use Crater\Http\Controllers\Controller;
|
use Crater\Http\Controllers\Controller;
|
||||||
|
use Crater\Models\Company;
|
||||||
|
use Crater\Models\CompanySetting;
|
||||||
|
use Crater\Models\Expense;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\App;
|
||||||
|
use PDF;
|
||||||
|
|
||||||
class ExpensesReportController extends Controller
|
class ExpensesReportController extends Controller
|
||||||
{
|
{
|
||||||
@ -44,7 +43,6 @@ class ExpensesReportController extends Controller
|
|||||||
$dateFormat = CompanySetting::getSetting('carbon_date_format', $company->id);
|
$dateFormat = CompanySetting::getSetting('carbon_date_format', $company->id);
|
||||||
$from_date = Carbon::createFromFormat('Y-m-d', $request->from_date)->format($dateFormat);
|
$from_date = Carbon::createFromFormat('Y-m-d', $request->from_date)->format($dateFormat);
|
||||||
$to_date = Carbon::createFromFormat('Y-m-d', $request->to_date)->format($dateFormat);
|
$to_date = Carbon::createFromFormat('Y-m-d', $request->to_date)->format($dateFormat);
|
||||||
$currency = Currency::findOrFail(CompanySetting::getSetting('currency', $company->id));
|
|
||||||
|
|
||||||
$colors = [
|
$colors = [
|
||||||
'primary_text_color',
|
'primary_text_color',
|
||||||
@ -68,7 +66,6 @@ class ExpensesReportController extends Controller
|
|||||||
'company' => $company,
|
'company' => $company,
|
||||||
'from_date' => $from_date,
|
'from_date' => $from_date,
|
||||||
'to_date' => $to_date,
|
'to_date' => $to_date,
|
||||||
'currency' => $currency,
|
|
||||||
]);
|
]);
|
||||||
$pdf = PDF::loadView('app.pdf.reports.expenses');
|
$pdf = PDF::loadView('app.pdf.reports.expenses');
|
||||||
|
|
||||||
|
|||||||
@ -2,15 +2,14 @@
|
|||||||
|
|
||||||
namespace Crater\Http\Controllers\V1\Admin\Report;
|
namespace Crater\Http\Controllers\V1\Admin\Report;
|
||||||
|
|
||||||
use PDF;
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Crater\Models\Company;
|
|
||||||
use Crater\Models\Currency;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Crater\Models\InvoiceItem;
|
|
||||||
use Crater\Models\CompanySetting;
|
|
||||||
use Illuminate\Support\Facades\App;
|
|
||||||
use Crater\Http\Controllers\Controller;
|
use Crater\Http\Controllers\Controller;
|
||||||
|
use Crater\Models\Company;
|
||||||
|
use Crater\Models\CompanySetting;
|
||||||
|
use Crater\Models\InvoiceItem;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\App;
|
||||||
|
use PDF;
|
||||||
|
|
||||||
class ItemSalesReportController extends Controller
|
class ItemSalesReportController extends Controller
|
||||||
{
|
{
|
||||||
@ -44,7 +43,6 @@ class ItemSalesReportController extends Controller
|
|||||||
$dateFormat = CompanySetting::getSetting('carbon_date_format', $company->id);
|
$dateFormat = CompanySetting::getSetting('carbon_date_format', $company->id);
|
||||||
$from_date = Carbon::createFromFormat('Y-m-d', $request->from_date)->format($dateFormat);
|
$from_date = Carbon::createFromFormat('Y-m-d', $request->from_date)->format($dateFormat);
|
||||||
$to_date = Carbon::createFromFormat('Y-m-d', $request->to_date)->format($dateFormat);
|
$to_date = Carbon::createFromFormat('Y-m-d', $request->to_date)->format($dateFormat);
|
||||||
$currency = Currency::findOrFail(CompanySetting::getSetting('currency', $company->id));
|
|
||||||
|
|
||||||
$colors = [
|
$colors = [
|
||||||
'primary_text_color',
|
'primary_text_color',
|
||||||
@ -68,7 +66,6 @@ class ItemSalesReportController extends Controller
|
|||||||
'company' => $company,
|
'company' => $company,
|
||||||
'from_date' => $from_date,
|
'from_date' => $from_date,
|
||||||
'to_date' => $to_date,
|
'to_date' => $to_date,
|
||||||
'currency' => $currency,
|
|
||||||
]);
|
]);
|
||||||
$pdf = PDF::loadView('app.pdf.reports.sales-items');
|
$pdf = PDF::loadView('app.pdf.reports.sales-items');
|
||||||
|
|
||||||
|
|||||||
@ -2,16 +2,15 @@
|
|||||||
|
|
||||||
namespace Crater\Http\Controllers\V1\Admin\Report;
|
namespace Crater\Http\Controllers\V1\Admin\Report;
|
||||||
|
|
||||||
use PDF;
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
|
use Crater\Http\Controllers\Controller;
|
||||||
use Crater\Models\Company;
|
use Crater\Models\Company;
|
||||||
|
use Crater\Models\CompanySetting;
|
||||||
use Crater\Models\Expense;
|
use Crater\Models\Expense;
|
||||||
use Crater\Models\Payment;
|
use Crater\Models\Payment;
|
||||||
use Crater\Models\Currency;
|
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Crater\Models\CompanySetting;
|
|
||||||
use Illuminate\Support\Facades\App;
|
use Illuminate\Support\Facades\App;
|
||||||
use Crater\Http\Controllers\Controller;
|
use PDF;
|
||||||
|
|
||||||
class ProfitLossReportController extends Controller
|
class ProfitLossReportController extends Controller
|
||||||
{
|
{
|
||||||
@ -50,8 +49,6 @@ class ProfitLossReportController extends Controller
|
|||||||
$dateFormat = CompanySetting::getSetting('carbon_date_format', $company->id);
|
$dateFormat = CompanySetting::getSetting('carbon_date_format', $company->id);
|
||||||
$from_date = Carbon::createFromFormat('Y-m-d', $request->from_date)->format($dateFormat);
|
$from_date = Carbon::createFromFormat('Y-m-d', $request->from_date)->format($dateFormat);
|
||||||
$to_date = Carbon::createFromFormat('Y-m-d', $request->to_date)->format($dateFormat);
|
$to_date = Carbon::createFromFormat('Y-m-d', $request->to_date)->format($dateFormat);
|
||||||
$currency = Currency::findOrFail(CompanySetting::getSetting('currency', $company->id));
|
|
||||||
|
|
||||||
|
|
||||||
$colors = [
|
$colors = [
|
||||||
'primary_text_color',
|
'primary_text_color',
|
||||||
@ -77,7 +74,6 @@ class ProfitLossReportController extends Controller
|
|||||||
'company' => $company,
|
'company' => $company,
|
||||||
'from_date' => $from_date,
|
'from_date' => $from_date,
|
||||||
'to_date' => $to_date,
|
'to_date' => $to_date,
|
||||||
'currency' => $currency,
|
|
||||||
]);
|
]);
|
||||||
$pdf = PDF::loadView('app.pdf.reports.profit-loss');
|
$pdf = PDF::loadView('app.pdf.reports.profit-loss');
|
||||||
|
|
||||||
|
|||||||
@ -2,15 +2,14 @@
|
|||||||
|
|
||||||
namespace Crater\Http\Controllers\V1\Admin\Report;
|
namespace Crater\Http\Controllers\V1\Admin\Report;
|
||||||
|
|
||||||
use PDF;
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Crater\Models\Tax;
|
|
||||||
use Crater\Models\Company;
|
|
||||||
use Crater\Models\Currency;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Crater\Models\CompanySetting;
|
|
||||||
use Illuminate\Support\Facades\App;
|
|
||||||
use Crater\Http\Controllers\Controller;
|
use Crater\Http\Controllers\Controller;
|
||||||
|
use Crater\Models\Company;
|
||||||
|
use Crater\Models\CompanySetting;
|
||||||
|
use Crater\Models\Tax;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\App;
|
||||||
|
use PDF;
|
||||||
|
|
||||||
class TaxSummaryReportController extends Controller
|
class TaxSummaryReportController extends Controller
|
||||||
{
|
{
|
||||||
@ -45,8 +44,6 @@ class TaxSummaryReportController extends Controller
|
|||||||
$dateFormat = CompanySetting::getSetting('carbon_date_format', $company->id);
|
$dateFormat = CompanySetting::getSetting('carbon_date_format', $company->id);
|
||||||
$from_date = Carbon::createFromFormat('Y-m-d', $request->from_date)->format($dateFormat);
|
$from_date = Carbon::createFromFormat('Y-m-d', $request->from_date)->format($dateFormat);
|
||||||
$to_date = Carbon::createFromFormat('Y-m-d', $request->to_date)->format($dateFormat);
|
$to_date = Carbon::createFromFormat('Y-m-d', $request->to_date)->format($dateFormat);
|
||||||
$currency = Currency::findOrFail(CompanySetting::getSetting('currency', $company->id));
|
|
||||||
|
|
||||||
|
|
||||||
$colors = [
|
$colors = [
|
||||||
'primary_text_color',
|
'primary_text_color',
|
||||||
@ -71,7 +68,6 @@ class TaxSummaryReportController extends Controller
|
|||||||
'company' => $company,
|
'company' => $company,
|
||||||
'from_date' => $from_date,
|
'from_date' => $from_date,
|
||||||
'to_date' => $to_date,
|
'to_date' => $to_date,
|
||||||
'currency' => $currency,
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$pdf = PDF::loadView('app.pdf.reports.tax-summary');
|
$pdf = PDF::loadView('app.pdf.reports.tax-summary');
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
namespace Crater\Http\Requests;
|
namespace Crater\Http\Requests;
|
||||||
|
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
use Illuminate\Validation\Rule;
|
use Illuminate\Validation\Rule;
|
||||||
|
|
||||||
class CompaniesRequest extends FormRequest
|
class CompaniesRequest extends FormRequest
|
||||||
@ -33,10 +34,6 @@ class CompaniesRequest extends FormRequest
|
|||||||
'currency' => [
|
'currency' => [
|
||||||
'required'
|
'required'
|
||||||
],
|
],
|
||||||
'slug' => [
|
|
||||||
'required',
|
|
||||||
Rule::unique('companies')
|
|
||||||
],
|
|
||||||
'address.name' => [
|
'address.name' => [
|
||||||
'nullable',
|
'nullable',
|
||||||
],
|
],
|
||||||
@ -71,11 +68,11 @@ class CompaniesRequest extends FormRequest
|
|||||||
{
|
{
|
||||||
return collect($this->validated())
|
return collect($this->validated())
|
||||||
->only([
|
->only([
|
||||||
'name',
|
'name'
|
||||||
'slug'
|
|
||||||
])
|
])
|
||||||
->merge([
|
->merge([
|
||||||
'owner_id' => $this->user()->id
|
'owner_id' => $this->user()->id,
|
||||||
|
'slug' => Str::slug($this->name)
|
||||||
])
|
])
|
||||||
->toArray();
|
->toArray();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -30,8 +30,7 @@ class CompanyRequest extends FormRequest
|
|||||||
Rule::unique('companies')->ignore($this->header('company'), 'id'),
|
Rule::unique('companies')->ignore($this->header('company'), 'id'),
|
||||||
],
|
],
|
||||||
'slug' => [
|
'slug' => [
|
||||||
'required',
|
'nullable'
|
||||||
Rule::unique('companies')->ignore($this->header('company'), 'id'),
|
|
||||||
],
|
],
|
||||||
'address.country_id' => [
|
'address.country_id' => [
|
||||||
'required',
|
'required',
|
||||||
|
|||||||
@ -23,7 +23,7 @@ class EstimateResource extends JsonResource
|
|||||||
'reference_number' => $this->reference_number,
|
'reference_number' => $this->reference_number,
|
||||||
'tax_per_item' => $this->tax_per_item,
|
'tax_per_item' => $this->tax_per_item,
|
||||||
'discount_per_item' => $this->discount_per_item,
|
'discount_per_item' => $this->discount_per_item,
|
||||||
'notes' => $this->notes,
|
'notes' => $this->getNotes(),
|
||||||
'discount' => $this->discount,
|
'discount' => $this->discount,
|
||||||
'discount_type' => $this->discount_type,
|
'discount_type' => $this->discount_type,
|
||||||
'discount_val' => $this->discount_val,
|
'discount_val' => $this->discount_val,
|
||||||
|
|||||||
@ -18,7 +18,7 @@ class PaymentResource extends JsonResource
|
|||||||
'id' => $this->id,
|
'id' => $this->id,
|
||||||
'payment_number' => $this->payment_number,
|
'payment_number' => $this->payment_number,
|
||||||
'payment_date' => $this->payment_date,
|
'payment_date' => $this->payment_date,
|
||||||
'notes' => $this->notes,
|
'notes' => $this->getNotes(),
|
||||||
'amount' => $this->amount,
|
'amount' => $this->amount,
|
||||||
'unique_hash' => $this->unique_hash,
|
'unique_hash' => $this->unique_hash,
|
||||||
'invoice_id' => $this->invoice_id,
|
'invoice_id' => $this->invoice_id,
|
||||||
|
|||||||
@ -217,7 +217,7 @@ class Company extends Model implements HasMedia
|
|||||||
'estimate_billing_address_format' => $billingAddressFormat,
|
'estimate_billing_address_format' => $billingAddressFormat,
|
||||||
'payment_company_address_format' => $companyAddressFormat,
|
'payment_company_address_format' => $companyAddressFormat,
|
||||||
'payment_from_customer_address_format' => $paymentFromCustomerAddress,
|
'payment_from_customer_address_format' => $paymentFromCustomerAddress,
|
||||||
'currency' => request()->currency ?? 1,
|
'currency' => request()->currency ?? 13,
|
||||||
'time_zone' => 'Asia/Kolkata',
|
'time_zone' => 'Asia/Kolkata',
|
||||||
'language' => 'en',
|
'language' => 'en',
|
||||||
'fiscal_year' => '1-12',
|
'fiscal_year' => '1-12',
|
||||||
|
|||||||
@ -483,8 +483,7 @@ class Estimate extends Model implements HasMedia
|
|||||||
'{ESTIMATE_DATE}' => $this->formattedEstimateDate,
|
'{ESTIMATE_DATE}' => $this->formattedEstimateDate,
|
||||||
'{ESTIMATE_EXPIRY_DATE}' => $this->formattedExpiryDate,
|
'{ESTIMATE_EXPIRY_DATE}' => $this->formattedExpiryDate,
|
||||||
'{ESTIMATE_NUMBER}' => $this->estimate_number,
|
'{ESTIMATE_NUMBER}' => $this->estimate_number,
|
||||||
'{PDF_LINK}' => $this->estimatePdfUrl,
|
'{ESTIMATE_REF_NUMBER}' => $this->reference_number,
|
||||||
'{TOTAL_AMOUNT}' => format_money_pdf($this->total, $this->customer->currency)
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -240,7 +240,7 @@ class Expense extends Model implements HasMedia
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($request->hasFile('attachment_receipt')) {
|
if ($request->hasFile('attachment_receipt')) {
|
||||||
$expense->addMediaFromRequest('attachment_receipt')->toMediaCollection('receipts', 'local');
|
$expense->addMediaFromRequest('attachment_receipt')->toMediaCollection('receipts');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($request->customFields) {
|
if ($request->customFields) {
|
||||||
@ -262,12 +262,12 @@ class Expense extends Model implements HasMedia
|
|||||||
ExchangeRateLog::addExchangeRateLog($this);
|
ExchangeRateLog::addExchangeRateLog($this);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($request->is_attachment_receipt_removed) && $request->is_attachment_receipt_removed == "true") {
|
if (isset($request->is_attachment_receipt_removed) && (bool) $request->is_attachment_receipt_removed) {
|
||||||
$this->clearMediaCollection('receipts');
|
$this->clearMediaCollection('receipts');
|
||||||
}
|
}
|
||||||
if ($request->hasFile('attachment_receipt')) {
|
if ($request->hasFile('attachment_receipt')) {
|
||||||
$this->clearMediaCollection('receipts');
|
$this->clearMediaCollection('receipts');
|
||||||
$this->addMediaFromRequest('attachment_receipt')->toMediaCollection('receipts', 'local');
|
$this->addMediaFromRequest('attachment_receipt')->toMediaCollection('receipts');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($request->customFields) {
|
if ($request->customFields) {
|
||||||
|
|||||||
@ -187,6 +187,16 @@ class Invoice extends Model implements HasMedia
|
|||||||
return Carbon::parse($this->invoice_date)->format($dateFormat);
|
return Carbon::parse($this->invoice_date)->format($dateFormat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function scopeWhereStatus($query, $status)
|
||||||
|
{
|
||||||
|
return $query->where('invoices.status', $status);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function scopeWherePaidStatus($query, $status)
|
||||||
|
{
|
||||||
|
return $query->where('invoices.paid_status', $status);
|
||||||
|
}
|
||||||
|
|
||||||
public function scopeWhereDueStatus($query, $status)
|
public function scopeWhereDueStatus($query, $status)
|
||||||
{
|
{
|
||||||
return $query->whereIn('invoices.paid_status', [
|
return $query->whereIn('invoices.paid_status', [
|
||||||
@ -224,40 +234,6 @@ class Invoice extends Model implements HasMedia
|
|||||||
$query->orderBy($orderByField, $orderBy);
|
$query->orderBy($orderByField, $orderBy);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function scopeWhereStatus($query, $status)
|
|
||||||
{
|
|
||||||
return $query->where('invoices.status', $status);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function scopeWherePaidStatus($query, $status)
|
|
||||||
{
|
|
||||||
return $query->where('invoices.paid_status', $status);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function scopeWhereTabFilters($query, $status)
|
|
||||||
{
|
|
||||||
if ($status == "DRAFT") {
|
|
||||||
return $query->where('invoices.status', $status);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($status == "SENT") {
|
|
||||||
return $query->whereIn('invoices.status', [
|
|
||||||
self::STATUS_SENT,
|
|
||||||
self::STATUS_VIEWED,
|
|
||||||
self::STATUS_COMPLETED
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($status == 'DUE') {
|
|
||||||
return $query->whereIn('invoices.paid_status', [
|
|
||||||
self::STATUS_UNPAID,
|
|
||||||
self::STATUS_PARTIALLY_PAID,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function scopeApplyFilters($query, array $filters)
|
public function scopeApplyFilters($query, array $filters)
|
||||||
{
|
{
|
||||||
$filters = collect($filters);
|
$filters = collect($filters);
|
||||||
@ -273,11 +249,17 @@ class Invoice extends Model implements HasMedia
|
|||||||
$filters->get('status') == self::STATUS_PAID
|
$filters->get('status') == self::STATUS_PAID
|
||||||
) {
|
) {
|
||||||
$query->wherePaidStatus($filters->get('status'));
|
$query->wherePaidStatus($filters->get('status'));
|
||||||
|
} elseif ($filters->get('status') == 'DUE') {
|
||||||
|
$query->whereDueStatus($filters->get('status'));
|
||||||
} else {
|
} else {
|
||||||
$query->whereStatus($filters->get('status'));
|
$query->whereStatus($filters->get('status'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($filters->get('paid_status')) {
|
||||||
|
$query->wherePaidStatus($filters->get('status'));
|
||||||
|
}
|
||||||
|
|
||||||
if ($filters->get('invoice_id')) {
|
if ($filters->get('invoice_id')) {
|
||||||
$query->whereInvoice($filters->get('invoice_id'));
|
$query->whereInvoice($filters->get('invoice_id'));
|
||||||
}
|
}
|
||||||
@ -669,9 +651,7 @@ class Invoice extends Model implements HasMedia
|
|||||||
'{INVOICE_DATE}' => $this->formattedInvoiceDate,
|
'{INVOICE_DATE}' => $this->formattedInvoiceDate,
|
||||||
'{INVOICE_DUE_DATE}' => $this->formattedDueDate,
|
'{INVOICE_DUE_DATE}' => $this->formattedDueDate,
|
||||||
'{INVOICE_NUMBER}' => $this->invoice_number,
|
'{INVOICE_NUMBER}' => $this->invoice_number,
|
||||||
'{PDF_LINK}' => $this->invoicePdfUrl,
|
'{INVOICE_REF_NUMBER}' => $this->reference_number,
|
||||||
'{DUE_AMOUNT}' => format_money_pdf($this->due_amount, $this->customer->currency),
|
|
||||||
'{TOTAL_AMOUNT}' => format_money_pdf($this->total, $this->customer->currency)
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -435,8 +435,7 @@ class Payment extends Model implements HasMedia
|
|||||||
'{PAYMENT_DATE}' => $this->formattedPaymentDate,
|
'{PAYMENT_DATE}' => $this->formattedPaymentDate,
|
||||||
'{PAYMENT_MODE}' => $this->paymentMethod ? $this->paymentMethod->name : null,
|
'{PAYMENT_MODE}' => $this->paymentMethod ? $this->paymentMethod->name : null,
|
||||||
'{PAYMENT_NUMBER}' => $this->payment_number,
|
'{PAYMENT_NUMBER}' => $this->payment_number,
|
||||||
'{PDF_LINK}' => $this->paymentPdfUrl,
|
'{PAYMENT_AMOUNT}' => $this->reference_number,
|
||||||
'{PAYMENT_AMOUNT}' => format_money_pdf($this->amount, $this->customer->currency)
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -38,15 +38,15 @@
|
|||||||
"barryvdh/laravel-ide-helper": "^2.6",
|
"barryvdh/laravel-ide-helper": "^2.6",
|
||||||
"beyondcode/laravel-dump-server": "^1.0",
|
"beyondcode/laravel-dump-server": "^1.0",
|
||||||
"facade/ignition": "^2.3.6",
|
"facade/ignition": "^2.3.6",
|
||||||
"friendsofphp/php-cs-fixer": "^3.8",
|
"friendsofphp/php-cs-fixer": "^3.0",
|
||||||
"fakerphp/faker": "^1.9.1",
|
"fzaninotto/faker": "^1.9.1",
|
||||||
"mockery/mockery": "^1.3.1",
|
"mockery/mockery": "^1.3.1",
|
||||||
"nunomaduro/collision": "^5.0",
|
"nunomaduro/collision": "^5.0",
|
||||||
"pestphp/pest": "^1.0",
|
"pestphp/pest": "^1.0",
|
||||||
"pestphp/pest-plugin-faker": "^1.0",
|
"pestphp/pest-plugin-faker": "^1.0",
|
||||||
"pestphp/pest-plugin-laravel": "^1.0",
|
"pestphp/pest-plugin-laravel": "^1.0",
|
||||||
"pestphp/pest-plugin-parallel": "^0.2.1",
|
"pestphp/pest-plugin-parallel": "^0.2.1",
|
||||||
"phpunit/phpunit": "^9.3"
|
"phpunit/phpunit": "^9.0"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
@ -81,10 +81,7 @@
|
|||||||
"config": {
|
"config": {
|
||||||
"optimize-autoloader": true,
|
"optimize-autoloader": true,
|
||||||
"preferred-install": "dist",
|
"preferred-install": "dist",
|
||||||
"sort-packages": true,
|
"sort-packages": true
|
||||||
"allow-plugins": {
|
|
||||||
"pestphp/pest-plugin": true
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"extra": {
|
"extra": {
|
||||||
"laravel": {
|
"laravel": {
|
||||||
|
|||||||
2361
composer.lock
generated
2361
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@ -71,7 +71,6 @@ return [
|
|||||||
["code" => "cs", "name" => "Czech"],
|
["code" => "cs", "name" => "Czech"],
|
||||||
["code" => "el", "name" => "Greek"],
|
["code" => "el", "name" => "Greek"],
|
||||||
["code" => "hr", "name" => "Crotian"],
|
["code" => "hr", "name" => "Crotian"],
|
||||||
["code" => "th", "name" => "ไทย"],
|
|
||||||
],
|
],
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@ -170,7 +170,7 @@ class CountriesTableSeeder extends Seeder
|
|||||||
['id' => 152,'code' => 'NR','name' => "Nauru",'phonecode' => 674],
|
['id' => 152,'code' => 'NR','name' => "Nauru",'phonecode' => 674],
|
||||||
['id' => 153,'code' => 'NP','name' => "Nepal",'phonecode' => 977],
|
['id' => 153,'code' => 'NP','name' => "Nepal",'phonecode' => 977],
|
||||||
['id' => 154,'code' => 'AN','name' => "Netherlands Antilles",'phonecode' => 599],
|
['id' => 154,'code' => 'AN','name' => "Netherlands Antilles",'phonecode' => 599],
|
||||||
['id' => 155,'code' => 'NL','name' => "Netherlands",'phonecode' => 31],
|
['id' => 155,'code' => 'NL','name' => "Netherlands The",'phonecode' => 31],
|
||||||
['id' => 156,'code' => 'NC','name' => "New Caledonia",'phonecode' => 687],
|
['id' => 156,'code' => 'NC','name' => "New Caledonia",'phonecode' => 687],
|
||||||
['id' => 157,'code' => 'NZ','name' => "New Zealand",'phonecode' => 64],
|
['id' => 157,'code' => 'NZ','name' => "New Zealand",'phonecode' => 64],
|
||||||
['id' => 158,'code' => 'NI','name' => "Nicaragua",'phonecode' => 505],
|
['id' => 158,'code' => 'NI','name' => "Nicaragua",'phonecode' => 505],
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
FROM php:8.0-fpm-alpine
|
FROM php:7.4-fpm-alpine
|
||||||
|
|
||||||
RUN apk add --no-cache \
|
RUN apk add --no-cache \
|
||||||
php8-bcmath
|
php7-bcmath
|
||||||
|
|
||||||
RUN docker-php-ext-install pdo pdo_mysql bcmath
|
RUN docker-php-ext-install pdo pdo_mysql bcmath
|
||||||
|
|
||||||
|
|||||||
@ -27,7 +27,7 @@
|
|||||||
"vite": "^2.6.1"
|
"vite": "^2.6.1"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@headlessui/vue": "^1.5.0",
|
"@headlessui/vue": "^1.4.0",
|
||||||
"@heroicons/vue": "^1.0.1",
|
"@heroicons/vue": "^1.0.1",
|
||||||
"@popperjs/core": "^2.9.2",
|
"@popperjs/core": "^2.9.2",
|
||||||
"@stripe/stripe-js": "^1.21.2",
|
"@stripe/stripe-js": "^1.21.2",
|
||||||
@ -48,8 +48,7 @@
|
|||||||
"mini-svg-data-uri": "^1.3.3",
|
"mini-svg-data-uri": "^1.3.3",
|
||||||
"moment": "^2.29.1",
|
"moment": "^2.29.1",
|
||||||
"pinia": "^2.0.4",
|
"pinia": "^2.0.4",
|
||||||
"v-calendar": "3.0.0-alpha.8",
|
"v-money3": "^3.13.5",
|
||||||
"v-money3": "3.16.1",
|
|
||||||
"v-tooltip": "^4.0.0-alpha.1",
|
"v-tooltip": "^4.0.0-alpha.1",
|
||||||
"vue": "^3.2.0-beta.5",
|
"vue": "^3.2.0-beta.5",
|
||||||
"vue-flatpickr-component": "^9.0.3",
|
"vue-flatpickr-component": "^9.0.3",
|
||||||
|
|||||||
@ -83,25 +83,25 @@
|
|||||||
@click="selectNote(index, close)"
|
@click="selectNote(index, close)"
|
||||||
>
|
>
|
||||||
<div class="flex justify-between px-2">
|
<div class="flex justify-between px-2">
|
||||||
<BaseLabel
|
<label
|
||||||
class="
|
class="
|
||||||
!m-0
|
m-0
|
||||||
!text-base
|
text-base
|
||||||
!font-semibold
|
font-semibold
|
||||||
!leading-tight
|
leading-tight
|
||||||
!text-gray-700
|
text-gray-700
|
||||||
!cursor-pointer
|
cursor-pointer
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
{{ note.name }}
|
{{ note.name }}
|
||||||
</BaseLabel>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-else class="flex justify-center p-5 text-gray-400">
|
<div v-else class="flex justify-center p-5 text-gray-400">
|
||||||
<BaseLabel class="!text-base !text-gray-500">
|
<label class="text-base text-gray-500">
|
||||||
{{ $t('general.no_note_found') }}
|
{{ $t('general.no_note_found') }}
|
||||||
</BaseLabel>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<button
|
<button
|
||||||
@ -122,18 +122,19 @@
|
|||||||
@click="openNoteModal"
|
@click="openNoteModal"
|
||||||
>
|
>
|
||||||
<BaseIcon name="CheckCircleIcon" class="text-primary-400" />
|
<BaseIcon name="CheckCircleIcon" class="text-primary-400" />
|
||||||
<BaseLabel
|
<label
|
||||||
class="
|
class="
|
||||||
!m-0
|
m-0
|
||||||
!ml-3
|
ml-3
|
||||||
!leading-none
|
text-sm
|
||||||
!cursor-pointer
|
leading-none
|
||||||
!font-base
|
cursor-pointer
|
||||||
!text-primary-400
|
font-base
|
||||||
|
text-primary-400
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
{{ $t('settings.customization.notes.add_new_note') }}
|
{{ $t('settings.customization.notes.add_new_note') }}
|
||||||
</BaseLabel>
|
</label>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</PopoverPanel>
|
</PopoverPanel>
|
||||||
|
|||||||
@ -64,7 +64,7 @@ function mergeExistingValues() {
|
|||||||
if (props.isEdit) {
|
if (props.isEdit) {
|
||||||
props.store[props.storeProp].fields.forEach((field) => {
|
props.store[props.storeProp].fields.forEach((field) => {
|
||||||
const existingIndex = props.store[props.storeProp].customFields.findIndex(
|
const existingIndex = props.store[props.storeProp].customFields.findIndex(
|
||||||
(f) => f.id == field.custom_field_id
|
(f) => f.id === field.custom_field_id
|
||||||
)
|
)
|
||||||
|
|
||||||
if (existingIndex > -1) {
|
if (existingIndex > -1) {
|
||||||
|
|||||||
@ -9,7 +9,7 @@ import { computed } from 'vue'
|
|||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
modelValue: {
|
modelValue: {
|
||||||
type: String,
|
type: String,
|
||||||
default: moment().format('YYYY-MM-DD HH:mm'),
|
default: moment().format('YYYY-MM-DD hh:MM'),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@ -17,7 +17,18 @@
|
|||||||
<td class="px-5 py-4 text-left align-top">
|
<td class="px-5 py-4 text-left align-top">
|
||||||
<div class="flex justify-start">
|
<div class="flex justify-start">
|
||||||
<div
|
<div
|
||||||
class="flex items-center justify-center w-5 h-5 mt-2 mr-2 text-gray-300 cursor-move handle"
|
class="
|
||||||
|
flex
|
||||||
|
items-center
|
||||||
|
justify-center
|
||||||
|
w-5
|
||||||
|
h-5
|
||||||
|
mt-2
|
||||||
|
text-gray-300
|
||||||
|
cursor-move
|
||||||
|
handle
|
||||||
|
mr-2
|
||||||
|
"
|
||||||
>
|
>
|
||||||
<DragIcon />
|
<DragIcon />
|
||||||
</div>
|
</div>
|
||||||
@ -97,7 +108,7 @@
|
|||||||
|
|
||||||
<BaseIcon
|
<BaseIcon
|
||||||
name="ChevronDownIcon"
|
name="ChevronDownIcon"
|
||||||
class="w-4 h-4 ml-1 text-gray-500"
|
class="w-4 h-4 text-gray-500 ml-1"
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
</BaseButton>
|
</BaseButton>
|
||||||
@ -144,7 +155,7 @@
|
|||||||
<BaseContentPlaceholders v-if="loading">
|
<BaseContentPlaceholders v-if="loading">
|
||||||
<BaseContentPlaceholdersText
|
<BaseContentPlaceholdersText
|
||||||
:lines="1"
|
:lines="1"
|
||||||
class="w-24 h-8 border rounded-md"
|
class="w-24 h-8 rounded-md border"
|
||||||
/>
|
/>
|
||||||
</BaseContentPlaceholders>
|
</BaseContentPlaceholders>
|
||||||
|
|
||||||
@ -164,7 +175,6 @@
|
|||||||
:ability="abilities.CREATE_INVOICE"
|
:ability="abilities.CREATE_INVOICE"
|
||||||
:store="store"
|
:store="store"
|
||||||
:store-prop="storeProp"
|
:store-prop="storeProp"
|
||||||
:discount="discount"
|
|
||||||
@update="updateTax"
|
@update="updateTax"
|
||||||
/>
|
/>
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="flex items-center justify-between mb-3">
|
<div class="flex items-center justify-between mb-3">
|
||||||
<div class="flex items-center text-base" style="flex: 4">
|
<div class="flex items-center text-base" style="flex: 4">
|
||||||
<BaseLabel class="!pr-2 !mb-0" align="right">
|
<label class="pr-2 mb-0" align="right">
|
||||||
{{ $t('invoices.item.tax') }}
|
{{ $t('invoices.item.tax') }}
|
||||||
</BaseLabel>
|
</label>
|
||||||
|
|
||||||
<BaseMultiselect
|
<BaseMultiselect
|
||||||
v-model="selectedTax"
|
v-model="selectedTax"
|
||||||
@ -30,14 +30,25 @@
|
|||||||
<template v-if="userStore.hasAbilities(ability)" #action>
|
<template v-if="userStore.hasAbilities(ability)" #action>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
class="flex items-center justify-center w-full px-2 py-2 bg-gray-200 border-none outline-none cursor-pointer "
|
class="
|
||||||
|
flex
|
||||||
|
items-center
|
||||||
|
justify-center
|
||||||
|
w-full
|
||||||
|
px-2
|
||||||
|
cursor-pointer
|
||||||
|
py-2
|
||||||
|
bg-gray-200
|
||||||
|
border-none
|
||||||
|
outline-none
|
||||||
|
"
|
||||||
@click="openTaxModal"
|
@click="openTaxModal"
|
||||||
>
|
>
|
||||||
<BaseIcon name="CheckCircleIcon" class="h-5 text-primary-400" />
|
<BaseIcon name="CheckCircleIcon" class="h-5 text-primary-400" />
|
||||||
|
|
||||||
<BaseLabel
|
<label
|
||||||
class="!ml-2 !leading-none !cursor-pointer !text-primary-400"
|
class="ml-2 text-sm leading-none text-primary-400 cursor-pointer"
|
||||||
>{{ $t('invoices.add_new_tax') }}</BaseLabel
|
>{{ $t('invoices.add_new_tax') }}</label
|
||||||
>
|
>
|
||||||
</button>
|
</button>
|
||||||
</template>
|
</template>
|
||||||
@ -104,10 +115,6 @@ const props = defineProps({
|
|||||||
type: Number,
|
type: Number,
|
||||||
default: 0,
|
default: 0,
|
||||||
},
|
},
|
||||||
discountedTotal: {
|
|
||||||
type: Number,
|
|
||||||
default: 0,
|
|
||||||
},
|
|
||||||
currency: {
|
currency: {
|
||||||
type: [Object, String],
|
type: [Object, String],
|
||||||
required: true,
|
required: true,
|
||||||
@ -146,19 +153,19 @@ const filteredTypes = computed(() => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
const taxAmount = computed(() => {
|
const taxAmount = computed(() => {
|
||||||
if (localTax.compound_tax && props.discountedTotal) {
|
if (localTax.compound_tax && props.total) {
|
||||||
return ((props.discountedTotal + props.totalTax) * localTax.percent) / 100
|
return ((props.total + props.totalTax) * localTax.percent) / 100
|
||||||
}
|
}
|
||||||
|
|
||||||
if (props.discountedTotal && localTax.percent) {
|
if (props.total && localTax.percent) {
|
||||||
return (props.discountedTotal * localTax.percent) / 100
|
return (props.total * localTax.percent) / 100
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
})
|
})
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => props.discountedTotal,
|
() => props.total,
|
||||||
() => {
|
() => {
|
||||||
updateRowTax()
|
updateRowTax()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,9 +5,9 @@
|
|||||||
>
|
>
|
||||||
<SelectNotePopup :type="type" @select="onSelectNote" />
|
<SelectNotePopup :type="type" @select="onSelectNote" />
|
||||||
</div>
|
</div>
|
||||||
<BaseLabel class="!text-gray-800 !mb-4 ">
|
<label class="text-gray-800 font-medium mb-4 text-sm">
|
||||||
{{ $t('invoices.notes') }}
|
{{ $t('invoices.notes') }}
|
||||||
</BaseLabel>
|
</label>
|
||||||
<BaseCustomInput
|
<BaseCustomInput
|
||||||
v-model="store[storeProp].notes"
|
v-model="store[storeProp].notes"
|
||||||
:content-loading="store.isFetchingInitialSettings"
|
:content-loading="store.isFetchingInitialSettings"
|
||||||
|
|||||||
@ -16,12 +16,12 @@
|
|||||||
<BaseContentPlaceholders v-if="isLoading">
|
<BaseContentPlaceholders v-if="isLoading">
|
||||||
<BaseContentPlaceholdersText :lines="1" class="w-16 h-5" />
|
<BaseContentPlaceholdersText :lines="1" class="w-16 h-5" />
|
||||||
</BaseContentPlaceholders>
|
</BaseContentPlaceholders>
|
||||||
<BaseLabel
|
<label
|
||||||
v-else
|
v-else
|
||||||
class="!font-semibold !text-gray-400 !uppercase"
|
class="text-sm font-semibold leading-5 text-gray-400 uppercase"
|
||||||
>
|
>
|
||||||
{{ $t('estimates.sub_total') }}
|
{{ $t('estimates.sub_total') }}
|
||||||
</BaseLabel>
|
</label>
|
||||||
|
|
||||||
<BaseContentPlaceholders v-if="isLoading">
|
<BaseContentPlaceholders v-if="isLoading">
|
||||||
<BaseContentPlaceholdersText :lines="1" class="w-16 h-5" />
|
<BaseContentPlaceholdersText :lines="1" class="w-16 h-5" />
|
||||||
@ -29,7 +29,14 @@
|
|||||||
|
|
||||||
<label
|
<label
|
||||||
v-else
|
v-else
|
||||||
class="flex items-center justify-center m-0 text-lg text-black dark:text-white uppercase "
|
class="
|
||||||
|
flex
|
||||||
|
items-center
|
||||||
|
justify-center
|
||||||
|
m-0
|
||||||
|
text-lg text-black
|
||||||
|
uppercase
|
||||||
|
"
|
||||||
>
|
>
|
||||||
<BaseFormatMoney
|
<BaseFormatMoney
|
||||||
:amount="store.getSubTotal"
|
:amount="store.getSubTotal"
|
||||||
@ -48,7 +55,7 @@
|
|||||||
</BaseContentPlaceholders>
|
</BaseContentPlaceholders>
|
||||||
<label
|
<label
|
||||||
v-else-if="store[storeProp].tax_per_item === 'YES'"
|
v-else-if="store[storeProp].tax_per_item === 'YES'"
|
||||||
class="m-0 text-sm font-semibold leading-5 text-gray-500 uppercase dark:text-gray-400"
|
class="m-0 text-sm font-semibold leading-5 text-gray-500 uppercase"
|
||||||
>
|
>
|
||||||
{{ tax.name }} - {{ tax.percent }}%
|
{{ tax.name }} - {{ tax.percent }}%
|
||||||
</label>
|
</label>
|
||||||
@ -59,7 +66,14 @@
|
|||||||
|
|
||||||
<label
|
<label
|
||||||
v-else-if="store[storeProp].tax_per_item === 'YES'"
|
v-else-if="store[storeProp].tax_per_item === 'YES'"
|
||||||
class="flex items-center justify-center m-0 text-lg text-black dark:text-white uppercase "
|
class="
|
||||||
|
flex
|
||||||
|
items-center
|
||||||
|
justify-center
|
||||||
|
m-0
|
||||||
|
text-lg text-black
|
||||||
|
uppercase
|
||||||
|
"
|
||||||
>
|
>
|
||||||
<BaseFormatMoney :amount="tax.amount" :currency="defaultCurrency" />
|
<BaseFormatMoney :amount="tax.amount" :currency="defaultCurrency" />
|
||||||
</label>
|
</label>
|
||||||
@ -75,16 +89,16 @@
|
|||||||
<BaseContentPlaceholders v-if="isLoading">
|
<BaseContentPlaceholders v-if="isLoading">
|
||||||
<BaseContentPlaceholdersText :lines="1" class="w-16 h-5" />
|
<BaseContentPlaceholdersText :lines="1" class="w-16 h-5" />
|
||||||
</BaseContentPlaceholders>
|
</BaseContentPlaceholders>
|
||||||
<BaseLabel
|
<label
|
||||||
v-else
|
v-else
|
||||||
class=" !font-semibold !text-gray-400 !uppercase"
|
class="text-sm font-semibold leading-5 text-gray-400 uppercase"
|
||||||
>
|
>
|
||||||
{{ $t('estimates.discount') }}
|
{{ $t('estimates.discount') }}
|
||||||
</BaseLabel>
|
</label>
|
||||||
<BaseContentPlaceholders v-if="isLoading">
|
<BaseContentPlaceholders v-if="isLoading">
|
||||||
<BaseContentPlaceholdersText
|
<BaseContentPlaceholdersText
|
||||||
:lines="1"
|
:lines="1"
|
||||||
class="w-24 h-8 border rounded-md"
|
class="w-24 h-8 rounded-md border"
|
||||||
/>
|
/>
|
||||||
</BaseContentPlaceholders>
|
</BaseContentPlaceholders>
|
||||||
<div v-else class="flex" style="width: 140px" role="group">
|
<div v-else class="flex" style="width: 140px" role="group">
|
||||||
@ -100,7 +114,7 @@
|
|||||||
<BaseDropdown position="bottom-end">
|
<BaseDropdown position="bottom-end">
|
||||||
<template #activator>
|
<template #activator>
|
||||||
<BaseButton
|
<BaseButton
|
||||||
class="p-2 rounded-none rounded-tr-md rounded-br-md"
|
class="rounded-tr-md rounded-br-md p-2 rounded-none"
|
||||||
type="button"
|
type="button"
|
||||||
variant="white"
|
variant="white"
|
||||||
>
|
>
|
||||||
@ -113,7 +127,7 @@
|
|||||||
|
|
||||||
<BaseIcon
|
<BaseIcon
|
||||||
name="ChevronDownIcon"
|
name="ChevronDownIcon"
|
||||||
class="w-4 h-4 ml-1 text-gray-500"
|
class="w-4 h-4 text-gray-500 ml-1"
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
</BaseButton>
|
</BaseButton>
|
||||||
@ -166,26 +180,41 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
class="flex items-center justify-between w-full pt-2 mt-5 border-t border-gray-200 border-solid "
|
class="
|
||||||
|
flex
|
||||||
|
items-center
|
||||||
|
justify-between
|
||||||
|
w-full
|
||||||
|
pt-2
|
||||||
|
mt-5
|
||||||
|
border-t border-gray-200 border-solid
|
||||||
|
"
|
||||||
>
|
>
|
||||||
<BaseContentPlaceholders v-if="isLoading">
|
<BaseContentPlaceholders v-if="isLoading">
|
||||||
<BaseContentPlaceholdersText :lines="1" class="w-16 h-5" />
|
<BaseContentPlaceholdersText :lines="1" class="w-16 h-5" />
|
||||||
</BaseContentPlaceholders>
|
</BaseContentPlaceholders>
|
||||||
<BaseLabel
|
<label
|
||||||
v-else
|
v-else
|
||||||
class="!m-0 !font-semibold !text-gray-400 !uppercase"
|
class="m-0 text-sm font-semibold leading-5 text-gray-400 uppercase"
|
||||||
>{{ $t('estimates.total') }} {{ $t('estimates.amount') }}:</BaseLabel
|
>{{ $t('estimates.total') }} {{ $t('estimates.amount') }}:</label
|
||||||
>
|
>
|
||||||
|
|
||||||
<BaseContentPlaceholders v-if="isLoading">
|
<BaseContentPlaceholders v-if="isLoading">
|
||||||
<BaseContentPlaceholdersText :lines="1" class="w-16 h-5" />
|
<BaseContentPlaceholdersText :lines="1" class="w-16 h-5" />
|
||||||
</BaseContentPlaceholders>
|
</BaseContentPlaceholders>
|
||||||
<BaseLabel
|
<label
|
||||||
v-else
|
v-else
|
||||||
class="!flex !items-center !justify-center !text-lg !uppercase !text-primary-400"
|
class="
|
||||||
|
flex
|
||||||
|
items-center
|
||||||
|
justify-center
|
||||||
|
text-lg
|
||||||
|
uppercase
|
||||||
|
text-primary-400
|
||||||
|
"
|
||||||
>
|
>
|
||||||
<BaseFormatMoney :amount="store.getTotal" :currency="defaultCurrency" />
|
<BaseFormatMoney :amount="store.getTotal" :currency="defaultCurrency" />
|
||||||
</BaseLabel>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -305,7 +334,6 @@ function selectPercentage() {
|
|||||||
|
|
||||||
function onSelectTax(selectedTax) {
|
function onSelectTax(selectedTax) {
|
||||||
let amount = 0
|
let amount = 0
|
||||||
|
|
||||||
if (selectedTax.compound_tax && props.store.getSubtotalWithDiscount) {
|
if (selectedTax.compound_tax && props.store.getSubtotalWithDiscount) {
|
||||||
amount = Math.round(
|
amount = Math.round(
|
||||||
((props.store.getSubtotalWithDiscount + props.store.getTotalSimpleTax) *
|
((props.store.getSubtotalWithDiscount + props.store.getTotalSimpleTax) *
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="flex items-center justify-between w-full mt-2 text-sm">
|
<div class="flex items-center justify-between w-full mt-2 text-sm">
|
||||||
<BaseLabel class="!font-semibold !text-gray-500 !uppercase">
|
<label class="font-semibold leading-5 text-gray-500 uppercase">
|
||||||
{{ tax.name }} ({{ tax.percent }} %)
|
{{ tax.name }} ({{ tax.percent }} %)
|
||||||
</BaseLabel>
|
</label>
|
||||||
<label class="flex items-center justify-center text-lg text-black dark:text-white">
|
<label class="flex items-center justify-center text-lg text-black">
|
||||||
<BaseFormatMoney :amount="tax.amount" :currency="currency" />
|
<BaseFormatMoney :amount="tax.amount" :currency="currency" />
|
||||||
|
|
||||||
<BaseIcon
|
<BaseIcon
|
||||||
|
|||||||
@ -88,37 +88,38 @@
|
|||||||
@click="selectTaxType(taxType, close)"
|
@click="selectTaxType(taxType, close)"
|
||||||
>
|
>
|
||||||
<div class="flex justify-between px-2">
|
<div class="flex justify-between px-2">
|
||||||
<BaseLabel
|
<label
|
||||||
class="
|
class="
|
||||||
!m-0
|
m-0
|
||||||
!text-base
|
text-base
|
||||||
!font-semibold
|
font-semibold
|
||||||
!leading-tight
|
leading-tight
|
||||||
!cursor-pointer
|
text-gray-700
|
||||||
|
cursor-pointer
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
{{ taxType.name }}
|
{{ taxType.name }}
|
||||||
</BaseLabel>
|
</label>
|
||||||
|
|
||||||
<BaseLabel
|
<label
|
||||||
class="
|
class="
|
||||||
!m-0
|
m-0
|
||||||
!text-base
|
text-base
|
||||||
!font-semibold
|
font-semibold
|
||||||
!text-gray-700
|
text-gray-700
|
||||||
!cursor-pointer
|
cursor-pointer
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
{{ taxType.percent }} %
|
{{ taxType.percent }} %
|
||||||
</BaseLabel>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-else class="flex justify-center p-5 text-gray-400">
|
<div v-else class="flex justify-center p-5 text-gray-400">
|
||||||
<BaseLabel class="!text-base !text-gray-500 !cursor-pointer">
|
<label class="text-base text-gray-500 cursor-pointer">
|
||||||
{{ $t('general.no_tax_found') }}
|
{{ $t('general.no_tax_found') }}
|
||||||
</BaseLabel>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -141,18 +142,19 @@
|
|||||||
@click="openTaxTypeModal"
|
@click="openTaxTypeModal"
|
||||||
>
|
>
|
||||||
<BaseIcon name="CheckCircleIcon" class="text-primary-400" />
|
<BaseIcon name="CheckCircleIcon" class="text-primary-400" />
|
||||||
<BaseLabel
|
<label
|
||||||
class="
|
class="
|
||||||
!m-0
|
m-0
|
||||||
!ml-3
|
ml-3
|
||||||
!leading-none
|
text-sm
|
||||||
!cursor-pointer
|
leading-none
|
||||||
!font-base
|
cursor-pointer
|
||||||
!text-primary-400
|
font-base
|
||||||
|
text-primary-400
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
{{ $t('estimates.add_new_tax') }}
|
{{ $t('estimates.add_new_tax') }}
|
||||||
</BaseLabel>
|
</label>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</PopoverPanel>
|
</PopoverPanel>
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<BaseLabel class="!flex !text-gray-800 !mb-2">
|
<label class="flex text-gray-800 font-medium text-sm mb-2">
|
||||||
{{ $t('general.select_template') }}
|
{{ $t('general.select_template') }}
|
||||||
<span class="text-sm text-red-500"> *</span>
|
<span class="text-sm text-red-500"> *</span>
|
||||||
</BaseLabel>
|
</label>
|
||||||
<BaseButton
|
<BaseButton
|
||||||
type="button"
|
type="button"
|
||||||
class="flex justify-center w-full text-sm lg:w-auto hover:bg-gray-200"
|
class="flex justify-center w-full text-sm lg:w-auto hover:bg-gray-200"
|
||||||
|
|||||||
@ -48,24 +48,6 @@
|
|||||||
/>
|
/>
|
||||||
</BaseInputGroup>
|
</BaseInputGroup>
|
||||||
|
|
||||||
<BaseInputGroup
|
|
||||||
:label="$tc('settings.company_info.company_slug')"
|
|
||||||
:help-text="$t('settings.company_info.company_slug_help_text')"
|
|
||||||
:error="
|
|
||||||
v$.newCompanyForm.slug.$error &&
|
|
||||||
v$.newCompanyForm.slug.$errors[0].$message
|
|
||||||
"
|
|
||||||
:content-loading="isFetchingInitialData"
|
|
||||||
required
|
|
||||||
>
|
|
||||||
<BaseInput
|
|
||||||
v-model="newCompanyForm.slug"
|
|
||||||
:invalid="v$.newCompanyForm.slug.$error"
|
|
||||||
:content-loading="isFetchingInitialData"
|
|
||||||
@input="v$.newCompanyForm.slug.$touch()"
|
|
||||||
/>
|
|
||||||
</BaseInputGroup>
|
|
||||||
|
|
||||||
<BaseInputGroup
|
<BaseInputGroup
|
||||||
:content-loading="isFetchingInitialData"
|
:content-loading="isFetchingInitialData"
|
||||||
:label="$tc('settings.company_info.country')"
|
:label="$tc('settings.company_info.country')"
|
||||||
@ -148,7 +130,7 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { useModalStore } from '@/scripts/stores/modal'
|
import { useModalStore } from '@/scripts/stores/modal'
|
||||||
import { computed, onMounted, ref, reactive, watch } from 'vue'
|
import { computed, onMounted, ref, reactive } from 'vue'
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
import { required, minLength, helpers } from '@vuelidate/validators'
|
import { required, minLength, helpers } from '@vuelidate/validators'
|
||||||
import { useVuelidate } from '@vuelidate/core'
|
import { useVuelidate } from '@vuelidate/core'
|
||||||
@ -170,7 +152,6 @@ let companyLogoName = ref(null)
|
|||||||
|
|
||||||
const newCompanyForm = reactive({
|
const newCompanyForm = reactive({
|
||||||
name: null,
|
name: null,
|
||||||
slug: null,
|
|
||||||
currency: '',
|
currency: '',
|
||||||
address: {
|
address: {
|
||||||
country_id: null,
|
country_id: null,
|
||||||
@ -181,9 +162,6 @@ const modalActive = computed(() => {
|
|||||||
return modalStore.active && modalStore.componentName === 'CompanyModal'
|
return modalStore.active && modalStore.componentName === 'CompanyModal'
|
||||||
})
|
})
|
||||||
|
|
||||||
const slugValidator = (value) => {
|
|
||||||
return value == slugify(value)
|
|
||||||
}
|
|
||||||
const rules = {
|
const rules = {
|
||||||
newCompanyForm: {
|
newCompanyForm: {
|
||||||
name: {
|
name: {
|
||||||
@ -193,17 +171,6 @@ const rules = {
|
|||||||
minLength(3)
|
minLength(3)
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
slug: {
|
|
||||||
required: helpers.withMessage(t('validation.required'), required),
|
|
||||||
minLength: helpers.withMessage(
|
|
||||||
t('validation.name_min_length', { count: 3 }),
|
|
||||||
minLength(3)
|
|
||||||
),
|
|
||||||
slugValidator: helpers.withMessage(
|
|
||||||
t('validation.invalid_slug'),
|
|
||||||
slugValidator
|
|
||||||
),
|
|
||||||
},
|
|
||||||
address: {
|
address: {
|
||||||
country_id: {
|
country_id: {
|
||||||
required: helpers.withMessage(t('validation.required'), required),
|
required: helpers.withMessage(t('validation.required'), required),
|
||||||
@ -276,7 +243,6 @@ async function submitCompanyData() {
|
|||||||
|
|
||||||
function resetNewCompanyForm() {
|
function resetNewCompanyForm() {
|
||||||
newCompanyForm.name = ''
|
newCompanyForm.name = ''
|
||||||
newCompanyForm.slug = ''
|
|
||||||
newCompanyForm.currency = ''
|
newCompanyForm.currency = ''
|
||||||
newCompanyForm.address.country_id = ''
|
newCompanyForm.address.country_id = ''
|
||||||
|
|
||||||
@ -291,24 +257,4 @@ function closeCompanyModal() {
|
|||||||
v$.value.$reset()
|
v$.value.$reset()
|
||||||
}, 300)
|
}, 300)
|
||||||
}
|
}
|
||||||
|
|
||||||
// watcher for if change company name then auto fill company slug value
|
|
||||||
watch(
|
|
||||||
() => newCompanyForm.name,
|
|
||||||
(currentValue) => {
|
|
||||||
newCompanyForm.slug = slugify(currentValue)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
function slugify(string) {
|
|
||||||
return string
|
|
||||||
.toString()
|
|
||||||
.trim()
|
|
||||||
.toLowerCase()
|
|
||||||
.replace(/\s+/g, '-')
|
|
||||||
.replace(/[^\w\-]+/g, '')
|
|
||||||
.replace(/\-\-+/g, '-')
|
|
||||||
.replace(/^-+/, '')
|
|
||||||
.replace(/-+$/, '')
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -15,13 +15,6 @@
|
|||||||
bg-gradient-to-r
|
bg-gradient-to-r
|
||||||
from-primary-500
|
from-primary-500
|
||||||
to-primary-400
|
to-primary-400
|
||||||
dark:from-gray-700/70 dark:to-gray-800/70
|
|
||||||
bg-primary-500
|
|
||||||
dark:bg-transparent
|
|
||||||
dark:backdrop-blur-xl
|
|
||||||
dark:shadow-glass
|
|
||||||
dark:border
|
|
||||||
dark:border-white/10
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<router-link
|
<router-link
|
||||||
@ -60,7 +53,6 @@
|
|||||||
cursor-pointer
|
cursor-pointer
|
||||||
md:hidden md:ml-0
|
md:hidden md:ml-0
|
||||||
hover:bg-gray-100
|
hover:bg-gray-100
|
||||||
dark:bg-gray-800 dark:border-gray-500 dark:border
|
|
||||||
"
|
"
|
||||||
@click.prevent="onToggle"
|
@click.prevent="onToggle"
|
||||||
>
|
>
|
||||||
@ -151,7 +143,7 @@
|
|||||||
<template #activator>
|
<template #activator>
|
||||||
<img
|
<img
|
||||||
:src="previewAvatar"
|
:src="previewAvatar"
|
||||||
class="block w-8 h-8 rounded md:h-9 md:w-9 object-cover"
|
class="block w-8 h-8 rounded md:h-9 md:w-9"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@ -15,9 +15,7 @@
|
|||||||
leave-from="opacity-100"
|
leave-from="opacity-100"
|
||||||
leave-to="opacity-0"
|
leave-to="opacity-0"
|
||||||
>
|
>
|
||||||
<DialogOverlay
|
<DialogOverlay class="fixed inset-0 bg-gray-600 bg-opacity-75" />
|
||||||
class="fixed inset-0 bg-gray-600 bg-opacity-75 dark:bg-gray-900/90"
|
|
||||||
/>
|
|
||||||
</TransitionChild>
|
</TransitionChild>
|
||||||
|
|
||||||
<TransitionChild
|
<TransitionChild
|
||||||
@ -29,9 +27,7 @@
|
|||||||
leave-from="translate-x-0"
|
leave-from="translate-x-0"
|
||||||
leave-to="-translate-x-full"
|
leave-to="-translate-x-full"
|
||||||
>
|
>
|
||||||
<div
|
<div class="relative flex flex-col flex-1 w-full max-w-xs bg-white">
|
||||||
class="relative flex flex-col flex-1 w-full max-w-xs bg-white dark:bg-gray-800"
|
|
||||||
>
|
|
||||||
<TransitionChild
|
<TransitionChild
|
||||||
as="template"
|
as="template"
|
||||||
enter="ease-in-out duration-300"
|
enter="ease-in-out duration-300"
|
||||||
@ -54,7 +50,8 @@
|
|||||||
focus:outline-none
|
focus:outline-none
|
||||||
focus:ring-2
|
focus:ring-2
|
||||||
focus:ring-inset
|
focus:ring-inset
|
||||||
focus:ring-white"
|
focus:ring-white
|
||||||
|
"
|
||||||
@click="globalStore.setSidebarVisibility(false)"
|
@click="globalStore.setSidebarVisibility(false)"
|
||||||
>
|
>
|
||||||
<span class="sr-only">Close sidebar</span>
|
<span class="sr-only">Close sidebar</span>
|
||||||
@ -85,8 +82,8 @@
|
|||||||
:to="item.link"
|
:to="item.link"
|
||||||
:class="[
|
:class="[
|
||||||
hasActiveUrl(item.link)
|
hasActiveUrl(item.link)
|
||||||
? 'text-primary-500 border-primary-500 bg-gray-100 dark:shadow-glass dark:backdrop-blur-xl dark:hover:bg-gray-700 dark:bg-gray-700/50 dark:text-primary-400 dark:font-medium'
|
? 'text-primary-500 border-primary-500 bg-gray-100 '
|
||||||
: 'text-black dark:text-gray-300',
|
: 'text-black',
|
||||||
'cursor-pointer px-0 pl-4 py-3 border-transparent flex items-center border-l-4 border-solid text-sm not-italic font-medium',
|
'cursor-pointer px-0 pl-4 py-3 border-transparent flex items-center border-l-4 border-solid text-sm not-italic font-medium',
|
||||||
]"
|
]"
|
||||||
@click="globalStore.setSidebarVisibility(false)"
|
@click="globalStore.setSidebarVisibility(false)"
|
||||||
@ -103,10 +100,6 @@
|
|||||||
/>
|
/>
|
||||||
{{ $t(item.title) }}
|
{{ $t(item.title) }}
|
||||||
</router-link>
|
</router-link>
|
||||||
<LightDarkSwitch
|
|
||||||
:show-label="false"
|
|
||||||
class="absolute right-6 top-6 !w-auto"
|
|
||||||
/>
|
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -123,13 +116,14 @@
|
|||||||
hidden
|
hidden
|
||||||
w-56
|
w-56
|
||||||
h-screen
|
h-screen
|
||||||
|
pb-32
|
||||||
|
overflow-y-auto
|
||||||
bg-white
|
bg-white
|
||||||
border-r border-gray-200 border-solid
|
border-r border-gray-200 border-solid
|
||||||
xl:w-64
|
xl:w-64
|
||||||
md:fixed md:flex md:flex-col md:inset-y-0
|
md:fixed md:flex md:flex-col md:inset-y-0
|
||||||
pt-16
|
pt-16
|
||||||
dark:border-gray-800
|
"
|
||||||
dark:bg-gray-800/80"
|
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
v-for="menu in globalStore.menuGroups"
|
v-for="menu in globalStore.menuGroups"
|
||||||
@ -142,8 +136,8 @@
|
|||||||
:to="item.link"
|
:to="item.link"
|
||||||
:class="[
|
:class="[
|
||||||
hasActiveUrl(item.link)
|
hasActiveUrl(item.link)
|
||||||
? 'text-primary-500 border-primary-500 bg-gray-100 dark:border-primary-400 dark:shadow-glass dark:backdrop-blur-xl dark:hover:bg-gray-700 dark:bg-gray-700/50 dark:text-primary-400 dark:font-medium'
|
? 'text-primary-500 border-primary-500 bg-gray-100 '
|
||||||
: 'text-black dark:hover:bg-transparent dark:hover:text-white dark:text-gray-300',
|
: 'text-black',
|
||||||
'cursor-pointer px-0 pl-6 hover:bg-gray-50 py-3 group flex items-center border-l-4 border-solid border-transparent text-sm not-italic font-medium',
|
'cursor-pointer px-0 pl-6 hover:bg-gray-50 py-3 group flex items-center border-l-4 border-solid border-transparent text-sm not-italic font-medium',
|
||||||
]"
|
]"
|
||||||
>
|
>
|
||||||
@ -151,8 +145,8 @@
|
|||||||
:name="item.icon"
|
:name="item.icon"
|
||||||
:class="[
|
:class="[
|
||||||
hasActiveUrl(item.link)
|
hasActiveUrl(item.link)
|
||||||
? 'text-primary-500 group-hover:text-primary-500 dark:text-primary-400 dark:group-hover:text-primary-500 '
|
? 'text-primary-500 group-hover:text-primary-500 '
|
||||||
: 'text-gray-400 group-hover:text-black dark:text-gray-400 dark:group-hover:text-white',
|
: 'text-gray-400 group-hover:text-black',
|
||||||
'mr-4 shrink-0 h-5 w-5 ',
|
'mr-4 shrink-0 h-5 w-5 ',
|
||||||
]"
|
]"
|
||||||
/>
|
/>
|
||||||
@ -160,9 +154,6 @@
|
|||||||
{{ $t(item.title) }}
|
{{ $t(item.title) }}
|
||||||
</router-link>
|
</router-link>
|
||||||
</div>
|
</div>
|
||||||
<LightDarkSwitch
|
|
||||||
class="absolute bottom-0 py-4 border-t border-gray-200 dark:border-gray-700"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -178,7 +169,6 @@ import {
|
|||||||
|
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router'
|
||||||
import { useGlobalStore } from '@/scripts/admin/stores/global'
|
import { useGlobalStore } from '@/scripts/admin/stores/global'
|
||||||
import LightDarkSwitch from '@/scripts/components/LightDarkSwitcher.vue'
|
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const globalStore = useGlobalStore()
|
const globalStore = useGlobalStore()
|
||||||
|
|||||||
@ -184,20 +184,6 @@ export const useCompanyStore = (useWindow = false) => {
|
|||||||
setDefaultCurrency(data) {
|
setDefaultCurrency(data) {
|
||||||
this.defaultCurrency = data.currency
|
this.defaultCurrency = data.currency
|
||||||
},
|
},
|
||||||
|
|
||||||
checkCompanyHasCurrencyTransactions() {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
axios
|
|
||||||
.get(`/api/v1/company/has-transactions`)
|
|
||||||
.then((response) => {
|
|
||||||
resolve(response)
|
|
||||||
})
|
|
||||||
.catch((err) => {
|
|
||||||
handleError(err)
|
|
||||||
reject(err)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
})()
|
})()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -34,7 +34,6 @@ export const useGlobalStore = (useWindow = false) => {
|
|||||||
isAppLoaded: false,
|
isAppLoaded: false,
|
||||||
isSidebarOpen: false,
|
isSidebarOpen: false,
|
||||||
areCurrenciesLoading: false,
|
areCurrenciesLoading: false,
|
||||||
isDarkModeOn: false,
|
|
||||||
|
|
||||||
downloadReport: null,
|
downloadReport: null,
|
||||||
}),
|
}),
|
||||||
|
|||||||
@ -32,8 +32,6 @@
|
|||||||
:content-loading="isLoading"
|
:content-loading="isLoading"
|
||||||
:calendar-button="true"
|
:calendar-button="true"
|
||||||
calendar-button-icon="calendar"
|
calendar-button-icon="calendar"
|
||||||
:show-extra-options="true"
|
|
||||||
:source-date="estimateStore.newEstimate.estimate_date"
|
|
||||||
/>
|
/>
|
||||||
</BaseInputGroup>
|
</BaseInputGroup>
|
||||||
|
|
||||||
|
|||||||
@ -34,24 +34,6 @@
|
|||||||
/>
|
/>
|
||||||
</BaseInputGroup>
|
</BaseInputGroup>
|
||||||
|
|
||||||
<BaseInputGroup
|
|
||||||
:label="$tc('wizard.company_slug')"
|
|
||||||
:help-text="$t('wizard.company_slug_help_text')"
|
|
||||||
:error="
|
|
||||||
v$.companyForm.slug.$error &&
|
|
||||||
v$.companyForm.slug.$errors[0].$message
|
|
||||||
"
|
|
||||||
required
|
|
||||||
>
|
|
||||||
<BaseInput
|
|
||||||
v-model="companyForm.slug"
|
|
||||||
:invalid="v$.companyForm.slug.$error"
|
|
||||||
type="text"
|
|
||||||
name="slug"
|
|
||||||
@input="v$.companyForm.slug.$touch()"
|
|
||||||
/>
|
|
||||||
</BaseInputGroup>
|
|
||||||
|
|
||||||
<BaseInputGroup
|
<BaseInputGroup
|
||||||
:label="$t('wizard.country')"
|
:label="$t('wizard.country')"
|
||||||
:error="
|
:error="
|
||||||
@ -75,7 +57,9 @@
|
|||||||
track-by="name"
|
track-by="name"
|
||||||
/>
|
/>
|
||||||
</BaseInputGroup>
|
</BaseInputGroup>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="grid grid-cols-1 gap-4 mb-4 md:grid-cols-2 md:mb-6">
|
||||||
<BaseInputGroup :label="$t('wizard.state')">
|
<BaseInputGroup :label="$t('wizard.state')">
|
||||||
<BaseInput
|
<BaseInput
|
||||||
v-model="companyForm.address.state"
|
v-model="companyForm.address.state"
|
||||||
@ -160,9 +144,9 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, computed, onMounted, reactive, watch } from 'vue'
|
import { ref, computed, onMounted, reactive } from 'vue'
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
import { required, minLength, maxLength, helpers } from '@vuelidate/validators'
|
import { required, maxLength, helpers } from '@vuelidate/validators'
|
||||||
import { useVuelidate } from '@vuelidate/core'
|
import { useVuelidate } from '@vuelidate/core'
|
||||||
import { useGlobalStore } from '@/scripts/admin/stores/global'
|
import { useGlobalStore } from '@/scripts/admin/stores/global'
|
||||||
import { useCompanyStore } from '@/scripts/admin/stores/company'
|
import { useCompanyStore } from '@/scripts/admin/stores/company'
|
||||||
@ -178,7 +162,6 @@ let logoFileName = ref(null)
|
|||||||
|
|
||||||
const companyForm = reactive({
|
const companyForm = reactive({
|
||||||
name: null,
|
name: null,
|
||||||
slug: null,
|
|
||||||
address: {
|
address: {
|
||||||
address_street_1: '',
|
address_street_1: '',
|
||||||
address_street_2: '',
|
address_street_2: '',
|
||||||
@ -205,28 +188,10 @@ onMounted(async () => {
|
|||||||
})?.id
|
})?.id
|
||||||
})
|
})
|
||||||
|
|
||||||
const slugValidator = (value) => {
|
|
||||||
return value == slugify(value)
|
|
||||||
}
|
|
||||||
const rules = {
|
const rules = {
|
||||||
companyForm: {
|
companyForm: {
|
||||||
name: {
|
name: {
|
||||||
required: helpers.withMessage(t('validation.required'), required),
|
required: helpers.withMessage(t('validation.required'), required),
|
||||||
minLength: helpers.withMessage(
|
|
||||||
t('validation.name_min_length', { count: 3 }),
|
|
||||||
minLength(3)
|
|
||||||
),
|
|
||||||
},
|
|
||||||
slug: {
|
|
||||||
required: helpers.withMessage(t('validation.required'), required),
|
|
||||||
minLength: helpers.withMessage(
|
|
||||||
t('validation.name_min_length', { count: 3 }),
|
|
||||||
minLength(3)
|
|
||||||
),
|
|
||||||
slugValidator: helpers.withMessage(
|
|
||||||
t('validation.invalid_slug'),
|
|
||||||
slugValidator
|
|
||||||
),
|
|
||||||
},
|
},
|
||||||
address: {
|
address: {
|
||||||
country_id: {
|
country_id: {
|
||||||
@ -284,24 +249,4 @@ async function next() {
|
|||||||
emit('next', 7)
|
emit('next', 7)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// watcher for if change company name then auto fill company slug value
|
|
||||||
watch(
|
|
||||||
() => companyForm.name,
|
|
||||||
(currentValue) => {
|
|
||||||
companyForm.slug = slugify(currentValue)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
function slugify(string) {
|
|
||||||
return string
|
|
||||||
.toString()
|
|
||||||
.trim()
|
|
||||||
.toLowerCase()
|
|
||||||
.replace(/\s+/g, '-')
|
|
||||||
.replace(/[^\w\-]+/g, '')
|
|
||||||
.replace(/\-\-+/g, '-')
|
|
||||||
.replace(/^-+/, '')
|
|
||||||
.replace(/-+$/, '')
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -56,7 +56,7 @@
|
|||||||
<BaseMultiselect
|
<BaseMultiselect
|
||||||
v-model="filters.status"
|
v-model="filters.status"
|
||||||
:groups="true"
|
:groups="true"
|
||||||
:options="invoiceStatus"
|
:options="status"
|
||||||
searchable
|
searchable
|
||||||
:placeholder="$t('general.select_a_status')"
|
:placeholder="$t('general.select_a_status')"
|
||||||
@update:modelValue="setActiveTab"
|
@update:modelValue="setActiveTab"
|
||||||
@ -130,27 +130,11 @@
|
|||||||
"
|
"
|
||||||
>
|
>
|
||||||
<!-- Tabs -->
|
<!-- Tabs -->
|
||||||
<BaseTabGroup
|
<BaseTabGroup class="-mb-5" @change="setStatusFilter">
|
||||||
class="-mb-5"
|
<BaseTab :title="$t('general.all')" filter="" />
|
||||||
:selected-index="selectedIndex"
|
<BaseTab :title="$t('general.draft')" filter="DRAFT" />
|
||||||
@change="changeTabStatus"
|
<BaseTab :title="$t('general.sent')" filter="SENT" />
|
||||||
>
|
<BaseTab :title="$t('general.due')" filter="DUE" />
|
||||||
<BaseTab
|
|
||||||
:title="invoiceTabStatus[0].title"
|
|
||||||
:tab-status="invoiceTabStatus[0].value"
|
|
||||||
/>
|
|
||||||
<BaseTab
|
|
||||||
:title="invoiceTabStatus[1].title"
|
|
||||||
:tab-status="invoiceTabStatus[1].value"
|
|
||||||
/>
|
|
||||||
<BaseTab
|
|
||||||
:title="invoiceTabStatus[2].title"
|
|
||||||
:tab-status="invoiceTabStatus[2].value"
|
|
||||||
/>
|
|
||||||
<BaseTab
|
|
||||||
:title="invoiceTabStatus[3].title"
|
|
||||||
:tab-status="invoiceTabStatus[3].value"
|
|
||||||
/>
|
|
||||||
</BaseTabGroup>
|
</BaseTabGroup>
|
||||||
|
|
||||||
<BaseDropdown
|
<BaseDropdown
|
||||||
@ -305,10 +289,10 @@ const utils = inject('$utils')
|
|||||||
const table = ref(null)
|
const table = ref(null)
|
||||||
const showFilters = ref(false)
|
const showFilters = ref(false)
|
||||||
|
|
||||||
const invoiceStatus = ref([
|
const status = ref([
|
||||||
{
|
{
|
||||||
label: 'Status',
|
label: 'Status',
|
||||||
options: ['DRAFT', 'SENT', 'VIEWED', 'COMPLETED'],
|
options: ['DRAFT', 'DUE', 'SENT', 'VIEWED', 'COMPLETED'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Paid Status',
|
label: 'Paid Status',
|
||||||
@ -316,29 +300,10 @@ const invoiceStatus = ref([
|
|||||||
},
|
},
|
||||||
,
|
,
|
||||||
])
|
])
|
||||||
|
|
||||||
const invoiceTabStatus = {
|
|
||||||
0: {
|
|
||||||
title: t('general.all'),
|
|
||||||
value: '',
|
|
||||||
},
|
|
||||||
1: {
|
|
||||||
title: t('general.draft'),
|
|
||||||
value: 'DRAFT',
|
|
||||||
},
|
|
||||||
2: {
|
|
||||||
title: t('general.sent'),
|
|
||||||
value: 'SENT',
|
|
||||||
},
|
|
||||||
3: {
|
|
||||||
title: t('general.due'),
|
|
||||||
value: 'DUE',
|
|
||||||
},
|
|
||||||
}
|
|
||||||
const isRequestOngoing = ref(true)
|
const isRequestOngoing = ref(true)
|
||||||
|
const activeTab = ref('general.draft')
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
const selectedIndex = ref(0)
|
|
||||||
|
|
||||||
let filters = reactive({
|
let filters = reactive({
|
||||||
customer_id: '',
|
customer_id: '',
|
||||||
@ -346,7 +311,6 @@ let filters = reactive({
|
|||||||
from_date: '',
|
from_date: '',
|
||||||
to_date: '',
|
to_date: '',
|
||||||
invoice_number: '',
|
invoice_number: '',
|
||||||
tab_status: '',
|
|
||||||
})
|
})
|
||||||
|
|
||||||
const showEmptyScreen = computed(
|
const showEmptyScreen = computed(
|
||||||
@ -437,7 +401,6 @@ async function fetchData({ page, filter, sort }) {
|
|||||||
from_date: filters.from_date,
|
from_date: filters.from_date,
|
||||||
to_date: filters.to_date,
|
to_date: filters.to_date,
|
||||||
invoice_number: filters.invoice_number,
|
invoice_number: filters.invoice_number,
|
||||||
tab_status: filters.tab_status,
|
|
||||||
orderByField: sort.fieldName || 'created_at',
|
orderByField: sort.fieldName || 'created_at',
|
||||||
orderBy: sort.order || 'desc',
|
orderBy: sort.order || 'desc',
|
||||||
page,
|
page,
|
||||||
@ -460,9 +423,29 @@ async function fetchData({ page, filter, sort }) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function changeTabStatus(val, index) {
|
function setStatusFilter(val) {
|
||||||
filters.tab_status = val['tab-status']
|
if (activeTab.value == val.title) {
|
||||||
selectedIndex.value = index
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
activeTab.value = val.title
|
||||||
|
|
||||||
|
switch (val.title) {
|
||||||
|
case t('general.draft'):
|
||||||
|
filters.status = 'DRAFT'
|
||||||
|
break
|
||||||
|
case t('general.sent'):
|
||||||
|
filters.status = 'SENT'
|
||||||
|
break
|
||||||
|
|
||||||
|
case t('general.due'):
|
||||||
|
filters.status = 'DUE'
|
||||||
|
break
|
||||||
|
|
||||||
|
default:
|
||||||
|
filters.status = ''
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function setFilters() {
|
function setFilters() {
|
||||||
@ -480,6 +463,8 @@ function clearFilter() {
|
|||||||
filters.from_date = ''
|
filters.from_date = ''
|
||||||
filters.to_date = ''
|
filters.to_date = ''
|
||||||
filters.invoice_number = ''
|
filters.invoice_number = ''
|
||||||
|
|
||||||
|
activeTab.value = t('general.all')
|
||||||
}
|
}
|
||||||
|
|
||||||
async function removeMultipleInvoices() {
|
async function removeMultipleInvoices() {
|
||||||
@ -520,21 +505,39 @@ function toggleFilter() {
|
|||||||
function setActiveTab(val) {
|
function setActiveTab(val) {
|
||||||
switch (val) {
|
switch (val) {
|
||||||
case 'DRAFT':
|
case 'DRAFT':
|
||||||
selectedIndex.value = 1
|
activeTab.value = t('general.draft')
|
||||||
|
break
|
||||||
|
case 'SENT':
|
||||||
|
activeTab.value = t('general.sent')
|
||||||
|
break
|
||||||
|
|
||||||
|
case 'DUE':
|
||||||
|
activeTab.value = t('general.due')
|
||||||
break
|
break
|
||||||
|
|
||||||
case 'SENT':
|
|
||||||
case 'VIEWED':
|
|
||||||
case 'COMPLETED':
|
case 'COMPLETED':
|
||||||
|
activeTab.value = t('invoices.completed')
|
||||||
|
break
|
||||||
|
|
||||||
case 'PAID':
|
case 'PAID':
|
||||||
selectedIndex.value = 2
|
activeTab.value = t('invoices.paid')
|
||||||
break
|
break
|
||||||
|
|
||||||
case 'UNPAID':
|
case 'UNPAID':
|
||||||
|
activeTab.value = t('invoices.unpaid')
|
||||||
|
break
|
||||||
|
|
||||||
case 'PARTIALLY_PAID':
|
case 'PARTIALLY_PAID':
|
||||||
selectedIndex.value = 3
|
activeTab.value = t('invoices.partially_paid')
|
||||||
|
break
|
||||||
|
|
||||||
|
case 'VIEWED':
|
||||||
|
activeTab.value = t('invoices.viewed')
|
||||||
|
break
|
||||||
|
|
||||||
|
default:
|
||||||
|
activeTab.value = t('general.all')
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
filters.tab_status = invoiceTabStatus[selectedIndex.value].value
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -32,8 +32,6 @@
|
|||||||
:content-loading="isLoading"
|
:content-loading="isLoading"
|
||||||
:calendar-button="true"
|
:calendar-button="true"
|
||||||
calendar-button-icon="calendar"
|
calendar-button-icon="calendar"
|
||||||
:show-extra-options="true"
|
|
||||||
:source-date="invoiceStore.newInvoice.invoice_date"
|
|
||||||
/>
|
/>
|
||||||
</BaseInputGroup>
|
</BaseInputGroup>
|
||||||
|
|
||||||
|
|||||||
@ -54,6 +54,8 @@
|
|||||||
label="name"
|
label="name"
|
||||||
:options="itemStore.itemUnits"
|
:options="itemStore.itemUnits"
|
||||||
value-prop="id"
|
value-prop="id"
|
||||||
|
:can-deselect="false"
|
||||||
|
:can-clear="false"
|
||||||
:placeholder="$t('items.select_a_unit')"
|
:placeholder="$t('items.select_a_unit')"
|
||||||
searchable
|
searchable
|
||||||
track-by="name"
|
track-by="name"
|
||||||
|
|||||||
@ -53,7 +53,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-else class="mt-24">
|
<div v-else class="mt-24">
|
||||||
<label class="flex items-center justify-center text-gray-500 dark:text-gray-300">
|
<label class="flex items-center justify-center text-gray-500">
|
||||||
{{ $t('modules.no_modules_installed') }}
|
{{ $t('modules.no_modules_installed') }}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -82,9 +82,9 @@
|
|||||||
required
|
required
|
||||||
>
|
>
|
||||||
<BaseCustomerSelectInput
|
<BaseCustomerSelectInput
|
||||||
v-if="!isLoadingContent"
|
|
||||||
v-model="paymentStore.currentPayment.customer_id"
|
v-model="paymentStore.currentPayment.customer_id"
|
||||||
:content-loading="isLoadingContent"
|
:content-loading="isLoadingContent"
|
||||||
|
v-if="!isLoadingContent"
|
||||||
:invalid="v$.currentPayment.customer_id.$error"
|
:invalid="v$.currentPayment.customer_id.$error"
|
||||||
:placeholder="$t('customers.select_a_customer')"
|
:placeholder="$t('customers.select_a_customer')"
|
||||||
show-action
|
show-action
|
||||||
@ -215,9 +215,9 @@
|
|||||||
<SelectNotePopup type="Payment" @select="onSelectNote" />
|
<SelectNotePopup type="Payment" @select="onSelectNote" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<BaseLabel class="!mb-4 !text-gray-800">
|
<label class="mb-4 text-sm font-medium text-gray-800">
|
||||||
{{ $t('estimates.notes') }}
|
{{ $t('estimates.notes') }}
|
||||||
</BaseLabel>
|
</label>
|
||||||
|
|
||||||
<BaseCustomInput
|
<BaseCustomInput
|
||||||
v-model="paymentStore.currentPayment.notes"
|
v-model="paymentStore.currentPayment.notes"
|
||||||
@ -423,7 +423,7 @@ function onCustomerChange(customer_id) {
|
|||||||
if (customer_id) {
|
if (customer_id) {
|
||||||
let data = {
|
let data = {
|
||||||
customer_id: customer_id,
|
customer_id: customer_id,
|
||||||
tab_status: 'DUE',
|
status: 'DUE',
|
||||||
limit: 'all',
|
limit: 'all',
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -446,11 +446,7 @@ function onCustomerChange(customer_id) {
|
|||||||
paymentStore.currentPayment.selectedCustomer = res2.data.data
|
paymentStore.currentPayment.selectedCustomer = res2.data.data
|
||||||
paymentStore.currentPayment.customer = res2.data.data
|
paymentStore.currentPayment.customer = res2.data.data
|
||||||
paymentStore.currentPayment.currency = res2.data.data.currency
|
paymentStore.currentPayment.currency = res2.data.data.currency
|
||||||
if (
|
if(isEdit.value && !customerStore.editCustomer && paymentStore.currentPayment.customer_id) {
|
||||||
isEdit.value &&
|
|
||||||
!customerStore.editCustomer &&
|
|
||||||
paymentStore.currentPayment.customer_id
|
|
||||||
) {
|
|
||||||
customerStore.editCustomer = res2.data.data
|
customerStore.editCustomer = res2.data.data
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,19 +28,6 @@
|
|||||||
/>
|
/>
|
||||||
</BaseInputGroup>
|
</BaseInputGroup>
|
||||||
|
|
||||||
<BaseInputGroup
|
|
||||||
:label="$tc('settings.company_info.company_slug')"
|
|
||||||
:help-text="$t('settings.company_info.company_slug_help_text')"
|
|
||||||
:error="v$.slug.$error && v$.slug.$errors[0].$message"
|
|
||||||
required
|
|
||||||
>
|
|
||||||
<BaseInput
|
|
||||||
v-model="companyForm.slug"
|
|
||||||
:invalid="v$.slug.$error"
|
|
||||||
@blur="v$.slug.$touch()"
|
|
||||||
/>
|
|
||||||
</BaseInputGroup>
|
|
||||||
|
|
||||||
<BaseInputGroup :label="$tc('settings.company_info.phone')">
|
<BaseInputGroup :label="$tc('settings.company_info.phone')">
|
||||||
<BaseInput v-model="companyForm.address.phone" />
|
<BaseInput v-model="companyForm.address.phone" />
|
||||||
</BaseInputGroup>
|
</BaseInputGroup>
|
||||||
@ -173,7 +160,6 @@ let isSaving = ref(false)
|
|||||||
|
|
||||||
const companyForm = reactive({
|
const companyForm = reactive({
|
||||||
name: null,
|
name: null,
|
||||||
slug: null,
|
|
||||||
logo: null,
|
logo: null,
|
||||||
address: {
|
address: {
|
||||||
address_street_1: '',
|
address_street_1: '',
|
||||||
@ -207,14 +193,7 @@ const rules = computed(() => {
|
|||||||
name: {
|
name: {
|
||||||
required: helpers.withMessage(t('validation.required'), required),
|
required: helpers.withMessage(t('validation.required'), required),
|
||||||
minLength: helpers.withMessage(
|
minLength: helpers.withMessage(
|
||||||
t('validation.name_min_length', { count: 3 }),
|
t('validation.name_min_length'),
|
||||||
minLength(3)
|
|
||||||
),
|
|
||||||
},
|
|
||||||
slug: {
|
|
||||||
required: helpers.withMessage(t('validation.required'), required),
|
|
||||||
minLength: helpers.withMessage(
|
|
||||||
t('validation.name_min_length', { count: 3 }),
|
|
||||||
minLength(3)
|
minLength(3)
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
|
|||||||
@ -8,11 +8,7 @@
|
|||||||
<BaseInputGroup
|
<BaseInputGroup
|
||||||
:content-loading="isFetchingInitialData"
|
:content-loading="isFetchingInitialData"
|
||||||
:label="$tc('settings.preferences.currency')"
|
:label="$tc('settings.preferences.currency')"
|
||||||
:help-text="
|
:help-text="$t('settings.preferences.company_currency_unchangeable')"
|
||||||
isCurrencyDisabled
|
|
||||||
? $t('settings.preferences.company_currency_unchangeable')
|
|
||||||
: ''
|
|
||||||
"
|
|
||||||
:error="v$.currency.$error && v$.currency.$errors[0].$message"
|
:error="v$.currency.$error && v$.currency.$errors[0].$message"
|
||||||
required
|
required
|
||||||
>
|
>
|
||||||
@ -25,7 +21,7 @@
|
|||||||
:searchable="true"
|
:searchable="true"
|
||||||
track-by="name"
|
track-by="name"
|
||||||
:invalid="v$.currency.$error"
|
:invalid="v$.currency.$error"
|
||||||
:disabled="isCurrencyDisabled"
|
disabled
|
||||||
class="w-full"
|
class="w-full"
|
||||||
>
|
>
|
||||||
</BaseMultiselect>
|
</BaseMultiselect>
|
||||||
@ -191,7 +187,6 @@ const { t, tm } = useI18n()
|
|||||||
let isSaving = ref(false)
|
let isSaving = ref(false)
|
||||||
let isDataSaving = ref(false)
|
let isDataSaving = ref(false)
|
||||||
let isFetchingInitialData = ref(false)
|
let isFetchingInitialData = ref(false)
|
||||||
let isCurrencyDisabled = ref(true)
|
|
||||||
|
|
||||||
const settingsForm = reactive({ ...companyStore.selectedCompanySettings })
|
const settingsForm = reactive({ ...companyStore.selectedCompanySettings })
|
||||||
|
|
||||||
@ -287,14 +282,10 @@ setInitialData()
|
|||||||
async function setInitialData() {
|
async function setInitialData() {
|
||||||
isFetchingInitialData.value = true
|
isFetchingInitialData.value = true
|
||||||
Promise.all([
|
Promise.all([
|
||||||
companyStore.checkCompanyHasCurrencyTransactions(),
|
|
||||||
globalStore.fetchCurrencies(),
|
globalStore.fetchCurrencies(),
|
||||||
globalStore.fetchDateFormats(),
|
globalStore.fetchDateFormats(),
|
||||||
globalStore.fetchTimeZones(),
|
globalStore.fetchTimeZones(),
|
||||||
]).then(([res1]) => {
|
]).then(([res1]) => {
|
||||||
if (res1.data?.has_transactions == false) {
|
|
||||||
isCurrencyDisabled.value = false
|
|
||||||
}
|
|
||||||
isFetchingInitialData.value = false
|
isFetchingInitialData.value = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,9 +4,9 @@
|
|||||||
:description="$t('settings.update_app.description')"
|
:description="$t('settings.update_app.description')"
|
||||||
>
|
>
|
||||||
<div class="pb-8 ml-0">
|
<div class="pb-8 ml-0">
|
||||||
<BaseLabel class="!input-label">
|
<label class="text-sm not-italic font-medium input-label">
|
||||||
{{ $t('settings.update_app.current_version') }}
|
{{ $t('settings.update_app.current_version') }}
|
||||||
</BaseLabel>
|
</label>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
class="
|
class="
|
||||||
@ -64,9 +64,9 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<BaseLabel class="!input-label">
|
<label class="text-sm not-italic font-medium input-label">
|
||||||
{{ $t('settings.update_app.next_version') }}
|
{{ $t('settings.update_app.next_version') }}
|
||||||
</BaseLabel>
|
</label>
|
||||||
<br />
|
<br />
|
||||||
<div
|
<div
|
||||||
class="
|
class="
|
||||||
@ -99,9 +99,9 @@
|
|||||||
v-html="description"
|
v-html="description"
|
||||||
></div>
|
></div>
|
||||||
|
|
||||||
<BaseLabel class=" !input-label">
|
<label class="text-sm not-italic font-medium input-label">
|
||||||
{{ $t('settings.update_app.requirements') }}
|
{{ $t('settings.update_app.requirements') }}
|
||||||
</BaseLabel>
|
</label>
|
||||||
|
|
||||||
<table class="w-1/2 mt-2 border-2 border-gray-200 BaseTable-fixed">
|
<table class="w-1/2 mt-2 border-2 border-gray-200 BaseTable-fixed">
|
||||||
<tr
|
<tr
|
||||||
|
|||||||
@ -97,7 +97,6 @@
|
|||||||
whitespace-nowrap
|
whitespace-nowrap
|
||||||
mr-2
|
mr-2
|
||||||
min-w-[200px]
|
min-w-[200px]
|
||||||
dark:text-primary-400
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
{{ element.label }}
|
{{ element.label }}
|
||||||
|
|||||||
@ -50,20 +50,20 @@
|
|||||||
pb-4
|
pb-4
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<BaseLabel
|
<label
|
||||||
class="
|
class="
|
||||||
!px-3
|
px-3
|
||||||
!py-2
|
py-2
|
||||||
!text-xs
|
text-xs
|
||||||
!font-semibold
|
font-semibold
|
||||||
!text-gray-400
|
text-gray-400
|
||||||
!mb-0.5
|
mb-0.5
|
||||||
!block
|
block
|
||||||
!uppercase
|
uppercase
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
{{ $t('company_switcher.label') }}
|
{{ $t('company_switcher.label') }}
|
||||||
</BaseLabel>
|
</label>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
v-if="companyStore.companies.length < 1"
|
v-if="companyStore.companies.length < 1"
|
||||||
|
|||||||
@ -62,9 +62,9 @@
|
|||||||
</div>
|
</div>
|
||||||
<div v-else>
|
<div v-else>
|
||||||
<div v-if="usersStore.customerList.length > 0">
|
<div v-if="usersStore.customerList.length > 0">
|
||||||
<BaseLabel class="!text-gray-400 !mb-0.5 !block !px-2 !uppercase">
|
<label class="text-sm text-gray-400 mb-0.5 block px-2 uppercase">
|
||||||
{{ $t('global_search.customers') }}
|
{{ $t('global_search.customers') }}
|
||||||
</BaseLabel>
|
</label>
|
||||||
<div
|
<div
|
||||||
v-for="(customer, index) in usersStore.customerList"
|
v-for="(customer, index) in usersStore.customerList"
|
||||||
:key="index"
|
:key="index"
|
||||||
@ -108,11 +108,11 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="usersStore.userList.length > 0" class="mt-2">
|
<div v-if="usersStore.userList.length > 0" class="mt-2">
|
||||||
<BaseLabel
|
<label
|
||||||
class="!text-gray-400 !mb-2 !block !px-2 !uppercase"
|
class="text-sm text-gray-400 mb-2 block px-2 mb-0.5 uppercase"
|
||||||
>
|
>
|
||||||
{{ $t('global_search.users') }}
|
{{ $t('global_search.users') }}
|
||||||
</BaseLabel>
|
</label>
|
||||||
<div
|
<div
|
||||||
v-for="(user, index) in usersStore.userList"
|
v-for="(user, index) in usersStore.userList"
|
||||||
:key="index"
|
:key="index"
|
||||||
|
|||||||
@ -1,101 +0,0 @@
|
|||||||
<!-- This example requires Tailwind CSS v2.0+ -->
|
|
||||||
<script lang="ts" setup>
|
|
||||||
import { Switch, SwitchGroup, SwitchLabel } from '@headlessui/vue'
|
|
||||||
import { useGlobalStore } from '@/scripts/admin/stores/global'
|
|
||||||
import { computed, ref } from 'vue'
|
|
||||||
defineProps({
|
|
||||||
showLabel: {
|
|
||||||
type: Boolean,
|
|
||||||
default: true,
|
|
||||||
},
|
|
||||||
vertical: {
|
|
||||||
type: Boolean,
|
|
||||||
default: false,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
const globalStore = useGlobalStore()
|
|
||||||
|
|
||||||
const enabled = ref(
|
|
||||||
localStorage.getItem('theme') === 'dark' ||
|
|
||||||
document.documentElement.classList.contains('dark')
|
|
||||||
)
|
|
||||||
|
|
||||||
globalStore.isDarkModeOn = enabled
|
|
||||||
|
|
||||||
function onChange(val) {
|
|
||||||
if (val) {
|
|
||||||
localStorage.theme = 'dark'
|
|
||||||
document.documentElement.classList.add('dark')
|
|
||||||
document.documentElement.style.setProperty('color-scheme', 'dark')
|
|
||||||
globalStore.isDarkModeOn = true
|
|
||||||
} else {
|
|
||||||
localStorage.theme = 'light'
|
|
||||||
document.documentElement.classList.remove('dark')
|
|
||||||
document.documentElement.style.setProperty('color-scheme', 'light')
|
|
||||||
globalStore.isDarkModeOn = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div class="w-full flex justify-center">
|
|
||||||
<SwitchGroup
|
|
||||||
as="div"
|
|
||||||
class="flex items-center"
|
|
||||||
:class="vertical ? 'flex-col justify-center' : 'flex-row'"
|
|
||||||
>
|
|
||||||
<Switch
|
|
||||||
v-model="enabled"
|
|
||||||
class="relative inline-flex flex-shrink-0 h-6 w-11 border-2 border-transparent rounded-full cursor-pointer transition-colors ease-in-out duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary-500 dark:ring-offset-gray-700"
|
|
||||||
:class="[enabled ? 'bg-primary-600' : 'bg-gray-200']"
|
|
||||||
@update:modelValue="onChange"
|
|
||||||
>
|
|
||||||
<span class="sr-only">Use setting</span>
|
|
||||||
<span
|
|
||||||
class="pointer-events-none relative inline-block h-5 w-5 rounded-full bg-white shadow transform ring-0 transition ease-in-out duration-200"
|
|
||||||
:class="[enabled ? 'translate-x-5' : 'translate-x-0']"
|
|
||||||
>
|
|
||||||
<span
|
|
||||||
class="absolute inset-0 h-full w-full flex items-center justify-center transition-opacity"
|
|
||||||
:class="[
|
|
||||||
enabled
|
|
||||||
? 'opacity-0 ease-out duration-100'
|
|
||||||
: 'opacity-100 ease-in duration-200',
|
|
||||||
]"
|
|
||||||
aria-hidden="true"
|
|
||||||
>
|
|
||||||
<BaseIcon class="h-3 w-3 text-yellow-500" name="SunIcon" />
|
|
||||||
</span>
|
|
||||||
<span
|
|
||||||
class="absolute inset-0 h-full w-full flex items-center justify-center transition-opacity"
|
|
||||||
:class="[
|
|
||||||
enabled
|
|
||||||
? 'opacity-100 ease-in duration-200'
|
|
||||||
: 'opacity-0 ease-out duration-100',
|
|
||||||
]"
|
|
||||||
aria-hidden="true"
|
|
||||||
>
|
|
||||||
<BaseIcon class="h-3 w-3 text-primary-500" name="MoonIcon" />
|
|
||||||
</span>
|
|
||||||
</span>
|
|
||||||
</Switch>
|
|
||||||
<SwitchLabel
|
|
||||||
v-if="showLabel"
|
|
||||||
as="span"
|
|
||||||
class="cursor-pointer"
|
|
||||||
:class="vertical ? 'px-1 text-center mt-2' : 'ml-3'"
|
|
||||||
>
|
|
||||||
<span
|
|
||||||
v-if="enabled"
|
|
||||||
class="text-sm font-medium text-gray-500 dark:text-gray-400"
|
|
||||||
>
|
|
||||||
Dark Mode
|
|
||||||
</span>
|
|
||||||
<span v-else class="text-sm font-medium text-gray-500">
|
|
||||||
Light Mode
|
|
||||||
</span>
|
|
||||||
</SwitchLabel>
|
|
||||||
</SwitchGroup>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
@ -15,7 +15,7 @@
|
|||||||
v-if="label"
|
v-if="label"
|
||||||
:for="id"
|
:for="id"
|
||||||
:class="`font-medium ${
|
:class="`font-medium ${
|
||||||
disabled ? 'text-gray-400 cursor-not-allowed' : 'text-gray-600 dark:text-white'
|
disabled ? 'text-gray-400 cursor-not-allowed' : 'text-gray-600'
|
||||||
} cursor-pointer `"
|
} cursor-pointer `"
|
||||||
>
|
>
|
||||||
{{ label }}
|
{{ label }}
|
||||||
|
|||||||
@ -126,7 +126,7 @@ onMounted(() => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
const value = computed({
|
const value = computed({
|
||||||
get: () => (props.modelValue ? props.modelValue : ''),
|
get: () => props.modelValue,
|
||||||
set: (value) => {
|
set: (value) => {
|
||||||
emit('update:modelValue', value)
|
emit('update:modelValue', value)
|
||||||
},
|
},
|
||||||
@ -195,9 +195,7 @@ async function getFields() {
|
|||||||
{ label: 'Date', value: 'INVOICE_DATE' },
|
{ label: 'Date', value: 'INVOICE_DATE' },
|
||||||
{ label: 'Due Date', value: 'INVOICE_DUE_DATE' },
|
{ label: 'Due Date', value: 'INVOICE_DUE_DATE' },
|
||||||
{ label: 'Number', value: 'INVOICE_NUMBER' },
|
{ label: 'Number', value: 'INVOICE_NUMBER' },
|
||||||
{ label: 'PDF Link', value: 'PDF_LINK' },
|
{ label: 'Ref Number', value: 'INVOICE_REF_NUMBER' },
|
||||||
{ label: 'Due Amount', value: 'DUE_AMOUNT' },
|
|
||||||
{ label: 'Total Amount', value: 'TOTAL_AMOUNT' },
|
|
||||||
...invoiceFields.value.map((i) => ({
|
...invoiceFields.value.map((i) => ({
|
||||||
label: i.label,
|
label: i.label,
|
||||||
value: i.slug,
|
value: i.slug,
|
||||||
@ -213,8 +211,7 @@ async function getFields() {
|
|||||||
{ label: 'Date', value: 'ESTIMATE_DATE' },
|
{ label: 'Date', value: 'ESTIMATE_DATE' },
|
||||||
{ label: 'Expiry Date', value: 'ESTIMATE_EXPIRY_DATE' },
|
{ label: 'Expiry Date', value: 'ESTIMATE_EXPIRY_DATE' },
|
||||||
{ label: 'Number', value: 'ESTIMATE_NUMBER' },
|
{ label: 'Number', value: 'ESTIMATE_NUMBER' },
|
||||||
{ label: 'PDF Link', value: 'PDF_LINK' },
|
{ label: 'Ref Number', value: 'ESTIMATE_REF_NUMBER' },
|
||||||
{ label: 'Total Amount', value: 'TOTAL_AMOUNT' },
|
|
||||||
...estimateFields.value.map((i) => ({
|
...estimateFields.value.map((i) => ({
|
||||||
label: i.label,
|
label: i.label,
|
||||||
value: i.slug,
|
value: i.slug,
|
||||||
@ -231,7 +228,6 @@ async function getFields() {
|
|||||||
{ label: 'Number', value: 'PAYMENT_NUMBER' },
|
{ label: 'Number', value: 'PAYMENT_NUMBER' },
|
||||||
{ label: 'Mode', value: 'PAYMENT_MODE' },
|
{ label: 'Mode', value: 'PAYMENT_MODE' },
|
||||||
{ label: 'Amount', value: 'PAYMENT_AMOUNT' },
|
{ label: 'Amount', value: 'PAYMENT_AMOUNT' },
|
||||||
{ label: 'PDF Link', value: 'PDF_LINK' },
|
|
||||||
...paymentFields.value.map((i) => ({
|
...paymentFields.value.map((i) => ({
|
||||||
label: i.label,
|
label: i.label,
|
||||||
value: i.slug,
|
value: i.slug,
|
||||||
|
|||||||
@ -69,29 +69,31 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="grid grid-cols-2 gap-8 mt-2">
|
<div class="grid grid-cols-2 gap-8 mt-2">
|
||||||
<div v-if="selectedCustomer.billing" class="flex flex-col">
|
<div v-if="selectedCustomer.billing" class="flex flex-col">
|
||||||
<BaseLabel
|
<label
|
||||||
class="
|
class="
|
||||||
!mb-1
|
mb-1
|
||||||
!text-left !text-gray-400
|
text-sm
|
||||||
!uppercase
|
font-medium
|
||||||
!whitespace-nowrap
|
text-left text-gray-400
|
||||||
|
uppercase
|
||||||
|
whitespace-nowrap
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
{{ $t('general.bill_to') }}
|
{{ $t('general.bill_to') }}
|
||||||
</BaseLabel>
|
</label>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
v-if="selectedCustomer.billing"
|
v-if="selectedCustomer.billing"
|
||||||
class="flex flex-col flex-1 p-0 text-left"
|
class="flex flex-col flex-1 p-0 text-left"
|
||||||
>
|
>
|
||||||
<BaseLabel
|
<label
|
||||||
v-if="selectedCustomer.billing.name"
|
v-if="selectedCustomer.billing.name"
|
||||||
class="!relative !w-11/12 !truncate"
|
class="relative w-11/12 text-sm truncate"
|
||||||
>
|
>
|
||||||
{{ selectedCustomer.billing.name }}
|
{{ selectedCustomer.billing.name }}
|
||||||
</BaseLabel>
|
</label>
|
||||||
|
|
||||||
<BaseLabel class="!relative !w-11/12 !truncate">
|
<label class="relative w-11/12 text-sm truncate">
|
||||||
<span v-if="selectedCustomer.billing.city">
|
<span v-if="selectedCustomer.billing.city">
|
||||||
{{ selectedCustomer.billing.city }}
|
{{ selectedCustomer.billing.city }}
|
||||||
</span>
|
</span>
|
||||||
@ -106,40 +108,42 @@
|
|||||||
<span v-if="selectedCustomer.billing.state">
|
<span v-if="selectedCustomer.billing.state">
|
||||||
{{ selectedCustomer.billing.state }}
|
{{ selectedCustomer.billing.state }}
|
||||||
</span>
|
</span>
|
||||||
</BaseLabel>
|
</label>
|
||||||
<BaseLabel
|
<label
|
||||||
v-if="selectedCustomer.billing.zip"
|
v-if="selectedCustomer.billing.zip"
|
||||||
class="!relative !w-11/12 !truncate"
|
class="relative w-11/12 text-sm truncate"
|
||||||
>
|
>
|
||||||
{{ selectedCustomer.billing.zip }}
|
{{ selectedCustomer.billing.zip }}
|
||||||
</BaseLabel>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="selectedCustomer.shipping" class="flex flex-col">
|
<div v-if="selectedCustomer.shipping" class="flex flex-col">
|
||||||
<BaseLabel
|
<label
|
||||||
class="
|
class="
|
||||||
!mb-1
|
mb-1
|
||||||
!text-left !text-gray-400
|
text-sm
|
||||||
!uppercase
|
font-medium
|
||||||
!whitespace-nowrap
|
text-left text-gray-400
|
||||||
|
uppercase
|
||||||
|
whitespace-nowrap
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
{{ $t('general.ship_to') }}
|
{{ $t('general.ship_to') }}
|
||||||
</BaseLabel>
|
</label>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
v-if="selectedCustomer.shipping"
|
v-if="selectedCustomer.shipping"
|
||||||
class="flex flex-col flex-1 p-0 text-left"
|
class="flex flex-col flex-1 p-0 text-left"
|
||||||
>
|
>
|
||||||
<BaseLabel
|
<label
|
||||||
v-if="selectedCustomer.shipping.name"
|
v-if="selectedCustomer.shipping.name"
|
||||||
class="!relative !w-11/12 !truncate"
|
class="relative w-11/12 text-sm truncate"
|
||||||
>
|
>
|
||||||
{{ selectedCustomer.shipping.name }}
|
{{ selectedCustomer.shipping.name }}
|
||||||
</BaseLabel>
|
</label>
|
||||||
|
|
||||||
<BaseLabel class="!relative !w-11/12 !truncate">
|
<label class="relative w-11/12 text-sm truncate">
|
||||||
<span v-if="selectedCustomer.shipping.city">
|
<span v-if="selectedCustomer.shipping.city">
|
||||||
{{ selectedCustomer.shipping.city }}
|
{{ selectedCustomer.shipping.city }}
|
||||||
</span>
|
</span>
|
||||||
@ -154,13 +158,13 @@
|
|||||||
<span v-if="selectedCustomer.shipping.state">
|
<span v-if="selectedCustomer.shipping.state">
|
||||||
{{ selectedCustomer.shipping.state }}
|
{{ selectedCustomer.shipping.state }}
|
||||||
</span>
|
</span>
|
||||||
</BaseLabel>
|
</label>
|
||||||
<BaseLabel
|
<label
|
||||||
v-if="selectedCustomer.shipping.zip"
|
v-if="selectedCustomer.shipping.zip"
|
||||||
class="!relative !w-11/12 !text-sm !truncate"
|
class="relative w-11/12 text-sm truncate"
|
||||||
>
|
>
|
||||||
{{ selectedCustomer.shipping.zip }}
|
{{ selectedCustomer.shipping.zip }}
|
||||||
</BaseLabel>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -207,7 +211,7 @@
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
<div class="mt-1">
|
<div class="mt-1">
|
||||||
<label class="text-lg font-medium text-gray-900 dark:text-white">
|
<label class="text-lg font-medium text-gray-900">
|
||||||
{{ $t('customers.new_customer') }}
|
{{ $t('customers.new_customer') }}
|
||||||
<span class="text-red-500"> * </span>
|
<span class="text-red-500"> * </span>
|
||||||
</label>
|
</label>
|
||||||
@ -331,9 +335,9 @@
|
|||||||
v-if="customerStore.customers.length === 0"
|
v-if="customerStore.customers.length === 0"
|
||||||
class="flex justify-center p-5 text-gray-400"
|
class="flex justify-center p-5 text-gray-400"
|
||||||
>
|
>
|
||||||
<BaseLabel class="!text-base !text-gray-500 !cursor-pointer">
|
<label class="text-base text-gray-500 cursor-pointer">
|
||||||
{{ $t('customers.no_customers_found') }}
|
{{ $t('customers.no_customers_found') }}
|
||||||
</BaseLabel>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@ -358,18 +362,19 @@
|
|||||||
>
|
>
|
||||||
<BaseIcon name="UserAddIcon" class="text-primary-400" />
|
<BaseIcon name="UserAddIcon" class="text-primary-400" />
|
||||||
|
|
||||||
<BaseLabel
|
<label
|
||||||
class="
|
class="
|
||||||
!m-0
|
m-0
|
||||||
!ml-3
|
ml-3
|
||||||
!leading-none
|
text-sm
|
||||||
!cursor-pointer
|
leading-none
|
||||||
!font-base
|
cursor-pointer
|
||||||
!text-primary-400
|
font-base
|
||||||
|
text-primary-400
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
{{ $t('customers.add_new_customer') }}
|
{{ $t('customers.add_new_customer') }}
|
||||||
</BaseLabel>
|
</label>
|
||||||
</button>
|
</button>
|
||||||
</PopoverPanel>
|
</PopoverPanel>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -7,34 +7,7 @@
|
|||||||
/>
|
/>
|
||||||
</BaseContentPlaceholders>
|
</BaseContentPlaceholders>
|
||||||
|
|
||||||
<div v-else :class="computedContainerClass">
|
<div v-else :class="computedContainerClass" class="relative flex flex-row">
|
||||||
<date-picker
|
|
||||||
ref="vCalendar"
|
|
||||||
v-model="date"
|
|
||||||
:mode="mode"
|
|
||||||
:is24hr="time24hr"
|
|
||||||
class="w-full"
|
|
||||||
color="indigo"
|
|
||||||
:input-debounce="500"
|
|
||||||
:update-on-input="false"
|
|
||||||
:is-range="false"
|
|
||||||
trim-weeks
|
|
||||||
:is-required="isRequired"
|
|
||||||
:popover="{
|
|
||||||
visibility: disabled ? 'hidden' : 'focus',
|
|
||||||
showDelay: 0,
|
|
||||||
hideDelay: 1,
|
|
||||||
}"
|
|
||||||
:attributes="attrs"
|
|
||||||
:model-config="config"
|
|
||||||
:masks="masks"
|
|
||||||
:is-dark="isDarkModeOn"
|
|
||||||
:locale="global.locale"
|
|
||||||
>
|
|
||||||
<template
|
|
||||||
#default="{ inputValue, inputEvents, togglePopover, hidePopover }"
|
|
||||||
>
|
|
||||||
<!-- calendar icon -->
|
|
||||||
<svg
|
<svg
|
||||||
v-if="showCalendarIcon && !hasIconSlot"
|
v-if="showCalendarIcon && !hasIconSlot"
|
||||||
viewBox="0 0 20 20"
|
viewBox="0 0 20 20"
|
||||||
@ -51,7 +24,7 @@
|
|||||||
text-gray-400
|
text-gray-400
|
||||||
cursor-pointer
|
cursor-pointer
|
||||||
"
|
"
|
||||||
@click="togglePopover()"
|
@click="onClickDp"
|
||||||
>
|
>
|
||||||
<path
|
<path
|
||||||
fill-rule="evenodd"
|
fill-rule="evenodd"
|
||||||
@ -62,54 +35,24 @@
|
|||||||
|
|
||||||
<slot v-if="showCalendarIcon && hasIconSlot" name="icon" />
|
<slot v-if="showCalendarIcon && hasIconSlot" name="icon" />
|
||||||
|
|
||||||
<input
|
<FlatPickr
|
||||||
:value="inputValue"
|
ref="dp"
|
||||||
|
v-model="date"
|
||||||
|
v-bind="$attrs"
|
||||||
|
:disabled="disabled"
|
||||||
|
:config="config"
|
||||||
:class="[defaultInputClass, inputInvalidClass, inputDisabledClass]"
|
:class="[defaultInputClass, inputInvalidClass, inputDisabledClass]"
|
||||||
readonly
|
|
||||||
v-on="inputEvents"
|
|
||||||
@blur="hidePopover()"
|
|
||||||
/>
|
/>
|
||||||
</template>
|
|
||||||
|
|
||||||
<template v-if="showExtraOptions" #footer>
|
|
||||||
<div
|
|
||||||
class="bg-gray-800 grid grid-cols-3 gap-2 p-2 border-t rounded-b-lg"
|
|
||||||
>
|
|
||||||
<button type="button" class="extra-button" @click="moveToDate(sourceDate)">
|
|
||||||
{{ global.t('date_picker.same_day') }}
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<button type="button" class="extra-button" @click="withInDays(7)">
|
|
||||||
{{ global.t('date_picker.within_7_days') }}
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<button type="button" class="extra-button" @click="withInDays(15)">
|
|
||||||
{{ global.t('date_picker.within_15_days') }}
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<button type="button" class="extra-button" @click="withInDays(30)">
|
|
||||||
{{ global.t('date_picker.within_30_days') }}
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<button type="button" class="extra-button" @click="withInDays(45)">
|
|
||||||
{{ global.t('date_picker.within_45_days') }}
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<button type="button" class="extra-button" @click="withInDays(60)">
|
|
||||||
{{ global.t('date_picker.within_60_days') }}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</date-picker>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script type="text/babel" setup>
|
<script type="text/babel" setup>
|
||||||
import { Calendar, DatePicker } from 'v-calendar'
|
import FlatPickr from 'vue-flatpickr-component'
|
||||||
import 'v-calendar/dist/style.css'
|
import 'flatpickr/dist/flatpickr.css'
|
||||||
import { computed, reactive, watch, ref, useSlots } from 'vue'
|
import { computed, reactive, watch, ref, useSlots } from 'vue'
|
||||||
import { useCompanyStore } from '@/scripts/admin/stores/company'
|
import { useCompanyStore } from '@/scripts/admin/stores/company'
|
||||||
import moment from 'moment'
|
|
||||||
|
const dp = ref(null)
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
modelValue: {
|
modelValue: {
|
||||||
@ -147,32 +90,37 @@ const props = defineProps({
|
|||||||
defaultInputClass: {
|
defaultInputClass: {
|
||||||
type: String,
|
type: String,
|
||||||
default:
|
default:
|
||||||
'border-2 dark:bg-gray-700 dark:border-gray-600 dark:text-white font-base pl-8 py-2 outline-none focus:ring-primary-400 focus:outline-none focus:border-primary-400 block w-full sm:text-sm border-gray-200 rounded-md text-black',
|
'font-base pl-8 py-2 outline-none focus:ring-primary-400 focus:outline-none focus:border-primary-400 block w-full sm:text-sm border-gray-200 rounded-md text-black',
|
||||||
},
|
},
|
||||||
time24hr: {
|
time24hr: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false,
|
default: false,
|
||||||
},
|
},
|
||||||
isRequired: {
|
|
||||||
type: Boolean,
|
|
||||||
default: false,
|
|
||||||
},
|
|
||||||
showExtraOptions: {
|
|
||||||
type: Boolean,
|
|
||||||
default: false,
|
|
||||||
},
|
|
||||||
sourceDate: {
|
|
||||||
type: [String, Date],
|
|
||||||
default: () => new Date(),
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
const emit = defineEmits(['update:modelValue'])
|
const emit = defineEmits(['update:modelValue'])
|
||||||
|
|
||||||
const slots = useSlots()
|
const slots = useSlots()
|
||||||
|
|
||||||
const companyStore = useCompanyStore()
|
const companyStore = useCompanyStore()
|
||||||
const { global } = window.i18n
|
|
||||||
const vCalendar = ref(null)
|
let config = reactive({
|
||||||
const isDarkModeOn = document.documentElement.classList.contains('dark')
|
altInput: true,
|
||||||
|
enableTime: props.enableTime,
|
||||||
|
time_24hr: props.time24hr,
|
||||||
|
})
|
||||||
|
|
||||||
|
const date = computed({
|
||||||
|
get: () => props.modelValue,
|
||||||
|
set: (value) => {
|
||||||
|
emit('update:modelValue', value)
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
const carbonFormat = computed(() => {
|
||||||
|
return companyStore.selectedCompanySettings?.carbon_date_format
|
||||||
|
})
|
||||||
|
|
||||||
const hasIconSlot = computed(() => {
|
const hasIconSlot = computed(() => {
|
||||||
return !!slots.icon
|
return !!slots.icon
|
||||||
})
|
})
|
||||||
@ -187,6 +135,7 @@ const inputInvalidClass = computed(() => {
|
|||||||
if (props.invalid) {
|
if (props.invalid) {
|
||||||
return 'border-red-400 ring-red-400 focus:ring-red-400 focus:border-red-400'
|
return 'border-red-400 ring-red-400 focus:ring-red-400 focus:border-red-400'
|
||||||
}
|
}
|
||||||
|
|
||||||
return ''
|
return ''
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -194,97 +143,35 @@ const inputDisabledClass = computed(() => {
|
|||||||
if (props.disabled) {
|
if (props.disabled) {
|
||||||
return 'border border-solid rounded-md outline-none input-field box-border-2 base-date-picker-input placeholder-gray-400 bg-gray-200 text-gray-600 border-gray-200'
|
return 'border border-solid rounded-md outline-none input-field box-border-2 base-date-picker-input placeholder-gray-400 bg-gray-200 text-gray-600 border-gray-200'
|
||||||
}
|
}
|
||||||
|
|
||||||
return ''
|
return ''
|
||||||
})
|
})
|
||||||
|
|
||||||
// to convert YYYY-MM-DD | YYYY-MM-DD HH:mm format
|
function onClickDp(params) {
|
||||||
function convertYMDFormat(date) {
|
dp.value.fp.open()
|
||||||
let format = props.enableTime ? 'YYYY-MM-DD HH:mm' : 'YYYY-MM-DD'
|
|
||||||
return date ? moment(date).format(format) : date
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const date = computed({
|
|
||||||
get: () => props.modelValue,
|
|
||||||
set: (value) => {
|
|
||||||
emit('update:modelValue', value)
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
const mode = computed(() => {
|
|
||||||
return props.enableTime ? 'dateTime' : 'date'
|
|
||||||
})
|
|
||||||
|
|
||||||
const config = reactive({
|
|
||||||
type: 'string',
|
|
||||||
mask: 'YYYY-MM-DD', // Uses 'iso' if missing
|
|
||||||
//timeAdjust: '00:00:00',
|
|
||||||
})
|
|
||||||
|
|
||||||
const masks = reactive({
|
|
||||||
input: null,
|
|
||||||
inputDateTime: null,
|
|
||||||
inputDateTime24hr: null,
|
|
||||||
})
|
|
||||||
|
|
||||||
const attrs = reactive([
|
|
||||||
{
|
|
||||||
dates: new Date(),
|
|
||||||
highlight: {
|
|
||||||
fillMode: 'outline',
|
|
||||||
},
|
|
||||||
/* popover: {
|
|
||||||
label: 'Today Date',
|
|
||||||
visibility: 'hover',
|
|
||||||
}, */
|
|
||||||
},
|
|
||||||
])
|
|
||||||
|
|
||||||
const carbonFormat = computed(() => {
|
|
||||||
return companyStore.selectedCompanySettings?.moment_date_format
|
|
||||||
})
|
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => carbonFormat,
|
() => props.enableTime,
|
||||||
() => {
|
(val) => {
|
||||||
if (!props.enableTime) {
|
if (props.enableTime) {
|
||||||
masks.input = carbonFormat.value ? carbonFormat.value : 'DD MMM YYYY'
|
config.enableTime = props.enableTime
|
||||||
config.mask = 'YYYY-MM-DD'
|
|
||||||
} else {
|
|
||||||
let timeFormat = 'HH:mm'
|
|
||||||
if (props.time24hr) {
|
|
||||||
masks.inputDateTime24hr = carbonFormat.value
|
|
||||||
? `${carbonFormat.value} ${timeFormat}`
|
|
||||||
: `DD MMM YYYY ${timeFormat}`
|
|
||||||
} else {
|
|
||||||
masks.inputDateTime = carbonFormat.value
|
|
||||||
? `${carbonFormat.value} ${timeFormat}`
|
|
||||||
: `DD MMM YYYY ${timeFormat}`
|
|
||||||
}
|
|
||||||
config.mask = `YYYY-MM-DD ${timeFormat}`
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ immediate: true }
|
{ immediate: true }
|
||||||
)
|
)
|
||||||
|
|
||||||
async function moveToDate(_date) {
|
watch(
|
||||||
const calendar = vCalendar.value
|
() => carbonFormat,
|
||||||
_date = _date ? _date : convertYMDFormat(new Date())
|
() => {
|
||||||
date.value = _date
|
if (!props.enableTime) {
|
||||||
// await calendar.move(_date)
|
config.altFormat = carbonFormat.value ? carbonFormat.value : 'd M Y'
|
||||||
calendar.hidePopover()
|
} else {
|
||||||
}
|
config.altFormat = carbonFormat.value
|
||||||
|
? `${carbonFormat.value} H:i `
|
||||||
async function withInDays(noOfDays) {
|
: 'd M Y H:i'
|
||||||
if (!noOfDays) return false
|
}
|
||||||
|
},
|
||||||
let newDate = moment(props.sourceDate).add(noOfDays, 'days').toDate()
|
{ immediate: true }
|
||||||
newDate = convertYMDFormat(newDate)
|
)
|
||||||
moveToDate(newDate)
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.extra-button {
|
|
||||||
@apply bg-primary-500 text-white text-sm font-semibold px-2 py-1 rounded hover:bg-primary-700;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|||||||
@ -4,10 +4,10 @@
|
|||||||
<slot></slot>
|
<slot></slot>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-2">
|
<div class="mt-2">
|
||||||
<BaseLabel >{{ title }}</BaseLabel>
|
<label class="font-medium">{{ title }}</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-2">
|
<div class="mt-2">
|
||||||
<label class="text-gray-500 dark:text-gray-400">
|
<label class="text-gray-500">
|
||||||
{{ description }}
|
{{ description }}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -20,7 +20,6 @@
|
|||||||
hover:text-gray-700
|
hover:text-gray-700
|
||||||
top-2.5
|
top-2.5
|
||||||
right-3.5
|
right-3.5
|
||||||
dark:text-gray-300
|
|
||||||
"
|
"
|
||||||
@click="$emit('clear')"
|
@click="$emit('clear')"
|
||||||
>
|
>
|
||||||
|
|||||||
@ -3,15 +3,18 @@
|
|||||||
<BaseContentPlaceholders v-if="contentLoading">
|
<BaseContentPlaceholders v-if="contentLoading">
|
||||||
<BaseContentPlaceholdersText :lines="1" :class="contentLoadClass" />
|
<BaseContentPlaceholdersText :lines="1" :class="contentLoadClass" />
|
||||||
</BaseContentPlaceholders>
|
</BaseContentPlaceholders>
|
||||||
<BaseLabel
|
<label
|
||||||
v-else-if="label"
|
v-else-if="label"
|
||||||
:class="labelClasses"
|
:class="labelClasses"
|
||||||
class="
|
class="
|
||||||
!flex
|
flex
|
||||||
!items-center
|
text-sm
|
||||||
!text-gray-800
|
not-italic
|
||||||
!whitespace-nowrap
|
items-center
|
||||||
!justify-between
|
font-medium
|
||||||
|
text-gray-800
|
||||||
|
whitespace-nowrap
|
||||||
|
justify-between
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div>
|
<div>
|
||||||
@ -25,10 +28,10 @@
|
|||||||
name="InformationCircleIcon"
|
name="InformationCircleIcon"
|
||||||
class="h-4 text-gray-400 cursor-pointer hover:text-gray-600"
|
class="h-4 text-gray-400 cursor-pointer hover:text-gray-600"
|
||||||
/>
|
/>
|
||||||
</BaseLabel>
|
</label>
|
||||||
<div :class="inputContainerClasses">
|
<div :class="inputContainerClasses">
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
<span v-if="helpText" class="text-gray-500 text-xs mt-1 font-light dark:text-gray-400">
|
<span v-if="helpText" class="text-gray-500 text-xs mt-1 font-light">
|
||||||
{{ helpText }}
|
{{ helpText }}
|
||||||
</span>
|
</span>
|
||||||
<span v-if="error" class="block mt-0.5 text-sm text-red-500">
|
<span v-if="error" class="block mt-0.5 text-sm text-red-500">
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<label class="text-sm not-italic font-medium leading-5 text-primary-800 dark:!text-gray-300">
|
<label class="text-sm not-italic font-medium leading-5 text-primary-800">
|
||||||
<slot />
|
<slot />
|
||||||
</label>
|
</label>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@ -1,10 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<TabGroup
|
<TabGroup :default-index="defaultIndex" @change="onChange">
|
||||||
:selected-index="selectedIndex"
|
|
||||||
:default-index="defaultIndex"
|
|
||||||
@change="onChange"
|
|
||||||
>
|
|
||||||
<TabList
|
<TabList
|
||||||
:class="[
|
:class="[
|
||||||
'flex border-b border-grey-light',
|
'flex border-b border-grey-light',
|
||||||
@ -58,10 +54,6 @@ const props = defineProps({
|
|||||||
type: Number,
|
type: Number,
|
||||||
default: 0,
|
default: 0,
|
||||||
},
|
},
|
||||||
selectedIndex: {
|
|
||||||
type: Number,
|
|
||||||
default: 0,
|
|
||||||
},
|
|
||||||
filter: {
|
filter: {
|
||||||
type: String,
|
type: String,
|
||||||
default: null,
|
default: null,
|
||||||
@ -75,6 +67,6 @@ const slots = useSlots()
|
|||||||
const tabs = computed(() => slots.default().map((tab) => tab.props))
|
const tabs = computed(() => slots.default().map((tab) => tab.props))
|
||||||
|
|
||||||
function onChange(d) {
|
function onChange(d) {
|
||||||
emit('change', tabs.value[d], d)
|
emit('change', tabs.value[d])
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -7,12 +7,12 @@ export function usePopper(options) {
|
|||||||
let popper = ref(null)
|
let popper = ref(null)
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
watchEffect((onInvalidate) => {
|
watchEffect(onInvalidate => {
|
||||||
if (!container.value) return
|
if (!container.value) return
|
||||||
if (!activator.value) return
|
if (!activator.value) return
|
||||||
|
|
||||||
let containerEl = container.value.el || container.value
|
let containerEl = container.value.el || container.value
|
||||||
let activatorEl = activator.value.$el || activator.value
|
let activatorEl = activator.value.el || activator.value
|
||||||
|
|
||||||
if (!(activatorEl instanceof HTMLElement)) return
|
if (!(activatorEl instanceof HTMLElement)) return
|
||||||
if (!(containerEl instanceof HTMLElement)) return
|
if (!(containerEl instanceof HTMLElement)) return
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
"customers": "العملاء",
|
"customers": "العملاء",
|
||||||
"items": "بضائع/خدمات",
|
"items": "بضائع/خدمات",
|
||||||
"invoices": "الفواتير",
|
"invoices": "الفواتير",
|
||||||
"recurring-invoices": "Recurring Invoices",
|
"recurring-invoices": "الفواتير المتكررة",
|
||||||
"expenses": "النفقات",
|
"expenses": "النفقات",
|
||||||
"estimates": "التقديرات",
|
"estimates": "التقديرات",
|
||||||
"payments": "الدفوعات",
|
"payments": "الدفوعات",
|
||||||
@ -12,7 +12,7 @@
|
|||||||
"settings": "الإعدادات",
|
"settings": "الإعدادات",
|
||||||
"logout": "تسجيل الخروج",
|
"logout": "تسجيل الخروج",
|
||||||
"users": "المستخدمون",
|
"users": "المستخدمون",
|
||||||
"modules": "Modules"
|
"modules": "الإضافات"
|
||||||
},
|
},
|
||||||
"general": {
|
"general": {
|
||||||
"add_company": "أضف شركة",
|
"add_company": "أضف شركة",
|
||||||
@ -29,9 +29,9 @@
|
|||||||
"to_date": "إلى تاريخ",
|
"to_date": "إلى تاريخ",
|
||||||
"from": "من",
|
"from": "من",
|
||||||
"to": "إلى",
|
"to": "إلى",
|
||||||
"ok": "Ok",
|
"ok": "حسناً",
|
||||||
"yes": "Yes",
|
"yes": "نعم",
|
||||||
"no": "No",
|
"no": "لا",
|
||||||
"sort_by": "ترتيب حسب",
|
"sort_by": "ترتيب حسب",
|
||||||
"ascending": "تصاعدي",
|
"ascending": "تصاعدي",
|
||||||
"descending": "تنازلي",
|
"descending": "تنازلي",
|
||||||
@ -39,7 +39,7 @@
|
|||||||
"body": "الجسم",
|
"body": "الجسم",
|
||||||
"message": "رسالة",
|
"message": "رسالة",
|
||||||
"send": "إرسال",
|
"send": "إرسال",
|
||||||
"preview": "Preview",
|
"preview": "معاينة",
|
||||||
"go_back": "إلى الخلف",
|
"go_back": "إلى الخلف",
|
||||||
"back_to_login": "العودة إلى تسجيل الدخول؟",
|
"back_to_login": "العودة إلى تسجيل الدخول؟",
|
||||||
"home": "الرئيسية",
|
"home": "الرئيسية",
|
||||||
@ -65,7 +65,7 @@
|
|||||||
"sent": "ارسلت",
|
"sent": "ارسلت",
|
||||||
"all": "الكل",
|
"all": "الكل",
|
||||||
"select_all": "تحديد الكل",
|
"select_all": "تحديد الكل",
|
||||||
"select_template": "Select Template",
|
"select_template": "تحديد القالب",
|
||||||
"choose_file": "اضغط هنا لاختيار ملف",
|
"choose_file": "اضغط هنا لاختيار ملف",
|
||||||
"choose_template": "اختيار القالب",
|
"choose_template": "اختيار القالب",
|
||||||
"choose": "اختر",
|
"choose": "اختر",
|
||||||
@ -93,14 +93,14 @@
|
|||||||
"no_note_found": "لم يتم العثور على الملاحظة",
|
"no_note_found": "لم يتم العثور على الملاحظة",
|
||||||
"insert_note": "أدخل ملاحظة",
|
"insert_note": "أدخل ملاحظة",
|
||||||
"copied_pdf_url_clipboard": "تم نسخ رابط PDF إلى الحافظة!",
|
"copied_pdf_url_clipboard": "تم نسخ رابط PDF إلى الحافظة!",
|
||||||
"copied_url_clipboard": "Copied url to clipboard!",
|
"copied_url_clipboard": "تم نسخ الرابط إلى الحافظة!",
|
||||||
"docs": "Docs",
|
"docs": "المستندات",
|
||||||
"do_you_wish_to_continue": "Do you wish to continue?",
|
"do_you_wish_to_continue": "هل ترغب في المتابعة؟",
|
||||||
"note": "Note",
|
"note": "ملاحظة",
|
||||||
"pay_invoice": "Pay Invoice",
|
"pay_invoice": "سدد الفاتورة",
|
||||||
"login_successfully": "Logged in successfully!",
|
"login_successfully": "تم تسجيل الدخول بنجاح!",
|
||||||
"logged_out_successfully": "Logged out successfully",
|
"logged_out_successfully": "تم تسجيل الخروج",
|
||||||
"mark_as_default": "Mark as default"
|
"mark_as_default": "تحديد كافتراضي"
|
||||||
},
|
},
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
"select_year": "اختر السنة",
|
"select_year": "اختر السنة",
|
||||||
@ -109,7 +109,7 @@
|
|||||||
"customers": "العملاء",
|
"customers": "العملاء",
|
||||||
"invoices": "الفواتير",
|
"invoices": "الفواتير",
|
||||||
"estimates": "التقديرات",
|
"estimates": "التقديرات",
|
||||||
"payments": "Payments"
|
"payments": "المدفوعات"
|
||||||
},
|
},
|
||||||
"chart_info": {
|
"chart_info": {
|
||||||
"total_sales": "المبيعات",
|
"total_sales": "المبيعات",
|
||||||
@ -151,27 +151,27 @@
|
|||||||
"no_results_found": "لم يتم العثور على نتائج"
|
"no_results_found": "لم يتم العثور على نتائج"
|
||||||
},
|
},
|
||||||
"company_switcher": {
|
"company_switcher": {
|
||||||
"label": "SWITCH COMPANY",
|
"label": "تبديل الشركة",
|
||||||
"no_results_found": "No Results Found",
|
"no_results_found": "لا توجد نتائج",
|
||||||
"add_new_company": "Add new company",
|
"add_new_company": "إضافة شركة جديدة",
|
||||||
"new_company": "New company",
|
"new_company": "شركة جديدة",
|
||||||
"created_message": "Company created successfully"
|
"created_message": "تم إنشاء الشركة بنجاح"
|
||||||
},
|
},
|
||||||
"dateRange": {
|
"dateRange": {
|
||||||
"today": "Today",
|
"today": "اليوم",
|
||||||
"this_week": "This Week",
|
"this_week": "هذا الاسبوع",
|
||||||
"this_month": "This Month",
|
"this_month": "هذا الشهر",
|
||||||
"this_quarter": "This Quarter",
|
"this_quarter": "هذا الربع",
|
||||||
"this_year": "This Year",
|
"this_year": "هذه السنة",
|
||||||
"previous_week": "Previous Week",
|
"previous_week": "الأسبوع السابق",
|
||||||
"previous_month": "Previous Month",
|
"previous_month": "الشهر الماضي",
|
||||||
"previous_quarter": "Previous Quarter",
|
"previous_quarter": "الربع السابق",
|
||||||
"previous_year": "Previous Year",
|
"previous_year": "السنة الماضية",
|
||||||
"custom": "Custom"
|
"custom": "مخصص"
|
||||||
},
|
},
|
||||||
"customers": {
|
"customers": {
|
||||||
"title": "العملاء",
|
"title": "العملاء",
|
||||||
"prefix": "Prefix",
|
"prefix": "البادئة",
|
||||||
"add_customer": "إضافة عميل",
|
"add_customer": "إضافة عميل",
|
||||||
"contacts_list": "قائمة العملاء",
|
"contacts_list": "قائمة العملاء",
|
||||||
"name": "الاسم",
|
"name": "الاسم",
|
||||||
@ -186,9 +186,9 @@
|
|||||||
"phone": "الهاتف",
|
"phone": "الهاتف",
|
||||||
"website": "موقع الإنترنت",
|
"website": "موقع الإنترنت",
|
||||||
"overview": "استعراض",
|
"overview": "استعراض",
|
||||||
"invoice_prefix": "Invoice Prefix",
|
"invoice_prefix": "بادئة الفاتورة",
|
||||||
"estimate_prefix": "Estimate Prefix",
|
"estimate_prefix": "بادئة رقم التقدير",
|
||||||
"payment_prefix": "Payment Prefix",
|
"payment_prefix": "بادئة رقم الدفعة",
|
||||||
"enable_portal": "تفعيل البوابة",
|
"enable_portal": "تفعيل البوابة",
|
||||||
"country": "الدولة",
|
"country": "الدولة",
|
||||||
"state": "الولاية/المنطقة",
|
"state": "الولاية/المنطقة",
|
||||||
@ -197,7 +197,7 @@
|
|||||||
"added_on": "أضيف في",
|
"added_on": "أضيف في",
|
||||||
"action": "إجراء",
|
"action": "إجراء",
|
||||||
"password": "كلمة المرور",
|
"password": "كلمة المرور",
|
||||||
"confirm_password": "Confirm Password",
|
"confirm_password": "تأكيد كلمة المرور",
|
||||||
"street_number": "رقم الشارع",
|
"street_number": "رقم الشارع",
|
||||||
"primary_currency": "العملة الرئيسية",
|
"primary_currency": "العملة الرئيسية",
|
||||||
"description": "الوصف",
|
"description": "الوصف",
|
||||||
@ -208,10 +208,10 @@
|
|||||||
"new_customer": "عميل جديد",
|
"new_customer": "عميل جديد",
|
||||||
"edit_customer": "تعديل عميل",
|
"edit_customer": "تعديل عميل",
|
||||||
"basic_info": "معلوات أساسية",
|
"basic_info": "معلوات أساسية",
|
||||||
"portal_access": "Portal Access",
|
"portal_access": "الوصول إلى بوابة العملاء",
|
||||||
"portal_access_text": "Would you like to allow this customer to login to the Customer Portal?",
|
"portal_access_text": "هل تريد السماح لهذا العميل بتسجيل الدخول إلى بوابة العملاء؟",
|
||||||
"portal_access_url": "Customer Portal Login URL",
|
"portal_access_url": "رابط بوابة العملاء",
|
||||||
"portal_access_url_help": "Please copy & forward the above given URL to your customer for providing access.",
|
"portal_access_url_help": "يرجى نسخ وإعادة إرسال عنوان URL أعلاه إلى الزبون لتوفير الوصول.",
|
||||||
"billing_address": "عنوان الفوترة",
|
"billing_address": "عنوان الفوترة",
|
||||||
"shipping_address": "عنوان الشحن",
|
"shipping_address": "عنوان الشحن",
|
||||||
"copy_billing_address": "نسخ من عنوان الفوترة",
|
"copy_billing_address": "نسخ من عنوان الفوترة",
|
||||||
@ -231,9 +231,9 @@
|
|||||||
"confirm_delete": "لن تتمكن من استرداد هذا العميل وجميع الفواتير والتقديرات والمدفوعات ذات الصلة. | لن تتمكن من استرداد هؤلاء العملاء وجميع الفواتير والتقديرات والمدفوعات ذات الصلة.",
|
"confirm_delete": "لن تتمكن من استرداد هذا العميل وجميع الفواتير والتقديرات والمدفوعات ذات الصلة. | لن تتمكن من استرداد هؤلاء العملاء وجميع الفواتير والتقديرات والمدفوعات ذات الصلة.",
|
||||||
"created_message": "تم إنشاء العملاء بنجاح",
|
"created_message": "تم إنشاء العملاء بنجاح",
|
||||||
"updated_message": "تم تحديث العملاء بنجاح",
|
"updated_message": "تم تحديث العملاء بنجاح",
|
||||||
"address_updated_message": "Address Information Updated succesfully",
|
"address_updated_message": "تم تحديث العنوان بنجاح",
|
||||||
"deleted_message": "تم حذف العملاء بنجاح | تم حذف العميل بنجاح",
|
"deleted_message": "تم حذف العملاء بنجاح | تم حذف العميل بنجاح",
|
||||||
"edit_currency_not_allowed": "Cannot change currency once transactions created."
|
"edit_currency_not_allowed": "لا يمكن تغيير العملة بمجرد إنشاء معاملة."
|
||||||
},
|
},
|
||||||
"items": {
|
"items": {
|
||||||
"title": "الأصناف",
|
"title": "الأصناف",
|
||||||
@ -265,8 +265,8 @@
|
|||||||
},
|
},
|
||||||
"estimates": {
|
"estimates": {
|
||||||
"title": "التقديرات",
|
"title": "التقديرات",
|
||||||
"accept_estimate": "Accept Estimate",
|
"accept_estimate": "قبول التقدير",
|
||||||
"reject_estimate": "Reject Estimate",
|
"reject_estimate": "رفض التقدير",
|
||||||
"estimate": "تقدير | تقديرات",
|
"estimate": "تقدير | تقديرات",
|
||||||
"estimates_list": "قائمة التقديرات",
|
"estimates_list": "قائمة التقديرات",
|
||||||
"days": "{days} أيام",
|
"days": "{days} أيام",
|
||||||
@ -318,10 +318,10 @@
|
|||||||
},
|
},
|
||||||
"accepted": "مقبول",
|
"accepted": "مقبول",
|
||||||
"rejected": "مرفوض",
|
"rejected": "مرفوض",
|
||||||
"expired": "Expired",
|
"expired": "انتهت مدة الصلاحية",
|
||||||
"sent": "مرسل",
|
"sent": "مرسل",
|
||||||
"draft": "مسودة",
|
"draft": "مسودة",
|
||||||
"viewed": "Viewed",
|
"viewed": "تمت المشاهدة",
|
||||||
"declined": "مرفوض",
|
"declined": "مرفوض",
|
||||||
"new_estimate": "تقدير جديد",
|
"new_estimate": "تقدير جديد",
|
||||||
"add_new_estimate": "إضافة تقدير جديد",
|
"add_new_estimate": "إضافة تقدير جديد",
|
||||||
@ -355,14 +355,14 @@
|
|||||||
"select_an_item": "اكتب أو اختر الصنف",
|
"select_an_item": "اكتب أو اختر الصنف",
|
||||||
"type_item_description": "اكتب وصف الصنف (اختياري)"
|
"type_item_description": "اكتب وصف الصنف (اختياري)"
|
||||||
},
|
},
|
||||||
"mark_as_default_estimate_template_description": "If enabled, the selected template will be automatically selected for new estimates."
|
"mark_as_default_estimate_template_description": "في حالة التعفيل، سيتم اختيار القالب المحدد تلقائياً للتقديرات الجديدة."
|
||||||
},
|
},
|
||||||
"invoices": {
|
"invoices": {
|
||||||
"title": "الفواتير",
|
"title": "الفواتير",
|
||||||
"download": "Download",
|
"download": "تحميل",
|
||||||
"pay_invoice": "Pay Invoice",
|
"pay_invoice": "سدد الفاتورة",
|
||||||
"invoices_list": "قائمة الفواتير",
|
"invoices_list": "قائمة الفواتير",
|
||||||
"invoice_information": "Invoice Information",
|
"invoice_information": "معلومات الفاتورة",
|
||||||
"days": "{days} أيام",
|
"days": "{days} أيام",
|
||||||
"months": "{months} أشهر",
|
"months": "{months} أشهر",
|
||||||
"years": "{years} سنوات",
|
"years": "{years} سنوات",
|
||||||
@ -397,13 +397,13 @@
|
|||||||
"send_invoice": "إرسال الفاتورة",
|
"send_invoice": "إرسال الفاتورة",
|
||||||
"resend_invoice": "إعادة إرسال الفاتورة",
|
"resend_invoice": "إعادة إرسال الفاتورة",
|
||||||
"invoice_template": "قالب الفاتورة",
|
"invoice_template": "قالب الفاتورة",
|
||||||
"conversion_message": "Invoice cloned successful",
|
"conversion_message": "تم استنساخ الفاتورة بنجاح",
|
||||||
"template": "قالب",
|
"template": "قالب",
|
||||||
"mark_as_sent": "تحديد كمرسل",
|
"mark_as_sent": "تحديد كمرسل",
|
||||||
"confirm_send_invoice": "سيتم إرسال هذه الفاتورة بالبريد الألكتروني إلى العميل",
|
"confirm_send_invoice": "سيتم إرسال هذه الفاتورة بالبريد الألكتروني إلى العميل",
|
||||||
"invoice_mark_as_sent": "سيتم تحديد هذه الفاتورة كمرسلة",
|
"invoice_mark_as_sent": "سيتم تحديد هذه الفاتورة كمرسلة",
|
||||||
"confirm_mark_as_accepted": "This invoice will be marked as Accepted",
|
"confirm_mark_as_accepted": "سيتم تحديد هذه الفاتورة كمقبولة",
|
||||||
"confirm_mark_as_rejected": "This invoice will be marked as Rejected",
|
"confirm_mark_as_rejected": "سيتم تحديد هذه الفاتورة كمرفوضة",
|
||||||
"confirm_send": "سيتم إرسال هذه الفاتورة بالبريد الألكتروني إلى العميل",
|
"confirm_send": "سيتم إرسال هذه الفاتورة بالبريد الألكتروني إلى العميل",
|
||||||
"invoice_date": "تاريخ الفاتورة",
|
"invoice_date": "تاريخ الفاتورة",
|
||||||
"record_payment": "تسجيل مدفوعات",
|
"record_payment": "تسجيل مدفوعات",
|
||||||
@ -415,13 +415,13 @@
|
|||||||
"update_invoice": "تحديث الفاتورة",
|
"update_invoice": "تحديث الفاتورة",
|
||||||
"add_new_tax": "إضافة ضريبة جديدة",
|
"add_new_tax": "إضافة ضريبة جديدة",
|
||||||
"no_invoices": "لا يوجد فواتير حتى الآن!",
|
"no_invoices": "لا يوجد فواتير حتى الآن!",
|
||||||
"mark_as_rejected": "Mark as rejected",
|
"mark_as_rejected": "تحديد كمرفوض",
|
||||||
"mark_as_accepted": "Mark as accepted",
|
"mark_as_accepted": "تحديد كمقبول",
|
||||||
"list_of_invoices": "قائمة الفواتير .",
|
"list_of_invoices": "قائمة الفواتير .",
|
||||||
"select_invoice": "اختر الفاتورة",
|
"select_invoice": "اختر الفاتورة",
|
||||||
"no_matching_invoices": "لا يوجد فواتير مطابقة!",
|
"no_matching_invoices": "لا يوجد فواتير مطابقة!",
|
||||||
"mark_as_sent_successfully": "تم تحديد الفاتورة كمرسلة بنجاح",
|
"mark_as_sent_successfully": "تم تحديد الفاتورة كمرسلة بنجاح",
|
||||||
"invoice_sent_successfully": "Invoice sent successfully",
|
"invoice_sent_successfully": "تم إرسال الفاتورة بنجاح",
|
||||||
"cloned_successfully": "تم استنساخ الفاتورة بنجاح",
|
"cloned_successfully": "تم استنساخ الفاتورة بنجاح",
|
||||||
"clone_invoice": "استنساخ الفاتورة",
|
"clone_invoice": "استنساخ الفاتورة",
|
||||||
"confirm_clone": "سيتم استنساخ هذه الفاتورة في فاتورة جديدة",
|
"confirm_clone": "سيتم استنساخ هذه الفاتورة في فاتورة جديدة",
|
||||||
@ -447,14 +447,14 @@
|
|||||||
"marked_as_sent_message": "تم إرسال الفاتورة بنجاح",
|
"marked_as_sent_message": "تم إرسال الفاتورة بنجاح",
|
||||||
"something_went_wrong": "خطأ غير معروف!",
|
"something_went_wrong": "خطأ غير معروف!",
|
||||||
"invalid_due_amount_message": "المبلغ النهائي للفاتورة لا يمكن أن يكون أقل من المبلغ المطلوب لها. رجاءاً حدث الفاتورة أو قم بحذف المدفوعات المرتبطة بها للاستمرار.",
|
"invalid_due_amount_message": "المبلغ النهائي للفاتورة لا يمكن أن يكون أقل من المبلغ المطلوب لها. رجاءاً حدث الفاتورة أو قم بحذف المدفوعات المرتبطة بها للاستمرار.",
|
||||||
"mark_as_default_invoice_template_description": "If enabled, the selected template will be automatically selected for new invoices."
|
"mark_as_default_invoice_template_description": "في حالة التفعيل، سيتم اختيار القالب المحدد تلقائياً للفواتير الجديدة."
|
||||||
},
|
},
|
||||||
"recurring_invoices": {
|
"recurring_invoices": {
|
||||||
"title": "Recurring Invoices",
|
"title": "الفواتير المتكررة",
|
||||||
"invoices_list": "Recurring Invoices List",
|
"invoices_list": "الفواتير المتكررة",
|
||||||
"days": "{days} Days",
|
"days": "{days} أيام",
|
||||||
"months": "{months} Month",
|
"months": "{months} أشهر",
|
||||||
"years": "{years} Year",
|
"years": "{years} سنوات",
|
||||||
"all": "All",
|
"all": "All",
|
||||||
"paid": "Paid",
|
"paid": "Paid",
|
||||||
"unpaid": "Unpaid",
|
"unpaid": "Unpaid",
|
||||||
@ -1485,7 +1485,7 @@
|
|||||||
"pdf_estimate_label": "تقدير",
|
"pdf_estimate_label": "تقدير",
|
||||||
"pdf_estimate_number": "رقم تقدير",
|
"pdf_estimate_number": "رقم تقدير",
|
||||||
"pdf_estimate_date": "تاريخ التقدير",
|
"pdf_estimate_date": "تاريخ التقدير",
|
||||||
"pdf_estimate_expire_date": "تاريخ انتهاء الصلاحية",
|
"pdf_estimate_expire_date": "Expiry Date",
|
||||||
"pdf_invoice_label": "الفاتورة",
|
"pdf_invoice_label": "الفاتورة",
|
||||||
"pdf_invoice_number": "رقم الفاتورة",
|
"pdf_invoice_number": "رقم الفاتورة",
|
||||||
"pdf_invoice_date": "تاريخ الفاتورة",
|
"pdf_invoice_date": "تاريخ الفاتورة",
|
||||||
|
|||||||
@ -112,7 +112,7 @@
|
|||||||
"payments": "Platby"
|
"payments": "Platby"
|
||||||
},
|
},
|
||||||
"chart_info": {
|
"chart_info": {
|
||||||
"total_sales": "Slevy",
|
"total_sales": "Prodeje",
|
||||||
"total_receipts": "Doklady",
|
"total_receipts": "Doklady",
|
||||||
"total_expense": "Výdaje",
|
"total_expense": "Výdaje",
|
||||||
"net_income": "Čistý příjem",
|
"net_income": "Čistý příjem",
|
||||||
@ -1485,7 +1485,7 @@
|
|||||||
"pdf_estimate_label": "Odhad",
|
"pdf_estimate_label": "Odhad",
|
||||||
"pdf_estimate_number": "Číslo odhadu",
|
"pdf_estimate_number": "Číslo odhadu",
|
||||||
"pdf_estimate_date": "Datum odhadu",
|
"pdf_estimate_date": "Datum odhadu",
|
||||||
"pdf_estimate_expire_date": "Doba platnosti",
|
"pdf_estimate_expire_date": "Datum expirace",
|
||||||
"pdf_invoice_label": "Faktura",
|
"pdf_invoice_label": "Faktura",
|
||||||
"pdf_invoice_number": "Číslo faktury",
|
"pdf_invoice_number": "Číslo faktury",
|
||||||
"pdf_invoice_date": "Datum fakturace",
|
"pdf_invoice_date": "Datum fakturace",
|
||||||
@ -1495,7 +1495,7 @@
|
|||||||
"pdf_quantity_label": "Množství",
|
"pdf_quantity_label": "Množství",
|
||||||
"pdf_price_label": "Cena",
|
"pdf_price_label": "Cena",
|
||||||
"pdf_discount_label": "Sleva",
|
"pdf_discount_label": "Sleva",
|
||||||
"pdf_amount_label": "Množství",
|
"pdf_amount_label": "Částka",
|
||||||
"pdf_subtotal": "Mezisoučet",
|
"pdf_subtotal": "Mezisoučet",
|
||||||
"pdf_total": "Celkem",
|
"pdf_total": "Celkem",
|
||||||
"pdf_payment_label": "Platba",
|
"pdf_payment_label": "Platba",
|
||||||
|
|||||||
@ -688,7 +688,7 @@
|
|||||||
"other_modules": "Weitere Module",
|
"other_modules": "Weitere Module",
|
||||||
"view_all": "Alle Anzeigen",
|
"view_all": "Alle Anzeigen",
|
||||||
"no_reviews_found": "Für dieses Modul gibt es noch keine Bewertungen!",
|
"no_reviews_found": "Für dieses Modul gibt es noch keine Bewertungen!",
|
||||||
"module_not_purchased": "Module Not Purchased",
|
"module_not_purchased": "Modul noch nicht erworben",
|
||||||
"module_not_found": "Modul nicht gefunden",
|
"module_not_found": "Modul nicht gefunden",
|
||||||
"version_not_supported": "This module version doesn't support the current version of Crater",
|
"version_not_supported": "This module version doesn't support the current version of Crater",
|
||||||
"last_updated": "Zuletzt aktualisiert am",
|
"last_updated": "Zuletzt aktualisiert am",
|
||||||
@ -1113,7 +1113,7 @@
|
|||||||
"default_currency_error": "Diese Währung wird bereits in einem der aktiven Anbieter verwendet",
|
"default_currency_error": "Diese Währung wird bereits in einem der aktiven Anbieter verwendet",
|
||||||
"exchange_help_text": "Wechselkurs eingeben um von {currency} nach {baseCurrency} zu konvertieren",
|
"exchange_help_text": "Wechselkurs eingeben um von {currency} nach {baseCurrency} zu konvertieren",
|
||||||
"currency_freak": "CurrencyFreaks",
|
"currency_freak": "CurrencyFreaks",
|
||||||
"currency_layer": "Currency Layer",
|
"currency_layer": "Währungsebene",
|
||||||
"open_exchange_rate": "Open Exchange Rate",
|
"open_exchange_rate": "Open Exchange Rate",
|
||||||
"currency_converter": "Währungsumrechner",
|
"currency_converter": "Währungsumrechner",
|
||||||
"server": "Server",
|
"server": "Server",
|
||||||
@ -1150,8 +1150,8 @@
|
|||||||
"payment_mode_added": "Zahlungsart hinzugefügt",
|
"payment_mode_added": "Zahlungsart hinzugefügt",
|
||||||
"payment_mode_updated": "Zahlungsart aktualisiert",
|
"payment_mode_updated": "Zahlungsart aktualisiert",
|
||||||
"payment_mode_confirm_delete": "Sie werden diese Zahlungsart nicht wiederherstellen können",
|
"payment_mode_confirm_delete": "Sie werden diese Zahlungsart nicht wiederherstellen können",
|
||||||
"payments_attached": "This payment method is already attached to payments. Please delete the attached payments to proceed with deletion.",
|
"payments_attached": "Diese Zahlungsmethode ist bereits mit Zahlungen verknüpft. Bitte löschen Sie die angehängten Zahlungen, um mit der Löschung fortzufahren.",
|
||||||
"expenses_attached": "This payment method is already attached to expenses. Please delete the attached expenses to proceed with deletion.",
|
"expenses_attached": "Diese Zahlungsmethode ist bereits mit Ausgaben verknüpft. Bitte löschen Sie die angehängten Ausgaben, um mit der Löschung fortzufahren.",
|
||||||
"deleted_message": "Zahlungsart erfolgreich gelöscht"
|
"deleted_message": "Zahlungsart erfolgreich gelöscht"
|
||||||
},
|
},
|
||||||
"expense_category": {
|
"expense_category": {
|
||||||
@ -1179,7 +1179,7 @@
|
|||||||
"discount_per_item": "Rabatt pro Artikel ",
|
"discount_per_item": "Rabatt pro Artikel ",
|
||||||
"discount_setting_description": "Aktivieren Sie diese Option, wenn Sie einzelnen Rechnungspositionen einen Rabatt hinzufügen möchten. Standardmäßig wird der Rabatt direkt zur Rechnung hinzugefügt.",
|
"discount_setting_description": "Aktivieren Sie diese Option, wenn Sie einzelnen Rechnungspositionen einen Rabatt hinzufügen möchten. Standardmäßig wird der Rabatt direkt zur Rechnung hinzugefügt.",
|
||||||
"expire_public_links": "Öffentliche Links automatisch ablaufen lassen",
|
"expire_public_links": "Öffentliche Links automatisch ablaufen lassen",
|
||||||
"expire_setting_description": "Specify whether you would like to expire all the links sent by application to view invoices, estimates & payments, etc after a specified duration.",
|
"expire_setting_description": "Geben Sie an, ob Sie alle von der Anwendung gesendeten Links zur Ansicht von Rechnungen, Kostenvoranschlägen und Zahlungen usw. nach einer bestimmten Zeit ablaufen lassen möchten.",
|
||||||
"save": "Speichern",
|
"save": "Speichern",
|
||||||
"preference": "Präferenz | Präferenzen",
|
"preference": "Präferenz | Präferenzen",
|
||||||
"general_settings": "Standardeinstellungen für das System.",
|
"general_settings": "Standardeinstellungen für das System.",
|
||||||
@ -1272,14 +1272,14 @@
|
|||||||
"do_spaces_secret": "Do Spaces Secret",
|
"do_spaces_secret": "Do Spaces Secret",
|
||||||
"do_spaces_region": "Do Spaced Region",
|
"do_spaces_region": "Do Spaced Region",
|
||||||
"do_spaces_bucket": "Do Spaces Bucket",
|
"do_spaces_bucket": "Do Spaces Bucket",
|
||||||
"do_spaces_endpoint": "Do Spaces Endpoint",
|
"do_spaces_endpoint": "Do Spaces Endpunkt",
|
||||||
"do_spaces_root": "Do Spaced Root",
|
"do_spaces_root": "Do Spaced Root",
|
||||||
"dropbox_type": "Dropbox Typ",
|
"dropbox_type": "Dropbox Typ",
|
||||||
"dropbox_token": "Dropbox Token",
|
"dropbox_token": "Dropbox Token",
|
||||||
"dropbox_key": "Dropbox Schlüssel",
|
"dropbox_key": "Dropbox Schlüssel",
|
||||||
"dropbox_secret": "Dropbox Secret",
|
"dropbox_secret": "Dropbox Secret",
|
||||||
"dropbox_app": "Dropbox App",
|
"dropbox_app": "Dropbox App",
|
||||||
"dropbox_root": "Dropbox Root",
|
"dropbox_root": "Dropbox Root Verzeichnis",
|
||||||
"default_driver": "Standard-Treiber",
|
"default_driver": "Standard-Treiber",
|
||||||
"is_default": "Standard",
|
"is_default": "Standard",
|
||||||
"set_default_disk": "Als Standard festlegen",
|
"set_default_disk": "Als Standard festlegen",
|
||||||
@ -1485,7 +1485,7 @@
|
|||||||
"pdf_estimate_label": "Angebot",
|
"pdf_estimate_label": "Angebot",
|
||||||
"pdf_estimate_number": "Angebotsnummer",
|
"pdf_estimate_number": "Angebotsnummer",
|
||||||
"pdf_estimate_date": "Angebotsdatum",
|
"pdf_estimate_date": "Angebotsdatum",
|
||||||
"pdf_estimate_expire_date": "Gültig bis",
|
"pdf_estimate_expire_date": "Zahlungsziel",
|
||||||
"pdf_invoice_label": "Rechnung",
|
"pdf_invoice_label": "Rechnung",
|
||||||
"pdf_invoice_number": "Rechnungsnummer",
|
"pdf_invoice_number": "Rechnungsnummer",
|
||||||
"pdf_invoice_date": "Rechnungsdatum",
|
"pdf_invoice_date": "Rechnungsdatum",
|
||||||
|
|||||||
@ -1485,7 +1485,7 @@
|
|||||||
"pdf_estimate_label": "Εκτίμηση",
|
"pdf_estimate_label": "Εκτίμηση",
|
||||||
"pdf_estimate_number": "Εκτίμηση Αριθμού",
|
"pdf_estimate_number": "Εκτίμηση Αριθμού",
|
||||||
"pdf_estimate_date": "Εκτιμώμενη ημ. επισκευής",
|
"pdf_estimate_date": "Εκτιμώμενη ημ. επισκευής",
|
||||||
"pdf_estimate_expire_date": "Ημερομηνία λήξης",
|
"pdf_estimate_expire_date": "Expiry Date",
|
||||||
"pdf_invoice_label": "Τιμολόγιο",
|
"pdf_invoice_label": "Τιμολόγιο",
|
||||||
"pdf_invoice_number": "Αριθμός τιμολογίου",
|
"pdf_invoice_number": "Αριθμός τιμολογίου",
|
||||||
"pdf_invoice_date": "Ημ/νία Τιμολόγησης",
|
"pdf_invoice_date": "Ημ/νία Τιμολόγησης",
|
||||||
|
|||||||
@ -863,8 +863,6 @@
|
|||||||
"company_info": {
|
"company_info": {
|
||||||
"company_info": "Company info",
|
"company_info": "Company info",
|
||||||
"company_name": "Company Name",
|
"company_name": "Company Name",
|
||||||
"company_slug": "Company Slug",
|
|
||||||
"company_slug_help_text": "A unique URL friendly name for your company (It will appear on Customer Portal URL)",
|
|
||||||
"company_logo": "Company Logo",
|
"company_logo": "Company Logo",
|
||||||
"section_description": "Information about your company that will be displayed on invoices, estimates and other documents created by Crater.",
|
"section_description": "Information about your company that will be displayed on invoices, estimates and other documents created by Crater.",
|
||||||
"phone": "Phone",
|
"phone": "Phone",
|
||||||
@ -1326,8 +1324,6 @@
|
|||||||
"company_info": "Company Information",
|
"company_info": "Company Information",
|
||||||
"company_info_desc": "This information will be displayed on invoices. Note that you can edit this later on settings page.",
|
"company_info_desc": "This information will be displayed on invoices. Note that you can edit this later on settings page.",
|
||||||
"company_name": "Company Name",
|
"company_name": "Company Name",
|
||||||
"company_slug": "Company Slug",
|
|
||||||
"company_slug_help_text": "A unique URL friendly name for your company (It will appear on Customer Portal URL)",
|
|
||||||
"company_logo": "Company Logo",
|
"company_logo": "Company Logo",
|
||||||
"logo_preview": "Logo Preview",
|
"logo_preview": "Logo Preview",
|
||||||
"preferences": "Company Preferences",
|
"preferences": "Company Preferences",
|
||||||
@ -1458,8 +1454,7 @@
|
|||||||
"at_least_one_ability": "Please select atleast one Permission.",
|
"at_least_one_ability": "Please select atleast one Permission.",
|
||||||
"valid_driver_key": "Please enter a valid {driver} key.",
|
"valid_driver_key": "Please enter a valid {driver} key.",
|
||||||
"valid_exchange_rate": "Please enter a valid exchange rate.",
|
"valid_exchange_rate": "Please enter a valid exchange rate.",
|
||||||
"company_name_not_same": "Company name must match with given name.",
|
"company_name_not_same": "Company name must match with given name."
|
||||||
"invalid_slug": "Invalid Slug"
|
|
||||||
},
|
},
|
||||||
"errors": {
|
"errors": {
|
||||||
"starter_plan": "This feature is available on Starter plan and onwards!",
|
"starter_plan": "This feature is available on Starter plan and onwards!",
|
||||||
@ -1527,13 +1522,5 @@
|
|||||||
"pdf_bill_to": "Bill to,",
|
"pdf_bill_to": "Bill to,",
|
||||||
"pdf_ship_to": "Ship to,",
|
"pdf_ship_to": "Ship to,",
|
||||||
"pdf_received_from": "Received from:",
|
"pdf_received_from": "Received from:",
|
||||||
"pdf_tax_label": "Tax",
|
"pdf_tax_label": "Tax"
|
||||||
"date_picker": {
|
|
||||||
"same_day": "Same Day",
|
|
||||||
"within_7_days": "Within 7 Days",
|
|
||||||
"within_15_days": "Within 15 Days",
|
|
||||||
"within_30_days": "Within 30 Days",
|
|
||||||
"within_45_days": "Within 45 Days",
|
|
||||||
"within_60_days": "Within 60 Days"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"navigation": {
|
"navigation": {
|
||||||
"dashboard": "Tablero",
|
"dashboard": "Panel de Control",
|
||||||
"customers": "Clientes",
|
"customers": "Clientes",
|
||||||
"items": "Artículos",
|
"items": "Artículos",
|
||||||
"invoices": "Facturas",
|
"invoices": "Facturas",
|
||||||
@ -9,7 +9,7 @@
|
|||||||
"estimates": "Presupuestos",
|
"estimates": "Presupuestos",
|
||||||
"payments": "Pagos",
|
"payments": "Pagos",
|
||||||
"reports": "Informes",
|
"reports": "Informes",
|
||||||
"settings": "Ajustes",
|
"settings": "Configuración",
|
||||||
"logout": "Cerrar sesión",
|
"logout": "Cerrar sesión",
|
||||||
"users": "Usuarios",
|
"users": "Usuarios",
|
||||||
"modules": "Módulos"
|
"modules": "Módulos"
|
||||||
@ -47,7 +47,7 @@
|
|||||||
"delete": "Eliminar",
|
"delete": "Eliminar",
|
||||||
"edit": "Editar",
|
"edit": "Editar",
|
||||||
"view": "Ver",
|
"view": "Ver",
|
||||||
"add_new_item": "Agregar ítem nuevo",
|
"add_new_item": "Agregar Nuevo Artículo",
|
||||||
"clear_all": "Limpiar todo",
|
"clear_all": "Limpiar todo",
|
||||||
"showing": "Mostrar",
|
"showing": "Mostrar",
|
||||||
"of": "de",
|
"of": "de",
|
||||||
@ -87,7 +87,7 @@
|
|||||||
"select_city": "Seleccionar ciudad",
|
"select_city": "Seleccionar ciudad",
|
||||||
"street_1": "Calle 1",
|
"street_1": "Calle 1",
|
||||||
"street_2": "Calle 2",
|
"street_2": "Calle 2",
|
||||||
"action_failed": "Accion Fallida",
|
"action_failed": "Acción Fallida",
|
||||||
"retry": "Procesar de nuevo",
|
"retry": "Procesar de nuevo",
|
||||||
"choose_note": "Elegir nota",
|
"choose_note": "Elegir nota",
|
||||||
"no_note_found": "No se encontró ninguna nota",
|
"no_note_found": "No se encontró ninguna nota",
|
||||||
@ -98,7 +98,7 @@
|
|||||||
"do_you_wish_to_continue": "¿Deseas continuar?",
|
"do_you_wish_to_continue": "¿Deseas continuar?",
|
||||||
"note": "Nota",
|
"note": "Nota",
|
||||||
"pay_invoice": "Pagar factura",
|
"pay_invoice": "Pagar factura",
|
||||||
"login_successfully": "Logeado Satisfactoriamente!",
|
"login_successfully": "¡Sesión inciada con éxito!",
|
||||||
"logged_out_successfully": "Logeado Satisfactoriamente",
|
"logged_out_successfully": "Logeado Satisfactoriamente",
|
||||||
"mark_as_default": "Marcar como predeterminado"
|
"mark_as_default": "Marcar como predeterminado"
|
||||||
},
|
},
|
||||||
@ -113,7 +113,7 @@
|
|||||||
},
|
},
|
||||||
"chart_info": {
|
"chart_info": {
|
||||||
"total_sales": "Ventas",
|
"total_sales": "Ventas",
|
||||||
"total_receipts": "Ingresos",
|
"total_receipts": "Recibos",
|
||||||
"total_expense": "Gastos",
|
"total_expense": "Gastos",
|
||||||
"net_income": "Ingresos netos",
|
"net_income": "Ingresos netos",
|
||||||
"year": "Seleccione año"
|
"year": "Seleccione año"
|
||||||
@ -1485,7 +1485,7 @@
|
|||||||
"pdf_estimate_label": "Presupuestar",
|
"pdf_estimate_label": "Presupuestar",
|
||||||
"pdf_estimate_number": "Número de Presupuesto",
|
"pdf_estimate_number": "Número de Presupuesto",
|
||||||
"pdf_estimate_date": "Fecha presupuesto",
|
"pdf_estimate_date": "Fecha presupuesto",
|
||||||
"pdf_estimate_expire_date": "Fecha de caducidad",
|
"pdf_estimate_expire_date": "Fecha de vencimiento",
|
||||||
"pdf_invoice_label": "Factura",
|
"pdf_invoice_label": "Factura",
|
||||||
"pdf_invoice_number": "Numero de factura",
|
"pdf_invoice_number": "Numero de factura",
|
||||||
"pdf_invoice_date": "Fecha de la factura",
|
"pdf_invoice_date": "Fecha de la factura",
|
||||||
|
|||||||
@ -1485,7 +1485,7 @@
|
|||||||
"pdf_estimate_label": "Estimate",
|
"pdf_estimate_label": "Estimate",
|
||||||
"pdf_estimate_number": "Estimate Number",
|
"pdf_estimate_number": "Estimate Number",
|
||||||
"pdf_estimate_date": "Estimate Date",
|
"pdf_estimate_date": "Estimate Date",
|
||||||
"pdf_estimate_expire_date": "Expiry date",
|
"pdf_estimate_expire_date": "Expiry Date",
|
||||||
"pdf_invoice_label": "Invoice",
|
"pdf_invoice_label": "Invoice",
|
||||||
"pdf_invoice_number": "Invoice Number",
|
"pdf_invoice_number": "Invoice Number",
|
||||||
"pdf_invoice_date": "Invoice Date",
|
"pdf_invoice_date": "Invoice Date",
|
||||||
|
|||||||
@ -1485,7 +1485,7 @@
|
|||||||
"pdf_estimate_label": "Tarjous",
|
"pdf_estimate_label": "Tarjous",
|
||||||
"pdf_estimate_number": "Tarjousnumero",
|
"pdf_estimate_number": "Tarjousnumero",
|
||||||
"pdf_estimate_date": "Tarjouksen päiväys",
|
"pdf_estimate_date": "Tarjouksen päiväys",
|
||||||
"pdf_estimate_expire_date": "Voimassaolo päivä",
|
"pdf_estimate_expire_date": "Expiry Date",
|
||||||
"pdf_invoice_label": "Lasku",
|
"pdf_invoice_label": "Lasku",
|
||||||
"pdf_invoice_number": "Laskunumero",
|
"pdf_invoice_number": "Laskunumero",
|
||||||
"pdf_invoice_date": "Laskun päiväys",
|
"pdf_invoice_date": "Laskun päiväys",
|
||||||
|
|||||||
@ -310,7 +310,7 @@
|
|||||||
"confirm_mark_as_sent": "Ce devis sera marqué comme envoyé",
|
"confirm_mark_as_sent": "Ce devis sera marqué comme envoyé",
|
||||||
"confirm_mark_as_accepted": "Ce devis sera marqué comme accepté",
|
"confirm_mark_as_accepted": "Ce devis sera marqué comme accepté",
|
||||||
"confirm_mark_as_rejected": "Ce devis sera marqué comme rejeté",
|
"confirm_mark_as_rejected": "Ce devis sera marqué comme rejeté",
|
||||||
"no_matching_estimates": "Aucune estimation correspondante !",
|
"no_matching_estimates": "Aucun devis correspondant !",
|
||||||
"mark_as_sent_successfully": "Devis marqué comme envoyé",
|
"mark_as_sent_successfully": "Devis marqué comme envoyé",
|
||||||
"send_estimate_successfully": "Devis envoyé",
|
"send_estimate_successfully": "Devis envoyé",
|
||||||
"errors": {
|
"errors": {
|
||||||
@ -355,7 +355,7 @@
|
|||||||
"select_an_item": "Sélectionnez un article",
|
"select_an_item": "Sélectionnez un article",
|
||||||
"type_item_description": "Taper la description de l'article (facultatif)"
|
"type_item_description": "Taper la description de l'article (facultatif)"
|
||||||
},
|
},
|
||||||
"mark_as_default_estimate_template_description": "If enabled, the selected template will be automatically selected for new estimates."
|
"mark_as_default_estimate_template_description": "Si activé, le modèle sélectionné sera automatiquement utilisé pour les nouvelles estimations."
|
||||||
},
|
},
|
||||||
"invoices": {
|
"invoices": {
|
||||||
"title": "Factures",
|
"title": "Factures",
|
||||||
@ -447,7 +447,7 @@
|
|||||||
"marked_as_sent_message": "Facture supprimée | Factures supprimées",
|
"marked_as_sent_message": "Facture supprimée | Factures supprimées",
|
||||||
"something_went_wrong": "quelque chose a mal tourné",
|
"something_went_wrong": "quelque chose a mal tourné",
|
||||||
"invalid_due_amount_message": "Le paiement entré est supérieur au montant total dû pour cette facture. Veuillez vérifier et réessayer.",
|
"invalid_due_amount_message": "Le paiement entré est supérieur au montant total dû pour cette facture. Veuillez vérifier et réessayer.",
|
||||||
"mark_as_default_invoice_template_description": "If enabled, the selected template will be automatically selected for new invoices."
|
"mark_as_default_invoice_template_description": "Si activé, le modèle sélectionné sera automatiquement utilisé pour les nouvelles factures."
|
||||||
},
|
},
|
||||||
"recurring_invoices": {
|
"recurring_invoices": {
|
||||||
"title": "Factures récurrentes",
|
"title": "Factures récurrentes",
|
||||||
@ -526,7 +526,7 @@
|
|||||||
"cloned_successfully": "Facture récurrente clonée",
|
"cloned_successfully": "Facture récurrente clonée",
|
||||||
"clone_invoice": "Dupliquer",
|
"clone_invoice": "Dupliquer",
|
||||||
"confirm_clone": "Cette facture récurrente sera clonée dans une nouvelle facture récurrente",
|
"confirm_clone": "Cette facture récurrente sera clonée dans une nouvelle facture récurrente",
|
||||||
"add_customer_email": "Please add an email address for this customer to send invoices automatically.",
|
"add_customer_email": "Veuillez ajouter une adresse e-mail pour ce client afin d'envoyer les factures automatiquement.",
|
||||||
"item": {
|
"item": {
|
||||||
"title": "Nom",
|
"title": "Nom",
|
||||||
"description": "Description",
|
"description": "Description",
|
||||||
@ -844,9 +844,9 @@
|
|||||||
"secret": "Secret",
|
"secret": "Secret",
|
||||||
"mailgun_secret": "Secret Mailgun",
|
"mailgun_secret": "Secret Mailgun",
|
||||||
"mailgun_domain": "Domaine",
|
"mailgun_domain": "Domaine",
|
||||||
"mailgun_endpoint": "Mailgun Endpoint",
|
"mailgun_endpoint": "Endpoint de Mailgun",
|
||||||
"ses_secret": "SES Secret",
|
"ses_secret": "Clé secrète SES",
|
||||||
"ses_key": "SES Key",
|
"ses_key": "Clé SES",
|
||||||
"password": "Mot de passe",
|
"password": "Mot de passe",
|
||||||
"username": "Nom d'utilisateur",
|
"username": "Nom d'utilisateur",
|
||||||
"mail_config": "Envoi d'emails",
|
"mail_config": "Envoi d'emails",
|
||||||
@ -1112,10 +1112,10 @@
|
|||||||
"error": "Vous ne pouvez pas supprimer le fournisseur actif",
|
"error": "Vous ne pouvez pas supprimer le fournisseur actif",
|
||||||
"default_currency_error": "Cette devise est déjà affectée à un fournisseur",
|
"default_currency_error": "Cette devise est déjà affectée à un fournisseur",
|
||||||
"exchange_help_text": "Veuillez entrer le taux de change pour convertir {currency} en {baseCurrency}",
|
"exchange_help_text": "Veuillez entrer le taux de change pour convertir {currency} en {baseCurrency}",
|
||||||
"currency_freak": "Currency Freak",
|
"currency_freak": "Currency Freaks",
|
||||||
"currency_layer": "Currency Layer",
|
"currency_layer": "Currency Layer",
|
||||||
"open_exchange_rate": "Open Exchange Rate",
|
"open_exchange_rate": "Ouvrir le taux de change",
|
||||||
"currency_converter": "Currency Converter",
|
"currency_converter": "Convertisseur de devises",
|
||||||
"server": "Serveur",
|
"server": "Serveur",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"active": "Actif",
|
"active": "Actif",
|
||||||
@ -1150,8 +1150,8 @@
|
|||||||
"payment_mode_added": "Mode de paiement ajouté",
|
"payment_mode_added": "Mode de paiement ajouté",
|
||||||
"payment_mode_updated": "Mode de paiement mis à jour",
|
"payment_mode_updated": "Mode de paiement mis à jour",
|
||||||
"payment_mode_confirm_delete": "Vous ne pourrez pas récupérer ce mode de paiement",
|
"payment_mode_confirm_delete": "Vous ne pourrez pas récupérer ce mode de paiement",
|
||||||
"payments_attached": "This payment method is already attached to payments. Please delete the attached payments to proceed with deletion.",
|
"payments_attached": "Ce moyen de paiement est déjà utilisé par des paiements. Merci de supprimer les paiements associés avant de procéder à la suppression.",
|
||||||
"expenses_attached": "This payment method is already attached to expenses. Please delete the attached expenses to proceed with deletion.",
|
"expenses_attached": "Ce moyen de paiement est déjà utilisé par des dépenses. Merci de supprimer les dépenses associés avant de procéder à la suppression.",
|
||||||
"deleted_message": "Mode de paiement supprimé"
|
"deleted_message": "Mode de paiement supprimé"
|
||||||
},
|
},
|
||||||
"expense_category": {
|
"expense_category": {
|
||||||
@ -1262,8 +1262,8 @@
|
|||||||
"media_driver": "Stockage multimédia",
|
"media_driver": "Stockage multimédia",
|
||||||
"media_root": "Répertoire média",
|
"media_root": "Répertoire média",
|
||||||
"aws_driver": "AWS",
|
"aws_driver": "AWS",
|
||||||
"aws_key": "AWS Key",
|
"aws_key": "Clé AWS",
|
||||||
"aws_secret": "AWS Secret",
|
"aws_secret": "Clé secrète AWS",
|
||||||
"aws_region": "Région AWS",
|
"aws_region": "Région AWS",
|
||||||
"aws_bucket": "Bucket",
|
"aws_bucket": "Bucket",
|
||||||
"aws_root": "Répertoire",
|
"aws_root": "Répertoire",
|
||||||
@ -1491,7 +1491,7 @@
|
|||||||
"pdf_invoice_date": "Date",
|
"pdf_invoice_date": "Date",
|
||||||
"pdf_invoice_due_date": "Date d’échéance",
|
"pdf_invoice_due_date": "Date d’échéance",
|
||||||
"pdf_notes": "Notes de bas de page",
|
"pdf_notes": "Notes de bas de page",
|
||||||
"pdf_items_label": "Articles",
|
"pdf_items_label": "Désignation",
|
||||||
"pdf_quantity_label": "Quantité",
|
"pdf_quantity_label": "Quantité",
|
||||||
"pdf_price_label": "Prix",
|
"pdf_price_label": "Prix",
|
||||||
"pdf_discount_label": "Remise",
|
"pdf_discount_label": "Remise",
|
||||||
|
|||||||
@ -1485,7 +1485,7 @@
|
|||||||
"pdf_estimate_label": "Estimate",
|
"pdf_estimate_label": "Estimate",
|
||||||
"pdf_estimate_number": "Estimate Number",
|
"pdf_estimate_number": "Estimate Number",
|
||||||
"pdf_estimate_date": "Estimate Date",
|
"pdf_estimate_date": "Estimate Date",
|
||||||
"pdf_estimate_expire_date": "Expiry date",
|
"pdf_estimate_expire_date": "Expiry Date",
|
||||||
"pdf_invoice_label": "Invoice",
|
"pdf_invoice_label": "Invoice",
|
||||||
"pdf_invoice_number": "Invoice Number",
|
"pdf_invoice_number": "Invoice Number",
|
||||||
"pdf_invoice_date": "Invoice Date",
|
"pdf_invoice_date": "Invoice Date",
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
"customers": "Klijenti",
|
"customers": "Klijenti",
|
||||||
"items": "Stavke",
|
"items": "Stavke",
|
||||||
"invoices": "Fakture",
|
"invoices": "Fakture",
|
||||||
"recurring-invoices": "Recurring Invoices",
|
"recurring-invoices": "Ponavljajuće fakture\n",
|
||||||
"expenses": "Rashodi",
|
"expenses": "Rashodi",
|
||||||
"estimates": "Ponude",
|
"estimates": "Ponude",
|
||||||
"payments": "Uplate",
|
"payments": "Uplate",
|
||||||
@ -12,7 +12,7 @@
|
|||||||
"settings": "Postavke",
|
"settings": "Postavke",
|
||||||
"logout": "Odjava",
|
"logout": "Odjava",
|
||||||
"users": "Korisnici",
|
"users": "Korisnici",
|
||||||
"modules": "Modules"
|
"modules": "Moduli"
|
||||||
},
|
},
|
||||||
"general": {
|
"general": {
|
||||||
"add_company": "Dodaj tvrtku",
|
"add_company": "Dodaj tvrtku",
|
||||||
@ -30,8 +30,8 @@
|
|||||||
"from": "Pošiljatelj",
|
"from": "Pošiljatelj",
|
||||||
"to": "Primatelj",
|
"to": "Primatelj",
|
||||||
"ok": "Ok",
|
"ok": "Ok",
|
||||||
"yes": "Yes",
|
"yes": "Da",
|
||||||
"no": "No",
|
"no": "Ne",
|
||||||
"sort_by": "Posloži Po",
|
"sort_by": "Posloži Po",
|
||||||
"ascending": "Rastuće",
|
"ascending": "Rastuće",
|
||||||
"descending": "Padajuće",
|
"descending": "Padajuće",
|
||||||
@ -39,7 +39,7 @@
|
|||||||
"body": "Tijelo",
|
"body": "Tijelo",
|
||||||
"message": "Poruka",
|
"message": "Poruka",
|
||||||
"send": "Pošalji",
|
"send": "Pošalji",
|
||||||
"preview": "Preview",
|
"preview": "Pregled",
|
||||||
"go_back": "Natrag",
|
"go_back": "Natrag",
|
||||||
"back_to_login": "Natrag na prijavu?",
|
"back_to_login": "Natrag na prijavu?",
|
||||||
"home": "Početna",
|
"home": "Početna",
|
||||||
@ -65,7 +65,7 @@
|
|||||||
"sent": "Poslano",
|
"sent": "Poslano",
|
||||||
"all": "Sve",
|
"all": "Sve",
|
||||||
"select_all": "Izaberi sve",
|
"select_all": "Izaberi sve",
|
||||||
"select_template": "Select Template",
|
"select_template": "Odaberite predložak",
|
||||||
"choose_file": "Klikni ovdje da izabereš fajl",
|
"choose_file": "Klikni ovdje da izabereš fajl",
|
||||||
"choose_template": "Izaberi predložak",
|
"choose_template": "Izaberi predložak",
|
||||||
"choose": "Izaberi",
|
"choose": "Izaberi",
|
||||||
@ -93,13 +93,13 @@
|
|||||||
"no_note_found": "Ne postoje spremljene napomene",
|
"no_note_found": "Ne postoje spremljene napomene",
|
||||||
"insert_note": "Unesi bilješku",
|
"insert_note": "Unesi bilješku",
|
||||||
"copied_pdf_url_clipboard": "Link do PDF fajla kopiran!",
|
"copied_pdf_url_clipboard": "Link do PDF fajla kopiran!",
|
||||||
"copied_url_clipboard": "Copied url to clipboard!",
|
"copied_url_clipboard": "URL je kopiran u međuspremnik!",
|
||||||
"docs": "Docs",
|
"docs": "Dokumenti",
|
||||||
"do_you_wish_to_continue": "Do you wish to continue?",
|
"do_you_wish_to_continue": "Želite li nastaviti?",
|
||||||
"note": "Note",
|
"note": "Bilješka",
|
||||||
"pay_invoice": "Pay Invoice",
|
"pay_invoice": "Plati račun",
|
||||||
"login_successfully": "Logged in successfully!",
|
"login_successfully": "Uspješno ste prijavljeni!\n",
|
||||||
"logged_out_successfully": "Logged out successfully",
|
"logged_out_successfully": "Uspješno odjavljen\n",
|
||||||
"mark_as_default": "Postavi kao zadano"
|
"mark_as_default": "Postavi kao zadano"
|
||||||
},
|
},
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
@ -109,7 +109,7 @@
|
|||||||
"customers": "Klijenti",
|
"customers": "Klijenti",
|
||||||
"invoices": "Računi",
|
"invoices": "Računi",
|
||||||
"estimates": "Ponude",
|
"estimates": "Ponude",
|
||||||
"payments": "Payments"
|
"payments": "Plaćanja"
|
||||||
},
|
},
|
||||||
"chart_info": {
|
"chart_info": {
|
||||||
"total_sales": "Prodaja",
|
"total_sales": "Prodaja",
|
||||||
@ -151,18 +151,18 @@
|
|||||||
"no_results_found": "Nema rezultata"
|
"no_results_found": "Nema rezultata"
|
||||||
},
|
},
|
||||||
"company_switcher": {
|
"company_switcher": {
|
||||||
"label": "SWITCH COMPANY",
|
"label": "IZABERI TVRTKU",
|
||||||
"no_results_found": "No Results Found",
|
"no_results_found": "Nema rezultata\n",
|
||||||
"add_new_company": "Add new company",
|
"add_new_company": "Dodajte novu tvrtku\n",
|
||||||
"new_company": "New company",
|
"new_company": "Nova tvrtka\n",
|
||||||
"created_message": "Company created successfully"
|
"created_message": "Tvrtka uspješno stvorena\n"
|
||||||
},
|
},
|
||||||
"dateRange": {
|
"dateRange": {
|
||||||
"today": "Today",
|
"today": "Danas\n",
|
||||||
"this_week": "This Week",
|
"this_week": "Danas\n",
|
||||||
"this_month": "This Month",
|
"this_month": "Danas\n",
|
||||||
"this_quarter": "This Quarter",
|
"this_quarter": "Danas\n",
|
||||||
"this_year": "This Year",
|
"this_year": "Danas\n",
|
||||||
"previous_week": "Previous Week",
|
"previous_week": "Previous Week",
|
||||||
"previous_month": "Previous Month",
|
"previous_month": "Previous Month",
|
||||||
"previous_quarter": "Previous Quarter",
|
"previous_quarter": "Previous Quarter",
|
||||||
@ -456,32 +456,32 @@
|
|||||||
"months": "{months} Month",
|
"months": "{months} Month",
|
||||||
"years": "{years} Year",
|
"years": "{years} Year",
|
||||||
"all": "All",
|
"all": "All",
|
||||||
"paid": "Paid",
|
"paid": "Plaćeno",
|
||||||
"unpaid": "Unpaid",
|
"unpaid": "Ne plaćeno",
|
||||||
"viewed": "Viewed",
|
"viewed": "Pregledano",
|
||||||
"overdue": "Overdue",
|
"overdue": "Kašnjenja",
|
||||||
"active": "Active",
|
"active": "Aktivno",
|
||||||
"completed": "Completed",
|
"completed": "Završeno",
|
||||||
"customer": "CUSTOMER",
|
"customer": "KUPAC",
|
||||||
"paid_status": "PAID STATUS",
|
"paid_status": "STATUS PLAĆANJA",
|
||||||
"ref_no": "REF NO.",
|
"ref_no": "BR. REFERENCE",
|
||||||
"number": "NUMBER",
|
"number": "BROJ",
|
||||||
"amount_due": "AMOUNT DUE",
|
"amount_due": "AMOUNT DUE",
|
||||||
"partially_paid": "Partially Paid",
|
"partially_paid": "Djelomično plaćeno\n",
|
||||||
"total": "Total",
|
"total": "Ukupno",
|
||||||
"discount": "Discount",
|
"discount": "Popust",
|
||||||
"sub_total": "Sub Total",
|
"sub_total": "Popdzbroj",
|
||||||
"invoice": "Recurring Invoice | Recurring Invoices",
|
"invoice": "Ponavljajuća faktura | Ponavjaljuća faktura",
|
||||||
"invoice_number": "Recurring Invoice Number",
|
"invoice_number": "Broj ponavljajuće fakture\n",
|
||||||
"next_invoice_date": "Next Invoice Date",
|
"next_invoice_date": "Datum sljedećeg računa",
|
||||||
"ref_number": "Ref Number",
|
"ref_number": "Broj reference",
|
||||||
"contact": "Contact",
|
"contact": "Kontakt",
|
||||||
"add_item": "Add an Item",
|
"add_item": "Dodaj stavku",
|
||||||
"date": "Date",
|
"date": "Datum",
|
||||||
"limit_by": "Limit by",
|
"limit_by": "Ograniči po",
|
||||||
"limit_date": "Limit Date",
|
"limit_date": "Vremenski rok",
|
||||||
"limit_count": "Limit Count",
|
"limit_count": "Broj ograničenja\n",
|
||||||
"count": "Count",
|
"count": "Brojač",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
"select_a_status": "Select a status",
|
"select_a_status": "Select a status",
|
||||||
"working": "Working",
|
"working": "Working",
|
||||||
@ -1485,7 +1485,7 @@
|
|||||||
"pdf_estimate_label": "Ponuda",
|
"pdf_estimate_label": "Ponuda",
|
||||||
"pdf_estimate_number": "Broj Ponude",
|
"pdf_estimate_number": "Broj Ponude",
|
||||||
"pdf_estimate_date": "Datum Ponude",
|
"pdf_estimate_date": "Datum Ponude",
|
||||||
"pdf_estimate_expire_date": "Datum isteka Ponude",
|
"pdf_estimate_expire_date": "Expiry Date",
|
||||||
"pdf_invoice_label": "Faktura",
|
"pdf_invoice_label": "Faktura",
|
||||||
"pdf_invoice_number": "Broj Fakture",
|
"pdf_invoice_number": "Broj Fakture",
|
||||||
"pdf_invoice_date": "Datum Fakture",
|
"pdf_invoice_date": "Datum Fakture",
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -1485,7 +1485,7 @@
|
|||||||
"pdf_estimate_label": "Estimate",
|
"pdf_estimate_label": "Estimate",
|
||||||
"pdf_estimate_number": "Estimate Number",
|
"pdf_estimate_number": "Estimate Number",
|
||||||
"pdf_estimate_date": "Estimate Date",
|
"pdf_estimate_date": "Estimate Date",
|
||||||
"pdf_estimate_expire_date": "Expiry date",
|
"pdf_estimate_expire_date": "Expiry Date",
|
||||||
"pdf_invoice_label": "Invoice",
|
"pdf_invoice_label": "Invoice",
|
||||||
"pdf_invoice_number": "Invoice Number",
|
"pdf_invoice_number": "Invoice Number",
|
||||||
"pdf_invoice_date": "Invoice Date",
|
"pdf_invoice_date": "Invoice Date",
|
||||||
|
|||||||
@ -17,7 +17,6 @@ import sk from './sk.json'
|
|||||||
import vi from './vi.json'
|
import vi from './vi.json'
|
||||||
import el from './el.json'
|
import el from './el.json'
|
||||||
import hr from './hr.json'
|
import hr from './hr.json'
|
||||||
import th from './th.json'
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
cs,
|
cs,
|
||||||
@ -38,6 +37,5 @@ export default {
|
|||||||
vi,
|
vi,
|
||||||
pl,
|
pl,
|
||||||
el,
|
el,
|
||||||
hr,
|
hr
|
||||||
th
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1485,7 +1485,7 @@
|
|||||||
"pdf_estimate_label": "Pasiūlymas",
|
"pdf_estimate_label": "Pasiūlymas",
|
||||||
"pdf_estimate_number": "Pasiūlymo numeris",
|
"pdf_estimate_number": "Pasiūlymo numeris",
|
||||||
"pdf_estimate_date": "Pasiūlymo data",
|
"pdf_estimate_date": "Pasiūlymo data",
|
||||||
"pdf_estimate_expire_date": "Galiojimo laikas",
|
"pdf_estimate_expire_date": "Expiry Date",
|
||||||
"pdf_invoice_label": "Sąskaita",
|
"pdf_invoice_label": "Sąskaita",
|
||||||
"pdf_invoice_number": "Invoice Number",
|
"pdf_invoice_number": "Invoice Number",
|
||||||
"pdf_invoice_date": "Invoice Date",
|
"pdf_invoice_date": "Invoice Date",
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -4,7 +4,7 @@
|
|||||||
"customers": "Klanten",
|
"customers": "Klanten",
|
||||||
"items": "Artikelen",
|
"items": "Artikelen",
|
||||||
"invoices": "Facturen",
|
"invoices": "Facturen",
|
||||||
"recurring-invoices": "Periodieke factuur",
|
"recurring-invoices": "Periodieke facturen",
|
||||||
"expenses": "Uitgaven",
|
"expenses": "Uitgaven",
|
||||||
"estimates": "Offertes",
|
"estimates": "Offertes",
|
||||||
"payments": "Betalingen",
|
"payments": "Betalingen",
|
||||||
@ -28,16 +28,16 @@
|
|||||||
"from_date": "Vanaf datum",
|
"from_date": "Vanaf datum",
|
||||||
"to_date": "T/m datum",
|
"to_date": "T/m datum",
|
||||||
"from": "Vanaf",
|
"from": "Vanaf",
|
||||||
"to": "Naar.",
|
"to": "Naar",
|
||||||
"ok": "Oké.",
|
"ok": "Oké",
|
||||||
"yes": "Ja.",
|
"yes": "Ja",
|
||||||
"no": "Nee.",
|
"no": "Nee",
|
||||||
"sort_by": "Sorteer op",
|
"sort_by": "Sorteer op",
|
||||||
"ascending": "Oplopend",
|
"ascending": "Oplopend",
|
||||||
"descending": "Aflopend",
|
"descending": "Aflopend",
|
||||||
"subject": "Onderwerp",
|
"subject": "Onderwerp",
|
||||||
"body": "Inhoud",
|
"body": "Inhoud",
|
||||||
"message": "Bericht.",
|
"message": "Bericht",
|
||||||
"send": "Verstuur",
|
"send": "Verstuur",
|
||||||
"preview": "Voorbeeld",
|
"preview": "Voorbeeld",
|
||||||
"go_back": "Ga terug",
|
"go_back": "Ga terug",
|
||||||
@ -54,7 +54,7 @@
|
|||||||
"actions": "Acties",
|
"actions": "Acties",
|
||||||
"subtotal": "SUBTOTAAL",
|
"subtotal": "SUBTOTAAL",
|
||||||
"discount": "KORTING",
|
"discount": "KORTING",
|
||||||
"fixed": "Gemaakt",
|
"fixed": "Vast bedrag",
|
||||||
"percentage": "Percentage",
|
"percentage": "Percentage",
|
||||||
"tax": "BELASTING",
|
"tax": "BELASTING",
|
||||||
"total_amount": "TOTAALBEDRAG",
|
"total_amount": "TOTAALBEDRAG",
|
||||||
@ -85,17 +85,17 @@
|
|||||||
"select_state": "Selecteer staat",
|
"select_state": "Selecteer staat",
|
||||||
"select_country": "Selecteer land",
|
"select_country": "Selecteer land",
|
||||||
"select_city": "Selecteer stad",
|
"select_city": "Selecteer stad",
|
||||||
"street_1": "straat 1",
|
"street_1": "Straat 1",
|
||||||
"street_2": "Straat # 2",
|
"street_2": "Straat 2",
|
||||||
"action_failed": "Actie: mislukt",
|
"action_failed": "Actie mislukt",
|
||||||
"retry": "Retr",
|
"retry": "Opnieuw proberen",
|
||||||
"choose_note": "Kies notitie",
|
"choose_note": "Kies notitie",
|
||||||
"no_note_found": "Geen notitie gevonden",
|
"no_note_found": "Geen notitie gevonden",
|
||||||
"insert_note": "Notitie invoegen",
|
"insert_note": "Notitie invoegen",
|
||||||
"copied_pdf_url_clipboard": "PDF link naar klembord gekopieerd!",
|
"copied_pdf_url_clipboard": "PDF link naar klembord gekopieerd!",
|
||||||
"copied_url_clipboard": "URL naar klembord gekopieerd!",
|
"copied_url_clipboard": "URL naar klembord gekopieerd!",
|
||||||
"docs": "Documenten",
|
"docs": "Documentatie",
|
||||||
"do_you_wish_to_continue": "Wilt u Doorgaan?",
|
"do_you_wish_to_continue": "Wil je doorgaan?",
|
||||||
"note": "Notitie",
|
"note": "Notitie",
|
||||||
"pay_invoice": "Betaal factuur",
|
"pay_invoice": "Betaal factuur",
|
||||||
"login_successfully": "Succesvol ingelogd!",
|
"login_successfully": "Succesvol ingelogd!",
|
||||||
@ -526,7 +526,7 @@
|
|||||||
"cloned_successfully": "Terugkerende factuur succesvol gekopieerd",
|
"cloned_successfully": "Terugkerende factuur succesvol gekopieerd",
|
||||||
"clone_invoice": "Kopieer periodieke factuur",
|
"clone_invoice": "Kopieer periodieke factuur",
|
||||||
"confirm_clone": "Deze periodieke factuur wordt gekopieerd naar een nieuwe periodieke factuur",
|
"confirm_clone": "Deze periodieke factuur wordt gekopieerd naar een nieuwe periodieke factuur",
|
||||||
"add_customer_email": "Voeg een e-mailadres aan deze klant toe, zodat facturen automatisch verzonden kunnen worden.",
|
"add_customer_email": "Voeg een e-mailadres aan deze klant toe zodat facturen automatisch verzonden kunnen worden.",
|
||||||
"item": {
|
"item": {
|
||||||
"title": "Item titel",
|
"title": "Item titel",
|
||||||
"description": "Beschrijving",
|
"description": "Beschrijving",
|
||||||
@ -1114,13 +1114,13 @@
|
|||||||
"exchange_help_text": "Voer de wisselkoers in om te converteren van {currency} naar {baseCurrency}",
|
"exchange_help_text": "Voer de wisselkoers in om te converteren van {currency} naar {baseCurrency}",
|
||||||
"currency_freak": "Valuta Freak",
|
"currency_freak": "Valuta Freak",
|
||||||
"currency_layer": "Valuta-laag",
|
"currency_layer": "Valuta-laag",
|
||||||
"open_exchange_rate": "Open Exchange Rate",
|
"open_exchange_rate": "Open wisselkoers",
|
||||||
"currency_converter": "Valuta omzetter",
|
"currency_converter": "Valuta omzetter",
|
||||||
"server": "Server",
|
"server": "Server",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"active": "Actief",
|
"active": "Actief",
|
||||||
"currency_help_text": "This provider will only be used on above selected currencies",
|
"currency_help_text": "Deze aanbieder wordt alleen gebruikt voor de hier boven geselecteerde valuta",
|
||||||
"currency_in_used": "The following currencies are already active on another provider. Please remove these currencies from selection to activate this provider again."
|
"currency_in_used": "De volgende valuta zijn al actief bij een andere aanbieder. Verwijder deze valuta uit de selectie om deze aanbieder opnieuw te activeren."
|
||||||
},
|
},
|
||||||
"tax_types": {
|
"tax_types": {
|
||||||
"title": "Belastingtypen",
|
"title": "Belastingtypen",
|
||||||
@ -1143,16 +1143,16 @@
|
|||||||
},
|
},
|
||||||
"payment_modes": {
|
"payment_modes": {
|
||||||
"title": "Betaalmethodes",
|
"title": "Betaalmethodes",
|
||||||
"description": "Modes of transaction for payments",
|
"description": "Modi van transacties voor betalingen",
|
||||||
"add_payment_mode": "Add Payment Mode",
|
"add_payment_mode": "Voeg betaalwijze toe",
|
||||||
"edit_payment_mode": "Edit Payment Mode",
|
"edit_payment_mode": "Wijzig betaalwijze",
|
||||||
"mode_name": "Mode Name",
|
"mode_name": "Modusnaam",
|
||||||
"payment_mode_added": "Betaalwijze toegevoegd",
|
"payment_mode_added": "Betaalwijze toegevoegd",
|
||||||
"payment_mode_updated": "Payment Mode Updated",
|
"payment_mode_updated": "Betaalwijze bijgewerkt",
|
||||||
"payment_mode_confirm_delete": "You will not be able to recover this Payment Mode",
|
"payment_mode_confirm_delete": "U kunt deze betalingsmodus niet herstellen",
|
||||||
"payments_attached": "This payment method is already attached to payments. Please delete the attached payments to proceed with deletion.",
|
"payments_attached": "Deze betalingsmethode is al gekoppeld aan betalingen. Verwijder de gekoppelde betalingen om verder te gaan met het verwijderen.",
|
||||||
"expenses_attached": "This payment method is already attached to expenses. Please delete the attached expenses to proceed with deletion.",
|
"expenses_attached": "Deze betaalmethode is al gekoppeld aan uitgaven. Verwijder de gekoppelde kosten om door te gaan met het verwijderen.",
|
||||||
"deleted_message": "Payment Mode deleted successfully"
|
"deleted_message": "Betaalwijze succesvol verwijderd"
|
||||||
},
|
},
|
||||||
"expense_category": {
|
"expense_category": {
|
||||||
"title": "Onkostencategorieën",
|
"title": "Onkostencategorieën",
|
||||||
@ -1178,8 +1178,8 @@
|
|||||||
"discount_setting": "Kortingsinstelling",
|
"discount_setting": "Kortingsinstelling",
|
||||||
"discount_per_item": "Korting per item",
|
"discount_per_item": "Korting per item",
|
||||||
"discount_setting_description": "Schakel dit in als u korting wilt toevoegen aan afzonderlijke factuuritems. Standaard wordt korting rechtstreeks aan de factuur toegevoegd.",
|
"discount_setting_description": "Schakel dit in als u korting wilt toevoegen aan afzonderlijke factuuritems. Standaard wordt korting rechtstreeks aan de factuur toegevoegd.",
|
||||||
"expire_public_links": "Automatically Expire Public Links",
|
"expire_public_links": "Publieke links automatisch laten vervallen",
|
||||||
"expire_setting_description": "Specify whether you would like to expire all the links sent by application to view invoices, estimates & payments, etc after a specified duration.",
|
"expire_setting_description": "Geef aan of je alle links die eerder zijn verstuurd door de applicatie om facturen, offertes en betalingen te bekijken wilt laten verlopen na een bepaalde duur.",
|
||||||
"save": "Opslaan",
|
"save": "Opslaan",
|
||||||
"preference": "Voorkeur | Voorkeuren",
|
"preference": "Voorkeur | Voorkeuren",
|
||||||
"general_settings": "Standaardvoorkeuren voor het systeem.",
|
"general_settings": "Standaardvoorkeuren voor het systeem.",
|
||||||
@ -1188,9 +1188,9 @@
|
|||||||
"select_time_zone": "Selecteer Tijdzone",
|
"select_time_zone": "Selecteer Tijdzone",
|
||||||
"select_date_format": "Selecteer datum/tijdindeling",
|
"select_date_format": "Selecteer datum/tijdindeling",
|
||||||
"select_financial_year": "Selecteer financieel ja",
|
"select_financial_year": "Selecteer financieel ja",
|
||||||
"recurring_invoice_status": "Recurring Invoice Status",
|
"recurring_invoice_status": "Status periodieke facturen",
|
||||||
"create_status": "Create Status",
|
"create_status": "Status aanmaken",
|
||||||
"active": "Active",
|
"active": "Actief",
|
||||||
"on_hold": "In wacht",
|
"on_hold": "In wacht",
|
||||||
"update_status": "Updatestatus",
|
"update_status": "Updatestatus",
|
||||||
"completed": "Voltooid",
|
"completed": "Voltooid",
|
||||||
@ -1217,10 +1217,10 @@
|
|||||||
"finishing_update": "Afwerking Update",
|
"finishing_update": "Afwerking Update",
|
||||||
"update_failed": "Update mislukt",
|
"update_failed": "Update mislukt",
|
||||||
"update_failed_text": "Sorry! Je update is mislukt op: {step} step ",
|
"update_failed_text": "Sorry! Je update is mislukt op: {step} step ",
|
||||||
"update_warning": "All of the application files and default template files will be overwritten when you update the application using this utility. Please take a backup of your templates & database before updating."
|
"update_warning": "Alle applicatiebestanden en de standaard sjabloonbestanden worden overschreven wanneer u de applicatie met behulp van dit hulpprogramma bijwerkt. Maak een reservekopie van uw sjablonen en database voordat u deze bijwerkt."
|
||||||
},
|
},
|
||||||
"backup": {
|
"backup": {
|
||||||
"title": "Backup | Backups",
|
"title": "Back-up | Back-ups",
|
||||||
"description": "De back-up is een zipfile met alle bestanden in de mappen die je opgeeft samen met een dump van je database",
|
"description": "De back-up is een zipfile met alle bestanden in de mappen die je opgeeft samen met een dump van je database",
|
||||||
"new_backup": "Nieuwe back-up",
|
"new_backup": "Nieuwe back-up",
|
||||||
"create_backup": "Backup maken",
|
"create_backup": "Backup maken",
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
"navigation": {
|
"navigation": {
|
||||||
"dashboard": "Pulpit",
|
"dashboard": "Pulpit",
|
||||||
"customers": "Kontrahenci",
|
"customers": "Kontrahenci",
|
||||||
"items": "Pozycje",
|
"items": "Produkty",
|
||||||
"invoices": "Faktury",
|
"invoices": "Faktury",
|
||||||
"recurring-invoices": "Faktury cykliczne",
|
"recurring-invoices": "Faktury cykliczne",
|
||||||
"expenses": "Wydatki",
|
"expenses": "Wydatki",
|
||||||
@ -100,7 +100,7 @@
|
|||||||
"pay_invoice": "Zapłać Fakturę",
|
"pay_invoice": "Zapłać Fakturę",
|
||||||
"login_successfully": "Zalogowano pomyślnie!",
|
"login_successfully": "Zalogowano pomyślnie!",
|
||||||
"logged_out_successfully": "Wylogowano pomyślnie",
|
"logged_out_successfully": "Wylogowano pomyślnie",
|
||||||
"mark_as_default": "Mark as default"
|
"mark_as_default": "Oznacz jako domyślne"
|
||||||
},
|
},
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
"select_year": "Wybierz rok",
|
"select_year": "Wybierz rok",
|
||||||
@ -355,7 +355,7 @@
|
|||||||
"select_an_item": "Wpisz lub kliknij aby wybrać element",
|
"select_an_item": "Wpisz lub kliknij aby wybrać element",
|
||||||
"type_item_description": "Opis pozycji (opcjonalnie)"
|
"type_item_description": "Opis pozycji (opcjonalnie)"
|
||||||
},
|
},
|
||||||
"mark_as_default_estimate_template_description": "If enabled, the selected template will be automatically selected for new estimates."
|
"mark_as_default_estimate_template_description": "Jeśli włączone, wybrany szablon zostanie automatycznie wybrany dla nowych ofert."
|
||||||
},
|
},
|
||||||
"invoices": {
|
"invoices": {
|
||||||
"title": "Faktury",
|
"title": "Faktury",
|
||||||
@ -447,7 +447,7 @@
|
|||||||
"marked_as_sent_message": "Faktura oznaczona jako wysłana pomyślnie",
|
"marked_as_sent_message": "Faktura oznaczona jako wysłana pomyślnie",
|
||||||
"something_went_wrong": "coś poszło nie tak",
|
"something_went_wrong": "coś poszło nie tak",
|
||||||
"invalid_due_amount_message": "Całkowita kwota faktury nie może być mniejsza niż całkowita kwota zapłacona za tę fakturę. Proszę zaktualizować fakturę lub usunąć powiązane płatności, aby kontynuować.",
|
"invalid_due_amount_message": "Całkowita kwota faktury nie może być mniejsza niż całkowita kwota zapłacona za tę fakturę. Proszę zaktualizować fakturę lub usunąć powiązane płatności, aby kontynuować.",
|
||||||
"mark_as_default_invoice_template_description": "If enabled, the selected template will be automatically selected for new invoices."
|
"mark_as_default_invoice_template_description": "Jeśli włączone, wybrany szablon zostanie automatycznie wybrany dla nowych faktur."
|
||||||
},
|
},
|
||||||
"recurring_invoices": {
|
"recurring_invoices": {
|
||||||
"title": "Faktury cykliczne",
|
"title": "Faktury cykliczne",
|
||||||
@ -526,7 +526,7 @@
|
|||||||
"cloned_successfully": "Faktura Cykliczna sklonowana pomyślnie",
|
"cloned_successfully": "Faktura Cykliczna sklonowana pomyślnie",
|
||||||
"clone_invoice": "Klonuj Fakturę Cykliczną",
|
"clone_invoice": "Klonuj Fakturę Cykliczną",
|
||||||
"confirm_clone": "Ta faktura cykliczna zostanie sklonowana do nowej faktury cyklicznej",
|
"confirm_clone": "Ta faktura cykliczna zostanie sklonowana do nowej faktury cyklicznej",
|
||||||
"add_customer_email": "Please add an email address for this customer to send invoices automatically.",
|
"add_customer_email": "Dodaj adres e-mail dla tego klienta, aby wysyłać faktury automatycznie.",
|
||||||
"item": {
|
"item": {
|
||||||
"title": "Tytuł pozycji",
|
"title": "Tytuł pozycji",
|
||||||
"description": "Opis",
|
"description": "Opis",
|
||||||
@ -1485,7 +1485,7 @@
|
|||||||
"pdf_estimate_label": "Oferta",
|
"pdf_estimate_label": "Oferta",
|
||||||
"pdf_estimate_number": "Numer oferty",
|
"pdf_estimate_number": "Numer oferty",
|
||||||
"pdf_estimate_date": "Data oferty",
|
"pdf_estimate_date": "Data oferty",
|
||||||
"pdf_estimate_expire_date": "Termin ważności",
|
"pdf_estimate_expire_date": "Data ważności",
|
||||||
"pdf_invoice_label": "Faktura",
|
"pdf_invoice_label": "Faktura",
|
||||||
"pdf_invoice_number": "Numer faktury",
|
"pdf_invoice_number": "Numer faktury",
|
||||||
"pdf_invoice_date": "Data faktury",
|
"pdf_invoice_date": "Data faktury",
|
||||||
|
|||||||
@ -12,7 +12,7 @@
|
|||||||
"settings": "Configurações",
|
"settings": "Configurações",
|
||||||
"logout": "Encerrar sessão",
|
"logout": "Encerrar sessão",
|
||||||
"users": "Usuários",
|
"users": "Usuários",
|
||||||
"modules": "Navegação → módulos"
|
"modules": "Módulos"
|
||||||
},
|
},
|
||||||
"general": {
|
"general": {
|
||||||
"add_company": "Adicionar Empresa",
|
"add_company": "Adicionar Empresa",
|
||||||
@ -29,13 +29,13 @@
|
|||||||
"to_date": "Até a Data",
|
"to_date": "Até a Data",
|
||||||
"from": "De",
|
"from": "De",
|
||||||
"to": "Para",
|
"to": "Para",
|
||||||
"ok": "Geral → Ok",
|
"ok": "Ok",
|
||||||
"yes": "Sim",
|
"yes": "Sim",
|
||||||
"no": "Não",
|
"no": "Não",
|
||||||
"sort_by": "Ordenar por",
|
"sort_by": "Ordenar por",
|
||||||
"ascending": "Crescente",
|
"ascending": "Crescente",
|
||||||
"descending": "Descendente",
|
"descending": "Descendente",
|
||||||
"subject": "Sujeita",
|
"subject": "Assunto",
|
||||||
"body": "Corpo",
|
"body": "Corpo",
|
||||||
"message": "Mensagem",
|
"message": "Mensagem",
|
||||||
"send": "Enviar",
|
"send": "Enviar",
|
||||||
@ -210,8 +210,8 @@
|
|||||||
"basic_info": "Informação Básica",
|
"basic_info": "Informação Básica",
|
||||||
"portal_access": "Clientes → Acessar portal",
|
"portal_access": "Clientes → Acessar portal",
|
||||||
"portal_access_text": "Clientes→ Texto do portal de acesso?",
|
"portal_access_text": "Clientes→ Texto do portal de acesso?",
|
||||||
"portal_access_url": "Customer Portal Login URL",
|
"portal_access_url": "URL de login do Portal do Cliente",
|
||||||
"portal_access_url_help": "Please copy & forward the above given URL to your customer for providing access.",
|
"portal_access_url_help": "Por favor, copie a URL fornecida acima e envie a seu cliente para fornecer acesso.",
|
||||||
"billing_address": "Endereço de cobrança",
|
"billing_address": "Endereço de cobrança",
|
||||||
"shipping_address": "Endereço de entrega",
|
"shipping_address": "Endereço de entrega",
|
||||||
"copy_billing_address": "Copiar Endereço de Faturamento",
|
"copy_billing_address": "Copiar Endereço de Faturamento",
|
||||||
@ -231,7 +231,7 @@
|
|||||||
"confirm_delete": "Você não poderá recuperar este cliente e todas as faturas, orçamentos e pagamentos relacionados. | Você não poderá recuperar esses clientes e todas as faturas, estimativas e pagamentos relacionados.",
|
"confirm_delete": "Você não poderá recuperar este cliente e todas as faturas, orçamentos e pagamentos relacionados. | Você não poderá recuperar esses clientes e todas as faturas, estimativas e pagamentos relacionados.",
|
||||||
"created_message": "Cliente criado com sucesso",
|
"created_message": "Cliente criado com sucesso",
|
||||||
"updated_message": "Cliente atualizado com sucesso",
|
"updated_message": "Cliente atualizado com sucesso",
|
||||||
"address_updated_message": "Address Information Updated succesfully",
|
"address_updated_message": "Informações de endereço atualizadas com sucesso",
|
||||||
"deleted_message": "Cliente excluído com sucesso | Clientes excluídos com sucesso",
|
"deleted_message": "Cliente excluído com sucesso | Clientes excluídos com sucesso",
|
||||||
"edit_currency_not_allowed": "Não é possível alterar a moeda depois de criar transações."
|
"edit_currency_not_allowed": "Não é possível alterar a moeda depois de criar transações."
|
||||||
},
|
},
|
||||||
@ -265,8 +265,8 @@
|
|||||||
},
|
},
|
||||||
"estimates": {
|
"estimates": {
|
||||||
"title": "Orçamentos",
|
"title": "Orçamentos",
|
||||||
"accept_estimate": "Accept Estimate",
|
"accept_estimate": "Aceitar Orçamento",
|
||||||
"reject_estimate": "Reject Estimate",
|
"reject_estimate": "Rejeitar Orçamento",
|
||||||
"estimate": "Orçamento | Orçamentos",
|
"estimate": "Orçamento | Orçamentos",
|
||||||
"estimates_list": "Lista de orçamentos",
|
"estimates_list": "Lista de orçamentos",
|
||||||
"days": "{days} Dias",
|
"days": "{days} Dias",
|
||||||
@ -318,10 +318,10 @@
|
|||||||
},
|
},
|
||||||
"accepted": "Aceito",
|
"accepted": "Aceito",
|
||||||
"rejected": "Rejeitado",
|
"rejected": "Rejeitado",
|
||||||
"expired": "Expired",
|
"expired": "Expirado",
|
||||||
"sent": "Enviado",
|
"sent": "Enviado",
|
||||||
"draft": "Rascunho",
|
"draft": "Rascunho",
|
||||||
"viewed": "Viewed",
|
"viewed": "Visualizado",
|
||||||
"declined": "Rejeitado",
|
"declined": "Rejeitado",
|
||||||
"new_estimate": "Novo orçamento",
|
"new_estimate": "Novo orçamento",
|
||||||
"add_new_estimate": "Adicionar novo orçamento",
|
"add_new_estimate": "Adicionar novo orçamento",
|
||||||
@ -355,14 +355,14 @@
|
|||||||
"select_an_item": "Escreva ou clique para selecionar um item",
|
"select_an_item": "Escreva ou clique para selecionar um item",
|
||||||
"type_item_description": "Descrição do Item (opcional)"
|
"type_item_description": "Descrição do Item (opcional)"
|
||||||
},
|
},
|
||||||
"mark_as_default_estimate_template_description": "If enabled, the selected template will be automatically selected for new estimates."
|
"mark_as_default_estimate_template_description": "Se habilitado, o modelo selecionado será automaticamente selecionado para novas estimativas."
|
||||||
},
|
},
|
||||||
"invoices": {
|
"invoices": {
|
||||||
"title": "Faturas",
|
"title": "Faturas",
|
||||||
"download": "Download",
|
"download": "Baixar",
|
||||||
"pay_invoice": "Pay Invoice",
|
"pay_invoice": "Pagar Fatura",
|
||||||
"invoices_list": "Lista de faturas",
|
"invoices_list": "Lista de faturas",
|
||||||
"invoice_information": "Invoice Information",
|
"invoice_information": "Informações da Fatura",
|
||||||
"days": "{days} dias",
|
"days": "{days} dias",
|
||||||
"months": "{months} Mês",
|
"months": "{months} Mês",
|
||||||
"years": "{years} Ano",
|
"years": "{years} Ano",
|
||||||
@ -374,7 +374,7 @@
|
|||||||
"completed": "Concluído",
|
"completed": "Concluído",
|
||||||
"customer": "CLIENTE",
|
"customer": "CLIENTE",
|
||||||
"paid_status": "STATUS PAGAMENTO",
|
"paid_status": "STATUS PAGAMENTO",
|
||||||
"ref_no": "REF NO.",
|
"ref_no": "N° de Referência",
|
||||||
"number": "NÚMERO",
|
"number": "NÚMERO",
|
||||||
"amount_due": "VALOR DEVIDO",
|
"amount_due": "VALOR DEVIDO",
|
||||||
"partially_paid": "Parcialmente Pago",
|
"partially_paid": "Parcialmente Pago",
|
||||||
@ -447,7 +447,7 @@
|
|||||||
"marked_as_sent_message": "Fatura marcada como enviada com sucesso",
|
"marked_as_sent_message": "Fatura marcada como enviada com sucesso",
|
||||||
"something_went_wrong": "algo deu errado",
|
"something_went_wrong": "algo deu errado",
|
||||||
"invalid_due_amount_message": "O valor total da fatura não pode ser menor que o valor total pago para esta fatura. Atualize a fatura ou exclua os pagamentos associados para continuar.",
|
"invalid_due_amount_message": "O valor total da fatura não pode ser menor que o valor total pago para esta fatura. Atualize a fatura ou exclua os pagamentos associados para continuar.",
|
||||||
"mark_as_default_invoice_template_description": "If enabled, the selected template will be automatically selected for new invoices."
|
"mark_as_default_invoice_template_description": "Se habilitado, o modelo selecionado será automaticamente selecionado para novas estimativas."
|
||||||
},
|
},
|
||||||
"recurring_invoices": {
|
"recurring_invoices": {
|
||||||
"title": "Faturas Recorrentes",
|
"title": "Faturas Recorrentes",
|
||||||
@ -464,56 +464,56 @@
|
|||||||
"completed": "Concluído",
|
"completed": "Concluído",
|
||||||
"customer": "CLIENTE",
|
"customer": "CLIENTE",
|
||||||
"paid_status": "STATUS PAGAMENTO",
|
"paid_status": "STATUS PAGAMENTO",
|
||||||
"ref_no": "REF NO.",
|
"ref_no": "N° de Referência",
|
||||||
"number": "NUMBER",
|
"number": "NÚMERO",
|
||||||
"amount_due": "AMOUNT DUE",
|
"amount_due": "VALOR DEVIDO",
|
||||||
"partially_paid": "Partially Paid",
|
"partially_paid": "Parcialmente Pago",
|
||||||
"total": "Total",
|
"total": "Total",
|
||||||
"discount": "Discount",
|
"discount": "Desconto",
|
||||||
"sub_total": "Sub Total",
|
"sub_total": "Subtotal",
|
||||||
"invoice": "Recurring Invoice | Recurring Invoices",
|
"invoice": "Fatura Recorrente | Faturas Recorrentes",
|
||||||
"invoice_number": "Recurring Invoice Number",
|
"invoice_number": "Número da Fatura Recorrente",
|
||||||
"next_invoice_date": "Next Invoice Date",
|
"next_invoice_date": "Data da Próxima Fatura",
|
||||||
"ref_number": "Ref Number",
|
"ref_number": "Número de Referência",
|
||||||
"contact": "Contact",
|
"contact": "Contato",
|
||||||
"add_item": "Add an Item",
|
"add_item": "Adicionar um Item",
|
||||||
"date": "Date",
|
"date": "Data",
|
||||||
"limit_by": "Limit by",
|
"limit_by": "Limitar por",
|
||||||
"limit_date": "Limit Date",
|
"limit_date": "Data Limite",
|
||||||
"limit_count": "Limit Count",
|
"limit_count": "Quantidade Máxima",
|
||||||
"count": "Count",
|
"count": "Quantidade",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
"select_a_status": "Select a status",
|
"select_a_status": "Selecione o Status",
|
||||||
"working": "Working",
|
"working": "Processando",
|
||||||
"on_hold": "On Hold",
|
"on_hold": "Pausado",
|
||||||
"complete": "Completed",
|
"complete": "Concluído",
|
||||||
"add_tax": "Add Tax",
|
"add_tax": "Adicionar Imposto",
|
||||||
"amount": "Amount",
|
"amount": "Valor",
|
||||||
"action": "Action",
|
"action": "Ação",
|
||||||
"notes": "Notes",
|
"notes": "Observações",
|
||||||
"view": "View",
|
"view": "Ver",
|
||||||
"basic_info": "Basic Info",
|
"basic_info": "Informações Básicas",
|
||||||
"send_invoice": "Send Recurring Invoice",
|
"send_invoice": "Enviar Fatura Recorrente",
|
||||||
"auto_send": "Auto Send",
|
"auto_send": "Envio Automático",
|
||||||
"resend_invoice": "Resend Recurring Invoice",
|
"resend_invoice": "Reenviar Fatura Recorrente",
|
||||||
"invoice_template": "Recurring Invoice Template",
|
"invoice_template": "Modelo de Fatura Recorrente",
|
||||||
"conversion_message": "Recurring Invoice cloned successful",
|
"conversion_message": "Fatura Recorrente clonada com sucesso",
|
||||||
"template": "Template",
|
"template": "Modelo",
|
||||||
"mark_as_sent": "Mark as sent",
|
"mark_as_sent": "Marcar como enviado",
|
||||||
"confirm_send_invoice": "This recurring invoice will be sent via email to the customer",
|
"confirm_send_invoice": "Esta fatura recorrente será enviada por e-mail para o cliente",
|
||||||
"invoice_mark_as_sent": "This recurring invoice will be marked as sent",
|
"invoice_mark_as_sent": "Esta fatura recorrente será marcada como enviada",
|
||||||
"confirm_send": "This recurring invoice will be sent via email to the customer",
|
"confirm_send": "Esta fatura recorrente será enviada por e-mail para o cliente",
|
||||||
"starts_at": "Start Date",
|
"starts_at": "Data de início",
|
||||||
"due_date": "Invoice Due Date",
|
"due_date": "Vencimento da Fatura",
|
||||||
"record_payment": "Record Payment",
|
"record_payment": "Registrar Pagamento",
|
||||||
"add_new_invoice": "Add New Recurring Invoice",
|
"add_new_invoice": "Adicionar nova fatura recorrente",
|
||||||
"update_expense": "Update Expense",
|
"update_expense": "Atualizar Despesa",
|
||||||
"edit_invoice": "Edit Recurring Invoice",
|
"edit_invoice": "Editar fatura recorrente",
|
||||||
"new_invoice": "New Recurring Invoice",
|
"new_invoice": "Nova fatura recorrente",
|
||||||
"send_automatically": "Send Automatically",
|
"send_automatically": "Enviar automaticamente",
|
||||||
"send_automatically_desc": "Enable this, if you would like to send the invoice automatically to the customer when its created.",
|
"send_automatically_desc": "Habilite isso, se você gostaria de enviar a fatura automaticamente para o cliente.",
|
||||||
"save_invoice": "Save Recurring Invoice",
|
"save_invoice": "Salvar fatura recorrente",
|
||||||
"update_invoice": "Update Recurring Invoice",
|
"update_invoice": "Atualizar fatura recorrente",
|
||||||
"add_new_tax": "Adicionar Novo Imposto",
|
"add_new_tax": "Adicionar Novo Imposto",
|
||||||
"no_invoices": "Não há faturas recorrentes ainda!",
|
"no_invoices": "Não há faturas recorrentes ainda!",
|
||||||
"mark_as_rejected": "Marcar como rejeitada",
|
"mark_as_rejected": "Marcar como rejeitada",
|
||||||
@ -522,42 +522,42 @@
|
|||||||
"select_invoice": "Selecionar Fatura",
|
"select_invoice": "Selecionar Fatura",
|
||||||
"no_matching_invoices": "Não há faturas recorrentes correspondentes!",
|
"no_matching_invoices": "Não há faturas recorrentes correspondentes!",
|
||||||
"mark_as_sent_successfully": "Fatura recorrente marcada como enviada com sucesso",
|
"mark_as_sent_successfully": "Fatura recorrente marcada como enviada com sucesso",
|
||||||
"invoice_sent_successfully": "Recurring Invoice sent successfully",
|
"invoice_sent_successfully": "Fatura recorrente enviada com sucesso",
|
||||||
"cloned_successfully": "Recurring Invoice cloned successfully",
|
"cloned_successfully": "Fatura recorrente copiada com sucesso",
|
||||||
"clone_invoice": "Clone Recurring Invoice",
|
"clone_invoice": "Copiar Fatura Recorrente",
|
||||||
"confirm_clone": "This recurring invoice will be cloned into a new Recurring Invoice",
|
"confirm_clone": "Esta fatura recorrente será copiada em uma nova fatura recorrente",
|
||||||
"add_customer_email": "Please add an email address for this customer to send invoices automatically.",
|
"add_customer_email": "Por favor, adicione um endereço de e-mail para este cliente para enviar faturas automaticamente.",
|
||||||
"item": {
|
"item": {
|
||||||
"title": "Item Title",
|
"title": "Titulo do item",
|
||||||
"description": "Description",
|
"description": "Descrição",
|
||||||
"quantity": "Quantity",
|
"quantity": "Quantidade",
|
||||||
"price": "Price",
|
"price": "Preço",
|
||||||
"discount": "Discount",
|
"discount": "Desconto",
|
||||||
"total": "Total",
|
"total": "Total",
|
||||||
"total_discount": "Total Discount",
|
"total_discount": "Desconto total",
|
||||||
"sub_total": "Sub Total",
|
"sub_total": "Subtotal",
|
||||||
"tax": "Tax",
|
"tax": "Imposto",
|
||||||
"amount": "Amount",
|
"amount": "Valor",
|
||||||
"select_an_item": "Type or click to select an item",
|
"select_an_item": "Digite ou clique para selecionar",
|
||||||
"type_item_description": "Type Item Description (optional)"
|
"type_item_description": "Descrição do Item (opcional)"
|
||||||
},
|
},
|
||||||
"frequency": {
|
"frequency": {
|
||||||
"title": "Frequency",
|
"title": "Frequência",
|
||||||
"select_frequency": "Select Frequency",
|
"select_frequency": "Selecione a Frequência",
|
||||||
"minute": "Minute",
|
"minute": "Minuto",
|
||||||
"hour": "Hour",
|
"hour": "Hora",
|
||||||
"day_month": "Day of month",
|
"day_month": "Dia do mês",
|
||||||
"month": "Month",
|
"month": "Mês",
|
||||||
"day_week": "Day of week"
|
"day_week": "Dia da semana"
|
||||||
},
|
},
|
||||||
"confirm_delete": "You will not be able to recover this Invoice | You will not be able to recover these Invoices",
|
"confirm_delete": "Você não poderá recuperar esta fatura | Você não poderá recuperar essas faturas",
|
||||||
"created_message": "Recurring Invoice created successfully",
|
"created_message": "Fatura recorrente criada com sucesso",
|
||||||
"updated_message": "Recurring Invoice updated successfully",
|
"updated_message": "Fatura recorrente atualizada com sucesso",
|
||||||
"deleted_message": "Recurring Invoice deleted successfully | Recurring Invoices deleted successfully",
|
"deleted_message": "Fatura recorrente excluída com sucesso | Faturas recorrentes excluídas com sucesso",
|
||||||
"marked_as_sent_message": "Recurring Invoice marked as sent successfully",
|
"marked_as_sent_message": "Fatura recorrente marcada como enviada com sucesso",
|
||||||
"user_email_does_not_exist": "User email does not exist",
|
"user_email_does_not_exist": "E-mail de usuário não existe",
|
||||||
"something_went_wrong": "something went wrong",
|
"something_went_wrong": "houve algo de errado",
|
||||||
"invalid_due_amount_message": "Total Recurring Invoice amount cannot be less than total paid amount for this Recurring Invoice. Please update the invoice or delete the associated payments to continue."
|
"invalid_due_amount_message": "O valor total da fatura não pode ser menor que o valor total pago para esta fatura. Atualize a fatura ou exclua os pagamentos associados para continuar."
|
||||||
},
|
},
|
||||||
"payments": {
|
"payments": {
|
||||||
"title": "Pagamentos",
|
"title": "Pagamentos",
|
||||||
@ -603,7 +603,7 @@
|
|||||||
"select_a_customer": "Selecione um cliente",
|
"select_a_customer": "Selecione um cliente",
|
||||||
"expense_title": "Título",
|
"expense_title": "Título",
|
||||||
"customer": "Cliente",
|
"customer": "Cliente",
|
||||||
"currency": "Currency",
|
"currency": "Moeda",
|
||||||
"contact": "Contato",
|
"contact": "Contato",
|
||||||
"category": "Categoria",
|
"category": "Categoria",
|
||||||
"from_date": "A partir da Data",
|
"from_date": "A partir da Data",
|
||||||
@ -658,49 +658,49 @@
|
|||||||
"retype_password": "Confirme a Senha"
|
"retype_password": "Confirme a Senha"
|
||||||
},
|
},
|
||||||
"modules": {
|
"modules": {
|
||||||
"buy_now": "Buy Now",
|
"buy_now": "Compre agora",
|
||||||
"install": "Install",
|
"install": "Instalar",
|
||||||
"price": "Price",
|
"price": "Preço",
|
||||||
"download_zip_file": "Download ZIP file",
|
"download_zip_file": "Baixar arquivo ZIP",
|
||||||
"unzipping_package": "Unzipping Package",
|
"unzipping_package": "Descompactando pacote",
|
||||||
"copying_files": "Copying Files",
|
"copying_files": "Copiando arquivos",
|
||||||
"deleting_files": "Deleting Unused files",
|
"deleting_files": "Excluindo arquivos não utilizados",
|
||||||
"completing_installation": "Completing Installation",
|
"completing_installation": "Completando instalação",
|
||||||
"update_failed": "Update Failed",
|
"update_failed": "Atualização falhou",
|
||||||
"install_success": "Module has been installed successfully!",
|
"install_success": "Módulo foi instalado com sucesso!",
|
||||||
"customer_reviews": "Reviews",
|
"customer_reviews": "Avaliações",
|
||||||
"license": "License",
|
"license": "Licença",
|
||||||
"faq": "FAQ",
|
"faq": "FAQ",
|
||||||
"monthly": "Monthly",
|
"monthly": "Mensalmente",
|
||||||
"yearly": "Yearly",
|
"yearly": "Anual",
|
||||||
"updated": "Updated",
|
"updated": "Atualizado",
|
||||||
"version": "Version",
|
"version": "Versão",
|
||||||
"disable": "Disable",
|
"disable": "Desabilitar",
|
||||||
"module_disabled": "Module Disabled",
|
"module_disabled": "Módulo Desabilitado",
|
||||||
"enable": "Enable",
|
"enable": "Habilitar",
|
||||||
"module_enabled": "Module Enabled",
|
"module_enabled": "Módulo Habilitado",
|
||||||
"update_to": "Update To",
|
"update_to": "Atualizar Para",
|
||||||
"module_updated": "Module Updated Successfully!",
|
"module_updated": "Módulo atualizado com sucesso!",
|
||||||
"title": "Modules",
|
"title": "Módulos",
|
||||||
"module": "Module | Modules",
|
"module": "Módulo | Módulos",
|
||||||
"api_token": "API token",
|
"api_token": "Token de API",
|
||||||
"invalid_api_token": "Invalid API Token.",
|
"invalid_api_token": "Token da API inválido.",
|
||||||
"other_modules": "Other Modules",
|
"other_modules": "Outros Módulos",
|
||||||
"view_all": "View All",
|
"view_all": "Ver todos",
|
||||||
"no_reviews_found": "There are no reviews for this module yet!",
|
"no_reviews_found": "Não há avaliações para este módulo ainda!",
|
||||||
"module_not_purchased": "Module Not Purchased",
|
"module_not_purchased": "Módulo não comprado",
|
||||||
"module_not_found": "Module Not Found",
|
"module_not_found": "Módulo não encontrado",
|
||||||
"version_not_supported": "This module version doesn't support the current version of Crater",
|
"version_not_supported": "This module version doesn't support the current version of Crater",
|
||||||
"last_updated": "Last Updated On",
|
"last_updated": "Última atualização em",
|
||||||
"connect_installation": "Connect your installation",
|
"connect_installation": "Conecte sua instalação",
|
||||||
"api_token_description": "Login to {url} and connect this installation by entering the API Token. Your purchased modules will show up here after the connection is established.",
|
"api_token_description": "Faça login em {url} e conecte esta instalação digitando o Token da API. Os módulos comprados aparecerão aqui após a conexão ser estabelecida.",
|
||||||
"view_module": "View Module",
|
"view_module": "Ver Módulo",
|
||||||
"update_available": "Update Available",
|
"update_available": "Atualização disponível",
|
||||||
"purchased": "Purchased",
|
"purchased": "Comprado",
|
||||||
"installed": "Installed",
|
"installed": "Instalado",
|
||||||
"no_modules_installed": "No Modules Installed Yet!",
|
"no_modules_installed": "Nenhum módulo instalado ainda!",
|
||||||
"disable_warning": "All the settings for this particular will be reverted.",
|
"disable_warning": "Todas as configurações serão revertidas.",
|
||||||
"what_you_get": "What you get"
|
"what_you_get": "O que você recebe?"
|
||||||
},
|
},
|
||||||
"users": {
|
"users": {
|
||||||
"title": "Usuários",
|
"title": "Usuários",
|
||||||
@ -727,8 +727,8 @@
|
|||||||
"created_message": "Usuário criado com sucesso",
|
"created_message": "Usuário criado com sucesso",
|
||||||
"updated_message": "Usuário atualizado com sucesso",
|
"updated_message": "Usuário atualizado com sucesso",
|
||||||
"deleted_message": "Usuário excluído com sucesso | Usuários excluídos com sucesso",
|
"deleted_message": "Usuário excluído com sucesso | Usuários excluídos com sucesso",
|
||||||
"select_company_role": "Select Role for {company}",
|
"select_company_role": "Selecione o cargo da {company}",
|
||||||
"companies": "Companies"
|
"companies": "Empresas"
|
||||||
},
|
},
|
||||||
"reports": {
|
"reports": {
|
||||||
"title": "Relatório",
|
"title": "Relatório",
|
||||||
@ -801,16 +801,16 @@
|
|||||||
"tax_types": "Tipos de Impostos",
|
"tax_types": "Tipos de Impostos",
|
||||||
"expense_category": "Categorias de Despesas",
|
"expense_category": "Categorias de Despesas",
|
||||||
"update_app": "Atualizar Aplicativo",
|
"update_app": "Atualizar Aplicativo",
|
||||||
"backup": "Backup",
|
"backup": "Cópia de Segurança",
|
||||||
"file_disk": "Disco de Arquivos",
|
"file_disk": "Disco de Arquivos",
|
||||||
"custom_fields": "Os campos personalizados",
|
"custom_fields": "Os campos personalizados",
|
||||||
"payment_modes": "Meios de Pagamento",
|
"payment_modes": "Meios de Pagamento",
|
||||||
"notes": "Observações",
|
"notes": "Observações",
|
||||||
"exchange_rate": "Exchange Rate",
|
"exchange_rate": "Taxa de Câmbio",
|
||||||
"address_information": "Address Information"
|
"address_information": "Informações de Endereço"
|
||||||
},
|
},
|
||||||
"address_information": {
|
"address_information": {
|
||||||
"section_description": " You can update Your Address information using form below."
|
"section_description": " Você pode atualizar suas informações de endereço usando o formulário abaixo."
|
||||||
},
|
},
|
||||||
"title": "Configurações",
|
"title": "Configurações",
|
||||||
"setting": "Configuração | Configurações",
|
"setting": "Configuração | Configurações",
|
||||||
@ -872,13 +872,13 @@
|
|||||||
"address": "Endereço",
|
"address": "Endereço",
|
||||||
"zip": "CEP",
|
"zip": "CEP",
|
||||||
"save": "Salvar",
|
"save": "Salvar",
|
||||||
"delete": "Delete",
|
"delete": "Excluir",
|
||||||
"updated_message": "Informações da Empresa atualizadas com sucesso",
|
"updated_message": "Informações da Empresa atualizadas com sucesso",
|
||||||
"delete_company": "Delete Company",
|
"delete_company": "Excluir Empresa",
|
||||||
"delete_company_description": "Once you delete your company, you will lose all the data and files associated with it permanently.",
|
"delete_company_description": "Depois de excluir sua empresa, você perderá todos os dados e arquivos associados a ela permanentemente.",
|
||||||
"are_you_absolutely_sure": "Are you absolutely sure?",
|
"are_you_absolutely_sure": "Você tem certeza?",
|
||||||
"delete_company_modal_desc": "This action cannot be undone. This will permanently delete {company} and all of its associated data.",
|
"delete_company_modal_desc": "Esta ação não pode ser desfeita. Isto irá apagar permanentemente a {company} e todos os dados associados.",
|
||||||
"delete_company_modal_label": "Please type {company} to confirm"
|
"delete_company_modal_label": "Digite {company} para confirmar"
|
||||||
},
|
},
|
||||||
"custom_fields": {
|
"custom_fields": {
|
||||||
"title": "Os campos personalizados",
|
"title": "Os campos personalizados",
|
||||||
@ -916,103 +916,103 @@
|
|||||||
"ticked_by_default": "Marcado por padrão",
|
"ticked_by_default": "Marcado por padrão",
|
||||||
"updated_message": "Campo personalizado atualizado com sucesso",
|
"updated_message": "Campo personalizado atualizado com sucesso",
|
||||||
"added_message": "Campo personalizado adicionado com sucesso",
|
"added_message": "Campo personalizado adicionado com sucesso",
|
||||||
"press_enter_to_add": "Press enter to add new option",
|
"press_enter_to_add": "Aperte enter para adicionar uma nova opção",
|
||||||
"model_in_use": "Cannot update model for fields which are already in use.",
|
"model_in_use": "Não é possível atualizar o modelo para campos que já estão em uso.",
|
||||||
"type_in_use": "Cannot update type for fields which are already in use."
|
"type_in_use": "Não é possível atualizar o tipo para os campos que já estão em uso."
|
||||||
},
|
},
|
||||||
"customization": {
|
"customization": {
|
||||||
"customization": "personalização",
|
"customization": "personalização",
|
||||||
"updated_message": "Informações da Empresa atualizadas com sucesso",
|
"updated_message": "Informações da Empresa atualizadas com sucesso",
|
||||||
"save": "Salvar",
|
"save": "Salvar",
|
||||||
"insert_fields": "Insert Fields",
|
"insert_fields": "Inserir Campos",
|
||||||
"learn_custom_format": "Learn how to use custom format",
|
"learn_custom_format": "Aprenda a usar o formato personalizado",
|
||||||
"add_new_component": "Add New Component",
|
"add_new_component": "Novo Componente",
|
||||||
"component": "Component",
|
"component": "Componente",
|
||||||
"Parameter": "Parameter",
|
"Parameter": "Parâmetro",
|
||||||
"series": "Series",
|
"series": "Séries",
|
||||||
"series_description": "To set a static prefix/postfix like 'INV' across your company. It supports character length of up to 6 chars.",
|
"series_description": "Para definir um prefixo/sufixo estático como 'INV' em sua empresa. Ele suporta o comprimento do caractere de até 6 caracteres.",
|
||||||
"series_param_label": "Series Value",
|
"series_param_label": "Valor da Série",
|
||||||
"delimiter": "Delimiter",
|
"delimiter": "Delimitador",
|
||||||
"delimiter_description": "Single character for specifying the boundary between 2 separate components. By default its set to -",
|
"delimiter_description": "Caractere único para especificar o limite entre 2 componentes separados. Por padrão é -",
|
||||||
"delimiter_param_label": "Delimiter Value",
|
"delimiter_param_label": "Valor Delimitador",
|
||||||
"date_format": "Date Format",
|
"date_format": "Formato de Data",
|
||||||
"date_format_description": "A local date and time field which accepts a format parameter. The default format: 'Y' renders the current year.",
|
"date_format_description": "Um campo de data e hora local que aceita um parâmetro de formato. O formato padrão: 'Y' apresenta o ano atual.",
|
||||||
"date_format_param_label": "Format",
|
"date_format_param_label": "Formato",
|
||||||
"sequence": "Sequence",
|
"sequence": "Sequência",
|
||||||
"sequence_description": "Consecutive sequence of numbers across your company. You can specify the length on the given parameter.",
|
"sequence_description": "Sequência consecutiva de números em sua empresa. Você pode especificar o comprimento nos parâmetros indicados.",
|
||||||
"sequence_param_label": "Sequence Length",
|
"sequence_param_label": "Comprimento da sequência",
|
||||||
"customer_series": "Customer Series",
|
"customer_series": "Série do Cliente",
|
||||||
"customer_series_description": "To set a different prefix/postfix for each customer.",
|
"customer_series_description": "Para definir um prefixo/sufixo diferente para cada cliente.",
|
||||||
"customer_sequence": "Customer Sequence",
|
"customer_sequence": "Sequência do Cliente",
|
||||||
"customer_sequence_description": "Consecutive sequence of numbers for each of your customer.",
|
"customer_sequence_description": "Sequência consecutiva de números para cada um de seus clientes.",
|
||||||
"customer_sequence_param_label": "Sequence Length",
|
"customer_sequence_param_label": "Comprimento da Sequência",
|
||||||
"random_sequence": "Random Sequence",
|
"random_sequence": "Sequência aleatória",
|
||||||
"random_sequence_description": "Random alphanumeric string. You can specify the length on the given parameter.",
|
"random_sequence_description": "Cadeia alfanumérica aleatória. Você pode especificar o comprimento no parâmetro fornecido.",
|
||||||
"random_sequence_param_label": "Sequence Length",
|
"random_sequence_param_label": "Comprimento da Sequência",
|
||||||
"invoices": {
|
"invoices": {
|
||||||
"title": "Faturas",
|
"title": "Faturas",
|
||||||
"invoice_number_format": "Invoice Number Format",
|
"invoice_number_format": "Formato do Número da Fatura",
|
||||||
"invoice_number_format_description": "Customize how your invoice number gets generated automatically when you create a new invoice.",
|
"invoice_number_format_description": "Personalize como o número da sua fatura é gerado automaticamente quando você cria uma nova fatura.",
|
||||||
"preview_invoice_number": "Preview Invoice Number",
|
"preview_invoice_number": "Pré-visualizar número da fatura",
|
||||||
"due_date": "Due Date",
|
"due_date": "Vencimento",
|
||||||
"due_date_description": "Specify how due date is automatically set when you create an invoice.",
|
"due_date_description": "Especifique como a data de vencimento é definida automaticamente ao criar uma fatura.",
|
||||||
"due_date_days": "Invoice Due after days",
|
"due_date_days": "Número de dias antes do vencimento da fatura",
|
||||||
"set_due_date_automatically": "Set Due Date Automatically",
|
"set_due_date_automatically": "Definir Data de Vencimento Automaticamente",
|
||||||
"set_due_date_automatically_description": "Enable this if you wish to set due date automatically when you create a new invoice.",
|
"set_due_date_automatically_description": "Habilite isso se deseja definir a data de vencimento automaticamente ao criar uma fatura.",
|
||||||
"default_formats": "Default Formats",
|
"default_formats": "Formatos Padrão",
|
||||||
"default_formats_description": "Below given formats are used to fill up the fields automatically on invoice creation.",
|
"default_formats_description": "Os formatos indicados abaixo são usados para preencher os campos automaticamente na criação da fatura.",
|
||||||
"default_invoice_email_body": "Corpo Padrão de Email de Fatura",
|
"default_invoice_email_body": "Corpo Padrão de Email de Fatura",
|
||||||
"company_address_format": "Formato de Endereço de Empresa",
|
"company_address_format": "Formato de Endereço de Empresa",
|
||||||
"shipping_address_format": "Formato de Endereço de Envio",
|
"shipping_address_format": "Formato de Endereço de Envio",
|
||||||
"billing_address_format": "Formato de Endereço de Faturamento",
|
"billing_address_format": "Formato de Endereço de Faturamento",
|
||||||
"invoice_email_attachment": "Enviar faturas como anexos",
|
"invoice_email_attachment": "Enviar faturas como anexos",
|
||||||
"invoice_email_attachment_setting_description": "Ative esta opção se quiser anexar faturas no e-mail. Lembrando que quando habilitado, o botão 'Ver fatura' nos e-mails não será mais exibido.",
|
"invoice_email_attachment_setting_description": "Ative esta opção se quiser anexar faturas no e-mail. Lembrando que quando habilitado, o botão 'Ver fatura' nos e-mails não será mais exibido.",
|
||||||
"invoice_settings_updated": "Invoice Settings updated successfully",
|
"invoice_settings_updated": "Configurações da fatura atualizadas com sucesso",
|
||||||
"retrospective_edits": "Retrospective Edits",
|
"retrospective_edits": "Edições Retrospectivas",
|
||||||
"allow": "Allow",
|
"allow": "Permitir",
|
||||||
"disable_on_invoice_partial_paid": "Disable after partial payment is recorded",
|
"disable_on_invoice_partial_paid": "Desativar após registrar um pagamento parcial",
|
||||||
"disable_on_invoice_paid": "Disable after full payment is recorded",
|
"disable_on_invoice_paid": "Desativar após registrar um pagamento completo",
|
||||||
"disable_on_invoice_sent": "Disable after invoice is sent",
|
"disable_on_invoice_sent": "Desativar após o envio da fatura",
|
||||||
"retrospective_edits_description": " Based on your country's laws or your preference, you can restrict users from editing finalised invoices."
|
"retrospective_edits_description": " Com base nas leis do seu país ou na sua preferência, é possível restringir os usuários de editar faturas finalizadas."
|
||||||
},
|
},
|
||||||
"estimates": {
|
"estimates": {
|
||||||
"title": "Orçamentos",
|
"title": "Orçamentos",
|
||||||
"estimate_number_format": "Estimate Number Format",
|
"estimate_number_format": "Formato do Número de Orçamento",
|
||||||
"estimate_number_format_description": "Customize how your estimate number gets generated automatically when you create a new estimate.",
|
"estimate_number_format_description": "Personalize como seu número de orçamento é gerado automaticamente quando você cria um orçamento.",
|
||||||
"preview_estimate_number": "Preview Estimate Number",
|
"preview_estimate_number": "Pré-visualizar Número de Orçamento",
|
||||||
"expiry_date": "Expiry Date",
|
"expiry_date": "Vencimento",
|
||||||
"expiry_date_description": "Specify how expiry date is automatically set when you create an estimate.",
|
"expiry_date_description": "Especifique como a data de vencimento é definida automaticamente quando você cria um orçamento.",
|
||||||
"expiry_date_days": "Estimate Expires after days",
|
"expiry_date_days": "Orçamento expira após dias",
|
||||||
"set_expiry_date_automatically": "Set Expiry Date Automatically",
|
"set_expiry_date_automatically": "Definir Data de Vencimento Automaticamente",
|
||||||
"set_expiry_date_automatically_description": "Enable this if you wish to set expiry date automatically when you create a new estimate.",
|
"set_expiry_date_automatically_description": "Habilite isso se desejar definir a data de vencimento automaticamente ao criar um orçamento.",
|
||||||
"default_formats": "Default Formats",
|
"default_formats": "Formatos Padrão",
|
||||||
"default_formats_description": "Below given formats are used to fill up the fields automatically on estimate creation.",
|
"default_formats_description": "Os formatos indicados abaixo são usados para preencher os campos automaticamente na criação do orçamento.",
|
||||||
"default_estimate_email_body": "Corpo Padrão de Email de Orçamento",
|
"default_estimate_email_body": "Corpo Padrão de Email de Orçamento",
|
||||||
"company_address_format": "Formato de Endereço de Empresa",
|
"company_address_format": "Formato de Endereço de Empresa",
|
||||||
"shipping_address_format": "Formato de Endereço de Envio",
|
"shipping_address_format": "Formato de Endereço de Envio",
|
||||||
"billing_address_format": "Formato de Endereço de Faturamento",
|
"billing_address_format": "Formato de Endereço de Faturamento",
|
||||||
"estimate_email_attachment": "Enviar orçamentos como anexos",
|
"estimate_email_attachment": "Enviar orçamentos como anexos",
|
||||||
"estimate_email_attachment_setting_description": "Ative esta opção se quiser anexar orçamentos no e-mail. Lembrando que quando habilitado, o botão 'Ver orçamento' nos e-mails não será mais exibido.",
|
"estimate_email_attachment_setting_description": "Ative esta opção se quiser anexar orçamentos no e-mail. Lembrando que quando habilitado, o botão 'Ver orçamento' nos e-mails não será mais exibido.",
|
||||||
"estimate_settings_updated": "Estimate Settings updated successfully",
|
"estimate_settings_updated": "Configurações de orçamento atualizadas com sucesso",
|
||||||
"convert_estimate_options": "Estimate Convert Action",
|
"convert_estimate_options": "Ação de Conversão de Orçamento",
|
||||||
"convert_estimate_description": "Specify what happens to the estimate after it gets converted to an invoice.",
|
"convert_estimate_description": "Especifique o que acontece com o orçamento depois que ele é convertido em uma fatura.",
|
||||||
"no_action": "No action",
|
"no_action": "Nenhuma ação",
|
||||||
"delete_estimate": "Delete estimate",
|
"delete_estimate": "Excluir orçamento",
|
||||||
"mark_estimate_as_accepted": "Mark estimate as accepted"
|
"mark_estimate_as_accepted": "Marcar orçamento como aceito"
|
||||||
},
|
},
|
||||||
"payments": {
|
"payments": {
|
||||||
"title": "Pagamentos",
|
"title": "Pagamentos",
|
||||||
"payment_number_format": "Payment Number Format",
|
"payment_number_format": "Formato do Número de Pagamento",
|
||||||
"payment_number_format_description": "Customize how your payment number gets generated automatically when you create a new payment.",
|
"payment_number_format_description": "Personalize como seu número de pagamento é gerado automaticamente quando você cria um pagamento.",
|
||||||
"preview_payment_number": "Preview Payment Number",
|
"preview_payment_number": "Visualizar Número de Pagamento",
|
||||||
"default_formats": "Default Formats",
|
"default_formats": "Formato padrão",
|
||||||
"default_formats_description": "Below given formats are used to fill up the fields automatically on payment creation.",
|
"default_formats_description": "Os formatos abaixo são usados para preencher os campos automaticamente na criação de pagamentos.",
|
||||||
"default_payment_email_body": "Corpo Padrão de Email de Pagamento",
|
"default_payment_email_body": "Corpo Padrão de Email de Pagamento",
|
||||||
"company_address_format": "Formato de Endereço de Empresa",
|
"company_address_format": "Formato de Endereço de Empresa",
|
||||||
"from_customer_address_format": "Formato de Endereço de Cliente Remetente",
|
"from_customer_address_format": "Formato de Endereço de Cliente Remetente",
|
||||||
"payment_email_attachment": "Enviar pagamentos como anexos",
|
"payment_email_attachment": "Enviar pagamentos como anexos",
|
||||||
"payment_email_attachment_setting_description": "Ative esta opção se quiser enviar em anexo os recibos de pagamento no e-mail. Lembrando que quando habilitado, o botão 'Ver Pagamento' nos e-mails não será mais exibido.",
|
"payment_email_attachment_setting_description": "Ative esta opção se quiser enviar em anexo os recibos de pagamento no e-mail. Lembrando que quando habilitado, o botão 'Ver Pagamento' nos e-mails não será mais exibido.",
|
||||||
"payment_settings_updated": "Payment Settings updated successfully"
|
"payment_settings_updated": "Configurações de Pagamento atualizada com sucesso"
|
||||||
},
|
},
|
||||||
"items": {
|
"items": {
|
||||||
"title": "Itens",
|
"title": "Itens",
|
||||||
@ -1072,55 +1072,55 @@
|
|||||||
"please_enter_email": "Por favor digite um E-mail"
|
"please_enter_email": "Por favor digite um E-mail"
|
||||||
},
|
},
|
||||||
"roles": {
|
"roles": {
|
||||||
"title": "Roles",
|
"title": "Nível de Acesso",
|
||||||
"description": "Manage the roles & permissions of this company",
|
"description": "Gerenciar os cargos e permissões desta empresa",
|
||||||
"save": "Save",
|
"save": "Salvar",
|
||||||
"add_new_role": "Add New Role",
|
"add_new_role": "Criar Nível de Acesso",
|
||||||
"role_name": "Role Name",
|
"role_name": "Nome",
|
||||||
"added_on": "Added on",
|
"added_on": "Adicionado em",
|
||||||
"add_role": "Add Role",
|
"add_role": "Adicionar função",
|
||||||
"edit_role": "Edit Role",
|
"edit_role": "Editar Função",
|
||||||
"name": "Name",
|
"name": "Nome",
|
||||||
"permission": "Permission | Permissions",
|
"permission": "Permissão | Permissões",
|
||||||
"select_all": "Select All",
|
"select_all": "Selecionar tudo",
|
||||||
"none": "None",
|
"none": "Nenhum",
|
||||||
"confirm_delete": "You will not be able to recover this Role",
|
"confirm_delete": "Você não poderá recuperar este Cargo",
|
||||||
"created_message": "Role created successfully",
|
"created_message": "Cargo criado com sucesso",
|
||||||
"updated_message": "Role updated successfully",
|
"updated_message": "Cargo atualizado com sucesso",
|
||||||
"deleted_message": "Role deleted successfully",
|
"deleted_message": "Cargo deletado com sucesso",
|
||||||
"already_in_use": "Role is already in use"
|
"already_in_use": "Cargo já em uso"
|
||||||
},
|
},
|
||||||
"exchange_rate": {
|
"exchange_rate": {
|
||||||
"exchange_rate": "Exchange Rate",
|
"exchange_rate": "Taxa de Câmbio",
|
||||||
"title": "Fix Currency Exchange issues",
|
"title": "Corrigir problemas do câmbio",
|
||||||
"description": "Please enter exchange rate of all the currencies mentioned below to help Crater properly calculate the amounts in {currency}.",
|
"description": "Por favor, indique a taxa de câmbio de todas as moedas mencionadas abaixo para ajudar o Crater a calcular corretamente as quantidades em {currency}.",
|
||||||
"drivers": "Drivers",
|
"drivers": "Drivers",
|
||||||
"new_driver": "Add New Provider",
|
"new_driver": "Adicionar Fornecedor",
|
||||||
"edit_driver": "Edit Provider",
|
"edit_driver": "Editar fornecedor",
|
||||||
"select_driver": "Select Driver",
|
"select_driver": "Select Driver",
|
||||||
"update": "select exchange rate ",
|
"update": "selecione a taxa de câmbio ",
|
||||||
"providers_description": "Configure your exchange rate providers here to automatically fetch the latest exchange rate on transactions.",
|
"providers_description": "Configure aqui a taxa de câmbio de seus fornecedores para buscar automaticamente a taxa de câmbio mais recente nas transações.",
|
||||||
"key": "API Key",
|
"key": "Chave da API",
|
||||||
"name": "Name",
|
"name": "Nome",
|
||||||
"driver": "Driver",
|
"driver": "Driver",
|
||||||
"is_default": "IS DEFAULT",
|
"is_default": "É PADRÃO",
|
||||||
"currency": "Currencies",
|
"currency": "Moedas",
|
||||||
"exchange_rate_confirm_delete": "You will not be able to recover this driver",
|
"exchange_rate_confirm_delete": "You will not be able to recover this driver",
|
||||||
"created_message": "Provider Created successfully",
|
"created_message": "Fornecedor criado com sucesso",
|
||||||
"updated_message": "Provider Updated Successfully",
|
"updated_message": "Fornecedor Atualizado com Sucesso",
|
||||||
"deleted_message": "Provider Deleted Successfully",
|
"deleted_message": "Fornecedor Excluído com Sucesso",
|
||||||
"error": " You cannot Delete Active Driver",
|
"error": " You cannot Delete Active Driver",
|
||||||
"default_currency_error": "This currency is already used in one of the Active Provider",
|
"default_currency_error": "Esta moeda já é usada em um dos fornecedores ativos",
|
||||||
"exchange_help_text": "Enter exchange rate to convert from {currency} to {baseCurrency}",
|
"exchange_help_text": "Digite a taxa de câmbio para converter de {currency} para {baseCurrency}",
|
||||||
"currency_freak": "Currency Freak",
|
"currency_freak": "Currency Freak",
|
||||||
"currency_layer": "Currency Layer",
|
"currency_layer": "Currency Layer",
|
||||||
"open_exchange_rate": "Open Exchange Rate",
|
"open_exchange_rate": "Abrir Taxa de Câmbio",
|
||||||
"currency_converter": "Currency Converter",
|
"currency_converter": "Conversor de moeda",
|
||||||
"server": "Server",
|
"server": "Servidor",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"active": "Active",
|
"active": "Ativo",
|
||||||
"currency_help_text": "This provider will only be used on above selected currencies",
|
"currency_help_text": "Este fornecedor será usado somente nas moedas selecionadas acima",
|
||||||
"currency_in_used": "The following currencies are already active on another provider. Please remove these currencies from selection to activate this provider again."
|
"currency_in_used": "As seguintes moedas já estão ativas em outro fornecedor. Remova essas moedas da seleção para ativar este fornecedor novamente."
|
||||||
},
|
},
|
||||||
"tax_types": {
|
"tax_types": {
|
||||||
"title": "Tipos de Impostos",
|
"title": "Tipos de Impostos",
|
||||||
@ -1142,17 +1142,17 @@
|
|||||||
"already_in_use": "O Imposto já está em uso"
|
"already_in_use": "O Imposto já está em uso"
|
||||||
},
|
},
|
||||||
"payment_modes": {
|
"payment_modes": {
|
||||||
"title": "Payment Modes",
|
"title": "Forma de Pagamento",
|
||||||
"description": "Modes of transaction for payments",
|
"description": "Modos de transação para pagamentos",
|
||||||
"add_payment_mode": "Add Payment Mode",
|
"add_payment_mode": "Adicionar Forma de Pagamento",
|
||||||
"edit_payment_mode": "Edit Payment Mode",
|
"edit_payment_mode": "Editar Forma de Pagamento",
|
||||||
"mode_name": "Mode Name",
|
"mode_name": "Nome da Forma de Pagamento",
|
||||||
"payment_mode_added": "Payment Mode Added",
|
"payment_mode_added": "Forma de Pagamento Adicionada",
|
||||||
"payment_mode_updated": "Payment Mode Updated",
|
"payment_mode_updated": "Forma de Pagamento Atualizada",
|
||||||
"payment_mode_confirm_delete": "You will not be able to recover this Payment Mode",
|
"payment_mode_confirm_delete": "Você não poderá recuperar esta Forma de Pagamento",
|
||||||
"payments_attached": "This payment method is already attached to payments. Please delete the attached payments to proceed with deletion.",
|
"payments_attached": "Este método de pagamento já está anexado aos pagamentos. Por favor, exclua os pagamentos anexados para prosseguir com a exclusão.",
|
||||||
"expenses_attached": "This payment method is already attached to expenses. Please delete the attached expenses to proceed with deletion.",
|
"expenses_attached": "Este método de pagamento já está anexado às despesas. Por favor, apague as despesas anexadas para prosseguir com a exclusão.",
|
||||||
"deleted_message": "Payment Mode deleted successfully"
|
"deleted_message": "Forma de Pagamento excluída com sucesso"
|
||||||
},
|
},
|
||||||
"expense_category": {
|
"expense_category": {
|
||||||
"title": "Categoria de Despesa",
|
"title": "Categoria de Despesa",
|
||||||
@ -1178,8 +1178,8 @@
|
|||||||
"discount_setting": "Configuração de Desconto",
|
"discount_setting": "Configuração de Desconto",
|
||||||
"discount_per_item": "Desconto por Item ",
|
"discount_per_item": "Desconto por Item ",
|
||||||
"discount_setting_description": "Habilite isso se desejar adicionar desconto a itens de Fatura individualmente. Por padrão, o desconto é adicionado diretamente à Fatura.",
|
"discount_setting_description": "Habilite isso se desejar adicionar desconto a itens de Fatura individualmente. Por padrão, o desconto é adicionado diretamente à Fatura.",
|
||||||
"expire_public_links": "Automatically Expire Public Links",
|
"expire_public_links": "Expirar Links Públicos Automaticamente",
|
||||||
"expire_setting_description": "Specify whether you would like to expire all the links sent by application to view invoices, estimates & payments, etc after a specified duration.",
|
"expire_setting_description": "Especifique se deseja expirar todos os links enviados pelo aplicativo para visualizar faturas, orçamentos, pagamentos e etc., após um período especificado.",
|
||||||
"save": "Salvar",
|
"save": "Salvar",
|
||||||
"preference": "Preferência | Preferências",
|
"preference": "Preferência | Preferências",
|
||||||
"general_settings": "Preferências padrão para o sistema.",
|
"general_settings": "Preferências padrão para o sistema.",
|
||||||
@ -1188,13 +1188,13 @@
|
|||||||
"select_time_zone": "Selecione um fuso horário",
|
"select_time_zone": "Selecione um fuso horário",
|
||||||
"select_date_format": "Selecionar um Formato de Data",
|
"select_date_format": "Selecionar um Formato de Data",
|
||||||
"select_financial_year": "Selecione o ano financeiro",
|
"select_financial_year": "Selecione o ano financeiro",
|
||||||
"recurring_invoice_status": "Recurring Invoice Status",
|
"recurring_invoice_status": "Status da fatura recorrente",
|
||||||
"create_status": "Create Status",
|
"create_status": "Criar Status",
|
||||||
"active": "Active",
|
"active": "Ativo",
|
||||||
"on_hold": "On Hold",
|
"on_hold": "Em espera",
|
||||||
"update_status": "Update Status",
|
"update_status": "Atualizar Status",
|
||||||
"completed": "Completed",
|
"completed": "Concluído",
|
||||||
"company_currency_unchangeable": "Company currency cannot be changed"
|
"company_currency_unchangeable": "Moeda da empresa não pode ser alterada"
|
||||||
},
|
},
|
||||||
"update_app": {
|
"update_app": {
|
||||||
"title": "Atualizar Aplicativo",
|
"title": "Atualizar Aplicativo",
|
||||||
@ -1217,10 +1217,10 @@
|
|||||||
"finishing_update": "Acabando a Atualização",
|
"finishing_update": "Acabando a Atualização",
|
||||||
"update_failed": "Atualização falhou",
|
"update_failed": "Atualização falhou",
|
||||||
"update_failed_text": "Desculpa! Sua atualização falhou no passo: {step}",
|
"update_failed_text": "Desculpa! Sua atualização falhou no passo: {step}",
|
||||||
"update_warning": "All of the application files and default template files will be overwritten when you update the application using this utility. Please take a backup of your templates & database before updating."
|
"update_warning": "Todos os arquivos de aplicativo e arquivos de modelo padrão serão substituídos quando você atualizar o aplicativo usando este utilitário. Faça um backup de seus templates e banco de dados antes de atualizar."
|
||||||
},
|
},
|
||||||
"backup": {
|
"backup": {
|
||||||
"title": "Backup | Backups",
|
"title": "Cópia de segurança | Cópias de segurança",
|
||||||
"description": "O backup é um arquivo zip que contém todos os arquivos nas pastas que você especificou juntamente com um arquivo de backup de sua base de dados",
|
"description": "O backup é um arquivo zip que contém todos os arquivos nas pastas que você especificou juntamente com um arquivo de backup de sua base de dados",
|
||||||
"new_backup": "Adicionar Novo Backup",
|
"new_backup": "Adicionar Novo Backup",
|
||||||
"create_backup": "Criar Backup",
|
"create_backup": "Criar Backup",
|
||||||
@ -1248,7 +1248,7 @@
|
|||||||
"created_at": "criado em",
|
"created_at": "criado em",
|
||||||
"dropbox": "dropbox",
|
"dropbox": "dropbox",
|
||||||
"name": "Nome",
|
"name": "Nome",
|
||||||
"driver": "Driver",
|
"driver": "Motorista",
|
||||||
"disk_type": "Tipo",
|
"disk_type": "Tipo",
|
||||||
"disk_name": "Nome do disco",
|
"disk_name": "Nome do disco",
|
||||||
"new_disk": "Adicionar novo disco",
|
"new_disk": "Adicionar novo disco",
|
||||||
@ -1301,16 +1301,16 @@
|
|||||||
"invalid_disk_credentials": "Credencial inválida para o disco selecionado"
|
"invalid_disk_credentials": "Credencial inválida para o disco selecionado"
|
||||||
},
|
},
|
||||||
"taxations": {
|
"taxations": {
|
||||||
"add_billing_address": "Enter Billing Address",
|
"add_billing_address": "Endereço de Cobrança do Cliente",
|
||||||
"add_shipping_address": "Enter Shipping Address",
|
"add_shipping_address": "Endereço de Entrega do Cliente",
|
||||||
"add_company_address": "Enter Company Address",
|
"add_company_address": "Insira o Endereço da Empresa",
|
||||||
"modal_description": "The information below is required in order to fetch sales tax.",
|
"modal_description": "As informações abaixo são necessárias para obter o imposto sobre vendas.",
|
||||||
"add_address": "Add Address for fetching sales tax.",
|
"add_address": "Adicionar endereço para buscar o imposto sobre vendas.",
|
||||||
"address_placeholder": "Example: 123, My Street",
|
"address_placeholder": "Exemplo: 123, Minha Rua",
|
||||||
"city_placeholder": "Example: Los Angeles",
|
"city_placeholder": "Exemplo: Los Angeles",
|
||||||
"state_placeholder": "Example: CA",
|
"state_placeholder": "Exemplo: CA",
|
||||||
"zip_placeholder": "Example: 90024",
|
"zip_placeholder": "Exemplo: 90024",
|
||||||
"invalid_address": "Please provide valid address details."
|
"invalid_address": "Forneça detalhes do endereço válido."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"wizard": {
|
"wizard": {
|
||||||
@ -1328,7 +1328,7 @@
|
|||||||
"logo_preview": "Pré-visualizar Logotipo",
|
"logo_preview": "Pré-visualizar Logotipo",
|
||||||
"preferences": "Preferências",
|
"preferences": "Preferências",
|
||||||
"preferences_desc": "Preferências padrão para o sistema.",
|
"preferences_desc": "Preferências padrão para o sistema.",
|
||||||
"currency_set_alert": "The company's currency cannot be changed later.",
|
"currency_set_alert": "A moeda da empresa não pode ser alterada mais tarde.",
|
||||||
"country": "País",
|
"country": "País",
|
||||||
"state": "Estado",
|
"state": "Estado",
|
||||||
"city": "Cidade",
|
"city": "Cidade",
|
||||||
@ -1372,7 +1372,7 @@
|
|||||||
"app_domain": "Domínio do Aplicativo",
|
"app_domain": "Domínio do Aplicativo",
|
||||||
"verify_now": "Verificar Agora",
|
"verify_now": "Verificar Agora",
|
||||||
"success": "Domínio Verificado com Sucesso.",
|
"success": "Domínio Verificado com Sucesso.",
|
||||||
"failed": "Domain verification failed. Please enter valid domain name.",
|
"failed": "Falha na verificação de domínio. Digite um nome de domínio válido.",
|
||||||
"verify_and_continue": "Verificar e Continuar"
|
"verify_and_continue": "Verificar e Continuar"
|
||||||
},
|
},
|
||||||
"mail": {
|
"mail": {
|
||||||
@ -1425,7 +1425,7 @@
|
|||||||
"not_yet": "Ainda não? Envie novamente",
|
"not_yet": "Ainda não? Envie novamente",
|
||||||
"password_min_length": "A senha deve ter {count} caracteres",
|
"password_min_length": "A senha deve ter {count} caracteres",
|
||||||
"name_min_length": "O nome deve ter pelo menos {count} letras.",
|
"name_min_length": "O nome deve ter pelo menos {count} letras.",
|
||||||
"prefix_min_length": "Prefix must have at least {count} letters.",
|
"prefix_min_length": "O nome deve ter pelo menos {count} letras.",
|
||||||
"enter_valid_tax_rate": "Insira uma taxa de imposto válida",
|
"enter_valid_tax_rate": "Insira uma taxa de imposto válida",
|
||||||
"numbers_only": "Apenas Números.",
|
"numbers_only": "Apenas Números.",
|
||||||
"characters_only": "Apenas Caracteres.",
|
"characters_only": "Apenas Caracteres.",
|
||||||
@ -1440,7 +1440,7 @@
|
|||||||
"price_minvalue": "O preço deve ser maior que 0.",
|
"price_minvalue": "O preço deve ser maior que 0.",
|
||||||
"amount_maxlength": "Valor não deve ter mais de 20 dígitos.",
|
"amount_maxlength": "Valor não deve ter mais de 20 dígitos.",
|
||||||
"amount_minvalue": "O valor deve ser maior que 0.",
|
"amount_minvalue": "O valor deve ser maior que 0.",
|
||||||
"discount_maxlength": "Discount should not be greater than max discount",
|
"discount_maxlength": "Desconto não deve ser maior que o máximo de desconto",
|
||||||
"description_maxlength": "A descrição não deve ter mais que 255 caracteres.",
|
"description_maxlength": "A descrição não deve ter mais que 255 caracteres.",
|
||||||
"subject_maxlength": "O assunto não deve ter mais que 100 caracteres.",
|
"subject_maxlength": "O assunto não deve ter mais que 100 caracteres.",
|
||||||
"message_maxlength": "A mensagem não deve ter mais que 255 caracteres.",
|
"message_maxlength": "A mensagem não deve ter mais que 255 caracteres.",
|
||||||
@ -1451,41 +1451,41 @@
|
|||||||
"prefix_maxlength": "O prefixo não deve ter mais que 5 caracteres.",
|
"prefix_maxlength": "O prefixo não deve ter mais que 5 caracteres.",
|
||||||
"something_went_wrong": "algo deu errado",
|
"something_went_wrong": "algo deu errado",
|
||||||
"number_length_minvalue": "O valor deve ser maior que 0",
|
"number_length_minvalue": "O valor deve ser maior que 0",
|
||||||
"at_least_one_ability": "Please select atleast one Permission.",
|
"at_least_one_ability": "Você deve selecionar ao menos uma permissão.",
|
||||||
"valid_driver_key": "Please enter a valid {driver} key.",
|
"valid_driver_key": "Por favor, insira uma chave válida de {driver}.",
|
||||||
"valid_exchange_rate": "Please enter a valid exchange rate.",
|
"valid_exchange_rate": "Por favor digite a taxa de câmbio.",
|
||||||
"company_name_not_same": "Company name must match with given name."
|
"company_name_not_same": "O nome da empresa deve corresponder com o nome fornecido."
|
||||||
},
|
},
|
||||||
"errors": {
|
"errors": {
|
||||||
"starter_plan": "This feature is available on Starter plan and onwards!",
|
"starter_plan": "Este recurso está disponível no plano de Starter!",
|
||||||
"invalid_provider_key": "Please Enter Valid Provider API Key.",
|
"invalid_provider_key": "Por favor, insira uma chave de API do provedor válido.",
|
||||||
"estimate_number_used": "The estimate number has already been taken.",
|
"estimate_number_used": "O número de pagamento já está em uso.",
|
||||||
"invoice_number_used": "The invoice number has already been taken.",
|
"invoice_number_used": "O número da fatura já está em uso.",
|
||||||
"payment_attached": "This invoice already has a payment attached to it. Make sure to delete the attached payments first in order to go ahead with the removal.",
|
"payment_attached": "Uma das faturas selecionadas já possui um pagamento anexado. Certifique-se de excluir os pagamentos anexados primeiro, para continuar com a exclusão.",
|
||||||
"payment_number_used": "The payment number has already been taken.",
|
"payment_number_used": "O número de pagamento já está em uso.",
|
||||||
"name_already_taken": "The name has already been taken.",
|
"name_already_taken": "O nome já está em uso.",
|
||||||
"receipt_does_not_exist": "Receipt does not exist.",
|
"receipt_does_not_exist": "O recibo não existe.",
|
||||||
"customer_cannot_be_changed_after_payment_is_added": "Customer cannot be change after payment is added",
|
"customer_cannot_be_changed_after_payment_is_added": "O cliente não pode ser alterado após o pagamento ser adicionado",
|
||||||
"invalid_credentials": "Invalid Credentials.",
|
"invalid_credentials": "Credenciais inválidas",
|
||||||
"not_allowed": "Not Allowed",
|
"not_allowed": "Não permitido",
|
||||||
"login_invalid_credentials": "These credentials do not match our records.",
|
"login_invalid_credentials": "Credenciais não correspondem aos nossos registros.",
|
||||||
"enter_valid_cron_format": "Please enter a valid cron format",
|
"enter_valid_cron_format": "Por favor, insira um formato de URL válida",
|
||||||
"email_could_not_be_sent": "Email could not be sent to this email address.",
|
"email_could_not_be_sent": "Não foi possível enviar o e-mail para este endereço de e-mail.",
|
||||||
"invalid_address": "Please enter a valid address.",
|
"invalid_address": "Por favor, insira um endereço de e-mail válido.",
|
||||||
"invalid_key": "Please enter valid key.",
|
"invalid_key": "Favor inserir uma chave válida.",
|
||||||
"invalid_state": "Please enter a valid state.",
|
"invalid_state": "Por favor, insira um estado válido.",
|
||||||
"invalid_city": "Please enter a valid city.",
|
"invalid_city": "Por favor, insira uma cidade válida.",
|
||||||
"invalid_postal_code": "Please enter a valid zip.",
|
"invalid_postal_code": "Por favor, insira um CEP válido.",
|
||||||
"invalid_format": "Please enter valid query string format.",
|
"invalid_format": "Por favor, insira o formato de texto de consulta válido.",
|
||||||
"api_error": "Server not responding.",
|
"api_error": "O servidor não está respondendo",
|
||||||
"feature_not_enabled": "Feature not enabled.",
|
"feature_not_enabled": "Recurso não ativado.",
|
||||||
"request_limit_met": "Api request limit exceeded.",
|
"request_limit_met": "Limite de solicitações excedido",
|
||||||
"address_incomplete": "Incomplete Address"
|
"address_incomplete": "Endereço Incompleto"
|
||||||
},
|
},
|
||||||
"pdf_estimate_label": "Orçamento",
|
"pdf_estimate_label": "Orçamento",
|
||||||
"pdf_estimate_number": "Numero do Orçamento",
|
"pdf_estimate_number": "Numero do Orçamento",
|
||||||
"pdf_estimate_date": "Data do Orçamento",
|
"pdf_estimate_date": "Data do Orçamento",
|
||||||
"pdf_estimate_expire_date": "Data de expiração",
|
"pdf_estimate_expire_date": "Validade",
|
||||||
"pdf_invoice_label": "Fatura",
|
"pdf_invoice_label": "Fatura",
|
||||||
"pdf_invoice_number": "Número da fatura",
|
"pdf_invoice_number": "Número da fatura",
|
||||||
"pdf_invoice_date": "Data da Fatura",
|
"pdf_invoice_date": "Data da Fatura",
|
||||||
@ -1522,5 +1522,5 @@
|
|||||||
"pdf_bill_to": "Cobrar a,",
|
"pdf_bill_to": "Cobrar a,",
|
||||||
"pdf_ship_to": "Envie a,",
|
"pdf_ship_to": "Envie a,",
|
||||||
"pdf_received_from": "Remetente:",
|
"pdf_received_from": "Remetente:",
|
||||||
"pdf_tax_label": "Tax"
|
"pdf_tax_label": "Imposto"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1485,7 +1485,7 @@
|
|||||||
"pdf_estimate_label": "Estimate",
|
"pdf_estimate_label": "Estimate",
|
||||||
"pdf_estimate_number": "Estimate Number",
|
"pdf_estimate_number": "Estimate Number",
|
||||||
"pdf_estimate_date": "Estimate Date",
|
"pdf_estimate_date": "Estimate Date",
|
||||||
"pdf_estimate_expire_date": "Expiry date",
|
"pdf_estimate_expire_date": "Expiry Date",
|
||||||
"pdf_invoice_label": "Invoice",
|
"pdf_invoice_label": "Invoice",
|
||||||
"pdf_invoice_number": "Invoice Number",
|
"pdf_invoice_number": "Invoice Number",
|
||||||
"pdf_invoice_date": "Invoice Date",
|
"pdf_invoice_date": "Invoice Date",
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -1485,7 +1485,7 @@
|
|||||||
"pdf_estimate_label": "Cenový odhad",
|
"pdf_estimate_label": "Cenový odhad",
|
||||||
"pdf_estimate_number": "Číslo cenového odhadu",
|
"pdf_estimate_number": "Číslo cenového odhadu",
|
||||||
"pdf_estimate_date": "Dátum cenového odhadu",
|
"pdf_estimate_date": "Dátum cenového odhadu",
|
||||||
"pdf_estimate_expire_date": "Platnosť cenového odhadu",
|
"pdf_estimate_expire_date": "Expiry Date",
|
||||||
"pdf_invoice_label": "Faktúra",
|
"pdf_invoice_label": "Faktúra",
|
||||||
"pdf_invoice_number": "Číslo faktúry",
|
"pdf_invoice_number": "Číslo faktúry",
|
||||||
"pdf_invoice_date": "Dátum vystavenia",
|
"pdf_invoice_date": "Dátum vystavenia",
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -12,7 +12,7 @@
|
|||||||
"settings": "Podešavanja",
|
"settings": "Podešavanja",
|
||||||
"logout": "Odjavi se",
|
"logout": "Odjavi se",
|
||||||
"users": "Korisnici",
|
"users": "Korisnici",
|
||||||
"modules": "Modules"
|
"modules": "Moduli"
|
||||||
},
|
},
|
||||||
"general": {
|
"general": {
|
||||||
"add_company": "Dodaj kompaniju",
|
"add_company": "Dodaj kompaniju",
|
||||||
@ -30,8 +30,8 @@
|
|||||||
"from": "Pošiljalac",
|
"from": "Pošiljalac",
|
||||||
"to": "Primalac",
|
"to": "Primalac",
|
||||||
"ok": "Ok",
|
"ok": "Ok",
|
||||||
"yes": "Yes",
|
"yes": "Da",
|
||||||
"no": "No",
|
"no": "Ne",
|
||||||
"sort_by": "Rasporedi Po",
|
"sort_by": "Rasporedi Po",
|
||||||
"ascending": "Rastuće",
|
"ascending": "Rastuće",
|
||||||
"descending": "Opadajuće",
|
"descending": "Opadajuće",
|
||||||
@ -39,7 +39,7 @@
|
|||||||
"body": "Telo",
|
"body": "Telo",
|
||||||
"message": "Poruka",
|
"message": "Poruka",
|
||||||
"send": "Pošalji",
|
"send": "Pošalji",
|
||||||
"preview": "Preview",
|
"preview": "Pregled",
|
||||||
"go_back": "Idi nazad",
|
"go_back": "Idi nazad",
|
||||||
"back_to_login": "Nazad na prijavu?",
|
"back_to_login": "Nazad na prijavu?",
|
||||||
"home": "Početna",
|
"home": "Početna",
|
||||||
@ -95,9 +95,9 @@
|
|||||||
"copied_pdf_url_clipboard": "Link do PDF fajla kopiran!",
|
"copied_pdf_url_clipboard": "Link do PDF fajla kopiran!",
|
||||||
"copied_url_clipboard": "Copied url to clipboard!",
|
"copied_url_clipboard": "Copied url to clipboard!",
|
||||||
"docs": "Docs",
|
"docs": "Docs",
|
||||||
"do_you_wish_to_continue": "Do you wish to continue?",
|
"do_you_wish_to_continue": "Da li želite nastaviti?",
|
||||||
"note": "Note",
|
"note": "Bilješka",
|
||||||
"pay_invoice": "Pay Invoice",
|
"pay_invoice": "Plati račun",
|
||||||
"login_successfully": "Logged in successfully!",
|
"login_successfully": "Logged in successfully!",
|
||||||
"logged_out_successfully": "Logged out successfully",
|
"logged_out_successfully": "Logged out successfully",
|
||||||
"mark_as_default": "Mark as default"
|
"mark_as_default": "Mark as default"
|
||||||
@ -318,10 +318,10 @@
|
|||||||
},
|
},
|
||||||
"accepted": "Prihvaćeno",
|
"accepted": "Prihvaćeno",
|
||||||
"rejected": "Odbijeno",
|
"rejected": "Odbijeno",
|
||||||
"expired": "Expired",
|
"expired": "Istekao",
|
||||||
"sent": "Poslato",
|
"sent": "Poslato",
|
||||||
"draft": "U izradi",
|
"draft": "U izradi",
|
||||||
"viewed": "Viewed",
|
"viewed": "Pregledano",
|
||||||
"declined": "Odbijeno",
|
"declined": "Odbijeno",
|
||||||
"new_estimate": "Nova Profaktura",
|
"new_estimate": "Nova Profaktura",
|
||||||
"add_new_estimate": "Dodaj novu Profakturu",
|
"add_new_estimate": "Dodaj novu Profakturu",
|
||||||
@ -1485,7 +1485,7 @@
|
|||||||
"pdf_estimate_label": "Profaktura",
|
"pdf_estimate_label": "Profaktura",
|
||||||
"pdf_estimate_number": "Broj Profakture",
|
"pdf_estimate_number": "Broj Profakture",
|
||||||
"pdf_estimate_date": "Datum Profakture",
|
"pdf_estimate_date": "Datum Profakture",
|
||||||
"pdf_estimate_expire_date": "Datum isteka Profakture",
|
"pdf_estimate_expire_date": "Expiry Date",
|
||||||
"pdf_invoice_label": "Faktura",
|
"pdf_invoice_label": "Faktura",
|
||||||
"pdf_invoice_number": "Broj Fakture",
|
"pdf_invoice_number": "Broj Fakture",
|
||||||
"pdf_invoice_date": "Datum Fakture",
|
"pdf_invoice_date": "Datum Fakture",
|
||||||
|
|||||||
@ -1485,7 +1485,7 @@
|
|||||||
"pdf_estimate_label": "Kostnadsförslag",
|
"pdf_estimate_label": "Kostnadsförslag",
|
||||||
"pdf_estimate_number": "Kostnadsförslagsnummer",
|
"pdf_estimate_number": "Kostnadsförslagsnummer",
|
||||||
"pdf_estimate_date": "Kostnadsförslagsdatum",
|
"pdf_estimate_date": "Kostnadsförslagsdatum",
|
||||||
"pdf_estimate_expire_date": "Utgångsdatum",
|
"pdf_estimate_expire_date": "Expiry Date",
|
||||||
"pdf_invoice_label": "Faktura",
|
"pdf_invoice_label": "Faktura",
|
||||||
"pdf_invoice_number": "Fakturanummer",
|
"pdf_invoice_number": "Fakturanummer",
|
||||||
"pdf_invoice_date": "Fakturadatum",
|
"pdf_invoice_date": "Fakturadatum",
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -1485,7 +1485,7 @@
|
|||||||
"pdf_estimate_label": "Estimate",
|
"pdf_estimate_label": "Estimate",
|
||||||
"pdf_estimate_number": "Estimate Number",
|
"pdf_estimate_number": "Estimate Number",
|
||||||
"pdf_estimate_date": "Estimate Date",
|
"pdf_estimate_date": "Estimate Date",
|
||||||
"pdf_estimate_expire_date": "Expiry date",
|
"pdf_estimate_expire_date": "Expiry Date",
|
||||||
"pdf_invoice_label": "Invoice",
|
"pdf_invoice_label": "Invoice",
|
||||||
"pdf_invoice_number": "Invoice Number",
|
"pdf_invoice_number": "Invoice Number",
|
||||||
"pdf_invoice_date": "Invoice Date",
|
"pdf_invoice_date": "Invoice Date",
|
||||||
|
|||||||
1526
resources/scripts/locales/uk.json
Normal file
1526
resources/scripts/locales/uk.json
Normal file
File diff suppressed because it is too large
Load Diff
@ -12,7 +12,7 @@
|
|||||||
"settings": "Cài đặt",
|
"settings": "Cài đặt",
|
||||||
"logout": "Đăng xuất",
|
"logout": "Đăng xuất",
|
||||||
"users": "Người dùng",
|
"users": "Người dùng",
|
||||||
"modules": "Modules"
|
"modules": "Các Mô-Đun"
|
||||||
},
|
},
|
||||||
"general": {
|
"general": {
|
||||||
"add_company": "Thêm công ty",
|
"add_company": "Thêm công ty",
|
||||||
@ -93,7 +93,7 @@
|
|||||||
"no_note_found": "Không tìm thấy ghi chú",
|
"no_note_found": "Không tìm thấy ghi chú",
|
||||||
"insert_note": "Chèn ghi chú",
|
"insert_note": "Chèn ghi chú",
|
||||||
"copied_pdf_url_clipboard": "Đã sao chép url PDF vào khay nhớ tạm!",
|
"copied_pdf_url_clipboard": "Đã sao chép url PDF vào khay nhớ tạm!",
|
||||||
"copied_url_clipboard": "Copied url to clipboard!",
|
"copied_url_clipboard": "Đã sao chép url vào khay nhớ tạm!",
|
||||||
"docs": "Tài liệu",
|
"docs": "Tài liệu",
|
||||||
"do_you_wish_to_continue": "Bạn có muốn tiếp tục không?",
|
"do_you_wish_to_continue": "Bạn có muốn tiếp tục không?",
|
||||||
"note": "Ghi chú",
|
"note": "Ghi chú",
|
||||||
@ -1485,7 +1485,7 @@
|
|||||||
"pdf_estimate_label": "Ước tính",
|
"pdf_estimate_label": "Ước tính",
|
||||||
"pdf_estimate_number": "Số ước tính",
|
"pdf_estimate_number": "Số ước tính",
|
||||||
"pdf_estimate_date": "Ngày ước tính",
|
"pdf_estimate_date": "Ngày ước tính",
|
||||||
"pdf_estimate_expire_date": "Ngày hết hạn",
|
"pdf_estimate_expire_date": "Expiry Date",
|
||||||
"pdf_invoice_label": "Hóa đơn",
|
"pdf_invoice_label": "Hóa đơn",
|
||||||
"pdf_invoice_number": "Số hóa đơn",
|
"pdf_invoice_number": "Số hóa đơn",
|
||||||
"pdf_invoice_date": "Ngày lập hóa đơn",
|
"pdf_invoice_date": "Ngày lập hóa đơn",
|
||||||
|
|||||||
@ -93,14 +93,14 @@
|
|||||||
"no_note_found": "沒有找到備註",
|
"no_note_found": "沒有找到備註",
|
||||||
"insert_note": "插入備註",
|
"insert_note": "插入備註",
|
||||||
"copied_pdf_url_clipboard": "複製PDF位址到剪貼簿!",
|
"copied_pdf_url_clipboard": "複製PDF位址到剪貼簿!",
|
||||||
"copied_url_clipboard": "Copied url to clipboard!",
|
"copied_url_clipboard": "將網址複製到剪貼簿!",
|
||||||
"docs": "文檔",
|
"docs": "文檔",
|
||||||
"do_you_wish_to_continue": "你確定要繼續?",
|
"do_you_wish_to_continue": "你確定要繼續?",
|
||||||
"note": "備註",
|
"note": "備註",
|
||||||
"pay_invoice": "Pay Invoice",
|
"pay_invoice": "支付發票",
|
||||||
"login_successfully": "Logged in successfully!",
|
"login_successfully": "已成功登入!",
|
||||||
"logged_out_successfully": "Logged out successfully",
|
"logged_out_successfully": "已成功登出",
|
||||||
"mark_as_default": "Mark as default"
|
"mark_as_default": "標記為預設值"
|
||||||
},
|
},
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
"select_year": "選擇年份",
|
"select_year": "選擇年份",
|
||||||
@ -109,7 +109,7 @@
|
|||||||
"customers": "客户",
|
"customers": "客户",
|
||||||
"invoices": "發票",
|
"invoices": "發票",
|
||||||
"estimates": "報價",
|
"estimates": "報價",
|
||||||
"payments": "Payments"
|
"payments": "付款"
|
||||||
},
|
},
|
||||||
"chart_info": {
|
"chart_info": {
|
||||||
"total_sales": "銷售",
|
"total_sales": "銷售",
|
||||||
@ -208,10 +208,10 @@
|
|||||||
"new_customer": "新客戶",
|
"new_customer": "新客戶",
|
||||||
"edit_customer": "編輯客戶",
|
"edit_customer": "編輯客戶",
|
||||||
"basic_info": "基本資料",
|
"basic_info": "基本資料",
|
||||||
"portal_access": "Portal Access",
|
"portal_access": "門戶訪問",
|
||||||
"portal_access_text": "Would you like to allow this customer to login to the Customer Portal?",
|
"portal_access_text": "您想允許此客戶登入客戶門戶嗎?",
|
||||||
"portal_access_url": "Customer Portal Login URL",
|
"portal_access_url": "客戶門戶登入URL",
|
||||||
"portal_access_url_help": "Please copy & forward the above given URL to your customer for providing access.",
|
"portal_access_url_help": "請將上述給定的URL複製並轉發給您的客戶以提供訪問許可權。",
|
||||||
"billing_address": "帳單地址",
|
"billing_address": "帳單地址",
|
||||||
"shipping_address": "送貨地址",
|
"shipping_address": "送貨地址",
|
||||||
"copy_billing_address": "由帳單複製",
|
"copy_billing_address": "由帳單複製",
|
||||||
@ -231,7 +231,7 @@
|
|||||||
"confirm_delete": "你將不能夠還原此客戶, 以及此客戶相關的發票, 報價及付款. | 你將不能夠還原此客戶, 以及此客戶相關的發票, 報價及付款.",
|
"confirm_delete": "你將不能夠還原此客戶, 以及此客戶相關的發票, 報價及付款. | 你將不能夠還原此客戶, 以及此客戶相關的發票, 報價及付款.",
|
||||||
"created_message": "成功新增客戶",
|
"created_message": "成功新增客戶",
|
||||||
"updated_message": "成功更新客戶",
|
"updated_message": "成功更新客戶",
|
||||||
"address_updated_message": "Address Information Updated succesfully",
|
"address_updated_message": "地址資訊已成功更新",
|
||||||
"deleted_message": "成功刪除客戶 | 成功刪除客戶",
|
"deleted_message": "成功刪除客戶 | 成功刪除客戶",
|
||||||
"edit_currency_not_allowed": "交易一旦創建後就不能改變貨幣!"
|
"edit_currency_not_allowed": "交易一旦創建後就不能改變貨幣!"
|
||||||
},
|
},
|
||||||
@ -265,8 +265,8 @@
|
|||||||
},
|
},
|
||||||
"estimates": {
|
"estimates": {
|
||||||
"title": "報價",
|
"title": "報價",
|
||||||
"accept_estimate": "Accept Estimate",
|
"accept_estimate": "接受估價",
|
||||||
"reject_estimate": "Reject Estimate",
|
"reject_estimate": "拒絕估算",
|
||||||
"estimate": "報價 | 報價",
|
"estimate": "報價 | 報價",
|
||||||
"estimates_list": "報價列表",
|
"estimates_list": "報價列表",
|
||||||
"days": "{days} 天",
|
"days": "{days} 天",
|
||||||
@ -318,10 +318,10 @@
|
|||||||
},
|
},
|
||||||
"accepted": "已接受",
|
"accepted": "已接受",
|
||||||
"rejected": "已拒絕",
|
"rejected": "已拒絕",
|
||||||
"expired": "Expired",
|
"expired": "已過期",
|
||||||
"sent": "傳送",
|
"sent": "傳送",
|
||||||
"draft": "草稿",
|
"draft": "草稿",
|
||||||
"viewed": "Viewed",
|
"viewed": "已檢視",
|
||||||
"declined": "拒絕",
|
"declined": "拒絕",
|
||||||
"new_estimate": "新報價",
|
"new_estimate": "新報價",
|
||||||
"add_new_estimate": "新增報價",
|
"add_new_estimate": "新增報價",
|
||||||
@ -355,14 +355,14 @@
|
|||||||
"select_an_item": "輸入或點擊去選擇商品",
|
"select_an_item": "輸入或點擊去選擇商品",
|
||||||
"type_item_description": "商品詳情(可選)"
|
"type_item_description": "商品詳情(可選)"
|
||||||
},
|
},
|
||||||
"mark_as_default_estimate_template_description": "If enabled, the selected template will be automatically selected for new estimates."
|
"mark_as_default_estimate_template_description": "如果啟用,所選模板將自動選擇新的估算。"
|
||||||
},
|
},
|
||||||
"invoices": {
|
"invoices": {
|
||||||
"title": "發票",
|
"title": "發票",
|
||||||
"download": "Download",
|
"download": "下載",
|
||||||
"pay_invoice": "Pay Invoice",
|
"pay_invoice": "支付發票",
|
||||||
"invoices_list": "發票列表",
|
"invoices_list": "發票列表",
|
||||||
"invoice_information": "Invoice Information",
|
"invoice_information": "發票資訊",
|
||||||
"days": "{days} 天",
|
"days": "{days} 天",
|
||||||
"months": "{months} 月",
|
"months": "{months} 月",
|
||||||
"years": "{years} 年",
|
"years": "{years} 年",
|
||||||
@ -447,7 +447,7 @@
|
|||||||
"marked_as_sent_message": "發票已標示為成功傳送",
|
"marked_as_sent_message": "發票已標示為成功傳送",
|
||||||
"something_went_wrong": "出現錯誤",
|
"something_went_wrong": "出現錯誤",
|
||||||
"invalid_due_amount_message": "發票總額不能少於支付總額. 請更新發票或刪除相關支付再繼續.",
|
"invalid_due_amount_message": "發票總額不能少於支付總額. 請更新發票或刪除相關支付再繼續.",
|
||||||
"mark_as_default_invoice_template_description": "If enabled, the selected template will be automatically selected for new invoices."
|
"mark_as_default_invoice_template_description": "如果啟用,所選模板將自動選擇新發票"
|
||||||
},
|
},
|
||||||
"recurring_invoices": {
|
"recurring_invoices": {
|
||||||
"title": "定期發票",
|
"title": "定期發票",
|
||||||
@ -464,11 +464,11 @@
|
|||||||
"completed": "已完成",
|
"completed": "已完成",
|
||||||
"customer": "客戶",
|
"customer": "客戶",
|
||||||
"paid_status": "付款狀態",
|
"paid_status": "付款狀態",
|
||||||
"ref_no": "REF NO.",
|
"ref_no": "參考號碼",
|
||||||
"number": "NUMBER",
|
"number": "號",
|
||||||
"amount_due": "AMOUNT DUE",
|
"amount_due": "到期金額",
|
||||||
"partially_paid": "Partially Paid",
|
"partially_paid": "部分支付",
|
||||||
"total": "Total",
|
"total": "總計",
|
||||||
"discount": "Discount",
|
"discount": "Discount",
|
||||||
"sub_total": "Sub Total",
|
"sub_total": "Sub Total",
|
||||||
"invoice": "Recurring Invoice | Recurring Invoices",
|
"invoice": "Recurring Invoice | Recurring Invoices",
|
||||||
@ -504,16 +504,16 @@
|
|||||||
"invoice_mark_as_sent": "This recurring invoice will be marked as sent",
|
"invoice_mark_as_sent": "This recurring invoice will be marked as sent",
|
||||||
"confirm_send": "This recurring invoice will be sent via email to the customer",
|
"confirm_send": "This recurring invoice will be sent via email to the customer",
|
||||||
"starts_at": "Start Date",
|
"starts_at": "Start Date",
|
||||||
"due_date": "Invoice Due Date",
|
"due_date": "發票到期日期",
|
||||||
"record_payment": "Record Payment",
|
"record_payment": "紀錄付款",
|
||||||
"add_new_invoice": "Add New Recurring Invoice",
|
"add_new_invoice": "添加定期發票",
|
||||||
"update_expense": "Update Expense",
|
"update_expense": "更新支出",
|
||||||
"edit_invoice": "Edit Recurring Invoice",
|
"edit_invoice": "編輯定期發票",
|
||||||
"new_invoice": "New Recurring Invoice",
|
"new_invoice": "添加定期發票",
|
||||||
"send_automatically": "Send Automatically",
|
"send_automatically": "自動發送",
|
||||||
"send_automatically_desc": "Enable this, if you would like to send the invoice automatically to the customer when its created.",
|
"send_automatically_desc": "如果您希望在建立發票時自動將發票發送給客戶,請啟用此選項。",
|
||||||
"save_invoice": "Save Recurring Invoice",
|
"save_invoice": "保存定期發票",
|
||||||
"update_invoice": "Update Recurring Invoice",
|
"update_invoice": "更新定期發票",
|
||||||
"add_new_tax": "Add New Tax",
|
"add_new_tax": "Add New Tax",
|
||||||
"no_invoices": "No Recurring Invoices yet!",
|
"no_invoices": "No Recurring Invoices yet!",
|
||||||
"mark_as_rejected": "Mark as rejected",
|
"mark_as_rejected": "Mark as rejected",
|
||||||
@ -1485,7 +1485,7 @@
|
|||||||
"pdf_estimate_label": "報價",
|
"pdf_estimate_label": "報價",
|
||||||
"pdf_estimate_number": "報價單號",
|
"pdf_estimate_number": "報價單號",
|
||||||
"pdf_estimate_date": "報價日期",
|
"pdf_estimate_date": "報價日期",
|
||||||
"pdf_estimate_expire_date": "有效日期",
|
"pdf_estimate_expire_date": "Expiry Date",
|
||||||
"pdf_invoice_label": "發票",
|
"pdf_invoice_label": "發票",
|
||||||
"pdf_invoice_number": "發票號碼",
|
"pdf_invoice_number": "發票號碼",
|
||||||
"pdf_invoice_date": "發票日期",
|
"pdf_invoice_date": "發票日期",
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user