Compare commits
34 Commits
2.1.0
...
frontend-p
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
697c1af065 | ||
|
|
70bfe1b688 | ||
|
|
d69a56e2d5 | ||
|
|
08e1bb2e22 | ||
|
|
29c15116bc | ||
|
|
8e96d3e972 | ||
|
|
bf0d98c69c | ||
|
|
73d4ac1eb1 | ||
|
|
e832c7661a | ||
|
|
b962bc9227 | ||
|
|
d70c04b841 | ||
|
|
6d14dce668 | ||
|
|
1ff220f0d8 | ||
|
|
2e77a76c7b | ||
|
|
bf5b544ca3 | ||
|
|
546f75d3a6 | ||
|
|
bf40f792c2 | ||
|
|
8a9392e400 | ||
|
|
14bfaff30b | ||
|
|
b32c334a71 | ||
|
|
2aa17513e1 | ||
|
|
ba243b28a9 | ||
|
|
1bb65f420c | ||
|
|
23a99758d2 | ||
|
|
139f8e2d13 | ||
|
|
ac1a582ecf | ||
|
|
6b168f36ec | ||
|
|
50b647e26e | ||
|
|
57776b7c7d | ||
|
|
8c343b4b92 | ||
|
|
a60cac3e66 | ||
|
|
6a0d3a3bcc | ||
|
|
8b49332453 | ||
|
|
8160b53689 |
@@ -2,12 +2,6 @@ FROM adminer:latest
|
||||
|
||||
USER root
|
||||
|
||||
RUN set -x && \
|
||||
apt update && \
|
||||
apt install curl -y && \
|
||||
cd /var/www/html/plugins-enabled && \
|
||||
curl -O https://gist.githubusercontent.com/gdarko/00af6e9a754f09c3f81cd3c606c33311/raw/d5f6a30f00edecf30a5d380340d9dae79a3b7352/login-password-less.php
|
||||
|
||||
USER adminer
|
||||
CMD [ "php", "-S", "[::]:8080", "-t", "/var/www/html" ]
|
||||
|
||||
|
||||
@@ -63,6 +63,11 @@ services:
|
||||
networks:
|
||||
- invoiceshelf-dev
|
||||
|
||||
pdf:
|
||||
image: gotenberg/gotenberg:8
|
||||
networks:
|
||||
- invoiceshelf-dev
|
||||
|
||||
networks:
|
||||
invoiceshelf-dev:
|
||||
|
||||
|
||||
@@ -62,6 +62,11 @@ services:
|
||||
networks:
|
||||
- invoiceshelf-dev
|
||||
|
||||
pdf:
|
||||
image: gotenberg/gotenberg:8
|
||||
networks:
|
||||
- invoiceshelf-dev
|
||||
|
||||
networks:
|
||||
invoiceshelf-dev:
|
||||
|
||||
|
||||
@@ -50,5 +50,10 @@ services:
|
||||
networks:
|
||||
- invoiceshelf-dev
|
||||
|
||||
pdf:
|
||||
image: gotenberg/gotenberg:8
|
||||
networks:
|
||||
- invoiceshelf-dev
|
||||
|
||||
networks:
|
||||
invoiceshelf-dev:
|
||||
|
||||
@@ -4,7 +4,7 @@ APP_DEBUG=true
|
||||
APP_NAME="InvoiceShelf"
|
||||
APP_LOG_LEVEL=debug
|
||||
APP_TIMEZONE=UTC
|
||||
APP_URL=http://invoiceshelf.test
|
||||
APP_URL=
|
||||
|
||||
APP_LOCALE=en
|
||||
APP_FALLBACK_LOCALE=en
|
||||
@@ -49,8 +49,11 @@ PUSHER_APP_ID=
|
||||
PUSHER_KEY=
|
||||
PUSHER_SECRET=
|
||||
|
||||
SANCTUM_STATEFUL_DOMAINS=invoiceshelf.test
|
||||
TRUSTED_PROXIES="*"
|
||||
|
||||
CRON_JOB_AUTH_TOKEN=""
|
||||
LOG_STACK=single
|
||||
|
||||
PDF_DRIVER=dompdf
|
||||
GOTENBERG_HOST=
|
||||
GOTENBERG_PAPERSIZE=
|
||||
|
||||
0
.eslintrc.mjs → .eslintrc.js
vendored
0
.eslintrc.mjs → .eslintrc.js
vendored
129
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
129
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -1,9 +1,8 @@
|
||||
name: Bug report
|
||||
description: Template for bug reports
|
||||
labels:
|
||||
- bug
|
||||
- triage
|
||||
projects: ["InvoiceShelf/2"]
|
||||
labels: ['bug', 'triage']
|
||||
type: Bug
|
||||
projects: ['InvoiceShelf/2']
|
||||
assignees:
|
||||
- rihards-simanovics
|
||||
|
||||
@@ -13,15 +12,15 @@ body:
|
||||
- type: checkboxes
|
||||
id: confirm-read-documentation
|
||||
attributes:
|
||||
label: Issue filing pre-requisites
|
||||
description: "Prior to filing an issue please confirm that:"
|
||||
label: Issue filing prerequisites
|
||||
description: 'Prior to filing an issue please confirm that:'
|
||||
options:
|
||||
- label: I've checked the documentation.
|
||||
- label: I've checked the [documentation](https://docs.invoiceshelf.com/).
|
||||
required: true
|
||||
- label: I've looked for similar issues both Open and Closed.
|
||||
required: true
|
||||
- label: >-
|
||||
Ive tried clearing both cache and cookies in my browser or tried
|
||||
I've tried clearing both cache and cookies in my browser or tried
|
||||
opening the app in the Incognito/InPrivate window.
|
||||
required: true
|
||||
|
||||
@@ -29,19 +28,19 @@ body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: >-
|
||||
If you did all of the above, we first would like to thank you for taking
|
||||
the time to fill out this bug report, it will help us tremendously to
|
||||
If you did all of the above, we would first like to thank you for taking
|
||||
the time to fill out this bug report. It will help us tremendously to
|
||||
find and fix the issue sooner!
|
||||
|
||||
# Description fo the bug
|
||||
# Description of the bug
|
||||
- type: textarea
|
||||
id: bug-description
|
||||
attributes:
|
||||
label: Describe the bug
|
||||
description: A clear and concise description of what the bug is.
|
||||
placeholder: >-
|
||||
When doing `x`, `y`, and `z` in that order, an error occurs, but when x,
|
||||
z and then y is done, the error does not occur.
|
||||
When doing `x`, `y`, and `z` in that order, an error occurs, but when `x`,
|
||||
`z` and then `y` is done, the error does not occur.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
@@ -53,34 +52,41 @@ body:
|
||||
description: A clear step-by-step explanation of how to reproduce your issue
|
||||
placeholder: >-
|
||||
## Produces an error:
|
||||
|
||||
1. Do X;
|
||||
|
||||
2. Do Y;
|
||||
|
||||
3. Do Z;
|
||||
|
||||
|
||||
## Works fine:
|
||||
|
||||
4. Do X;
|
||||
|
||||
5. Do Z;
|
||||
|
||||
6. Do Y.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
# Expected Behaviour
|
||||
- type: textarea
|
||||
id: expected-behavior
|
||||
id: expected-behaviour
|
||||
attributes:
|
||||
label: Expected behavior
|
||||
label: Expected behaviour
|
||||
description: A clear and concise description of what you expected to happen.
|
||||
placeholder: doing `x`, `y`, and `z` in that order should not generate an error.
|
||||
placeholder: Doing `x`, `y`, and `z` in that order should not generate an error.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
# Actual Behaviour
|
||||
- type: textarea
|
||||
id: actual-behavior
|
||||
id: actual-behaviour
|
||||
attributes:
|
||||
label: Actual behavior
|
||||
description: A clear and concise description of what actually happen.
|
||||
placeholder: doing `x`, `y`, and `z` in that order generate an error.
|
||||
label: Actual behaviour
|
||||
description: A clear and concise description of what actually happens.
|
||||
placeholder: Doing `x`, `y`, and `z` in that order generates an error.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
@@ -88,9 +94,19 @@ body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |-
|
||||
## Envirment
|
||||
## Environment
|
||||
|
||||
Now lets collect some information about your environment.
|
||||
Now let's collect some information about your environment.
|
||||
|
||||
# Use Docker?
|
||||
- type: checkboxes
|
||||
id: confirm-docker-install
|
||||
attributes:
|
||||
label: Docker
|
||||
description: 'Please note that unless the issue is with the app itself, you should file a bug report under the [docker](https://github.com/InvoiceShelf/docker) repository.'
|
||||
options:
|
||||
- label: App running in Docker Container.
|
||||
- label: Docker container running behind Reverse proxy.
|
||||
|
||||
# App Version
|
||||
- type: input
|
||||
@@ -115,7 +131,7 @@ body:
|
||||
id: database-type
|
||||
attributes:
|
||||
label: Database type
|
||||
placeholder: MariaDB / MySQL / PostreSQL / SQLite
|
||||
placeholder: MariaDB / MySQL / PostgreSQL / SQLite
|
||||
validations:
|
||||
required: true
|
||||
|
||||
@@ -133,14 +149,14 @@ body:
|
||||
id: web-browser
|
||||
attributes:
|
||||
label: Web Browser
|
||||
placeholder: "Firefox / Safari / or any other (chromium based browser)"
|
||||
placeholder: 'Firefox / Safari / or any other (Chromium-based browser)'
|
||||
|
||||
# OS Version
|
||||
- type: input
|
||||
id: server-os
|
||||
attributes:
|
||||
label: Server OS
|
||||
description: If Linux please make sure to provide both distro name and it's version
|
||||
description: If Linux, please make sure to provide both the distro name and its version
|
||||
placeholder: Windows / Linux (e.g. Ubuntu 24.04)
|
||||
|
||||
# Associated Logs
|
||||
@@ -150,7 +166,7 @@ body:
|
||||
## Logs
|
||||
|
||||
|
||||
last but not least, could you please take some time to get us the logs
|
||||
Last but not least, could you please take some time to get us the logs
|
||||
for:
|
||||
|
||||
# Log Reverse proxy
|
||||
@@ -162,21 +178,17 @@ body:
|
||||
Please provide logs from your Apache, Nginx, Traefik, or any other
|
||||
reverse proxy application.
|
||||
placeholder: >-
|
||||
[2015-02-04 10:00:00] production.INFO: Laravel 5.0 released. The world rejoices.
|
||||
[2015-12-03 12:00:00] production.INFO: PHP 7.0 introduced scalar type declarations. Minds blown.
|
||||
[2016-05-15 14:00:00] production.INFO: Composer installed new dependencies. Dependency hell avoided.
|
||||
[2017-08-20 16:00:00] production.INFO: Artisan command executed: migrate. Smooth sailing.
|
||||
[2018-01-10 09:00:00] production.INFO: User login successful.
|
||||
[2018-01-10 09:05:00] production.ERROR: Database connection failed. Did you try turning it off and on again?
|
||||
[2018-01-10 09:10:00] production.WARNING: Deprecated function used in UserController.php. Time to refactor, again.
|
||||
[2018-01-10 09:15:00] production.ERROR: Uncaught Exception: Division by zero. Oops, math is hard.
|
||||
[2018-01-10 09:20:00] production.INFO: User logout successful. See you later, alligator.
|
||||
[2019-03-25 11:00:00] production.INFO: Cache cleared. Fresh start!
|
||||
[2019-06-30 13:00:00] production.ERROR: Syntax error. Missing semicolon strikes again.
|
||||
[2020-09-10 15:00:00] production.INFO: User registered. Welcome aboard!
|
||||
[2021-11-05 17:00:00] production.WARNING: Low disk space. Time to clean up.
|
||||
[2022-12-20 19:00:00] production.INFO: Server rebooted. All systems go.
|
||||
[2024-11-14 18:56:20] production.INFO: Unexpected item in the bagging area. Please wait for assistance.
|
||||
2023-04-12 10:15:32 [NGINX] 172.16.0.5 - - [12/Apr/2023:10:15:32 +0000] "GET /index.html HTTP/1.1" 200 1024 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
|
||||
|
||||
2023-04-12 10:15:33 [NGINX] 172.16.0.7 - - [12/Apr/2023:10:15:33 +0000] "POST /login HTTP/1.1" 302 - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.8"
|
||||
|
||||
2023-04-12 10:15:34 [NGINX] 172.16.0.9 - - [12/Apr/2023:10:15:34 +0000] "GET /about HTTP/1.1" 200 2048 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
|
||||
|
||||
2023-04-12 10:15:35 [NGINX] 172.16.0.11 - - [12/Apr/2023:10:15:35 +0000] "PUT /api/v1/users/123 HTTP/1.1" 200 - "https://example.com/profile" "Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1"
|
||||
|
||||
2023-04-12 10:15:36 [NGINX] 172.16.0.13 - - [12/Apr/2023:10:15:36 +0000] "DELETE /api/v1/products/456 HTTP/1.1" 204 - "-" "Dalvik/2.1.0 (Linux; U; Android 10; Pixel 4 Build/QD1A.190821.014.C2)"
|
||||
|
||||
2023-04-12 10:15:37 [NGINX] 172.16.0.15 - - [12/Apr/2023:10:15:37 +0000] "GET /easter-egg HTTP/1.1" 200 42 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.3"
|
||||
render: irc logs
|
||||
|
||||
# PHP/Laravel Logs
|
||||
@@ -186,12 +198,35 @@ body:
|
||||
label: Laravel/PHP logs
|
||||
description: Please provide logs from either PHP or Laravel or both.
|
||||
placeholder: >-
|
||||
2023-04-12 10:15:32 [NGINX] 172.16.0.5 - - [12/Apr/2023:10:15:32 +0000] "GET /index.html HTTP/1.1" 200 1024 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
|
||||
2023-04-12 10:15:33 [NGINX] 172.16.0.7 - - [12/Apr/2023:10:15:33 +0000] "POST /login HTTP/1.1" 302 - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.8"
|
||||
2023-04-12 10:15:34 [NGINX] 172.16.0.9 - - [12/Apr/2023:10:15:34 +0000] "GET /about HTTP/1.1" 200 2048 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
|
||||
2023-04-12 10:15:35 [NGINX] 172.16.0.11 - - [12/Apr/2023:10:15:35 +0000] "PUT /api/v1/users/123 HTTP/1.1" 200 - "https://example.com/profile" "Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1"
|
||||
2023-04-12 10:15:36 [NGINX] 172.16.0.13 - - [12/Apr/2023:10:15:36 +0000] "DELETE /api/v1/products/456 HTTP/1.1" 204 - "-" "Dalvik/2.1.0 (Linux; U; Android 10; Pixel 4 Build/QD1A.190821.014.C2)"
|
||||
2023-04-12 10:15:37 [NGINX] 172.16.0.15 - - [12/Apr/2023:10:15:37 +0000] "GET /easter-egg HTTP/1.1" 200 42 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.3"
|
||||
[2015-02-04 10:00:00] production.INFO: Laravel 5.0 released. The world rejoices.
|
||||
|
||||
[2015-12-03 12:00:00] production.INFO: PHP 7.0 introduced scalar type declarations. Minds blown.
|
||||
|
||||
[2016-05-15 14:00:00] production.INFO: Composer installed new dependencies. Dependency hell avoided.
|
||||
|
||||
[2017-08-20 16:00:00] production.INFO: Artisan command executed: migrate. Smooth sailing.
|
||||
|
||||
[2018-01-10 09:00:00] production.INFO: User login successful.
|
||||
|
||||
[2018-01-10 09:05:00] production.ERROR: Database connection failed. Did you try turning it off and on again?
|
||||
|
||||
[2018-01-10 09:10:00] production.WARNING: Deprecated function used in UserController.php. Time to refactor, again.
|
||||
|
||||
[2018-01-10 09:15:00] production.ERROR: Uncaught Exception: Division by zero. Oops, maths is hard.
|
||||
|
||||
[2018-01-10 09:20:00] production.INFO: User logout successful. See you later, alligator.
|
||||
|
||||
[2019-03-25 11:00:00] production.INFO: Cache cleared. Fresh start!
|
||||
|
||||
[2019-06-30 13:00:00] production.ERROR: Syntax error. Missing semicolon strikes again.
|
||||
|
||||
[2020-09-10 15:00:00] production.INFO: User registered. Welcome aboard!
|
||||
|
||||
[2021-11-05 17:00:00] production.WARNING: Low disk space. Time to clean up.
|
||||
|
||||
[2022-12-20 19:00:00] production.INFO: Server rebooted. All systems go.
|
||||
|
||||
[2024-11-14 18:56:20] production.INFO: Unexpected item in the bagging area. Please wait for assistance.
|
||||
render: irc logs
|
||||
|
||||
# Special thanks
|
||||
|
||||
39
.github/ISSUE_TEMPLATE/code_quality_issue.yml
vendored
39
.github/ISSUE_TEMPLATE/code_quality_issue.yml
vendored
@@ -5,7 +5,7 @@ description: Create a code quality issue to help InvoiceShelf keep a clean codeb
|
||||
labels:
|
||||
- code quality
|
||||
- triage
|
||||
projects: ["InvoiceShelf/2"]
|
||||
projects: ['InvoiceShelf/2']
|
||||
assignees:
|
||||
- rihards-simanovics
|
||||
|
||||
@@ -20,6 +20,23 @@ body:
|
||||
possibility your suggestion is already being tracked. Please do a
|
||||
thorough search before creating a new issue.
|
||||
|
||||
# Ask user to confirm they've tried to fix or research the issue before
|
||||
# posting a bug report.
|
||||
- type: checkboxes
|
||||
id: confirm-read-documentation
|
||||
attributes:
|
||||
label: Issue filing prerequisites
|
||||
description: 'Prior to filing an issue please confirm that:'
|
||||
options:
|
||||
- label: I've checked the [documentation](https://docs.invoiceshelf.com/).
|
||||
required: true
|
||||
- label: I've looked for similar issues both Open and Closed.
|
||||
required: true
|
||||
- label: >-
|
||||
I've tried clearing both cache and cookies in my browser or tried
|
||||
opening the app in the Incognito/InPrivate window.
|
||||
required: true
|
||||
|
||||
# Issue body
|
||||
- type: textarea
|
||||
id: description
|
||||
@@ -45,10 +62,12 @@ body:
|
||||
attributes:
|
||||
label: Gains
|
||||
description: What would fixing this code quality issue bring to the source code?
|
||||
value: |
|
||||
- eg. A better readability.
|
||||
- eg. Uncoupling concepts X and Y.
|
||||
- eg. Clarifying the responsibility of class C.
|
||||
placeholder: >-
|
||||
- e.g. Better readability.
|
||||
|
||||
- e.g. Uncoupling concepts X and Y.
|
||||
|
||||
- e.g. Clarifying the responsibility of class C.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
@@ -58,10 +77,12 @@ body:
|
||||
attributes:
|
||||
label: Requirements
|
||||
description: Describe all the requirements to solve the code quality issue.
|
||||
value: |
|
||||
- eg. Using a specific design pattern.
|
||||
- eg. Separating Interface I into three new interfaces I1, I2 and I3.
|
||||
- eg. Regrouping the duplicated process into a new helper.
|
||||
placeholder: >-
|
||||
- e.g. Using a specific design pattern.
|
||||
|
||||
- e.g. Separating Interface I into three new interfaces I1, I2 and I3.
|
||||
|
||||
- e.g. Regrouping the duplicated process into a new helper.
|
||||
|
||||
# Remarks
|
||||
- type: textarea
|
||||
|
||||
2
.github/ISSUE_TEMPLATE/config.yml
vendored
2
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -6,6 +6,6 @@ contact_links:
|
||||
- name: Translation issue
|
||||
url: https://crowdin.com/project/invoiceshelf
|
||||
about: Help improve translations on Crowdin.
|
||||
- name: Question & Discussion
|
||||
- name: Support, Question & Discussion - Official Discord Server
|
||||
url: https://discord.gg/hwg2FtwWHW
|
||||
about: Post your questions and join the discussion. You can participate in chats on every channel.
|
||||
|
||||
30
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
30
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
@@ -4,7 +4,8 @@ name: Feature Request
|
||||
labels:
|
||||
- feature request
|
||||
- triage
|
||||
projects: ["InvoiceShelf/2"]
|
||||
type: Feature
|
||||
projects: ['InvoiceShelf/2']
|
||||
assignees:
|
||||
- rihards-simanovics
|
||||
description: >-
|
||||
@@ -21,12 +22,31 @@ body:
|
||||
your suggestion is already being tracked. Please do a thorough search
|
||||
before creating a new issue.
|
||||
|
||||
# Ask user to confirm they've tried to fix or research the issue before
|
||||
# posting a bug report.
|
||||
- type: checkboxes
|
||||
id: confirm-read-documentation
|
||||
attributes:
|
||||
label: Issue filing prerequisites
|
||||
description: 'Prior to filing an issue please confirm that:'
|
||||
options:
|
||||
- label: I've checked the [documentation](https://docs.invoiceshelf.com/).
|
||||
required: true
|
||||
- label: I've looked for similar issues with feature requests both Open and Closed.
|
||||
required: true
|
||||
- label: >-
|
||||
I've tried clearing both cache and cookies in my browser or tried
|
||||
opening the app in the Incognito/InPrivate window.
|
||||
required: true
|
||||
|
||||
# Description
|
||||
- type: textarea
|
||||
id: what-feature
|
||||
attributes:
|
||||
label: What feature or improvement do you think would benefit InvoiceShelf?
|
||||
description: Please include your use case
|
||||
placeholder: >-
|
||||
I propose that feature J be implemented as I believe it will greatly benefit the application.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
@@ -37,7 +57,7 @@ body:
|
||||
---
|
||||
|
||||
|
||||
Please include a list changes required to make this improvement. A good
|
||||
Please include a list of changes required to make this improvement. A good
|
||||
rule of thumb is to start your proposal with no more than 7 high-level
|
||||
requirements.
|
||||
|
||||
@@ -47,9 +67,11 @@ body:
|
||||
attributes:
|
||||
label: Requirements
|
||||
description: Describe all the requirements to make your idea happen.
|
||||
value: |
|
||||
placeholder: >-
|
||||
- This proposal will accomplish X
|
||||
|
||||
- This proposal will accomplish Y
|
||||
|
||||
- This proposal will accomplish Z
|
||||
validations:
|
||||
required: true
|
||||
@@ -59,7 +81,7 @@ body:
|
||||
id: invoiceshelf_version
|
||||
attributes:
|
||||
label: App Version
|
||||
description: Which version of InvoiceShelf are you using?
|
||||
description: Which version of InvoiceShelf are you currently using?
|
||||
placeholder: v0.0.0
|
||||
validations:
|
||||
required: true
|
||||
|
||||
17
.github/PULL_REQUEST_TEMPLATE/pull_request_template.md
vendored
Normal file
17
.github/PULL_REQUEST_TEMPLATE/pull_request_template.md
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
## Pre-review request checklist
|
||||
|
||||
- [ ] (\*) I have listed all changes in the `Changes` section.
|
||||
- [ ] (opt) I have listed all issues this PR addresses in the `Issues` section [with the issue/discussion IDs](https://docs.github.com/en/issues/tracking-your-work-with-issues/using-issues/linking-a-pull-request-to-an-issue).
|
||||
- [ ] (\*) I have tested my changes.
|
||||
- [ ] (\*) I have considered backwards compatibility.
|
||||
|
||||
## Changes
|
||||
|
||||
- Added feature X
|
||||
- Removed Code Y
|
||||
- Refactored code Z
|
||||
|
||||
## Issues
|
||||
|
||||
- fixes #
|
||||
- closes #
|
||||
11
.github/workflows/check.yaml
vendored
11
.github/workflows/check.yaml
vendored
@@ -40,7 +40,7 @@ jobs:
|
||||
- name: Set up PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: 8.2
|
||||
php-version: 8.3
|
||||
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
@@ -61,12 +61,13 @@ jobs:
|
||||
php-version:
|
||||
- 8.2
|
||||
- 8.3
|
||||
- 8.4
|
||||
env:
|
||||
extensions: bcmath, curl, dom, gd, imagick, json, libxml, mbstring, pcntl, pdo, pdo_mysql, zip
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup PHP Action
|
||||
uses: shivammathur/setup-php@v2
|
||||
@@ -80,7 +81,7 @@ jobs:
|
||||
uses: ramsey/composer-install@v2
|
||||
|
||||
- name: Use Node.js 20
|
||||
uses: actions/setup-node@v3
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
@@ -104,7 +105,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
@@ -119,7 +120,7 @@ jobs:
|
||||
composer-options: --no-dev
|
||||
|
||||
- name: Use Node.js 20
|
||||
uses: actions/setup-node@v3
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use App\Models\Setting;
|
||||
use App\Space\Updater;
|
||||
use Illuminate\Console\Command;
|
||||
|
||||
@@ -98,7 +97,7 @@ class UpdateCommand extends Command
|
||||
|
||||
public function getInstalledVersion()
|
||||
{
|
||||
return Setting::getSetting('version');
|
||||
return preg_replace('~[\r\n]+~', '', File::get(base_path('version.md')));
|
||||
}
|
||||
|
||||
public function getLatestVersionResponse()
|
||||
|
||||
16
app/Facades/PDF.php
Normal file
16
app/Facades/PDF.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Facades;
|
||||
|
||||
use Illuminate\Support\Facades\Facade;
|
||||
|
||||
/**
|
||||
* @method static \Psr\Http\Message\ResponseInterface loadView(string $template)
|
||||
*/
|
||||
class PDF extends Facade
|
||||
{
|
||||
protected static function getFacadeAccessor()
|
||||
{
|
||||
return 'pdf.driver';
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Setting;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\File;
|
||||
|
||||
class AppVersionController extends Controller
|
||||
{
|
||||
@@ -14,7 +15,7 @@ class AppVersionController extends Controller
|
||||
*/
|
||||
public function __invoke(Request $request)
|
||||
{
|
||||
$version = Setting::getSetting('version');
|
||||
$version = preg_replace('~[\r\n]+~', '', File::get(base_path('version.md')));
|
||||
|
||||
$channel = Setting::getSetting('updater_channel');
|
||||
if (is_null($channel)) {
|
||||
|
||||
@@ -41,6 +41,15 @@ class NotesController extends Controller
|
||||
|
||||
$note = Note::create($request->getNotesPayload());
|
||||
|
||||
if ($note->is_default) {
|
||||
Note::where('id', '!=', $note->id)
|
||||
->where('type', $note->type)
|
||||
->where('is_default', true)
|
||||
->update([
|
||||
'is_default' => false,
|
||||
]);
|
||||
}
|
||||
|
||||
return new NoteResource($note);
|
||||
}
|
||||
|
||||
@@ -68,6 +77,15 @@ class NotesController extends Controller
|
||||
|
||||
$note->update($request->getNotesPayload());
|
||||
|
||||
if ($note->is_default) {
|
||||
Note::where('id', '!=', $note->id)
|
||||
->where('type', $note->type)
|
||||
->where('is_default', true)
|
||||
->update([
|
||||
'is_default' => false,
|
||||
]);
|
||||
}
|
||||
|
||||
return new NoteResource($note);
|
||||
}
|
||||
|
||||
|
||||
@@ -58,6 +58,7 @@ class MailConfigurationController extends Controller
|
||||
'mail_mailgun_secret' => config('services.mailgun.secret'),
|
||||
'mail_ses_key' => config('services.ses.key'),
|
||||
'mail_ses_secret' => config('services.ses.secret'),
|
||||
'mail_ses_region' => config('services.ses.region'),
|
||||
];
|
||||
|
||||
return response()->json($MailData);
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\V1\Admin\Settings;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\PDFConfigurationRequest;
|
||||
use App\Space\EnvironmentManager;
|
||||
|
||||
class PDFConfigurationController extends Controller
|
||||
{
|
||||
/**
|
||||
* @var EnvironmentManager
|
||||
*/
|
||||
protected $environmentManager;
|
||||
|
||||
public function __construct(EnvironmentManager $environmentManager)
|
||||
{
|
||||
$this->environmentManager = $environmentManager;
|
||||
}
|
||||
|
||||
public function getDrivers()
|
||||
{
|
||||
$this->authorize('manage pdf config');
|
||||
|
||||
$drivers = [
|
||||
'dompdf',
|
||||
'gotenberg',
|
||||
];
|
||||
|
||||
return response()->json($drivers);
|
||||
}
|
||||
|
||||
public function getEnvironment()
|
||||
{
|
||||
$this->authorize('manage pdf config');
|
||||
|
||||
$config = [
|
||||
'pdf_driver' => config('pdf.driver'),
|
||||
'gotenberg_host' => config('pdf.gotenberg.host'),
|
||||
'gotenberg_margins' => config('pdf.gotenberg.margins'),
|
||||
'gotenberg_papersize' => config('pdf.gotenberg.papersize'),
|
||||
];
|
||||
|
||||
return response()->json($config);
|
||||
}
|
||||
|
||||
public function saveEnvironment(PDFConfigurationRequest $request)
|
||||
{
|
||||
$this->authorize('manage pdf config');
|
||||
$results = $this->environmentManager->savePDFVariables($request);
|
||||
|
||||
return response()->json($results);
|
||||
}
|
||||
}
|
||||
@@ -3,9 +3,9 @@
|
||||
namespace App\Http\Controllers\V1\Admin\Update;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Setting;
|
||||
use App\Space\Updater;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\File;
|
||||
|
||||
class CheckVersionController extends Controller
|
||||
{
|
||||
@@ -26,7 +26,8 @@ class CheckVersionController extends Controller
|
||||
set_time_limit(600); // 10 minutes
|
||||
|
||||
$channel = $request->get('channel', 'stable');
|
||||
$response = Updater::checkForUpdate(Setting::getSetting('version'), $channel);
|
||||
$version = preg_replace('~[\r\n]+~', '', File::get(base_path('version.md')));
|
||||
$response = Updater::checkForUpdate($version, $channel);
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
@@ -29,7 +29,10 @@ class DatabaseConfigurationController extends Controller
|
||||
$results = $this->environmentManager->saveDatabaseVariables($request);
|
||||
|
||||
if (array_key_exists('success', $results)) {
|
||||
Artisan::call('key:generate --force');
|
||||
// Automatically regenerating the key is disabled to prevent complications in the wizard process.
|
||||
// This can cause issues with the CSRF token, resulting in "Token Mismatch" or "Invalid CSRF Token" errors.
|
||||
// It is recommended that the user manually generates the key before running the wizard to ensure application security and stability.
|
||||
// Artisan::call('key:generate --force');
|
||||
Artisan::call('optimize:clear');
|
||||
Artisan::call('config:clear');
|
||||
Artisan::call('cache:clear');
|
||||
|
||||
@@ -33,6 +33,9 @@ class NotesRequest extends FormRequest
|
||||
'notes' => [
|
||||
'required',
|
||||
],
|
||||
'is_default' => [
|
||||
'required',
|
||||
],
|
||||
];
|
||||
|
||||
if ($this->isMethod('PUT')) {
|
||||
|
||||
57
app/Http/Requests/PDFConfigurationRequest.php
Normal file
57
app/Http/Requests/PDFConfigurationRequest.php
Normal file
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class PDFConfigurationRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*/
|
||||
public function authorize(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
switch ($this->get('pdf_driver')) {
|
||||
case 'dompdf':
|
||||
return [
|
||||
'pdf_driver' => [
|
||||
'required',
|
||||
'string',
|
||||
],
|
||||
];
|
||||
break;
|
||||
|
||||
case 'gotenberg':
|
||||
return [
|
||||
'pdf_driver' => [
|
||||
'required',
|
||||
'string',
|
||||
],
|
||||
'gotenberg_host' => [
|
||||
'required',
|
||||
'url',
|
||||
],
|
||||
'gotenberg_papersize' => [
|
||||
function ($attribute, $value, $fail) {
|
||||
($attribute); // unused
|
||||
$reg = "/^\d+(pt|px|pc|mm|cm|in) \d+(pt|px|pc|mm|cm|in)$/";
|
||||
if (! preg_match($reg, $value)) {
|
||||
$fail('Invalid papersize, must be in format "210mm 297mm". Accepts: pt,px,pc,mm,cm,in');
|
||||
}
|
||||
},
|
||||
],
|
||||
];
|
||||
|
||||
break;
|
||||
}
|
||||
throw new \InvalidArgumentException('Invalid PDFDriver requested');
|
||||
}
|
||||
}
|
||||
@@ -28,8 +28,17 @@ class TaxTypeRequest extends FormRequest
|
||||
->where('type', TaxType::TYPE_GENERAL)
|
||||
->where('company_id', $this->header('company')),
|
||||
],
|
||||
'percent' => [
|
||||
'calculation_type' => [
|
||||
'required',
|
||||
Rule::in(['percentage', 'fixed']),
|
||||
],
|
||||
'percent' => [
|
||||
'nullable',
|
||||
'numeric',
|
||||
],
|
||||
'fixed_amount' => [
|
||||
'nullable',
|
||||
'numeric',
|
||||
],
|
||||
'description' => [
|
||||
'nullable',
|
||||
|
||||
@@ -21,6 +21,7 @@ class EstimateResource extends JsonResource
|
||||
'status' => $this->status,
|
||||
'reference_number' => $this->reference_number,
|
||||
'tax_per_item' => $this->tax_per_item,
|
||||
'tax_included' => $this->tax_included,
|
||||
'discount_per_item' => $this->discount_per_item,
|
||||
'notes' => $this->getNotes(),
|
||||
'discount' => $this->discount,
|
||||
|
||||
@@ -22,6 +22,7 @@ class InvoiceResource extends JsonResource
|
||||
'status' => $this->status,
|
||||
'paid_status' => $this->paid_status,
|
||||
'tax_per_item' => $this->tax_per_item,
|
||||
'tax_included' => $this->tax_included,
|
||||
'discount_per_item' => $this->discount_per_item,
|
||||
'notes' => $this->notes,
|
||||
'discount_type' => $this->discount_type,
|
||||
|
||||
@@ -18,6 +18,7 @@ class NoteResource extends JsonResource
|
||||
'type' => $this->type,
|
||||
'name' => $this->name,
|
||||
'notes' => $this->notes,
|
||||
'is_default' => $this->is_default,
|
||||
'company' => $this->when($this->company()->exists(), function () {
|
||||
return new CompanyResource($this->company);
|
||||
}),
|
||||
|
||||
@@ -32,6 +32,7 @@ class RecurringInvoiceResource extends JsonResource
|
||||
'limit_date' => $this->limit_date,
|
||||
'exchange_rate' => $this->exchange_rate,
|
||||
'tax_per_item' => $this->tax_per_item,
|
||||
'tax_included' => $this->tax_included,
|
||||
'discount_per_item' => $this->discount_per_item,
|
||||
'notes' => $this->notes,
|
||||
'discount_type' => $this->discount_type,
|
||||
|
||||
@@ -25,6 +25,8 @@ class TaxResource extends JsonResource
|
||||
'name' => $this->name,
|
||||
'amount' => $this->amount,
|
||||
'percent' => $this->percent,
|
||||
'calculation_type' => $this->calculation_type,
|
||||
'fixed_amount' => $this->fixed_amount,
|
||||
'compound_tax' => $this->compound_tax,
|
||||
'base_amount' => $this->base_amount,
|
||||
'currency_id' => $this->currency_id,
|
||||
|
||||
@@ -17,6 +17,8 @@ class TaxTypeResource extends JsonResource
|
||||
'id' => $this->id,
|
||||
'name' => $this->name,
|
||||
'percent' => $this->percent,
|
||||
'fixed_amount' => $this->fixed_amount,
|
||||
'calculation_type' => $this->calculation_type,
|
||||
'type' => $this->type,
|
||||
'compound_tax' => $this->compound_tax,
|
||||
'collective_tax' => $this->collective_tax,
|
||||
|
||||
@@ -8,6 +8,7 @@ use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Foundation\Bus\Dispatchable;
|
||||
use Illuminate\Queue\InteractsWithQueue;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use Spatie\Backup\Config\Config;
|
||||
use Spatie\Backup\Tasks\Backup\BackupJobFactory;
|
||||
|
||||
class CreateBackupJob implements ShouldQueue
|
||||
@@ -41,7 +42,8 @@ class CreateBackupJob implements ShouldQueue
|
||||
|
||||
config(['backup.backup.destination.disks' => [$prefix.$fileDisk->driver]]);
|
||||
|
||||
$backupJob = BackupJobFactory::createFromArray(config('backup'));
|
||||
$config = Config::fromArray(config('backup'));
|
||||
$backupJob = BackupJobFactory::createFromConfig($config);
|
||||
if (! defined('SIGINT')) {
|
||||
$backupJob->disableSignals();
|
||||
}
|
||||
|
||||
@@ -3,12 +3,12 @@
|
||||
namespace App\Models;
|
||||
|
||||
use App;
|
||||
use App\Facades\PDF;
|
||||
use App\Mail\SendEstimateMail;
|
||||
use App\Services\SerialNumberFormatter;
|
||||
use App\Space\PdfTemplateUtils;
|
||||
use App\Traits\GeneratesPdfTrait;
|
||||
use App\Traits\HasCustomFieldsTrait;
|
||||
use Barryvdh\DomPDF\Facade\Pdf as PDF;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
@@ -3,12 +3,12 @@
|
||||
namespace App\Models;
|
||||
|
||||
use App;
|
||||
use App\Facades\PDF;
|
||||
use App\Mail\SendInvoiceMail;
|
||||
use App\Services\SerialNumberFormatter;
|
||||
use App\Space\PdfTemplateUtils;
|
||||
use App\Traits\GeneratesPdfTrait;
|
||||
use App\Traits\HasCustomFieldsTrait;
|
||||
use Barryvdh\DomPDF\Facade\Pdf as PDF;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
@@ -521,6 +521,7 @@ class Invoice extends Model implements HasMedia
|
||||
|
||||
public static function createTaxes($invoice, $taxes)
|
||||
{
|
||||
|
||||
$exchange_rate = $invoice->exchange_rate;
|
||||
|
||||
foreach ($taxes as $tax) {
|
||||
|
||||
@@ -459,7 +459,7 @@ class Payment extends Model implements HasMedia
|
||||
->setNextNumbers();
|
||||
|
||||
$data['payment_number'] = $serial->getNextNumber();
|
||||
$data['payment_date'] = Carbon::now()->format('y-m-d');
|
||||
$data['payment_date'] = Carbon::now();
|
||||
$data['amount'] = $invoice->total;
|
||||
$data['invoice_id'] = $invoice->id;
|
||||
$data['payment_method_id'] = request()->payment_method_id;
|
||||
|
||||
@@ -21,6 +21,7 @@ class Tax extends Model
|
||||
return [
|
||||
'amount' => 'integer',
|
||||
'percent' => 'float',
|
||||
'fixed_amount' => 'integer',
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ class TaxType extends Model
|
||||
{
|
||||
return [
|
||||
'percent' => 'float',
|
||||
'fixed_amount' => 'integer',
|
||||
'compound_tax' => 'boolean',
|
||||
];
|
||||
}
|
||||
|
||||
@@ -46,6 +46,15 @@ class SettingsPolicy
|
||||
return false;
|
||||
}
|
||||
|
||||
public function managePDFConfig(User $user)
|
||||
{
|
||||
if ($user->isOwner()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function manageSettings(User $user)
|
||||
{
|
||||
if ($user->isOwner()) {
|
||||
|
||||
@@ -127,6 +127,7 @@ class AppServiceProvider extends ServiceProvider
|
||||
Gate::define('manage backups', [SettingsPolicy::class, 'manageBackups']);
|
||||
Gate::define('manage file disk', [SettingsPolicy::class, 'manageFileDisk']);
|
||||
Gate::define('manage email config', [SettingsPolicy::class, 'manageEmailConfig']);
|
||||
Gate::define('manage pdf config', [SettingsPolicy::class, 'managePDFConfig']);
|
||||
Gate::define('manage notes', [NotePolicy::class, 'manageNotes']);
|
||||
Gate::define('view notes', [NotePolicy::class, 'viewNotes']);
|
||||
|
||||
|
||||
13
app/Providers/PDFServiceProvider.php
Normal file
13
app/Providers/PDFServiceProvider.php
Normal file
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use App\Services\PDFService;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
|
||||
class PDFServiceProvider extends ServiceProvider
|
||||
{
|
||||
public $bindings = [
|
||||
'pdf.driver' => PDFService::class,
|
||||
];
|
||||
}
|
||||
59
app/Services/PDFDrivers/GotenbergPDFDriver.php
Normal file
59
app/Services/PDFDrivers/GotenbergPDFDriver.php
Normal file
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\PDFDrivers;
|
||||
|
||||
use Gotenberg\Gotenberg;
|
||||
use Gotenberg\Stream;
|
||||
use Illuminate\Http\Response;
|
||||
|
||||
class GotenbergPDFResponse
|
||||
{
|
||||
/** @var \Psr\Http\Message\ResponseInterface */
|
||||
protected $response;
|
||||
|
||||
public function __construct($stream)
|
||||
{
|
||||
$this->response = $stream;
|
||||
}
|
||||
|
||||
public function stream(string $filename = 'document.pdf'): Response
|
||||
{
|
||||
$output = $this->response->getBody();
|
||||
|
||||
return new Response($output, 200, [
|
||||
'Content-Type' => 'application/pdf',
|
||||
'Content-Disposition' => 'inline; filename="'.$filename.'"',
|
||||
]);
|
||||
}
|
||||
|
||||
public function output(): string
|
||||
{
|
||||
return $this->response->getBody()->getContents();
|
||||
}
|
||||
}
|
||||
|
||||
class GotenbergPDFDriver
|
||||
{
|
||||
public function loadView(string $viewname): GotenbergPDFResponse
|
||||
{
|
||||
$papersize = explode(' ', config('pdf.gotenberg.papersize'));
|
||||
if (count($papersize) != 2) {
|
||||
throw new \InvalidArgumentException('Invalid Gotenberg Papersize specified');
|
||||
}
|
||||
|
||||
$host = config('pdf.gotenberg.host');
|
||||
$request = Gotenberg::chromium($host)
|
||||
->pdf()
|
||||
->margins(0, 0, 0, 0) // Margins can be set using CSS
|
||||
->paperSize($papersize[0], $papersize[1])
|
||||
->html(
|
||||
Stream::string(
|
||||
'document.html',
|
||||
view($viewname)->render(),
|
||||
)
|
||||
);
|
||||
$result = Gotenberg::send($request);
|
||||
|
||||
return new GotenbergPDFResponse($result);
|
||||
}
|
||||
}
|
||||
47
app/Services/PDFService.php
Normal file
47
app/Services/PDFService.php
Normal file
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
/*
|
||||
* Two options:
|
||||
* - Barryvdh\DomPDF\Facade\Pdf
|
||||
* - Gotenberg
|
||||
*/
|
||||
|
||||
use App;
|
||||
use App\Services\PDFDrivers\GotenbergPDFDriver;
|
||||
use Illuminate\Http\Response;
|
||||
|
||||
interface ResponseStream
|
||||
{
|
||||
public function stream(string $filename): Response;
|
||||
|
||||
public function output(): string;
|
||||
}
|
||||
|
||||
interface PDFDriver
|
||||
{
|
||||
public function loadView(string $template): ResponseStream;
|
||||
}
|
||||
|
||||
class PDFDriverFactory
|
||||
{
|
||||
public static function create(string $driver)
|
||||
{
|
||||
return match ($driver) {
|
||||
'dompdf' => App::make('dompdf.wrapper'),
|
||||
'gotenberg' => new GotenbergPDFDriver,
|
||||
default => throw new \InvalidArgumentException('Invalid PDFDriver requested')
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
class PDFService
|
||||
{
|
||||
public static function loadView(string $template)
|
||||
{
|
||||
$driver = config('pdf.driver');
|
||||
|
||||
return PDFDriverFactory::create($driver)->loadView($template);
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,7 @@ use App\Http\Requests\DatabaseEnvironmentRequest;
|
||||
use App\Http\Requests\DiskEnvironmentRequest;
|
||||
use App\Http\Requests\DomainEnvironmentRequest;
|
||||
use App\Http\Requests\MailEnvironmentRequest;
|
||||
use App\Http\Requests\PDFConfigurationRequest;
|
||||
use Exception;
|
||||
use Illuminate\Support\Facades\Artisan;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
@@ -94,7 +95,6 @@ class EnvironmentManager
|
||||
}
|
||||
|
||||
return $str;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -104,14 +104,22 @@ class EnvironmentManager
|
||||
*/
|
||||
public function saveDatabaseVariables(DatabaseEnvironmentRequest $request)
|
||||
{
|
||||
$appUrl = $request->get('app_url');
|
||||
if ($appUrl !== config('app.url')) {
|
||||
config(['app.url' => $appUrl]);
|
||||
}
|
||||
[$sanctumDomain, $sessionDomain] = $this->getDomains(
|
||||
$request->getHttpHost()
|
||||
);
|
||||
$dbEnv = [
|
||||
'APP_URL' => $request->get('app_url'),
|
||||
'APP_URL' => $appUrl,
|
||||
'APP_LOCALE' => $request->get('app_locale'),
|
||||
'DB_CONNECTION' => $request->get('database_connection'),
|
||||
'SANCTUM_STATEFUL_DOMAINS' => $request->get('app_domain'),
|
||||
'SESSION_DOMAIN' => explode(':', $request->get('app_domain'))[0],
|
||||
'SESSION_DOMAIN' => $sessionDomain,
|
||||
];
|
||||
|
||||
if ($sanctumDomain !== null) {
|
||||
$dbEnv['SANCTUM_STATEFUL_DOMAINS'] = $sanctumDomain;
|
||||
}
|
||||
if ($dbEnv['DB_CONNECTION'] != 'sqlite') {
|
||||
if ($request->has('database_username') && $request->has('database_password')) {
|
||||
$dbEnv['DB_HOST'] = $request->get('database_hostname');
|
||||
@@ -225,7 +233,6 @@ class EnvironmentManager
|
||||
try {
|
||||
|
||||
$this->updateEnv($mailEnv);
|
||||
|
||||
} catch (Exception $e) {
|
||||
return [
|
||||
'error' => 'mail_variables_save_error',
|
||||
@@ -237,6 +244,60 @@ class EnvironmentManager
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the pdf generation content to the .env file.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function savePDFVariables(PDFConfigurationRequest $request)
|
||||
{
|
||||
$pdfEnv = $this->getPDFConfiguration($request);
|
||||
|
||||
try {
|
||||
|
||||
$this->updateEnv($pdfEnv);
|
||||
} catch (Exception $e) {
|
||||
return [
|
||||
'error' => 'pdf_variables_save_error',
|
||||
];
|
||||
}
|
||||
|
||||
return [
|
||||
'success' => 'pdf_variables_save_successfully',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the pdf configuration
|
||||
*
|
||||
* @param PDFConfigurationRequest $request
|
||||
* @return array
|
||||
*/
|
||||
private function getPDFConfiguration($request)
|
||||
{
|
||||
$pdfEnv = [];
|
||||
|
||||
$driver = $request->get('pdf_driver');
|
||||
|
||||
switch ($driver) {
|
||||
case 'dompdf':
|
||||
$pdfEnv = [
|
||||
'PDF_DRIVER' => $request->get('pdf_driver'),
|
||||
];
|
||||
break;
|
||||
case 'gotenberg':
|
||||
$pdfEnv = [
|
||||
'PDF_DRIVER' => $request->get('pdf_driver'),
|
||||
'GOTENBERG_HOST' => $request->get('gotenberg_host'),
|
||||
'GOTENBERG_MARGINS' => $request->get('gotenberg_margins'),
|
||||
'GOTENBERG_PAPERSIZE' => $request->get('gotenberg_papersize'),
|
||||
];
|
||||
break;
|
||||
}
|
||||
|
||||
return $pdfEnv;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the mail configuration
|
||||
*
|
||||
@@ -296,6 +357,7 @@ class EnvironmentManager
|
||||
'MAIL_FROM_NAME' => $request->get('from_name'),
|
||||
'SES_KEY' => $request->get('mail_ses_key'),
|
||||
'SES_SECRET' => $request->get('mail_ses_secret'),
|
||||
'SES_REGION' => $request->get('mail_ses_region'),
|
||||
];
|
||||
|
||||
break;
|
||||
@@ -315,7 +377,6 @@ class EnvironmentManager
|
||||
];
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
return $mailEnv;
|
||||
@@ -333,7 +394,6 @@ class EnvironmentManager
|
||||
try {
|
||||
|
||||
$this->updateEnv($diskEnv);
|
||||
|
||||
} catch (Exception $e) {
|
||||
return [
|
||||
'error' => 'disk_variables_save_error',
|
||||
@@ -410,10 +470,16 @@ class EnvironmentManager
|
||||
public function saveDomainVariables(DomainEnvironmentRequest $request)
|
||||
{
|
||||
try {
|
||||
$this->updateEnv([
|
||||
'SANCTUM_STATEFUL_DOMAINS' => $request->get('app_domain'),
|
||||
'SESSION_DOMAIN' => explode(':', $request->get('app_domain'))[0],
|
||||
]);
|
||||
[$sanctumDomain, $sessionDomain] = $this->getDomains(
|
||||
$request->get('app_domain')
|
||||
);
|
||||
$domainEnv = [
|
||||
'SESSION_DOMAIN' => $sessionDomain,
|
||||
];
|
||||
if ($sanctumDomain !== null) {
|
||||
$domainEnv['SANCTUM_STATEFUL_DOMAINS'] = $sanctumDomain;
|
||||
}
|
||||
$this->updateEnv($domainEnv);
|
||||
} catch (Exception $e) {
|
||||
return [
|
||||
'error' => 'domain_verification_failed',
|
||||
@@ -449,9 +515,29 @@ class EnvironmentManager
|
||||
}
|
||||
$formatted .= $current.$this->delimiter;
|
||||
$previous = $current;
|
||||
|
||||
}
|
||||
|
||||
file_put_contents($this->envPath, trim($formatted));
|
||||
}
|
||||
|
||||
private function getDomains(string $requestDomain): array
|
||||
{
|
||||
$appUrl = config('app.url');
|
||||
|
||||
$port = parse_url($appUrl, PHP_URL_PORT);
|
||||
$currentDomain = parse_url($appUrl, PHP_URL_HOST).(
|
||||
$port ? ':'.$port : ''
|
||||
);
|
||||
|
||||
$requestHost = parse_url($requestDomain, PHP_URL_HOST) ?: $requestDomain;
|
||||
|
||||
$isSame = $currentDomain === $requestDomain;
|
||||
|
||||
return [
|
||||
$isSame && env('SANCTUM_STATEFUL_DOMAINS', false) === false ?
|
||||
null : $requestDomain,
|
||||
$isSame && env('SESSION_DOMAIN', false) === null ?
|
||||
null : $requestHost,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,4 +5,5 @@ return [
|
||||
App\Providers\RouteServiceProvider::class,
|
||||
App\Providers\DropboxServiceProvider::class,
|
||||
App\Providers\ViewServiceProvider::class,
|
||||
App\Providers\PDFServiceProvider::class,
|
||||
];
|
||||
|
||||
@@ -14,35 +14,36 @@
|
||||
"doctrine/dbal": "^4.2",
|
||||
"dragonmantank/cron-expression": "^v3.4",
|
||||
"guzzlehttp/guzzle": "^7.9",
|
||||
"gotenberg/gotenberg-php": "^2.8",
|
||||
"invoiceshelf/modules": "^1.0.0",
|
||||
"jasonmccreary/laravel-test-assertions": "^v2.4",
|
||||
"laravel/framework": "^11.31",
|
||||
"laravel/framework": "^12.0",
|
||||
"laravel/helpers": "^1.7",
|
||||
"laravel/sanctum": "^4.0",
|
||||
"laravel/tinker": "^2.9",
|
||||
"laravel/tinker": "^2.10.1",
|
||||
"laravel/ui": "^4.6",
|
||||
"lavary/laravel-menu": "^1.8",
|
||||
"league/flysystem-aws-s3-v3": "^3.29",
|
||||
"predis/predis": "^2.3",
|
||||
"silber/bouncer": "v1.0.2",
|
||||
"silber/bouncer": "v1.0.3",
|
||||
"spatie/flysystem-dropbox": "^3.0",
|
||||
"spatie/laravel-backup": "^8.8",
|
||||
"spatie/laravel-backup": "^9.2.9",
|
||||
"spatie/laravel-medialibrary": "^11.11",
|
||||
"vinkla/hashids": "^12.0"
|
||||
"vinkla/hashids": "^13.0.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"fakerphp/faker": "^1.23",
|
||||
"laravel/pint": "^1.13",
|
||||
"laravel/sail": "^1.26",
|
||||
"mockery/mockery": "^1.6",
|
||||
"nunomaduro/collision": "^8.1",
|
||||
"phpunit/phpunit": "^11.0.1",
|
||||
"spatie/laravel-ignition": "^2.9",
|
||||
"barryvdh/laravel-ide-helper": "^3.5",
|
||||
"beyondcode/laravel-dump-server": "^2.0.0",
|
||||
"pestphp/pest": "^3.7",
|
||||
"fakerphp/faker": "^1.23",
|
||||
"laravel/pint": "^1.13",
|
||||
"laravel/sail": "^1.41",
|
||||
"mockery/mockery": "^1.6",
|
||||
"nunomaduro/collision": "^8.6",
|
||||
"pestphp/pest": "^3.8",
|
||||
"pestphp/pest-plugin-faker": "^3.0",
|
||||
"pestphp/pest-plugin-laravel": "^3.0"
|
||||
"pestphp/pest-plugin-laravel": "^3.1",
|
||||
"phpunit/phpunit": "^11.5.3",
|
||||
"spatie/laravel-ignition": "^2.9"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
@@ -60,31 +61,41 @@
|
||||
"Tests\\": "tests/"
|
||||
}
|
||||
},
|
||||
"minimum-stability": "dev",
|
||||
"prefer-stable": true,
|
||||
"scripts": {
|
||||
"post-autoload-dump": [
|
||||
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
|
||||
"@php artisan package:discover --ansi"
|
||||
],
|
||||
"post-update-cmd": [
|
||||
"@php artisan vendor:publish --tag=laravel-assets --ansi --force"
|
||||
],
|
||||
"post-root-package-install": [
|
||||
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
|
||||
],
|
||||
"post-create-project-cmd": [
|
||||
"@php artisan key:generate --ansi"
|
||||
"@php artisan key:generate --ansi",
|
||||
"@php -r \"file_exists('database/database.sqlite') || touch('database/database.sqlite');\"",
|
||||
"@php artisan migrate --graceful --ansi"
|
||||
],
|
||||
"dev": [
|
||||
"Composer\\Config::disableProcessTimeout",
|
||||
"npx concurrently -c \"#93c5fd,#c4b5fd,#fb7185,#fdba74\" \"php artisan serve\" \"php artisan queue:listen --tries=1\" \"php artisan pail --timeout=0\" \"npm run dev\" --names=server,queue,logs,vite"
|
||||
]
|
||||
},
|
||||
"extra": {
|
||||
"laravel": {
|
||||
"dont-discover": []
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"optimize-autoloader": true,
|
||||
"preferred-install": "dist",
|
||||
"sort-packages": true,
|
||||
"allow-plugins": {
|
||||
"pestphp/pest-plugin": true
|
||||
"pestphp/pest-plugin": true,
|
||||
"php-http/discovery": true
|
||||
}
|
||||
},
|
||||
"extra": {
|
||||
"laravel": {
|
||||
"dont-discover": []
|
||||
}
|
||||
}
|
||||
"minimum-stability": "stable",
|
||||
"prefer-stable": true
|
||||
}
|
||||
|
||||
1650
composer.lock
generated
1650
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -3,7 +3,6 @@
|
||||
return [
|
||||
|
||||
'backup' => [
|
||||
|
||||
/*
|
||||
* The name of this application. You can use this name to monitor
|
||||
* the backups.
|
||||
@@ -11,9 +10,7 @@ return [
|
||||
'name' => env('APP_NAME', 'laravel-backup'),
|
||||
|
||||
'source' => [
|
||||
|
||||
'files' => [
|
||||
|
||||
/*
|
||||
* The list of directories and files that will be included in the backup.
|
||||
*/
|
||||
@@ -41,6 +38,13 @@ return [
|
||||
* Determines if it should avoid unreadable folders.
|
||||
*/
|
||||
'ignore_unreadable_directories' => false,
|
||||
|
||||
/*
|
||||
* This path is used to make directories in resulting zip-file relative
|
||||
* Set to `null` to include complete absolute path
|
||||
* Example: base_path()
|
||||
*/
|
||||
'relative_path' => null,
|
||||
],
|
||||
|
||||
/*
|
||||
@@ -79,7 +83,7 @@ return [
|
||||
],
|
||||
|
||||
/*
|
||||
* The database dump can be compressed to decrease diskspace usage.
|
||||
* The database dump can be compressed to decrease disk space usage.
|
||||
*
|
||||
* Out of the box Laravel-backup supplies
|
||||
* Spatie\DbDumper\Compressors\GzipCompressor::class.
|
||||
@@ -91,7 +95,53 @@ return [
|
||||
*/
|
||||
'database_dump_compressor' => null,
|
||||
|
||||
/*
|
||||
* If specified, the database dumped file name will contain a timestamp (e.g.: 'Y-m-d-H-i-s').
|
||||
*/
|
||||
'database_dump_file_timestamp_format' => null,
|
||||
|
||||
/*
|
||||
* The base of the dump filename, either 'database' or 'connection'
|
||||
*
|
||||
* If 'database' (default), the dumped filename will contain the database name.
|
||||
* If 'connection', the dumped filename will contain the connection name.
|
||||
*/
|
||||
'database_dump_filename_base' => 'database',
|
||||
|
||||
/*
|
||||
* The file extension used for the database dump files.
|
||||
*
|
||||
* If not specified, the file extension will be .archive for MongoDB and .sql for all other databases
|
||||
* The file extension should be specified without a leading .
|
||||
*/
|
||||
'database_dump_file_extension' => '',
|
||||
|
||||
'destination' => [
|
||||
/*
|
||||
* The compression algorithm to be used for creating the zip archive.
|
||||
*
|
||||
* If backing up only database, you may choose gzip compression for db dump and no compression at zip.
|
||||
*
|
||||
* Some common algorithms are listed below:
|
||||
* ZipArchive::CM_STORE (no compression at all; set 0 as compression level)
|
||||
* ZipArchive::CM_DEFAULT
|
||||
* ZipArchive::CM_DEFLATE
|
||||
* ZipArchive::CM_BZIP2
|
||||
* ZipArchive::CM_XZ
|
||||
*
|
||||
* For more check https://www.php.net/manual/zip.constants.php and confirm it's supported by your system.
|
||||
*/
|
||||
'compression_method' => ZipArchive::CM_DEFAULT,
|
||||
|
||||
/*
|
||||
* The compression level corresponding to the used algorithm; an integer between 0 and 9.
|
||||
*
|
||||
* Check supported levels for the chosen algorithm, usually 1 means the fastest and weakest compression,
|
||||
* while 9 the slowest and strongest one.
|
||||
*
|
||||
* Setting of 0 for some algorithms may switch to the strongest compression.
|
||||
*/
|
||||
'compression_level' => 9,
|
||||
|
||||
/*
|
||||
* The filename prefix used for the backup zip file.
|
||||
@@ -110,24 +160,49 @@ return [
|
||||
* The directory where the temporary files will be stored.
|
||||
*/
|
||||
'temporary_directory' => storage_path('app/backup-temp'),
|
||||
|
||||
/*
|
||||
* The password to be used for archive encryption.
|
||||
* Set to `null` to disable encryption.
|
||||
*/
|
||||
'password' => env('BACKUP_ARCHIVE_PASSWORD'),
|
||||
|
||||
/*
|
||||
* The encryption algorithm to be used for archive encryption.
|
||||
* You can set it to `null` or `false` to disable encryption.
|
||||
*
|
||||
* When set to 'default', we'll use ZipArchive::EM_AES_256 if it is
|
||||
* available on your system.
|
||||
*/
|
||||
'encryption' => 'default',
|
||||
|
||||
/*
|
||||
* The number of attempts, in case the backup command encounters an exception
|
||||
*/
|
||||
'tries' => 1,
|
||||
|
||||
/*
|
||||
* The number of seconds to wait before attempting a new backup if the previous try failed
|
||||
* Set to `0` for none
|
||||
*/
|
||||
'retry_delay' => 0,
|
||||
],
|
||||
|
||||
/*
|
||||
* You can get notified when specific events occur. Out of the box you can use 'mail' and 'slack'.
|
||||
* For Slack you need to install guzzlehttp/guzzle and laravel/slack-notification-channel.
|
||||
* For Slack you need to install laravel/slack-notification-channel.
|
||||
*
|
||||
* You can also use your own notification classes, just make sure the class is named after one of
|
||||
* the `Spatie\Backup\Events` classes.
|
||||
* the `Spatie\Backup\Notifications\Notifications` classes.
|
||||
*/
|
||||
'notifications' => [
|
||||
|
||||
'notifications' => [
|
||||
\Spatie\Backup\Notifications\Notifications\BackupHasFailed::class => [],
|
||||
\Spatie\Backup\Notifications\Notifications\UnhealthyBackupWasFound::class => [],
|
||||
\Spatie\Backup\Notifications\Notifications\CleanupHasFailed::class => [],
|
||||
\Spatie\Backup\Notifications\Notifications\BackupWasSuccessful::class => [],
|
||||
\Spatie\Backup\Notifications\Notifications\HealthyBackupWasFound::class => [],
|
||||
\Spatie\Backup\Notifications\Notifications\CleanupWasSuccessful::class => [],
|
||||
\Spatie\Backup\Notifications\Notifications\BackupHasFailedNotification::class => ['mail'],
|
||||
\Spatie\Backup\Notifications\Notifications\UnhealthyBackupWasFoundNotification::class => ['mail'],
|
||||
\Spatie\Backup\Notifications\Notifications\CleanupHasFailedNotification::class => ['mail'],
|
||||
\Spatie\Backup\Notifications\Notifications\BackupWasSuccessfulNotification::class => ['mail'],
|
||||
\Spatie\Backup\Notifications\Notifications\HealthyBackupWasFoundNotification::class => ['mail'],
|
||||
\Spatie\Backup\Notifications\Notifications\CleanupWasSuccessfulNotification::class => ['mail'],
|
||||
],
|
||||
|
||||
/*
|
||||
@@ -156,7 +231,20 @@ return [
|
||||
'username' => null,
|
||||
|
||||
'icon' => null,
|
||||
],
|
||||
|
||||
'discord' => [
|
||||
'webhook_url' => '',
|
||||
|
||||
/*
|
||||
* If this is an empty string, the name field on the webhook will be used.
|
||||
*/
|
||||
'username' => '',
|
||||
|
||||
/*
|
||||
* If this is an empty string, the avatar on the webhook will be used.
|
||||
*/
|
||||
'avatar_url' => '',
|
||||
],
|
||||
],
|
||||
|
||||
@@ -200,42 +288,55 @@ return [
|
||||
'strategy' => \Spatie\Backup\Tasks\Cleanup\Strategies\DefaultStrategy::class,
|
||||
|
||||
'default_strategy' => [
|
||||
|
||||
/*
|
||||
* The number of days for which backups must be kept.
|
||||
*/
|
||||
'keep_all_backups_for_days' => 7,
|
||||
|
||||
/*
|
||||
* The number of days for which daily backups must be kept.
|
||||
* After the "keep_all_backups_for_days" period is over, the most recent backup
|
||||
* of that day will be kept. Older backups within the same day will be removed.
|
||||
* If you create backups only once a day, no backups will be removed yet.
|
||||
*/
|
||||
'keep_daily_backups_for_days' => 16,
|
||||
|
||||
/*
|
||||
* The number of weeks for which one weekly backup must be kept.
|
||||
* After the "keep_daily_backups_for_days" period is over, the most recent backup
|
||||
* of that week will be kept. Older backups within the same week will be removed.
|
||||
* If you create backups only once a week, no backups will be removed yet.
|
||||
*/
|
||||
'keep_weekly_backups_for_weeks' => 8,
|
||||
|
||||
/*
|
||||
* The number of months for which one monthly backup must be kept.
|
||||
* After the "keep_weekly_backups_for_weeks" period is over, the most recent backup
|
||||
* of that month will be kept. Older backups within the same month will be removed.
|
||||
*/
|
||||
'keep_monthly_backups_for_months' => 4,
|
||||
|
||||
/*
|
||||
* The number of years for which one yearly backup must be kept.
|
||||
* After the "keep_monthly_backups_for_months" period is over, the most recent backup
|
||||
* of that year will be kept. Older backups within the same year will be removed.
|
||||
*/
|
||||
'keep_yearly_backups_for_years' => 2,
|
||||
|
||||
/*
|
||||
* After cleaning up the backups remove the oldest backup until
|
||||
* this amount of megabytes has been reached.
|
||||
* Set null for unlimited size.
|
||||
*/
|
||||
'delete_oldest_backups_when_using_more_megabytes_than' => 5000,
|
||||
],
|
||||
],
|
||||
|
||||
'queue' => [
|
||||
'name' => env('BACKUP_QUEUE_NAME', 'backup'),
|
||||
/*
|
||||
* The number of attempts, in case the cleanup command encounters an exception
|
||||
*/
|
||||
'tries' => 1,
|
||||
|
||||
/*
|
||||
* The number of seconds to wait before attempting a new cleanup if the previous try failed
|
||||
* Set to `0` for none
|
||||
*/
|
||||
'retry_delay' => 0,
|
||||
],
|
||||
|
||||
];
|
||||
|
||||
@@ -60,6 +60,13 @@ return [
|
||||
'driver' => 'local',
|
||||
'root' => storage_path('app/templates/pdf'),
|
||||
],
|
||||
|
||||
'local' => [
|
||||
'driver' => 'local',
|
||||
'root' => storage_path('app'),
|
||||
'throw' => false,
|
||||
'report' => false,
|
||||
],
|
||||
],
|
||||
|
||||
];
|
||||
|
||||
@@ -131,7 +131,7 @@ return [
|
||||
'group' => '',
|
||||
'name' => 'Company information',
|
||||
'link' => '/admin/settings/company-info',
|
||||
'icon' => 'OfficeBuildingIcon',
|
||||
'icon' => 'BuildingOfficeIcon',
|
||||
'owner_only' => true,
|
||||
'ability' => '',
|
||||
'model' => '',
|
||||
@@ -151,7 +151,17 @@ return [
|
||||
'group' => '',
|
||||
'name' => 'Customization',
|
||||
'link' => '/admin/settings/customization',
|
||||
'icon' => 'PencilAltIcon',
|
||||
'icon' => 'PencilSquareIcon',
|
||||
'owner_only' => true,
|
||||
'ability' => '',
|
||||
'model' => '',
|
||||
],
|
||||
[
|
||||
'title' => 'settings.menu_title.pdf_generation',
|
||||
'group' => '',
|
||||
'name' => 'PDF Generation',
|
||||
'link' => '/admin/settings/pdf-generation',
|
||||
'icon' => 'DocumentIcon',
|
||||
'owner_only' => true,
|
||||
'ability' => '',
|
||||
'model' => '',
|
||||
@@ -171,7 +181,7 @@ return [
|
||||
'group' => '',
|
||||
'name' => 'Exchange Rate Provider',
|
||||
'link' => '/admin/settings/exchange-rate-provider',
|
||||
'icon' => 'CashIcon',
|
||||
'icon' => 'BanknotesIcon',
|
||||
'owner_only' => false,
|
||||
'ability' => 'view-exchange-rate-provider',
|
||||
'model' => ExchangeRateProvider::class,
|
||||
@@ -221,7 +231,7 @@ return [
|
||||
'group' => '',
|
||||
'name' => 'Notes',
|
||||
'link' => '/admin/settings/notes',
|
||||
'icon' => 'ClipboardCheckIcon',
|
||||
'icon' => 'ClipboardDocumentCheckIcon',
|
||||
'owner_only' => false,
|
||||
'ability' => 'view-all-notes',
|
||||
'model' => Note::class,
|
||||
@@ -231,7 +241,7 @@ return [
|
||||
'group' => '',
|
||||
'name' => 'Expense Category',
|
||||
'link' => '/admin/settings/expense-category',
|
||||
'icon' => 'ClipboardListIcon',
|
||||
'icon' => 'ClipboardDocumentListIcon',
|
||||
'owner_only' => false,
|
||||
'ability' => 'view-expense',
|
||||
'model' => Expense::class,
|
||||
@@ -241,7 +251,7 @@ return [
|
||||
'group' => '',
|
||||
'name' => 'Mail Configuration',
|
||||
'link' => '/admin/settings/mail-configuration',
|
||||
'icon' => 'MailIcon',
|
||||
'icon' => 'EnvelopeIcon',
|
||||
'owner_only' => true,
|
||||
'ability' => '',
|
||||
'model' => '',
|
||||
@@ -261,7 +271,7 @@ return [
|
||||
'group' => '',
|
||||
'name' => 'Backup',
|
||||
'link' => '/admin/settings/backup',
|
||||
'icon' => 'DatabaseIcon',
|
||||
'icon' => 'CircleStackIcon',
|
||||
'owner_only' => true,
|
||||
'ability' => '',
|
||||
'model' => '',
|
||||
@@ -271,7 +281,7 @@ return [
|
||||
'group' => '',
|
||||
'name' => 'Update App',
|
||||
'link' => '/admin/settings/update-app',
|
||||
'icon' => 'RefreshIcon',
|
||||
'icon' => 'ArrowPathIcon',
|
||||
'owner_only' => true,
|
||||
'ability' => '',
|
||||
'model' => '',
|
||||
@@ -366,7 +376,7 @@ return [
|
||||
'title' => 'navigation.modules',
|
||||
'group' => 3,
|
||||
'link' => '/admin/modules',
|
||||
'icon' => 'PuzzleIcon',
|
||||
'icon' => 'PuzzlePieceIcon',
|
||||
'name' => 'Modules',
|
||||
'owner_only' => true,
|
||||
'ability' => '',
|
||||
|
||||
14
config/pdf.php
Normal file
14
config/pdf.php
Normal file
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
'driver' => env('PDF_DRIVER', 'gotenberg'),
|
||||
|
||||
'gotenberg' => [
|
||||
'host' => env('GOTENBERG_HOST', 'http://pdf:3000'),
|
||||
'papersize' => env('GOTENBERG_PAPERSIZE', '210mm 297mm'),
|
||||
],
|
||||
|
||||
'dompdf' => [],
|
||||
|
||||
];
|
||||
@@ -1,48 +0,0 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Stateful Domains
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Requests from the following domains / hosts will receive stateful API
|
||||
| authentication cookies. Typically, these should include your local
|
||||
| and production domains which access your API via a frontend SPA.
|
||||
|
|
||||
*/
|
||||
|
||||
'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', 'localhost,127.0.0.1,127.0.0.1:8000,::1')),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Expiration Minutes
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This value controls the number of minutes until an issued token will be
|
||||
| considered expired. If this value is null, personal access tokens do
|
||||
| not expire. This won't tweak the lifetime of first-party sessions.
|
||||
|
|
||||
*/
|
||||
|
||||
'expiration' => null,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Sanctum Middleware
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When authenticating your first-party SPA with Sanctum you may need to
|
||||
| customize some of the middleware Sanctum uses while processing the
|
||||
| request. You may change the middleware listed below as required.
|
||||
|
|
||||
*/
|
||||
|
||||
'middleware' => [
|
||||
'authenticate_session' => Laravel\Sanctum\Http\Middleware\AuthenticateSession::class,
|
||||
'encrypt_cookies' => Illuminate\Cookie\Middleware\EncryptCookies::class,
|
||||
'validate_csrf_token' => Illuminate\Foundation\Http\Middleware\ValidateCsrfToken::class,
|
||||
],
|
||||
|
||||
];
|
||||
@@ -48,4 +48,10 @@ return [
|
||||
'auth_token' => env('CRON_JOB_AUTH_TOKEN', 0),
|
||||
],
|
||||
|
||||
'ses' => [
|
||||
'key' => env('SES_KEY'),
|
||||
'secret' => env('SES_SECRET'),
|
||||
'region' => env('SES_REGION', 'us-east-1'),
|
||||
],
|
||||
|
||||
];
|
||||
|
||||
@@ -93,6 +93,7 @@ class EstimateFactory extends Factory
|
||||
return $estimate['discount_type'] == 'percentage' ? (($estimate['discount_val'] * $estimate['total']) / 100) : $estimate['discount_val'];
|
||||
},
|
||||
'tax_per_item' => 'YES',
|
||||
'tax_included' => false,
|
||||
'discount_per_item' => 'No',
|
||||
'tax' => $this->faker->randomDigitNotNull(),
|
||||
'notes' => $this->faker->text(80),
|
||||
|
||||
@@ -93,6 +93,7 @@ class InvoiceFactory extends Factory
|
||||
'template_name' => 'invoice1',
|
||||
'status' => Invoice::STATUS_DRAFT,
|
||||
'tax_per_item' => 'NO',
|
||||
'tax_included' => false,
|
||||
'discount_per_item' => 'NO',
|
||||
'paid_status' => Invoice::STATUS_UNPAID,
|
||||
'company_id' => User::find(1)->companies()->first()->id,
|
||||
|
||||
@@ -25,6 +25,7 @@ class NoteFactory extends Factory
|
||||
'name' => $this->faker->word(),
|
||||
'notes' => $this->faker->text(),
|
||||
'company_id' => User::find(1)->companies()->first()->id,
|
||||
'is_default' => $this->faker->boolean(),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@ class RecurringInvoiceFactory extends Factory
|
||||
'send_automatically' => false,
|
||||
'status' => $this->faker->randomElement(['COMPLETED', 'ON_HOLD', 'ACTIVE']),
|
||||
'tax_per_item' => 'NO',
|
||||
'tax_included' => false,
|
||||
'discount_per_item' => 'NO',
|
||||
'sub_total' => $this->faker->randomDigitNotNull(),
|
||||
'total' => $this->faker->randomDigitNotNull(),
|
||||
|
||||
@@ -22,8 +22,10 @@ class TaxTypeFactory extends Factory
|
||||
{
|
||||
return [
|
||||
'name' => $this->faker->word(),
|
||||
'calculation_type' => 'percentage',
|
||||
'company_id' => User::find(1)->companies()->first()->id,
|
||||
'percent' => $this->faker->numberBetween($min = 0, $max = 100),
|
||||
'fixed_amount' => null,
|
||||
'description' => $this->faker->text(),
|
||||
'compound_tax' => 0,
|
||||
'collective_tax' => 0,
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up()
|
||||
{
|
||||
Schema::table('tax_types', function (Blueprint $table) {
|
||||
$table->enum('calculation_type', ['percentage', 'fixed'])->default('percentage')->after('name');
|
||||
$table->integer('fixed_amount')->nullable()->after('percent');
|
||||
$table->decimal('percent', 5, 2)->nullable()->change();
|
||||
});
|
||||
|
||||
Schema::table('taxes', function (Blueprint $table) {
|
||||
$table->enum('calculation_type', ['percentage', 'fixed'])->default('percentage')->after('name');
|
||||
$table->integer('fixed_amount')->nullable()->after('percent');
|
||||
$table->decimal('percent', 5, 2)->nullable()->change();
|
||||
});
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
Schema::table('tax_types', function (Blueprint $table) {
|
||||
$table->dropColumn(['calculation_type', 'fixed_amount']);
|
||||
$table->decimal('percent', 5, 2)->change();
|
||||
});
|
||||
|
||||
Schema::table('taxes', function (Blueprint $table) {
|
||||
$table->dropColumn(['calculation_type', 'fixed_amount']);
|
||||
$table->decimal('percent', 5, 2)->change();
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('notes', function (Blueprint $table) {
|
||||
$table->boolean('is_default')->default(false);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('notes', function (Blueprint $table) {
|
||||
$table->dropColumn('is_default');
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('invoice_items', function (Blueprint $table) {
|
||||
$table->bigInteger('price')->change();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('invoice_items', function (Blueprint $table) {
|
||||
$table->unsignedBigInteger('price')->change();
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('invoices', function (Blueprint $table) {
|
||||
$table->boolean('tax_included')->default(false);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('invoices', function (Blueprint $table) {
|
||||
$table->dropColumn('tax_included');
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('estimates', function (Blueprint $table) {
|
||||
$table->boolean('tax_included')->default(false);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('estimates', function (Blueprint $table) {
|
||||
$table->dropColumn('tax_included');
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('recurring_invoices', function (Blueprint $table) {
|
||||
$table->boolean('tax_included')->default(false);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('recurring_invoices', function (Blueprint $table) {
|
||||
$table->dropColumn('tax_included');
|
||||
});
|
||||
}
|
||||
};
|
||||
26
lang/ar.json
26
lang/ar.json
@@ -39,7 +39,7 @@
|
||||
"body": "الجسم",
|
||||
"message": "رسالة",
|
||||
"send": "إرسال",
|
||||
"preview": "Preview",
|
||||
"preview": "عرض",
|
||||
"go_back": "إلى الخلف",
|
||||
"back_to_login": "العودة إلى تسجيل الدخول؟",
|
||||
"home": "الرئيسية",
|
||||
@@ -65,7 +65,7 @@
|
||||
"sent": "ارسلت",
|
||||
"all": "الكل",
|
||||
"select_all": "تحديد الكل",
|
||||
"select_template": "Select Template",
|
||||
"select_template": "اختر قالب",
|
||||
"choose_file": "اضغط هنا لاختيار ملف",
|
||||
"choose_template": "اختيار القالب",
|
||||
"choose": "اختر",
|
||||
@@ -95,7 +95,7 @@
|
||||
"copied_pdf_url_clipboard": "تم نسخ رابط PDF إلى الحافظة!",
|
||||
"copied_url_clipboard": "Copied url to clipboard!",
|
||||
"docs": "Docs",
|
||||
"do_you_wish_to_continue": "Do you wish to continue?",
|
||||
"do_you_wish_to_continue": "هل ترغب في الاستمرار؟",
|
||||
"note": "ملاحظة",
|
||||
"pay_invoice": "دفع الفاتورة",
|
||||
"login_successfully": "تم تسجيل الدخول بنجاح!",
|
||||
@@ -852,7 +852,8 @@
|
||||
"payment_modes": "طرق الدفع",
|
||||
"notes": "ملاحظات",
|
||||
"exchange_rate": "Exchange Rate",
|
||||
"address_information": "Address Information"
|
||||
"address_information": "Address Information",
|
||||
"pdf_generation": "PDF Generation"
|
||||
},
|
||||
"address_information": {
|
||||
"section_description": " You can update Your Address information using form below."
|
||||
@@ -893,6 +894,7 @@
|
||||
"mailgun_endpoint": "النهاية الطرفية لـ Mailgun",
|
||||
"ses_secret": "SES الرمز السري",
|
||||
"ses_key": "SES مفتاح",
|
||||
"ses_region": "AWS Region",
|
||||
"password": "كلمة مرور البريد الالكتروني",
|
||||
"username": "اسم المستخدم للبريد الإلكتروني",
|
||||
"mail_config": "إعدادات البريد الالكتروني",
|
||||
@@ -904,7 +906,15 @@
|
||||
"pdf": {
|
||||
"title": "PDF إعدادات",
|
||||
"footer_text": "نص التذييل",
|
||||
"pdf_layout": "اتجاه صفحة PDF"
|
||||
"pdf_layout": "اتجاه صفحة PDF",
|
||||
"pdf_configuration": "PDF Generation Settings",
|
||||
"section_description": "Change the way PDFs are generated",
|
||||
"driver": "PDF Driver to use",
|
||||
"papersize": "Papersize",
|
||||
"papersize_hint": "Papersize in width and height (ex. \"210mm 297mm\")",
|
||||
"gotenberg_host": "Gotenberg service host",
|
||||
"pdf_variables_save_successfully": "PDF configuration saved successfully",
|
||||
"pdf_variables_save_error": "PDF configuration could not be saved"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "معلومات الشركة",
|
||||
@@ -1087,6 +1097,8 @@
|
||||
"description": "توفير الوقت عن طريق إنشاء الملاحظات وإعادة استخدامها على الفواتير والتقديرات والمدفوعات.",
|
||||
"notes": "ملاحظات",
|
||||
"type": "نوع",
|
||||
"is_default": "Select by default",
|
||||
"is_default_description": "This note will be selected by default in new invoices.",
|
||||
"add_note": "اضف ملاحظة",
|
||||
"add_new_note": "أضف ملاحظة جديدة",
|
||||
"name": "اسم",
|
||||
@@ -1236,7 +1248,7 @@
|
||||
"time_zone": "المنطة الزمنية",
|
||||
"fiscal_year": "السنة المالية",
|
||||
"date_format": "صيغة التاريخ",
|
||||
"time_format": "Time Fromat",
|
||||
"time_format": "Time Format",
|
||||
"discount_setting": "إعدادات الخصم",
|
||||
"discount_per_item": "خصم على الصنف ",
|
||||
"discount_setting_description": "قم بتمكين هذا إذا كنت تريد إضافة خصم إلى عناصر الفاتورة الفردية. بشكل افتراضي ، يتم إضافة الخصم مباشرة إلى الفاتورة.",
|
||||
@@ -1588,7 +1600,7 @@
|
||||
"pdf_invoice_label": "الفاتورة",
|
||||
"pdf_invoice_number": "رقم الفاتورة",
|
||||
"pdf_invoice_date": "تاريخ الفاتورة",
|
||||
"pdf_invoice_due_date": "تاريخ الاستحقاق",
|
||||
"pdf_invoice_due_date": "Due Date",
|
||||
"pdf_notes": "ملاحظات",
|
||||
"pdf_items_label": "الأصناف",
|
||||
"pdf_quantity_label": "الكمية",
|
||||
|
||||
20
lang/bg.json
20
lang/bg.json
@@ -852,7 +852,8 @@
|
||||
"payment_modes": "Payment Modes",
|
||||
"notes": "Notes",
|
||||
"exchange_rate": "Exchange Rate",
|
||||
"address_information": "Address Information"
|
||||
"address_information": "Address Information",
|
||||
"pdf_generation": "PDF Generation"
|
||||
},
|
||||
"address_information": {
|
||||
"section_description": " You can update Your Address information using form below."
|
||||
@@ -893,6 +894,7 @@
|
||||
"mailgun_endpoint": "Mailgun Endpoint",
|
||||
"ses_secret": "SES Secret",
|
||||
"ses_key": "SES Key",
|
||||
"ses_region": "AWS Region",
|
||||
"password": "Mail Password",
|
||||
"username": "Mail Username",
|
||||
"mail_config": "Mail Configuration",
|
||||
@@ -904,7 +906,15 @@
|
||||
"pdf": {
|
||||
"title": "PDF Setting",
|
||||
"footer_text": "Footer Text",
|
||||
"pdf_layout": "PDF Layout"
|
||||
"pdf_layout": "PDF Layout",
|
||||
"pdf_configuration": "PDF Generation Settings",
|
||||
"section_description": "Change the way PDFs are generated",
|
||||
"driver": "PDF Driver to use",
|
||||
"papersize": "Papersize",
|
||||
"papersize_hint": "Papersize in width and height (ex. \"210mm 297mm\")",
|
||||
"gotenberg_host": "Gotenberg service host",
|
||||
"pdf_variables_save_successfully": "PDF configuration saved successfully",
|
||||
"pdf_variables_save_error": "PDF configuration could not be saved"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "Company info",
|
||||
@@ -1087,6 +1097,8 @@
|
||||
"description": "Save time by creating notes and reusing them on your invoices, estimates & payments.",
|
||||
"notes": "Notes",
|
||||
"type": "Type",
|
||||
"is_default": "Select by default",
|
||||
"is_default_description": "This note will be selected by default in new invoices.",
|
||||
"add_note": "Add Note",
|
||||
"add_new_note": "Add New Note",
|
||||
"name": "Name",
|
||||
@@ -1236,7 +1248,7 @@
|
||||
"time_zone": "Time Zone",
|
||||
"fiscal_year": "Financial Year",
|
||||
"date_format": "Date Format",
|
||||
"time_format": "Time Fromat",
|
||||
"time_format": "Time Format",
|
||||
"discount_setting": "Discount Setting",
|
||||
"discount_per_item": "Discount Per Item ",
|
||||
"discount_setting_description": "Enable this if you want to add Discount to individual invoice items. By default, Discount is added directly to the invoice.",
|
||||
@@ -1588,7 +1600,7 @@
|
||||
"pdf_invoice_label": "Invoice",
|
||||
"pdf_invoice_number": "Invoice Number",
|
||||
"pdf_invoice_date": "Invoice Date",
|
||||
"pdf_invoice_due_date": "Due date",
|
||||
"pdf_invoice_due_date": "Due Date",
|
||||
"pdf_notes": "Notes",
|
||||
"pdf_items_label": "Items",
|
||||
"pdf_quantity_label": "Quantity",
|
||||
|
||||
64
lang/cs.json
64
lang/cs.json
@@ -29,7 +29,7 @@
|
||||
"to_date": "Do data",
|
||||
"from": "Od",
|
||||
"to": "Do",
|
||||
"ok": "OK",
|
||||
"ok": "Ok",
|
||||
"yes": "Ano",
|
||||
"no": "Ne",
|
||||
"sort_by": "Seřadit podle",
|
||||
@@ -852,7 +852,8 @@
|
||||
"payment_modes": "Způsoby plateb",
|
||||
"notes": "Poznámky",
|
||||
"exchange_rate": "Směnný kurz",
|
||||
"address_information": "Adresa"
|
||||
"address_information": "Adresa",
|
||||
"pdf_generation": "PDF Generation"
|
||||
},
|
||||
"address_information": {
|
||||
"section_description": " Adresu můžete aktualizovat pomocí formuláře níže."
|
||||
@@ -864,7 +865,7 @@
|
||||
"primary_currency": "Primární měna",
|
||||
"timezone": "Časová zóna",
|
||||
"date_format": "Formát data",
|
||||
"time_format": "Time Format",
|
||||
"time_format": "Formát času",
|
||||
"currencies": {
|
||||
"title": "Měny",
|
||||
"currency": "Měna | Měny",
|
||||
@@ -893,6 +894,7 @@
|
||||
"mailgun_endpoint": "Mailgun Endpoint",
|
||||
"ses_secret": "SES tajný klíč (secret)",
|
||||
"ses_key": "Klíč SES",
|
||||
"ses_region": "AWS Region",
|
||||
"password": "E-mailové heslo",
|
||||
"username": "Uživatelské jméno pro e-mail",
|
||||
"mail_config": "Konfigurace e-mailu",
|
||||
@@ -904,7 +906,15 @@
|
||||
"pdf": {
|
||||
"title": "Nastavení PDF",
|
||||
"footer_text": "Text zápatí",
|
||||
"pdf_layout": "Rozvržení PDF"
|
||||
"pdf_layout": "Rozvržení PDF",
|
||||
"pdf_configuration": "PDF Generation Settings",
|
||||
"section_description": "Change the way PDFs are generated",
|
||||
"driver": "PDF Driver to use",
|
||||
"papersize": "Papersize",
|
||||
"papersize_hint": "Papersize in width and height (ex. \"210mm 297mm\")",
|
||||
"gotenberg_host": "Gotenberg service host",
|
||||
"pdf_variables_save_successfully": "PDF configuration saved successfully",
|
||||
"pdf_variables_save_error": "PDF configuration could not be saved"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "Údaje o společnosti",
|
||||
@@ -991,7 +1001,7 @@
|
||||
"delimiter_description": "Jeden znak pro určení hranice mezi 2 samostatnými komponentami. Ve výchozím nastavení je nastaveno na -",
|
||||
"delimiter_param_label": "Hodnota oddělovače",
|
||||
"date_format": "Formát data",
|
||||
"time_format": "Time Format",
|
||||
"time_format": "Formát času",
|
||||
"date_format_description": "Pole pro formát místní data a času. Výchozí formát: 'Y' vykresluje aktuální rok.",
|
||||
"date_format_param_label": "Formát",
|
||||
"sequence": "Sekvence",
|
||||
@@ -1087,6 +1097,8 @@
|
||||
"description": "Ušetřete čas vytvořením poznámek a jejich opětovným použitím na fakturách, odhadech a platbách.",
|
||||
"notes": "Poznámky",
|
||||
"type": "Typ",
|
||||
"is_default": "Select by default",
|
||||
"is_default_description": "This note will be selected by default in new invoices.",
|
||||
"add_note": "Přidat poznámku",
|
||||
"add_new_note": "Přidat novou poznámku",
|
||||
"name": "Jméno",
|
||||
@@ -1236,7 +1248,7 @@
|
||||
"time_zone": "Časové pásmo",
|
||||
"fiscal_year": "Fiskální rok",
|
||||
"date_format": "Formát data",
|
||||
"time_format": "Time Fromat",
|
||||
"time_format": "Time Format",
|
||||
"discount_setting": "Nastavení slev",
|
||||
"discount_per_item": "Sleva za položku ",
|
||||
"discount_setting_description": "Povolte tuto možnost, pokud chcete přidat slevu do jednotlivých položek faktury. Ve výchozím nastavení je sleva přidána přímo na fakturu.",
|
||||
@@ -1249,7 +1261,7 @@
|
||||
"select_language": "Vyberte jazyk",
|
||||
"select_time_zone": "Vyberte časové pásmo",
|
||||
"select_date_format": "Vyberte formát data",
|
||||
"select_time_format": "Select Time Format",
|
||||
"select_time_format": "Vyberte formát času",
|
||||
"select_financial_year": "Vyberte fiskální rok",
|
||||
"recurring_invoice_status": "Stav opakující se faktury",
|
||||
"create_status": "Vytvořit stav",
|
||||
@@ -1258,8 +1270,8 @@
|
||||
"update_status": "Upravit stav",
|
||||
"completed": "Dokončeno",
|
||||
"company_currency_unchangeable": "Měnu společnosti nelze měnit",
|
||||
"invoice_use_time": "Use time in invoices",
|
||||
"invoice_use_time_description": "Enable this if you want to select exact invoice time.",
|
||||
"invoice_use_time": "Použítat čas ve fakturách",
|
||||
"invoice_use_time_description": "Povolte, pokud chcete zvolit přesný čas faktury.",
|
||||
"fiscal_years": {
|
||||
"january_december": "Leden - Prosinec",
|
||||
"february_january": "Únor - Leden",
|
||||
@@ -1349,8 +1361,8 @@
|
||||
"aws_root": "AWS Root",
|
||||
"s3_endpoint": "S3 Endpoint",
|
||||
"s3_key": "S3 klíč",
|
||||
"s3_secret": "S3 Secret",
|
||||
"s3_region": "S3 Region",
|
||||
"s3_secret": "S3 tajný klíč",
|
||||
"s3_region": "S3 region",
|
||||
"s3_bucket": "S3 Bucket",
|
||||
"s3_root": "S3 Root",
|
||||
"do_spaces_type": "Do Spaces type",
|
||||
@@ -1360,12 +1372,12 @@
|
||||
"do_spaces_bucket": "Do Spaces Bucket",
|
||||
"do_spaces_endpoint": "Do Spaces Endpoint",
|
||||
"do_spaces_root": "Do Spaces Root",
|
||||
"dropbox_type": "Dropbox Type",
|
||||
"dropbox_token": "Dropbox Token",
|
||||
"dropbox_key": "Dropbox Key",
|
||||
"dropbox_secret": "Dropbox Secret",
|
||||
"dropbox_app": "Dropbox App",
|
||||
"dropbox_root": "Dropbox Root",
|
||||
"dropbox_type": "Typ Dropboxu",
|
||||
"dropbox_token": "Dropbox token",
|
||||
"dropbox_key": "Dropbox klíč",
|
||||
"dropbox_secret": "Dropbox tajný klíč",
|
||||
"dropbox_app": "Aplikace Dropboxu",
|
||||
"dropbox_root": "Kořenový adresář Dropboxu",
|
||||
"default_driver": "Výchozí ovladač",
|
||||
"is_default": "JE VÝCHOZÍ",
|
||||
"set_default_disk": "Nastavit výchozí disk",
|
||||
@@ -1428,7 +1440,7 @@
|
||||
"time_zone": "Časové pásmo",
|
||||
"fiscal_year": "Fiskální rok",
|
||||
"date_format": "Formát data",
|
||||
"time_format": "Time Format",
|
||||
"time_format": "Formát času",
|
||||
"from_address": "Z adresy",
|
||||
"username": "Uživatelské jméno",
|
||||
"next": "Další",
|
||||
@@ -1478,12 +1490,12 @@
|
||||
"host": "Hostitel e-mailu",
|
||||
"port": "Port e-mailu",
|
||||
"driver": "Ovladač e-mailů",
|
||||
"secret": "Secret",
|
||||
"mailgun_secret": "Mailgun Secret",
|
||||
"secret": "Tajný klíč",
|
||||
"mailgun_secret": "Mailgun tajný klíč",
|
||||
"mailgun_domain": "Doména",
|
||||
"mailgun_endpoint": "Mailgun Endpoint",
|
||||
"ses_secret": "SES Secret",
|
||||
"ses_key": "SES Key",
|
||||
"ses_secret": "SES tajný klíč",
|
||||
"ses_key": "SES klíč",
|
||||
"password": "E-mailové heslo",
|
||||
"username": "Uživatelské jméno e-mailu",
|
||||
"mail_config": "Konfigurace e-mailu",
|
||||
@@ -1588,7 +1600,7 @@
|
||||
"pdf_invoice_label": "Faktura",
|
||||
"pdf_invoice_number": "Číslo faktury",
|
||||
"pdf_invoice_date": "Datum fakturace",
|
||||
"pdf_invoice_due_date": "Datum splatnosti",
|
||||
"pdf_invoice_due_date": "Due Date",
|
||||
"pdf_notes": "Poznámky",
|
||||
"pdf_items_label": "Položky",
|
||||
"pdf_quantity_label": "Množství",
|
||||
@@ -1623,9 +1635,9 @@
|
||||
"pdf_received_from": "Přijato od:",
|
||||
"pdf_tax_label": "Daň",
|
||||
"pdf_tax_id": "DIČ",
|
||||
"pdf_vat_id": "VAT-ID",
|
||||
"pdf_amount_paid": "Amount Paid",
|
||||
"pdf_amount_due": "Amount Due",
|
||||
"pdf_vat_id": "DIČ",
|
||||
"pdf_amount_paid": "Uhrazená částka",
|
||||
"pdf_amount_due": "Splatná částka",
|
||||
"mail_thanks": "Díky",
|
||||
"mail_view_estimate": "Zobrazit odhad",
|
||||
"mail_viewed_estimate": ":name si prohlédl tento odhad.",
|
||||
|
||||
20
lang/de.json
20
lang/de.json
@@ -852,7 +852,8 @@
|
||||
"payment_modes": "Zahlungsarten",
|
||||
"notes": "Notizen",
|
||||
"exchange_rate": "Wechselkurs",
|
||||
"address_information": "Adressinformationen"
|
||||
"address_information": "Adressinformationen",
|
||||
"pdf_generation": "PDF Generation"
|
||||
},
|
||||
"address_information": {
|
||||
"section_description": " Sie können Ihre Adressinformationen über das untenstehende Formular aktualisieren."
|
||||
@@ -893,6 +894,7 @@
|
||||
"mailgun_endpoint": "Mailgun-Endpunkt",
|
||||
"ses_secret": "SES Verschlüsselung",
|
||||
"ses_key": "SES-Taste",
|
||||
"ses_region": "AWS Region",
|
||||
"password": "E-Mail-Kennwort",
|
||||
"username": "E-Mail-Benutzername",
|
||||
"mail_config": "E-Mail-Konfiguration",
|
||||
@@ -904,7 +906,15 @@
|
||||
"pdf": {
|
||||
"title": "PDF-Einstellung",
|
||||
"footer_text": "Fußzeile Text",
|
||||
"pdf_layout": "PDF-Layout"
|
||||
"pdf_layout": "PDF-Layout",
|
||||
"pdf_configuration": "PDF Generation Settings",
|
||||
"section_description": "Change the way PDFs are generated",
|
||||
"driver": "PDF Driver to use",
|
||||
"papersize": "Papersize",
|
||||
"papersize_hint": "Papersize in width and height (ex. \"210mm 297mm\")",
|
||||
"gotenberg_host": "Gotenberg service host",
|
||||
"pdf_variables_save_successfully": "PDF configuration saved successfully",
|
||||
"pdf_variables_save_error": "PDF configuration could not be saved"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "Firmeninfo",
|
||||
@@ -1087,6 +1097,8 @@
|
||||
"description": "Sparen Sie Zeit, indem Sie Notizen erstellen und diese auf Ihren Rechnungen, Angeboten und Zahlungen wiederverwenden.",
|
||||
"notes": "Hinweise",
|
||||
"type": "Art",
|
||||
"is_default": "Standardmäßig auswählen",
|
||||
"is_default_description": "Diese Notiz wird standardmäßig in neuen Rechnungen ausgewählt.",
|
||||
"add_note": "Notiz hinzufügen",
|
||||
"add_new_note": "Neue Notiz hinzufügen",
|
||||
"name": "Name",
|
||||
@@ -1236,7 +1248,7 @@
|
||||
"time_zone": "Zeitzone",
|
||||
"fiscal_year": "Geschäftsjahr",
|
||||
"date_format": "Datum-Format",
|
||||
"time_format": "Time Fromat",
|
||||
"time_format": "Time Format",
|
||||
"discount_setting": "Einstellung Rabatt",
|
||||
"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.",
|
||||
@@ -1588,7 +1600,7 @@
|
||||
"pdf_invoice_label": "Rechnung",
|
||||
"pdf_invoice_number": "Rechnungsnummer",
|
||||
"pdf_invoice_date": "Rechnungsdatum",
|
||||
"pdf_invoice_due_date": "Fälligkeitsdatum",
|
||||
"pdf_invoice_due_date": "Due Date",
|
||||
"pdf_notes": "Hinweise",
|
||||
"pdf_items_label": "Artikel",
|
||||
"pdf_quantity_label": "Menge",
|
||||
|
||||
20
lang/el.json
20
lang/el.json
@@ -852,7 +852,8 @@
|
||||
"payment_modes": "Τρόπος πληρωμής",
|
||||
"notes": "Σημειώσεις",
|
||||
"exchange_rate": "Συναλλαγματική ισοτιμία",
|
||||
"address_information": "Address Information"
|
||||
"address_information": "Address Information",
|
||||
"pdf_generation": "PDF Generation"
|
||||
},
|
||||
"address_information": {
|
||||
"section_description": " You can update Your Address information using form below."
|
||||
@@ -893,6 +894,7 @@
|
||||
"mailgun_endpoint": "Mailgun Endpoint",
|
||||
"ses_secret": "SES Μυστικό",
|
||||
"ses_key": "Κλειδί SES",
|
||||
"ses_region": "AWS Region",
|
||||
"password": "Κωδικός Πρόσβασης Ταχυδρομείου",
|
||||
"username": "Όνομα Ταχυδρομείου",
|
||||
"mail_config": "Διαμόρφωση Mail",
|
||||
@@ -904,7 +906,15 @@
|
||||
"pdf": {
|
||||
"title": "Ρυθμίσεις PDF",
|
||||
"footer_text": "Κείμενο Υποσέλιδου",
|
||||
"pdf_layout": "Διάταξη PDF"
|
||||
"pdf_layout": "Διάταξη PDF",
|
||||
"pdf_configuration": "PDF Generation Settings",
|
||||
"section_description": "Change the way PDFs are generated",
|
||||
"driver": "PDF Driver to use",
|
||||
"papersize": "Papersize",
|
||||
"papersize_hint": "Papersize in width and height (ex. \"210mm 297mm\")",
|
||||
"gotenberg_host": "Gotenberg service host",
|
||||
"pdf_variables_save_successfully": "PDF configuration saved successfully",
|
||||
"pdf_variables_save_error": "PDF configuration could not be saved"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "Πληροφορίες Εταιρίας",
|
||||
@@ -1087,6 +1097,8 @@
|
||||
"description": "Εξοικονομήστε χρόνο δημιουργώντας σημειώσεις και επαναχρησιμοποίησή τους στα τιμολόγια σας, εκτιμήσεις και πληρωμές.",
|
||||
"notes": "Σημειώσεις",
|
||||
"type": "Type",
|
||||
"is_default": "Select by default",
|
||||
"is_default_description": "This note will be selected by default in new invoices.",
|
||||
"add_note": "Προσθήκη σημείωσης",
|
||||
"add_new_note": "Προσθήκη Νέας Σημείωσης",
|
||||
"name": "Όνομα",
|
||||
@@ -1236,7 +1248,7 @@
|
||||
"time_zone": "Ζώνη Ώρας",
|
||||
"fiscal_year": "Οικονομικό έτος",
|
||||
"date_format": "Μορφή Ημερομηνίας",
|
||||
"time_format": "Time Fromat",
|
||||
"time_format": "Time Format",
|
||||
"discount_setting": "Ρυθμίσεις Λογαριασμού",
|
||||
"discount_per_item": "Έκπτωση Ανά Στοιχείο ",
|
||||
"discount_setting_description": "Ενεργοποιήστε το αν θέλετε να προσθέσετε έκπτωση σε μεμονωμένα στοιχεία τιμολογίου. Από προεπιλογή, η έκπτωση προστίθεται απευθείας στο τιμολόγιο.",
|
||||
@@ -1588,7 +1600,7 @@
|
||||
"pdf_invoice_label": "Τιμολόγιο",
|
||||
"pdf_invoice_number": "Αριθμός τιμολογίου",
|
||||
"pdf_invoice_date": "Ημ/νία Τιμολόγησης",
|
||||
"pdf_invoice_due_date": "Echéance",
|
||||
"pdf_invoice_due_date": "Due Date",
|
||||
"pdf_notes": "Σημειώσεις",
|
||||
"pdf_items_label": "Προϊόντα",
|
||||
"pdf_quantity_label": "Ποσότητα",
|
||||
|
||||
46
lang/en.json
46
lang/en.json
@@ -161,7 +161,10 @@
|
||||
"name": "Name",
|
||||
"description": "Description",
|
||||
"percent": "Percent",
|
||||
"compound_tax": "Compound Tax"
|
||||
"compound_tax": "Compound Tax",
|
||||
"percentage": "Percentage",
|
||||
"fixed_amount": "Fixed Amount",
|
||||
"tax_type": "Tax Type"
|
||||
},
|
||||
"global_search": {
|
||||
"search": "Search...",
|
||||
@@ -303,6 +306,7 @@
|
||||
"total": "Total",
|
||||
"discount": "Discount",
|
||||
"sub_total": "Sub Total",
|
||||
"net_total": "Net",
|
||||
"estimate_number": "Estimate Number",
|
||||
"ref_number": "Ref Number",
|
||||
"contact": "Contact",
|
||||
@@ -852,7 +856,8 @@
|
||||
"payment_modes": "Payment Modes",
|
||||
"notes": "Notes",
|
||||
"exchange_rate": "Exchange Rate",
|
||||
"address_information": "Address Information"
|
||||
"address_information": "Address Information",
|
||||
"pdf_generation": "PDF Generation"
|
||||
},
|
||||
"address_information": {
|
||||
"section_description": " You can update Your Address information using form below."
|
||||
@@ -893,6 +898,7 @@
|
||||
"mailgun_endpoint": "Mailgun Endpoint",
|
||||
"ses_secret": "SES Secret",
|
||||
"ses_key": "SES Key",
|
||||
"ses_region": "AWS Region",
|
||||
"password": "Mail Password",
|
||||
"username": "Mail Username",
|
||||
"mail_config": "Mail Configuration",
|
||||
@@ -904,7 +910,15 @@
|
||||
"pdf": {
|
||||
"title": "PDF Setting",
|
||||
"footer_text": "Footer Text",
|
||||
"pdf_layout": "PDF Layout"
|
||||
"pdf_layout": "PDF Layout",
|
||||
"pdf_configuration": "PDF Generation Settings",
|
||||
"section_description": "Change the way PDFs are generated",
|
||||
"driver": "PDF Driver to use",
|
||||
"papersize": "Papersize",
|
||||
"papersize_hint": "Papersize in width and height (ex. \"210mm 297mm\")",
|
||||
"gotenberg_host": "Gotenberg service host",
|
||||
"pdf_variables_save_successfully": "PDF configuration saved successfully",
|
||||
"pdf_variables_save_error": "PDF configuration could not be saved"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "Company info",
|
||||
@@ -1087,6 +1101,8 @@
|
||||
"description": "Save time by creating notes and reusing them on your invoices, estimates & payments.",
|
||||
"notes": "Notes",
|
||||
"type": "Type",
|
||||
"is_default": "Select by default",
|
||||
"is_default_description": "This note will be selected by default in new invoices.",
|
||||
"add_note": "Add Note",
|
||||
"add_new_note": "Add New Note",
|
||||
"name": "Name",
|
||||
@@ -1193,14 +1209,23 @@
|
||||
"tax_per_item": "Tax Per Item",
|
||||
"tax_name": "Tax Name",
|
||||
"compound_tax": "Compound Tax",
|
||||
"amount": "Amount",
|
||||
"percent": "Percent",
|
||||
"fixed_amount": "Fixed Amount",
|
||||
"calculation_type": "Calculation Type",
|
||||
"percentage": "Percentage",
|
||||
"fixed": "Fixed",
|
||||
"action": "Action",
|
||||
"tax_setting_description": "Enable this if you want to add taxes to individual invoice items. By default, taxes are added directly to the invoice.",
|
||||
"created_message": "Tax type created successfully",
|
||||
"updated_message": "Tax type updated successfully",
|
||||
"deleted_message": "Tax type deleted successfully",
|
||||
"confirm_delete": "You will not be able to recover this Tax Type",
|
||||
"already_in_use": "Tax is already in use"
|
||||
"already_in_use": "Tax is already in use",
|
||||
"tax_included": "Inclusive taxes",
|
||||
"tax_included_description": "Enable this if you want to report that taxes are already included in the invoice items or invoice total.",
|
||||
"tax_included_by_default": "Enable inclusive taxes by default",
|
||||
"tax_included_by_default_description": "Enable this if you want to set inclusive taxes by default"
|
||||
},
|
||||
"payment_modes": {
|
||||
"title": "Payment Modes",
|
||||
@@ -1236,7 +1261,7 @@
|
||||
"time_zone": "Time Zone",
|
||||
"fiscal_year": "Financial Year",
|
||||
"date_format": "Date Format",
|
||||
"time_format": "Time Fromat",
|
||||
"time_format": "Time Format",
|
||||
"discount_setting": "Discount Setting",
|
||||
"discount_per_item": "Discount Per Item ",
|
||||
"discount_setting_description": "Enable this if you want to add Discount to individual invoice items. By default, Discount is added directly to the invoice.",
|
||||
@@ -1279,7 +1304,7 @@
|
||||
"title": "Update App",
|
||||
"description": "You can easily update InvoiceShelf by checking for a new update by clicking the button below",
|
||||
"check_update": "Check for updates",
|
||||
"insider_consent" : "Opt-in for Insider releases. Recommended for testing purposes only.",
|
||||
"insider_consent": "Opt-in for Insider releases. Recommended for testing purposes only.",
|
||||
"avail_update": "New Update available",
|
||||
"next_version": "Next version",
|
||||
"requirements": "Requirements",
|
||||
@@ -1467,9 +1492,9 @@
|
||||
"failed": "Domain verification failed. Please enter valid domain name.",
|
||||
"verify_and_continue": "Verify And Continue",
|
||||
"notes": {
|
||||
"notes" : "Notes:",
|
||||
"not_contain" : "App domain should not contain",
|
||||
"or" : "or",
|
||||
"notes": "Notes:",
|
||||
"not_contain": "App domain should not contain",
|
||||
"or": "or",
|
||||
"in_front": "in front of the domain.",
|
||||
"if_you": "If you're accessing the website on a different port, please mention the port. For example:"
|
||||
}
|
||||
@@ -1588,7 +1613,7 @@
|
||||
"pdf_invoice_label": "Invoice",
|
||||
"pdf_invoice_number": "Invoice Number",
|
||||
"pdf_invoice_date": "Invoice Date",
|
||||
"pdf_invoice_due_date": "Due date",
|
||||
"pdf_invoice_due_date": "Due Date",
|
||||
"pdf_notes": "Notes",
|
||||
"pdf_items_label": "Items",
|
||||
"pdf_quantity_label": "Quantity",
|
||||
@@ -1596,6 +1621,7 @@
|
||||
"pdf_discount_label": "Discount",
|
||||
"pdf_amount_label": "Amount",
|
||||
"pdf_subtotal": "Subtotal",
|
||||
"pdf_net_total": "Net",
|
||||
"pdf_total": "Total",
|
||||
"pdf_payment_label": "Payment",
|
||||
"pdf_payment_receipt_label": "PAYMENT RECEIPT",
|
||||
|
||||
34
lang/es.json
34
lang/es.json
@@ -49,7 +49,7 @@
|
||||
"view": "Ver",
|
||||
"add_new_item": "Agregar un Nuevo Artículo",
|
||||
"clear_all": "Limpiar todo",
|
||||
"showing": "Mostrar",
|
||||
"showing": "Mostrando",
|
||||
"of": "de",
|
||||
"actions": "Acciones",
|
||||
"subtotal": "SUBTOTAL",
|
||||
@@ -285,8 +285,8 @@
|
||||
},
|
||||
"estimates": {
|
||||
"title": "Presupuestos",
|
||||
"accept_estimate": "Aceptar cotización",
|
||||
"reject_estimate": "Rechazar cotización",
|
||||
"accept_estimate": "Aceptar presupuesto",
|
||||
"reject_estimate": "Rechazar presupuesto",
|
||||
"estimate": "Presupuesto | Presupuestos",
|
||||
"estimates_list": "Lista de presupuestos",
|
||||
"days": "{días} Días",
|
||||
@@ -303,6 +303,7 @@
|
||||
"total": "Total",
|
||||
"discount": "Descuento",
|
||||
"sub_total": "Subtotal",
|
||||
"net_total": "Base Imponible",
|
||||
"estimate_number": "Número de Presupuesto",
|
||||
"ref_number": "Número de referencia",
|
||||
"contact": "Contacto",
|
||||
@@ -320,7 +321,7 @@
|
||||
"convert_to_invoice": "Convertir a factura",
|
||||
"mark_as_sent": "Marcar como enviado",
|
||||
"send_estimate": "Enviar presupuesto",
|
||||
"resend_estimate": "Reenviar estimado",
|
||||
"resend_estimate": "Reenviar presupuesto",
|
||||
"record_payment": "Registro de pago",
|
||||
"add_estimate": "Agregar presupuesto",
|
||||
"save_estimate": "Guardar presupuesto",
|
||||
@@ -852,7 +853,8 @@
|
||||
"payment_modes": "Formas de pago",
|
||||
"notes": "Notas",
|
||||
"exchange_rate": "Tasa de cambio",
|
||||
"address_information": "Información de dirección"
|
||||
"address_information": "Información de dirección",
|
||||
"pdf_generation": "PDF Generation"
|
||||
},
|
||||
"address_information": {
|
||||
"section_description": "Puede actualizar la información de su dirección utilizando el siguiente formulario."
|
||||
@@ -893,6 +895,7 @@
|
||||
"mailgun_endpoint": "Mailgun endpoint",
|
||||
"ses_secret": "Secreto SES",
|
||||
"ses_key": "Clave SES",
|
||||
"ses_region": "Región de AWS",
|
||||
"password": "Contraseña de correo",
|
||||
"username": "Nombre de usuario de correo",
|
||||
"mail_config": "Configuración de correo",
|
||||
@@ -904,7 +907,15 @@
|
||||
"pdf": {
|
||||
"title": "Configuración de PDF",
|
||||
"footer_text": "Texto de pie de página",
|
||||
"pdf_layout": "Diseño PDF"
|
||||
"pdf_layout": "Diseño PDF",
|
||||
"pdf_configuration": "PDF Generation Settings",
|
||||
"section_description": "Change the way PDFs are generated",
|
||||
"driver": "PDF Driver to use",
|
||||
"papersize": "Papersize",
|
||||
"papersize_hint": "Papersize in width and height (ex. \"210mm 297mm\")",
|
||||
"gotenberg_host": "Gotenberg service host",
|
||||
"pdf_variables_save_successfully": "PDF configuration saved successfully",
|
||||
"pdf_variables_save_error": "PDF configuration could not be saved"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "Información de la compañía",
|
||||
@@ -1087,6 +1098,8 @@
|
||||
"description": "Ahorre tiempo creando notas y reutilizándolas en sus facturas, cálculos y pagos.",
|
||||
"notes": "Notas",
|
||||
"type": "Tipo",
|
||||
"is_default": "Seleccionar por defecto",
|
||||
"is_default_description": "Esta nota será seleccionada por defecto en las nuevas facturas.",
|
||||
"add_note": "Agregar nota",
|
||||
"add_new_note": "Agregar nueva nota",
|
||||
"name": "Nombre",
|
||||
@@ -1200,7 +1213,11 @@
|
||||
"updated_message": "Tipo de impuesto actualizado correctamente",
|
||||
"deleted_message": "Tipo de impuesto eliminado correctamente",
|
||||
"confirm_delete": "No podrá recuperar este tipo de impuesto",
|
||||
"already_in_use": "El impuesto ya está en uso."
|
||||
"already_in_use": "El impuesto ya está en uso.",
|
||||
"tax_included": "Impuestos inclusivos",
|
||||
"tax_included_description": "Habilítelo si desea informar que los impuestos ya están incluidos en los artículos de la factura o en el total de la factura.",
|
||||
"tax_included_by_default": "Usar impuestos inclusivos por defecto",
|
||||
"tax_included_by_default_description": "Habilítelo si desea establecer los impuestos inclusivos por defecto."
|
||||
},
|
||||
"payment_modes": {
|
||||
"title": "Formas de pago",
|
||||
@@ -1588,7 +1605,7 @@
|
||||
"pdf_invoice_label": "Factura",
|
||||
"pdf_invoice_number": "Numero de factura",
|
||||
"pdf_invoice_date": "Fecha de la factura",
|
||||
"pdf_invoice_due_date": "Fecha final",
|
||||
"pdf_invoice_due_date": "Fecha de vencimiento",
|
||||
"pdf_notes": "Notas",
|
||||
"pdf_items_label": "Artículos",
|
||||
"pdf_quantity_label": "Cantidad",
|
||||
@@ -1596,6 +1613,7 @@
|
||||
"pdf_discount_label": "Descuento",
|
||||
"pdf_amount_label": "Cantidad",
|
||||
"pdf_subtotal": "Subtotal",
|
||||
"pdf_net_total": "Base Imponible",
|
||||
"pdf_total": "Total",
|
||||
"pdf_payment_label": "Pago",
|
||||
"pdf_payment_receipt_label": "RECIBO DE PAGO",
|
||||
|
||||
20
lang/fa.json
20
lang/fa.json
@@ -852,7 +852,8 @@
|
||||
"payment_modes": "Payment Modes",
|
||||
"notes": "Notes",
|
||||
"exchange_rate": "Exchange Rate",
|
||||
"address_information": "Address Information"
|
||||
"address_information": "Address Information",
|
||||
"pdf_generation": "PDF Generation"
|
||||
},
|
||||
"address_information": {
|
||||
"section_description": " You can update Your Address information using form below."
|
||||
@@ -893,6 +894,7 @@
|
||||
"mailgun_endpoint": "Mailgun Endpoint",
|
||||
"ses_secret": "SES Secret",
|
||||
"ses_key": "SES Key",
|
||||
"ses_region": "AWS Region",
|
||||
"password": "Mail Password",
|
||||
"username": "Mail Username",
|
||||
"mail_config": "Mail Configuration",
|
||||
@@ -904,7 +906,15 @@
|
||||
"pdf": {
|
||||
"title": "PDF Setting",
|
||||
"footer_text": "Footer Text",
|
||||
"pdf_layout": "PDF Layout"
|
||||
"pdf_layout": "PDF Layout",
|
||||
"pdf_configuration": "PDF Generation Settings",
|
||||
"section_description": "Change the way PDFs are generated",
|
||||
"driver": "PDF Driver to use",
|
||||
"papersize": "Papersize",
|
||||
"papersize_hint": "Papersize in width and height (ex. \"210mm 297mm\")",
|
||||
"gotenberg_host": "Gotenberg service host",
|
||||
"pdf_variables_save_successfully": "PDF configuration saved successfully",
|
||||
"pdf_variables_save_error": "PDF configuration could not be saved"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "Company info",
|
||||
@@ -1087,6 +1097,8 @@
|
||||
"description": "Save time by creating notes and reusing them on your invoices, estimates & payments.",
|
||||
"notes": "Notes",
|
||||
"type": "Type",
|
||||
"is_default": "Select by default",
|
||||
"is_default_description": "This note will be selected by default in new invoices.",
|
||||
"add_note": "Add Note",
|
||||
"add_new_note": "Add New Note",
|
||||
"name": "Name",
|
||||
@@ -1236,7 +1248,7 @@
|
||||
"time_zone": "Time Zone",
|
||||
"fiscal_year": "Financial Year",
|
||||
"date_format": "Date Format",
|
||||
"time_format": "Time Fromat",
|
||||
"time_format": "Time Format",
|
||||
"discount_setting": "Discount Setting",
|
||||
"discount_per_item": "Discount Per Item ",
|
||||
"discount_setting_description": "Enable this if you want to add Discount to individual invoice items. By default, Discount is added directly to the invoice.",
|
||||
@@ -1588,7 +1600,7 @@
|
||||
"pdf_invoice_label": "Invoice",
|
||||
"pdf_invoice_number": "Invoice Number",
|
||||
"pdf_invoice_date": "Invoice Date",
|
||||
"pdf_invoice_due_date": "Due date",
|
||||
"pdf_invoice_due_date": "Due Date",
|
||||
"pdf_notes": "Notes",
|
||||
"pdf_items_label": "Items",
|
||||
"pdf_quantity_label": "Quantity",
|
||||
|
||||
20
lang/fi.json
20
lang/fi.json
@@ -852,7 +852,8 @@
|
||||
"payment_modes": "Maksutavat",
|
||||
"notes": "Viestit",
|
||||
"exchange_rate": "Exchange Rate",
|
||||
"address_information": "Address Information"
|
||||
"address_information": "Address Information",
|
||||
"pdf_generation": "PDF Generation"
|
||||
},
|
||||
"address_information": {
|
||||
"section_description": " You can update Your Address information using form below."
|
||||
@@ -893,6 +894,7 @@
|
||||
"mailgun_endpoint": "Mailgun päätepiste",
|
||||
"ses_secret": "SES salaus",
|
||||
"ses_key": "SES avain",
|
||||
"ses_region": "AWS Region",
|
||||
"password": "Sähköpostin salasana",
|
||||
"username": "Sähköpostin käyttäjänimi",
|
||||
"mail_config": "Sähköposti asetukset",
|
||||
@@ -904,7 +906,15 @@
|
||||
"pdf": {
|
||||
"title": "PDF Asetukset",
|
||||
"footer_text": "Alaotsikko teksti",
|
||||
"pdf_layout": "PDF asettelu"
|
||||
"pdf_layout": "PDF asettelu",
|
||||
"pdf_configuration": "PDF Generation Settings",
|
||||
"section_description": "Change the way PDFs are generated",
|
||||
"driver": "PDF Driver to use",
|
||||
"papersize": "Papersize",
|
||||
"papersize_hint": "Papersize in width and height (ex. \"210mm 297mm\")",
|
||||
"gotenberg_host": "Gotenberg service host",
|
||||
"pdf_variables_save_successfully": "PDF configuration saved successfully",
|
||||
"pdf_variables_save_error": "PDF configuration could not be saved"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "Yritystiedot",
|
||||
@@ -1087,6 +1097,8 @@
|
||||
"description": "Säästä aikaa luomalla viestejä, joita voit käyttää laskuilla, tarjouksilla ja maksuissa.",
|
||||
"notes": "Viestit",
|
||||
"type": "Tyyppi",
|
||||
"is_default": "Select by default",
|
||||
"is_default_description": "This note will be selected by default in new invoices.",
|
||||
"add_note": "Lisää viesti",
|
||||
"add_new_note": "Lisää uusi viesti",
|
||||
"name": "Nimi",
|
||||
@@ -1236,7 +1248,7 @@
|
||||
"time_zone": "Aikavyöhyke",
|
||||
"fiscal_year": "Tilikausi",
|
||||
"date_format": "Päivämäärä formaatti",
|
||||
"time_format": "Time Fromat",
|
||||
"time_format": "Time Format",
|
||||
"discount_setting": "Alennusten määritys",
|
||||
"discount_per_item": "Alennus per tuote ",
|
||||
"discount_setting_description": "Aktivoi tämä jos haluat lisätä alennuksen rivikohtaisesti. Oletuksena, Alennus lisätään suoraan laskun kokonaissummaan.",
|
||||
@@ -1588,7 +1600,7 @@
|
||||
"pdf_invoice_label": "Lasku",
|
||||
"pdf_invoice_number": "Laskunumero",
|
||||
"pdf_invoice_date": "Laskun päiväys",
|
||||
"pdf_invoice_due_date": "Eräpäivä",
|
||||
"pdf_invoice_due_date": "Due Date",
|
||||
"pdf_notes": "Viesti",
|
||||
"pdf_items_label": "Tuotenimi",
|
||||
"pdf_quantity_label": "Määrä",
|
||||
|
||||
38
lang/fr.json
38
lang/fr.json
@@ -852,7 +852,8 @@
|
||||
"payment_modes": "Modes de paiement",
|
||||
"notes": "Notes de bas de page",
|
||||
"exchange_rate": "Taux de change",
|
||||
"address_information": "Information d'adresse"
|
||||
"address_information": "Information d'adresse",
|
||||
"pdf_generation": "PDF Generation"
|
||||
},
|
||||
"address_information": {
|
||||
"section_description": " Vous pouvez mettre à jour vos informations d'adresse via le formulaire ci dessous."
|
||||
@@ -864,7 +865,7 @@
|
||||
"primary_currency": "Devise principale",
|
||||
"timezone": "Fuseau horaire",
|
||||
"date_format": "Format de date",
|
||||
"time_format": "Time Format",
|
||||
"time_format": "Format d'heure",
|
||||
"currencies": {
|
||||
"title": "Devises",
|
||||
"currency": "Devise | Devises",
|
||||
@@ -893,6 +894,7 @@
|
||||
"mailgun_endpoint": "Mailgun Endpoint",
|
||||
"ses_secret": "SES Secret",
|
||||
"ses_key": "SES Key",
|
||||
"ses_region": "AWS Region",
|
||||
"password": "Mot de passe",
|
||||
"username": "Nom d'utilisateur",
|
||||
"mail_config": "Envoi d'emails",
|
||||
@@ -904,7 +906,15 @@
|
||||
"pdf": {
|
||||
"title": "Paramètre PDF",
|
||||
"footer_text": "Pied de page",
|
||||
"pdf_layout": "Mise en page PDF"
|
||||
"pdf_layout": "Mise en page PDF",
|
||||
"pdf_configuration": "PDF Generation Settings",
|
||||
"section_description": "Change the way PDFs are generated",
|
||||
"driver": "PDF Driver to use",
|
||||
"papersize": "Papersize",
|
||||
"papersize_hint": "Papersize in width and height (ex. \"210mm 297mm\")",
|
||||
"gotenberg_host": "Gotenberg service host",
|
||||
"pdf_variables_save_successfully": "PDF configuration saved successfully",
|
||||
"pdf_variables_save_error": "PDF configuration could not be saved"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "Coordonnées de la société",
|
||||
@@ -991,7 +1001,7 @@
|
||||
"delimiter_description": "Un caractère servant à séparer deux composants. Par exemple, un trait d'union",
|
||||
"delimiter_param_label": "Caractère",
|
||||
"date_format": "Date",
|
||||
"time_format": "Time Format",
|
||||
"time_format": "Format d'heure",
|
||||
"date_format_description": "Une date qui peut formatée. Par exemple, \"Y\" affichera l'année en cours.",
|
||||
"date_format_param_label": "Format",
|
||||
"sequence": "Suite",
|
||||
@@ -1087,6 +1097,8 @@
|
||||
"description": "Créez des notes de bas de page réutilisable sur vos factures, devis et paiements.",
|
||||
"notes": "Note de bas de page",
|
||||
"type": "Type ",
|
||||
"is_default": "Select by default",
|
||||
"is_default_description": "This note will be selected by default in new invoices.",
|
||||
"add_note": "Nouvelle note de bas de page",
|
||||
"add_new_note": "Ajouter une note de bas de page",
|
||||
"name": "Nom",
|
||||
@@ -1236,7 +1248,7 @@
|
||||
"time_zone": "Fuseau horaire",
|
||||
"fiscal_year": "Exercice fiscal",
|
||||
"date_format": "Format de date",
|
||||
"time_format": "Time Fromat",
|
||||
"time_format": "Time Format",
|
||||
"discount_setting": "Réglage de remise",
|
||||
"discount_per_item": "Remise par article",
|
||||
"discount_setting_description": "Activez cette option si vous souhaitez détailler les remises par article. Par défaut, les remises sont ajoutées au sous-total.",
|
||||
@@ -1248,8 +1260,8 @@
|
||||
"updated_message": "Préférences mises à jour",
|
||||
"select_language": "Choisir la langue",
|
||||
"select_time_zone": "Sélectionnez le fuseau horaire",
|
||||
"select_date_format": "Sélectionnez le format de date",
|
||||
"select_time_format": "Select Time Format",
|
||||
"select_date_format": "Choix du format de date",
|
||||
"select_time_format": "Choix du format d'heure",
|
||||
"select_financial_year": "Exercice fiscal",
|
||||
"recurring_invoice_status": "Statut de la facture récurrente",
|
||||
"create_status": "Créer un statut",
|
||||
@@ -1258,8 +1270,8 @@
|
||||
"update_status": "Mettre à jour le statut",
|
||||
"completed": "Terminé",
|
||||
"company_currency_unchangeable": "La devise de la société ne peut pas être modifiée",
|
||||
"invoice_use_time": "Use time in invoices",
|
||||
"invoice_use_time_description": "Enable this if you want to select exact invoice time.",
|
||||
"invoice_use_time": "Inclure l'heure dans les factures",
|
||||
"invoice_use_time_description": "Activez cette option si vous souhaitez indiquer l'heure exacte de la facturation.",
|
||||
"fiscal_years": {
|
||||
"january_december": "Janvier - Décembre",
|
||||
"february_january": "Février - Janvier",
|
||||
@@ -1428,7 +1440,7 @@
|
||||
"time_zone": "Fuseau horaire",
|
||||
"fiscal_year": "Exercice fiscal",
|
||||
"date_format": "Format de date",
|
||||
"time_format": "Time Format",
|
||||
"time_format": "Format d'heure",
|
||||
"from_address": "De l'adresse",
|
||||
"username": "Nom d'utilisateur",
|
||||
"next": "Suivant",
|
||||
@@ -1588,7 +1600,7 @@
|
||||
"pdf_invoice_label": "Facture",
|
||||
"pdf_invoice_number": "Numéro",
|
||||
"pdf_invoice_date": "Date",
|
||||
"pdf_invoice_due_date": "Date d’échéance",
|
||||
"pdf_invoice_due_date": "Due Date",
|
||||
"pdf_notes": "Notes de bas de page",
|
||||
"pdf_items_label": "Articles",
|
||||
"pdf_quantity_label": "Quantité",
|
||||
@@ -1624,8 +1636,8 @@
|
||||
"pdf_tax_label": "Taxe",
|
||||
"pdf_tax_id": "N° fiscal",
|
||||
"pdf_vat_id": "N° de TVA",
|
||||
"pdf_amount_paid": "Amount Paid",
|
||||
"pdf_amount_due": "Amount Due",
|
||||
"pdf_amount_paid": "Montant acquitté",
|
||||
"pdf_amount_due": "Montant dû",
|
||||
"mail_thanks": "Merci",
|
||||
"mail_view_estimate": "Voir le devis",
|
||||
"mail_viewed_estimate": ":name a consulté ce devis.",
|
||||
|
||||
20
lang/hi.json
20
lang/hi.json
@@ -852,7 +852,8 @@
|
||||
"payment_modes": "भुगतान के प्रकार",
|
||||
"notes": "नोट्स",
|
||||
"exchange_rate": "विनिमय दर",
|
||||
"address_information": "पते के बारे में जानकारी"
|
||||
"address_information": "पते के बारे में जानकारी",
|
||||
"pdf_generation": "PDF Generation"
|
||||
},
|
||||
"address_information": {
|
||||
"section_description": " आप नीचे दिए गए फॉर्म का उपयोग करके अपनी पता जानकारी अपडेट कर सकते हैं"
|
||||
@@ -893,6 +894,7 @@
|
||||
"mailgun_endpoint": "Mailgun Endpoint",
|
||||
"ses_secret": "SES Secret",
|
||||
"ses_key": "SES Key",
|
||||
"ses_region": "AWS Region",
|
||||
"password": "Mail Password",
|
||||
"username": "Mail Username",
|
||||
"mail_config": "Mail Configuration",
|
||||
@@ -904,7 +906,15 @@
|
||||
"pdf": {
|
||||
"title": "PDF Setting",
|
||||
"footer_text": "Footer Text",
|
||||
"pdf_layout": "PDF Layout"
|
||||
"pdf_layout": "PDF Layout",
|
||||
"pdf_configuration": "PDF Generation Settings",
|
||||
"section_description": "Change the way PDFs are generated",
|
||||
"driver": "PDF Driver to use",
|
||||
"papersize": "Papersize",
|
||||
"papersize_hint": "Papersize in width and height (ex. \"210mm 297mm\")",
|
||||
"gotenberg_host": "Gotenberg service host",
|
||||
"pdf_variables_save_successfully": "PDF configuration saved successfully",
|
||||
"pdf_variables_save_error": "PDF configuration could not be saved"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "Company info",
|
||||
@@ -1087,6 +1097,8 @@
|
||||
"description": "Save time by creating notes and reusing them on your invoices, estimates & payments.",
|
||||
"notes": "Notes",
|
||||
"type": "Type",
|
||||
"is_default": "Select by default",
|
||||
"is_default_description": "This note will be selected by default in new invoices.",
|
||||
"add_note": "Add Note",
|
||||
"add_new_note": "Add New Note",
|
||||
"name": "Name",
|
||||
@@ -1236,7 +1248,7 @@
|
||||
"time_zone": "Time Zone",
|
||||
"fiscal_year": "Financial Year",
|
||||
"date_format": "Date Format",
|
||||
"time_format": "Time Fromat",
|
||||
"time_format": "Time Format",
|
||||
"discount_setting": "Discount Setting",
|
||||
"discount_per_item": "Discount Per Item ",
|
||||
"discount_setting_description": "Enable this if you want to add Discount to individual invoice items. By default, Discount is added directly to the invoice.",
|
||||
@@ -1588,7 +1600,7 @@
|
||||
"pdf_invoice_label": "Invoice",
|
||||
"pdf_invoice_number": "Invoice Number",
|
||||
"pdf_invoice_date": "Invoice Date",
|
||||
"pdf_invoice_due_date": "Due date",
|
||||
"pdf_invoice_due_date": "Due Date",
|
||||
"pdf_notes": "Notes",
|
||||
"pdf_items_label": "Items",
|
||||
"pdf_quantity_label": "Quantity",
|
||||
|
||||
20
lang/hr.json
20
lang/hr.json
@@ -852,7 +852,8 @@
|
||||
"payment_modes": "Način plaćanja",
|
||||
"notes": "Napomene",
|
||||
"exchange_rate": "Tečaj",
|
||||
"address_information": "Podaci o adresi"
|
||||
"address_information": "Podaci o adresi",
|
||||
"pdf_generation": "PDF Generation"
|
||||
},
|
||||
"address_information": {
|
||||
"section_description": " Možete ažurirati svoju adresu u slijedećem obrascu."
|
||||
@@ -893,6 +894,7 @@
|
||||
"mailgun_endpoint": "Mailgun Endpoint",
|
||||
"ses_secret": "SES Lozinka",
|
||||
"ses_key": "SES Ključ",
|
||||
"ses_region": "AWS Region",
|
||||
"password": "Mail Lozinka",
|
||||
"username": "Mail Korisničko Ime",
|
||||
"mail_config": "Mail Postavke",
|
||||
@@ -904,7 +906,15 @@
|
||||
"pdf": {
|
||||
"title": "PDF Postavke",
|
||||
"footer_text": "Tekstualno zaglavlje na dnu strane",
|
||||
"pdf_layout": "PDF Raspored"
|
||||
"pdf_layout": "PDF Raspored",
|
||||
"pdf_configuration": "PDF Generation Settings",
|
||||
"section_description": "Change the way PDFs are generated",
|
||||
"driver": "PDF Driver to use",
|
||||
"papersize": "Papersize",
|
||||
"papersize_hint": "Papersize in width and height (ex. \"210mm 297mm\")",
|
||||
"gotenberg_host": "Gotenberg service host",
|
||||
"pdf_variables_save_successfully": "PDF configuration saved successfully",
|
||||
"pdf_variables_save_error": "PDF configuration could not be saved"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "Podaci o firmi",
|
||||
@@ -1087,6 +1097,8 @@
|
||||
"description": "Uštedite vrijeme kreirajući napomene i koristeći ih na računima, ponudama i uplatama.",
|
||||
"notes": "Napomene",
|
||||
"type": "Vrsta",
|
||||
"is_default": "Select by default",
|
||||
"is_default_description": "This note will be selected by default in new invoices.",
|
||||
"add_note": "Dodaj Napomenu",
|
||||
"add_new_note": "Dodaj novu Napomenu",
|
||||
"name": "Naziv",
|
||||
@@ -1236,7 +1248,7 @@
|
||||
"time_zone": "Vremenska Zona",
|
||||
"fiscal_year": "Financijska Godina",
|
||||
"date_format": "Format datuma",
|
||||
"time_format": "Time Fromat",
|
||||
"time_format": "Time Format",
|
||||
"discount_setting": "Postavke popusta",
|
||||
"discount_per_item": "Popust po stavkama",
|
||||
"discount_setting_description": "Izaberite ovo ako želite dodati Popust na individualne stavke. Zadana vrijednost je da je Popust dodan direktno na fakturu.",
|
||||
@@ -1588,7 +1600,7 @@
|
||||
"pdf_invoice_label": "Račun",
|
||||
"pdf_invoice_number": "Broj Fakture",
|
||||
"pdf_invoice_date": "Datum Fakture",
|
||||
"pdf_invoice_due_date": "Datum dospijeća Fakture",
|
||||
"pdf_invoice_due_date": "Due Date",
|
||||
"pdf_notes": "Napomena",
|
||||
"pdf_items_label": "Stavke",
|
||||
"pdf_quantity_label": "Količina",
|
||||
|
||||
348
lang/id.json
348
lang/id.json
@@ -36,7 +36,7 @@
|
||||
"ascending": "Sortir naik",
|
||||
"descending": "Sortir turun",
|
||||
"subject": "Perihal",
|
||||
"body": "Body",
|
||||
"body": "Isi",
|
||||
"message": "Pesan",
|
||||
"send": "Kirim",
|
||||
"preview": "Pratinjau",
|
||||
@@ -97,38 +97,38 @@
|
||||
"docs": "Dokumen",
|
||||
"do_you_wish_to_continue": "Apakah anda ingin melanjutkan?",
|
||||
"note": "Catatan",
|
||||
"pay_invoice": "Bayar tagihan",
|
||||
"pay_invoice": "Bayar Faktur",
|
||||
"login_successfully": "Login berhasil!",
|
||||
"logged_out_successfully": "Berhasil keluar",
|
||||
"mark_as_default": "Tandai sebagai default",
|
||||
"no_data_found": "No data found",
|
||||
"no_data_found": "Tidak ada data yang ditemukan",
|
||||
"pagination": {
|
||||
"previous": "Previous",
|
||||
"next": "Next",
|
||||
"showing": "Showing",
|
||||
"to": "to",
|
||||
"of": "of",
|
||||
"previous": "Sebelumnya",
|
||||
"next": "Berikutnya",
|
||||
"showing": "Menampilkan",
|
||||
"to": "untuk",
|
||||
"of": "dari",
|
||||
"results": "hasil"
|
||||
},
|
||||
"file_upload": {
|
||||
"drag_a_file": "Drag a file here or",
|
||||
"browse": "browse",
|
||||
"to_choose": "to choose a file"
|
||||
"drag_a_file": "Seret berkas ke sini atau",
|
||||
"browse": "telusuri",
|
||||
"to_choose": "untuk memilih berkas"
|
||||
},
|
||||
"multiselect": {
|
||||
"the_list_is_empty": "The list is empty",
|
||||
"no_results_found": "No results found"
|
||||
"the_list_is_empty": "Daftar ini kosong",
|
||||
"no_results_found": "Tidak ada hasil yang ditemukan"
|
||||
},
|
||||
"copy_to_clipboard": "Copy to Clipboard"
|
||||
"copy_to_clipboard": "Salin ke Clipboard"
|
||||
},
|
||||
"dashboard": {
|
||||
"select_year": "Pilih tahun",
|
||||
"cards": {
|
||||
"due_amount": "Jumlah yang harus dibayar",
|
||||
"customers": "Customer | Customers",
|
||||
"customers": "Pelanggan | Pelanggan",
|
||||
"invoices": "Faktur | Faktur",
|
||||
"estimates": "Penawaran | Penawaran",
|
||||
"payments": "Payment | Payments"
|
||||
"payments": "Pembayaran | Pembayaran"
|
||||
},
|
||||
"chart_info": {
|
||||
"total_sales": "Penjualan",
|
||||
@@ -191,7 +191,7 @@
|
||||
"customers": {
|
||||
"title": "Pelanggan",
|
||||
"prefix": "Awalan",
|
||||
"tax_id": "Tax ID",
|
||||
"tax_id": "ID Pajak",
|
||||
"add_customer": "Tambah Pelanggan",
|
||||
"contacts_list": "Daftar Pelanggan",
|
||||
"name": "Nama",
|
||||
@@ -206,7 +206,7 @@
|
||||
"phone": "Telepon",
|
||||
"website": "Situs Web",
|
||||
"overview": "Tinjauan",
|
||||
"invoice_prefix": "Awalan Pajak",
|
||||
"invoice_prefix": "Awalan Faktur",
|
||||
"estimate_prefix": "Awalan Perkiraan",
|
||||
"payment_prefix": "Awalan Pembayaran",
|
||||
"enable_portal": "Mengaktifkan Portal",
|
||||
@@ -248,7 +248,7 @@
|
||||
"no_matching_customers": "Pelanggan tidak ditemukan!",
|
||||
"phone_number": "Nomor Telepon",
|
||||
"create_date": "Buat Tanggal",
|
||||
"confirm_delete": "Anda tidak akan dapat mengembalikan pelanggan dan semua tagihan terkait. | Anda tidak akan dapat mengembalikan pelanggan dan semua Tagihan terkait, Penawaran dan Pembayaran.",
|
||||
"confirm_delete": "Anda tidak akan dapat mengembalikan pelanggan dan semua Faktur, Penawaran dan Pembayaran terkait. | Anda tidak akan dapat mengembalikan pelanggan dan semua Faktur, Penawaran dan Pembayaran terkait.",
|
||||
"created_message": "Pelanggan berhasil dibuat",
|
||||
"updated_message": "Pelanggan berhasil diperbarui",
|
||||
"address_updated_message": "Informasi Alamat Berhasil Diperbarui",
|
||||
@@ -383,7 +383,7 @@
|
||||
"invoices": {
|
||||
"title": "Faktur",
|
||||
"download": "Unduh",
|
||||
"pay_invoice": "Bayar tagihan",
|
||||
"pay_invoice": "Bayar Faktur",
|
||||
"invoices_list": "Daftar Faktur",
|
||||
"invoice_information": "Informasi tagihan",
|
||||
"days": "{days} Hari",
|
||||
@@ -521,7 +521,7 @@
|
||||
"resend_invoice": "Kirim Ulang Faktur Berulang",
|
||||
"invoice_template": "Nomor Faktur Berulang",
|
||||
"conversion_message": "Faktur Berulang berhasil dikloning",
|
||||
"template": "Template",
|
||||
"template": "Templat",
|
||||
"mark_as_sent": "Tandai sebagai terkirim",
|
||||
"confirm_send_invoice": "Faktur berulang ini akan dikirim melalui email ke pelanggan",
|
||||
"invoice_mark_as_sent": "Faktur berulang ini akan ditandai sebagai terkirim",
|
||||
@@ -565,7 +565,7 @@
|
||||
"type_item_description": "Deskripsi permintaan (opsional)"
|
||||
},
|
||||
"frequency": {
|
||||
"title": "Frequency (using cron format)",
|
||||
"title": "Frekuensi (menggunakan format cron)",
|
||||
"select_frequency": "Pilih Frekuensi",
|
||||
"minute": "Menit",
|
||||
"hour": "Jam",
|
||||
@@ -595,7 +595,7 @@
|
||||
"limit": {
|
||||
"none": "Tidak ada",
|
||||
"date": "Tanggal",
|
||||
"count": "Count"
|
||||
"count": "Jumlah"
|
||||
}
|
||||
},
|
||||
"payments": {
|
||||
@@ -806,23 +806,23 @@
|
||||
"date_range": "Pilih Rentang Tanggal"
|
||||
},
|
||||
"errors": {
|
||||
"required": "Field is required"
|
||||
"required": "Wajib diisi"
|
||||
},
|
||||
"invoices": {
|
||||
"invoice": "Faktur",
|
||||
"invoice_date": "Tanggal Faktur",
|
||||
"due_date": "Due Date",
|
||||
"amount": "Amount",
|
||||
"due_date": "Tanggal Jatuh Tempo",
|
||||
"amount": "Jumlah",
|
||||
"contact_name": "Nama Kontak",
|
||||
"status": "Status"
|
||||
},
|
||||
"estimates": {
|
||||
"estimate": "Penawaran",
|
||||
"estimate_date": "Tanggal Penawaran",
|
||||
"due_date": "Due Date",
|
||||
"due_date": "Tanggal Jatuh Tempo",
|
||||
"estimate_number": "Nomor Penawaran",
|
||||
"ref_number": "Nomor Referensi",
|
||||
"amount": "Amount",
|
||||
"amount": "Jumlah",
|
||||
"contact_name": "Nama Kontak",
|
||||
"status": "Status"
|
||||
},
|
||||
@@ -830,8 +830,8 @@
|
||||
"expenses": "Pengeluaran",
|
||||
"category": "Kategori",
|
||||
"date": "Tanggal",
|
||||
"amount": "Amount",
|
||||
"to_date": "To Date",
|
||||
"amount": "Jumlah",
|
||||
"to_date": "Sampai Tanggal",
|
||||
"from_date": "Dari Tanggal",
|
||||
"date_range": "Pilih Rentang Tanggal"
|
||||
}
|
||||
@@ -847,18 +847,19 @@
|
||||
"expense_category": "Kategori Pengeluaran",
|
||||
"update_app": "Perbarui Aplikasi",
|
||||
"backup": "Cadangan",
|
||||
"file_disk": "File Disk",
|
||||
"custom_fields": "Custom Fields",
|
||||
"file_disk": "Berkas Diska",
|
||||
"custom_fields": "Kolom Khusus",
|
||||
"payment_modes": "Mode Pembayaran",
|
||||
"notes": "Catatan",
|
||||
"exchange_rate": "Nilai Tukar",
|
||||
"address_information": "Informasi Alamat"
|
||||
"address_information": "Informasi Alamat",
|
||||
"pdf_generation": "PDF Generation"
|
||||
},
|
||||
"address_information": {
|
||||
"section_description": " Anda dapat memperbarui informasi Alamat Anda dengan menggunakan formulir di bawah ini."
|
||||
},
|
||||
"title": "Settings",
|
||||
"setting": "Settings | Settings",
|
||||
"title": "Pengaturan",
|
||||
"setting": "Pengaturan | Pengaturan",
|
||||
"general": "Umum",
|
||||
"language": "Bahasa",
|
||||
"primary_currency": "Mata Uang Utama",
|
||||
@@ -867,7 +868,7 @@
|
||||
"time_format": "Format Waktu",
|
||||
"currencies": {
|
||||
"title": "Mata Uang",
|
||||
"currency": "Currency | Currencies",
|
||||
"currency": "Mata uang | Mata uang",
|
||||
"currencies_list": "Daftar Mata Uang",
|
||||
"select_currency": "Pilih Mata Uang",
|
||||
"name": "Nama",
|
||||
@@ -885,34 +886,43 @@
|
||||
},
|
||||
"mail": {
|
||||
"host": "Server Surel",
|
||||
"port": "Mail Port",
|
||||
"port": "Port Surel",
|
||||
"driver": "Driver Surel",
|
||||
"secret": "Kunci Rahasia",
|
||||
"mailgun_secret": "Kunci Rahasia Mailgun",
|
||||
"mailgun_domain": "Domain",
|
||||
"mailgun_endpoint": "Mailgun Endpoint",
|
||||
"mailgun_endpoint": "Endpoint Mailgun",
|
||||
"ses_secret": "Kunci Rahasia SES",
|
||||
"ses_key": "Kunci SES",
|
||||
"ses_region": "AWS Region",
|
||||
"password": "Kata Sandi Surel",
|
||||
"username": "Nama Pengguna Surel",
|
||||
"mail_config": "Konfigurasi Surel",
|
||||
"from_name": "From Mail Name",
|
||||
"from_name": "Nama Pengirim",
|
||||
"from_mail": "From Mail Address",
|
||||
"encryption": "Enkripsi Surel",
|
||||
"mail_config_desc": "Below is the form for Configuring Email driver for sending emails from the app. You can also configure third party providers like Sendgrid, SES etc."
|
||||
},
|
||||
"pdf": {
|
||||
"title": "PDF Setting",
|
||||
"title": "Pengaturan PDF",
|
||||
"footer_text": "Teks footer",
|
||||
"pdf_layout": "PDF Layout"
|
||||
"pdf_layout": "Tata letak PDF",
|
||||
"pdf_configuration": "PDF Generation Settings",
|
||||
"section_description": "Change the way PDFs are generated",
|
||||
"driver": "PDF Driver to use",
|
||||
"papersize": "Papersize",
|
||||
"papersize_hint": "Papersize in width and height (ex. \"210mm 297mm\")",
|
||||
"gotenberg_host": "Gotenberg service host",
|
||||
"pdf_variables_save_successfully": "PDF configuration saved successfully",
|
||||
"pdf_variables_save_error": "PDF configuration could not be saved"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "Info perusahaan",
|
||||
"company_name": "Nama Perusahaan",
|
||||
"tax_id": "Tax Identification Number",
|
||||
"vat_id": "VAT Identification Number",
|
||||
"tax_id": "Nomor Identifikasi Pajak",
|
||||
"vat_id": "Nomor identifikasi PPN",
|
||||
"company_logo": "Logo Perusahaan",
|
||||
"section_description": "Information about your company that will be displayed on invoices, estimates and other documents created by InvoiceShelf.",
|
||||
"section_description": "Informasi tentang perusahaan Anda yang akan ditampilkan pada faktur, penawaran, dan dokumen lain yang dibuat oleh InvoiceShelf.",
|
||||
"phone": "Telepon",
|
||||
"country": "Negara",
|
||||
"state": "Provinsi",
|
||||
@@ -925,119 +935,119 @@
|
||||
"delete_company": "Hapus Perusahaan",
|
||||
"delete_company_description": "Setelah Anda menghapus perusahaan Anda, semua data dan file yang terkait dengannya akan hilang secara permanen.",
|
||||
"are_you_absolutely_sure": "Apakah Anda benar-benar yakin?",
|
||||
"delete_company_modal_desc": "This action cannot be undone. This will permanently delete {company} and all of its associated data.",
|
||||
"delete_company_modal_desc": "Tindakan ini tidak bisa dibatalkan. Tindakan ini akan menghapus {company} dan semua data terkaitnya secara permanen.",
|
||||
"delete_company_modal_label": "Mohon ketik ulang {company} untuk konfirmasi"
|
||||
},
|
||||
"custom_fields": {
|
||||
"title": "Custom Fields",
|
||||
"title": "Kolom Khusus",
|
||||
"section_description": "Customize your Invoices, Estimates & Payment Receipts with your own fields. Make sure to use the below added fields on the address formats on Customization settings page.",
|
||||
"add_custom_field": "Add Custom Field",
|
||||
"edit_custom_field": "Edit Custom Field",
|
||||
"field_name": "Field Name",
|
||||
"add_custom_field": "Tambah Kolom Khusus",
|
||||
"edit_custom_field": "Ubah Kolom Khusus",
|
||||
"field_name": "Kolom Nama",
|
||||
"label": "Label",
|
||||
"type": "Type",
|
||||
"type": "Jenis",
|
||||
"name": "Nama",
|
||||
"slug": "Slug",
|
||||
"required": "Required",
|
||||
"required": "Diperlukan",
|
||||
"placeholder": "Placeholder",
|
||||
"help_text": "Help Text",
|
||||
"default_value": "Default Value",
|
||||
"prefix": "Prefix",
|
||||
"starting_number": "Starting Number",
|
||||
"help_text": "Teks bantuan",
|
||||
"default_value": "Nilai standar",
|
||||
"prefix": "Awalan",
|
||||
"starting_number": "Angka dimulai",
|
||||
"model": "Model",
|
||||
"help_text_description": "Enter some text to help users understand the purpose of this custom field.",
|
||||
"suffix": "Suffix",
|
||||
"help_text_description": "Masukkan beberapa teks untuk membantu pengguna memahami tujuan kolom khusus ini.",
|
||||
"suffix": "Akhiran",
|
||||
"yes": "Ya",
|
||||
"no": "Tidak",
|
||||
"order": "Urutan",
|
||||
"custom_field_confirm_delete": "You will not be able to recover this Custom Field",
|
||||
"custom_field_confirm_delete": "Anda tidak akan dapat memulihkan Kolom Khusus ini",
|
||||
"already_in_use": "Custom Field is already in use",
|
||||
"deleted_message": "Custom Field deleted successfully",
|
||||
"options": "options",
|
||||
"add_option": "Add Options",
|
||||
"add_another_option": "Add another option",
|
||||
"sort_in_alphabetical_order": "Sort in Alphabetical Order",
|
||||
"add_options_in_bulk": "Add options in bulk",
|
||||
"use_predefined_options": "Use Predefined Options",
|
||||
"select_custom_date": "Select Custom Date",
|
||||
"select_relative_date": "Select Relative Date",
|
||||
"ticked_by_default": "Ticked by default",
|
||||
"updated_message": "Custom Field updated successfully",
|
||||
"added_message": "Custom Field added successfully",
|
||||
"press_enter_to_add": "Press enter to add new option",
|
||||
"model_in_use": "Cannot update model for fields which are already in use.",
|
||||
"type_in_use": "Cannot update type for fields which are already in use.",
|
||||
"options": "opsi",
|
||||
"add_option": "Tambah Opsi",
|
||||
"add_another_option": "Tambahkan opsi lain",
|
||||
"sort_in_alphabetical_order": "Urutan Berdasarkan Abjad",
|
||||
"add_options_in_bulk": "Tambahkan Opsi secara Massal",
|
||||
"use_predefined_options": "Gunakan Opsi yang Telah Ditentukan",
|
||||
"select_custom_date": "Pilih Tanggal Khusus",
|
||||
"select_relative_date": "Pilih Tanggal Relatif",
|
||||
"ticked_by_default": "",
|
||||
"updated_message": "Kolom Khusus berhasil diperbarui",
|
||||
"added_message": "Kolom Khusus berhasil ditambahkan",
|
||||
"press_enter_to_add": "Tekan 'enter' untuk menambahkan opsi baru",
|
||||
"model_in_use": "Tidak dapat memperbarui model untuk kolom yang sudah digunakan.",
|
||||
"type_in_use": "Tidak dapat memperbarui jenis untuk kolom yang sudah digunakan.",
|
||||
"model_type": {
|
||||
"customer": "Pelanggan",
|
||||
"invoice": "Faktur",
|
||||
"estimate": "Penawaran",
|
||||
"expense": "Pengeluaran",
|
||||
"payment": "Payment"
|
||||
"payment": "Pembayaran"
|
||||
}
|
||||
},
|
||||
"customization": {
|
||||
"customization": "customization",
|
||||
"customization": "kkkustomisasi",
|
||||
"updated_message": "Informasi perusahaan berhasil diperbarui",
|
||||
"save": "Simpan",
|
||||
"insert_fields": "Insert Fields",
|
||||
"learn_custom_format": "Learn how to use custom format",
|
||||
"add_new_component": "Add New Component",
|
||||
"component": "Component",
|
||||
"insert_fields": "Isi kolom",
|
||||
"learn_custom_format": "Pelajari cara menggunakan format khusus",
|
||||
"add_new_component": "Tambahkan Komponen",
|
||||
"component": "Komponen",
|
||||
"Parameter": "Parameter",
|
||||
"series": "Series",
|
||||
"series_description": "To set a static prefix/postfix like 'INV' across your company. It supports character length of up to 6 chars.",
|
||||
"series_param_label": "Series Value",
|
||||
"delimiter": "Delimiter",
|
||||
"delimiter_description": "Single character for specifying the boundary between 2 separate components. By default its set to -",
|
||||
"delimiter_param_label": "Delimiter Value",
|
||||
"series": "Seri",
|
||||
"series_description": "Untuk menyetel awalan/postfiks seperti 'INV' di seluruh perusahaan Anda. Ini mendukung panjang karakter hingga 6 karakter.",
|
||||
"series_param_label": "Nilai Seri",
|
||||
"delimiter": "Pemisah",
|
||||
"delimiter_description": "Karakter tunggal untuk menentukan batas antara 2 komponen terpisah. Secara bawaan ditetapkan ke -",
|
||||
"delimiter_param_label": "Nilai Pemisah",
|
||||
"date_format": "Format Tanggal",
|
||||
"time_format": "Format Waktu",
|
||||
"date_format_description": "A local date and time field which accepts a format parameter. The default format: 'Y' renders the current year.",
|
||||
"date_format_param_label": "Format",
|
||||
"sequence": "Sequence",
|
||||
"sequence_description": "Consecutive sequence of numbers across your company. You can specify the length on the given parameter.",
|
||||
"sequence_param_label": "Sequence Length",
|
||||
"customer_series": "Customer Series",
|
||||
"customer_series_description": "To set a different prefix/postfix for each customer.",
|
||||
"customer_sequence": "Customer Sequence",
|
||||
"customer_sequence_description": "Consecutive sequence of numbers for each of your customer.",
|
||||
"customer_sequence_param_label": "Sequence Length",
|
||||
"random_sequence": "Random Sequence",
|
||||
"random_sequence_description": "Random alphanumeric string. You can specify the length on the given parameter.",
|
||||
"random_sequence_param_label": "Sequence Length",
|
||||
"sequence": "Urutan",
|
||||
"sequence_description": "Rangkaian angka berurutan di perusahaan Anda. Anda dapat menentukan panjang pada parameter yang diberikan.",
|
||||
"sequence_param_label": "Panjang Urutan",
|
||||
"customer_series": "Seri Pelanggan",
|
||||
"customer_series_description": "Untuk mengatur awalan/akhiran yang berbeda untuk setiap pelanggan.",
|
||||
"customer_sequence": "Urutan Pelanggan",
|
||||
"customer_sequence_description": "Urutan angka berurutan untuk setiap pelanggan Anda.",
|
||||
"customer_sequence_param_label": "Panjang Urutan",
|
||||
"random_sequence": "Urutan Acak",
|
||||
"random_sequence_description": "Teks alfanumerik acak. Anda dapat menentukan panjang pada parameter yang diberikan.",
|
||||
"random_sequence_param_label": "Panjang Urutan",
|
||||
"invoices": {
|
||||
"title": "Faktur",
|
||||
"invoice_number_format": "Invoice Number Format",
|
||||
"invoice_number_format": "Format Nomor Tagihan",
|
||||
"invoice_number_format_description": "Customize how your invoice number gets generated automatically when you create a new invoice.",
|
||||
"preview_invoice_number": "Preview Invoice Number",
|
||||
"due_date": "Due Date",
|
||||
"preview_invoice_number": "Pratinjau Nomor Faktur",
|
||||
"due_date": "Tanggal Jatuh Tempo",
|
||||
"due_date_description": "Specify how due date is automatically set when you create an invoice.",
|
||||
"due_date_days": "Invoice Due after days",
|
||||
"set_due_date_automatically": "Set Due Date Automatically",
|
||||
"due_date_days": "Faktur jatuh tempo setelah (hari)",
|
||||
"set_due_date_automatically": "Tetapkan Tanggal Jatuh Secara Otomatis",
|
||||
"set_due_date_automatically_description": "Enable this if you wish to set due date automatically when you create a new invoice.",
|
||||
"default_formats": "Default Formats",
|
||||
"default_formats_description": "Below given formats are used to fill up the fields automatically on invoice creation.",
|
||||
"default_invoice_email_body": "Default Invoice Email Body",
|
||||
"company_address_format": "Format Alamat Perusahaan",
|
||||
"shipping_address_format": "Shipping Address Format",
|
||||
"shipping_address_format": "Format Alamat Pengiriman",
|
||||
"billing_address_format": "Format Alamat Penagihan",
|
||||
"invoice_email_attachment": "Kirim faktur sebagai lampiran",
|
||||
"invoice_email_attachment_setting_description": "Enable this if you want to send invoices as email attachment. Please note that 'View Invoice' button in emails will not be displayed anymore when enabled.",
|
||||
"invoice_settings_updated": "Pengaturan Faktur berhasil diperbarui",
|
||||
"retrospective_edits": "Retrospective Edits",
|
||||
"allow": "Allow",
|
||||
"disable_on_invoice_partial_paid": "Disable after partial payment is recorded",
|
||||
"disable_on_invoice_paid": "Disable after full payment is recorded",
|
||||
"disable_on_invoice_sent": "Disable after invoice is sent",
|
||||
"retrospective_edits_description": " Based on your country's laws or your preference, you can restrict users from editing finalised invoices."
|
||||
"allow": "Izin",
|
||||
"disable_on_invoice_partial_paid": "Non-aktifkan setelah pembayaran sebagian dicatat",
|
||||
"disable_on_invoice_paid": "Non-aktifkan setelah pembayaran penuh dicatat",
|
||||
"disable_on_invoice_sent": "Non-aktifkan setelah faktur dikirim",
|
||||
"retrospective_edits_description": " Berdasarkan undang-undang negara Anda atau preferensi Anda, Anda dapat membatasi pengguna untuk mengedit faktur akhir."
|
||||
},
|
||||
"estimates": {
|
||||
"title": "Penawaran",
|
||||
"estimate_number_format": "Format Nomor Penawaran",
|
||||
"estimate_number_format_description": "Customize how your estimate number gets generated automatically when you create a new estimate.",
|
||||
"preview_estimate_number": "Preview Estimate Number",
|
||||
"expiry_date": "Expiry Date",
|
||||
"expiry_date_description": "Specify how expiry date is automatically set when you create an estimate.",
|
||||
"estimate_number_format_description": "Sesuaikan cara nomor taksiran Anda dibuat secara otomatis saat Anda membuat taksiran baru.",
|
||||
"preview_estimate_number": "Pamer Nomor Taksiran",
|
||||
"expiry_date": "Tanggal Kadaluwarsa",
|
||||
"expiry_date_description": "Tentukan bagaimana tanggal kedaluwarsa diatur secara otomatis saat Anda membuat taksiran.",
|
||||
"expiry_date_days": "Estimate Expires after days",
|
||||
"set_expiry_date_automatically": "Set Expiry Date Automatically",
|
||||
"set_expiry_date_automatically_description": "Enable this if you wish to set expiry date automatically when you create a new estimate.",
|
||||
@@ -1087,6 +1097,8 @@
|
||||
"description": "Save time by creating notes and reusing them on your invoices, estimates & payments.",
|
||||
"notes": "Notes",
|
||||
"type": "Type",
|
||||
"is_default": "Select by default",
|
||||
"is_default_description": "This note will be selected by default in new invoices.",
|
||||
"add_note": "Tambahkan Catatan",
|
||||
"add_new_note": "Tambahkan Catatan Baru",
|
||||
"name": "Nama",
|
||||
@@ -1184,14 +1196,14 @@
|
||||
"currency_in_used": "The following currencies are already active on another provider. Please remove these currencies from selection to activate this provider again."
|
||||
},
|
||||
"tax_types": {
|
||||
"title": "Tax Types",
|
||||
"add_tax": "Add Tax",
|
||||
"edit_tax": "Edit Tax",
|
||||
"title": "Jenis Pajak",
|
||||
"add_tax": "Tambah Pajak",
|
||||
"edit_tax": "Ubah Pajak",
|
||||
"description": "You can add or Remove Taxes as you please. InvoiceShelf supports Taxes on Individual Items as well as on the invoice.",
|
||||
"add_new_tax": "Add New Tax",
|
||||
"tax_settings": "Tax Settings",
|
||||
"add_new_tax": "Tambah Pajak Baru",
|
||||
"tax_settings": "Pengaturan Pajak",
|
||||
"tax_per_item": "Tax Per Item",
|
||||
"tax_name": "Tax Name",
|
||||
"tax_name": "Nama Pajak",
|
||||
"compound_tax": "Compound Tax",
|
||||
"percent": "Persen",
|
||||
"action": "Aksi",
|
||||
@@ -1236,7 +1248,7 @@
|
||||
"time_zone": "Zona Waktu",
|
||||
"fiscal_year": "Financial Year",
|
||||
"date_format": "Format Tanggal",
|
||||
"time_format": "Format Waktu",
|
||||
"time_format": "Time Format",
|
||||
"discount_setting": "Pengaturan Diskon",
|
||||
"discount_per_item": "Diskon Per Item ",
|
||||
"discount_setting_description": "Enable this if you want to add Discount to individual invoice items. By default, Discount is added directly to the invoice.",
|
||||
@@ -1281,22 +1293,22 @@
|
||||
"check_update": "Check for updates",
|
||||
"insider_consent": "Opt-in for Insider releases. Recommended for testing purposes only.",
|
||||
"avail_update": "New Update available",
|
||||
"next_version": "Next version",
|
||||
"requirements": "Requirements",
|
||||
"next_version": "Versi selanjutnya",
|
||||
"requirements": "Persyaratan",
|
||||
"update": "Perbarui Sekarang",
|
||||
"update_progress": "Update in progress...",
|
||||
"update_progress": "Sedang memperbarui...",
|
||||
"progress_text": "It will just take a few minutes. Please do not refresh the screen or close the window before the update finishes",
|
||||
"update_success": "App has been updated! Please wait while your browser window gets reloaded automatically.",
|
||||
"latest_message": "No update available! You are on the latest version.",
|
||||
"current_version": "Current Version",
|
||||
"download_zip_file": "Download ZIP file",
|
||||
"unzipping_package": "Unzipping Package",
|
||||
"download_zip_file": "Unduh berkas ZIP",
|
||||
"unzipping_package": "Membuka berkas Zip",
|
||||
"copying_files": "Copying Files",
|
||||
"deleting_files": "Deleting Unused files",
|
||||
"running_migrations": "Running Migrations",
|
||||
"finishing_update": "Finishing Update",
|
||||
"update_failed": "Update Failed",
|
||||
"update_failed_text": "Sorry! Your update failed on : {step} step",
|
||||
"deleting_files": "Menghapus berkas yang tidak digunakan",
|
||||
"running_migrations": "Menjalankan migrasi",
|
||||
"finishing_update": "Menyelesaikan Pembaruan",
|
||||
"update_failed": "Pembaruan Gagal",
|
||||
"update_failed_text": "Maaf! Pembaruan Anda gagal pada langkah : {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."
|
||||
},
|
||||
"backup": {
|
||||
@@ -1317,7 +1329,7 @@
|
||||
"newest_backups": "newest backups",
|
||||
"used_storage": "used storage",
|
||||
"select_disk": "Select Disk",
|
||||
"action": "Action",
|
||||
"action": "Aksi",
|
||||
"deleted_message": "Backup deleted successfully",
|
||||
"created_message": "Backup created successfully",
|
||||
"invalid_disk_credentials": "Invalid credential of selected disk"
|
||||
@@ -1387,15 +1399,15 @@
|
||||
"invalid_disk_credentials": "Invalid credential of selected disk"
|
||||
},
|
||||
"taxations": {
|
||||
"add_billing_address": "Enter Billing Address",
|
||||
"add_billing_address": "Masukkan Alamat Penagihan",
|
||||
"add_shipping_address": "Enter Shipping Address",
|
||||
"add_company_address": "Enter Company Address",
|
||||
"modal_description": "The information below is required in order to fetch sales tax.",
|
||||
"add_address": "Add Address for fetching sales tax.",
|
||||
"address_placeholder": "Example: 123, My Street",
|
||||
"city_placeholder": "Example: Los Angeles",
|
||||
"state_placeholder": "Example: CA",
|
||||
"zip_placeholder": "Example: 90024",
|
||||
"address_placeholder": "Contoh: 123, My Street",
|
||||
"city_placeholder": "Contoh: Los Angeles",
|
||||
"state_placeholder": "Contoh: CA",
|
||||
"zip_placeholder": "Contoh: 90024",
|
||||
"invalid_address": "Please provide valid address details."
|
||||
}
|
||||
},
|
||||
@@ -1422,7 +1434,7 @@
|
||||
"street": "Jalan1 | Jalan2",
|
||||
"phone": "Telepon",
|
||||
"zip_code": "Kode Pos",
|
||||
"go_back": "Go Back",
|
||||
"go_back": "Kembali",
|
||||
"currency": "Mata Uang",
|
||||
"language": "Bahasa",
|
||||
"time_zone": "Zona Waktu",
|
||||
@@ -1578,8 +1590,8 @@
|
||||
"invalid_format": "Please enter valid query string format.",
|
||||
"api_error": "Server Tidak Menanggapi.",
|
||||
"feature_not_enabled": "Feature not enabled.",
|
||||
"request_limit_met": "Api request limit exceeded.",
|
||||
"address_incomplete": "Incomplete Address"
|
||||
"request_limit_met": "Batas permintaan api terlampaui.",
|
||||
"address_incomplete": "Alamat tidak Lengkap"
|
||||
},
|
||||
"pdf_estimate_label": "Penawaran",
|
||||
"pdf_estimate_number": "Nomor Penawaran",
|
||||
@@ -1588,51 +1600,51 @@
|
||||
"pdf_invoice_label": "Faktur",
|
||||
"pdf_invoice_number": "Nomor Faktur",
|
||||
"pdf_invoice_date": "Tanggal Faktur",
|
||||
"pdf_invoice_due_date": "Due date",
|
||||
"pdf_invoice_due_date": "Due Date",
|
||||
"pdf_notes": "Catatan",
|
||||
"pdf_items_label": "Items",
|
||||
"pdf_quantity_label": "Quantity",
|
||||
"pdf_price_label": "Harga",
|
||||
"pdf_discount_label": "Diskon",
|
||||
"pdf_amount_label": "Amount",
|
||||
"pdf_amount_label": "Jumlah",
|
||||
"pdf_subtotal": "Subtotal",
|
||||
"pdf_total": "Total",
|
||||
"pdf_payment_label": "Pembayaran",
|
||||
"pdf_payment_receipt_label": "PAYMENT RECEIPT",
|
||||
"pdf_payment_date": "Payment Date",
|
||||
"pdf_payment_receipt_label": "TANDA TERIMA PEMBAYARAN",
|
||||
"pdf_payment_date": "Tanggal Pembayaran",
|
||||
"pdf_payment_number": "Nomor Pembayaran",
|
||||
"pdf_payment_mode": "Payment Mode",
|
||||
"pdf_payment_amount_received_label": "Amount Received",
|
||||
"pdf_expense_report_label": "EXPENSES REPORT",
|
||||
"pdf_total_expenses_label": "TOTAL EXPENSE",
|
||||
"pdf_profit_loss_label": "PROFIT & LOSS REPORT",
|
||||
"pdf_sales_customers_label": "Sales Customer Report",
|
||||
"pdf_sales_items_label": "Sales Item Report",
|
||||
"pdf_tax_summery_label": "Tax Summary Report",
|
||||
"pdf_income_label": "INCOME",
|
||||
"pdf_net_profit_label": "NET PROFIT",
|
||||
"pdf_customer_sales_report": "Sales Report: By Customer",
|
||||
"pdf_total_sales_label": "TOTAL SALES",
|
||||
"pdf_item_sales_label": "Sales Report: By Item",
|
||||
"pdf_tax_report_label": "TAX REPORT",
|
||||
"pdf_total_tax_label": "TOTAL TAX",
|
||||
"pdf_tax_types_label": "Tax Types",
|
||||
"pdf_expenses_label": "Expenses",
|
||||
"pdf_bill_to": "Bill to,",
|
||||
"pdf_ship_to": "Ship to,",
|
||||
"pdf_received_from": "Received from:",
|
||||
"pdf_tax_label": "Tax",
|
||||
"pdf_tax_id": "Tax-ID",
|
||||
"pdf_vat_id": "VAT-ID",
|
||||
"pdf_amount_paid": "Amount Paid",
|
||||
"pdf_amount_due": "Amount Due",
|
||||
"pdf_payment_mode": "Mode Pembayaran",
|
||||
"pdf_payment_amount_received_label": "Jumlah yang Diterima",
|
||||
"pdf_expense_report_label": "LAPORAN PENGELUARAN",
|
||||
"pdf_total_expenses_label": "TOTAL PENGELUARAN",
|
||||
"pdf_profit_loss_label": "LAPORAN LABA & RUGI",
|
||||
"pdf_sales_customers_label": "Laporan Penjualan Pelanggan",
|
||||
"pdf_sales_items_label": "Laporan Item Penjualan",
|
||||
"pdf_tax_summery_label": "Laporan Ringkasan Pajak",
|
||||
"pdf_income_label": "PENDAPATAN",
|
||||
"pdf_net_profit_label": "LABA BERSIH",
|
||||
"pdf_customer_sales_report": "Laporan Penjualan: Berdasarkan Pelanggan",
|
||||
"pdf_total_sales_label": "TOTAL PENJUALAN",
|
||||
"pdf_item_sales_label": "Laporan Penjualan: Berdasarkan Item",
|
||||
"pdf_tax_report_label": "LAPORAN PAJAK",
|
||||
"pdf_total_tax_label": "TOTAL PAJAK",
|
||||
"pdf_tax_types_label": "Jenis Pajak",
|
||||
"pdf_expenses_label": "Pengeluaran",
|
||||
"pdf_bill_to": "Ditagih ke,",
|
||||
"pdf_ship_to": "Dikirim ke,",
|
||||
"pdf_received_from": "Diterima dari:",
|
||||
"pdf_tax_label": "Pajak",
|
||||
"pdf_tax_id": "ID-PAJAK",
|
||||
"pdf_vat_id": "ID-PPN",
|
||||
"pdf_amount_paid": "Jumlah yang Dibayar",
|
||||
"pdf_amount_due": "Jumlah yang Harus Dibayar",
|
||||
"mail_thanks": "Terima kasih",
|
||||
"mail_view_estimate": "Lihat Penawaran",
|
||||
"mail_viewed_estimate": ":name melihat Penawaran ini.",
|
||||
"mail_view_invoice": "Lihat Faktur",
|
||||
"mail_viewed_invoice": ":name melihat Faktur ini.",
|
||||
"mail_view_payment": "Lihat Pembayaran",
|
||||
"notification_view_estimate": "[Notification] Estimate viewed",
|
||||
"notification_view_invoice": "[Notification] Invoice viewed",
|
||||
"You have received a new invoice from <b>{COMPANY_NAME}</b>.</br> Please download using the button below:": "You have received a new invoice from <b>{COMPANY_NAME}</b>.</br> Please download using the button below:"
|
||||
"notification_view_estimate": "[Pemberitahuan] Penawaran Dilihat",
|
||||
"notification_view_invoice": "[Pemberitahuan] Faktur Dilihat",
|
||||
"You have received a new invoice from <b>{COMPANY_NAME}</b>.</br> Please download using the button below:": "Anda telah menerima faktur baru dari <b>{COMPANY_NAME}</b>.</br> Silakan unduh menggunakan tombol di bawah ini:"
|
||||
}
|
||||
|
||||
20
lang/it.json
20
lang/it.json
@@ -852,7 +852,8 @@
|
||||
"payment_modes": "Modalità di Pagamento",
|
||||
"notes": "Note",
|
||||
"exchange_rate": "Tasso di cambio",
|
||||
"address_information": "Indirizzo"
|
||||
"address_information": "Indirizzo",
|
||||
"pdf_generation": "PDF Generation"
|
||||
},
|
||||
"address_information": {
|
||||
"section_description": " Puoi aggiornare le informazioni sul tuo indirizzo utilizzando il modulo sottostante."
|
||||
@@ -893,6 +894,7 @@
|
||||
"mailgun_endpoint": "Endpoint Mailgun",
|
||||
"ses_secret": "Segreto SES",
|
||||
"ses_key": "Chiave SES",
|
||||
"ses_region": "AWS Region",
|
||||
"password": "Password Email",
|
||||
"username": "Nome Utente Email",
|
||||
"mail_config": "Configurazione Mail",
|
||||
@@ -904,7 +906,15 @@
|
||||
"pdf": {
|
||||
"title": "Configurazione PDF",
|
||||
"footer_text": "Testo Footer",
|
||||
"pdf_layout": "Layout PDF"
|
||||
"pdf_layout": "Layout PDF",
|
||||
"pdf_configuration": "PDF Generation Settings",
|
||||
"section_description": "Change the way PDFs are generated",
|
||||
"driver": "PDF Driver to use",
|
||||
"papersize": "Papersize",
|
||||
"papersize_hint": "Papersize in width and height (ex. \"210mm 297mm\")",
|
||||
"gotenberg_host": "Gotenberg service host",
|
||||
"pdf_variables_save_successfully": "PDF configuration saved successfully",
|
||||
"pdf_variables_save_error": "PDF configuration could not be saved"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "Info azienda",
|
||||
@@ -1087,6 +1097,8 @@
|
||||
"description": "Risparmia tempo creando note e riutilizzandole sulle tue fatture, preventivi e pagamenti.",
|
||||
"notes": "Note",
|
||||
"type": "genere",
|
||||
"is_default": "Select by default",
|
||||
"is_default_description": "This note will be selected by default in new invoices.",
|
||||
"add_note": "Aggiungi Nota",
|
||||
"add_new_note": "Aggiungi nuova nota",
|
||||
"name": "Nome",
|
||||
@@ -1236,7 +1248,7 @@
|
||||
"time_zone": "Fuso Orario",
|
||||
"fiscal_year": "Anno finanziario",
|
||||
"date_format": "Formato Data",
|
||||
"time_format": "Time Fromat",
|
||||
"time_format": "Time Format",
|
||||
"discount_setting": "Impostazione Sconto",
|
||||
"discount_per_item": "Sconto Per Item ",
|
||||
"discount_setting_description": "Abilita se vuoi aggiungere uno sconto ad uno specifica fattura. Di default, lo sconto è aggiunto direttamente in fattura.",
|
||||
@@ -1588,7 +1600,7 @@
|
||||
"pdf_invoice_label": "Fattura",
|
||||
"pdf_invoice_number": "Numero Fattura",
|
||||
"pdf_invoice_date": "Data fattura",
|
||||
"pdf_invoice_due_date": "Data di pagamento",
|
||||
"pdf_invoice_due_date": "Due Date",
|
||||
"pdf_notes": "Note",
|
||||
"pdf_items_label": "Commesse",
|
||||
"pdf_quantity_label": "Quantità",
|
||||
|
||||
18
lang/ja.json
18
lang/ja.json
@@ -852,7 +852,8 @@
|
||||
"payment_modes": "支払い方法",
|
||||
"notes": "ノート",
|
||||
"exchange_rate": "為替レート",
|
||||
"address_information": "住所情報"
|
||||
"address_information": "住所情報",
|
||||
"pdf_generation": "PDF Generation"
|
||||
},
|
||||
"address_information": {
|
||||
"section_description": " 以下のフォームを使用して、住所情報を更新できます。"
|
||||
@@ -893,6 +894,7 @@
|
||||
"mailgun_endpoint": "Mailgun エンドポイント",
|
||||
"ses_secret": "SESシークレット",
|
||||
"ses_key": "SESキー",
|
||||
"ses_region": "AWS Region",
|
||||
"password": "メールのパスワード",
|
||||
"username": "メールのユーザー名",
|
||||
"mail_config": "メール設定",
|
||||
@@ -904,7 +906,15 @@
|
||||
"pdf": {
|
||||
"title": "PDFの設定",
|
||||
"footer_text": "フッターの文章",
|
||||
"pdf_layout": "PDFのレイアウト"
|
||||
"pdf_layout": "PDFのレイアウト",
|
||||
"pdf_configuration": "PDF Generation Settings",
|
||||
"section_description": "Change the way PDFs are generated",
|
||||
"driver": "PDF Driver to use",
|
||||
"papersize": "Papersize",
|
||||
"papersize_hint": "Papersize in width and height (ex. \"210mm 297mm\")",
|
||||
"gotenberg_host": "Gotenberg service host",
|
||||
"pdf_variables_save_successfully": "PDF configuration saved successfully",
|
||||
"pdf_variables_save_error": "PDF configuration could not be saved"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "会社情報",
|
||||
@@ -1087,6 +1097,8 @@
|
||||
"description": "ノートを作成し、請求書、見積り、支払いで再利用することで時間を節約します。",
|
||||
"notes": "ノート",
|
||||
"type": "タイプ",
|
||||
"is_default": "Select by default",
|
||||
"is_default_description": "This note will be selected by default in new invoices.",
|
||||
"add_note": "ノートの追加",
|
||||
"add_new_note": "新規ノートを追加",
|
||||
"name": "名前",
|
||||
@@ -1588,7 +1600,7 @@
|
||||
"pdf_invoice_label": "請求書",
|
||||
"pdf_invoice_number": "請求番号",
|
||||
"pdf_invoice_date": "請求日",
|
||||
"pdf_invoice_due_date": "支払期日",
|
||||
"pdf_invoice_due_date": "Due Date",
|
||||
"pdf_notes": "ノート",
|
||||
"pdf_items_label": "アイテム",
|
||||
"pdf_quantity_label": "数量",
|
||||
|
||||
28
lang/lt.json
28
lang/lt.json
@@ -101,11 +101,11 @@
|
||||
"login_successfully": "Prisijungta sėkmingai!",
|
||||
"logged_out_successfully": "Atsijungta sėkmingai",
|
||||
"mark_as_default": "Pažymėti kaip numatytąjį",
|
||||
"no_data_found": "No data found",
|
||||
"no_data_found": "Duomenų nerasta",
|
||||
"pagination": {
|
||||
"previous": "Previous",
|
||||
"next": "Next",
|
||||
"showing": "Showing",
|
||||
"previous": "Ankstesnis",
|
||||
"next": "Kitas",
|
||||
"showing": "Rodoma",
|
||||
"to": "to",
|
||||
"of": "of",
|
||||
"results": "results"
|
||||
@@ -852,7 +852,8 @@
|
||||
"payment_modes": "Mokėjimo būdai",
|
||||
"notes": "Pastabos",
|
||||
"exchange_rate": "Valiutų kursas",
|
||||
"address_information": "Address Information"
|
||||
"address_information": "Address Information",
|
||||
"pdf_generation": "PDF Generation"
|
||||
},
|
||||
"address_information": {
|
||||
"section_description": " You can update Your Address information using form below."
|
||||
@@ -893,6 +894,7 @@
|
||||
"mailgun_endpoint": "Mailgun Endpoint",
|
||||
"ses_secret": "SES Secret",
|
||||
"ses_key": "SES Key",
|
||||
"ses_region": "AWS Region",
|
||||
"password": "Mail Password",
|
||||
"username": "Mail Username",
|
||||
"mail_config": "Mail Configuration",
|
||||
@@ -904,7 +906,15 @@
|
||||
"pdf": {
|
||||
"title": "PDF nustatymai",
|
||||
"footer_text": "Poraštės tekstas",
|
||||
"pdf_layout": "PDF Išdėstymas"
|
||||
"pdf_layout": "PDF Išdėstymas",
|
||||
"pdf_configuration": "PDF Generation Settings",
|
||||
"section_description": "Change the way PDFs are generated",
|
||||
"driver": "PDF Driver to use",
|
||||
"papersize": "Papersize",
|
||||
"papersize_hint": "Papersize in width and height (ex. \"210mm 297mm\")",
|
||||
"gotenberg_host": "Gotenberg service host",
|
||||
"pdf_variables_save_successfully": "PDF configuration saved successfully",
|
||||
"pdf_variables_save_error": "PDF configuration could not be saved"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "Company info",
|
||||
@@ -1087,6 +1097,8 @@
|
||||
"description": "Save time by creating notes and reusing them on your invoices, estimates & payments.",
|
||||
"notes": "Pastabos",
|
||||
"type": "Tipas",
|
||||
"is_default": "Select by default",
|
||||
"is_default_description": "This note will be selected by default in new invoices.",
|
||||
"add_note": "Pridėti pastabą",
|
||||
"add_new_note": "Pridėti Naują Pastabą",
|
||||
"name": "Pavadinimas",
|
||||
@@ -1236,7 +1248,7 @@
|
||||
"time_zone": "Laiko zona",
|
||||
"fiscal_year": "Finansiniai metai",
|
||||
"date_format": "Datos formatas",
|
||||
"time_format": "Time Fromat",
|
||||
"time_format": "Time Format",
|
||||
"discount_setting": "Discount Setting",
|
||||
"discount_per_item": "Discount Per Item ",
|
||||
"discount_setting_description": "Enable this if you want to add Discount to individual invoice items. By default, Discount is added directly to the invoice.",
|
||||
@@ -1588,7 +1600,7 @@
|
||||
"pdf_invoice_label": "Sąskaita",
|
||||
"pdf_invoice_number": "Invoice Number",
|
||||
"pdf_invoice_date": "Invoice Date",
|
||||
"pdf_invoice_due_date": "Due date",
|
||||
"pdf_invoice_due_date": "Due Date",
|
||||
"pdf_notes": "Pastabos",
|
||||
"pdf_items_label": "Items",
|
||||
"pdf_quantity_label": "Kiekis",
|
||||
|
||||
20
lang/lv.json
20
lang/lv.json
@@ -852,7 +852,8 @@
|
||||
"payment_modes": "Apmaksas veidi",
|
||||
"notes": "Piezīmes",
|
||||
"exchange_rate": "Exchange Rate",
|
||||
"address_information": "Address Information"
|
||||
"address_information": "Address Information",
|
||||
"pdf_generation": "PDF Generation"
|
||||
},
|
||||
"address_information": {
|
||||
"section_description": " You can update Your Address information using form below."
|
||||
@@ -893,6 +894,7 @@
|
||||
"mailgun_endpoint": "Mailgun Endpoint",
|
||||
"ses_secret": "SES Secret",
|
||||
"ses_key": "SES Key",
|
||||
"ses_region": "AWS Region",
|
||||
"password": "E-pasta parole",
|
||||
"username": "E-pasta lietotājvārds",
|
||||
"mail_config": "E-pasta konfigurācija",
|
||||
@@ -904,7 +906,15 @@
|
||||
"pdf": {
|
||||
"title": "PDF uzstādījumi",
|
||||
"footer_text": "Kājenes teksts",
|
||||
"pdf_layout": "PDF izkārtojums"
|
||||
"pdf_layout": "PDF izkārtojums",
|
||||
"pdf_configuration": "PDF Generation Settings",
|
||||
"section_description": "Change the way PDFs are generated",
|
||||
"driver": "PDF Driver to use",
|
||||
"papersize": "Papersize",
|
||||
"papersize_hint": "Papersize in width and height (ex. \"210mm 297mm\")",
|
||||
"gotenberg_host": "Gotenberg service host",
|
||||
"pdf_variables_save_successfully": "PDF configuration saved successfully",
|
||||
"pdf_variables_save_error": "PDF configuration could not be saved"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "Uzņēmuma informācija",
|
||||
@@ -1087,6 +1097,8 @@
|
||||
"description": "Save time by creating notes and reusing them on your invoices, estimates & payments.",
|
||||
"notes": "Notes",
|
||||
"type": "Type",
|
||||
"is_default": "Select by default",
|
||||
"is_default_description": "This note will be selected by default in new invoices.",
|
||||
"add_note": "Add Note",
|
||||
"add_new_note": "Add New Note",
|
||||
"name": "Name",
|
||||
@@ -1236,7 +1248,7 @@
|
||||
"time_zone": "Laika josla",
|
||||
"fiscal_year": "Finanšu gads",
|
||||
"date_format": "Datuma formāts",
|
||||
"time_format": "Time Fromat",
|
||||
"time_format": "Time Format",
|
||||
"discount_setting": "Atlaižu iestatījumi",
|
||||
"discount_per_item": "Atlaide par preci/pakalpojumu ",
|
||||
"discount_setting_description": "Iespējot šo, lai piešķirtu atlaides individuālām rēķina precēm. Pēc noklusējuma, atlaide tiek piemērota rēķinam.",
|
||||
@@ -1588,7 +1600,7 @@
|
||||
"pdf_invoice_label": "Rēķins",
|
||||
"pdf_invoice_number": "Rēķina numurs",
|
||||
"pdf_invoice_date": "Rēķina datums",
|
||||
"pdf_invoice_due_date": "Apmaksas termiņš",
|
||||
"pdf_invoice_due_date": "Due Date",
|
||||
"pdf_notes": "Notes",
|
||||
"pdf_items_label": "Nosaukums",
|
||||
"pdf_quantity_label": "Daudzums",
|
||||
|
||||
24
lang/mk.json
24
lang/mk.json
@@ -57,7 +57,7 @@
|
||||
"fixed": "Fixed",
|
||||
"percentage": "Percentage",
|
||||
"tax": "TAX",
|
||||
"total_amount": "TOTAL AMOUNT",
|
||||
"total_amount": "Вкупен износ",
|
||||
"bill_to": "Bill to",
|
||||
"ship_to": "Ship to",
|
||||
"due": "Due",
|
||||
@@ -111,7 +111,7 @@
|
||||
"results": "results"
|
||||
},
|
||||
"file_upload": {
|
||||
"drag_a_file": "Drag a file here or",
|
||||
"drag_a_file": "Повлечете го фаилот овде или",
|
||||
"browse": "browse",
|
||||
"to_choose": "to choose a file"
|
||||
},
|
||||
@@ -852,7 +852,8 @@
|
||||
"payment_modes": "Payment Modes",
|
||||
"notes": "Notes",
|
||||
"exchange_rate": "Exchange Rate",
|
||||
"address_information": "Address Information"
|
||||
"address_information": "Address Information",
|
||||
"pdf_generation": "PDF Generation"
|
||||
},
|
||||
"address_information": {
|
||||
"section_description": " You can update Your Address information using form below."
|
||||
@@ -893,6 +894,7 @@
|
||||
"mailgun_endpoint": "Mailgun Endpoint",
|
||||
"ses_secret": "SES Secret",
|
||||
"ses_key": "SES Key",
|
||||
"ses_region": "AWS Region",
|
||||
"password": "Mail Password",
|
||||
"username": "Mail Username",
|
||||
"mail_config": "Mail Configuration",
|
||||
@@ -904,7 +906,15 @@
|
||||
"pdf": {
|
||||
"title": "PDF Setting",
|
||||
"footer_text": "Footer Text",
|
||||
"pdf_layout": "PDF Layout"
|
||||
"pdf_layout": "PDF Layout",
|
||||
"pdf_configuration": "PDF Generation Settings",
|
||||
"section_description": "Change the way PDFs are generated",
|
||||
"driver": "PDF Driver to use",
|
||||
"papersize": "Papersize",
|
||||
"papersize_hint": "Papersize in width and height (ex. \"210mm 297mm\")",
|
||||
"gotenberg_host": "Gotenberg service host",
|
||||
"pdf_variables_save_successfully": "PDF configuration saved successfully",
|
||||
"pdf_variables_save_error": "PDF configuration could not be saved"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "Company info",
|
||||
@@ -1087,6 +1097,8 @@
|
||||
"description": "Save time by creating notes and reusing them on your invoices, estimates & payments.",
|
||||
"notes": "Notes",
|
||||
"type": "Type",
|
||||
"is_default": "Select by default",
|
||||
"is_default_description": "This note will be selected by default in new invoices.",
|
||||
"add_note": "Add Note",
|
||||
"add_new_note": "Add New Note",
|
||||
"name": "Name",
|
||||
@@ -1236,7 +1248,7 @@
|
||||
"time_zone": "Time Zone",
|
||||
"fiscal_year": "Financial Year",
|
||||
"date_format": "Date Format",
|
||||
"time_format": "Time Fromat",
|
||||
"time_format": "Time Format",
|
||||
"discount_setting": "Discount Setting",
|
||||
"discount_per_item": "Discount Per Item ",
|
||||
"discount_setting_description": "Enable this if you want to add Discount to individual invoice items. By default, Discount is added directly to the invoice.",
|
||||
@@ -1588,7 +1600,7 @@
|
||||
"pdf_invoice_label": "Invoice",
|
||||
"pdf_invoice_number": "Invoice Number",
|
||||
"pdf_invoice_date": "Invoice Date",
|
||||
"pdf_invoice_due_date": "Due date",
|
||||
"pdf_invoice_due_date": "Due Date",
|
||||
"pdf_notes": "Notes",
|
||||
"pdf_items_label": "Items",
|
||||
"pdf_quantity_label": "Quantity",
|
||||
|
||||
20
lang/nl.json
20
lang/nl.json
@@ -852,7 +852,8 @@
|
||||
"payment_modes": "Betaalmethodes",
|
||||
"notes": "Opmerkingen",
|
||||
"exchange_rate": "Wisselkoers",
|
||||
"address_information": "Adresgegevens"
|
||||
"address_information": "Adresgegevens",
|
||||
"pdf_generation": "PDF Generation"
|
||||
},
|
||||
"address_information": {
|
||||
"section_description": " U kunt uw adresgegevens bijwerken via het onderstaande formulier."
|
||||
@@ -893,6 +894,7 @@
|
||||
"mailgun_endpoint": "Mailgun-eindpunt",
|
||||
"ses_secret": "SES geheim",
|
||||
"ses_key": "SES-sleutel",
|
||||
"ses_region": "AWS Region",
|
||||
"password": "E-mail wachtwoord",
|
||||
"username": "E-mail gebruikersnaam",
|
||||
"mail_config": "E-mailconfiguratie",
|
||||
@@ -904,7 +906,15 @@
|
||||
"pdf": {
|
||||
"title": "PDF-instelling",
|
||||
"footer_text": "Voettekst",
|
||||
"pdf_layout": "PDF indeling"
|
||||
"pdf_layout": "PDF indeling",
|
||||
"pdf_configuration": "PDF Generation Settings",
|
||||
"section_description": "Change the way PDFs are generated",
|
||||
"driver": "PDF Driver to use",
|
||||
"papersize": "Papersize",
|
||||
"papersize_hint": "Papersize in width and height (ex. \"210mm 297mm\")",
|
||||
"gotenberg_host": "Gotenberg service host",
|
||||
"pdf_variables_save_successfully": "PDF configuration saved successfully",
|
||||
"pdf_variables_save_error": "PDF configuration could not be saved"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "Bedrijfsinfo",
|
||||
@@ -1087,6 +1097,8 @@
|
||||
"description": "Bespaar tijd door notities te maken en ze opnieuw te gebruiken op uw facturen, ramingen en betalingen.",
|
||||
"notes": "Opmerkingen",
|
||||
"type": "Type",
|
||||
"is_default": "Select by default",
|
||||
"is_default_description": "This note will be selected by default in new invoices.",
|
||||
"add_note": "Notitie toevoegen",
|
||||
"add_new_note": "Voeg een nieuwe notitie toe",
|
||||
"name": "Naam",
|
||||
@@ -1236,7 +1248,7 @@
|
||||
"time_zone": "Tijdzone",
|
||||
"fiscal_year": "Financieel jaar",
|
||||
"date_format": "Datumnotatie",
|
||||
"time_format": "Time Fromat",
|
||||
"time_format": "Time Format",
|
||||
"discount_setting": "Kortingsinstelling",
|
||||
"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.",
|
||||
@@ -1588,7 +1600,7 @@
|
||||
"pdf_invoice_label": "Factuur",
|
||||
"pdf_invoice_number": "Factuurnummer",
|
||||
"pdf_invoice_date": "Factuur datum",
|
||||
"pdf_invoice_due_date": "Vervaldatum",
|
||||
"pdf_invoice_due_date": "Due Date",
|
||||
"pdf_notes": "Opmerkingen",
|
||||
"pdf_items_label": "Artikelen",
|
||||
"pdf_quantity_label": "Aantal stuks",
|
||||
|
||||
30
lang/pl.json
30
lang/pl.json
@@ -191,7 +191,7 @@
|
||||
"customers": {
|
||||
"title": "Klienci",
|
||||
"prefix": "Przedrostek",
|
||||
"tax_id": "Tax ID",
|
||||
"tax_id": "NIP",
|
||||
"add_customer": "Dodaj klienta",
|
||||
"contacts_list": "Lista klientów",
|
||||
"name": "Nazwa",
|
||||
@@ -852,7 +852,8 @@
|
||||
"payment_modes": "Rodzaje płatności",
|
||||
"notes": "Notatki",
|
||||
"exchange_rate": "Kurs wymiany",
|
||||
"address_information": "Informacje Adresowe"
|
||||
"address_information": "Informacje Adresowe",
|
||||
"pdf_generation": "PDF Generation"
|
||||
},
|
||||
"address_information": {
|
||||
"section_description": " Możesz zaktualizować informacje o adresie za pomocą poniższego formularza."
|
||||
@@ -893,6 +894,7 @@
|
||||
"mailgun_endpoint": "Punkt dostępowy Mailgun",
|
||||
"ses_secret": "Tajny klucz SES",
|
||||
"ses_key": "Klucz SES",
|
||||
"ses_region": "AWS Region",
|
||||
"password": "Hasło poczty",
|
||||
"username": "Nazwa użytkownika poczty",
|
||||
"mail_config": "Konfiguracja poczty",
|
||||
@@ -904,13 +906,21 @@
|
||||
"pdf": {
|
||||
"title": "Ustawienia PDF",
|
||||
"footer_text": "Teks stopki",
|
||||
"pdf_layout": "Szablon PDF"
|
||||
"pdf_layout": "Szablon PDF",
|
||||
"pdf_configuration": "PDF Generation Settings",
|
||||
"section_description": "Change the way PDFs are generated",
|
||||
"driver": "PDF Driver to use",
|
||||
"papersize": "Papersize",
|
||||
"papersize_hint": "Papersize in width and height (ex. \"210mm 297mm\")",
|
||||
"gotenberg_host": "Gotenberg service host",
|
||||
"pdf_variables_save_successfully": "PDF configuration saved successfully",
|
||||
"pdf_variables_save_error": "PDF configuration could not be saved"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "Dane firmy",
|
||||
"company_name": "Nazwa firmy",
|
||||
"tax_id": "Tax Identification Number",
|
||||
"vat_id": "VAT Identification Number",
|
||||
"tax_id": "Numer identyfikacyjny VAT",
|
||||
"vat_id": "Numer identyfikacyjny VAT",
|
||||
"company_logo": "Logo firmy",
|
||||
"section_description": "Informacje o Twojej firmie, które będą wyświetlane na fakturach, ofertach i innych dokumentach stworzonych przez InvoiceShelf.",
|
||||
"phone": "Telefon",
|
||||
@@ -1087,6 +1097,8 @@
|
||||
"description": "Oszczędzaj czas, tworząc notatki i ponownie używając ich na fakturach, ofertach i płatnościach.",
|
||||
"notes": "Notatki",
|
||||
"type": "Typ",
|
||||
"is_default": "Select by default",
|
||||
"is_default_description": "This note will be selected by default in new invoices.",
|
||||
"add_note": "Dodaj notatkę",
|
||||
"add_new_note": "Dodaj nową notatkę",
|
||||
"name": "Nazwa",
|
||||
@@ -1236,7 +1248,7 @@
|
||||
"time_zone": "Strefa czasowa",
|
||||
"fiscal_year": "Rok finansowy",
|
||||
"date_format": "Format daty",
|
||||
"time_format": "Time Fromat",
|
||||
"time_format": "Time Format",
|
||||
"discount_setting": "Ustawienia rabatu",
|
||||
"discount_per_item": "Rabat na produkt ",
|
||||
"discount_setting_description": "Włącz to, jeśli chcesz dodać rabat do poszczególnych elementów faktury. Domyślnie rabat jest dodawany bezpośrednio do całej faktury.",
|
||||
@@ -1588,7 +1600,7 @@
|
||||
"pdf_invoice_label": "Faktura",
|
||||
"pdf_invoice_number": "Numer faktury",
|
||||
"pdf_invoice_date": "Data faktury",
|
||||
"pdf_invoice_due_date": "Termin",
|
||||
"pdf_invoice_due_date": "Due Date",
|
||||
"pdf_notes": "Notatki",
|
||||
"pdf_items_label": "Pozycje",
|
||||
"pdf_quantity_label": "Ilość",
|
||||
@@ -1622,8 +1634,8 @@
|
||||
"pdf_ship_to": "Wysyłka do",
|
||||
"pdf_received_from": "Otrzymane od:",
|
||||
"pdf_tax_label": "Podatek",
|
||||
"pdf_tax_id": "Tax-ID",
|
||||
"pdf_vat_id": "VAT-ID",
|
||||
"pdf_tax_id": "NIP",
|
||||
"pdf_vat_id": "NIP",
|
||||
"pdf_amount_paid": "Amount Paid",
|
||||
"pdf_amount_due": "Amount Due",
|
||||
"mail_thanks": "Thanks",
|
||||
|
||||
@@ -217,6 +217,7 @@
|
||||
"total": "Total",
|
||||
"discount": "Desconto",
|
||||
"sub_total": "Subtotal",
|
||||
"net_total": "Total Líquido",
|
||||
"estimate_number": "Numero do Orçamento",
|
||||
"ref_number": "Referência",
|
||||
"contact": "Contato",
|
||||
@@ -571,6 +572,7 @@
|
||||
"mailgun_endpoint": "Mailgun Endpoint",
|
||||
"ses_secret": "SES Segredo",
|
||||
"ses_key": "SES Chave",
|
||||
"ses_region": "Região AWS",
|
||||
"password": "Senha do Email",
|
||||
"username": "Nome de Usuário do Email",
|
||||
"mail_config": "Configuração de Email",
|
||||
@@ -758,7 +760,11 @@
|
||||
"updated_message": "Tipo de Imposto Atualizado com sucesso",
|
||||
"deleted_message": "Tipo de Imposto Deletado com sucesso",
|
||||
"confirm_delete": "Você não poderá recuperar este tipo de Imposto",
|
||||
"already_in_use": "O Imposto já está em uso"
|
||||
"already_in_use": "O Imposto já está em uso",
|
||||
"tax_included": "Imposto incluído",
|
||||
"tax_included_description": "Habilite isso se desejar informar que os Impostos já estão incluídos nos itens da Fatura ou no total da Fatura.",
|
||||
"tax_included_by_default": "Usar imposto incluído por padrão",
|
||||
"tax_included_by_default_description": "Habilite isso se desejar definir os impostos incluídos por padrão."
|
||||
},
|
||||
"expense_category": {
|
||||
"title": "Categoria de Despesa",
|
||||
@@ -931,5 +937,6 @@
|
||||
"address_maxlength": "O endereço não deve ter mais que 255 caracteres.",
|
||||
"ref_number_maxlength": "O número de referência não deve ter mais que 255 caracteres.",
|
||||
"prefix_maxlength": "O prefixo não deve ter mais que 5 caracteres."
|
||||
}
|
||||
},
|
||||
"pdf_net_total": "Total Líquido"
|
||||
}
|
||||
|
||||
727
lang/pt.json
727
lang/pt.json
File diff suppressed because it is too large
Load Diff
24
lang/ro.json
24
lang/ro.json
@@ -12,7 +12,7 @@
|
||||
"settings": "Setări",
|
||||
"logout": "Deconectare",
|
||||
"users": "Utilizatori",
|
||||
"modules": "Modules"
|
||||
"modules": "Module"
|
||||
},
|
||||
"general": {
|
||||
"add_company": "Adaugă firmă",
|
||||
@@ -317,7 +317,7 @@
|
||||
"notes": "Notes",
|
||||
"tax": "Tax",
|
||||
"estimate_template": "Template",
|
||||
"convert_to_invoice": "Convert to Invoice",
|
||||
"convert_to_invoice": "Convertește în Invoice",
|
||||
"mark_as_sent": "Mark as Sent",
|
||||
"send_estimate": "Send Estimate",
|
||||
"resend_estimate": "Resend Estimate",
|
||||
@@ -852,7 +852,8 @@
|
||||
"payment_modes": "Payment Modes",
|
||||
"notes": "Notes",
|
||||
"exchange_rate": "Exchange Rate",
|
||||
"address_information": "Address Information"
|
||||
"address_information": "Address Information",
|
||||
"pdf_generation": "PDF Generation"
|
||||
},
|
||||
"address_information": {
|
||||
"section_description": " You can update Your Address information using form below."
|
||||
@@ -893,6 +894,7 @@
|
||||
"mailgun_endpoint": "Mailgun Endpoint",
|
||||
"ses_secret": "SES Secret",
|
||||
"ses_key": "SES Key",
|
||||
"ses_region": "AWS Region",
|
||||
"password": "Mail Password",
|
||||
"username": "Mail Username",
|
||||
"mail_config": "Mail Configuration",
|
||||
@@ -904,7 +906,15 @@
|
||||
"pdf": {
|
||||
"title": "PDF Setting",
|
||||
"footer_text": "Footer Text",
|
||||
"pdf_layout": "PDF Layout"
|
||||
"pdf_layout": "PDF Layout",
|
||||
"pdf_configuration": "PDF Generation Settings",
|
||||
"section_description": "Change the way PDFs are generated",
|
||||
"driver": "PDF Driver to use",
|
||||
"papersize": "Papersize",
|
||||
"papersize_hint": "Papersize in width and height (ex. \"210mm 297mm\")",
|
||||
"gotenberg_host": "Gotenberg service host",
|
||||
"pdf_variables_save_successfully": "PDF configuration saved successfully",
|
||||
"pdf_variables_save_error": "PDF configuration could not be saved"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "Company info",
|
||||
@@ -1087,6 +1097,8 @@
|
||||
"description": "Save time by creating notes and reusing them on your invoices, estimates & payments.",
|
||||
"notes": "Notes",
|
||||
"type": "Type",
|
||||
"is_default": "Select by default",
|
||||
"is_default_description": "This note will be selected by default in new invoices.",
|
||||
"add_note": "Add Note",
|
||||
"add_new_note": "Add New Note",
|
||||
"name": "Name",
|
||||
@@ -1236,7 +1248,7 @@
|
||||
"time_zone": "Time Zone",
|
||||
"fiscal_year": "Financial Year",
|
||||
"date_format": "Date Format",
|
||||
"time_format": "Time Fromat",
|
||||
"time_format": "Time Format",
|
||||
"discount_setting": "Discount Setting",
|
||||
"discount_per_item": "Discount Per Item ",
|
||||
"discount_setting_description": "Enable this if you want to add Discount to individual invoice items. By default, Discount is added directly to the invoice.",
|
||||
@@ -1588,7 +1600,7 @@
|
||||
"pdf_invoice_label": "Invoice",
|
||||
"pdf_invoice_number": "Invoice Number",
|
||||
"pdf_invoice_date": "Invoice Date",
|
||||
"pdf_invoice_due_date": "Due date",
|
||||
"pdf_invoice_due_date": "Due Date",
|
||||
"pdf_notes": "Notes",
|
||||
"pdf_items_label": "Items",
|
||||
"pdf_quantity_label": "Quantity",
|
||||
|
||||
1084
lang/ru.json
1084
lang/ru.json
File diff suppressed because it is too large
Load Diff
26
lang/sk.json
26
lang/sk.json
@@ -852,7 +852,8 @@
|
||||
"payment_modes": "Spôsoby Platby",
|
||||
"notes": "Poznámky",
|
||||
"exchange_rate": "Výmenný kurz",
|
||||
"address_information": "Informácie o adrese"
|
||||
"address_information": "Informácie o adrese",
|
||||
"pdf_generation": "PDF Generation"
|
||||
},
|
||||
"address_information": {
|
||||
"section_description": "Adresu môžete aktualizovať pomocou formulára nižšie."
|
||||
@@ -864,7 +865,7 @@
|
||||
"primary_currency": "Hlavná Mena",
|
||||
"timezone": "Časové Pásmo",
|
||||
"date_format": "Formát Dátumu",
|
||||
"time_format": "Time Format",
|
||||
"time_format": "Formát času",
|
||||
"currencies": {
|
||||
"title": "Meny",
|
||||
"currency": "Mena | Meny",
|
||||
@@ -893,6 +894,7 @@
|
||||
"mailgun_endpoint": "Endpoint Mailgun",
|
||||
"ses_secret": "SES Tajný Kľúč (secret)",
|
||||
"ses_key": "SES kľúč (key)",
|
||||
"ses_region": "AWS Region",
|
||||
"password": "E-mailové heslo",
|
||||
"username": "E-mailové meno (username)",
|
||||
"mail_config": "Konfigurácia E-mailov",
|
||||
@@ -904,7 +906,15 @@
|
||||
"pdf": {
|
||||
"title": "Nastavenia PDF",
|
||||
"footer_text": "Text v pätičke",
|
||||
"pdf_layout": "Rozloženie PDF"
|
||||
"pdf_layout": "Rozloženie PDF",
|
||||
"pdf_configuration": "PDF Generation Settings",
|
||||
"section_description": "Change the way PDFs are generated",
|
||||
"driver": "PDF Driver to use",
|
||||
"papersize": "Papersize",
|
||||
"papersize_hint": "Papersize in width and height (ex. \"210mm 297mm\")",
|
||||
"gotenberg_host": "Gotenberg service host",
|
||||
"pdf_variables_save_successfully": "PDF configuration saved successfully",
|
||||
"pdf_variables_save_error": "PDF configuration could not be saved"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "Informácie o spoločnosti",
|
||||
@@ -1007,8 +1017,8 @@
|
||||
"random_sequence_param_label": "Sequence Length",
|
||||
"invoices": {
|
||||
"title": "Faktúry",
|
||||
"invoice_number_format": "Invoice Number Format",
|
||||
"invoice_number_format_description": "Customize how your invoice number gets generated automatically when you create a new invoice.",
|
||||
"invoice_number_format": "Číslovanie faktúr",
|
||||
"invoice_number_format_description": "Prispôsobte, ako sa bude generovať číslo faktúry pri jej vytváraní.",
|
||||
"preview_invoice_number": "Preview Invoice Number",
|
||||
"due_date": "Due Date",
|
||||
"due_date_description": "Specify how due date is automatically set when you create an invoice.",
|
||||
@@ -1087,6 +1097,8 @@
|
||||
"description": "Ušetrite čas vytváraním poznámok a ich opätovným použitím vo svojich faktúrach, odhadoch a platbách.",
|
||||
"notes": "Poznámky",
|
||||
"type": "Typ",
|
||||
"is_default": "Select by default",
|
||||
"is_default_description": "This note will be selected by default in new invoices.",
|
||||
"add_note": "Pridať poznámku",
|
||||
"add_new_note": "Pridať Novú Poznámku",
|
||||
"name": "Názov",
|
||||
@@ -1236,7 +1248,7 @@
|
||||
"time_zone": "Časové Pásmo",
|
||||
"fiscal_year": "Fiškálny Rok",
|
||||
"date_format": "Formát Dátumu",
|
||||
"time_format": "Time Fromat",
|
||||
"time_format": "Time Format",
|
||||
"discount_setting": "Nastavenia Zľavy",
|
||||
"discount_per_item": "Zľava pre každú Položku zvlášť ",
|
||||
"discount_setting_description": "Túto možnosť povoľte, ak chcete pridať zľavu k jednotlivým položkám faktúry. Štandardne sa zľava pripočítava priamo k faktúre.",
|
||||
@@ -1588,7 +1600,7 @@
|
||||
"pdf_invoice_label": "Faktúra",
|
||||
"pdf_invoice_number": "Číslo faktúry",
|
||||
"pdf_invoice_date": "Dátum vystavenia",
|
||||
"pdf_invoice_due_date": "Dátum splatnosti",
|
||||
"pdf_invoice_due_date": "Due Date",
|
||||
"pdf_notes": "Poznámky",
|
||||
"pdf_items_label": "Položky",
|
||||
"pdf_quantity_label": "Počet",
|
||||
|
||||
20
lang/sl.json
20
lang/sl.json
@@ -852,7 +852,8 @@
|
||||
"payment_modes": "Payment Modes",
|
||||
"notes": "Notes",
|
||||
"exchange_rate": "Exchange Rate",
|
||||
"address_information": "Address Information"
|
||||
"address_information": "Address Information",
|
||||
"pdf_generation": "PDF Generation"
|
||||
},
|
||||
"address_information": {
|
||||
"section_description": " You can update Your Address information using form below."
|
||||
@@ -893,6 +894,7 @@
|
||||
"mailgun_endpoint": "Mailgun Endpoint",
|
||||
"ses_secret": "SES Secret",
|
||||
"ses_key": "SES Key",
|
||||
"ses_region": "AWS Region",
|
||||
"password": "Mail Password",
|
||||
"username": "Mail Username",
|
||||
"mail_config": "Mail Configuration",
|
||||
@@ -904,7 +906,15 @@
|
||||
"pdf": {
|
||||
"title": "PDF Setting",
|
||||
"footer_text": "Footer Text",
|
||||
"pdf_layout": "PDF Layout"
|
||||
"pdf_layout": "PDF Layout",
|
||||
"pdf_configuration": "PDF Generation Settings",
|
||||
"section_description": "Change the way PDFs are generated",
|
||||
"driver": "PDF Driver to use",
|
||||
"papersize": "Papersize",
|
||||
"papersize_hint": "Papersize in width and height (ex. \"210mm 297mm\")",
|
||||
"gotenberg_host": "Gotenberg service host",
|
||||
"pdf_variables_save_successfully": "PDF configuration saved successfully",
|
||||
"pdf_variables_save_error": "PDF configuration could not be saved"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "Company info",
|
||||
@@ -1087,6 +1097,8 @@
|
||||
"description": "Save time by creating notes and reusing them on your invoices, estimates & payments.",
|
||||
"notes": "Notes",
|
||||
"type": "Type",
|
||||
"is_default": "Select by default",
|
||||
"is_default_description": "This note will be selected by default in new invoices.",
|
||||
"add_note": "Add Note",
|
||||
"add_new_note": "Add New Note",
|
||||
"name": "Name",
|
||||
@@ -1236,7 +1248,7 @@
|
||||
"time_zone": "Time Zone",
|
||||
"fiscal_year": "Financial Year",
|
||||
"date_format": "Date Format",
|
||||
"time_format": "Time Fromat",
|
||||
"time_format": "Time Format",
|
||||
"discount_setting": "Discount Setting",
|
||||
"discount_per_item": "Discount Per Item ",
|
||||
"discount_setting_description": "Enable this if you want to add Discount to individual invoice items. By default, Discount is added directly to the invoice.",
|
||||
@@ -1588,7 +1600,7 @@
|
||||
"pdf_invoice_label": "Invoice",
|
||||
"pdf_invoice_number": "Invoice Number",
|
||||
"pdf_invoice_date": "Invoice Date",
|
||||
"pdf_invoice_due_date": "Due date",
|
||||
"pdf_invoice_due_date": "Due Date",
|
||||
"pdf_notes": "Notes",
|
||||
"pdf_items_label": "Items",
|
||||
"pdf_quantity_label": "Quantity",
|
||||
|
||||
60
lang/sr.json
60
lang/sr.json
@@ -39,7 +39,7 @@
|
||||
"body": "Telo",
|
||||
"message": "Poruka",
|
||||
"send": "Pošalji",
|
||||
"preview": "Preview",
|
||||
"preview": "Pregled",
|
||||
"go_back": "Idi nazad",
|
||||
"back_to_login": "Nazad na prijavu?",
|
||||
"home": "Početna",
|
||||
@@ -96,7 +96,7 @@
|
||||
"copied_url_clipboard": "Copied url to clipboard!",
|
||||
"docs": "Docs",
|
||||
"do_you_wish_to_continue": "Do you wish to continue?",
|
||||
"note": "Note",
|
||||
"note": "Napomena",
|
||||
"pay_invoice": "Pay Invoice",
|
||||
"login_successfully": "Logged in successfully!",
|
||||
"logged_out_successfully": "Logged out successfully",
|
||||
@@ -229,9 +229,9 @@
|
||||
"edit_customer": "Izmeni klijenta",
|
||||
"basic_info": "Osnovne informacije",
|
||||
"portal_access": "Portal Access",
|
||||
"portal_access_text": "Would you like to allow this customer to login to the Customer Portal?",
|
||||
"portal_access_url": "Customer Portal Login URL",
|
||||
"portal_access_url_help": "Please copy & forward the above given URL to your customer for providing access.",
|
||||
"portal_access_text": "Da li želite da dozvolite klijentu da se prijavi na Korisnički portal?",
|
||||
"portal_access_url": "URL do korisničkog portala",
|
||||
"portal_access_url_help": "Молимо вас да копирате и проследите горњу URL адресу вашем клијенту ради омогућавања приступа.",
|
||||
"billing_address": "Adresa za naplatu",
|
||||
"shipping_address": "Adresa za dostavu",
|
||||
"copy_billing_address": "Kopiraj iz adrese za naplatu",
|
||||
@@ -251,9 +251,9 @@
|
||||
"confirm_delete": "Nećeš moći da povratiš ovog klijenta i sve njegove Fakture, Profakture i Uplate. | Nećeš moći da povratiš ove klijente i njihove Fakture, Profakture i Uplate.",
|
||||
"created_message": "Klijent uspešno kreiran",
|
||||
"updated_message": "Klijent uspešno ažuriran",
|
||||
"address_updated_message": "Address Information Updated succesfully",
|
||||
"address_updated_message": "",
|
||||
"deleted_message": "Klijent uspešno obrisan | Klijenti uspešno obrisani",
|
||||
"edit_currency_not_allowed": "Cannot change currency once transactions created."
|
||||
"edit_currency_not_allowed": "Nije moguće promeniti valutu nakon što su transakcije već kreirane."
|
||||
},
|
||||
"items": {
|
||||
"title": "Stavke",
|
||||
@@ -324,9 +324,9 @@
|
||||
"record_payment": "Unesi uplatu",
|
||||
"add_estimate": "Dodaj Profakturu",
|
||||
"save_estimate": "Sačuvaj Profakturu",
|
||||
"cloned_successfully": "Estimate cloned successfully",
|
||||
"clone_estimate": "Clone Estimate",
|
||||
"confirm_clone": "This Estimate will be cloned into a new Estimate",
|
||||
"cloned_successfully": "Uspešno napravljen duplikat Fakture",
|
||||
"clone_estimate": "Dupliraj Profakturu",
|
||||
"confirm_clone": "Ova ponuda će biti kopirana u novu ponudu",
|
||||
"confirm_conversion": "Detalji ove Profakture će biti iskorišćeni za pravljenje Fakture.",
|
||||
"conversion_message": "Faktura uspešno kreirana",
|
||||
"confirm_send_estimate": "Ova Profaktura će biti poslata putem Email-a klijentu",
|
||||
@@ -378,7 +378,7 @@
|
||||
"select_an_item": "Unesi tekst ili klikni da izabereš",
|
||||
"type_item_description": "Unesi opis Stavke (nije obavezno)"
|
||||
},
|
||||
"mark_as_default_estimate_template_description": "If enabled, the selected template will be automatically selected for new estimates."
|
||||
"mark_as_default_estimate_template_description": "Ako je omogućeno, izabrani šablon će automatski biti postavljen za nove ponude."
|
||||
},
|
||||
"invoices": {
|
||||
"title": "Fakture",
|
||||
@@ -420,13 +420,13 @@
|
||||
"send_invoice": "Pošalji Fakturu",
|
||||
"resend_invoice": "Ponovo pošalji Fakturu",
|
||||
"invoice_template": "Šablon Fakture",
|
||||
"conversion_message": "Invoice cloned successful",
|
||||
"conversion_message": "Uspešno napravljen duplikat Fakture",
|
||||
"template": "Šablon",
|
||||
"mark_as_sent": "Označi kao Poslato",
|
||||
"confirm_send_invoice": "Ova Faktura će biti poslata putem Email-a klijentu",
|
||||
"invoice_mark_as_sent": "Ova Faktura će biti označena kao poslata",
|
||||
"confirm_mark_as_accepted": "This invoice will be marked as Accepted",
|
||||
"confirm_mark_as_rejected": "This invoice will be marked as Rejected",
|
||||
"confirm_mark_as_accepted": "Ova Faktura će biti označena kao Prihvaćena",
|
||||
"confirm_mark_as_rejected": "Ova Faktura će biti označena kao Odbijena",
|
||||
"confirm_send": "Ova Faktura će biti poslata putem Email-a klijentu",
|
||||
"invoice_date": "Datum Fakture",
|
||||
"record_payment": "Unesi Uplatu",
|
||||
@@ -438,13 +438,13 @@
|
||||
"update_invoice": "Ažuriraj Fakturu",
|
||||
"add_new_tax": "Dodaj nov Porez",
|
||||
"no_invoices": "Još uvek nema Faktura!",
|
||||
"mark_as_rejected": "Mark as rejected",
|
||||
"mark_as_accepted": "Mark as accepted",
|
||||
"mark_as_rejected": "Označi kao odbijeno",
|
||||
"mark_as_accepted": "Označi kao prihvaćeno",
|
||||
"list_of_invoices": "Ova sekcija će da sadrži spisak Faktura.",
|
||||
"select_invoice": "Odaberi Fakturu",
|
||||
"no_matching_invoices": "Ne postoje Fakture koje odgovaraju pretrazi!",
|
||||
"mark_as_sent_successfully": "Faktura uspešno označena kao Poslata",
|
||||
"invoice_sent_successfully": "Invoice sent successfully",
|
||||
"invoice_sent_successfully": "Faktura uspešno poslata",
|
||||
"cloned_successfully": "Uspešno napravljen duplikat Fakture",
|
||||
"clone_invoice": "Napravi duplikat",
|
||||
"confirm_clone": "Ova Faktura će biti duplikat nove Fakture",
|
||||
@@ -470,11 +470,11 @@
|
||||
"marked_as_sent_message": "Faktura označena kao uspešno poslata",
|
||||
"something_went_wrong": "nešto je krenulo naopako",
|
||||
"invalid_due_amount_message": "Ukupan iznos za plaćanje u fakturi ne može biti manji od iznosa uplate za ovu fakturu. Molim Vas ažurirajte fakturu ili obrišite uplate koje su povezane sa ovom fakturom da bi nastavili.",
|
||||
"mark_as_default_invoice_template_description": "If enabled, the selected template will be automatically selected for new invoices."
|
||||
"mark_as_default_invoice_template_description": "Ako je omogućeno, izabrani šablon će automatski biti postavljen za nove ponude."
|
||||
},
|
||||
"recurring_invoices": {
|
||||
"title": "Recurring Invoices",
|
||||
"invoices_list": "Recurring Invoices List",
|
||||
"title": "Ponavljajuće fakture",
|
||||
"invoices_list": "Lista faktura koje se ponavljaju",
|
||||
"days": "{days} Days",
|
||||
"months": "{months} Month",
|
||||
"years": "{years} Year",
|
||||
@@ -852,7 +852,8 @@
|
||||
"payment_modes": "Način plaćanja",
|
||||
"notes": "Napomene",
|
||||
"exchange_rate": "Exchange Rate",
|
||||
"address_information": "Address Information"
|
||||
"address_information": "Address Information",
|
||||
"pdf_generation": "PDF Generation"
|
||||
},
|
||||
"address_information": {
|
||||
"section_description": " You can update Your Address information using form below."
|
||||
@@ -893,6 +894,7 @@
|
||||
"mailgun_endpoint": "Mailgun Endpoint",
|
||||
"ses_secret": "SES Šifra",
|
||||
"ses_key": "SES Ključ",
|
||||
"ses_region": "AWS Region",
|
||||
"password": "Mail Šifra",
|
||||
"username": "Mail Korisničko Ime",
|
||||
"mail_config": "Mail Podešavanje",
|
||||
@@ -904,7 +906,15 @@
|
||||
"pdf": {
|
||||
"title": "PDF Podešavanje",
|
||||
"footer_text": "Tekstualno zaglavlje na dnu strane",
|
||||
"pdf_layout": "PDF Raspored"
|
||||
"pdf_layout": "PDF Raspored",
|
||||
"pdf_configuration": "PDF Generation Settings",
|
||||
"section_description": "Change the way PDFs are generated",
|
||||
"driver": "PDF Driver to use",
|
||||
"papersize": "Papersize",
|
||||
"papersize_hint": "Papersize in width and height (ex. \"210mm 297mm\")",
|
||||
"gotenberg_host": "Gotenberg service host",
|
||||
"pdf_variables_save_successfully": "PDF configuration saved successfully",
|
||||
"pdf_variables_save_error": "PDF configuration could not be saved"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "Podaci o firmi",
|
||||
@@ -1087,6 +1097,8 @@
|
||||
"description": "Uštedite vreme pravljeći napomene i koristeći ih na fakturama, profakturama i uplatama.",
|
||||
"notes": "Napomene",
|
||||
"type": "Tip",
|
||||
"is_default": "Select by default",
|
||||
"is_default_description": "This note will be selected by default in new invoices.",
|
||||
"add_note": "Dodaj Napomenu",
|
||||
"add_new_note": "Dodaj novu Napomenu",
|
||||
"name": "Naziv",
|
||||
@@ -1236,7 +1248,7 @@
|
||||
"time_zone": "Vremenska Zona",
|
||||
"fiscal_year": "Finansijska Godina",
|
||||
"date_format": "Format datuma",
|
||||
"time_format": "Time Fromat",
|
||||
"time_format": "Time Format",
|
||||
"discount_setting": "Podešavanja za popuste",
|
||||
"discount_per_item": "Popust po stavci",
|
||||
"discount_setting_description": "Izaberite ovo ako želite da dodajete Popust na individualne stavke. Podrazumevano ponašanje je da je Popust dodat direktno na fakturu.",
|
||||
@@ -1588,7 +1600,7 @@
|
||||
"pdf_invoice_label": "Faktura",
|
||||
"pdf_invoice_number": "Broj Fakture",
|
||||
"pdf_invoice_date": "Datum Fakture",
|
||||
"pdf_invoice_due_date": "Datum dospeća Fakture",
|
||||
"pdf_invoice_due_date": "Due Date",
|
||||
"pdf_notes": "Napomena",
|
||||
"pdf_items_label": "Stavke",
|
||||
"pdf_quantity_label": "Količina",
|
||||
|
||||
22
lang/sv.json
22
lang/sv.json
@@ -191,7 +191,7 @@
|
||||
"customers": {
|
||||
"title": "Kunder",
|
||||
"prefix": "Prefix",
|
||||
"tax_id": "Tax ID",
|
||||
"tax_id": "Momsreg.nr",
|
||||
"add_customer": "Lägg till kund",
|
||||
"contacts_list": "Kundlista",
|
||||
"name": "Namn",
|
||||
@@ -852,7 +852,8 @@
|
||||
"payment_modes": "Betalmetoder",
|
||||
"notes": "Anteckningar",
|
||||
"exchange_rate": "Växelkurser",
|
||||
"address_information": "Adressinformation"
|
||||
"address_information": "Adressinformation",
|
||||
"pdf_generation": "PDF Generation"
|
||||
},
|
||||
"address_information": {
|
||||
"section_description": " Du kan uppdatera din adressinformation genom att använda formuläret nedan."
|
||||
@@ -893,6 +894,7 @@
|
||||
"mailgun_endpoint": "Mailgun Endpoint",
|
||||
"ses_secret": "SES Säkerhet",
|
||||
"ses_key": "SES nyckel",
|
||||
"ses_region": "AWS Region",
|
||||
"password": "Lösenord",
|
||||
"username": "Användarnamn",
|
||||
"mail_config": "Epostinställningar",
|
||||
@@ -904,7 +906,15 @@
|
||||
"pdf": {
|
||||
"title": "PDF-inställningar",
|
||||
"footer_text": "Sidfotstext",
|
||||
"pdf_layout": "PDF-layout"
|
||||
"pdf_layout": "PDF-layout",
|
||||
"pdf_configuration": "PDF Generation Settings",
|
||||
"section_description": "Change the way PDFs are generated",
|
||||
"driver": "PDF Driver to use",
|
||||
"papersize": "Papersize",
|
||||
"papersize_hint": "Papersize in width and height (ex. \"210mm 297mm\")",
|
||||
"gotenberg_host": "Gotenberg service host",
|
||||
"pdf_variables_save_successfully": "PDF configuration saved successfully",
|
||||
"pdf_variables_save_error": "PDF configuration could not be saved"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "Företagsinfo",
|
||||
@@ -1087,6 +1097,8 @@
|
||||
"description": "Spara tid genom att skapa noteringar som kan återanvändas på fakturor, betalningsförslag, och betalningar.",
|
||||
"notes": "Anteckningar",
|
||||
"type": "Typ",
|
||||
"is_default": "Select by default",
|
||||
"is_default_description": "This note will be selected by default in new invoices.",
|
||||
"add_note": "Lägg till anteckning",
|
||||
"add_new_note": "Lägg till ny anteckning",
|
||||
"name": "Namn",
|
||||
@@ -1236,7 +1248,7 @@
|
||||
"time_zone": "Tidszon",
|
||||
"fiscal_year": "Räkenskapsår",
|
||||
"date_format": "Datumformattering",
|
||||
"time_format": "Time Fromat",
|
||||
"time_format": "Time Format",
|
||||
"discount_setting": "Rabattinställningar",
|
||||
"discount_per_item": "Rabatt per artikel ",
|
||||
"discount_setting_description": "Aktivera detta om du vill kunna lägga rabatt på enskilda fakturaartiklar. Rabatt ges som standard på hela fakturan.",
|
||||
@@ -1588,7 +1600,7 @@
|
||||
"pdf_invoice_label": "Faktura",
|
||||
"pdf_invoice_number": "Fakturanummer",
|
||||
"pdf_invoice_date": "Fakturadatum",
|
||||
"pdf_invoice_due_date": "Inbetalningsdatum",
|
||||
"pdf_invoice_due_date": "Due Date",
|
||||
"pdf_notes": "Anteckningar",
|
||||
"pdf_items_label": "Artiklar",
|
||||
"pdf_quantity_label": "Antal",
|
||||
|
||||
20
lang/th.json
20
lang/th.json
@@ -852,7 +852,8 @@
|
||||
"payment_modes": "วิธีการชำระเงิน",
|
||||
"notes": "หมายเหตุ",
|
||||
"exchange_rate": "อัตราแลกเปลี่ยน",
|
||||
"address_information": "ข้อมูลที่อยู่"
|
||||
"address_information": "ข้อมูลที่อยู่",
|
||||
"pdf_generation": "PDF Generation"
|
||||
},
|
||||
"address_information": {
|
||||
"section_description": " คุณสามารถอัปเดตข้อมูลที่อยู่ของคุณโดยใช้แบบฟอร์มด้านล่าง"
|
||||
@@ -893,6 +894,7 @@
|
||||
"mailgun_endpoint": "ปลายทาง Mailgun",
|
||||
"ses_secret": "SES ซีเคร็ต",
|
||||
"ses_key": "SES คีย์",
|
||||
"ses_region": "AWS Region",
|
||||
"password": "รหัสผ่านจดหมาย",
|
||||
"username": "ชื่อผู้ใช้จดหมาย",
|
||||
"mail_config": "การกำหนดค่าจดหมาย",
|
||||
@@ -904,7 +906,15 @@
|
||||
"pdf": {
|
||||
"title": "การตั้งค่า PDF",
|
||||
"footer_text": "ข้อความท้ายกระดาษ",
|
||||
"pdf_layout": "รูปแบบไฟล์ PDF"
|
||||
"pdf_layout": "รูปแบบไฟล์ PDF",
|
||||
"pdf_configuration": "PDF Generation Settings",
|
||||
"section_description": "Change the way PDFs are generated",
|
||||
"driver": "PDF Driver to use",
|
||||
"papersize": "Papersize",
|
||||
"papersize_hint": "Papersize in width and height (ex. \"210mm 297mm\")",
|
||||
"gotenberg_host": "Gotenberg service host",
|
||||
"pdf_variables_save_successfully": "PDF configuration saved successfully",
|
||||
"pdf_variables_save_error": "PDF configuration could not be saved"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "ข้อมูลบริษัท",
|
||||
@@ -1087,6 +1097,8 @@
|
||||
"description": "ประหยัดเวลาด้วยการสร้างหมายเหตุและนำกลับมาใช้ใหม่ในใบวางบิล ใบเสนอราคาและการชำระเงิน",
|
||||
"notes": "หมายเหตุ",
|
||||
"type": "ประเภท",
|
||||
"is_default": "Select by default",
|
||||
"is_default_description": "This note will be selected by default in new invoices.",
|
||||
"add_note": "เพิ่มโน้ต",
|
||||
"add_new_note": "เพิ่มหมายเหตุใหม่",
|
||||
"name": "ชื่อ",
|
||||
@@ -1236,7 +1248,7 @@
|
||||
"time_zone": "เขตเวลา",
|
||||
"fiscal_year": "ปีงบการเงิน",
|
||||
"date_format": "รูปแบบวันที่",
|
||||
"time_format": "Time Fromat",
|
||||
"time_format": "Time Format",
|
||||
"discount_setting": "การตั้งค่าส่วนลด",
|
||||
"discount_per_item": "ส่วนลดต่อรายการ ",
|
||||
"discount_setting_description": "เปิดใช้งานตัวเลือกนี้หากคุณต้องการเพิ่มส่วนลดให้กับรายการใบวางบิลแต่ละรายการโดยค่าเริ่มต้นส่วนลดจะถูกเพิ่มโดยตรงไปยังใบวางบิล",
|
||||
@@ -1588,7 +1600,7 @@
|
||||
"pdf_invoice_label": "ใบวางบิล",
|
||||
"pdf_invoice_number": "เลขที่ใบวางบิล",
|
||||
"pdf_invoice_date": "วันที่ใบวางบิล",
|
||||
"pdf_invoice_due_date": "วันครบกำหนด",
|
||||
"pdf_invoice_due_date": "Due Date",
|
||||
"pdf_notes": "หมายเหตุ",
|
||||
"pdf_items_label": "บริการ",
|
||||
"pdf_quantity_label": "หน่วย",
|
||||
|
||||
38
lang/tr.json
38
lang/tr.json
@@ -101,19 +101,19 @@
|
||||
"login_successfully": "Başarıyla giriş yapıldı!",
|
||||
"logged_out_successfully": "Başarıyla çıkış yapıldı",
|
||||
"mark_as_default": "Varsayılan olarak işaretleyin",
|
||||
"no_data_found": "No data found",
|
||||
"no_data_found": "Veri bulunamadı.",
|
||||
"pagination": {
|
||||
"previous": "Previous",
|
||||
"previous": "Önceki",
|
||||
"next": "İleri",
|
||||
"showing": "Showing",
|
||||
"to": "to",
|
||||
"of": "of",
|
||||
"results": "results"
|
||||
"showing": "Gösterilen",
|
||||
"to": "için",
|
||||
"of": "'un",
|
||||
"results": "sonuçlar"
|
||||
},
|
||||
"file_upload": {
|
||||
"drag_a_file": "Drag a file here or",
|
||||
"browse": "browse",
|
||||
"to_choose": "to choose a file"
|
||||
"drag_a_file": "Bu dosyayı sürükleyin veya",
|
||||
"browse": "göz at\n",
|
||||
"to_choose": "bir dosya seçmek için"
|
||||
},
|
||||
"multiselect": {
|
||||
"the_list_is_empty": "The list is empty",
|
||||
@@ -852,7 +852,8 @@
|
||||
"payment_modes": "Ödeme yöntemleri",
|
||||
"notes": "Notlar",
|
||||
"exchange_rate": "Exchange Rate",
|
||||
"address_information": "Address Information"
|
||||
"address_information": "Address Information",
|
||||
"pdf_generation": "PDF Generation"
|
||||
},
|
||||
"address_information": {
|
||||
"section_description": " You can update Your Address information using form below."
|
||||
@@ -893,6 +894,7 @@
|
||||
"mailgun_endpoint": "Mailgun Uçnoktası",
|
||||
"ses_secret": "SES Sırrı",
|
||||
"ses_key": "Ses Anahtarı",
|
||||
"ses_region": "AWS Region",
|
||||
"password": "Posta Parolası",
|
||||
"username": "Posta Kullanıcı Adı",
|
||||
"mail_config": "Posta Konfigürasyonu",
|
||||
@@ -904,7 +906,15 @@
|
||||
"pdf": {
|
||||
"title": "PDF Ayarları",
|
||||
"footer_text": "Altbilgi Metni",
|
||||
"pdf_layout": "PDF Biçimi"
|
||||
"pdf_layout": "PDF Biçimi",
|
||||
"pdf_configuration": "PDF Generation Settings",
|
||||
"section_description": "Change the way PDFs are generated",
|
||||
"driver": "PDF Driver to use",
|
||||
"papersize": "Papersize",
|
||||
"papersize_hint": "Papersize in width and height (ex. \"210mm 297mm\")",
|
||||
"gotenberg_host": "Gotenberg service host",
|
||||
"pdf_variables_save_successfully": "PDF configuration saved successfully",
|
||||
"pdf_variables_save_error": "PDF configuration could not be saved"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "Şirket Bilgileri",
|
||||
@@ -1087,6 +1097,8 @@
|
||||
"description": "Notlar oluşturarak ve faturalar, proformalar & ödemeler üzerinde tekrar kullanarak zamandan kazanın.",
|
||||
"notes": "Notlar",
|
||||
"type": "Tür",
|
||||
"is_default": "Select by default",
|
||||
"is_default_description": "This note will be selected by default in new invoices.",
|
||||
"add_note": "Not ekle",
|
||||
"add_new_note": "Yeni not ekle",
|
||||
"name": "İsim",
|
||||
@@ -1236,7 +1248,7 @@
|
||||
"time_zone": "Zaman Dilimi",
|
||||
"fiscal_year": "Mali Yıl",
|
||||
"date_format": "Tarih Biçimi",
|
||||
"time_format": "Time Fromat",
|
||||
"time_format": "Time Format",
|
||||
"discount_setting": "İndirim Ayarı",
|
||||
"discount_per_item": "Öğe Başı İndirim",
|
||||
"discount_setting_description": "Bireysel fatura kalemlerine indirim eklemek istiyorsanız bunu etkinleştirin. Varsayılan olarak, indirim doğrudan faturaya eklenir.",
|
||||
@@ -1588,7 +1600,7 @@
|
||||
"pdf_invoice_label": "Fatura",
|
||||
"pdf_invoice_number": "Fatura Numarası",
|
||||
"pdf_invoice_date": "Fatura Tarihi",
|
||||
"pdf_invoice_due_date": "Son Ödeme Tarihi",
|
||||
"pdf_invoice_due_date": "Due Date",
|
||||
"pdf_notes": "Notlar",
|
||||
"pdf_items_label": "Ürünler",
|
||||
"pdf_quantity_label": "Miktar",
|
||||
|
||||
2608
lang/uk.json
2608
lang/uk.json
File diff suppressed because it is too large
Load Diff
20
lang/vi.json
20
lang/vi.json
@@ -852,7 +852,8 @@
|
||||
"payment_modes": "Phương thức thanh toán",
|
||||
"notes": "Ghi chú",
|
||||
"exchange_rate": "Tỷ giá ngoại tệ",
|
||||
"address_information": "Thông tin địa chỉ"
|
||||
"address_information": "Thông tin địa chỉ",
|
||||
"pdf_generation": "PDF Generation"
|
||||
},
|
||||
"address_information": {
|
||||
"section_description": " Bạn có thể cập nhật thông tin địa chỉ bằng cách sử dụng biếu mẫu duới đây."
|
||||
@@ -893,6 +894,7 @@
|
||||
"mailgun_endpoint": "Điểm cuối của Mailgun",
|
||||
"ses_secret": "Bí mật SES",
|
||||
"ses_key": "Khóa SES",
|
||||
"ses_region": "AWS Region",
|
||||
"password": "Mật khẩu thư",
|
||||
"username": "Tên người dùng thư",
|
||||
"mail_config": "Cấu hình thư",
|
||||
@@ -904,7 +906,15 @@
|
||||
"pdf": {
|
||||
"title": "Cài đặt PDF",
|
||||
"footer_text": "Văn bản chân trang",
|
||||
"pdf_layout": "Bố cục PDF"
|
||||
"pdf_layout": "Bố cục PDF",
|
||||
"pdf_configuration": "PDF Generation Settings",
|
||||
"section_description": "Change the way PDFs are generated",
|
||||
"driver": "PDF Driver to use",
|
||||
"papersize": "Papersize",
|
||||
"papersize_hint": "Papersize in width and height (ex. \"210mm 297mm\")",
|
||||
"gotenberg_host": "Gotenberg service host",
|
||||
"pdf_variables_save_successfully": "PDF configuration saved successfully",
|
||||
"pdf_variables_save_error": "PDF configuration could not be saved"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "Thông tin công ty",
|
||||
@@ -1087,6 +1097,8 @@
|
||||
"description": "Tiết kiệm thời gian bằng cách tạo ghi chú và sử dụng lại chúng trên hóa đơn, ước tính của bạn.",
|
||||
"notes": "Ghi chú",
|
||||
"type": "Kiểu",
|
||||
"is_default": "Select by default",
|
||||
"is_default_description": "This note will be selected by default in new invoices.",
|
||||
"add_note": "Thêm ghi chú",
|
||||
"add_new_note": "Thêm ghi chú mới",
|
||||
"name": "Tên",
|
||||
@@ -1236,7 +1248,7 @@
|
||||
"time_zone": "Múi giờ",
|
||||
"fiscal_year": "Năm tài chính",
|
||||
"date_format": "Định dạng ngày tháng",
|
||||
"time_format": "Time Fromat",
|
||||
"time_format": "Time Format",
|
||||
"discount_setting": "Cài đặt chiết khấu",
|
||||
"discount_per_item": "Giảm giá cho mỗi mặt hàng ",
|
||||
"discount_setting_description": "Bật tính năng này nếu bạn muốn thêm Giảm giá vào các mặt hàng hóa đơn riêng lẻ. Theo mặc định, Giảm giá được thêm trực tiếp vào hóa đơn.",
|
||||
@@ -1588,7 +1600,7 @@
|
||||
"pdf_invoice_label": "Hóa đơn",
|
||||
"pdf_invoice_number": "Số hóa đơn",
|
||||
"pdf_invoice_date": "Ngày lập hóa đơn",
|
||||
"pdf_invoice_due_date": "Ngày đến hạn",
|
||||
"pdf_invoice_due_date": "Due Date",
|
||||
"pdf_notes": "Ghi chú",
|
||||
"pdf_items_label": "Mặt hàng",
|
||||
"pdf_quantity_label": "Định lượng",
|
||||
|
||||
56
lang/zh.json
56
lang/zh.json
@@ -286,7 +286,7 @@
|
||||
"estimates": {
|
||||
"title": "報價",
|
||||
"accept_estimate": "Accept Estimate",
|
||||
"reject_estimate": "Reject Estimate",
|
||||
"reject_estimate": "拒絕報價",
|
||||
"estimate": "報價 | 報價",
|
||||
"estimates_list": "報價列表",
|
||||
"days": "{days} 天",
|
||||
@@ -341,7 +341,7 @@
|
||||
},
|
||||
"accepted": "已接受",
|
||||
"rejected": "已拒絕",
|
||||
"expired": "Expired",
|
||||
"expired": "",
|
||||
"sent": "傳送",
|
||||
"draft": "草稿",
|
||||
"viewed": "Viewed",
|
||||
@@ -470,7 +470,7 @@
|
||||
"marked_as_sent_message": "發票已標示為成功傳送",
|
||||
"something_went_wrong": "出現錯誤",
|
||||
"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": {
|
||||
"title": "定期發票",
|
||||
@@ -487,17 +487,17 @@
|
||||
"completed": "已完成",
|
||||
"customer": "客戶",
|
||||
"paid_status": "付款狀態",
|
||||
"ref_no": "REF NO.",
|
||||
"ref_no": "如果啟用,選定的範本將自動用於新發票",
|
||||
"number": "NUMBER",
|
||||
"amount_due": "AMOUNT DUE",
|
||||
"partially_paid": "Partially Paid",
|
||||
"partially_paid": "",
|
||||
"total": "Total",
|
||||
"discount": "Discount",
|
||||
"sub_total": "Sub Total",
|
||||
"invoice": "Recurring Invoice | Recurring Invoices",
|
||||
"invoice_number": "Recurring Invoice Number",
|
||||
"next_invoice_date": "Next Invoice Date",
|
||||
"ref_number": "Ref Number",
|
||||
"ref_number": "參考編號",
|
||||
"contact": "Contact",
|
||||
"add_item": "Add an Item",
|
||||
"date": "Date",
|
||||
@@ -511,14 +511,14 @@
|
||||
"on_hold": "On Hold",
|
||||
"complete": "Completed",
|
||||
"add_tax": "Add Tax",
|
||||
"amount": "Amount",
|
||||
"amount": "",
|
||||
"action": "Action",
|
||||
"notes": "Notes",
|
||||
"view": "View",
|
||||
"basic_info": "Basic Info",
|
||||
"send_invoice": "Send Recurring Invoice",
|
||||
"auto_send": "Auto Send",
|
||||
"resend_invoice": "Resend Recurring Invoice",
|
||||
"resend_invoice": "",
|
||||
"invoice_template": "Recurring Invoice Template",
|
||||
"conversion_message": "Recurring Invoice cloned successful",
|
||||
"template": "Template",
|
||||
@@ -527,17 +527,17 @@
|
||||
"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",
|
||||
"starts_at": "Start Date",
|
||||
"due_date": "Invoice Due Date",
|
||||
"due_date": "",
|
||||
"record_payment": "Record Payment",
|
||||
"add_new_invoice": "Add New Recurring Invoice",
|
||||
"update_expense": "Update Expense",
|
||||
"update_expense": "",
|
||||
"edit_invoice": "Edit Recurring Invoice",
|
||||
"new_invoice": "New Recurring Invoice",
|
||||
"send_automatically": "Send Automatically",
|
||||
"send_automatically_desc": "Enable this, if you would like to send the invoice automatically to the customer when its created.",
|
||||
"save_invoice": "Save Recurring Invoice",
|
||||
"update_invoice": "Update Recurring Invoice",
|
||||
"add_new_tax": "Add New Tax",
|
||||
"add_new_tax": "添加新的稅項",
|
||||
"no_invoices": "No Recurring Invoices yet!",
|
||||
"mark_as_rejected": "Mark as rejected",
|
||||
"mark_as_accepted": "Mark as accepted",
|
||||
@@ -553,7 +553,7 @@
|
||||
"item": {
|
||||
"title": "Item Title",
|
||||
"description": "Description",
|
||||
"quantity": "Quantity",
|
||||
"quantity": "這部份包含發票列表",
|
||||
"price": "Price",
|
||||
"discount": "Discount",
|
||||
"total": "Total",
|
||||
@@ -565,7 +565,7 @@
|
||||
"type_item_description": "Type Item Description (optional)"
|
||||
},
|
||||
"frequency": {
|
||||
"title": "Frequency (using cron format)",
|
||||
"title": "",
|
||||
"select_frequency": "Select Frequency",
|
||||
"minute": "Minute",
|
||||
"hour": "Hour",
|
||||
@@ -578,8 +578,8 @@
|
||||
"every_2_hour": "Every 2 Hour",
|
||||
"every_day_at_midnight": "Every day at midnight",
|
||||
"every_week": "Every Week",
|
||||
"every_15_days_at_midnight": "Every 15 days at midnight",
|
||||
"on_the_first_day_of_every_month_at_midnight": "On the first day of every month at 00:00",
|
||||
"every_15_days_at_midnight": "每15天半夜",
|
||||
"on_the_first_day_of_every_month_at_midnight": "每月第一天半夜00:00",
|
||||
"every_6_month": "Every 6 Month",
|
||||
"every_year_on_the_first_day_of_january_at_midnight": "Every year on the first day of january at 00:00",
|
||||
"custom": "Custom"
|
||||
@@ -635,7 +635,7 @@
|
||||
"updated_message": "成功更新付款",
|
||||
"deleted_message": "成功刪除付款 | 成功刪除付款",
|
||||
"invalid_amount_message": "付款金額有誤",
|
||||
"amount_due": "Due Amount"
|
||||
"amount_due": "應付金額"
|
||||
},
|
||||
"expenses": {
|
||||
"title": "支出",
|
||||
@@ -643,7 +643,7 @@
|
||||
"select_a_customer": "選擇客戶",
|
||||
"expense_title": "標題",
|
||||
"customer": "客戶",
|
||||
"currency": "Currency",
|
||||
"currency": "主要貨幣",
|
||||
"contact": "聯絡",
|
||||
"category": "分類",
|
||||
"from_date": "啟始日",
|
||||
@@ -852,7 +852,8 @@
|
||||
"payment_modes": "付款方式",
|
||||
"notes": "備註",
|
||||
"exchange_rate": "Exchange Rate",
|
||||
"address_information": "Address Information"
|
||||
"address_information": "Address Information",
|
||||
"pdf_generation": "PDF Generation"
|
||||
},
|
||||
"address_information": {
|
||||
"section_description": " You can update Your Address information using form below."
|
||||
@@ -893,6 +894,7 @@
|
||||
"mailgun_endpoint": "Mailgun \bendpoint",
|
||||
"ses_secret": "SES 金鑰",
|
||||
"ses_key": "SES 匙",
|
||||
"ses_region": "AWS Region",
|
||||
"password": "郵件密碼",
|
||||
"username": "郵件登入名稱",
|
||||
"mail_config": "郵件設定",
|
||||
@@ -904,7 +906,15 @@
|
||||
"pdf": {
|
||||
"title": "PDF設定",
|
||||
"footer_text": "頁尾文字",
|
||||
"pdf_layout": "PDF \b佈局"
|
||||
"pdf_layout": "PDF \b佈局",
|
||||
"pdf_configuration": "PDF Generation Settings",
|
||||
"section_description": "Change the way PDFs are generated",
|
||||
"driver": "PDF Driver to use",
|
||||
"papersize": "Papersize",
|
||||
"papersize_hint": "Papersize in width and height (ex. \"210mm 297mm\")",
|
||||
"gotenberg_host": "Gotenberg service host",
|
||||
"pdf_variables_save_successfully": "PDF configuration saved successfully",
|
||||
"pdf_variables_save_error": "PDF configuration could not be saved"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "公司資訊",
|
||||
@@ -1087,6 +1097,8 @@
|
||||
"description": "保存備註可在發票, 報價和付款上重覆使用.",
|
||||
"notes": "備註",
|
||||
"type": "類型",
|
||||
"is_default": "Select by default",
|
||||
"is_default_description": "This note will be selected by default in new invoices.",
|
||||
"add_note": "加入備註",
|
||||
"add_new_note": "新增備註",
|
||||
"name": "名稱",
|
||||
@@ -1203,7 +1215,7 @@
|
||||
"already_in_use": "此稅項已在使用"
|
||||
},
|
||||
"payment_modes": {
|
||||
"title": "Payment Modes",
|
||||
"title": "付款方式",
|
||||
"description": "Modes of transaction for payments",
|
||||
"add_payment_mode": "Add Payment Mode",
|
||||
"edit_payment_mode": "Edit Payment Mode",
|
||||
@@ -1236,7 +1248,7 @@
|
||||
"time_zone": "時區",
|
||||
"fiscal_year": "財政年度",
|
||||
"date_format": "日期格式",
|
||||
"time_format": "Time Fromat",
|
||||
"time_format": "Time Format",
|
||||
"discount_setting": "折扣設定",
|
||||
"discount_per_item": "商品折扣",
|
||||
"discount_setting_description": "啟用此項, 如果你要將折扣以每個獨立商品計算. 預設折扣以整單發票計算.",
|
||||
@@ -1588,7 +1600,7 @@
|
||||
"pdf_invoice_label": "發票",
|
||||
"pdf_invoice_number": "發票號碼",
|
||||
"pdf_invoice_date": "發票日期",
|
||||
"pdf_invoice_due_date": "截止日期",
|
||||
"pdf_invoice_due_date": "Due Date",
|
||||
"pdf_notes": "備註",
|
||||
"pdf_items_label": "商品",
|
||||
"pdf_quantity_label": "數量",
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@headlessui/vue": "^1.7.23",
|
||||
"@heroicons/vue": "^1.0.6",
|
||||
"@heroicons/vue": "^2.2.0",
|
||||
"@popperjs/core": "^2.11.8",
|
||||
"@stripe/stripe-js": "^2.4.0",
|
||||
"@tiptap/core": "^2.11.2",
|
||||
@@ -41,7 +41,7 @@
|
||||
"@vuelidate/core": "^2.0.3",
|
||||
"@vuelidate/validators": "^2.0.4",
|
||||
"@vueuse/core": "^12.4.0",
|
||||
"axios": "0.29.0",
|
||||
"axios": "0.30.0",
|
||||
"chart.js": "^2.9.4",
|
||||
"guid": "^0.0.12",
|
||||
"laravel-vite-plugin": "^1.1.1",
|
||||
@@ -60,4 +60,4 @@
|
||||
"vue-router": "^4.5.0",
|
||||
"vuedraggable": "^4.1.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,3 +3,6 @@
|
||||
|
||||
<BaseDialog />
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import BaseDialog from '@/scripts/components/base/BaseDialog.vue'
|
||||
</script>
|
||||
|
||||
3
resources/scripts/InvoiceShelf.js
vendored
3
resources/scripts/InvoiceShelf.js
vendored
@@ -3,7 +3,6 @@ import App from '@/scripts/App.vue'
|
||||
import { createI18n } from 'vue-i18n'
|
||||
import messages from '/lang/locales'
|
||||
import router from '@/scripts/router/index'
|
||||
import { defineGlobalComponents } from './global-components'
|
||||
import utils from '@/scripts/helpers/utilities.js'
|
||||
import _ from 'lodash'
|
||||
import { VTooltip } from 'v-tooltip'
|
||||
@@ -33,8 +32,6 @@ export default class InvoiceShelf {
|
||||
start() {
|
||||
this.executeCallbacks()
|
||||
|
||||
defineGlobalComponents(app)
|
||||
|
||||
app.provide('$utils', utils)
|
||||
|
||||
const i18n = createI18n({
|
||||
|
||||
8
resources/scripts/admin/admin-router.js
vendored
8
resources/scripts/admin/admin-router.js
vendored
@@ -56,6 +56,8 @@ const UpdateApp = () =>
|
||||
import('@/scripts/admin/views/settings/UpdateAppSetting.vue')
|
||||
const RolesSettings = () =>
|
||||
import('@/scripts/admin/views/settings/RolesSettings.vue')
|
||||
const PDFGenerationSettings = () =>
|
||||
import('@/scripts/admin/views/settings/PDFGenerationSetting.vue')
|
||||
|
||||
// Items
|
||||
const ItemsIndex = () => import('@/scripts/admin/views/items/Index.vue')
|
||||
@@ -327,6 +329,12 @@ export default [
|
||||
meta: { isOwner: true },
|
||||
component: UpdateApp,
|
||||
},
|
||||
{
|
||||
path: 'pdf-generation',
|
||||
name: 'pdf.generation',
|
||||
meta: { isOwner: true },
|
||||
component: PDFGenerationSettings,
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
|
||||
@@ -152,6 +152,8 @@ import { useModalStore } from '@/scripts/stores/modal'
|
||||
import NoteModal from '@/scripts/admin/components/modal-components/NoteModal.vue'
|
||||
import { useUserStore } from '@/scripts/admin/stores/user'
|
||||
import abilities from '@/scripts/admin/stub/abilities'
|
||||
import BaseIcon from '@/scripts/components/base/BaseIcon.vue'
|
||||
import BaseInput from '@/scripts/components/base/BaseInput.vue'
|
||||
|
||||
const props = defineProps({
|
||||
type: {
|
||||
|
||||
@@ -79,6 +79,10 @@ import { useI18n } from 'vue-i18n'
|
||||
import useVuelidate from '@vuelidate/core'
|
||||
import { required, helpers, numeric, decimal } from '@vuelidate/validators'
|
||||
import { ValidateEach } from '@vuelidate/components'
|
||||
import BaseButton from '@/scripts/components/base/BaseButton.vue'
|
||||
import BaseInput from '@/scripts/components/base/BaseInput.vue'
|
||||
import BaseInputGroup from '@/scripts/components/base/BaseInputGroup.vue'
|
||||
import BaseCard from '@/scripts/components/base/BaseCard.vue'
|
||||
|
||||
const exchangeRateStore = useExchangeRateStore()
|
||||
const notificationStore = useNotificationStore()
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user