34 Commits

Author SHA1 Message Date
Darko Gjorgjijoski
697c1af065 Move base-select into base 2025-08-28 12:02:39 +02:00
Darko Gjorgjijoski
70bfe1b688 Merge remote-tracking branch 'origin/master' into frontend-performance-improvements 2025-08-28 11:13:45 +02:00
Fabio Ribeiro
d69a56e2d5 feat: Tax included (#370)
* feat: Tax included

* Added a toggle switch in tax settings to enable the feature.
* Database migration adding tax_included field into estimates, invoices
  and recurring invoices table.
* Toggle switch to enable and store the tax_included by estimates,
  invoices and recurring invoices.
* In case of tax included enabled, total taxes will be recalculated and
  the invoices, estimates and recurring invoices total won't be sum with
  taxes.
* Apply tax included when discount_per_item/tax_per_item item is enabled.
* Custom component to show the net total when tax included is enabled.
* Update invoice and estimates pdfs with net total.

* chore: Tax included by default

A switch button inside the tax settings to enable the tax included by
default in invoices, estimates and recurring invoices.
2025-08-28 10:28:24 +02:00
Darko Gjorgjijoski
08e1bb2e22 Exclude .git directory from backups (#445)
* Exclude .git directory from backups

* Fix formatting
2025-08-28 10:02:06 +02:00
Darko Gjorgjijoski
29c15116bc Fix Adminer docker build (#444) 2025-08-28 10:01:50 +02:00
Loduis Madariaga Barrios
8e96d3e972 fix(csrf-token): add leading dot to session domain cookie. (#224)
* fix(csrf-token): add leading dot to session domain cookie.

* refactor: remove generate key, upgrade axios and keep session domain in null.

* refactor: fix PSR-12 code styles for PHP 8.2 compatibility.

---------

Co-authored-by: Darko Gjorgjijoski <5760249+gdarko@users.noreply.github.com>
2025-08-28 09:44:34 +02:00
Fabio Ribeiro
bf0d98c69c fix: Backup Job (#375)
Since `laravel-backup` major version was updated 8 to 9, the backup
ability was compromised, the main reason is the change on the method
contract from `BackupFactory` that now the `createFromArray` no longer
exists.
2025-06-11 23:23:19 +02:00
Fabio Ribeiro
73d4ac1eb1 fix: Payment confirmation error (#376)
Error caused when using Payments module, when try Stripe redirects back
to InvoiceShelf, and the module calls the InvoiceShelf `generatePayment`.

Relates #369
2025-06-11 22:56:56 +02:00
Leo
e832c7661a Fix: Heroicons v1 leftovers (#374)
Change the getOrderBy's button. 
Using Heroicons v2

Change the SortAscendingIcon to BarsArrowUpIcon
Change the SortDescendingIcon to BarsArrowDownIcon
2025-06-11 22:48:01 +02:00
Fabio Ribeiro
b962bc9227 fix: Create item with tax (#377)
When the `tax-per-item` is enabled and also has a tax added, during the
item creation, the price + tax returns an amount as float making the
database fail. To fix this was necessary to round the result.
2025-05-22 10:48:34 +02:00
Darko Gjorgjijoski
d70c04b841 Merge branch 'master' into frontend-performance-improvements 2025-05-05 02:24:27 +02:00
mchev
6d14dce668 Improving github workflow (#278)
* Improving workflow, updating dependencies and test pint with PHP 8.3, adding php 8.4 on tests

* Fix cache issue

* Not caching since it is not working
2025-05-04 15:22:43 +02:00
mchev
1ff220f0d8 Upgrading to Laravel 12 (#346)
* Upgrading to Laravel 12

* Upgrade lockfile

* Keep the old local filesystem driver base path

---------

Co-authored-by: Darko Gjorgjijoski <5760249+gdarko@users.noreply.github.com>
Co-authored-by: Darko Gjorgjijoski <dg@darkog.com>
2025-05-04 11:04:01 +02:00
Darko Gjorgjijoski
2e77a76c7b New Crowdin updates (#345)
* New translations en.json (Portuguese, Brazilian)

* Update source file en.json

* New translations en.json (Czech)

* New translations en.json (Indonesian)

* New translations en.json (Lithuanian)

* New translations en.json (Portuguese, Brazilian)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Bulgarian)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Macedonian)

* New translations en.json (Dutch)

* New translations en.json (Polish)

* New translations en.json (Russian)

* New translations en.json (Slovak)

* New translations en.json (Slovenian)

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Traditional)

* New translations en.json (Vietnamese)

* New translations en.json (Persian)

* New translations en.json (Thai)

* New translations en.json (Croatian)

* New translations en.json (Latvian)

* New translations en.json (Hindi)

* New translations en.json (Serbian (Latin))

* New translations en.json (Serbian (Latin))

* New translations en.json (Ukrainian)

* New translations en.json (Ukrainian)

* New translations en.json (Ukrainian)

* New translations en.json (Ukrainian)

* New translations en.json (Ukrainian)

* New translations en.json (Ukrainian)

* New translations en.json (Portuguese, Brazilian)

* New translations en.json (Portuguese, Brazilian)

* New translations en.json (Turkish)

* New translations en.json (Romanian)

* New translations en.json (Indonesian)

* New translations en.json (Russian)

* New translations en.json (Turkish)

* New translations en.json (Romanian)

* New translations en.json (Indonesian)

* New translations en.json (Russian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Bulgarian)

* New translations en.json (Czech)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Lithuanian)

* New translations en.json (Macedonian)

* New translations en.json (Dutch)

* New translations en.json (Polish)

* New translations en.json (Slovak)

* New translations en.json (Slovenian)

* New translations en.json (Swedish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Traditional)

* New translations en.json (Vietnamese)

* New translations en.json (Portuguese, Brazilian)

* New translations en.json (Persian)

* New translations en.json (Thai)

* New translations en.json (Croatian)

* New translations en.json (Latvian)

* New translations en.json (Hindi)

* New translations en.json (Serbian (Latin))

* Update source file en.json

* New translations en.json (Turkish)

* New translations en.json (Romanian)

* New translations en.json (Indonesian)

* New translations en.json (Russian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Bulgarian)

* New translations en.json (Czech)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Lithuanian)

* New translations en.json (Macedonian)

* New translations en.json (Dutch)

* New translations en.json (Polish)

* New translations en.json (Slovak)

* New translations en.json (Slovenian)

* New translations en.json (Swedish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Traditional)

* New translations en.json (Vietnamese)

* New translations en.json (Portuguese, Brazilian)

* New translations en.json (Persian)

* New translations en.json (Thai)

* New translations en.json (Croatian)

* New translations en.json (Latvian)

* New translations en.json (Hindi)

* New translations en.json (Serbian (Latin))
2025-05-04 02:50:56 +02:00
mchev
bf5b544ca3 Adding Flat Tax support with fixed amount (#253)
* Possibility to set a fixed amount on tax types settings

* Pint and manage flat taxes on items

* Fix display errors and handle global taxes

* Tests

* Pint with PHP 8.2 cause with PHP 8.3 version it cause workflow error

* Merging percent and fixed amount into one column

* Now display the currency on SelectTaxPopup on fixed taxes
2025-05-04 02:24:56 +02:00
Darko Gjorgjijoski
546f75d3a6 Pint updated files (#367) 2025-05-04 02:23:51 +02:00
Tim van Osch
bf40f792c2 Feat(Gotenberg): Opt-in alternative pdf generation for modern CSS (#184)
* WIP(gotenberg): add pdf generation abstraction and UI

* feat(pdf): settings validate(clien+server) & save

* fix(gotenberg): Use correct default papersize
chore(gotengberg): Remove unused GOTENBERG_MARGINS env from .env

* style(gotenberg): fix linter/styling issues

* fix(pdf): use pdf config policy

* fix: revert accidental capitalization in mail config vue

* Update composer, remove whitespace typo

* Fix small typos

* fix cookie/env issue

* Add gotenberg to .dev, move admin menu item up
2025-05-04 02:10:15 +02:00
Fabio Ribeiro
8a9392e400 Fix: AWS SES Mailer (#365)
As reported on issue #357, the aws ses configuration was not able to
store because of the missing `ses` service config. Additionally was
added a `AWS Region` field to be used by the `ses`.

closes #357
2025-05-02 11:16:31 +02:00
mchev
14bfaff30b Fix security alert on axios 0.29 (#347) 2025-05-02 10:49:16 +02:00
Yannic Inselmann
b32c334a71 feat: default notes (#263)
* feat: default notes

* feat: include default invoice note in recurring invoice

* feat: use default export in tw config

* fix: test and naming

* fix: consistent ui for switch in note modal

* feat: little text improvements
2025-04-05 12:01:06 +02:00
mchev
2aa17513e1 Check version number on version.md file (#280) 2025-04-05 10:16:23 +02:00
mchev
ba243b28a9 Upgrade to Heroicons v2 (#281) 2025-04-05 02:11:12 +02:00
mchev
1bb65f420c Fix negative values on item price (#335)
* Fix negative values on item price

* Remove console log
2025-04-05 00:43:34 +02:00
Darko Gjorgjijoski
23a99758d2 New Crowdin updates (#308)
* New translations en.json (Chinese Traditional)

* New translations en.json (Czech)

* New translations en.json (Slovak)

* New translations en.json (Czech)

* New translations en.json (Czech)

* New translations en.json (French)

* New translations en.json (Czech)

* New translations en.json (Romanian)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Bulgarian)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Indonesian)

* New translations en.json (Chinese Traditional)

* New translations en.json (Slovak)

* New translations en.json (Finnish)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Lithuanian)

* New translations en.json (Macedonian)

* New translations en.json (Dutch)

* New translations en.json (Polish)

* New translations en.json (Russian)

* New translations en.json (Slovenian)

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Vietnamese)

* New translations en.json (Portuguese, Brazilian)

* New translations en.json (Persian)

* New translations en.json (Thai)

* New translations en.json (Croatian)

* New translations en.json (Latvian)

* New translations en.json (Hindi)

* New translations en.json (Serbian (Latin))

* Update source file en.json

* New translations en.json (Spanish)

* New translations en.json (Japanese)

* New translations en.json (Polish)

* New translations en.json (Romanian)

* New translations en.json (Chinese Traditional)

* New translations en.json (Chinese Traditional)

* New translations en.json (Macedonian)

* New translations en.json (Indonesian)

* New translations en.json (Russian)

* New translations en.json (Russian)

* New translations en.json (Portuguese, Brazilian)

* New translations en.json (Russian)

* New translations en.json (Portuguese, Brazilian)

* New translations en.json (Russian)

* New translations en.json (Russian)

* New translations en.json (Swedish)

* New translations en.json (Arabic)

* New translations en.json (Czech)

* New translations en.json (Indonesian)

* New translations en.json (Indonesian)

* New translations en.json (Lithuanian)

* New translations en.json (Portuguese, Brazilian)

* New translations en.json (Czech)

* New translations en.json (Indonesian)

* New translations en.json (Lithuanian)

* New translations en.json (Portuguese, Brazilian)

* New translations en.json (Romanian)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Arabic)

* New translations en.json (Bulgarian)

* New translations en.json (German)

* New translations en.json (Greek)

* New translations en.json (Finnish)

* New translations en.json (Italian)

* New translations en.json (Japanese)

* New translations en.json (Macedonian)

* New translations en.json (Dutch)

* New translations en.json (Polish)

* New translations en.json (Russian)

* New translations en.json (Slovak)

* New translations en.json (Slovenian)

* New translations en.json (Swedish)

* New translations en.json (Turkish)

* New translations en.json (Ukrainian)

* New translations en.json (Chinese Traditional)

* New translations en.json (Vietnamese)

* New translations en.json (Persian)

* New translations en.json (Thai)

* New translations en.json (Croatian)

* New translations en.json (Latvian)

* New translations en.json (Hindi)

* New translations en.json (Serbian (Latin))

* Update source file en.json

* New translations en.json (Spanish)
2025-04-05 00:42:24 +02:00
Rihards Simanovičs
139f8e2d13 Update Github issuepr templates (#341)
* chore(github): update bug report template

* chore(github): update feature request template

* chore(github): update code quality template

* chore(github): update issue selection menu config

* chore(github): update PR template

* chore(github): update PR template typo

* chore(github): remove one checklist item from PR template

* chore(github): update bug report to add a Docker check

* chore(github): update template formatting and links

* chore(github): final spell and grammar check of all issues and PR templates
2025-04-04 11:57:07 +02:00
Vid Čufar
ac1a582ecf fix: capitalise 'date' in PDF invoice due date label (#320) 2025-04-04 11:42:24 +02:00
mchev
6b168f36ec [HOTFIX] Customers names on table list issue #210 (#310)
* Fix customer dropdown

* Fix #250
2025-02-17 12:11:10 +01:00
Rihards Simanovičs
50b647e26e Merge pull request #318 from Pureball/translation
fix: en translation spelling
2025-02-17 10:45:46 +00:00
Pureball
57776b7c7d fix: en translation spelling 2025-02-17 10:40:38 +01:00
Darko Gjorgjijoski
8c343b4b92 New Crowdin updates (#304)
* New translations en.json (Spanish)

* New translations en.json (French)

* New translations en.json (Indonesian)

* New translations en.json (Indonesian)
2025-02-05 11:10:06 +01:00
Darko Gjorgjijoski
a60cac3e66 Update version.md 2025-02-05 11:04:44 +01:00
mchev
6a0d3a3bcc Fix customer dropdown (#307) 2025-02-05 11:04:17 +01:00
Darko Gjorgjijoski
8b49332453 Remove unused imports 2025-01-12 18:10:04 +01:00
Darko Gjorgjijoski
8160b53689 Ditch global components 2025-01-12 17:53:44 +01:00
360 changed files with 7629 additions and 4144 deletions

View File

@@ -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" ]

View File

@@ -63,6 +63,11 @@ services:
networks:
- invoiceshelf-dev
pdf:
image: gotenberg/gotenberg:8
networks:
- invoiceshelf-dev
networks:
invoiceshelf-dev:

View File

@@ -62,6 +62,11 @@ services:
networks:
- invoiceshelf-dev
pdf:
image: gotenberg/gotenberg:8
networks:
- invoiceshelf-dev
networks:
invoiceshelf-dev:

View File

@@ -50,5 +50,10 @@ services:
networks:
- invoiceshelf-dev
pdf:
image: gotenberg/gotenberg:8
networks:
- invoiceshelf-dev
networks:
invoiceshelf-dev:

View File

@@ -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=

View File

View File

@@ -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

View File

@@ -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

View File

@@ -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.

View File

@@ -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

View 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 #

View File

@@ -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

View File

@@ -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
View 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';
}
}

View File

@@ -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)) {

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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);
}
}

View File

@@ -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);
}

View File

@@ -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');

View File

@@ -33,6 +33,9 @@ class NotesRequest extends FormRequest
'notes' => [
'required',
],
'is_default' => [
'required',
],
];
if ($this->isMethod('PUT')) {

View 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');
}
}

View File

@@ -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',

View File

@@ -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,

View File

@@ -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,

View File

@@ -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);
}),

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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();
}

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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;

View File

@@ -21,6 +21,7 @@ class Tax extends Model
return [
'amount' => 'integer',
'percent' => 'float',
'fixed_amount' => 'integer',
];
}

View File

@@ -19,6 +19,7 @@ class TaxType extends Model
{
return [
'percent' => 'float',
'fixed_amount' => 'integer',
'compound_tax' => 'boolean',
];
}

View File

@@ -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()) {

View File

@@ -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']);

View 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,
];
}

View 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);
}
}

View 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);
}
}

View File

@@ -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,
];
}
}

View File

@@ -5,4 +5,5 @@ return [
App\Providers\RouteServiceProvider::class,
App\Providers\DropboxServiceProvider::class,
App\Providers\ViewServiceProvider::class,
App\Providers\PDFServiceProvider::class,
];

View File

@@ -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

File diff suppressed because it is too large Load Diff

View File

@@ -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,
],
];

View File

@@ -60,6 +60,13 @@ return [
'driver' => 'local',
'root' => storage_path('app/templates/pdf'),
],
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
'throw' => false,
'report' => false,
],
],
];

View File

@@ -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
View 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' => [],
];

View File

@@ -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,
],
];

View File

@@ -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'),
],
];

View File

@@ -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),

View File

@@ -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,

View File

@@ -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(),
];
}
}

View File

@@ -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(),

View File

@@ -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,

View File

@@ -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();
});
}
};

View File

@@ -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');
});
}
};

View File

@@ -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();
});
}
};

View File

@@ -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');
});
}
};

View File

@@ -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');
});
}
};

View File

@@ -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');
});
}
};

View File

@@ -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": "الكمية",

View 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",

View File

@@ -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.",

View File

@@ -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",

View File

@@ -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": "Ποσότητα",

View File

@@ -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",

View File

@@ -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",

View 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",

View File

@@ -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ä",

View File

@@ -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.",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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:"
}

View File

@@ -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à",

View File

@@ -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": "数量",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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"
}

File diff suppressed because it is too large Load Diff

View File

@@ -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",

File diff suppressed because it is too large Load Diff

View File

@@ -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",

View 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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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": "หน่วย",

View File

@@ -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",

File diff suppressed because it is too large Load Diff

View File

@@ -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",

View File

@@ -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": "數量",

View File

@@ -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"
}
}
}

View File

@@ -3,3 +3,6 @@
<BaseDialog />
</template>
<script setup lang="ts">
import BaseDialog from '@/scripts/components/base/BaseDialog.vue'
</script>

View File

@@ -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({

View File

@@ -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,
},
],
},

View File

@@ -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: {

View File

@@ -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