Compare commits

..

2 Commits

Author SHA1 Message Date
objecttothis
afce945312 Correct Migration
- Programmatically delete an index which requires all constraints to be dropped.
- Removed unneeded blank line in Item model.

Signed-off-by: objecttothis <objecttothis@gmail.com>
2025-03-28 12:16:18 +04:00
objecttothis
84304cad04 Use custom rule to account for all locales
Signed-off-by: objecttothis <objecttothis@gmail.com>
2024-11-12 14:24:38 +04:00
78 changed files with 5805 additions and 2712 deletions

View File

@@ -1,22 +0,0 @@
name: "Delete Unstable Release"
on:
push:
branches:
- master
jobs:
delete_unstable_release:
runs-on: ubuntu-latest
steps:
- name: "Delete last unstable release"
uses: sgpublic/delete-release-action@v1.2
env:
GITHUB_TOKEN: ${{ secrets.TOKEN }}
with:
release-drop: false
release-drop-tag: false
pre-release-drop: true
pre-release-keep-count: -1
pre-release-drop-tag: true

View File

@@ -1,30 +0,0 @@
name: PHP Linting
on: push
jobs:
phplint:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: PHP Lint 8.0
uses: dbfx/github-phplint/8.0@master
with:
folder-to-exclude: "! -path \"./vendor/*\" ! -path \"./folder/excluded/*\""
- name: PHP Lint 8.1
uses: dbfx/github-phplint/8.1@master
with:
folder-to-exclude: "! -path \"./vendor/*\" ! -path \"./folder/excluded/*\""
- name: PHP Lint 8.2
uses: dbfx/github-phplint/8.2@master
with:
folder-to-exclude: "! -path \"./vendor/*\" ! -path \"./folder/excluded/*\""
- name: PHP Lint 8.3
uses: dbfx/github-phplint/8.3@master
with:
folder-to-exclude: "! -path \"./vendor/*\" ! -path \"./folder/excluded/*\""

View File

@@ -2,7 +2,6 @@ sudo: required
branches:
except:
- unstable
- weblate
services:
- docker
@@ -18,7 +17,6 @@ script:
- sed -i "s/commit_sha1 = 'dev'/commit_sha1 = '$rev'/g" app/Config/OSPOS.php
- echo "$version-$branch-$rev"
- npm version "$version-$branch-$rev" --force || true
- sed -i 's/opensourcepos.tar.gz/opensourcepos.$version.tgz/g' package.json
- npm ci && npm install -g gulp && npm run build
- docker build . --target ospos -t ospos
- docker build app/Database/ -t "jekkos/opensourcepos:sql-$TAG"
@@ -34,21 +32,16 @@ after_success:
- mv dist/opensourcepos.tar.gz "dist/opensourcepos.$version.$rev.tgz"
- mv dist/opensourcepos.zip "dist/opensourcepos.$version.$rev.zip"
deploy:
- provider: releases
- provider: npm
edge: true
file: dist/opensourcepos.$version.$rev.zip
name: "Unstable OpensourcePos"
overwrite: true
release_notes: "This is a build of the latest master which might contain bugs. Use at your own risk. Check releases section for the latest official release"
prerelease: true
tag_name: unstable
user: jekkos
src: dist/opensourcepos.$version.$rev.tgz
registry: https://npm.pkg.github.com
email: jeroen@steganos.dev
api_key:
secure: "KOukL8IFf/uL/BjMyCSKjf2vylydjcWqgEx0eMqFCg3nZ4ybMaOwPORRthIfyT72/FvGX/aoxxEn0uR/AEtb+hYQXHmNS+kZdX72JCe8LpGuZ7FJ5X+Eo9mhJcsmS+smd1sC95DySSc/GolKPo+0WtJYONY/xGCLxm+9Ay4HREg="
secure: "DNPJOrT51wdO0BAbkX2hKowdXYh7x8d43xvAw7eVfOslyBPiv6Bb/1QdC2Bpnlqe0WiJVS5hvBTMrJ+vSDK5i/l8jA+ZoI6ms1+P1DQ6sBBMBQI2fuvRCrJj+Fp3WnaduZb/N7R+FqdKQwD/ZORyhzJ4whtHkrO8uC7cY/wlacU="
on:
branch: master
all_branches: true
- provider: releases
edge: true
file: dist/opensourcepos.$version.$rev.zip
@@ -59,12 +52,8 @@ deploy:
user: jekkos
overwrite: true
api_key:
secure: "KOukL8IFf/uL/BjMyCSKjf2vylydjcWqgEx0eMqFCg3nZ4ybMaOwPORRthIfyT72/FvGX/aoxxEn0uR/AEtb+hYQXHmNS+kZdX72JCe8LpGuZ7FJ5X+Eo9mhJcsmS+smd1sC95DySSc/GolKPo+0WtJYONY/xGCLxm+9Ay4HREg="
secure: "DNPJOrT51wdO0BAbkX2hKowdXYh7x8d43xvAw7eVfOslyBPiv6Bb/1QdC2Bpnlqe0WiJVS5hvBTMrJ+vSDK5i/l8jA+ZoI6ms1+P1DQ6sBBMBQI2fuvRCrJj+Fp3WnaduZb/N7R+FqdKQwD/ZORyhzJ4whtHkrO8uC7cY/wlacU="
branches:
except:
- unstable
- /unstable.*/
on:
tags: true
branch: master

View File

@@ -1,98 +0,0 @@
Contributor Covenant Code of Conduct
Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, caste, color, religion, or sexual
identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the overall
community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or advances of
any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others private information, such as a physical or email address,
without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official email address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
[INSERT CONTACT METHOD].
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
1. Correction
Community Impact: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
Consequence: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
2. Warning
Community Impact: A violation through a single incident or series of
actions.
Consequence: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or permanent
ban.
3. Temporary Ban
Community Impact: A serious violation of community standards, including
sustained inappropriate behavior.
Consequence: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
4. Permanent Ban
Community Impact: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
Consequence: A permanent ban from any sort of public interaction within the
community.
Attribution
This Code of Conduct is adapted from the Contributor Covenant,
version 2.1, available at
https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.
Community Impact Guidelines were inspired by
Mozillas code of conduct enforcement ladder.
For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.

View File

@@ -1,6 +1,6 @@
## Server Requirements
- PHP version `7.4` is supported, PHP version `≤7.3` is NOT supported. Please note that PHP needs to have the extensions `php-gd`, `php-bcmath`, `php-intl`, `php-openssl`, `php-mbstring` , `php-curl` and `php-xml` installed and enabled. PHP version `8.x` is only supported by the code that is still under development in master branch. An unstable build can be downloaded in the releases section.
- PHP version `7.4` is supported, PHP version `≤7.3` is NOT supported. Please note that PHP needs to have the extensions `php-gd`, `php-bcmath`, `php-intl`, `php-openssl`, `php-mbstring` , `php-curl` and `php-xml` installed and enabled. PHP version `8.x` is only supported by the code that is still under development in master branch.
- MySQL `5.6` and `5.7` are supported, also MariaDB replacement `10.x` is supported and might offer better performance.
- Apache `2.4` is supported. Nginx should work fine too, see [wiki page here](https://github.com/opensourcepos/opensourcepos/wiki/Local-Deployment-using-LEMP).
- Raspberry PI based installations proved to work, see [wiki page here](<https://github.com/opensourcepos/opensourcepos/wiki/Installing-on-Raspberry-PI---Orange-PI-(Headless-OSPOS)>).

26
LICENSE
View File

@@ -1,30 +1,30 @@
MIT License
Copyright (c) 2013-2025 jekkos
Copyright (c) 2017-2025 objecttothis
Copyright (c) 2017-2024 Steve Ireland
Copyright (c) 2017-2025 odiea
Copyright (c) 2018-2024 WebShells
Copyright (c) 2021-2025 BudsieBuds
Copyright (c) 2013-2023 jekkos
Copyright (c) 2015-2023 FrancescoUK (aka daN4cat)
Copyright (c) 2015-2022 Aamir Shahzad (aka asakpke), RoshanTech, eSite.pk
Copyright (c) 2019-2020 Andriux1990
Copyright (c) 2018-2019 Erasto Marroquin (aka Erastus)
Copyright (c) 2017-2023 Steve Ireland
Copyright (c) 2017-2023 objecttothis
Copyright (c) 2017-2023 odiea
Copyright (c) 2017-2023 WebShells
Copyright (c) 2020-2021 Andriux1990
Copyright (c) 2021 BudsieBuds
Copyright (c) 2019 Loyd Jayme (aka loydjayme25)
Copyright (c) 2018 Erasto Marroquin (aka Erastus)
Copyright (c) 2018 Nathan Sas (aka nathanzky)
Copyright (c) 2018 Emilio Silva (aka emi-silva)
Copyright (c) 2016-2017 Ramkrishna Mondal (aka RamkrishnaMondal)
Copyright (c) 2016-2017 Jorge Colmenarez (aka jlctmaster), frontuari.com
Copyright (c) 2016-2017 Jesus Guerrero Botella (aka i92guboj)
Copyright (c) 2017 Jesus Guerrero Botella (aka i92guboj)
Copyright (c) 2017 Deep Shah (aka deepshah)
Copyright (c) 2017 Joshua Fernandez (aka joshua1234511)
Copyright (c) 2017 asadjaved63
Copyright (c) 2016-2017 Ramkrishna Mondal (aka RamkrishnaMondal)
Copyright (c) 2016-2017 Jorge Colmenarez (aka jlctmaster), frontuari.com
Copyright (c) 2016 Rinaldy@dbarber (aka rnld26)
Copyright (c) 2015-2022 Aamir Shahzad (aka asakpke), RoshanTech, eSite.pk
Copyright (c) 2015 Toni Haryanto (aka yllumi)
Copyright (c) 2012-2014 pappastech
Copyright (c) 2013 Rob Garrison
Copyright (c) 2013 Parq
Copyright (c) 2013 Ramel
Copyright (c) 2012-2014 pappastech
Copyright (c) 2012 Alain
Permission is hereby granted, free of charge, to any person obtaining a copy

View File

@@ -137,7 +137,7 @@ Any person or company found breaching the license agreement might find a bunch o
## 🙏 Credits
| <div align="center">DigitalOcean</div> | <div align="center">JetBrains</div> | <div align="center">Travis CI</div> |
| --- | --- | --- |
| <div align="center"><a href="https://www.digitalocean.com?utm_medium=opensource&utm_source=opensourcepos" target="_blank"><img src="https://github.com/user-attachments/assets/fbbf7433-ed35-407d-8946-fd03d236d350" alt="DigitalOcean Logo" height="50"></a></div> | <div align="center"><a href="https://www.jetbrains.com/idea/" target="_blank"><img src="https://github.com/opensourcepos/opensourcepos/assets/12870258/187f9bbe-4484-475c-9b58-5e5d5f931f09" alt="IntelliJ IDEA Logo" height="50"></a></div> | <div align="center"><a href="https://www.travis-ci.com/" target="_blank"><img src="https://github.com/opensourcepos/opensourcepos/assets/12870258/71cc2b44-83af-4510-a543-6358285f43c6" alt="Travis CI Logo" height="50"></a></div> |
| Many thanks to [DigitalOcean](https://www.digitalocean.com) for providing the project with hosting credits. | Many thanks to [JetBrains](https://www.jetbrains.com/) for providing a free license of [IntelliJ IDEA](https://www.jetbrains.com/idea/) to kindly support the development of OSPOS. | Many thanks to [Travis CI](https://www.travis-ci.com/) for providing a free continuous integration service for open source projects. |
| <div align="center">JetBrains</div> | <div align="center">Travis CI</div> |
|--- | --- |
| <div align="center"><a href="https://www.jetbrains.com/idea/" target="_blank"><img src="https://github.com/opensourcepos/opensourcepos/assets/12870258/187f9bbe-4484-475c-9b58-5e5d5f931f09" alt="IntelliJ IDEA Logo" height="50"></a></div> | <div align="center"><a href="https://www.travis-ci.com/" target="_blank"><img src="https://github.com/opensourcepos/opensourcepos/assets/12870258/71cc2b44-83af-4510-a543-6358285f43c6" alt="Travis CI Logo" height="50"></a></div> |
| Many thanks to [JetBrains](https://www.jetbrains.com/) for providing a free license of [IntelliJ IDEA](https://www.jetbrains.com/idea/) to kindly support the development of OSPOS. | Many thanks to [Travis CI](https://www.travis-ci.com/) for providing a free continuous integration service for open source projects. |

View File

@@ -109,7 +109,7 @@ class OSPOSRules
private function installation_check(): bool
{
$installed_extensions = implode(', ', get_loaded_extensions());
$required_extensions = ['bcmath', 'intl', 'gd', 'openssl', 'mbstring', 'curl', 'xml', 'json'];
$required_extensions = ['bcmath', 'intl', 'gd', 'openssl', 'mbstring', 'curl'];
$pattern = '/';
foreach($required_extensions as $extension)
@@ -140,6 +140,23 @@ class OSPOSRules
*/
public function decimal_locale(string $candidate, ?string &$error = null): bool
{
return parse_decimals($candidate) !== false;
$candidate = prepare_decimal($candidate);
$validation = Services::validation();
$validation->setRules([
'candidate' => 'decimal'
]);
$data = [
'candidate' => $candidate
];
if (!$validation->run($data))
{
$error = $validation->getErrors();
return false;
}
return true;
}
}

View File

@@ -228,16 +228,24 @@ class Cashups extends Secure_Controller
$close_date = $this->request->getPost('close_date');
$close_date_formatter = date_create_from_format($this->config['dateformat'] . ' ' . $this->config['timeformat'], $close_date);
$open_amount_cash = prepare_decimal($this->request->getPost('open_amount_cash'));
$transfer_amount_cash = prepare_decimal($this->request->getPost('transfer_amount_cash'));
$closed_amount_cash = prepare_decimal($this->request->getPost('closed_amount_cash'));
$closed_amount_due = prepare_decimal($this->request->getPost('closed_amount_due'));
$closed_amount_card = prepare_decimal($this->request->getPost('closed_amount_card'));
$closed_amount_check = prepare_decimal($this->request->getPost('closed_amount_check'));
$closed_amount_total = prepare_decimal($this->request->getPost('closed_amount_total'));
$cash_up_data = [
'open_date' => $open_date_formatter->format('Y-m-d H:i:s'),
'close_date' => $close_date_formatter->format('Y-m-d H:i:s'),
'open_amount_cash' => parse_decimals($this->request->getPost('open_amount_cash')),
'transfer_amount_cash' => parse_decimals($this->request->getPost('transfer_amount_cash')),
'closed_amount_cash' => parse_decimals($this->request->getPost('closed_amount_cash')),
'closed_amount_due' => parse_decimals($this->request->getPost('closed_amount_due')),
'closed_amount_card' => parse_decimals($this->request->getPost('closed_amount_card')),
'closed_amount_check' => parse_decimals($this->request->getPost('closed_amount_check')),
'closed_amount_total' => parse_decimals($this->request->getPost('closed_amount_total')),
'open_amount_cash' => parse_decimals(filter_var($open_amount_cash, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION)),
'transfer_amount_cash' => parse_decimals(filter_var($transfer_amount_cash, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION)),
'closed_amount_cash' => parse_decimals(filter_var($closed_amount_cash, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION)),
'closed_amount_due' => parse_decimals(filter_var($closed_amount_due, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION)),
'closed_amount_card' => parse_decimals(filter_var($closed_amount_card, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION)),
'closed_amount_check' => parse_decimals(filter_var($closed_amount_check, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION)),
'closed_amount_total' => parse_decimals(filter_var($closed_amount_total, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION)),
'note' => $this->request->getPost('note') != null,
'description' => $this->request->getPost('description', FILTER_SANITIZE_FULL_SPECIAL_CHARS),
'open_employee_id' => $this->request->getPost('open_employee_id', FILTER_SANITIZE_NUMBER_INT),
@@ -288,12 +296,19 @@ class Cashups extends Secure_Controller
*/
public function ajax_cashup_total(): void
{
$open_amount_cash = parse_decimals($this->request->getPost('open_amount_cash'));
$transfer_amount_cash = parse_decimals($this->request->getPost('transfer_amount_cash'));
$closed_amount_cash = parse_decimals($this->request->getPost('closed_amount_cash'));
$closed_amount_due = parse_decimals($this->request->getPost('closed_amount_due'));
$closed_amount_card = parse_decimals($this->request->getPost('closed_amount_card'));
$closed_amount_check = parse_decimals($this->request->getPost('closed_amount_check'));
$raw_open_amount_cash = $this->request->getPost('open_amount_cash');
$raw_transfer_amount_cash = $this->request->getPost('transfer_amount_cash');
$raw_closed_amount_cash = $this->request->getPost('closed_amount_cash');
$raw_closed_amount_due = $this->request->getPost('closed_amount_due');
$raw_closed_amount_card = $this->request->getPost('closed_amount_card');
$raw_closed_amount_check = $this->request->getPost('closed_amount_check');
$open_amount_cash = parse_decimals(filter_var(prepare_decimal($raw_open_amount_cash), FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
$transfer_amount_cash = parse_decimals(filter_var(prepare_decimal($raw_transfer_amount_cash), FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
$closed_amount_cash = parse_decimals(filter_var(prepare_decimal($raw_closed_amount_cash), FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
$closed_amount_due = parse_decimals(filter_var(prepare_decimal($raw_closed_amount_due), FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
$closed_amount_card = parse_decimals(filter_var(prepare_decimal($raw_closed_amount_card), FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
$closed_amount_check = parse_decimals(filter_var(prepare_decimal($raw_closed_amount_check), FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
$total = $this->_calculate_total($open_amount_cash, $transfer_amount_cash, $closed_amount_due, $closed_amount_cash, $closed_amount_card, $closed_amount_check); //TODO: hungarian notation

View File

@@ -82,7 +82,7 @@ class Config extends Secure_Controller
$license[$i]['title'] = 'Open Source Point Of Sale ' . config('App')->application_version;
if (file_exists('license/LICENSE')) {
$license[$i]['text'] = file_get_contents('license/LICENSE', false, null, 0, 3000);
$license[$i]['text'] = file_get_contents('license/LICENSE', false, null, 0, 2000);
} else {
$license[$i]['text'] = 'LICENSE file must be in OSPOS license directory. You are not allowed to use OSPOS application until the distribution copy of LICENSE file is present.';
}
@@ -139,13 +139,13 @@ class Config extends Secure_Controller
$license[$i]['text'] .= "$val3 ";
}
$license[$i]['text'] .= "\n";
$license[$i]['text'] .= '\n';
} else {
$license[$i]['text'] .= "$key2: $val2\n";
}
}
$license[$i]['text'] .= "\n";
$license[$i]['text'] .= '\n';
} else {
$license[$i]['text'] .= "$key1: $val1\n";
}
@@ -360,13 +360,16 @@ class Config extends Secure_Controller
*/
public function postSaveGeneral(): void
{
$default_sales_discount = prepare_decimal($this->request->getPost('default_sales_discount'));
$default_receivings_discount = prepare_decimal($this->request->getPost('default_receivings_discount'));
$batch_save_data = [
'theme' => $this->request->getPost('theme'),
'login_form' => $this->request->getPost('login_form'),
'default_sales_discount_type' => $this->request->getPost('default_sales_discount_type') != null,
'default_sales_discount' => parse_decimals($this->request->getPost('default_sales_discount')),
'default_sales_discount' => filter_var($default_sales_discount, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION),
'default_receivings_discount_type' => $this->request->getPost('default_receivings_discount_type') != null,
'default_receivings_discount' => parse_decimals($this->request->getPost('default_receivings_discount')),
'default_receivings_discount' => filter_var($default_receivings_discount, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION),
'enforce_privacy' => $this->request->getPost('enforce_privacy') != null,
'receiving_calculate_average_price' => $this->request->getPost('receiving_calculate_average_price') != null,
'lines_per_page' => $this->request->getPost('lines_per_page', FILTER_SANITIZE_NUMBER_INT),
@@ -769,8 +772,8 @@ class Config extends Secure_Controller
*/
public function postSaveTax(): void
{
$default_tax_1_rate = $this->request->getPost('default_tax_1_rate');
$default_tax_2_rate = $this->request->getPost('default_tax_2_rate');
$default_tax_1_rate = prepare_decimal($this->request->getPost('default_tax_1_rate'));
$default_tax_2_rate = prepare_decimal($this->request->getPost('default_tax_2_rate'));
$batch_save_data = [
'default_tax_1_rate' => parse_tax(filter_var($default_tax_1_rate, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION)),

View File

@@ -286,12 +286,14 @@ class Customers extends Persons
$date_formatter = date_create_from_format($this->config['dateformat'] . ' ' . $this->config['timeformat'], $this->request->getPost('date'));
$discount = prepare_decimal($this->request->getPost('discount'));
$customer_data = [
'consent' => $this->request->getPost('consent') != null,
'account_number' => $this->request->getPost('account_number') == '' ? null : $this->request->getPost('account_number'),
'tax_id' => $this->request->getPost('tax_id'),
'company_name' => $this->request->getPost('company_name') == '' ? null : $this->request->getPost('company_name'),
'discount' => $this->request->getPost('discount') == '' ? 0.00 : parse_decimals($this->request->getPost('discount')),
'discount' => $this->request->getPost('discount') == '' ? 0.00 : filter_var($discount, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION),
'discount_type' => $this->request->getPost('discount_type') == null ? PERCENT : $this->request->getPost('discount_type', FILTER_SANITIZE_NUMBER_INT),
'package_id' => $this->request->getPost('package_id') == '' ? null : $this->request->getPost('package_id'),
'taxable' => $this->request->getPost('taxable') != null,

View File

@@ -158,13 +158,15 @@ class Expenses extends Secure_Controller
$newdate = $this->request->getPost('date', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
$date_formatter = date_create_from_format($config['dateformat'] . ' ' . $config['timeformat'], $newdate);
$amount = prepare_decimal($this->request->getPost('amount'));
$tax_amount = prepare_decimal($this->request->getPost('tax_amount'));
$expense_data = [
'date' => $date_formatter->format('Y-m-d H:i:s'),
'supplier_id' => $this->request->getPost('supplier_id') == '' ? null : $this->request->getPost('supplier_id', FILTER_SANITIZE_NUMBER_INT),
'supplier_tax_code' => $this->request->getPost('supplier_tax_code', FILTER_SANITIZE_FULL_SPECIAL_CHARS),
'amount' => parse_decimals($this->request->getPost('amount')),
'tax_amount' => parse_decimals($this->request->getPost('tax_amount')),
'amount' => filter_var($amount, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION),
'tax_amount' => filter_var($tax_amount, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION),
'payment_type' => $this->request->getPost('payment_type', FILTER_SANITIZE_FULL_SPECIAL_CHARS),
'expense_category_id' => $this->request->getPost('expense_category_id', FILTER_SANITIZE_NUMBER_INT),
'description' => $this->request->getPost('description', FILTER_SANITIZE_FULL_SPECIAL_CHARS),

View File

@@ -120,16 +120,17 @@ class Giftcards extends Secure_Controller
public function postSave(int $giftcard_id = NEW_ENTRY): void
{
$giftcard_number = $this->request->getPost('giftcard_number', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
$giftcard_amount = prepare_decimal($this->request->getPost('giftcard_amount'));
if($giftcard_id == NEW_ENTRY && trim($giftcard_number) == '')
{
$giftcard_number = $this->giftcard->generate_unique_giftcard_name($giftcard_number);
$giftcard_number = $this->giftcard->generate_unique_giftcard_name(filter_var($giftcard_amount, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
}
$giftcard_data = [
'record_time' => date('Y-m-d H:i:s'),
'giftcard_number' => $giftcard_number,
'value' => parse_decimals($this->request->getPost('giftcard_amount')),
'value' => filter_var($giftcard_amount, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION),
'person_id' => $this->request->getPost('person_id') == '' ? null : $this->request->getPost('person_id', FILTER_SANITIZE_NUMBER_INT)
];

View File

@@ -169,11 +169,13 @@ class Item_kits extends Secure_Controller
*/
public function postSave(int $item_kit_id = NEW_ENTRY): void
{
$kit_discount = prepare_decimal($this->request->getPost('kit_discount'));
$item_kit_data = [
'name' => $this->request->getPost('name'),
'item_kit_number' => $this->request->getPost('item_kit_number'),
'item_id' => $this->request->getPost('kit_item_id') ? null : intval($this->request->getPost('kit_item_id')),
'kit_discount' => parse_decimals($this->request->getPost('kit_discount')),
'kit_discount' => filter_var($kit_discount,FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION),
'kit_discount_type' => $this->request->getPost('kit_discount_type') === null ? PERCENT : intval($this->request->getPost('kit_discount_type')),
'price_option' => $this->request->getPost('price_option') === null ? PRICE_ALL : intval($this->request->getPost('price_option')),
'print_option' => $this->request->getPost('print_option') === null ? PRINT_ALL : intval($this->request->getPost('print_option')),

View File

@@ -195,7 +195,7 @@ class Items extends Secure_Controller
*/
public function getSuggest(): void
{
$search = $this->request->getGet('term');
$search = $this->request->getPost('term');
$suggestions = $this->item->get_search_suggestions($search, ['search_custom' => false, 'is_deleted' => false], true);
echo json_encode($suggestions);
@@ -205,7 +205,7 @@ class Items extends Secure_Controller
* @return void
* @noinspection PhpUnused
*/
public function getSuggestLowSell(): void
public function suggest_low_sell(): void
{
$suggestions = $this->item->get_low_sell_suggestions($this->request->getPostGet('name'));
@@ -631,9 +631,9 @@ class Items extends Secure_Controller
$upload_data = $this->upload_image();
$upload_success = empty($upload_data['error']);
$raw_receiving_quantity = $this->request->getPost('receiving_quantity');
$raw_receiving_quantity = prepare_decimal($this->request->getPost('receiving_quantity'));
$receiving_quantity = parse_quantity($raw_receiving_quantity);
$receiving_quantity = parse_quantity(filter_var($raw_receiving_quantity, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
$item_type = $this->request->getPost('item_type') === null ? ITEM : intval($this->request->getPost('item_type'));
if($receiving_quantity === 0.0 && $item_type !== ITEM_TEMP)
@@ -643,10 +643,10 @@ class Items extends Secure_Controller
$default_pack_name = lang('Items.default_pack_name');
$cost_price = parse_decimals($this->request->getPost('cost_price'));
$unit_price = parse_decimals($this->request->getPost('unit_price'));
$reorder_level = parse_quantity($this->request->getPost('reorder_level'));
$qty_per_pack = parse_quantity($this->request->getPost('qty_per_pack') ?? '');
$cost_price = prepare_decimal($this->request->getPost('cost_price'));
$unit_price = prepare_decimal($this->request->getPost('unit_price'));
$reorder_level = prepare_decimal($this->request->getPost('reorder_level'));
$qty_per_pack = prepare_decimal($this->request->getPost('qty_per_pack') ?? '');
//Save item data
$item_data = [
@@ -657,13 +657,13 @@ class Items extends Secure_Controller
'stock_type' => $this->request->getPost('stock_type') === null ? HAS_STOCK : intval($this->request->getPost('stock_type')),
'supplier_id' => empty($this->request->getPost('supplier_id')) ? null : intval($this->request->getPost('supplier_id')),
'item_number' => empty($this->request->getPost('item_number')) ? null : $this->request->getPost('item_number'),
'cost_price' => $cost_price,
'unit_price' => $unit_price,
'reorder_level' => $reorder_level,
'cost_price' => parse_decimals(filter_var($cost_price, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION)),
'unit_price' => parse_decimals(filter_var($unit_price, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION)),
'reorder_level' => parse_quantity(filter_var($reorder_level, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION)),
'receiving_quantity' => $receiving_quantity,
'allow_alt_description' => $this->request->getPost('allow_alt_description') != null,
'is_serialized' => $this->request->getPost('is_serialized') != null,
'qty_per_pack' => $this->request->getPost('qty_per_pack') == null ? 1 : parse_quantity($qty_per_pack),
'qty_per_pack' => $this->request->getPost('qty_per_pack') == null ? 1 : parse_quantity(filter_var($qty_per_pack, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION)),
'pack_name' => $this->request->getPost('pack_name') == null ? $default_pack_name : $this->request->getPost('pack_name'),
'low_sell_item_id' => $this->request->getPost('low_sell_item_id') === null ? $item_id : intval($this->request->getPost('low_sell_item_id')),
'deleted' => $this->request->getPost('is_deleted') != null,
@@ -688,9 +688,9 @@ class Items extends Secure_Controller
$item_data['tax_category_id'] = empty($this->request->getPost('tax_category_id')) ? null : intval($this->request->getPost('tax_category_id'));
}
if (!empty($upload_data['orig_name']) && $upload_data['raw_name']) {
$item_data['pic_filename'] = $upload_data['raw_name'] . '.' . $upload_data['file_ext'];
}
$item_data['pic_filename'] = !empty($upload_data['orig_name']) && $upload_data['raw_name']
? $upload_data['raw_name'] . '.' . $upload_data['file_ext']
: null;
$employee_id = $this->employee->get_logged_in_employee_info()->person_id;
@@ -733,7 +733,8 @@ class Items extends Secure_Controller
$stock_locations = $this->stock_location->get_undeleted_all()->getResultArray();
foreach($stock_locations as $location)
{
$updated_quantity = parse_quantity($this->request->getPost('quantity_' . $location['location_id']));
$stock_quantity = prepare_decimal($this->request->getPost('quantity_' . $location['location_id']));
$updated_quantity = parse_quantity(filter_var($stock_quantity, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
if($item_data['item_type'] == ITEM_TEMP)
{
@@ -886,14 +887,14 @@ class Items extends Secure_Controller
$employee_id = $this->employee->get_logged_in_employee_info()->person_id;
$cur_item_info = $this->item->get_info($item_id);
$location_id = $this->request->getPost('stock_location');
$new_quantity = $this->request->getPost('newquantity');
$new_quantity = prepare_decimal($this->request->getPost('newquantity'));
$inv_data = [
'trans_date' => date('Y-m-d H:i:s'),
'trans_items' => $item_id,
'trans_user' => $employee_id,
'trans_location' => $location_id,
'trans_comment' => $this->request->getPost('trans_comment'),
'trans_inventory' => parse_quantity($new_quantity)
'trans_inventory' => parse_quantity(filter_var($new_quantity, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION))
];
$this->inventory->insert($inv_data, false);
@@ -1446,7 +1447,7 @@ class Items extends Secure_Controller
$attributeId = $attributeValue;
break;
case DECIMAL:
$attributeValue = parse_decimals($attributeValue);
$attributeValue = prepare_decimal($attributeValue);
//Fall through to save the attribute value
default:
$attributeId = $this->attribute->saveAttributeValue($attributeValue, $definitionId, $itemId, $attributeIds[$definitionId], $definitionType);

View File

@@ -35,7 +35,7 @@ abstract class Persons extends Secure_Controller
*/
public function getSuggest(): void
{
$search = $this->request->getGet('term');
$search = $this->request->getPost('term');
$suggestions = $this->person->get_search_suggestions($search);
echo json_encode($suggestions);

View File

@@ -206,21 +206,24 @@ class Receivings extends Secure_Controller
$data = [];
$validation_rule = [
'price' => 'trim|required|decimal_locale',
'quantity' => 'trim|required|decimal_locale',
'discount' => 'trim|permit_empty|decimal_locale',
'price' => 'trim|required|numeric',
'quantity' => 'trim|required|numeric',
'discount' => 'trim|required|numeric',
];
$price = parse_decimals($this->request->getPost('price'));
$quantity = parse_quantity($this->request->getPost('quantity'));
$raw_receiving_quantity = parse_quantity($this->request->getPost('receiving_quantity'));
$raw_price = prepare_decimal($this->request->getPost('price'));
$raw_quantity = prepare_decimal($this->request->getPost('quantity'));
$raw_discount = prepare_decimal($this->request->getPost('discount'));
$raw_receiving_quantity = prepare_decimal($this->request->getPost('receiving_quantity'));
$description = $this->request->getPost('description', FILTER_SANITIZE_FULL_SPECIAL_CHARS); //TODO: Duplicated code
$serialnumber = $this->request->getPost('serialnumber', FILTER_SANITIZE_FULL_SPECIAL_CHARS) ?? '';
$price = filter_var($raw_price, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
$quantity = filter_var($raw_quantity, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
$discount_type = $this->request->getPost('discount_type', FILTER_SANITIZE_NUMBER_INT);
$discount = $discount_type
? parse_quantity(filter_var($this->request->getPost('discount'), FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION))
: parse_decimals(filter_var($this->request->getPost('discount'), FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
? parse_quantity(filter_var($raw_discount, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION))
: parse_decimals(filter_var($raw_discount, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
$receiving_quantity = filter_var($raw_receiving_quantity, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
@@ -324,7 +327,7 @@ class Receivings extends Secure_Controller
*/
public function postComplete(): void
{
$amount_tendered = prepare_decimal($this->request->getPost('amount_tendered'));
$data = [];
$data['cart'] = $this->receiving_lib->get_cart();
@@ -338,7 +341,7 @@ class Receivings extends Secure_Controller
$data['stock_location'] = $this->receiving_lib->get_stock_source();
if($this->request->getPost('amount_tendered') != null)
{
$data['amount_tendered'] = parse_decimals($this->request->getPost('amount_tendered'));
$data['amount_tendered'] = filter_var($amount_tendered, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
$data['amount_change'] = to_currency($data['amount_tendered'] - $data['total']);
}
@@ -401,7 +404,7 @@ class Receivings extends Secure_Controller
$this->receiving_lib->add_item($item['item_id'], -$item['quantity'], $this->receiving_lib->get_stock_source(), $item['discount_type']);
}
$this->postComplete();
$this->complete();
}
else
{

View File

@@ -371,8 +371,8 @@ class Sales extends Secure_Controller
*/
public function postSetPriceWorkOrders(): void
{
$price_work_orders = parse_decimals($this->request->getPost('price_work_orders'));
$this->sale_lib->set_price_work_orders($price_work_orders);
$price_work_orders = prepare_decimal($this->request->getPost('price_work_orders'));
$this->sale_lib->set_price_work_orders(filter_var($price_work_orders, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
}
/**
@@ -420,8 +420,8 @@ class Sales extends Secure_Controller
if($payment_type === lang('Sales.giftcard'))
{
//In the case of giftcard payment the register input amount_tendered becomes the giftcard number
$amount_tendered = parse_decimals($this->request->getPost('amount_tendered'));
$giftcard_num = $amount_tendered;
$amount_tendered = prepare_decimal($this->request->getPost('amount_tendered'));
$giftcard_num = filter_var($amount_tendered, FILTER_SANITIZE_FULL_SPECIAL_CHARS, FILTER_FLAG_ALLOW_FRACTION);
$payments = $this->sale_lib->get_payments();
$payment_type = $payment_type . ':' . $giftcard_num;
@@ -485,7 +485,8 @@ class Sales extends Secure_Controller
{
$amount_due = $this->sale_lib->get_total();
$sales_total = $this->sale_lib->get_total(false);
$amount_tendered = parse_decimals($this->request->getPost('amount_tendered'));
$raw_amount_tendered = prepare_decimal($this->request->getPost('amount_tendered'));
$amount_tendered = filter_var($raw_amount_tendered, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
$this->sale_lib->add_payment($payment_type, $amount_tendered);
$cash_adjustment_amount = $amount_due - $sales_total;
if($cash_adjustment_amount <> 0)
@@ -496,7 +497,8 @@ class Sales extends Secure_Controller
}
else
{
$amount_tendered = parse_decimals($this->request->getPost('amount_tendered'));
$raw_amount_tendered = prepare_decimal($this->request->getPost('amount_tendered'));
$amount_tendered = filter_var($raw_amount_tendered, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
$this->sale_lib->add_payment($payment_type, $amount_tendered);
}
}
@@ -606,7 +608,7 @@ class Sales extends Secure_Controller
}
else
{
if($item_id_or_number_or_item_kit_or_receipt == '' || !$this->sale_lib->add_item($item_id_or_number_or_item_kit_or_receipt, $item_location, $quantity, $discount, $discount_type, PRICE_MODE_STANDARD, null, null, $price))
if(!$this->sale_lib->add_item($item_id_or_number_or_item_kit_or_receipt, $item_location, $quantity, $discount, $discount_type, PRICE_MODE_STANDARD, null, null, $price))
{
$data['error'] = lang('Sales.unable_to_add_item');
}
@@ -638,18 +640,23 @@ class Sales extends Secure_Controller
if($this->validate($rules))
{
$raw_price = prepare_decimal($this->request->getPost('price'));
$raw_quantity = prepare_decimal($this->request->getPost('quantity'));
$raw_discount = prepare_decimal($this->request->getPost('discount'));
$raw_discounted_total = prepare_decimal($this->request->getPost('discounted_total') ?? '');
$description = $this->request->getPost('description', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
$serialnumber = $this->request->getPost('serialnumber', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
$price = parse_decimals($this->request->getPost('price'));
$quantity = parse_decimals($this->request->getPost('quantity'));
$price = filter_var($raw_price, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
$quantity = filter_var($raw_quantity, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
$discount_type = $this->request->getPost('discount_type', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
$discount = $discount_type
? parse_quantity($this->request->getPost('discount'))
: parse_decimals($this->request->getPost('discount'));
? parse_quantity(filter_var($raw_discount, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION))
: parse_decimals(filter_var($raw_discount, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
$item_location = $this->request->getPost('location', FILTER_SANITIZE_NUMBER_INT);
$discounted_total = $this->request->getPost('discounted_total') != ''
? parse_decimals($this->request->getPost('discounted_total') ?? '')
? filter_var($raw_discounted_total, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION)
: null;
@@ -984,21 +991,21 @@ class Sales extends Secure_Controller
if(!empty($sale_data['customer_email']))
{
$to = $sale_data['customer_email'];
$number = array_key_exists($type."_number", $sale_data) ? $sale_data[$type."_number"] : "";
$number = $sale_data[$type."_number"];
$subject = lang('Sales.' . $type) . ' ' . $number;
$text = $this->config['invoice_email_message'];
$tokens = [
new Token_invoice_sequence($sale_data['invoice_number']),
new Token_invoice_count('POS ' . $sale_data['sale_id']),
new Token_customer((array)$sale_data)
new Token_customer((object)$sale_data)
];
$text = $this->token_lib->render($text, $tokens);
$sale_data['mimetype'] = mime_content_type(FCPATH . 'uploads/' . $this->config['company_logo']);
// generate email attachment: invoice in pdf format
$view = Services::renderer();
$html = $view->setData($sale_data)->render("sales/$type" . '_email', $sale_data);
$html = $view->render("sales/$type" . '_email', $sale_data);
// load pdf helper
helper (['dompdf', 'file']);
@@ -1040,7 +1047,7 @@ class Sales extends Secure_Controller
$subject = lang('Sales.receipt');
$view = Services::renderer();
$text = $view->setData($sale_data)->render('sales/receipt_email');
$text = $view->render('sales/receipt_email', $sale_data);
$result = $this->email_lib->sendEmail($to, $subject, $text);
@@ -1546,11 +1553,14 @@ class Sales extends Secure_Controller
$number_of_payments = $this->request->getPost('number_of_payments', FILTER_SANITIZE_NUMBER_INT);
for($i = 0; $i < $number_of_payments; ++$i)
{
$raw_payment_amount = prepare_decimal($this->request->getPost("payment_amount_$i"));
$raw_refund_amount = prepare_decimal($this->request->getPost("refund_amount_$i"));
$payment_id = $this->request->getPost("payment_id_$i", FILTER_SANITIZE_NUMBER_INT);
$payment_type = $this->request->getPost("payment_type_$i", FILTER_SANITIZE_FULL_SPECIAL_CHARS);
$payment_amount = parse_decimals($this->request->getPost("payment_amount_$i"));
$payment_amount = filter_var($raw_payment_amount , FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
$refund_type = $this->request->getPost("refund_type_$i", FILTER_SANITIZE_FULL_SPECIAL_CHARS);
$cash_refund = parse_decimals($this->request->getPost("refund_amount_$i"));
$cash_refund = filter_var($raw_refund_amount, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
$cash_adjustment = $payment_type == lang('Sales.cash_adjustment') ? CASH_ADJUSTMENT_TRUE : CASH_ADJUSTMENT_FALSE;
@@ -1584,7 +1594,7 @@ class Sales extends Secure_Controller
if($payment_type != PAYMENT_TYPE_UNASSIGNED && !empty($payment_amount_new))
{
$payment_amount = parse_decimals($payment_amount_new);
$payment_amount = filter_var(prepare_decimal($payment_amount_new), FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
$cash_refund = 0;
if($payment_type == lang('Sales.cash_adjustment'))
{

View File

@@ -94,7 +94,7 @@ class Secure_Controller extends BaseController
*/
public function getCheckNumeric(): void
{
foreach($this->request->getGet() as $value)
foreach($this->request->getGet(null, FILTER_SANITIZE_FULL_SPECIAL_CHARS) as $value)
{
if (parse_decimals($value) === false)
{

View File

@@ -402,8 +402,10 @@ class Taxes extends Secure_Controller
*/
public function postSave(int $tax_rate_id = NEW_ENTRY): void
{
$raw_tax_rate = prepare_decimal($this->request->getPost('tax_rate'));
$tax_category_id = $this->request->getPost('rate_tax_category_id', FILTER_SANITIZE_NUMBER_INT);
$tax_rate = parse_tax($this->request->getPost('tax_rate'));
$tax_rate = parse_tax(filter_var($raw_tax_rate, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
if ($tax_rate == 0) //TODO: Replace 0 with constant?
{
@@ -412,7 +414,7 @@ class Taxes extends Secure_Controller
$tax_rate_data = [
'rate_tax_code_id' => $this->request->getPost('rate_tax_code_id', FILTER_SANITIZE_NUMBER_INT),
'rate_tax_category_id' => $tax_category_id,
'rate_tax_category_id' => $this->request->getPost('rate_tax_category_id', FILTER_SANITIZE_NUMBER_INT),
'rate_jurisdiction_id' => $this->request->getPost('rate_jurisdiction_id', FILTER_SANITIZE_NUMBER_INT),
'tax_rate' => $tax_rate,
'tax_rounding_code' => $this->request->getPost('tax_rounding_code', FILTER_SANITIZE_NUMBER_INT)

View File

@@ -6,6 +6,9 @@ use CodeIgniter\Database\Migration;
use Config\Database;
class Migration_fix_keys_for_db_upgrade extends Migration {
private array $constraints;
/**
* Perform a migration step.
*/
@@ -60,10 +63,15 @@ class Migration_fix_keys_for_db_upgrade extends Migration {
if ( ! $result->getRowArray())
{
$this->delete_index($table, $index);
$constraintsDropped = $this->delete_index($table, $index);
$forge = Database::forge();
$forge->addPrimaryKey($table, '');
if($constraintsDropped)
{
$this->recreateConstraints($table, $index);
}
}
}
@@ -74,13 +82,81 @@ class Migration_fix_keys_for_db_upgrade extends Migration {
return $row_array && $row_array['COUNT(*)'] > 0;
}
private function delete_index(string $table, string $index): void
private function delete_index(string $table, string $index): bool
{
$constraintsDropped = false;
if ($this->index_exists($table, $index))
{
$constraintsDropped = $this->dropConstraints($table, $index);
$forge = Database::forge();
$forge->dropKey($table, $index, FALSE);
}
return $constraintsDropped;
}
/**
* Checks to see if a foreign key constraint exists and drops it if it does.
* @param string $table The table name to check for the constraint
* @param string $index The index name to check for the constraint
* @return void
*/
private function dropConstraints(string $table, string $index): bool
{
$sql = "SELECT
kcu.CONSTRAINT_NAME,
kcu.COLUMN_NAME,
kcu.TABLE_NAME,
kcu.REFERENCED_COLUMN_NAME,
kcu.REFERENCED_TABLE_NAME,
rc.UPDATE_RULE,
rc.DELETE_RULE
FROM information_schema.KEY_COLUMN_USAGE kcu
JOIN information_schema.REFERENTIAL_CONSTRAINTS rc
ON kcu.CONSTRAINT_NAME = rc.CONSTRAINT_NAME
WHERE kcu.TABLE_SCHEMA = DATABASE()
AND (kcu.REFERENCED_TABLE_NAME = '" . $this->db->getPrefix() . "$table'
AND kcu.REFERENCED_COLUMN_NAME = '$index'
OR kcu.TABLE_NAME = '" . $this->db->getPrefix() . "$table'
AND kcu.COLUMN_NAME = '$index')
";
$query = $this->db->query($sql);
$this->constraints = $query->getResult();
$constraintsDropped = false;
foreach($this->constraints as $constraint)
{
$constraintName = $constraint->CONSTRAINT_NAME;
$referencingTable = str_replace($this->db->getPrefix(), '', $constraint->TABLE_NAME);
$forge = Database::forge();
if($forge->dropForeignKey($referencingTable, $constraintName))
{
$constraintsDropped = true;
}
}
return $constraintsDropped;
}
/**
* Re-creates the missing foreign key constraint which needed to be dropped in order to add the Primary Key
* @return void
*/
private function recreateConstraints(): void
{
$forge = Database::forge();
foreach($this->constraints as $constraint)
{
$index = $constraint->COLUMN_NAME;
$table = str_replace($this->db->getPrefix(), '', $constraint->TABLE_NAME);
$referencedTable = $constraint->REFERENCED_TABLE_NAME;
$constraintName = $constraint->CONSTRAINT_NAME;
$onUpdate = $constraint->UPDATE_RULE;
$onDelete = $constraint->DELETE_RULE;
$forge->addForeignKey($index, $referencedTable, $index, $onUpdate, $onDelete, $constraintName);
$forge->processIndexes($table);
}
}
}

View File

@@ -485,6 +485,17 @@ function parse_decimals(string $number, int $decimals = null): mixed
return $number;
}
$locale_safe_number = prepare_decimal($number);
if ($locale_safe_number > MAX_PRECISION)
{
return false;
}
if($locale_safe_number > 1.e14)
{
return false;
}
$config = config(OSPOS::class)->settings;
@@ -492,10 +503,11 @@ function parse_decimals(string $number, int $decimals = null): mixed
if(!$decimals)
{
$decimals = intVal($config['currency_decimals']);
$fmt->setAttribute(NumberFormatter::FRACTION_DIGITS, $decimals);
$decimals = $config['currency_decimals'];
}
$fmt->setAttribute(NumberFormatter::FRACTION_DIGITS, $decimals);
if(empty($config['thousands_separator']))
{
$fmt->setTextAttribute(NumberFormatter::GROUPING_SEPARATOR_SYMBOL, '');
@@ -503,18 +515,7 @@ function parse_decimals(string $number, int $decimals = null): mixed
try
{
$locale_safe_number = $fmt->parse($number);
if (
$locale_safe_number === false
|| $locale_safe_number > MAX_PRECISION
|| $locale_safe_number > 1.e14
)
{
return false;
}
return (float) $locale_safe_number;
return $fmt->parse($number);
}
catch(Exception $e)
{
@@ -703,3 +704,23 @@ function decode_array(array $data): array
return $data;
}
/**
* Determines if the current locale uses a comma for decimal separator and reformats the decimal to use a period.
*
* @param string $decimal The decimal to reformat.
* @return string The reformatted decimal.
*/
function prepare_decimal(string $decimal): string
{
$config = config(OSPOS::class)->settings;
$fmt = new NumberFormatter($config['number_locale'], NumberFormatter::DECIMAL);
$decimal_separator = $fmt->getSymbol(NumberFormatter::DECIMAL_SEPARATOR_SYMBOL);
if($decimal_separator === ',' && str_contains($decimal, ','))
{
$decimal = str_replace('.', '', $decimal); //Remove thousands separator
$decimal = str_replace(',', '.', $decimal); //Replace decimal separator
}
return $decimal;
}

View File

@@ -84,10 +84,10 @@ function get_sales_manage_table_headers(): string
if($config['invoice_enable'])
{
$headers[] = ['invoice_number' => lang('Sales.invoice_number')];
$headers[] = ['invoice' => '', 'sortable' => false, 'escape' => false];
$headers[] = ['invoice' => '&nbsp', 'sortable' => false, 'escape' => false];
}
$headers[] = ['receipt' => '', 'sortable' => false, 'escape' => false];
$headers[] = ['receipt' => '&nbsp', 'sortable' => false, 'escape' => false];
return transform_headers($headers);
}
@@ -116,7 +116,7 @@ function get_sale_data_row(object $sale): array
{
$row['invoice_number'] = $sale->invoice_number;
$row['invoice'] = empty($sale->invoice_number)
? '-'
? ''
: anchor(
"$controller/invoice/$sale->sale_id",
'<span class="glyphicon glyphicon-list-alt"></span>',

View File

@@ -1,149 +1,148 @@
<?php
return [
'all' => "hamısı",
'authority' => "Səlahiyyət",
'canceled' => "Ləğv Edilmiş",
'categories' => "Kateqoriyalar",
'categories_summary_report' => "komentariyalar",
'category' => "Kategoriya",
'code_canceled' => "CNL",
'code_invoice' => "INV",
'code_pos' => "POS",
'code_quote' => "Q",
'code_return' => "RET",
'code_type' => "Növ",
'code_work_order' => "W/O",
'comments' => "bütün qiymət",
'commission' => "",
'complete' => "Tamamlanmış Satış və Geri Qaytarılanlar",
'completed_sales' => "Tamamlanmış Satışlar",
'confirm_delete' => "Seçdiyiniz giriş (lər) silmək istədiyinizə əminsinizmi?",
'confirm_restore' => "Seçilmiş giriş (lər) bərpa etmək istədiyinizə əminsinizmi?",
'cost' => "hesab",
'cost_price' => "müştəri",
'count' => "müştərilər",
'customer' => "müştərilərin hesabatı",
'customers' => "Müştərilər",
'customers_summary_report' => "gün",
'date' => "təsvir",
'date_range' => "detallı göndərilən hesabatlar",
'description' => "detallı hesabatlar",
'detailed_receivings_report' => "Ətraflı satınalma hesabatı",
'detailed_receivings_report_input' => "",
'detailed_reports' => "etraflı məlumat",
'detailed_requisition_report' => "endirimler",
'detailed_sales_report' => "Ətraflı satış hesabatı",
'discount' => "endirimlər",
'discount_fixed' => "Sabit endirim",
'discount_percent' => "endirim hesabları",
'discount_type' => "Endirim növü",
'discounts' => "Endirimlər",
'discounts_summary_report' => "əməkdaş",
'earned' => "əməkdaş",
'employee' => "əməkdaşın hesabatı",
'employees' => "İşçilər",
'employees_summary_report' => "İşçilərin Xülasəsi Hesabatı",
'expenses' => "Xərclər",
'expenses_amount' => "Məbləğ",
'expenses_categories' => "Xərclər",
'expenses_categories_summary_report' => "Xərc kateqoriyasında Son Hesabat",
'expenses_category' => "Kategoriya",
'expenses_payment_amount' => "",
'expenses_tax_amount' => "Vergi",
'expenses_total_amount' => "Ümumi Məbləğ",
'expenses_total_tax_amount' => "Ümumi Vergi",
'graphical_reports' => "Qrafik Hesabatlar",
'inventory' => "İnvertizasiya",
'inventory_low' => "inventor hesabatları",
'inventory_low_report' => "mal adı",
'inventory_reports' => "malın nomrəsi",
'inventory_summary' => "mallar",
'inventory_summary_report' => "alınan mallar",
'item' => "gondərilən mallar",
'item_count' => "mal hesabatı",
'item_name' => "aşağı hesabatlar",
'item_number' => "aşağı inventor hesabat",
'items' => "Mallar",
'items_purchased' => "ad",
'items_received' => "Qəbul Olunan Mallar",
'items_summary_report' => "ödəniş tipi",
'jurisdiction' => "Yurisdiksiya",
'low_inventory' => "ödənişlər",
'low_inventory_report' => "inventor hesabatı",
'low_sell_quantity' => "Satış miqdarı",
'more_than_zero' => "gəlir",
'name' => "Qty On Hand",
'no_reports_to_display' => "Göstərmək üçün məhsul yoxdur.",
'payment_type' => "Ödəmə Növü",
'payments' => "kim tərəfindən",
'payments_summary_report' => "Ödəmələr Yekun Hesabatı",
'profit' => "Qazanc",
'quantity' => "qəbul olunanlar",
'quantity_purchased' => "aşağı səviyyə",
'quotes' => "hesabat",
'received_by' => "çıxış hesabatı",
'receiving_id' => "Hesabatlar",
'receiving_type' => "Qəbul Növü",
'receivings' => "Qəbul olunanlar",
'reorder_level' => "Səviyyəni Yenidən Düzəlt",
'report' => "Hesabat",
'report_input' => "Hesabatı daxil edin",
'reports' => "Hesabatlar",
'requisition' => "",
'requisition_by' => "",
'requisition_id' => "",
'requisition_item' => "geri qaytarılanlar",
'requisition_item_quantity' => "gəlir",
'requisition_related_item' => "ID satışı",
'requisition_related_item_total_quantity' => "endirim tipi",
'requisition_related_item_unit_quantity' => "satışlar",
'requisitions' => "Satış qiyməti",
'returns' => "endirim hesabatları",
'revenue' => "Gəlir",
'sale_id' => "satılıb kim tərəfindən",
'sale_type' => "satılıb kimə",
'sales' => "Əməliyyatlar",
'sales_amount' => "Əməliyyatların Məbləği",
'sales_summary_report' => "toplam",
'sales_taxes' => "Satışdan Vergi",
'sales_taxes_summary_report' => "Satışdan vergilərə dair yekun hesabat",
'serial_number' => "hesabatlar",
'service_charge' => "",
'sold_by' => "kim tərəfindən qoyulub",
'sold_items' => "",
'sold_to' => "təchizatçı",
'stock_location' => "təchizatçılar",
'sub_total_value' => "təchizatci hesabatı",
'subtotal' => "vergi",
'summary_reports' => "Yekun Hesabatı",
'supplied_by' => "vergilər",
'supplier' => "vergi hesabatı",
'suppliers' => "toplam",
'suppliers_summary_report' => "Təchizatçıların Yekun Hesabatı",
'tax' => "tip",
'tax_category' => "Vergi Bolməsi",
'tax_name' => "",
'tax_percent' => "Retail Price",
'tax_rate' => "Vergi dərəcəsi",
'taxes' => "Vergilər",
'taxes_summary_report' => "Vergi Yekun Hesabatı",
'total' => "Cəm",
'total_inventory_value' => "Ümumi İnvanter Qiyməti",
'total_low_sell_quantity' => "Ümumi aşağı satışların sayı",
'total_quantity' => "Ümumi Miqdarı",
'total_retail' => "Toplam inv. Pərakəndə dəyəri",
'trans_amount' => "Əməliyyat məbləği",
'trans_due' => "Buna görə",
'trans_group' => "Əməliyyat Qrupu",
'trans_nopay_sales' => "Ödənişsiz satış",
'trans_payments' => "Ödəmələr",
'trans_refunded' => "Geri qaytarıldı",
'trans_sales' => "Satışlar",
'trans_type' => "Əməliyyat növü",
'type' => "Növ",
'unit_price' => "Pərakəndə Qiyməti",
'used' => "İstifadə edilən ballar",
'work_orders' => "İstifadə Olunan Ballar",
'zero_and_less' => "Sıfır və Aşağı",
"all" => "hamısı",
"authority" => "Səlahiyyət",
"canceled" => "Ləğv Edilmiş",
"categories" => "Kateqoriyalar",
"categories_summary_report" => "komentariyalar",
"category" => "Kategoriya",
"code_canceled" => "CNL",
"code_invoice" => "INV",
"code_pos" => "POS",
"code_quote" => "Q",
"code_return" => "RET",
"code_type" => "Növ",
"code_work_order" => "W/O",
"comments" => "bütün qiymət",
"commission" => "",
"complete" => "Tamamlanmış Satış və Geri Qaytarılanlar",
"completed_sales" => "Tamamlanmış Satışlar",
"confirm_delete" => "Seçdiyiniz giriş (lər) silmək istədiyinizə əminsinizmi?",
"confirm_restore" => "Seçilmiş giriş (lər) bərpa etmək istədiyinizə əminsinizmi?",
"cost" => "hesab",
"cost_price" => "müştəri",
"count" => "müştərilər",
"customer" => "müştərilərin hesabatı",
"customers" => "Müştərilər",
"customers_summary_report" => "gün",
"date" => "təsvir",
"date_range" => "detallı göndərilən hesabatlar",
"description" => "detallı hesabatlar",
"detailed_receivings_report" => "Ətraflı satınalma hesabatı",
"detailed_receivings_report_input" => "",
"detailed_reports" => "etraflı məlumat",
"detailed_requisition_report" => "endirimler",
"detailed_sales_report" => "Ətraflı satış hesabatı",
"discount" => "endirimlər",
"discount_fixed" => "Sabit endirim",
"discount_percent" => "endirim hesabları",
"discount_type" => "Endirim növü",
"discounts" => "Endirimlər",
"discounts_summary_report" => "əməkdaş",
"earned" => "əməkdaş",
"employee" => "əməkdaşın hesabatı",
"employees" => "İşçilər",
"employees_summary_report" => "İşçilərin Xülasəsi Hesabatı",
"expenses" => "Xərclər",
"expenses_amount" => "Məbləğ",
"expenses_categories" => "Xərclər",
"expenses_categories_summary_report" => "Xərc kateqoriyasında Son Hesabat",
"expenses_category" => "Kategoriya",
"expenses_payment_amount" => "",
"expenses_tax_amount" => "Vergi",
"expenses_total_amount" => "Ümumi Məbləğ",
"expenses_total_tax_amount" => "Ümumi Vergi",
"graphical_reports" => "Qrafik Hesabatlar",
"inventory" => "İnvertizasiya",
"inventory_low" => "inventor hesabatları",
"inventory_low_report" => "mal adı",
"inventory_reports" => "malın nomrəsi",
"inventory_summary" => "mallar",
"inventory_summary_report" => "alınan mallar",
"item" => "gondərilən mallar",
"item_count" => "mal hesabatı",
"item_name" => "aşağı hesabatlar",
"item_number" => "aşağı inventor hesabat",
"items" => "Mallar",
"items_purchased" => "ad",
"items_received" => "Qəbul Olunan Mallar",
"items_summary_report" => "ödəniş tipi",
"jurisdiction" => "Yurisdiksiya",
"low_inventory" => "ödənişlər",
"low_inventory_report" => "inventor hesabatı",
"low_sell_quantity" => "Satış miqdarı",
"more_than_zero" => "gəlir",
"name" => "Qty On Hand",
"no_reports_to_display" => "Göstərmək üçün məhsul yoxdur.",
"payment_type" => "Ödəmə Növü",
"payments" => "kim tərəfindən",
"payments_summary_report" => "Ödəmələr Yekun Hesabatı",
"profit" => "Qazanc",
"quantity" => "qəbul olunanlar",
"quantity_purchased" => "aşağı səviyyə",
"quotes" => "hesabat",
"received_by" => "çıxış hesabatı",
"receiving_id" => "Hesabatlar",
"receiving_type" => "Qəbul Növü",
"receivings" => "Qəbul olunanlar",
"reorder_level" => "Səviyyəni Yenidən Düzəlt",
"report" => "Hesabat",
"report_input" => "Hesabatı daxil edin",
"reports" => "Hesabatlar",
"requisition" => "",
"requisition_by" => "",
"requisition_id" => "",
"requisition_item" => "geri qaytarılanlar",
"requisition_item_quantity" => "gəlir",
"requisition_related_item" => "ID satışı",
"requisition_related_item_total_quantity" => "endirim tipi",
"requisition_related_item_unit_quantity" => "satışlar",
"requisitions" => "Satış qiyməti",
"returns" => "endirim hesabatları",
"revenue" => "Gəlir",
"sale_id" => "satılıb kim tərəfindən",
"sale_type" => "satılıb kimə",
"sales" => "Əməliyyatlar",
"sales_amount" => "Əməliyyatların Məbləği",
"sales_summary_report" => "toplam",
"sales_taxes" => "Satışdan Vergi",
"sales_taxes_summary_report" => "Satışdan vergilərə dair yekun hesabat",
"serial_number" => "hesabatlar",
"service_charge" => "",
"sold_by" => "kim tərəfindən qoyulub",
"sold_items" => "",
"sold_to" => "təchizatçı",
"stock_location" => "təchizatçılar",
"sub_total_value" => "təchizatci hesabatı",
"subtotal" => "vergi",
"summary_reports" => "vergi faizi",
"supplied_by" => "vergilər",
"supplier" => "vergi hesabatı",
"suppliers" => "toplam",
"suppliers_summary_report" => "Təchizatçıların Yekun Hesabatı",
"tax" => "tip",
"tax_category" => "Vergi Bolməsi",
"tax_name" => "",
"tax_percent" => "Retail Price",
"tax_rate" => "Vergi dərəcəsi",
"taxes" => "Vergilər",
"taxes_summary_report" => "Vergi Yekun Hesabatı",
"total" => "Cəm",
"total_inventory_value" => "Ümumi İnvanter Qiyməti",
"total_low_sell_quantity" => "Ümumi aşağı satışların sayı",
"total_quantity" => "Ümumi Miqdarı",
"total_retail" => "Toplam inv. Pərakəndə dəyəri",
"trans_amount" => "Əməliyyat məbləği",
"trans_due" => "Buna görə",
"trans_group" => "Əməliyyat Qrupu",
"trans_nopay_sales" => "Ödənişsiz satış",
"trans_payments" => "Ödəmələr",
"trans_refunded" => "Geri qaytarıldı",
"trans_sales" => "Satışlar",
"trans_type" => "Əməliyyat növü",
"type" => "Növ",
"unit_price" => "Pərakəndə Qiyməti",
"used" => "İstifadə edilən ballar",
"work_orders" => "İstifadə Olunan Ballar",
"zero_and_less" => "Sıfır və Aşağı",
];

View File

@@ -1,331 +1,330 @@
<?php
return [
'address' => "Alamat Perusahaan",
'address_required' => "Alamat Perusahaan wajib diisi.",
'all_set' => "Semua perizinan file diatur dengan benar!",
'allow_duplicate_barcodes' => "Ijinkan kode batang ganda",
'apostrophe' => "Tanda petik (')",
'backup_button' => "Cadangkan",
'backup_database' => "Cadangkan basis data",
'barcode' => "Kode batang",
'barcode_company' => "Nama Perusahaan",
'barcode_configuration' => "Pengaturan kode batang",
'barcode_content' => "Isi kode batang",
'barcode_first_row' => "Baris 1",
'barcode_font' => "Jenis huruf",
'barcode_formats' => "Format masukan",
'barcode_generate_if_empty' => "Buatkan kode batang otomatis jika kosong.",
'barcode_height' => "Tinggi (px)",
'barcode_id' => "Item Id/Nama",
'barcode_info' => "Informasi pengaturan kode batang",
'barcode_layout' => "Tata letak kode batang",
'barcode_name' => "Nama",
'barcode_number' => "Kode batang",
'barcode_number_in_row' => "Jumlah baris",
'barcode_page_cellspacing' => "Tampilkan jarak antar sel pada halaman.",
'barcode_page_width' => "Lebar halaman",
'barcode_price' => "Harga",
'barcode_second_row' => "Baris 2",
'barcode_third_row' => "Baris 3",
'barcode_tooltip' => "Peringatan: Fitur ini dapat meyebabkan duplikasi item yang diimpor atau dibuat. Jangan digunakan jika Anda tidak ingin menggandakan kode batang.",
'barcode_type' => "Jenis kode batang",
'barcode_width' => "Lebar (px)",
'bottom' => "Bawah",
'cash_button' => "",
'cash_button_1' => "",
'cash_button_2' => "",
'cash_button_3' => "",
'cash_button_4' => "",
'cash_button_5' => "",
'cash_button_6' => "",
'cash_decimals' => "Desimal Tunai",
'cash_decimals_tooltip' => "Jika Desimal Tunai dan Desimal Mata Uang sama, maka pembulatan uang tidak akan dilakukan.",
'cash_rounding' => "Pembulatan tunai",
'category_dropdown' => "Tampilkan menu tarik turun untuk Kategori",
'center' => "Tengah",
'change_apperance_tooltip' => "",
'comma' => "koma",
'company' => "Nama Perusahaan",
'company_avatar' => "",
'company_change_image' => "Ubah gambar",
'company_logo' => "Logo perusahaan",
'company_remove_image' => "Hapus gambar",
'company_required' => "Nama Perusahaan wajib diisi",
'company_select_image' => "Pilih gambar",
'company_website_url' => "Situs Perusahaan bukan URL yang benar(http://...).",
'country_codes' => "Kode negara",
'country_codes_tooltip' => "Daftar kode negara format CSV untuk lookup alamat.",
'currency_code' => "Kode Mata uang",
'currency_decimals' => "Angka desimal",
'currency_symbol' => "Simbol Mata Uang",
'current_employee_only' => "",
'customer_reward' => "Hadiah",
'customer_reward_duplicate' => "Masukkan nama unik untuk hadiah.",
'customer_reward_enable' => "Aktifkan Hadiah Konsumen",
'customer_reward_invalid_chars' => "Nama hadiah tidak boleh berisi '_'",
'customer_reward_required' => "Kolom hadiah tidak boleh kosong",
'customer_sales_tax_support' => "Dukungan Pajak Penjualan Pelanggan",
'date_or_time_format' => "Penyaring tanggal dan waktu",
'datetimeformat' => "Format tanggal dan waktu",
'decimal_point' => "Titik Desimal",
'default_barcode_font_size_number' => "Pengaturan ukuran kode batang default harus berupa angka.",
'default_barcode_font_size_required' => "Pengaturan ukuran kode batang default harus diisi.",
'default_barcode_height_number' => "Pengaturan tinggi kode batang harus berupa angka.",
'default_barcode_height_required' => "Pengaturan tinggi kode batang harus diisi.",
'default_barcode_num_in_row_number' => "Kode batang harus berupa angka.",
'default_barcode_num_in_row_required' => "Kode batang harus diisi.",
'default_barcode_page_cellspacing_number' => "Pengaturan spasi sel kode batang harus berupa angka.",
'default_barcode_page_cellspacing_required' => "Pengaturan spasi sel kode batang harus diisi.",
'default_barcode_page_width_number' => "Lebar halaman kode batang harus berupa angka.",
'default_barcode_page_width_required' => "Lebar halaman kode batang harus diisi.",
'default_barcode_width_number' => "Lebar kode batang harus berupa angka.",
'default_barcode_width_required' => "Lebar kode batang harus diisi.",
'default_item_columns' => "Kolom item terlihat bawaan",
'default_origin_tax_code' => "Kode Pajak Asal Default",
'default_receivings_discount' => "Diskon pembelian bawaan",
'default_receivings_discount_number' => "Diskon pembelian bawaaan harus berupa angka.",
'default_receivings_discount_required' => "Diskon oembelian harus diisi.",
'default_sales_discount' => "Diskon penjualan bawaan",
'default_sales_discount_number' => "Diskon penjualan harus berupa angka.",
'default_sales_discount_required' => "Diskon penjualan harus diisi.",
'default_tax_category' => "Kategori pajak bawaan",
'default_tax_code' => "Kode pajak bawaan",
'default_tax_jurisdiction' => "Yuridiksi Pajak bawaan",
'default_tax_name_number' => "Nama Pajak Default harus berupa string.",
'default_tax_name_required' => "Jenis pajak harus diisi.",
'default_tax_rate' => "Tarif Pajak %",
'default_tax_rate_1' => "Tarif Pajak 1",
'default_tax_rate_2' => "Tarif Pajak 2",
'default_tax_rate_3' => "",
'default_tax_rate_number' => "Tarif Pajak harus berupa angkat.",
'default_tax_rate_required' => "Tarif Pajak Biasa harus diisi.",
'derive_sale_quantity' => "Ijinkan Kuantitas Penjulan Diturunkan",
'derive_sale_quantity_tooltip' => "Jika dicentang maka jenis barang baru akan disediakan untuk barang yang dipesan dengan jumlah yang diperpanjang",
'dinner_table' => "Meja",
'dinner_table_duplicate' => "Masukkan nama meja (harus unik).",
'dinner_table_enable' => "Aktifkan meja",
'dinner_table_invalid_chars' => "Nama meja tidak dapat berisi karater '_'.",
'dinner_table_required' => "Meja adalah kolom yang harus diisi.",
'dot' => "titik",
'email' => "Email",
'email_configuration' => "Konfigurasi Email",
'email_mailpath' => "Direktori untuk Sendmail",
'email_protocol' => "Protocol",
'email_receipt_check_behaviour' => "Kotak centang Penerimaan Email",
'email_receipt_check_behaviour_always' => "Selalu dicentang",
'email_receipt_check_behaviour_last' => "Ingat pilihan terakhir",
'email_receipt_check_behaviour_never' => "Selalu tidak tercentang",
'email_smtp_crypto' => "Enkripsi SMTP",
'email_smtp_host' => "Server SMTP",
'email_smtp_pass' => "Kata Sandi SMTP",
'email_smtp_port' => "Port SMTP",
'email_smtp_timeout' => "Masa Aktif SMTP",
'email_smtp_user' => "Nama Pengguna SMTP",
'enable_avatar' => "",
'enable_avatar_tooltip' => "",
'enable_dropdown_tooltip' => "",
'enable_new_look' => "",
'enable_right_bar' => "",
'enable_right_bar_tooltip' => "",
'enforce_privacy' => "Berlakukan privasi",
'enforce_privacy_tooltip' => "Lindungi privasi Pelanggan yang menegakkan data dalam hal data mereka dihapus",
'fax' => "Fax",
'file_perm' => "Perizinan berkas bermasalah, Silakan perbaiki dan muat ulang halaman ini.",
'financial_year' => "Tahun Awal Fiskal",
'financial_year_apr' => "1 April",
'financial_year_aug' => "1 Agustus",
'financial_year_dec' => "1 Desember",
'financial_year_feb' => "1 Februari",
'financial_year_jan' => "1 Januari",
'financial_year_jul' => "1 Juli",
'financial_year_jun' => "1 Juni",
'financial_year_mar' => "1 Maret",
'financial_year_may' => "1 Mei",
'financial_year_nov' => "1 November",
'financial_year_oct' => "1 Oktober",
'financial_year_sep' => "1 September",
'floating_labels' => "Label mengambang",
'gcaptcha_enable' => "Halaman login reCHAPTCHA",
'gcaptcha_secret_key' => "Kunci Rahasia reCHAPTCHA",
'gcaptcha_secret_key_required' => "Kunci Rahasia reCHAPTCHA adalah bidang yang harus diisi",
'gcaptcha_site_key' => "Kunci Situs reCHAPTCHA",
'gcaptcha_site_key_required' => "Kunci Situs reCHAPTCHA adalah bidang yang dibutuhkan",
'gcaptcha_tooltip' => "Lindungi Halaman Login dengan reCAPTCHA Google, klik pada ikon untuk pasangan kunci API.",
'general' => "Umum",
'general_configuration' => "Pengaturan Umum",
'giftcard_number' => "Nomor Kartu Hadiah",
'giftcard_random' => "Hasilkan acak",
'giftcard_series' => "Hasilkan dalam seri",
'image_allowed_file_types' => "Jenis berkas yang diizinkan",
'image_max_height_tooltip' => "Tinggi maksimum unggahan gambar yang diizinkan dalam piksel (px).",
'image_max_size_tooltip' => "ukuran berkas maksimum yang diijinkan untuk mengunggah gambar dalam kilobyte (kb).",
'image_max_width_tooltip' => "Lebar maksimum yang diunggah dari pengunggahan gambar dalam piksel (px).",
'image_restrictions' => "Pembatasan Pengunggahan Gambar",
'include_hsn' => "Termasuk dukungan kode HSN",
'info' => "Informasi",
'info_configuration' => "Informasi Toko",
'input_groups' => "Grup masukan",
'integrations' => "Integrasi",
'integrations_configuration' => "Integrasi pihak ketiga",
'invoice' => "Faktur",
'invoice_configuration' => "Pengaturan cetak faktur",
'invoice_default_comments' => "Komentar faktur",
'invoice_email_message' => "Templat email faktur",
'invoice_enable' => "Mengaktifkan faktur",
'invoice_printer' => "Pencetak Faktur",
'invoice_type' => "Tipe Faktur",
'is_readable' => "dapat dibaca, tetapi izin tidak disetel dengan benar. Setel ke 640 atau 660, kemudian segarkan.",
'is_writable' => "bisa ditulis, tetapi izin tidak disetel dengan benar. Setel ke 750 dan segarkan.",
'item_markup' => "",
'jsprintsetup_required' => "Perhatian! Fungsi ini hanya berjalan jika anda menggunakan Firefox yang memiliki tambahan jsPrintSetup. Tetap simpan?",
'language' => "Bahasa",
'last_used_invoice_number' => "Nomor terakhir faktur",
'last_used_quote_number' => "Nomor Penawaran yang terakhir digunakan",
'last_used_work_order_number' => "Nomor W/O yang terakhir dipakai",
'left' => "Kiri",
'license' => "Lisensi",
'license_configuration' => "Pernyataan Lisensi",
'line_sequence' => "Urutan baris",
'lines_per_page' => "Baris per halaman",
'lines_per_page_number' => "Baris per halaman harus berupa angka.",
'lines_per_page_required' => "Baris per halaman tidak boleh kosong.",
'locale' => "Terjemahan",
'locale_configuration' => "Konfigurasi Terjemahan",
'locale_info' => "Informasi Konfigurasi Terjemahan",
'location' => "Lokasi Stock",
'location_configuration' => "Lokasi Stock",
'location_info' => "Informasi konfigurasi lokasi stock",
'login_form' => "Gaya Formulir Log Masuk",
'logout' => "Apakah Anda akan membuat cadangan sebelum anda keluar? Klik [OK] untuk pencadangan, [Batal] untuk keluar.",
'mailchimp' => "MailChimp",
'mailchimp_api_key' => "Kunci API MailChimp",
'mailchimp_configuration' => "Pengaturan MailChimp",
'mailchimp_key_successfully' => "Kunci API benar.",
'mailchimp_key_unsuccessfully' => "Kunci API tidak valid.",
'mailchimp_lists' => "Daftar MailChimp",
'mailchimp_tooltip' => "Klik pada ikon untuk KUnci API.",
'message' => "Pesan",
'message_configuration' => "Pengaturan Pesan",
'msg_msg' => "Pesan teks tersimpan",
'msg_msg_placeholder' => "Apakah Anda ingin menggunakan template SMS menyimpan pesan Anda disini? Jika tidak, biarkan kosong.",
'msg_pwd' => "SMS-API Password",
'msg_pwd_required' => "SMS-API Password harus diisi",
'msg_src' => "ID pengirim SMS-API",
'msg_src_required' => "SMS-API Sender ID harus diisi",
'msg_uid' => "SMS-API User Name",
'msg_uid_required' => "SMS-API Username harus diisi",
'multi_pack_enabled' => "Multi paket per item",
'no_risk' => "Tidak ada risiko keamanan / kerentanan.",
'none' => "none",
'notify_alignment' => "Posisi notifikasi Popup",
'number_format' => "Format Nomor",
'number_locale' => "Terjemahan",
'number_locale_invalid' => "Kode bahasa salah. Cek tautan pada tooltip untuk mendapatkan kode bahasa yang benar.",
'number_locale_required' => "Kode Lokal wajib diisi.",
'number_locale_tooltip' => "Menemukan kode lokal melalui link ini.",
'os_timezone' => "Zona waktu OSPOS:",
'ospos_info' => "Info pemasangan OSPOS",
'payment_options_order' => "Urutan pilihan pembayaran",
'perm_risk' => "Setelan izin yang salah berbahaya bagi keamanan perangkat lunak.",
'phone' => "Telepon Perusahaan",
'phone_required' => "Telepon Perusahaan wajib diisi.",
'print_bottom_margin' => "Margin Bawah",
'print_bottom_margin_number' => "Default margin bawah harus angka.",
'print_bottom_margin_required' => "Default margin Bawah harus di isi.",
'print_delay_autoreturn' => "Otomatis Retur pada penundaan Penjualan",
'print_delay_autoreturn_number' => "Kolom Otomatis Retur pada Penundaan Penjualan harus diisi.",
'print_delay_autoreturn_required' => "Pengembalian otomatis untuk Penjualan tertunda harus berupa angka.",
'print_footer' => "Mencetak Footer Browser",
'print_header' => "Mencetak Browser Header",
'print_left_margin' => "Margin Kiri",
'print_left_margin_number' => "Margin kiri harus berupa angka.",
'print_left_margin_required' => "Margin kiri wajib di isi.",
'print_receipt_check_behaviour' => "Centang Cetak Struk",
'print_receipt_check_behaviour_always' => "Selalu dicentang",
'print_receipt_check_behaviour_last' => "Ingat pilihan terakhir",
'print_receipt_check_behaviour_never' => "Selalu tidak dicentang",
'print_right_margin' => "Margin kanan",
'print_right_margin_number' => "Margin kiri harus berupa angka.",
'print_right_margin_required' => "Margin kanan wajib di isi.",
'print_silently' => "Tampilkan Print Dialog",
'print_top_margin' => "Margin atas",
'print_top_margin_number' => "Nilai margin atas harus di isi angka.",
'print_top_margin_required' => "Margin atas wajib di isi.",
'quantity_decimals' => "Desimal untuk Jumlah",
'quick_cash_enable' => "",
'quote_default_comments' => "Komentar faktur",
'receipt' => "Struk Penerimaan",
'receipt_category' => "",
'receipt_configuration' => "Struk Print Settings",
'receipt_default' => "Default",
'receipt_font_size' => "Ukuran Font",
'receipt_font_size_number' => "Ukuran font harus berupa angka.",
'receipt_font_size_required' => "Ukuran font harus diisi.",
'receipt_info' => "Struk Konfigurasi Informasi",
'receipt_printer' => "Tiket Printer",
'receipt_short' => "Ringkas",
'receipt_show_company_name' => "Tampilkan nama perusahaan",
'receipt_show_description' => "Tampilkan deskripsi",
'receipt_show_serialnumber' => "Tampilkan nomor seri",
'receipt_show_tax_ind' => "Tampilkan Indikator Pajak",
'receipt_show_taxes' => "Tampilkan pajak",
'receipt_show_total_discount' => "Tampilkan total diskon",
'receipt_template' => "Template struk",
'receiving_calculate_average_price' => "Menghitung harga rata-rata (Penerimaan)",
'recv_invoice_format' => "Format Faktur",
'register_mode_default' => "Default register mode",
'report_an_issue' => "Laporkan masalah",
'return_policy_required' => "Kebijakan retur wajib diisi.",
'reward' => "Hadiah",
'reward_configuration' => "Konfigurasi Hadiah",
'right' => "Kanan",
'sales_invoice_format' => "Format Faktur Penjualan",
'sales_quote_format' => "Format Penawaran Penjualan",
'saved_successfully' => "Konfigurasi berhasil disimpan.",
'saved_unsuccessfully' => "Konfigurasi tidak berhasil disimpan.",
'security_issue' => "Peringatan Kerentanan Keamanan",
'server_notice' => "Silakan gunakan info di bawah ini untuk pelaporan masalah.",
'service_charge' => "",
'show_due_enable' => "",
'show_office_group' => "Tampilkan ikon kantor",
'statistics' => "Kirim statistik",
'statistics_tooltip' => "Kirim statistik untuk pengembangan dan peningkatan fitur.",
'stock_location' => "Lokasi Stock",
'stock_location_duplicate' => "Gunakan nama yang unik untuk lokasi stock.",
'stock_location_invalid_chars' => "Nama lokasi tidak boleh berisi karakter '_'.",
'stock_location_required' => "Nomor lokasi stock harus diisi.",
'suggestions_fifth_column' => "",
'suggestions_first_column' => "Kolom 1",
'suggestions_fourth_column' => "",
'suggestions_layout' => "Tampilan Saran Pencarian",
'suggestions_second_column' => "Kolom 2",
'suggestions_third_column' => "Kolom 3",
'system_conf' => "Setting & Conf",
'system_info' => "System Info",
'table' => "Meja",
'table_configuration' => "Konfigurasi Meja",
'takings_printer' => "Struk Printer",
'tax' => "Pajak",
'tax_category' => "Kategori Pajak",
'tax_category_duplicate' => "Kategori pajak yang dimasukkan sudah ada.",
'tax_category_invalid_chars' => "Kategori pajak yang dimasukkan tidak valid.",
'tax_category_required' => "Kategori pajak dibutuhkan.",
'tax_category_used' => "Kategori pajak tidak bisa dihapus karena sedang digunakan.",
'tax_configuration' => "Konfigurasi Pajak",
'tax_decimals' => "Pajak Decimals",
'tax_id' => "Id Pajak",
'tax_included' => "Dikenakan Pajak",
'theme' => "Tema",
'theme_preview' => "Pratinjau Tema:",
'thousands_separator' => "Pemisah Ribuan",
'timezone' => "Zona Waktu",
'timezone_error' => "Zona Waktu OSPOS berbeda dari Zona Waktu Anda.",
'top' => "Atas",
'use_destination_based_tax' => "Gunakan Pajak Berdasarkan Tujuan",
'user_timezone' => "Zona waktu lokal:",
'website' => "Situs Perusahaan",
'wholesale_markup' => "",
'work_order_enable' => "Dukungan Work Order",
'work_order_format' => "Format Work Order",
"address" => "Alamat Perusahaan",
"address_required" => "Alamat Perusahaan wajib diisi.",
"all_set" => "Semua perizinan file diatur dengan benar!",
"allow_duplicate_barcodes" => "Ijinkan kode batang ganda",
"apostrophe" => "Tanda petik (')",
"backup_button" => "Cadangkan",
"backup_database" => "Cadangkan basis data",
"barcode" => "Kode batang",
"barcode_company" => "Nama Perusahaan",
"barcode_configuration" => "Pengaturan kode batang",
"barcode_content" => "Isi kode batang",
"barcode_first_row" => "Baris 1",
"barcode_font" => "Jenis huruf",
"barcode_formats" => "Format masukan",
"barcode_generate_if_empty" => "Buatkan kode batang otomatis jika kosong.",
"barcode_height" => "Tinggi (px)",
"barcode_id" => "Item Id/Nama",
"barcode_info" => "Informasi pengaturan kode batang",
"barcode_layout" => "Tata letak kode batang",
"barcode_name" => "Nama",
"barcode_number" => "Kode batang",
"barcode_number_in_row" => "Jumlah baris",
"barcode_page_cellspacing" => "Tampilkan jarak antar sel pada halaman.",
"barcode_page_width" => "Lebar halaman",
"barcode_price" => "Harga",
"barcode_second_row" => "Baris 2",
"barcode_third_row" => "Baris 3",
"barcode_tooltip" => "Peringatan: Fitur ini dapat meyebabkan duplikasi item yang diimpor atau dibuat. Jangan digunakan jika Anda tidak ingin menggandakan kode batang.",
"barcode_type" => "Jenis kode batang",
"barcode_width" => "Lebar (px)",
"bottom" => "Bawah",
"cash_button" => "",
"cash_button_1" => "",
"cash_button_2" => "",
"cash_button_3" => "",
"cash_button_4" => "",
"cash_button_5" => "",
"cash_button_6" => "",
"cash_decimals" => "Desimal Tunai",
"cash_decimals_tooltip" => "Jika Desimal Tunai dan Desimal Mata Uang sama, maka pembulatan uang tidak akan dilakukan.",
"cash_rounding" => "Pembulatan tunai",
"category_dropdown" => "Tampilkan menu tarik turun untuk Kategori",
"center" => "Tengah",
"change_apperance_tooltip" => "",
"comma" => "koma",
"company" => "Nama Perusahaan",
"company_avatar" => "",
"company_change_image" => "Ubah gambar",
"company_logo" => "Logo perusahaan",
"company_remove_image" => "Hapus gambar",
"company_required" => "Nama Perusahaan wajib diisi",
"company_select_image" => "Pilih gambar",
"company_website_url" => "Situs Perusahaan bukan URL yang benar(http://...).",
"country_codes" => "Kode negara",
"country_codes_tooltip" => "Daftar kode negara format CSV untuk lookup alamat.",
"currency_code" => "Kode Mata uang",
"currency_decimals" => "Angka desimal",
"currency_symbol" => "Simbol Mata Uang",
"current_employee_only" => "",
"customer_reward" => "Hadiah",
"customer_reward_duplicate" => "Masukkan nama unik untuk hadiah.",
"customer_reward_enable" => "Aktifkan Hadiah Konsumen",
"customer_reward_invalid_chars" => "Nama hadiah tidak boleh berisi '_'",
"customer_reward_required" => "Kolom hadiah tidak boleh kosong",
"customer_sales_tax_support" => "Dukungan Pajak Penjualan Pelanggan",
"date_or_time_format" => "Penyaring tanggal dan waktu",
"datetimeformat" => "Format tanggal dan waktu",
"decimal_point" => "Titik Desimal",
"default_barcode_font_size_number" => "Pengaturan ukuran kode batang default harus berupa angka.",
"default_barcode_font_size_required" => "Pengaturan ukuran kode batang default harus diisi.",
"default_barcode_height_number" => "Pengaturan tinggi kode batang harus berupa angka.",
"default_barcode_height_required" => "Pengaturan tinggi kode batang harus diisi.",
"default_barcode_num_in_row_number" => "Kode batang harus berupa angka.",
"default_barcode_num_in_row_required" => "Kode batang harus diisi.",
"default_barcode_page_cellspacing_number" => "Pengaturan spasi sel kode batang harus berupa angka.",
"default_barcode_page_cellspacing_required" => "Pengaturan spasi sel kode batang harus diisi.",
"default_barcode_page_width_number" => "Lebar halaman kode batang harus berupa angka.",
"default_barcode_page_width_required" => "Lebar halaman kode batang harus diisi.",
"default_barcode_width_number" => "Lebar kode batang harus berupa angka.",
"default_barcode_width_required" => "Lebar kode batang harus diisi.",
"default_item_columns" => "Kolom item terlihat bawaan",
"default_origin_tax_code" => "Kode Pajak Asal Default",
"default_receivings_discount" => "Diskon pembelian bawaan",
"default_receivings_discount_number" => "Diskon pembelian bawaaan harus berupa angka.",
"default_receivings_discount_required" => "Diskon oembelian harus diisi.",
"default_sales_discount" => "Diskon penjualan bawaan",
"default_sales_discount_number" => "Diskon penjualan harus berupa angka.",
"default_sales_discount_required" => "Diskon penjualan harus diisi.",
"default_tax_category" => "Kategori pajak bawaan",
"default_tax_code" => "Kode pajak bawaan",
"default_tax_jurisdiction" => "Yuridiksi Pajak bawaan",
"default_tax_name_number" => "Nama Pajak Default harus berupa string.",
"default_tax_name_required" => "Jenis pajak harus diisi.",
"default_tax_rate" => "Tarif Pajak %",
"default_tax_rate_1" => "Tarif Pajak 1",
"default_tax_rate_2" => "Tarif Pajak 2",
"default_tax_rate_3" => "",
"default_tax_rate_number" => "Tarif Pajak harus berupa angkat.",
"default_tax_rate_required" => "Tarif Pajak Biasa harus diisi.",
"derive_sale_quantity" => "Ijinkan Kuantitas Penjulan Diturunkan",
"derive_sale_quantity_tooltip" => "Jika dicentang maka jenis barang baru akan disediakan untuk barang yang dipesan dengan jumlah yang diperpanjang",
"dinner_table" => "Meja",
"dinner_table_duplicate" => "Masukkan nama meja (harus unik).",
"dinner_table_enable" => "Aktifkan meja",
"dinner_table_invalid_chars" => "Nama meja tidak dapat berisi karater '_'.",
"dinner_table_required" => "Meja adalah kolom yang harus diisi.",
"dot" => "titik",
"email" => "Email",
"email_configuration" => "Konfigurasi Email",
"email_mailpath" => "Direktori untuk Sendmail",
"email_protocol" => "Protocol",
"email_receipt_check_behaviour" => "Kotak centang Penerimaan Email",
"email_receipt_check_behaviour_always" => "Selalu dicentang",
"email_receipt_check_behaviour_last" => "Ingat pilihan terakhir",
"email_receipt_check_behaviour_never" => "Selalu tidak tercentang",
"email_smtp_crypto" => "Enkripsi SMTP",
"email_smtp_host" => "Server SMTP",
"email_smtp_pass" => "Kata Sandi SMTP",
"email_smtp_port" => "Port SMTP",
"email_smtp_timeout" => "Masa Aktif SMTP",
"email_smtp_user" => "Nama Pengguna SMTP",
"enable_avatar" => "",
"enable_avatar_tooltip" => "",
"enable_dropdown_tooltip" => "",
"enable_new_look" => "",
"enable_right_bar" => "",
"enable_right_bar_tooltip" => "",
"enforce_privacy" => "Berlakukan privasi",
"enforce_privacy_tooltip" => "Lindungi privasi Pelanggan yang menegakkan data dalam hal data mereka dihapus",
"fax" => "Fax",
"file_perm" => "Perizinan berkas bermasalah, Silakan perbaiki dan muat ulang halaman ini.",
"financial_year" => "Tahun Awal Fiskal",
"financial_year_apr" => "1 April",
"financial_year_aug" => "1 Agustus",
"financial_year_dec" => "1 Desember",
"financial_year_feb" => "1 Februari",
"financial_year_jan" => "1 Januari",
"financial_year_jul" => "1 Juli",
"financial_year_jun" => "1 Juni",
"financial_year_mar" => "1 Maret",
"financial_year_may" => "1 Mei",
"financial_year_nov" => "1 November",
"financial_year_oct" => "1 Oktober",
"financial_year_sep" => "1 September",
"floating_labels" => "Label mengambang",
"gcaptcha_enable" => "Halaman login reCHAPTCHA",
"gcaptcha_secret_key" => "Kunci Rahasia reCHAPTCHA",
"gcaptcha_secret_key_required" => "Kunci Rahasia reCHAPTCHA adalah bidang yang harus diisi",
"gcaptcha_site_key" => "Kunci Situs reCHAPTCHA",
"gcaptcha_site_key_required" => "Kunci Situs reCHAPTCHA adalah bidang yang dibutuhkan",
"gcaptcha_tooltip" => "Lindungi Halaman Login dengan reCAPTCHA Google, klik pada ikon untuk pasangan kunci API.",
"general" => "Umum",
"general_configuration" => "Pengaturan Umum",
"giftcard_number" => "Nomor Gift Card",
"giftcard_random" => "Hasilkan acak",
"giftcard_series" => "Hasilkan dalam seri",
"image_allowed_file_types" => "Jenis berkas yang diizinkan",
"image_max_height_tooltip" => "Tinggi maksimum unggahan gambar yang diizinkan dalam piksel (px).",
"image_max_size_tooltip" => "ukuran berkas maksimum yang diijinkan untuk mengunggah gambar dalam kilobyte (kb).",
"image_max_width_tooltip" => "Lebar maksimum yang diunggah dari pengunggahan gambar dalam piksel (px).",
"image_restrictions" => "Pembatasan Pengunggahan Gambar",
"include_hsn" => "Termasuk dukungan kode HSN",
"info" => "Informasi",
"info_configuration" => "Informasi Toko",
"input_groups" => "Grup masukan",
"integrations" => "Integrasi",
"integrations_configuration" => "Integrasi pihak ketiga",
"invoice" => "Faktur",
"invoice_configuration" => "Pengaturan cetak faktur",
"invoice_default_comments" => "Komentar faktur",
"invoice_email_message" => "Templat email faktur",
"invoice_enable" => "Mengaktifkan faktur",
"invoice_printer" => "Pencetak Faktur",
"invoice_type" => "Tipe Faktur",
"is_readable" => "dapat dibaca, tetapi izin tidak disetel dengan benar. Setel ke 640 atau 660, kemudian segarkan.",
"is_writable" => "bisa ditulis, tetapi izin tidak disetel dengan benar. Setel ke 750 dan segarkan.",
"item_markup" => "",
"jsprintsetup_required" => "Perhatian! Fungsi ini hanya berjalan jika anda menggunakan Firefox yang memiliki tambahan jsPrintSetup. Tetap simpan?",
"language" => "Bahasa",
"last_used_invoice_number" => "Nomor terakhir faktur",
"last_used_quote_number" => "Nomor Penawaran yang terakhir digunakan",
"last_used_work_order_number" => "Nomor W/O yang terakhir dipakai",
"left" => "Kiri",
"license" => "Lisensi",
"license_configuration" => "Pernyataan Lisensi",
"line_sequence" => "Urutan baris",
"lines_per_page" => "Baris per halaman",
"lines_per_page_number" => "Baris per halaman harus berupa angka.",
"lines_per_page_required" => "Baris per halaman tidak boleh kosong.",
"locale" => "Terjemahan",
"locale_configuration" => "Konfigurasi Terjemahan",
"locale_info" => "Informasi Konfigurasi Terjemahan",
"location" => "Lokasi Stock",
"location_configuration" => "Lokasi Stock",
"location_info" => "Informasi konfigurasi lokasi stock",
"login_form" => "Gaya Formulir Log Masuk",
"logout" => "Apakah Anda akan membuat cadangan sebelum anda keluar? Klik [OK] untuk pencadangan, [Batal] untuk keluar.",
"mailchimp" => "MailChimp",
"mailchimp_api_key" => "Kunci API MailChimp",
"mailchimp_configuration" => "Pengaturan MailChimp",
"mailchimp_key_successfully" => "Kunci API benar.",
"mailchimp_key_unsuccessfully" => "Kunci API tidak valid.",
"mailchimp_lists" => "Daftar MailChimp",
"mailchimp_tooltip" => "Klik pada ikon untuk KUnci API.",
"message" => "Pesan",
"message_configuration" => "Pengaturan Pesan",
"msg_msg" => "Pesan teks tersimpan",
"msg_msg_placeholder" => "Apakah Anda ingin menggunakan template SMS menyimpan pesan Anda disini? Jika tidak, biarkan kosong.",
"msg_pwd" => "SMS-API Password",
"msg_pwd_required" => "SMS-API Password harus diisi",
"msg_src" => "ID pengirim SMS-API",
"msg_src_required" => "SMS-API Sender ID harus diisi",
"msg_uid" => "SMS-API User Name",
"msg_uid_required" => "SMS-API Username harus diisi",
"multi_pack_enabled" => "Multi paket per item",
"no_risk" => "Tidak ada risiko keamanan / kerentanan.",
"none" => "none",
"notify_alignment" => "Posisi notifikasi Popup",
"number_format" => "Format Nomor",
"number_locale" => "Terjemahan",
"number_locale_invalid" => "Kode bahasa salah. Cek tautan pada tooltip untuk mendapatkan kode bahasa yang benar.",
"number_locale_required" => "Kode Lokal wajib diisi.",
"number_locale_tooltip" => "Menemukan kode lokal melalui link ini.",
"os_timezone" => "Zona waktu OSPOS:",
"ospos_info" => "Info pemasangan OSPOS",
"payment_options_order" => "Urutan pilihan pembayaran",
"perm_risk" => "Setelan izin yang salah berbahaya bagi keamanan perangkat lunak.",
"phone" => "Telepon Perusahaan",
"phone_required" => "Telepon Perusahaan wajib diisi.",
"print_bottom_margin" => "Margin Bawah",
"print_bottom_margin_number" => "Default margin bawah harus angka.",
"print_bottom_margin_required" => "Default margin Bawah harus di isi.",
"print_delay_autoreturn" => "Otomatis Retur pada penundaan Penjualan",
"print_delay_autoreturn_number" => "Kolom Otomatis Retur pada Penundaan Penjualan harus diisi.",
"print_delay_autoreturn_required" => "Pengembalian otomatis untuk Penjualan tertunda harus berupa angka.",
"print_footer" => "Mencetak Footer Browser",
"print_header" => "Mencetak Browser Header",
"print_left_margin" => "Margin Kiri",
"print_left_margin_number" => "Margin kiri harus berupa angka.",
"print_left_margin_required" => "Margin kiri wajib di isi.",
"print_receipt_check_behaviour" => "Centang Cetak Struk",
"print_receipt_check_behaviour_always" => "Selalu dicentang",
"print_receipt_check_behaviour_last" => "Ingat pilihan terakhir",
"print_receipt_check_behaviour_never" => "Selalu tidak dicentang",
"print_right_margin" => "Margin kanan",
"print_right_margin_number" => "Margin kiri harus berupa angka.",
"print_right_margin_required" => "Margin kanan wajib di isi.",
"print_silently" => "Tampilkan Print Dialog",
"print_top_margin" => "Margin atas",
"print_top_margin_number" => "Nilai margin atas harus di isi angka.",
"print_top_margin_required" => "Margin atas wajib di isi.",
"quantity_decimals" => "Desimal untuk Jumlah",
"quick_cash_enable" => "",
"quote_default_comments" => "Komentar faktur",
"receipt" => "Struk Penerimaan",
"receipt_category" => "",
"receipt_configuration" => "Struk Print Settings",
"receipt_default" => "Default",
"receipt_font_size" => "Ukuran Font",
"receipt_font_size_number" => "Ukuran font harus berupa angka.",
"receipt_font_size_required" => "Ukuran font harus diisi.",
"receipt_info" => "Struk Konfigurasi Informasi",
"receipt_printer" => "Tiket Printer",
"receipt_short" => "Ringkas",
"receipt_show_company_name" => "Tampilkan nama perusahaan",
"receipt_show_description" => "Tampilkan deskripsi",
"receipt_show_serialnumber" => "Tampilkan nomor seri",
"receipt_show_tax_ind" => "Tampilkan Indikator Pajak",
"receipt_show_taxes" => "Tampilkan pajak",
"receipt_show_total_discount" => "Tampilkan total diskon",
"receipt_template" => "Template struk",
"receiving_calculate_average_price" => "Menghitung harga rata-rata (Penerimaan)",
"recv_invoice_format" => "Format Faktur",
"register_mode_default" => "Default register mode",
"report_an_issue" => "Laporkan masalah",
"return_policy_required" => "Kebijakan retur wajib diisi.",
"reward" => "Hadiah",
"reward_configuration" => "Konfigurasi Hadiah",
"right" => "Kanan",
"sales_invoice_format" => "Format Faktur Penjualan",
"sales_quote_format" => "Format Penawaran Penjualan",
"saved_successfully" => "Konfigurasi berhasil disimpan.",
"saved_unsuccessfully" => "Konfigurasi tidak berhasil disimpan.",
"security_issue" => "Peringatan Kerentanan Keamanan",
"server_notice" => "Silakan gunakan info di bawah ini untuk pelaporan masalah.",
"service_charge" => "",
"show_due_enable" => "",
"show_office_group" => "Tampilkan ikon kantor",
"statistics" => "Kirim statistik",
"statistics_tooltip" => "Kirim statistik untuk pengembangan dan peningkatan fitur.",
"stock_location" => "Lokasi Stock",
"stock_location_duplicate" => "Gunakan nama yang unik untuk lokasi stock.",
"stock_location_invalid_chars" => "Nama lokasi tidak boleh berisi karakter '_'.",
"stock_location_required" => "Nomor lokasi stock harus diisi.",
"suggestions_fifth_column" => "",
"suggestions_first_column" => "Kolom 1",
"suggestions_fourth_column" => "",
"suggestions_layout" => "Tampilan Saran Pencarian",
"suggestions_second_column" => "Kolom 2",
"suggestions_third_column" => "Kolom 3",
"system_conf" => "Setting & Conf",
"system_info" => "System Info",
"table" => "Meja",
"table_configuration" => "Konfigurasi Meja",
"takings_printer" => "Struk Printer",
"tax" => "Pajak",
"tax_category" => "Kategori Pajak",
"tax_category_duplicate" => "Kategori pajak yang dimasukkan sudah ada.",
"tax_category_invalid_chars" => "Kategori pajak yang dimasukkan tidak valid.",
"tax_category_required" => "Kategori pajak dibutuhkan.",
"tax_category_used" => "Kategori pajak tidak bisa dihapus karena sedang digunakan.",
"tax_configuration" => "Konfigurasi Pajak",
"tax_decimals" => "Pajak Decimals",
"tax_id" => "Id Pajak",
"tax_included" => "Dikenakan Pajak",
"theme" => "Tema",
"theme_preview" => "Pratinjau Tema:",
"thousands_separator" => "Pemisah Ribuan",
"timezone" => "Zona Waktu",
"timezone_error" => "Zona Waktu OSPOS berbeda dari Zona Waktu Anda.",
"top" => "Atas",
"use_destination_based_tax" => "Gunakan Pajak Berdasarkan Tujuan",
"user_timezone" => "Zona waktu lokal:",
"website" => "Situs Perusahaan",
"wholesale_markup" => "",
"work_order_enable" => "Dukungan Work Order",
"work_order_format" => "Format Work Order",
];

View File

@@ -1,57 +1,56 @@
<?php
return [
'account_number' => "Akun #",
'account_number_duplicate' => "Nomor akun ini telah ada di basis data.",
'available_points' => "Poin tersedia",
'available_points_value' => "",
'average' => "Rata-rata yang dihabiskan",
'avg_discount' => "Rata-rata diskon",
'basic_information' => "Informasi",
'cannot_be_deleted' => "Pelanggan terpilih tidak bisa dihapus. satu atau lebih dari pelanggan yang dipilih memiliki penjualan.",
'company_name' => "Perusahaan",
'confirm_delete' => "Apakah Anda yakin ingin menghapus pelanggan yang dipilih?",
'confirm_restore' => "Anda yakin akan mengembalikan pelanggan terpilih?",
'consent' => "Persetujuan pendaftaran",
'consent_required' => "Persetujuan pendaftaran adalah bidang yang harus diisi.",
'csv_import_failed' => "Gagal impor CSV",
'csv_import_nodata_wrongformat' => "Berkas yang Anda unggah tidak berisi data atau salah format.",
'csv_import_partially_failed' => "Impor pelanggan berhasil dwngan beberapa kesalahan:",
'csv_import_success' => "Impor pelanggan berhasil.",
'customer' => "Pelanggan",
'date' => "Tanggal",
'discount' => "Diskon",
'discount_fixed' => "Diskon Tetap",
'discount_percent' => "Persentase Diskon",
'discount_type' => "Jenis Diskon",
'email_duplicate' => "Alamat email telah digunakan.",
'employee' => "Karyawan",
'error_adding_updating' => "Kesalahan ketika menambah atau memperbaharui pelanggan.",
'import_items_csv' => "Impor pelanggan dari CSV",
'mailchimp_activity_click' => "Klik Email",
'mailchimp_activity_lastopen' => "Email yang terakhir dibuka",
'mailchimp_activity_open' => "Buka email",
'mailchimp_activity_total' => "Email terkirim",
'mailchimp_activity_unopen' => "Email belum dibuka",
'mailchimp_email_client' => "Klien email",
'mailchimp_info' => "MailChimp",
'mailchimp_member_rating' => "Peringkat",
'mailchimp_status' => "Status",
'mailchimp_vip' => "VIP",
'max' => "Max. dihabiskan",
'min' => "Min. dihabiskan",
'new' => "Pelanggan Baru",
'none_selected' => "Anda belum memilih pelanggan untuk dihapus.",
'one_or_multiple' => "Pelanggan",
'quantity' => "Kuantitas",
'stats_info' => "Statistik",
'successful_adding' => "Anda telah berhasil menambah pelanggan",
'successful_deleted' => "Berhasil menghapus Kartu Hadiah",
'successful_updating' => "Anda telah berhasil memperbarui pelanggan",
'tax_code' => "Kode pajak",
'tax_id' => "ID Pajak",
'taxable' => "Dikenakan pajak",
'total' => "Total",
'update' => "Ubah Pelanggan",
'rewards_package' => "Paket Hadiah",
"account_number" => "Akun #",
"account_number_duplicate" => "Nomor akun ini telah ada di basis data.",
"available_points" => "Poin tersedia",
"available_points_value" => "",
"average" => "Rata-rata yang dihabiskan",
"avg_discount" => "Rata-rata diskon",
"basic_information" => "Informasi",
"cannot_be_deleted" => "Pelanggan terpilih tidak bisa dihapus. satu atau lebih dari pelanggan yang dipilih memiliki penjualan.",
"company_name" => "Perusahaan",
"confirm_delete" => "Apakah Anda yakin ingin menghapus pelanggan yang dipilih?",
"confirm_restore" => "Anda yakin akan mengembalikan pelanggan terpilih?",
"consent" => "Persetujuan pendaftaran",
"consent_required" => "Persetujuan pendaftaran adalah bidang yang harus diisi.",
"csv_import_failed" => "Impor dari CSV gagal",
"csv_import_nodata_wrongformat" => "Berkas yang Anda unggah tidak berisi data atau salah format.",
"csv_import_partially_failed" => "Impor pelanggan berhasil dwngan beberapa kesalahan:",
"csv_import_success" => "Impor pelanggan berhasil.",
"customer" => "Pelanggan",
"date" => "Tanggal",
"discount" => "Diskon",
"discount_fixed" => "Diskon Tetap",
"discount_percent" => "Persentase Diskon",
"discount_type" => "Jenis Diskon",
"email_duplicate" => "Alamat email telah digunakan.",
"employee" => "Karyawan",
"error_adding_updating" => "Kesalahan ketika menambah atau memperbaharui pelanggan.",
"import_items_csv" => "Impor pelanggan dari CSV",
"mailchimp_activity_click" => "Klik Email",
"mailchimp_activity_lastopen" => "Email yang terakhir dibuka",
"mailchimp_activity_open" => "Buka email",
"mailchimp_activity_total" => "Email terkirim",
"mailchimp_activity_unopen" => "Email belum dibuka",
"mailchimp_email_client" => "Klien email",
"mailchimp_info" => "MailChimp",
"mailchimp_member_rating" => "Peringkat",
"mailchimp_status" => "Status",
"mailchimp_vip" => "VIP",
"max" => "Max. dihabiskan",
"min" => "Min. dihabiskan",
"new" => "Pelanggan Baru",
"none_selected" => "Anda belum memilih pelanggan untuk dihapus.",
"one_or_multiple" => "Pelanggan",
"quantity" => "Kuantitas",
"stats_info" => "Statistik",
"successful_adding" => "Anda telah berhasil menambah pelanggan",
"successful_deleted" => "Anda telah berhasil menghapus pelanggan",
"successful_updating" => "Anda telah berhasil memperbarui pelanggan",
"tax_code" => "Kode pajak",
"tax_id" => "ID Pajak",
"taxable" => "Dikenakan pajak",
"total" => "Total",
"update" => "Ubah Pelanggan",
"rewards_package" => "Paket Hadiah",
];

View File

@@ -1,45 +1,44 @@
<?php
return [
'administrator' => "",
'basic_information' => "Informasi Karyawan",
'cannot_be_deleted' => "Karyawan terpilih tidak bisa dihapus satu atau lebih dari para pekerja telah memproses penjualan atau Anda mencoba untuk menghapus diri Anda sendiri.",
'change_employee' => "",
'change_password' => "Ubah kata kunci",
'clerk' => "",
'commission' => "",
'confirm_delete' => "Apakah Anda yakin ingin menghapus karyawan yang dipilih?",
'confirm_restore' => "Anda yakin ingin mengembalikan karyawan terpilih?",
'current_password' => "Kata kunci sekarang",
'current_password_invalid' => "Kata kunci sekarang salah.",
'employee' => "Karyawan",
'error_adding_updating' => "Kesalahan menambah / memperbarui karyawan.",
'error_deleting_demo_admin' => "Anda tidak dapat menghapus Demo admin user.",
'error_updating_demo_admin' => "Anda tidak dapat mengubah Demo admin user.",
'language' => "Bahasa",
'login_info' => "Info Login Karyawan",
'manager' => "",
'new' => "Karyawan Baru",
'none_selected' => "Anda belum memilih karyawan untuk dihapus.",
'one_or_multiple' => "Karyawan",
'password' => "Kata Sandi",
'password_minlength' => "Kata kunci minimal terdiri dari 8 karakter.",
'password_must_match' => "Kata Sandi tidak cocok.",
'password_not_must_match' => "Kata kunci sekarang dan kata kunci baru harus unik.",
'password_required' => "Kata Sandi wajib diisi.",
'permission_desc' => "Tandai kotak di bawah ini untuk memberikan akses ke Modul.",
'permission_info' => "Hak Akses Karyawan",
'repeat_password' => "Ulang Kata Sandi",
'subpermission_required' => "Paling tidak tambahkan satu hak akses untuk setiap modul.",
'successful_adding' => "Anda telah berhasil menambahkan karyawan.",
'successful_change_password' => "Kata kunci berhasil diubah.",
'successful_deleted' => "Berhasil menghapus Kartu Hadiah",
'successful_updating' => "Anda telah berhasil memperbarui karyawan",
'system_language' => "Bahasa Sistem",
'unsuccessful_change_password' => "Gagal mengubah kata sandi.",
'update' => "Ubah Karyawan",
'username' => "Nama Pengguna",
'username_duplicate' => "Nama pengguna karyawan sudah digunakan. Silakan pilih yang lain.",
'username_minlength' => "Nama Pengguna minimal 5 huruf.",
'username_required' => "Nama Pengguna wajib diisi.",
"administrator" => "",
"basic_information" => "Informasi Karyawan",
"cannot_be_deleted" => "Karyawan terpilih tidak bisa dihapus satu atau lebih dari para pekerja telah memproses penjualan atau Anda mencoba untuk menghapus diri Anda sendiri.",
"change_employee" => "",
"change_password" => "Ubah kata kunci",
"clerk" => "",
"commission" => "",
"confirm_delete" => "Apakah Anda yakin ingin menghapus karyawan yang dipilih?",
"confirm_restore" => "Anda yakin ingin mengembalikan karyawan terpilih?",
"current_password" => "Kata kunci sekarang",
"current_password_invalid" => "Kata kunci sekarang salah.",
"employee" => "Karyawan",
"error_adding_updating" => "Kesalahan menambah / memperbarui karyawan.",
"error_deleting_demo_admin" => "Anda tidak dapat menghapus Demo admin user.",
"error_updating_demo_admin" => "Anda tidak dapat mengubah Demo admin user.",
"language" => "Bahasa",
"login_info" => "Info Login Karyawan",
"manager" => "",
"new" => "Karyawan Baru",
"none_selected" => "Anda belum memilih karyawan untuk dihapus.",
"one_or_multiple" => "Karyawan",
"password" => "Kata Sandi",
"password_minlength" => "Kata kunci minimal terdiri dari 8 karakter.",
"password_must_match" => "Kata Sandi tidak cocok.",
"password_not_must_match" => "Kata kunci sekarang dan kata kunci baru harus unik.",
"password_required" => "Kata Sandi wajib diisi.",
"permission_desc" => "Tandai kotak di bawah ini untuk memberikan akses ke Modul.",
"permission_info" => "Hak Akses Karyawan",
"repeat_password" => "Ulang Kata Sandi",
"subpermission_required" => "Paling tidak tambahkan satu hak akses untuk setiap modul.",
"successful_adding" => "Anda telah berhasil menambahkan karyawan.",
"successful_change_password" => "Kata kunci berhasil diubah.",
"successful_deleted" => "Anda telah berhasil menghapus",
"successful_updating" => "Anda telah berhasil memperbarui karyawan",
"system_language" => "Bahasa Sistem",
"unsuccessful_change_password" => "Gagal mengubah kata sandi.",
"update" => "Ubah Karyawan",
"username" => "Nama Pengguna",
"username_duplicate" => "Nama pengguna karyawan sudah digunakan. Silakan pilih yang lain.",
"username_minlength" => "Nama Pengguna minimal 5 huruf.",
"username_required" => "Nama Pengguna wajib diisi.",
];

View File

@@ -1,72 +1,71 @@
<?php
return [
'add_minus' => "Tambah atau kurangi Inventori.",
'allow_alt_description' => "Izinkan Deskripsi Alternatif",
'bulk_edit' => "Ubah Massal",
'cannot_be_deleted' => "Kartu Hadiah tidak dapat dihapus, satu atau beberapa di antaranya memiliki penjualan.",
'cannot_find_giftcard' => "Kartu Hadiah tidak ditemukan.",
'cannot_use' => "Kartu Hadiah {0} tidak dapat digunakan: Pelanggan tidak valid.",
'card_value' => "Nilai",
'category' => "Kategori",
'change_all_to_allow_alt_desc' => "Izinkan deskripsi alternatif untuk semua.",
'change_all_to_not_allow_allow_desc' => "Tidak diizinkan deskripsi alternatif untuk semua.",
'change_all_to_serialized' => "Ubah semua jadi berseri",
'change_all_to_unserialized' => "Ubah semua menjadi tidak berseri",
'confirm_bulk_edit' => "Apakah Anda ingin edit Kartu Hadiah terpilih?",
'confirm_delete' => "Anda yakin ingin menghapus Kartu Hadiah terpilih?",
'confirm_restore' => "Anda yakin ingin memulihkan Kartu Hadiah terpilih?",
'cost_price' => "Harga Beli",
'count' => "Mutasi Inventori",
'csv_import_failed' => "Impor dari CSV gagal.",
'current_quantity' => "Jumlah saat ini",
'description' => "Deskripsi",
'details_count' => "Jumlah Detail Inventori",
'do_nothing' => "Tidak ada Perubahan",
'edit_fields_you_want_to_update' => "Edit kolom yang diinginkan pada Kartu Hadiah terpilih.",
'edit_multiple_giftcards' => "Edit beberapa Kartu Hadiah.",
'error_adding_updating' => "Gagal menambah atau memperbarui Kartu Hadiah.",
'error_updating_multiple' => "Gagal memperbaharui Kartu Hadiah.",
'generate_barcodes' => "Buat Barcode",
'giftcard' => "Kartu Hadiah",
'giftcard_number' => "Nomor Kartu Hadiah",
'info_provided_by' => "Info disediakan oleh",
'inventory_comments' => "Keterangan",
'is_serialized' => "Kartu Hadiah memiliki nomor seri",
'low_inventory_giftcards' => "Kartu Hadiah Inventori Rendah",
'manually_editing_of_quantity' => "Edit manual kuantitas",
'must_select_giftcard_for_barcode' => "Anda harus pilih setidaknya satu (1) Kartu Hadiah untuk membuat barcode.",
'new' => "Kartu Hadiah baru",
'no_description_giftcards' => "Tidak ada deskripsi Kartu Hadiah",
'no_giftcards_to_display' => "Tidak ada Kartu Hadiah yang ditampilkan.",
'none' => "Tidak Ada",
'none_selected' => "Belum ada Kartu Hadiah terpilih untuk diedit.",
'number' => "Nomor Kartu Hadiah harus angka.",
'number_information' => "Nomor Kartu Hadiah",
'number_required' => "Nomor Kartu Hadiah wajib diisi.",
'one_or_multiple' => "Kartu Hadiah",
'person_id' => "Pelanggan",
'quantity' => "Jumlah",
'quantity_required' => "Jumlah wajib diisi. Silahkan tutup ( X ) untuk batal.",
'remaining_balance' => "Kartu Hadiah {0} tersisa {1}!",
'reorder_level' => "Level pesan ulang",
'retrive_giftcard_info' => "Informasi Kartu Hadiah",
'sales_tax_1' => "Pajak Penjualan",
'sales_tax_2' => "Pajak Penjualan 2",
'serialized_giftcards' => "Kartu Hadiah berseri",
'successful_adding' => "Berhasil menambahkan Kartu Hadiah",
'successful_bulk_edit' => "Berhasil memperbarui Kartu Hadiah terpilih",
'successful_deleted' => "Berhasil menghapus Kartu Hadiah",
'successful_updating' => "Berhasil perbarui Kartu Hadiah",
'supplier' => "Pemasok",
'tax_1' => "Pajak 1",
'tax_2' => "Pajak 2",
'tax_percent' => "Persentasi Pajak",
'tax_percents' => "Persentase Pajak",
'unit_price' => "Harga Jual",
'upc_database' => "Basis data Barcode",
'update' => "Perbarui Kartu Hadiah",
'use_inventory_menu' => "Gunakan Inv. Menu",
'value' => "Nilai Kartu Hadiah harus angka.",
'value_required' => "Nilai Kartu Hadiah wajib diisi.",
"add_minus" => "Penambahan atau pengurangan inventory.",
"allow_alt_description" => "Deskripsi Alternatif dimungkinkan",
"bulk_edit" => "Ubah Massal",
"cannot_be_deleted" => "Tidak dapat menghapus GiftCard terpilih, Satu atau lebih GiftCard yang dipilih memiliki Penjualan.",
"cannot_find_giftcard" => "Informasi GiftCard tidak ditemukan.",
"cannot_use" => "Giftcard {0} tidak dapat digunakan: Pelanggan tidak valid.",
"card_value" => "Nilai",
"category" => "Kategori",
"change_all_to_allow_alt_desc" => "Diijinkan deskripsi alternatif untuk semua.",
"change_all_to_not_allow_allow_desc" => "Tidak diijinkan deskripsi alternatif untuk semua.",
"change_all_to_serialized" => "Ubah semua menggunakan nomor serial",
"change_all_to_unserialized" => "Ubah semua tanpa nomor serial",
"confirm_bulk_edit" => "Apakah Anda yakin ingin merubah semua GiftCard yang dipilih?",
"confirm_delete" => "Apakah anda yakin ingin menghapus GiftCard yang dipilih?",
"confirm_restore" => "Apakah Anda yakin akan mengembalikan Gift Card terpilih?",
"cost_price" => "Harga Pokok",
"count" => "Mutasi/Penyesuaian Inventori",
"csv_import_failed" => "Impor dari CSV gagal.",
"current_quantity" => "Jumlah saat ini",
"description" => "Deskripsi",
"details_count" => "Jumlah Detail Inventori",
"do_nothing" => "Tidak ada Perubahan",
"edit_fields_you_want_to_update" => "Ubah bagian yang ingin Anda edit untuk SEMUA GiftCard yang dipilih.",
"edit_multiple_giftcards" => "Ubah beberapa GiftCard.",
"error_adding_updating" => "Kesalahan ketika menambahkan/memperbaharui GiftCard.",
"error_updating_multiple" => "Gagal memperbaharui Giftcard.",
"generate_barcodes" => "Buat Barcode",
"giftcard" => "GiftCard",
"giftcard_number" => "Nomor GiftCard",
"info_provided_by" => "Informasi disediakan oleh",
"inventory_comments" => "Keterangan",
"is_serialized" => "GiftCard Memiliki Nomor Serial",
"low_inventory_giftcards" => "GiftCard Inventori Rendah",
"manually_editing_of_quantity" => "Perubahan jumlah Stok secara manual",
"must_select_giftcard_for_barcode" => "Anda harus memilih minimal satu (1) GiftCard untuk membuat Barcode.",
"new" => "GiftCard Baru",
"no_description_giftcards" => "Tidak ada Deskripsi Gift Card",
"no_giftcards_to_display" => "Tidak ada GiftCard yang ditampilkan.",
"none" => "Tidak Ada",
"none_selected" => "Anda belum memilih GiftCard untuk diubah.",
"number" => "Nomor GiftCard harus angka.",
"number_information" => "Nomor GiftCard",
"number_required" => "Nomor GiftCard wajib diisi.",
"one_or_multiple" => "GiftCard",
"person_id" => "Nomor Pelanggan",
"quantity" => "Jumlah",
"quantity_required" => "Jumlah wajib diisi. Silahkan tutup ( X ) untuk batal.",
"remaining_balance" => "Giftcard {0} tersisa {1}!",
"reorder_level" => "Level Pesan Ulang",
"retrive_giftcard_info" => "Informasi GiftCard",
"sales_tax_1" => "Pajak Penjualan",
"sales_tax_2" => "Pajak Penjualan 2",
"serialized_giftcards" => "Serial GiftCard",
"successful_adding" => "GiftCard telah berhasil ditambahkan",
"successful_bulk_edit" => "Anda telah berhasil memperbarui GiftCard yang dipilih",
"successful_deleted" => "GiftCard telah berhasil dihapus",
"successful_updating" => "GiftCard telah berhasil diperbarui",
"supplier" => "Pemasok",
"tax_1" => "Pajak 1",
"tax_2" => "Pajak 2",
"tax_percent" => "Persen Pajak",
"tax_percents" => "Persentase Pajak",
"unit_price" => "Harga Jual",
"upc_database" => "Database UPC",
"update" => "Ubah GiftCard",
"use_inventory_menu" => "Gunakan Inv. Menu",
"value" => "Nilai GiftCard harus angka.",
"value_required" => "Nilai GiftCard wajib diisi.",
];

View File

@@ -1,42 +1,41 @@
<?php
return [
'add_item' => "Tambah Item Barang",
'all' => "Semua",
'cannot_be_deleted' => "Item Paket tidak dapat dihapus.",
'confirm_delete' => "Apakah Anda yakin ingin menghapus Item Paket dipilih?",
'confirm_restore' => "Apakah Anda yakin untuk mengembalikan Kit Item yang terpilih?",
'description' => "Deskripsi Item Paket",
'discount' => "Diskon",
'discount_fixed' => "Diskon Tetap",
'discount_percent' => "Persentase Diskon",
'discount_type' => "Jenis Diskon",
'error_adding_updating' => "Tambah/Ubah Item Paket tidak berhasil.",
'find_kit_item' => "Paket Item",
'info' => "Item Paket Info",
'item' => "Item Barang",
'item_kit_number' => "Kode bar",
'item_kit_number_duplicate' => "Nomor Paket Item telah ada di basis data.",
'item_number' => "",
'item_number_duplicate' => "",
'items' => "Item Barang",
'kit' => "ID Paket",
'kit_and_components' => "Kit dan komponen",
'kit_and_stock' => "Kit dan Stok",
'kit_only' => "Hanya Kit",
'name' => "Nama Item Paket",
'new' => "Item Paket Baru",
'no_item_kits_to_display' => "Tidak ada Item Paket yang ditampilkan.",
'none_selected' => "Anda belum memilih satupun Item Paket.",
'one_or_multiple' => "Item Paket",
'price_option' => "Opsi Harga",
'priced_only' => "Hanya Harga",
'print_option' => "Opsi Cetak",
'quantity' => "Jumlah",
'sequence' => "Urutan",
'successful_adding' => "Item Paket Baru berhasil ditambahkan",
'successful_deleted' => "Berhasil menghapus Kartu Hadiah",
'successful_updating' => "Item Paket berhasil dirubah",
'unit_price' => "",
'update' => "Ubah Item Paket",
"add_item" => "Tambah Item Barang",
"all" => "Semua",
"cannot_be_deleted" => "Item Paket tidak dapat dihapus.",
"confirm_delete" => "Apakah Anda yakin ingin menghapus Item Paket dipilih?",
"confirm_restore" => "Apakah Anda yakin untuk mengembalikan Kit Item yang terpilih?",
"description" => "Deskripsi Item Paket",
"discount" => "Diskon",
"discount_fixed" => "Diskon Tetap",
"discount_percent" => "Persentase Diskon",
"discount_type" => "Jenis Diskon",
"error_adding_updating" => "Tambah/Ubah Item Paket tidak berhasil.",
"find_kit_item" => "Paket Item",
"info" => "Item Paket Info",
"item" => "Item Barang",
"item_kit_number" => "Kode bar",
"item_kit_number_duplicate" => "Nomor Paket Item telah ada di basis data.",
"item_number" => "",
"item_number_duplicate" => "",
"items" => "Item Barang",
"kit" => "ID Paket",
"kit_and_components" => "Kit dan komponen",
"kit_and_stock" => "Kit dan Stok",
"kit_only" => "Hanya Kit",
"name" => "Nama Item Paket",
"new" => "Item Paket Baru",
"no_item_kits_to_display" => "Tidak ada Item Paket yang ditampilkan.",
"none_selected" => "Anda belum memilih satupun Item Paket.",
"one_or_multiple" => "Item Paket",
"price_option" => "Opsi Harga",
"priced_only" => "Hanya Harga",
"print_option" => "Opsi Cetak",
"quantity" => "Jumlah",
"sequence" => "Urutan",
"successful_adding" => "Item Paket Baru berhasil ditambahkan",
"successful_deleted" => "Item Paket berhasil dihapus",
"successful_updating" => "Item Paket berhasil dirubah",
"unit_price" => "",
"update" => "Ubah Item Paket",
];

View File

@@ -1,8 +1,7 @@
<?php
return [
'add_minus' => "Tambah atau kurangi Inventori.",
'allow_alt_description' => "Izinkan Deskripsi Alternatif",
return [
'add_minus' => "Menambah atau mengurangi Inventori.",
'allow_alt_description' => "Deskripsi Alternatif dimungkinkan",
'amount_entry' => "Jumlah entri",
'bulk_edit' => "Ubah Massal",
'buy_price_required' => "Harga Beli wajib diisi.",
@@ -14,22 +13,22 @@ return [
'category_required' => "Kategori wajib diisi.",
'change_all_to_allow_alt_desc' => "Izinkan deskripsi alternatif untuk semua.",
'change_all_to_not_allow_allow_desc' => "Tidak diizinkan deskripsi alternatif untuk semua.",
'change_all_to_serialized' => "Ubah semua jadi berseri",
'change_all_to_unserialized' => "Ubah semua menjadi tidak berseri",
'change_all_to_serialized' => "Ubah semua menggunakan nomor serial",
'change_all_to_unserialized' => "Ubah semua tanpa nomor serial",
'change_image' => "Ubah Gambar",
'confirm_bulk_edit' => "Anda yakin ingin mengubah semua item terpilih?",
'confirm_bulk_edit' => "Apakah Anda yakin ingin merubah semua item yang dipilih?",
'confirm_bulk_edit_wipe_taxes' => "Semua item informasi pajak akan diganti.",
'confirm_delete' => "Anda yakin ingin menghapus item terpilih?",
'confirm_delete' => "Apakah Anda yakin ingin menghapus item yang dipilih?",
'confirm_restore' => "Anda yakin ingin mengembalikan item terpilih?",
'cost_price' => "Harga Beli",
'cost_price_number' => "Harga beli harus berupa angka.",
'cost_price_required' => "Harga beli harus diisi.",
'count' => "Mutasi Inventori",
'csv_import_failed' => "Gagal impor CSV",
'csv_import_nodata_wrongformat' => "Berkas CSV terunggah tidak berisi data atau formatnya salah.",
'csv_import_partially_failed' => "Terdapat {0} item gagal impor pada baris: {1}. Tidak ada baris yang diimpor.",
'csv_import_success' => "Impor item CSV berhasil.",
'current_quantity' => "Jumlah saat ini",
'count' => "Mutasi/Penyesuaian Inventori",
'csv_import_failed' => "Impor dari CSV tidak berhasil dilakukan",
'csv_import_nodata_wrongformat' => "Berkas unggahan tidak berisi data atau format salah.",
'csv_import_partially_failed' => "Terdapat {0} item yang gagal diimpor pada baris: {1}. Tidak ada kolom yang diimpor.",
'csv_import_success' => "Impor item berhasil.",
'current_quantity' => "Jumlah Saat ini",
'default_pack_name' => "Setiap",
'description' => "Deskripsi",
'details_count' => "Jumlah Detail Inventori",
@@ -64,7 +63,7 @@ return [
'location' => "Lokasi Barang",
'low_inventory_items' => "Daftar Stock Rendah",
'low_sell_item' => "Produk dengan Penjualan yang Rendah",
'manually_editing_of_quantity' => "Edit manual kuantitas",
'manually_editing_of_quantity' => "Perubahan jumlah Stok secara manual",
'markup' => "",
'name' => "Nama Barang",
'name_required' => "Nama item wajib diisi.",
@@ -84,7 +83,7 @@ return [
'quantity_required' => "Jumlah wajib diisi.",
'receiving_quantity' => "Jumlah per penerimaan",
'remove_image' => "Hapus gambar",
'reorder_level' => "Level pesan ulang",
'reorder_level' => "Batas pesan ulang",
'reorder_level_number' => "Batas pesan ulang harus berupa angka.",
'reorder_level_required' => "Batas pesan ulang wajib diisi.",
'retrive_item_info' => "Dapatkan Info Barang",
@@ -99,7 +98,7 @@ return [
'stock_type' => "Jenis Stok",
'successful_adding' => "Item Barang telah berhasil ditambahkan",
'successful_bulk_edit' => "Anda telah berhasil memperbarui item yang dipilih",
'successful_deleted' => "Berhasil menghapus Kartu Hadiah",
'successful_deleted' => "Item Barang telah berhasil dihapus",
'successful_updating' => "Item Barang telah berhasil diperbarui",
'supplier' => "Pemasok",
'tax_1' => "Pajak 1",
@@ -115,7 +114,7 @@ return [
'unit_price' => "Harga Jual",
'unit_price_number' => "Harga satuan harus berupa angka.",
'unit_price_required' => "Harga Jual wajib diisi.",
'upc_database' => "Basis data Barcode",
'upc_database' => "Database UPC",
'update' => "Ubah",
'use_inventory_menu' => "Gunakan Inv. Menu",
];

View File

@@ -1,59 +1,58 @@
<?php
return [
'amount_due' => "",
'cancel_receiving' => "Batal",
'cannot_be_deleted' => "Tidak bisa dihapus.",
'comments' => "Keterangan",
'complete_receiving' => "Selesai",
'confirm_cancel_receiving' => "Apakah anda yakin untuk menghapus Pembelian Barang masuk ini? Semua item Akan dihapus.",
'confirm_delete' => "Apakah Anda yakin akan hapus penerimaan ini? Tindakan ini tidak bisa dibatalkan.",
'confirm_finish_receiving' => "Apakah anda yakin untuk memproses Pembelian Barang masuk ini? Proses ini tidak dapat dibatalkan.",
'confirm_restore' => "",
'cost' => "Harga",
'daily' => "",
'date' => "Tanggal",
'date_required' => "Tanggal harus diisi.",
'date_type' => "Kolom tanggal harus diisi.",
'delete_entire_sale' => "Hapus Semua Penjualan",
'discount' => "Diskon",
'edit' => "Ubah",
'edit_sale' => "Ubah Pembelian",
'employee' => "Karyawan",
'error_editing_item' => "Ubah Item barang gagal.",
'error_requisition' => "Tidak dapat memindahkan Persediaan dari atau ke Lokasi yang Sama.",
'find_or_scan_item' => "Cari/Scan Item",
'find_or_scan_item_or_receipt' => "Temukan atau pindai Item atau Faktur",
'id' => "ID Pembelian",
'item_name' => "Nama Item",
'mode' => "Jenis Pembelian",
'new_supplier' => "Pemasok Baru",
'one_or_multiple' => "penerimaan",
'print_after_sale' => "Cetak Faktur setelah penjualan",
'quantity' => "Jumlah",
'receipt' => "Faktur Pembelian",
'receipt_number' => "No. Faktur Pembelian",
'receiving' => "Barang Masuk",
'reference' => "Referensi",
'register' => "Pembelian Barang Masuk",
'requisition' => "Daftar Permintaan",
'return' => "Retur",
'select_supplier' => "Pilih Pemasok (Opsional)",
'ship_pack' => "Paket Pengiriman",
'start_typing_supplier_name' => "Ketik nama pemasok ...",
'stock' => "Stok",
'stock_destination' => "Tujuan Stok",
'stock_locaiton' => "Lokasi Stok",
'stock_source' => "Asal Stok",
'successfully_deleted' => "Berhasil Dihapus",
'successfully_updated' => "Berhasil Diperbaharui",
'supplier' => "Pemasok",
'supplier_address' => "Alamat",
'supplier_email' => "Email",
'supplier_location' => "Lokasi",
'total' => "Total",
'transaction_failed' => "Transaksi Pembelian gagal.",
'unable_to_add_item' => "Penambahan Item kedalam Pembelian Barang gagal.",
'unsuccessfully_updated' => "Pembelian barang gagal Diperbaharui.",
'update' => "Memperbarui",
"amount_due" => "",
"cancel_receiving" => "Batal",
"cannot_be_deleted" => "Tidak bisa dihapus.",
"comments" => "Keterangan",
"complete_receiving" => "Selesai",
"confirm_cancel_receiving" => "Apakah anda yakin untuk menghapus Pembelian Barang masuk ini? Semua item Akan dihapus.",
"confirm_delete" => "Apakah Anda yakin akan hapus penerimaan ini? Tindakan ini tidak bisa dibatalkan.",
"confirm_finish_receiving" => "Apakah anda yakin untuk memproses Pembelian Barang masuk ini? Proses ini tidak dapat dibatalkan.",
"confirm_restore" => "",
"cost" => "Harga",
"daily" => "",
"date" => "Tanggal",
"date_required" => "Tanggal harus diisi.",
"date_type" => "Kolom tanggal harus diisi.",
"delete_entire_sale" => "Hapus Semua Penjualan",
"discount" => "Diskon",
"edit" => "Ubah",
"edit_sale" => "Ubah Pembelian",
"employee" => "Karyawan",
"error_editing_item" => "Ubah Item barang gagal.",
"error_requisition" => "Tidak dapat memindahkan Persediaan dari atau ke Lokasi yang Sama.",
"find_or_scan_item" => "Cari/Scan Item",
"find_or_scan_item_or_receipt" => "Cari/Scan Item atau Faktur",
"id" => "ID Pembelian",
"item_name" => "Nama Item",
"mode" => "Jenis Pembelian",
"new_supplier" => "Pemasok Baru",
"one_or_multiple" => "penerimaan",
"print_after_sale" => "Cetak Faktur setelah penjualan",
"quantity" => "Jumlah",
"receipt" => "Faktur Pembelian",
"receipt_number" => "No. Faktur Pembelian",
"receiving" => "Barang Masuk",
"reference" => "Referensi",
"register" => "Pembelian Barang Masuk",
"requisition" => "Daftar Permintaan",
"return" => "Retur",
"select_supplier" => "Pilih Pemasok (Opsional)",
"ship_pack" => "Paket Pengiriman",
"start_typing_supplier_name" => "Ketik nama pemasok ...",
"stock" => "Stok",
"stock_destination" => "Tujuan Stok",
"stock_locaiton" => "Lokasi Stok",
"stock_source" => "Asal Stok",
"successfully_deleted" => "Berhasil Dihapus",
"successfully_updated" => "Berhasil Diperbaharui",
"supplier" => "Pemasok",
"supplier_address" => "Alamat",
"supplier_email" => "Email",
"supplier_location" => "Lokasi",
"total" => "Total",
"transaction_failed" => "Transaksi Pembelian gagal.",
"unable_to_add_item" => "Penambahan Item kedalam Pembelian Barang gagal.",
"unsuccessfully_updated" => "Pembelian barang gagal Diperbaharui.",
"update" => "Memperbarui",
];

View File

@@ -1,149 +1,148 @@
<?php
return [
'all' => "Semua",
'authority' => "Otoritas",
'canceled' => "Dibatalkan",
'categories' => "Kategori",
'categories_summary_report' => "Laporan Ringkasan Kategori",
'category' => "Kategori",
'code_canceled' => "BTL",
'code_invoice' => "INV",
'code_pos' => "POS",
'code_quote' => "Q",
'code_return' => "RET",
'code_type' => "Tipe",
'code_work_order' => "W/O",
'comments' => "Catatan",
'commission' => "",
'complete' => "Penjualan dan Retur yang sukses",
'completed_sales' => "Penjualan yang Sukses",
'confirm_delete' => "Anda yakin ingin menghapus masukan terpilih?",
'confirm_restore' => "Anda yakin ingin mengembalikan entri terpilih?",
'cost' => "Grosir",
'cost_price' => "Harga Beli",
'count' => "Jumlah",
'customer' => "Pelanggan",
'customers' => "Pelanggan",
'customers_summary_report' => "Laporan Ringkasan Pelanggan",
'date' => "Tanggal",
'date_range' => "Rentang Tanggal",
'description' => "Deskripsi",
'detailed_receivings_report' => "Laporan Detail Barang Masuk",
'detailed_receivings_report_input' => "",
'detailed_reports' => "Perincian Laporan",
'detailed_requisition_report' => "Rincian Daftar Laporan Permintaan",
'detailed_sales_report' => "Laporan Perincian Penjualan",
'discount' => "Diskon",
'discount_fixed' => "Diskon Tetap",
'discount_percent' => "Persen Diskon",
'discount_type' => "Tipe Diskon",
'discounts' => "Diskon",
'discounts_summary_report' => "Laporan Ringkasan Diskon",
'earned' => "Poin yang diperoleh",
'employee' => "Karyawan",
'employees' => "Karyawan",
'employees_summary_report' => "Laporan Ringkasan Karyawan",
'expenses' => "Biaya",
'expenses_amount' => "Jumlah",
'expenses_categories' => "Biaya",
'expenses_categories_summary_report' => "Laporan RIngkasan Kategori Biaya",
'expenses_category' => "Kategori",
'expenses_payment_amount' => "",
'expenses_tax_amount' => "Pajak",
'expenses_total_amount' => "Jumlah Total",
'expenses_total_tax_amount' => "Total Pajak",
'graphical_reports' => "Laporan Dalam Bentuk Grafis",
'inventory' => "Laporan Persediaan",
'inventory_low' => "Laporan Persediaan Rendah",
'inventory_low_report' => "Laporan Persediaan Rendah",
'inventory_reports' => "Laporan Persediaan",
'inventory_summary' => "Laporan Ringkasan Persediaan",
'inventory_summary_report' => "Laporan Ringkasan Persediaan",
'item' => "Produk/Item",
'item_count' => "Filter Jumlah Item",
'item_name' => "Nama Barang",
'item_number' => "Kode batang",
'items' => "Produk/Item",
'items_purchased' => "Produk Dibeli",
'items_received' => "Barang Masuk",
'items_summary_report' => "Laporan Ringkasan Produk/Item",
'jurisdiction' => "Ranah hukum",
'low_inventory' => "Kurang Persediaan",
'low_inventory_report' => "Laporan Persediaan Kurang",
'low_sell_quantity' => "Jumlah penjualan yang rendah",
'more_than_zero' => "Stok belum habis",
'name' => "Nama",
'no_reports_to_display' => "Tidak ada item untuk ditampilkan.",
'payment_type' => "Tipe Pembayaran",
'payments' => "Pembayaran",
'payments_summary_report' => "Laporan Ringkasan Pembayaran",
'profit' => "Keuntungan/Laba",
'quantity' => "Jumlah",
'quantity_purchased' => "Jumlah Dibeli",
'quotes' => "Penawaran",
'received_by' => "Diterima Oleh",
'receiving_id' => "Id Penerima",
'receiving_type' => "Type Diterima",
'receivings' => "Barang Masuk",
'reorder_level' => "Level pesan ulang",
'report' => "Laporan",
'report_input' => "Input data Laporan",
'reports' => "Lihat dan Cetak Laporan",
'requisition' => "Daftar Permintaan",
'requisition_by' => "Daftar Permintaan Oleh",
'requisition_id' => "Identitas Peminta",
'requisition_item' => "Jenis Permintaan",
'requisition_item_quantity' => "Jumlah Permintaan",
'requisition_related_item' => "",
'requisition_related_item_total_quantity' => "Jumlah Item Barang",
'requisition_related_item_unit_quantity' => "Unit Item Barang",
'requisitions' => "Laporan Permintaan",
'returns' => "Retur",
'revenue' => "Pendapatan",
'sale_id' => "ID Penjualan",
'sale_type' => "Jenis Penjualan",
'sales' => "Penjualan",
'sales_amount' => "Jumlah Penjualan",
'sales_summary_report' => "Laporan Ringkasan Penjualan",
'sales_taxes' => "Pajak Penjualan",
'sales_taxes_summary_report' => "Laporan Ringkasan Pajak Penjualan",
'serial_number' => "No. Seri #",
'service_charge' => "",
'sold_by' => "Dijual Oleh",
'sold_items' => "",
'sold_to' => "Dijual Kepada",
'stock_location' => "Lokasi Stock",
'sub_total_value' => "Sub-total",
'subtotal' => "SubTotal",
'summary_reports' => "Laporan Ringkas",
'supplied_by' => "Pemasok",
'supplier' => "Pemasok",
'suppliers' => "Pemasok",
'suppliers_summary_report' => "Laporan Ringkasan Pemasok",
'tax' => "Pajak",
'tax_category' => "Kategori Pajak",
'tax_name' => "Nama Pajak",
'tax_percent' => "Persentasi Pajak",
'tax_rate' => "Tarif Pajak",
'taxes' => "Pajak",
'taxes_summary_report' => "Laporan Ringkasan Pajak",
'total' => "Total",
'total_inventory_value' => "Total Nilai Persediaan",
'total_low_sell_quantity' => "Total Jumlah Penjualan yang Rendah",
'total_quantity' => "Total Kuantitas",
'total_retail' => "Total Faktur Eceran Nilai",
'trans_amount' => "Jumlah Transaksi",
'trans_due' => "Hutang",
'trans_group' => "Kelompok Transaksi",
'trans_nopay_sales' => "Penjualan tanpa pembayaran",
'trans_payments' => "Pembayaran",
'trans_refunded' => "Dikembalikan",
'trans_sales' => "Penjualan",
'trans_type' => "Tipe Transaksi",
'type' => "Tipe",
'unit_price' => "Harga Jual",
'used' => "Poin yang telah digunakan",
'work_orders' => "Perintah Kerja",
'zero_and_less' => "Stok habis dan minus",
"all" => "Semua",
"authority" => "Otoritas",
"canceled" => "Dibatalkan",
"categories" => "Kategori",
"categories_summary_report" => "Laporan Ringkasan Kategori",
"category" => "Kategori",
"code_canceled" => "CNL",
"code_invoice" => "INV",
"code_pos" => "POS",
"code_quote" => "Q",
"code_return" => "RET",
"code_type" => "Tipe",
"code_work_order" => "W/O",
"comments" => "Catatan",
"commission" => "",
"complete" => "Penjualan dan Retur yang sukses",
"completed_sales" => "Penjualan yang Sukses",
"confirm_delete" => "Anda yakin ingin menghapus masukan terpilih?",
"confirm_restore" => "Anda yakin ingin mengembalikan entri terpilih?",
"cost" => "Grosir",
"cost_price" => "Harga Beli",
"count" => "Jumlah",
"customer" => "Pelanggan",
"customers" => "Pelanggan",
"customers_summary_report" => "Laporan Ringkasan Pelanggan",
"date" => "Tanggal",
"date_range" => "Rentang Tanggal",
"description" => "Deskripsi",
"detailed_receivings_report" => "Laporan Detail Barang Masuk",
"detailed_receivings_report_input" => "",
"detailed_reports" => "Perincian Laporan",
"detailed_requisition_report" => "Rincian Daftar Laporan Permintaan",
"detailed_sales_report" => "Laporan Perincian Penjualan",
"discount" => "Diskon",
"discount_fixed" => "Diskon Tetap",
"discount_percent" => "Persen Diskon",
"discount_type" => "Tipe Diskon",
"discounts" => "Diskon",
"discounts_summary_report" => "Laporan Ringkasan Diskon",
"earned" => "Poin yang diperoleh",
"employee" => "Karyawan",
"employees" => "Karyawan",
"employees_summary_report" => "Laporan Ringkasan Karyawan",
"expenses" => "Biaya",
"expenses_amount" => "Jumlah",
"expenses_categories" => "Biaya",
"expenses_categories_summary_report" => "Laporan RIngkasan Kategori Biaya",
"expenses_category" => "Kategori",
"expenses_payment_amount" => "",
"expenses_tax_amount" => "Pajak",
"expenses_total_amount" => "Jumlah Total",
"expenses_total_tax_amount" => "Total Pajak",
"graphical_reports" => "Laporan Dalam Bentuk Grafis",
"inventory" => "Laporan Persediaan",
"inventory_low" => "Laporan Persediaan Rendah",
"inventory_low_report" => "Laporan Persediaan Rendah",
"inventory_reports" => "Laporan Persediaan",
"inventory_summary" => "Laporan Ringkasan Persediaan",
"inventory_summary_report" => "Laporan Ringkasan Persediaan",
"item" => "Produk/Item",
"item_count" => "Filter Jumlah Item",
"item_name" => "Nama Barang",
"item_number" => "Kode batang",
"items" => "Produk/Item",
"items_purchased" => "Produk Dibeli",
"items_received" => "Barang Masuk",
"items_summary_report" => "Laporan Ringkasan Produk/Item",
"jurisdiction" => "Ranah hukum",
"low_inventory" => "Kurang Persediaan",
"low_inventory_report" => "Laporan Persediaan Kurang",
"low_sell_quantity" => "Jumlah penjualan yang rendah",
"more_than_zero" => "Stok belum habis",
"name" => "Nama",
"no_reports_to_display" => "Tidak ada item untuk ditampilkan.",
"payment_type" => "Tipe Pembayaran",
"payments" => "Pembayaran",
"payments_summary_report" => "Laporan Ringkasan Pembayaran",
"profit" => "Keuntungan/Laba",
"quantity" => "Jumlah",
"quantity_purchased" => "Jumlah Dibeli",
"quotes" => "Penawaran",
"received_by" => "Diterima Oleh",
"receiving_id" => "Id Penerima",
"receiving_type" => "Type Diterima",
"receivings" => "Barang Masuk",
"reorder_level" => "Level Pesan Ulang",
"report" => "Laporan",
"report_input" => "Input data Laporan",
"reports" => "Lihat dan Cetak Laporan",
"requisition" => "Daftar Permintaan",
"requisition_by" => "Daftar Permintaan Oleh",
"requisition_id" => "Identitas Peminta",
"requisition_item" => "Jenis Permintaan",
"requisition_item_quantity" => "Jumlah Permintaan",
"requisition_related_item" => "",
"requisition_related_item_total_quantity" => "Jumlah Item Barang",
"requisition_related_item_unit_quantity" => "Unit Item Barang",
"requisitions" => "Laporan Permintaan",
"returns" => "Retur",
"revenue" => "Pendapatan",
"sale_id" => "ID Penjualan",
"sale_type" => "Jenis Penjualan",
"sales" => "Penjualan",
"sales_amount" => "Jumlah Penjualan",
"sales_summary_report" => "Laporan Ringkasan Penjualan",
"sales_taxes" => "Pajak Penjualan",
"sales_taxes_summary_report" => "Laporan Ringkasan Pajak Penjualan",
"serial_number" => "No. Seri #",
"service_charge" => "",
"sold_by" => "Dijual Oleh",
"sold_items" => "",
"sold_to" => "Dijual Kepada",
"stock_location" => "Lokasi Stock",
"sub_total_value" => "Sub-total",
"subtotal" => "SubTotal",
"summary_reports" => "Laporan Ringkas",
"supplied_by" => "Pemasok",
"supplier" => "Pemasok",
"suppliers" => "Pemasok",
"suppliers_summary_report" => "Laporan Ringkasan Pemasok",
"tax" => "Pajak",
"tax_category" => "Kategori Pajak",
"tax_name" => "Nama Pajak",
"tax_percent" => "Persentase Pajak",
"tax_rate" => "Tarif Pajak",
"taxes" => "Pajak",
"taxes_summary_report" => "Laporan Ringkasan Pajak",
"total" => "Total",
"total_inventory_value" => "Total Nilai Persediaan",
"total_low_sell_quantity" => "Total Jumlah Penjualan yang Rendah",
"total_quantity" => "Total Kuantitas",
"total_retail" => "Total Faktur Eceran Nilai",
"trans_amount" => "Jumlah Transaksi",
"trans_due" => "Hutang",
"trans_group" => "Kelompok Transaksi",
"trans_nopay_sales" => "Penjualan tanpa pembayaran",
"trans_payments" => "Pembayaran",
"trans_refunded" => "Dikembalikan",
"trans_sales" => "Penjualan",
"trans_type" => "Tipe Transaksi",
"type" => "Tipe",
"unit_price" => "Harga Jual",
"used" => "Poin yang telah digunakan",
"work_orders" => "Perintah Kerja",
"zero_and_less" => "Stok habis dan minus",
];

View File

@@ -1,6 +1,5 @@
<?php
return [
return [
'customers_available_points' => "Poin tersedia",
'rewards_package' => "Hadiah",
'rewards_remaining_balance' => "Poin hadiah yang tersisa adalah ",
@@ -74,11 +73,11 @@ return [
'entry' => "Entri",
'error_editing_item' => "mengubah item salah",
'find_or_scan_item' => "Cari/Scan Item",
'find_or_scan_item_or_receipt' => "Temukan atau pindai Item atau Faktur",
'giftcard' => "Kartu Hadiah",
'find_or_scan_item_or_receipt' => "Cari atau Scan Item atau Faktur",
'giftcard' => "Kupon Bonus",
'giftcard_balance' => "Nilai Kupon Bonus",
'giftcard_filter' => "",
'giftcard_number' => "Nomor Kartu Hadiah",
'giftcard_number' => "Nomor Kartu Bonus",
'group_by_category' => "Dikelompokkan berdasarkan Kategori",
'group_by_type' => "Dikelompokkan berdasarkan Jenis",
'hsn' => "HSN",
@@ -86,7 +85,7 @@ return [
'include_prices' => "Termasuk Harga?",
'invoice' => "Faktur",
'invoice_confirm' => "Faktur ini akan dikirim ke",
'invoice_enable' => "Nomor Faktur",
'invoice_enable' => "Buat Faktur",
'invoice_filter' => "Faktur",
'invoice_no_email' => "Pelanggan ini tidak memiliki alamat email yang valid.",
'invoice_number' => "Nomor Nota",

View File

@@ -1,25 +1,24 @@
<?php
return [
'account_number' => "Nomor Akun Pemasok",
'agency_name' => "Nama",
'cannot_be_deleted' => "Tidak bisa dihapus pemasok yang dipilih, satu atau lebih dari pemasok yang dipilih memiliki penjualan.",
'category' => "Kategori",
'company_name' => "Nama Perusahaan",
'company_name_required' => "Nama Perusahaan wajib diisi.",
'confirm_delete' => "Apakah Anda yakin ingin menghapus pemasok yang dipilih?",
'confirm_restore' => "Anda yakin ingin mengembalikan Pemasok terpilih?",
'cost' => "Biaya Pemasok",
'error_adding_updating' => "Kesalahan Menambah / memperbarui data pemasok.",
'goods' => "Pemasok Barang",
'new' => "Pemasok Baru",
'none_selected' => "Anda belum memilih pemasok untuk dihapus.",
'one_or_multiple' => "Pemasok",
'successful_adding' => "Anda telah berhasil menambahkan data pemasok",
'successful_deleted' => "Berhasil menghapus Kartu Hadiah",
'successful_updating' => "Anda telah berhasil memperbarui data pemasok",
'supplier' => "Pemasok",
'supplier_id' => "ID",
'tax_id' => "ID Pajak",
'update' => "Ubah data Pemasok",
"account_number" => "Nomor Akun Pemasok",
"agency_name" => "Nama",
"cannot_be_deleted" => "Tidak bisa dihapus pemasok yang dipilih, satu atau lebih dari pemasok yang dipilih memiliki penjualan.",
"category" => "Kategori",
"company_name" => "Nama Perusahaan",
"company_name_required" => "Nama Perusahaan wajib diisi.",
"confirm_delete" => "Apakah Anda yakin ingin menghapus pemasok yang dipilih?",
"confirm_restore" => "Anda yakin ingin mengembalikan Pemasok terpilih?",
"cost" => "Biaya Pemasok",
"error_adding_updating" => "Kesalahan Menambah / memperbarui data pemasok.",
"goods" => "Pemasok Barang",
"new" => "Pemasok Baru",
"none_selected" => "Anda belum memilih pemasok untuk dihapus.",
"one_or_multiple" => "Pemasok",
"successful_adding" => "Anda telah berhasil menambahkan data pemasok",
"successful_deleted" => "Anda telah berhasil menghapus data pemasok",
"successful_updating" => "Anda telah berhasil memperbarui data pemasok",
"supplier" => "Pemasok",
"supplier_id" => "ID",
"tax_id" => "ID Pajak",
"update" => "Ubah data Pemasok",
];

View File

@@ -1,83 +1,82 @@
<?php
return [
'add_exception' => "Tambah pengecualian",
'cascade' => "Menurunkan",
'cascade_sequence' => "Urutan Penurunan",
'city' => "Kota",
'code' => "Kode",
'confirm_delete' => "Anda yakin ingin menghapus Kode Pajak ini? Aksi ini tidak dapat dibatalkan",
'confirm_restore' => "Anda yakin ingin mengembalikan Kode Pajak terpilih?",
'default_tax_category' => "Kategori Pajak Default",
'default_tax_rate' => "Taruf Pajak Default",
'error_adding_updating' => "Penambahan atau pembaharuan Kode Pajak gagal",
'group_seq' => "Urutan grup",
'jurisdiction_name' => "Nama Yuridiksi",
'name' => "Nama",
'new' => "Pajak baru",
'no_taxes' => "",
'no_taxes_to_display' => "Tidak ada Kode Pajak yang dapat ditampilkan",
'reporting_authority' => "Otoritas Pelaporan",
'round_half_down' => "Turun setengah",
'round_half_even' => "Setengah Genap",
'round_half_odd' => "Setengah Ganjil",
'round_half_up' => "Naikkan Setengah",
'rounding_code' => "Kode Pembulatan",
'sales_tax' => "Pajak Penjualan",
'sales_tax_by_invoice' => "Pajak Penjualan berdasarkan faktur",
'sequence' => "Urutan",
'state' => "Status",
'successful_deleted' => "Berhasil menghapus Kartu Hadiah",
'tax_categories' => "Kategori Pajak",
'tax_categories_configuration' => "Konfigurasi Kategori Pajak",
'tax_categories_saved_successfully' => "Perubahan Ketegori Pajak berhasil disimpan",
'tax_categories_saved_unsuccessfully' => "Perubahan Kategori Pajak tidak tersimpan",
'tax_category' => "Kategori pajak",
'tax_category_code' => "Kode Kategori Pajak",
'tax_category_duplicate' => "Kategori pajak ganda",
'tax_category_invalid_chars' => "terdapat karakter yang salah dalam nama kategori pajak",
'tax_category_name' => "Nama Kategori Pajak",
'tax_category_new' => "Kategori Pajak baru",
'tax_category_required' => "Kategori Pajak dibutuhkan",
'tax_code' => "Kode Pajak",
'tax_code_cannot_be_deleted' => "Gagal menghapus Kode Pajak",
'tax_code_duplicate' => "Kode Pajak ganda",
'tax_code_invalid_chars' => "Terdapat karakter yang salah dalam Kode Pajak",
'tax_code_name' => "Nama Kode Pajak",
'tax_code_required' => "Kode pajak harus diisi",
'tax_code_successful_deleted' => "Anda berhasil menghapus Kode Pajak",
'tax_code_successful_updated' => "Anda berhasil memperbaharui",
'tax_code_successful_updating' => "Anda berhasil memperbaharui Kode Pajak",
'tax_code_successfully_added' => "Anda berhasil menambahkan",
'tax_code_type' => "jenis Kode Pajak",
'tax_codes' => "Kode Pajak",
'tax_codes_configuration' => "Konfigurasi Kode Pajak",
'tax_codes_saved_successfully' => "Perubahan Kode Pajak berhasil disimpan",
'tax_codes_saved_unsuccessfully' => "Perubahan Kode Pajak tidak tersimpan",
'tax_excluded' => "Pengecualian Pajak",
'tax_group' => "Grup Pajak",
'tax_group_not_unique' => "Grup Pajak {0} tidak unik",
'tax_group_sequence' => "Urutan Grup Pajak",
'tax_included' => "Termasuk pajak",
'tax_jurisdiction' => "Yuridiksi Pajak",
'tax_jurisdiction_duplicate' => "Yuridiksi Pajak ganda",
'tax_jurisdiction_invalid_chars' => "Karakter yang salah pada Nama Yuridiksi",
'tax_jurisdiction_required' => "Diperlukan yurisdiksi Pajak",
'tax_jurisdictions' => "Yurisdiksi Pajak",
'tax_jurisdictions_configuration' => "Konfigurasi Yurisdiksi Pajak",
'tax_jurisdictions_saved_successfully' => "Perubahan Yurisdiksi Pajak berhasil disimpan",
'tax_jurisdictions_saved_unsuccessfully' => "Perubahan Yurisdiksi Pajak tidak tersimpan",
'tax_rate' => "Tarif Pajak",
'tax_rate_configuration' => "Konfigurasi Tarif Pajak",
'tax_rate_error_adding_updating' => "Gagal menambahkan atau memperbaharui Tarif Pajak",
'tax_rate_numeric' => "Tarif Pajak harus berupa angka",
'tax_rate_required' => "Tarif Pajak harus diisi",
'tax_rate_successful_updated' => "Anda berhasil melakukan perubahan",
'tax_rate_successfully_added' => "Anda berhasil menambahkan",
'tax_rates' => "Tarif Pajak",
'tax_rates_configuration' => "Konfigurasi Tarif Pajak",
'tax_rounding' => "Pembulatan Pajak",
'tax_type' => "Jenis Pajak",
'update' => "Perbaharui Tarif Pajak",
'vat_tax' => "PPN",
"add_exception" => "Tambah pengecualian",
"cascade" => "Menurunkan",
"cascade_sequence" => "Urutan Penurunan",
"city" => "Kota",
"code" => "Kode",
"confirm_delete" => "Anda yakin ingin menghapus Kode Pajak ini? Aksi ini tidak dapat dibatalkan",
"confirm_restore" => "Anda yakin ingin mengembalikan Kode Pajak terpilih?",
"default_tax_category" => "Kategori Pajak Default",
"default_tax_rate" => "Taruf Pajak Default",
"error_adding_updating" => "Penambahan atau pembaharuan Kode Pajak gagal",
"group_seq" => "Urutan grup",
"jurisdiction_name" => "Nama Yuridiksi",
"name" => "Nama",
"new" => "Pajak baru",
"no_taxes" => "",
"no_taxes_to_display" => "Tidak ada Kode Pajak yang dapat ditampilkan",
"reporting_authority" => "Otoritas Pelaporan",
"round_half_down" => "Turun setengah",
"round_half_even" => "Setengah Genap",
"round_half_odd" => "Setengah Ganjil",
"round_half_up" => "Naikkan Setengah",
"rounding_code" => "Kode Pembulatan",
"sales_tax" => "Pajak Penjualan",
"sales_tax_by_invoice" => "Pajak Penjualan berdasarkan faktur",
"sequence" => "Urutan",
"state" => "Status",
"successful_deleted" => "Anda berhasil dihapus",
"tax_categories" => "Kategori Pajak",
"tax_categories_configuration" => "Konfigurasi Kategori Pajak",
"tax_categories_saved_successfully" => "Perubahan Ketegori Pajak berhasil disimpan",
"tax_categories_saved_unsuccessfully" => "Perubahan Kategori Pajak tidak tersimpan",
"tax_category" => "Kategori pajak",
"tax_category_code" => "Kode Kategori Pajak",
"tax_category_duplicate" => "Kategori pajak ganda",
"tax_category_invalid_chars" => "terdapat karakter yang salah dalam nama kategori pajak",
"tax_category_name" => "Nama Kategori Pajak",
"tax_category_new" => "Kategori Pajak baru",
"tax_category_required" => "Kategori Pajak dibutuhkan",
"tax_code" => "Kode Pajak",
"tax_code_cannot_be_deleted" => "Gagal menghapus Kode Pajak",
"tax_code_duplicate" => "Kode Pajak ganda",
"tax_code_invalid_chars" => "Terdapat karakter yang salah dalam Kode Pajak",
"tax_code_name" => "Nama Kode Pajak",
"tax_code_required" => "Kode pajak harus diisi",
"tax_code_successful_deleted" => "Anda berhasil menghapus Kode Pajak",
"tax_code_successful_updated" => "Anda berhasil memperbaharui",
"tax_code_successful_updating" => "Anda berhasil memperbaharui Kode Pajak",
"tax_code_successfully_added" => "Anda berhasil menambahkan",
"tax_code_type" => "jenis Kode Pajak",
"tax_codes" => "Kode Pajak",
"tax_codes_configuration" => "Konfigurasi Kode Pajak",
"tax_codes_saved_successfully" => "Perubahan Kode Pajak berhasil disimpan",
"tax_codes_saved_unsuccessfully" => "Perubahan Kode Pajak tidak tersimpan",
"tax_excluded" => "Pengecualian Pajak",
"tax_group" => "Grup Pajak",
"tax_group_not_unique" => "Grup Pajak {0} tidak unik",
"tax_group_sequence" => "Urutan Grup Pajak",
"tax_included" => "Termasuk pajak",
"tax_jurisdiction" => "Yuridiksi Pajak",
"tax_jurisdiction_duplicate" => "Yuridiksi Pajak ganda",
"tax_jurisdiction_invalid_chars" => "Karakter yang salah pada Nama Yuridiksi",
"tax_jurisdiction_required" => "Diperlukan yurisdiksi Pajak",
"tax_jurisdictions" => "Yurisdiksi Pajak",
"tax_jurisdictions_configuration" => "Konfigurasi Yurisdiksi Pajak",
"tax_jurisdictions_saved_successfully" => "Perubahan Yurisdiksi Pajak berhasil disimpan",
"tax_jurisdictions_saved_unsuccessfully" => "Perubahan Yurisdiksi Pajak tidak tersimpan",
"tax_rate" => "Tarif Pajak",
"tax_rate_configuration" => "Konfigurasi Tarif Pajak",
"tax_rate_error_adding_updating" => "Gagal menambahkan atau memperbaharui Tarif Pajak",
"tax_rate_numeric" => "Tarif Pajak harus berupa angka",
"tax_rate_required" => "Tarif Pajak harus diisi",
"tax_rate_successful_updated" => "Anda berhasil melakukan perubahan",
"tax_rate_successfully_added" => "Anda berhasil menambahkan",
"tax_rates" => "Tarif Pajak",
"tax_rates_configuration" => "Konfigurasi Tarif Pajak",
"tax_rounding" => "Pembulatan Pajak",
"tax_type" => "Jenis Pajak",
"update" => "Perbaharui Tarif Pajak",
"vat_tax" => "PPN",
];

View File

@@ -52,7 +52,7 @@ return [
"expenses_tax_amount" => "Imposte",
"expenses_total_amount" => "Totale Importo",
"expenses_total_tax_amount" => "Totale Imposte",
"graphical_reports" => "Resoconto Grafico",
"graphical_reports" => "Resoconto Geografico",
"inventory" => "Inventario",
"inventory_low" => "Inventario Basso",
"inventory_low_report" => "Resoconto Inventario Basso",

View File

@@ -1,59 +1,58 @@
<?php
return [
'amount_due' => "",
'cancel_receiving' => "ยกเลิก",
'cannot_be_deleted' => "ไม่สามารถลบใบรับสินค้าได้",
'comments' => "ความคิดเห็น",
'complete_receiving' => "เสร็จสิ้น",
'confirm_cancel_receiving' => "คุณแน่ใจที่ต้องการล้างค่าใบรับสินค้าใช่หรือไม่? เมื่อล้างค่าแล้วทุกรายการจะถูกล้างออก",
'confirm_delete' => "คุณต้องการลบใบรับสินค้าใช่หรือไม่? หากลบแล้วจะไม่สามารถเรียกคืนได้อีก",
'confirm_finish_receiving' => "คุณต้องการบันทึกใบรับสินค้าใช่หรือไม่? เมื่อบันทึกแล้วไม่สามารถยกเลิกได้",
'confirm_restore' => "",
'cost' => "ต้นทุน",
'daily' => "",
'date' => "วันที่ใบรับสินค้า",
'date_required' => "ต้องบันทึกวันที่ที่ถูกต้อง",
'date_type' => "ต้องระบุวันที่",
'delete_entire_sale' => "ลบรายการขายทั้งหมด",
'discount' => "ส่วนลด %",
'edit' => "แก้ไข",
'edit_sale' => "แก้ไขรายการรับ",
'employee' => "พนักงาน",
'error_editing_item' => "แก้ไขสินค้าล้มเหลว",
'error_requisition' => "ไม่สามารถย้ายสินค้าคงคลังจากหรือไปยังที่เก็บสินค้าเดียวกัน",
'find_or_scan_item' => "ค้นหาสินค้า",
'find_or_scan_item_or_receipt' => "ค้นหา หรือ แสกนรายการ หรือ ใบเสร็จ",
'id' => "รายการสินค้าเข้า ID",
'item_name' => "ชื่อสินคัา",
'mode' => "ประเภทธุรกรรม",
'new_supplier' => "ผู้ผลิตรายใหม่",
'one_or_multiple' => "ใบรับสินค้า",
'print_after_sale' => "พิมพ์บิลหลังการขาย",
'quantity' => "จำนวน.",
'receipt' => "บิลสินค้าเข้า",
'receipt_number' => "ใบรับสินค้า #",
'receiving' => "รับสินค้า",
'reference' => "อ้างอิง",
'register' => "รับสินค้า",
'requisition' => "เบิกสินค้า",
'return' => "คืนสินค้า",
'select_supplier' => "เลือกคู่ค้า (ไม่ระบุก็ได้)",
'ship_pack' => "แพคการขนส่ง",
'start_typing_supplier_name' => "เริ่มต้นพิมพ์ชื่อผู้ผลิต...",
'stock' => "คลังสินค้า",
'stock_destination' => "คลังสินค้าปลายทาง",
'stock_locaiton' => "สถานที่เก็บสินค้า",
'stock_source' => "คลังสินค้าต้นทาง",
'successfully_deleted' => "คุณได้ทำการลบเรียบร้อยแล้ว",
'successfully_updated' => "ปรับปรุงใบรับสินค้าเรียบร้อยแล้ว",
'supplier' => "ผู้ผลิต",
'supplier_address' => "ที่อยู่",
'supplier_email' => "อีเมล์",
'supplier_location' => "ที่อยู่",
'total' => "รวม",
'transaction_failed' => "ทำรายการใบรับสินค้าล้มเหลว",
'unable_to_add_item' => "ไม่สามารถเพิ่มสินค้าได้",
'unsuccessfully_updated' => "ทำการปรับปรุง Receiving ไม่ได้",
'update' => "ปรับปรุง",
"amount_due" => "",
"cancel_receiving" => "ยกเลิก",
"cannot_be_deleted" => "ไม่สามารถลบใบรับสินค้าได้",
"comments" => "ความคิดเห็น",
"complete_receiving" => "เสร็จสิ้น",
"confirm_cancel_receiving" => "คุณแน่ใจที่ต้องการล้างค่าใบรับสินค้าใช่หรือไม่? เมื่อล้างค่าแล้วทุกรายการจะถูกล้างออก",
"confirm_delete" => "คุณต้องการลบใบรับสินค้าใช่หรือไม่? หากลบแล้วจะไม่สามารถเรียกคืนได้อีก",
"confirm_finish_receiving" => "คุณต้องการบันทึกใบรับสินค้าใช่หรือไม่? เมื่อบันทึกแล้วไม่สามารถยกเลิกได้",
"confirm_restore" => "",
"cost" => "ต้นทุน",
"daily" => "",
"date" => "วันที่ใบรับสินค้า",
"date_required" => "ต้องบันทึกวันที่ที่ถูกต้อง",
"date_type" => "ต้องระบุวันที่",
"delete_entire_sale" => "ลบรายการขายทั้งหมด",
"discount" => "ส่วนลด %",
"edit" => "แก้ไข",
"edit_sale" => "แก้ไขรายการรับ",
"employee" => "พนักงาน",
"error_editing_item" => "แก้ไขสินค้าล้มเหลว",
"error_requisition" => "ไม่สามารถย้ายสินค้าคงคลังจากหรือไปยังที่เก็บสินค้าเดียวกัน",
"find_or_scan_item" => "ค้นหาสินค้า",
"find_or_scan_item_or_receipt" => "ค้นหาสินค้าหรือบิล",
"id" => "รายการสินค้าเข้า ID",
"item_name" => "ชื่อสินคัา",
"mode" => "ประเภทธุรกรรม",
"new_supplier" => "ผู้ผลิตรายใหม่",
"one_or_multiple" => "ใบรับสินค้า",
"print_after_sale" => "พิมพ์บิลหลังการขาย",
"quantity" => "จำนวน.",
"receipt" => "บิลสินค้าเข้า",
"receipt_number" => "ใบรับสินค้า #",
"receiving" => "รับสินค้า",
"reference" => "อ้างอิง",
"register" => "รับสินค้า",
"requisition" => "เบิกสินค้า",
"return" => "คืนสินค้า",
"select_supplier" => "เลือกคู่ค้า (ไม่ระบุก็ได้)",
"ship_pack" => "แพคการขนส่ง",
"start_typing_supplier_name" => "เริ่มต้นพิมพ์ชื่อผู้ผลิต...",
"stock" => "คลังสินค้า",
"stock_destination" => "คลังสินค้าปลายทาง",
"stock_locaiton" => "สถานที่เก็บสินค้า",
"stock_source" => "คลังสินค้าต้นทาง",
"successfully_deleted" => "คุณได้ทำการลบเรียบร้อยแล้ว",
"successfully_updated" => "ปรับปรุงใบรับสินค้าเรียบร้อยแล้ว",
"supplier" => "ผู้ผลิต",
"supplier_address" => "ที่อยู่",
"supplier_email" => "อีเมล์",
"supplier_location" => "ที่อยู่",
"total" => "รวม",
"transaction_failed" => "ทำรายการใบรับสินค้าล้มเหลว",
"unable_to_add_item" => "ไม่สามารถเพิ่มสินค้าได้",
"unsuccessfully_updated" => "ทำการปรับปรุง Receiving ไม่ได้",
"update" => "ปรับปรุง",
];

View File

@@ -1,12 +1,11 @@
<?php
return [
'all' => "سب",
'columns' => "",
'hide_show_pagination' => "",
'loading' => "",
'page_from_to' => "",
'refresh' => "",
'rows_per_page' => "",
'toggle' => "",
"all" => "",
"columns" => "",
"hide_show_pagination" => "",
"loading" => "",
"page_from_to" => "",
"refresh" => "",
"rows_per_page" => "",
"toggle" => "",
];

View File

@@ -1,50 +1,49 @@
<?php
return [
'amount' => "رقم",
'amount_number' => "",
'amount_required' => "",
'cancel_cashups' => "",
'cancel_cashups_enter' => "",
'cannot_be_deleted' => "",
'cash_difference' => "",
'close_date' => "",
'close_employee' => "",
'closed_amount_card' => "",
'closed_amount_cash' => "",
'closed_amount_check' => "",
'closed_amount_due' => "",
'closed_amount_giftcard' => "",
'closed_amount_total' => "",
'closed_date' => "",
'confirm_delete' => "",
'confirm_restore' => "",
'confirm_submit' => "",
'date_number' => "",
'date_required' => "",
'description' => "",
'enable_expected' => "",
'error_adding_updating' => "",
'giftcard' => "",
'id' => "",
'info' => "",
'info_employee' => "",
'is_deleted' => "",
'new' => "",
'no_cashups_to_display' => "",
'none_selected' => "",
'note' => "",
'one_or_multiple' => "",
'open_amount_cash' => "",
'open_date' => "",
'open_employee' => "",
'opened_date' => "",
'successful_adding' => "",
'successful_deleted' => "",
'successful_updating' => "",
'total' => "",
'transfer_amount_cash' => "",
'transfer_amount_cash_minus' => "",
'update' => "",
'warning' => "",
"amount" => "",
"amount_number" => "",
"amount_required" => "",
"cancel_cashups" => "",
"cancel_cashups_enter" => "",
"cannot_be_deleted" => "",
"cash_difference" => "",
"close_date" => "",
"close_employee" => "",
"closed_amount_card" => "",
"closed_amount_cash" => "",
"closed_amount_check" => "",
"closed_amount_due" => "",
"closed_amount_giftcard" => "",
"closed_amount_total" => "",
"closed_date" => "",
"confirm_delete" => "",
"confirm_restore" => "",
"confirm_submit" => "",
"date_number" => "",
"date_required" => "",
"description" => "",
"enable_expected" => "",
"error_adding_updating" => "",
"giftcard" => "",
"id" => "",
"info" => "",
"info_employee" => "",
"is_deleted" => "",
"new" => "",
"no_cashups_to_display" => "",
"none_selected" => "",
"note" => "",
"one_or_multiple" => "",
"open_amount_cash" => "",
"open_date" => "",
"open_employee" => "",
"opened_date" => "",
"successful_adding" => "",
"successful_deleted" => "",
"successful_updating" => "",
"total" => "",
"transfer_amount_cash" => "",
"transfer_amount_cash_minus" => "",
"update" => "",
"warning" => "",
];

View File

@@ -1,89 +1,88 @@
<?php
return [
'address_1' => "گھر کا پتہ",
'address_2' => "",
'admin' => "",
'city' => "",
'clerk' => "",
'close' => "",
'color' => "",
'comments' => "",
'common' => "",
'confirm_search' => "",
'copyrights' => "© 2010 - {0}",
'correct_errors' => "",
'country' => "",
'dashboard' => "",
'date' => "",
'delete' => "",
'det' => "",
'download_import_template' => "",
'edit' => "",
'email' => "",
'email_invalid_format' => "",
'export_csv' => "",
'export_csv_no' => "",
'export_csv_yes' => "",
'fields_required_message' => "",
'fields_required_message_unique' => "",
'first_name' => "",
'first_name_required' => "",
'first_page' => "",
'gender' => "",
'gender_female' => "",
'gender_male' => "",
'gender_undefined' => "",
'icon' => "",
'id' => "",
'import' => "",
'import_change_file' => "",
'import_csv' => "",
'import_full_path' => "",
'import_remove_file' => "",
'import_select_file' => "",
'inv' => "",
'last_name' => "",
'last_name_required' => "",
'last_page' => "",
'learn_about_project' => "",
'list_of' => "",
'logo' => "",
'logo_mark' => "",
'logout' => "",
'manager' => "",
'migration_needed' => "",
'new' => "",
'no' => "",
'no_persons_to_display' => "",
'none_selected_text' => "",
'or' => "",
'people' => "",
'phone_number' => "",
'phone_number_required' => "",
'please_visit_my' => "",
'position' => "",
'powered_by' => "",
'price' => "",
'print' => "",
'remove' => "",
'required' => "",
'restore' => "",
'return_policy' => "",
'search' => "",
'search_options' => "",
'searched_for' => "",
'software_short' => "",
'software_title' => "",
'state' => "",
'submit' => "",
'total_spent' => "",
'unknown' => "",
'view_recent_sales' => "",
'website' => "",
'welcome' => "",
'welcome_message' => "",
'yes' => "",
'you_are_using_ospos' => "",
'zip' => "",
"address_1" => "",
"address_2" => "",
"admin" => "",
"city" => "",
"clerk" => "",
"close" => "",
"color" => "",
"comments" => "",
"common" => "",
"confirm_search" => "",
"copyrights" => "© 2010 - {0}",
"correct_errors" => "",
"country" => "",
"dashboard" => "",
"date" => "",
"delete" => "",
"det" => "",
"download_import_template" => "",
"edit" => "",
"email" => "",
"email_invalid_format" => "",
"export_csv" => "",
"export_csv_no" => "",
"export_csv_yes" => "",
"fields_required_message" => "",
"fields_required_message_unique" => "",
"first_name" => "",
"first_name_required" => "",
"first_page" => "",
"gender" => "",
"gender_female" => "",
"gender_male" => "",
"gender_undefined" => "",
"icon" => "",
"id" => "",
"import" => "",
"import_change_file" => "",
"import_csv" => "",
"import_full_path" => "",
"import_remove_file" => "",
"import_select_file" => "",
"inv" => "",
"last_name" => "",
"last_name_required" => "",
"last_page" => "",
"learn_about_project" => "",
"list_of" => "",
"logo" => "",
"logo_mark" => "",
"logout" => "",
"manager" => "",
"migration_needed" => "",
"new" => "",
"no" => "",
"no_persons_to_display" => "",
"none_selected_text" => "",
"or" => "",
"people" => "",
"phone_number" => "",
"phone_number_required" => "",
"please_visit_my" => "",
"position" => "",
"powered_by" => "",
"price" => "",
"print" => "",
"remove" => "",
"required" => "",
"restore" => "",
"return_policy" => "",
"search" => "",
"search_options" => "",
"searched_for" => "",
"software_short" => "",
"software_title" => "",
"state" => "",
"submit" => "",
"total_spent" => "",
"unknown" => "",
"view_recent_sales" => "",
"website" => "",
"welcome" => "",
"welcome_message" => "",
"yes" => "",
"you_are_using_ospos" => "",
"zip" => "",
];

View File

@@ -1,57 +1,56 @@
<?php
return [
'account_number' => "اکاوٗنٹ",
'account_number_duplicate' => "",
'available_points' => "",
'available_points_value' => "",
'average' => "",
'avg_discount' => "",
'basic_information' => "",
'cannot_be_deleted' => "",
'company_name' => "",
'confirm_delete' => "",
'confirm_restore' => "",
'consent' => "",
'consent_required' => "",
'csv_import_failed' => "",
'csv_import_nodata_wrongformat' => "",
'csv_import_partially_failed' => "",
'csv_import_success' => "",
'customer' => "",
'date' => "",
'discount' => "",
'discount_fixed' => "",
'discount_percent' => "",
'discount_type' => "",
'email_duplicate' => "",
'employee' => "",
'error_adding_updating' => "",
'import_items_csv' => "",
'mailchimp_activity_click' => "",
'mailchimp_activity_lastopen' => "",
'mailchimp_activity_open' => "",
'mailchimp_activity_total' => "",
'mailchimp_activity_unopen' => "",
'mailchimp_email_client' => "",
'mailchimp_info' => "",
'mailchimp_member_rating' => "",
'mailchimp_status' => "",
'mailchimp_vip' => "",
'max' => "",
'min' => "",
'new' => "",
'none_selected' => "",
'one_or_multiple' => "",
'quantity' => "",
'stats_info' => "",
'successful_adding' => "",
'successful_deleted' => "",
'successful_updating' => "",
'tax_code' => "",
'tax_id' => "",
'taxable' => "",
'total' => "",
'update' => "",
'rewards_package' => "",
"account_number" => "",
"account_number_duplicate" => "",
"available_points" => "",
"available_points_value" => "",
"average" => "",
"avg_discount" => "",
"basic_information" => "",
"cannot_be_deleted" => "",
"company_name" => "",
"confirm_delete" => "",
"confirm_restore" => "",
"consent" => "",
"consent_required" => "",
"csv_import_failed" => "",
"csv_import_nodata_wrongformat" => "",
"csv_import_partially_failed" => "",
"csv_import_success" => "",
"customer" => "",
"date" => "",
"discount" => "",
"discount_fixed" => "",
"discount_percent" => "",
"discount_type" => "",
"email_duplicate" => "",
"employee" => "",
"error_adding_updating" => "",
"import_items_csv" => "",
"mailchimp_activity_click" => "",
"mailchimp_activity_lastopen" => "",
"mailchimp_activity_open" => "",
"mailchimp_activity_total" => "",
"mailchimp_activity_unopen" => "",
"mailchimp_email_client" => "",
"mailchimp_info" => "",
"mailchimp_member_rating" => "",
"mailchimp_status" => "",
"mailchimp_vip" => "",
"max" => "",
"min" => "",
"new" => "",
"none_selected" => "",
"one_or_multiple" => "",
"quantity" => "",
"stats_info" => "",
"successful_adding" => "",
"successful_deleted" => "",
"successful_updating" => "",
"tax_code" => "",
"tax_id" => "",
"taxable" => "",
"total" => "",
"update" => "",
"rewards_package" => "",
];

View File

@@ -1,24 +1,23 @@
<?php
return [
'all_time' => "ہمیشہ",
'apply' => "",
'cancel' => "",
'custom' => "",
'from' => "",
'last_30' => "",
'last_7' => "",
'last_financial_year' => "",
'last_month' => "",
'last_year' => "",
'same_month_last_year' => "",
'same_month_to_same_day_last_year' => "",
'this_financial_year' => "",
'this_month' => "",
'this_year' => "",
'to' => "",
'today' => "",
'today_last_year' => "",
'weekstart' => "",
'yesterday' => "",
"all_time" => "",
"apply" => "",
"cancel" => "",
"custom" => "",
"from" => "",
"last_30" => "",
"last_7" => "",
"last_financial_year" => "",
"last_month" => "",
"last_year" => "",
"same_month_last_year" => "",
"same_month_to_same_day_last_year" => "",
"this_financial_year" => "",
"this_month" => "",
"this_year" => "",
"to" => "",
"today" => "",
"today_last_year" => "",
"weekstart" => "",
"yesterday" => "",
];

View File

@@ -1,6 +1,5 @@
<?php
return [
'no_permission_module' => "آپ کو اس ماڈیول تک رسائی کی اجازت نہیں ہے",
'unknown' => "غیر متوقع رکاوٹ",
"no_permission_module" => "",
"unknown" => "",
];

View File

@@ -1,51 +1,50 @@
<?php
return [
'add_item' => "",
'amount' => "رقم",
'amount_number' => "",
'amount_required' => "",
'by_category' => "",
'cannot_be_deleted' => "زمرہ کے اخراجات کو حذف نہیں کیا جا سکا",
'cash' => "",
'cash_filter' => "",
'categories_name' => "",
'category_required' => "",
'check' => "",
'check_filter' => "",
'confirm_delete' => "",
'confirm_restore' => "",
'credit' => "",
'credit_filter' => "",
'date' => "",
'date_number' => "",
'date_required' => "",
'debit' => "",
'debit_filter' => "",
'description' => "",
'due' => "",
'due_filter' => "",
'employee' => "",
'error_adding_updating' => "",
'expense_id' => "",
'expenses_employee' => "",
'info' => "",
'ip_address' => "",
'is_deleted' => "",
'name_required' => "",
'new' => "",
'new_supplier' => "",
'no_expenses_to_display' => "",
'none_selected' => "",
'one_or_multiple' => "",
'payment' => "",
'start_typing_supplier_name' => "",
'successful_adding' => "",
'successful_deleted' => "",
'successful_updating' => "",
'supplier_name' => "",
'supplier_tax_code' => "",
'tax_amount' => "",
'tax_amount_number' => "",
'update' => "",
"add_item" => "",
"amount" => "",
"amount_number" => "",
"amount_required" => "",
"by_category" => "",
"cannot_be_deleted" => "",
"cash" => "",
"cash_filter" => "",
"categories_name" => "",
"category_required" => "",
"check" => "",
"check_filter" => "",
"confirm_delete" => "",
"confirm_restore" => "",
"credit" => "",
"credit_filter" => "",
"date" => "",
"date_number" => "",
"date_required" => "",
"debit" => "",
"debit_filter" => "",
"description" => "",
"due" => "",
"due_filter" => "",
"employee" => "",
"error_adding_updating" => "",
"expense_id" => "",
"expenses_employee" => "",
"info" => "",
"ip_address" => "",
"is_deleted" => "",
"name_required" => "",
"new" => "",
"new_supplier" => "",
"no_expenses_to_display" => "",
"none_selected" => "",
"one_or_multiple" => "",
"payment" => "",
"start_typing_supplier_name" => "",
"successful_adding" => "",
"successful_deleted" => "",
"successful_updating" => "",
"supplier_name" => "",
"supplier_tax_code" => "",
"tax_amount" => "",
"tax_amount_number" => "",
"update" => "",
];

View File

@@ -1,23 +1,22 @@
<?php
return [
'category_name_required' => "اخراجات کے زمرے کا نام درکار ہے",
'add_item' => "زمرہ شامل کریں",
'cannot_be_deleted' => "زمرہ کے اخراجات کو حذف نہیں کیا جا سکا",
'category_id' => "شناخت",
'confirm_delete' => "کیا آپ واقعی منتخب کردہ اخراجات کے زمرے کو حذف کرنا چاہتے ہیں؟",
'confirm_restore' => "کیا آپ واقعی منتخب کردہ اخراجات کے زمرے کو بحال کرنا چاہتے ہیں؟",
'description' => "زمرے کے تفصیلات",
'error_adding_updating' => "",
'info' => "",
'name' => "",
'new' => "",
'no_expenses_categories_to_display' => "",
'none_selected' => "",
'one_or_multiple' => "",
'quantity' => "",
'successful_adding' => "",
'successful_deleted' => "",
'successful_updating' => "",
'update' => "",
"category_name_required" => "",
"add_item" => "",
"cannot_be_deleted" => "",
"category_id" => "",
"confirm_delete" => "",
"confirm_restore" => "",
"description" => "",
"error_adding_updating" => "",
"info" => "",
"name" => "",
"new" => "",
"no_expenses_categories_to_display" => "",
"none_selected" => "",
"one_or_multiple" => "",
"quantity" => "",
"successful_adding" => "",
"successful_deleted" => "",
"successful_updating" => "",
"update" => "",
];

View File

@@ -1,225 +1,224 @@
<?php
return [
'customers_available_points' => "",
'rewards_package' => "",
'rewards_remaining_balance' => "",
'account_number' => "اکاوٗنٹ",
'add_payment' => "",
'amount_due' => "",
'amount_tendered' => "",
'authorized_signature' => "",
'cancel_sale' => "",
'cash' => "",
'cash_1' => "",
'cash_2' => "",
'cash_3' => "",
'cash_4' => "",
'cash_adjustment' => "",
'cash_deposit' => "",
'cash_filter' => "",
'change_due' => "",
'change_price' => "",
'check' => "",
'check_balance' => "",
'check_filter' => "",
'close' => "",
'comment' => "",
'comments' => "",
'company_name' => "",
'complete' => "",
'complete_sale' => "",
'confirm_cancel_sale' => "",
'confirm_delete' => "",
'confirm_restore' => "",
'credit' => "",
'credit_deposit' => "",
'credit_filter' => "",
'current_table' => "",
'customer' => "",
'customer_address' => "",
'customer_discount' => "",
'customer_email' => "",
'customer_location' => "",
'customer_mailchimp_status' => "",
'customer_optional' => "",
'customer_required' => "",
'customer_total' => "",
'customer_total_spent' => "",
'daily_sales' => "",
'date' => "",
'date_range' => "",
'date_required' => "",
'date_type' => "",
'debit' => "",
'debit_filter' => "",
'delete' => "",
'delete_confirmation' => "",
'delete_entire_sale' => "",
'delete_successful' => "",
'delete_unsuccessful' => "",
'description_abbrv' => "",
'discard' => "",
'discard_quote' => "",
'discount' => "",
'discount_included' => "",
'discount_short' => "",
'due' => "",
'due_filter' => "",
'edit' => "",
'edit_item' => "",
'edit_sale' => "",
'email_receipt' => "",
'employee' => "",
'entry' => "",
'error_editing_item' => "",
'find_or_scan_item' => "",
'find_or_scan_item_or_receipt' => "",
'giftcard' => "",
'giftcard_balance' => "",
'giftcard_filter' => "",
'giftcard_number' => "",
'group_by_category' => "",
'group_by_type' => "",
'hsn' => "",
'id' => "",
'include_prices' => "",
'invoice' => "",
'invoice_confirm' => "",
'invoice_enable' => "",
'invoice_filter' => "",
'invoice_no_email' => "",
'invoice_number' => "",
'invoice_number_duplicate' => "",
'invoice_sent' => "",
'invoice_total' => "",
'invoice_type_custom_invoice' => "",
'invoice_type_custom_tax_invoice' => "",
'invoice_type_invoice' => "",
'invoice_type_tax_invoice' => "",
'invoice_unsent' => "",
'invoice_update' => "",
'item_insufficient_of_stock' => "",
'item_name' => "",
'item_number' => "",
'item_out_of_stock' => "",
'key_browser' => "",
'key_cancel' => "Cancels Current Quote/Invoice/Sale",
'key_customer_search' => "Customer Search",
'key_finish_quote' => "Finish Quote/Invoice witdout payment",
'key_finish_sale' => "Add Payment and Complete Invoice/Sale",
'key_full' => "",
'key_function' => "Function",
'key_help' => "Shortcuts",
'key_help_modal' => "Open Shortcuts Window",
'key_in' => "",
'key_item_search' => "Item Search",
'key_out' => "",
'key_payment' => "Add Payment",
'key_print' => "",
'key_restore' => "",
'key_search' => "",
'key_suspend' => "Suspend Current Sale",
'key_suspended' => "Show Suspended Sales",
'key_system' => "",
'key_tendered' => "Edit Amount Tendered",
'key_title' => "Sales Keyboard Shortcuts",
'mc' => "",
'mode' => "",
'must_enter_numeric' => "",
'must_enter_numeric_giftcard' => "",
'new_customer' => "",
'new_item' => "",
'no_description' => "",
'no_filter' => "",
'no_items_in_cart' => "",
'no_sales_to_display' => "",
'none_selected' => "",
'nontaxed_ind' => "",
'not_authorized' => "",
'one_or_multiple' => "",
'payment' => "",
'payment_amount' => "",
'payment_not_cover_total' => "",
'payment_type' => "",
'payments' => "",
'payments_total' => "",
'price' => "",
'print_after_sale' => "",
'quantity' => "",
'quantity_less_than_reorder_level' => "",
'quantity_less_than_zero' => "",
'quantity_of_items' => "",
'quote' => "",
'quote_number' => "",
'quote_number_duplicate' => "",
'quote_sent' => "",
'quote_unsent' => "",
'receipt' => "",
'receipt_no_email' => "",
'receipt_number' => "",
'receipt_sent' => "",
'receipt_unsent' => "",
'refund' => "",
'register' => "",
'remove_customer' => "",
'remove_discount' => "",
'return' => "",
'rewards' => "",
'rewards_balance' => "",
'sale' => "",
'sale_by_invoice' => "",
'sale_for_customer' => "",
'sale_time' => "",
'sales_tax' => "",
'sales_total' => "",
'select_customer' => "",
'send_invoice' => "",
'send_quote' => "",
'send_receipt' => "",
'send_work_order' => "",
'serial' => "",
'service_charge' => "",
'show_due' => "",
'show_invoice' => "",
'show_receipt' => "",
'start_typing_customer_name' => "",
'start_typing_item_name' => "",
'stock' => "",
'stock_location' => "",
'sub_total' => "",
'successfully_deleted' => "",
'successfully_restored' => "",
'successfully_suspended_sale' => "",
'successfully_updated' => "",
'suspend_sale' => "",
'suspended_doc_id' => "",
'suspended_sale_id' => "",
'suspended_sales' => "",
'table' => "",
'takings' => "",
'tax' => "",
'tax_id' => "",
'tax_invoice' => "",
'tax_percent' => "",
'taxed_ind' => "",
'total' => "",
'total_tax_exclusive' => "",
'transaction_failed' => "",
'unable_to_add_item' => "",
'unsuccessfully_deleted' => "",
'unsuccessfully_restored' => "",
'unsuccessfully_suspended_sale' => "",
'unsuccessfully_updated' => "",
'unsuspend' => "",
'unsuspend_and_delete' => "",
'update' => "",
'upi' => "",
'visa' => "",
'wholesale' => "",
'work_order' => "",
'work_order_number' => "",
'work_order_number_duplicate' => "",
'work_order_sent' => "",
'work_order_unsent' => "",
"customers_available_points" => "",
"rewards_package" => "",
"rewards_remaining_balance" => "",
"account_number" => "",
"add_payment" => "",
"amount_due" => "",
"amount_tendered" => "",
"authorized_signature" => "",
"cancel_sale" => "",
"cash" => "",
"cash_1" => "",
"cash_2" => "",
"cash_3" => "",
"cash_4" => "",
"cash_adjustment" => "",
"cash_deposit" => "",
"cash_filter" => "",
"change_due" => "",
"change_price" => "",
"check" => "",
"check_balance" => "",
"check_filter" => "",
"close" => "",
"comment" => "",
"comments" => "",
"company_name" => "",
"complete" => "",
"complete_sale" => "",
"confirm_cancel_sale" => "",
"confirm_delete" => "",
"confirm_restore" => "",
"credit" => "",
"credit_deposit" => "",
"credit_filter" => "",
"current_table" => "",
"customer" => "",
"customer_address" => "",
"customer_discount" => "",
"customer_email" => "",
"customer_location" => "",
"customer_mailchimp_status" => "",
"customer_optional" => "",
"customer_required" => "",
"customer_total" => "",
"customer_total_spent" => "",
"daily_sales" => "",
"date" => "",
"date_range" => "",
"date_required" => "",
"date_type" => "",
"debit" => "",
"debit_filter" => "",
"delete" => "",
"delete_confirmation" => "",
"delete_entire_sale" => "",
"delete_successful" => "",
"delete_unsuccessful" => "",
"description_abbrv" => "",
"discard" => "",
"discard_quote" => "",
"discount" => "",
"discount_included" => "",
"discount_short" => "",
"due" => "",
"due_filter" => "",
"edit" => "",
"edit_item" => "",
"edit_sale" => "",
"email_receipt" => "",
"employee" => "",
"entry" => "",
"error_editing_item" => "",
"find_or_scan_item" => "",
"find_or_scan_item_or_receipt" => "",
"giftcard" => "",
"giftcard_balance" => "",
"giftcard_filter" => "",
"giftcard_number" => "",
"group_by_category" => "",
"group_by_type" => "",
"hsn" => "",
"id" => "",
"include_prices" => "",
"invoice" => "",
"invoice_confirm" => "",
"invoice_enable" => "",
"invoice_filter" => "",
"invoice_no_email" => "",
"invoice_number" => "",
"invoice_number_duplicate" => "",
"invoice_sent" => "",
"invoice_total" => "",
"invoice_type_custom_invoice" => "",
"invoice_type_custom_tax_invoice" => "",
"invoice_type_invoice" => "",
"invoice_type_tax_invoice" => "",
"invoice_unsent" => "",
"invoice_update" => "",
"item_insufficient_of_stock" => "",
"item_name" => "",
"item_number" => "",
"item_out_of_stock" => "",
"key_browser" => "",
"key_cancel" => "Cancels Current Quote/Invoice/Sale",
"key_customer_search" => "Customer Search",
"key_finish_quote" => "Finish Quote/Invoice witdout payment",
"key_finish_sale" => "Add Payment and Complete Invoice/Sale",
"key_full" => "",
"key_function" => "Function",
"key_help" => "Shortcuts",
"key_help_modal" => "Open Shortcuts Window",
"key_in" => "",
"key_item_search" => "Item Search",
"key_out" => "",
"key_payment" => "Add Payment",
"key_print" => "",
"key_restore" => "",
"key_search" => "",
"key_suspend" => "Suspend Current Sale",
"key_suspended" => "Show Suspended Sales",
"key_system" => "",
"key_tendered" => "Edit Amount Tendered",
"key_title" => "Sales Keyboard Shortcuts",
"mc" => "",
"mode" => "",
"must_enter_numeric" => "",
"must_enter_numeric_giftcard" => "",
"new_customer" => "",
"new_item" => "",
"no_description" => "",
"no_filter" => "",
"no_items_in_cart" => "",
"no_sales_to_display" => "",
"none_selected" => "",
"nontaxed_ind" => "",
"not_authorized" => "",
"one_or_multiple" => "",
"payment" => "",
"payment_amount" => "",
"payment_not_cover_total" => "",
"payment_type" => "",
"payments" => "",
"payments_total" => "",
"price" => "",
"print_after_sale" => "",
"quantity" => "",
"quantity_less_than_reorder_level" => "",
"quantity_less_than_zero" => "",
"quantity_of_items" => "",
"quote" => "",
"quote_number" => "",
"quote_number_duplicate" => "",
"quote_sent" => "",
"quote_unsent" => "",
"receipt" => "",
"receipt_no_email" => "",
"receipt_number" => "",
"receipt_sent" => "",
"receipt_unsent" => "",
"refund" => "",
"register" => "",
"remove_customer" => "",
"remove_discount" => "",
"return" => "",
"rewards" => "",
"rewards_balance" => "",
"sale" => "",
"sale_by_invoice" => "",
"sale_for_customer" => "",
"sale_time" => "",
"sales_tax" => "",
"sales_total" => "",
"select_customer" => "",
"send_invoice" => "",
"send_quote" => "",
"send_receipt" => "",
"send_work_order" => "",
"serial" => "",
"service_charge" => "",
"show_due" => "",
"show_invoice" => "",
"show_receipt" => "",
"start_typing_customer_name" => "",
"start_typing_item_name" => "",
"stock" => "",
"stock_location" => "",
"sub_total" => "",
"successfully_deleted" => "",
"successfully_restored" => "",
"successfully_suspended_sale" => "",
"successfully_updated" => "",
"suspend_sale" => "",
"suspended_doc_id" => "",
"suspended_sale_id" => "",
"suspended_sales" => "",
"table" => "",
"takings" => "",
"tax" => "",
"tax_id" => "",
"tax_invoice" => "",
"tax_percent" => "",
"taxed_ind" => "",
"total" => "",
"total_tax_exclusive" => "",
"transaction_failed" => "",
"unable_to_add_item" => "",
"unsuccessfully_deleted" => "",
"unsuccessfully_restored" => "",
"unsuccessfully_suspended_sale" => "",
"unsuccessfully_updated" => "",
"unsuspend" => "",
"unsuspend_and_delete" => "",
"update" => "",
"upi" => "",
"visa" => "",
"wholesale" => "",
"work_order" => "",
"work_order_number" => "",
"work_order_number_duplicate" => "",
"work_order_sent" => "",
"work_order_unsent" => "",
];

View File

@@ -26,26 +26,27 @@ class Email_lib
$this->config = config(OSPOS::class)->settings;
$encrypter = Services::encrypter();
$smtp_pass = $this->config['smtp_pass'];
if(!empty($smtp_pass))
{
$smtp_pass = $encrypter->decrypt($smtp_pass);
$smtp_pass = $encrypter->decrypt($smtp_pass);
}
$email_config = [
'mailType' => 'html',
'userAgent' => 'OSPOS',
'validate' => true,
'protocol' => $this->config['protocol'],
'mailPath' => $this->config['mailpath'],
'SMTPHost' => $this->config['smtp_host'],
'SMTPUser' => $this->config['smtp_user'],
'SMTPPass' => $smtp_pass,
'SMTPPort' => (int)$this->config['smtp_port'],
'SMTPTimeout' => (int)$this->config['smtp_timeout'],
'SMTPCrypto' => $this->config['smtp_crypto']
'mailtype' => 'html',
'useragent' => 'OSPOS',
'validate' => true,
'protocol' => $this->config['protocol'],
'mailpath' => $this->config['mailpath'],
'smtp_host' => $this->config['smtp_host'],
'smtp_user' => $this->config['smtp_user'],
'smtp_pass' => $smtp_pass,
'smtp_port' => $this->config['smtp_port'],
'smtp_timeout' => $this->config['smtp_timeout'],
'smtp_crypto' => $this->config['smtp_crypto']
];
$this->email->initialize($email_config);
}

View File

@@ -246,7 +246,7 @@ class Receiving_lib
* @param string $stock_destination
* @return void
*/
public function set_stock_destination(?string $stock_destination): void
public function set_stock_destination(string $stock_destination): void
{
$this->session->set('recv_stock_destination', $stock_destination);
}

View File

@@ -19,25 +19,26 @@ class Token_lib
*/
public function render(string $tokened_text, array $tokens = [], $save = true): string
{
// Apply the transformation for the "%" tokens if any are used
if(strpos($tokened_text, '%') !== false)
$config = config(OSPOS::class)->settings;
$formatter = new IntlDateFormatter(
$config['number_locale'], // Locale
IntlDateFormatter::FULL, // Date type
IntlDateFormatter::FULL // Time type
);
//Apply the transformation for the "%" tokens if any are used
if(str_contains($tokened_text, '%'))
{
$tokened_text = strftime($tokened_text); //TODO: these need to be converted to IntlDateFormatter::format()
$tokened_text = $formatter->format(new DateTime());
}
// Call scan to build an array of all of the tokens used in the text to be transformed
//Call scan to build an array of all tokens used in the text to be transformed
$token_tree = $this->scan($tokened_text);
if(empty($token_tree))
{
if(strpos($tokened_text, '%') !== false)
{
return strftime($tokened_text);
}
else
{
return $tokened_text;
}
return str_contains($tokened_text, '%') ? $formatter->format(new DateTime()) : $tokened_text;
}
$token_values = [];

View File

@@ -547,7 +547,7 @@ class Attribute extends Model
{
$builder = $this->db->table('attribute_definitions');
$success = $builder->insert($definition_data);
$definition_data['definition_id'] = $this->getInsertID();
$definition_data['definition_id'] = $this->db->insertID();
}
}
@@ -875,7 +875,7 @@ class Attribute extends Model
$builder->set(["attribute_$data_type" => $attribute_value]);
$builder->insert();
$attribute_id = $this->getInsertID();
$attribute_id = $this->db->insertID();
}
$data = [

View File

@@ -43,7 +43,6 @@ class Item extends Model
'hsn_code'
];
/**
* Determines if a given item_id is an item
*/

View File

@@ -104,7 +104,7 @@ class Receiving extends Model
/**
* @throws ReflectionException
*/
public function save_value(array $items, int $supplier_id, int $employee_id, string $comment, string $reference, ?string $payment_type, int $receiving_id = NEW_ENTRY): int //TODO: $receiving_id gets overwritten before it's evaluated. It doesn't make sense to pass this here.
public function save_value(array $items, int $supplier_id, int $employee_id, string $comment, string $reference, string $payment_type, int $receiving_id = NEW_ENTRY): int //TODO: $receiving_id gets overwritten before it's evaluated. It doesn't make sense to pass this here.
{
$attribute = model(Attribute::class);
$inventory = model('Inventory');
@@ -187,6 +187,7 @@ class Receiving extends Model
$inventory->insert($inv_data, false);
$attribute->copy_attribute_links($item_data['item_id'], 'receiving_id', $receiving_id);
$supplier = $supplier->get_info($supplier_id); //TODO: supplier is never used after this.
}
$this->db->transComplete();

View File

@@ -11,13 +11,13 @@ use App\Models\Customer;
**/
class Token_customer extends Token
{
private array $customer_info;
private string $customer_info;
private Sale_lib $sale_lib;
/**
* @param string $customer_info
*/
public function __construct(array $customer_info = [])
public function __construct(string $customer_info = '')
{
parent::__construct();
$this->customer_info = $customer_info;

View File

@@ -42,7 +42,6 @@ use Config\OSPOS;
echo "&#187; OpenSSL: ", extension_loaded('openssl') ? '<span style="color: green;">Enabled &#x2713</span>' : '<span style="color: red">Disabled &#x2717</span>', '<br>';
echo "&#187; MBString: ", extension_loaded('mbstring') ? '<span style="color: green;">Enabled &#x2713</span>' : '<span style="color: red">Disabled &#x2717</span>', '<br>';
echo "&#187; Curl: ", extension_loaded('curl') ? '<span style="color: green;">Enabled &#x2713</span>' : '<span style="color: red">Disabled &#x2717</span>', '<br>';
echo "&#187; Json: ", extension_loaded('json') ? '<span style="color: green;">Enabled &#x2713</span>' : '<span style="color: red">Disabled &#x2717</span>', '<br><br>';
echo "&#187; Xml: ", extension_loaded('xml') ? '<span style="color: green;">Enabled &#x2713</span>' : '<span style="color: red">Disabled &#x2717</span>', '<br><br>';
?>
User Configuration:<br>

View File

@@ -13,7 +13,7 @@
<html lang="<?= current_language_code() ?>">
<head>
<meta charset="utf-8">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<base href="<?= base_url() ?>">
<title><?= $config['company'] . '&nbsp;|&nbsp;' . lang('Common.software_short') . '&nbsp;|&nbsp;' . lang('Login.login') ?></title>
<meta name="viewport" content="width=device-width, initial-scale=1">
@@ -26,7 +26,7 @@
? 'flatly'
: $config['theme']);
?>
<link rel="stylesheet" type="text/css" href="resources/bootswatch5/<?= "$theme" ?>/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="<?= "resources/bootswatch5/$theme/bootstrap.min.css" ?>">
<!-- inject:login:css -->
<link rel="stylesheet" href="css/login.min.css">
<!-- endinject -->
@@ -107,11 +107,10 @@
<footer class="d-flex justify-content-center flex-shrink-0 text-center">
<div class="footer container-fluid bg-body rounded shadow p-3 mb-md-4 mx-md-3">
<span class="text-primary">
<svg height="1.25em" role="img" viewBox="0 0 308.57998 308.57997" xmlns="http://www.w3.org/2000/svg">
<title><?= lang('Common.software_title') . '&nbsp;' . lang('Common.logo') ?></title>
<circle cx="154.28999" cy="154.28999" r="154.28999" fill="currentColor"/>
<path fill="#fff" d="M154.88998 145.66999c-.03-1.26-.03-3.29.19-4.29 4.6-11.1 15.57-18.82 28.3-18.82h.41v58.3c0 .12-.03.78-.04.9-.54 16.46-14.01 29.7-30.59 29.7v27.08c21 0 39.17-11.27 49.29-28.07l.07-.11c2.9.45 5.86.75 8.9.75 31.95 0 57.81-26 57.81-57.81 0-30.87-24.37-56.46-55.1-57.81h-30.74c-17.18 0-32.61 7.64-43.22 19.63-10.59-11.92-25.86-19.59-43.02-19.59-31.86 0-57.77 25.91-57.77 57.77 0 31.86 25.91 57.77 57.77 57.77 31.86 0 57.77-25.91 57.77-57.77v-3.68c-.01.01-.02-3.31-.03-3.95zm-57.75 38.33c-16.92 0-30.69-13.77-30.69-30.69s13.77-30.69 30.69-30.69 30.69 13.77 30.69 30.69-13.77 30.69-30.69 30.69zm142.96-19.87c-4.33 11.64-15.57 19.9-28.7 19.9h-.54v-61.47h.54c13.13 0 24.37 8.26 28.7 19.9 1.35 3.25 2.03 6.91 2.03 10.83s-.67 7.59-2.03 10.84z"/>
<span class="text-body-secondary">
<svg height="1em" role="img" viewBox="0 0 229.85 143.05001" xmlns="http://www.w3.org/2000/svg">
<title><?= lang('Common.software_short') . '&nbsp;' . lang('Common.logo_mark') ?></title>
<path fill="currentColor" d="M115.51 50.18c-.03-1.26-.03-3.29.19-4.29 4.6-11.1 15.57-18.82 28.3-18.82h.41v58.3c0 .12-.03.78-.04.9-.54 16.46-14.01 29.7-30.59 29.7v27.08c21 0 39.17-11.27 49.29-28.07l.07-.11c2.9.45 5.86.75 8.9.75 31.95 0 57.81-26 57.81-57.81 0-30.87-24.37-56.46-55.1-57.81h-30.74c-17.18 0-32.61 7.64-43.22 19.63C90.2 7.71 74.93.04 57.77.04 25.91.04 0 25.95 0 57.81c0 31.86 25.91 57.77 57.77 57.77 31.86 0 57.77-25.91 57.77-57.77v-3.68c-.01.01-.02-3.31-.03-3.95zM57.76 88.51c-16.92 0-30.69-13.77-30.69-30.69s13.77-30.69 30.69-30.69S88.45 40.9 88.45 57.82 74.68 88.51 57.76 88.51zm142.96-19.87c-4.33 11.64-15.57 19.9-28.7 19.9h-.54V27.07h.54c13.13 0 24.37 8.26 28.7 19.9 1.35 3.25 2.03 6.91 2.03 10.83s-.67 7.59-2.03 10.84z"/>
</svg>
</span>
<span><?= lang('Common.software_title') ?></span>

View File

@@ -56,7 +56,7 @@ $request = Services::request();
<div class="navbar-right" style="margin:0">
<?= anchor("home/changePassword/$user_info->person_id", "$user_info->first_name $user_info->last_name", ['class' => 'modal-dlg', 'data-btn-submit' => lang('Common.submit'), 'title' => lang('Employees.change_password')]) ?>
<span>&nbsp;|&nbsp;</span>
<?= ' | ' . ((ENVIRONMENT == 'development' || $request->getGet('debugdebug') == 'true') ? session('session_sha1') . ' | ' : '') ?>
<?= anchor('home/logout', lang('Login.logout')) ?>
</div>

View File

@@ -37,9 +37,7 @@
if ($config['company_logo'] != '')
{
?>
<div id="company_name">
<img id="image" src="<?= base_url('uploads/' . esc($config['company_logo'], 'url')) ?>" alt="company_logo" />
</div>
<div id="company_name"><img id="image" src="<?= esc(base_url('uploads/' . $config['company_logo']), 'url') ?>" alt="company_logo" /></div>
<?php
}
?>

View File

@@ -219,7 +219,7 @@ if (isset($success))
{
?>
<td><?= $item['discount'] ?></td>
<?= form_hidden('discount', (string)$item['discount']) ?>
<?= form_hidden('discount', $item['discount']) ?>
<?php
}
?>

View File

@@ -53,6 +53,8 @@
.bootstrapTable({
columns: <?= transform_headers(esc($headers), true, false) ?>,
stickyHeader: true,
stickyHeaderOffsetLeft: $('#table').offset().left + 'px',
stickyHeaderOffsetRight: $('#table').offset().right + 'px',
pageSize: <?= $config['lines_per_page'] ?>,
sortable: true,
showExport: true,

View File

@@ -62,6 +62,8 @@
.bootstrapTable({
columns: <?= transform_headers(esc($headers['summary']), true) ?>,
stickyHeader: true,
stickyHeaderOffsetLeft: $('#table').offset().left + 'px',
stickyHeaderOffsetRight: $('#table').offset().right + 'px',
pageSize: <?= $config['lines_per_page'] ?>,
pagination: true,
sortable: true,

View File

@@ -255,7 +255,8 @@ $(document).ready(function()
<div id="sale_return_policy">
<h5>
<span><?= nl2br(esc($config['payment_message'])) ?></span>
<span style='padding:4%;'><?= empty($comments) ? esc($config['invoice_default_comments']) : lang('Sales.comments') . ': ' . esc($comments) ?></span>
<span style='padding:4%;'><?= empty($comments) ? '' : lang('Sales.comments') . ': ' . esc($comments) ?></span>
<span style='padding:4%;'><?= esc($config['invoice_default_comments']) ?></span>
</h5>
<div style='padding:2%;'><?= nl2br(esc($config['return_policy'])) ?></div>
</div>

View File

@@ -19,6 +19,7 @@
*/
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="<?= $this->request->getLocale() ?>">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="<?= base_url('css/invoice_email.css') ?>"/>
@@ -207,7 +208,7 @@ if(isset($error_message))
<?= nl2br($config['return_policy']) ?>
</div>
<div id='barcode'>
<img alt=<?='$sale_id'?> src='data:image/svg+xml;base64,<?= base64_encode($barcode) ?>' /><br>
<img alt='<?= esc($barcode, 'attr') ?>' src='data:image/png;base64,<?= esc($barcode, 'attr') ?>' /><br>
<?= $sale_id ?>
</div>
</div>

View File

@@ -24,7 +24,7 @@ if (isset($error_message))
{
var send_email = function()
{
$.get('<?= site_url() . esc("/sales/sendPdf/$sale_id_num/receipt") ?>',
$.get('<?= site_url() . esc("/sales/sendReceipt/$sale_id_num", 'url') ?>',
function(response)
{
$.notify( { message: response.message }, { type: response.success ? 'success' : 'danger'} )

View File

@@ -116,7 +116,7 @@
<?php
}
?>
<td class="total-value" style="text-align:right;"><?= to_currency($item['discounted_total']) ?></td>
<td class="total-value"><?= to_currency($item['discounted_total']) ?></td>
</tr>
<?php
}
@@ -170,6 +170,10 @@
<td style="<?= $border ? 'border-top: 2px solid black;' : '' ?>text-align:right"><?= to_currency($total) ?></td>
</tr>
<tr>
<td colspan="4">&nbsp;</td>
</tr>
<?php
$only_sale_check = false;
$show_giftcard_remainder = false;
@@ -186,7 +190,11 @@
<?php
}
?>
<tr>
<td colspan="4">&nbsp;</td>
</tr>
<?php
if(isset($cur_giftcard_value) && $show_giftcard_remainder)
{
@@ -208,14 +216,14 @@
</tr>
</table>
<div id="terms">
<div id="sale_return_policy" style="text-align:center">
<?= nl2br(esc($config['return_policy'])) ?>
</div>
<div id='barcode' style="text-align:center">
<img alt=<?='$sale_id'?> src='data:image/svg+xml;base64,<?= base64_encode($barcode) ?>' /><br>
<?= $sale_id ?>
</div>
<div id="sale_return_policy" style="text-align:center">
<?= nl2br(esc($config['return_policy'])) ?>
</div>
<br>
<div id="barcode" style="text-align:center">
<?= $barcode ?><br>
<?= $sale_id ?>
</div>
</div>

View File

@@ -11,7 +11,7 @@ services:
depends_on:
- mysql
ports:
- "80:80"
- "127.0.0.1:80:80"
networks:
- app_net
volumes:

View File

@@ -14,7 +14,6 @@ import header from 'gulp-header'
import tar from 'gulp-tar'
import gzip from 'gulp-gzip'
import zip from 'gulp-zip'
import run from 'gulp-run'
import { Stream } from 'readable-stream'
const {finished, pipeline} = Stream.promises
@@ -32,9 +31,9 @@ gulp.task('clean', function () {
});
gulp.task('compress', function() {
const sources = ['app*/**/*', 'public*/**/*', 'vendor*/**/*', '*.md', 'LICENSE', 'docker*', 'Dockerfile', '**/.htaccess', 'writable*/**/*'] ;
gulp.src(sources, {encoding: false}).pipe(tar('opensourcepos.tar')).pipe(gulp.dest('dist'));
return gulp.src(sources, {encoding: false}).pipe(zip('opensourcepos.zip')).pipe(gulp.dest('dist'));
const sources = ['public/**', 'vendor/**', '*.md', 'LICENSE', 'docker*', 'docker/**', 'Dockerfile', '**/.htaccess', 'writable/*'] ;
gulp.src(sources).pipe(tar('opensourcepos.tar')).pipe(gzip()).pipe(gulp.dest('dist'));
return gulp.src(sources).pipe(zip('opensourcepos.zip')).pipe(gulp.dest('dist'));
});
// Copy the bootswatch styles into their own folder so OSPOS can select one from the collection
@@ -249,13 +248,6 @@ gulp.task('inject-login', function() {
);
});
gulp.task('update-licenses', function() {
run('composer licenses --format=json --no-dev > public/license/composer.LICENSES').exec();
return pipeline(gulp.src('LICENSE'),gulp.dest('public/license'));
});
gulp.task('build-database', function() {
return gulp.src(['./app/Database/tables.sql','./app/Database/constraints.sql'])
.pipe(header('-- >> This file is autogenerated from tables.sql and constraints.sql. Do not modify directly << --'))
@@ -274,6 +266,5 @@ gulp.task('default',
'prod-css',
'copy-fonts',
'inject-login',
'update-licenses',
'build-database'
));

4510
package-lock.json generated
View File

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,5 @@
{
"name": "@opensourcepos/opensourcepos",
"name": "opensourcepos",
"version": "3.4.0",
"description": "Open Source Point of Sale is a web based point of sale system written in the PHP language. It uses MySQL as the data storage back-end and has a simple user interface.",
"main": "index.php",
@@ -10,9 +10,6 @@
"objecttothis <objecttothis - at - gmail.com>",
"SteveIreland <stevei - at - ruledomain.com>"
],
"files": [
"dist/opensourcepos.$version.tgz"
],
"publishConfig": {
"registry": "https://npm.pkg.github.com/"
},
@@ -20,10 +17,6 @@
"point-of-sale",
"POS"
],
"repository": {
"type": "git",
"url": "https://github.com/opensourcepos/opensourcepos"
},
"scripts": {
"build": "gulp default",
"gulp": "gulp"
@@ -51,6 +44,9 @@
"coffeescript": "^2.7.0",
"es6-promise": "^4.2.8",
"file-saver": "^2.0.5",
"gulp-gzip": "^1.4.2",
"gulp-tar": "^4.0.0",
"gulp-zip": "^6.0.0",
"html2canvas": "^1.4.1",
"jasny-bootstrap": "^3.1.3",
"jquery": "^3.7.1",
@@ -68,16 +64,12 @@
"gulp-clean-css": "^4.3.0",
"gulp-concat": "^2.6.1",
"gulp-debug": "^5.0.1",
"gulp-gzip": "^1.4.2",
"gulp-header": "^2.0.9",
"gulp-inject": "^5.0.5",
"gulp-rename": "^2.0.0",
"gulp-rev": "^10.0.0",
"gulp-run": "^1.7.1",
"gulp-tar": "^4.0.0",
"gulp-uglify": "^3.0.2",
"gulp-zip": "^6.1.0",
"npm-check-updates": "^17.1.14",
"npm-check-updates": "^16.14.11",
"readable-stream": "^4.4.2",
"stream-series": "^0.1.1"
}

View File

@@ -21,7 +21,8 @@
if (button_id == 'submit' && (!submitted && btn_id != "btnNew")) {
form.submit();
$('#submit').prop('disabled', true).css('opacity', 0.5);
validator.valid() && $('#submit').prop('disabled', true).css('opacity', 0.5);
}
return false;
}
@@ -214,6 +215,8 @@
.bootstrapTable($.extend(options, {
columns: options.headers,
stickyHeader: true,
stickyHeaderOffsetLeft: $('#table').offset().left + 'px',
stickyHeaderOffsetRight: $('#table').offset().right + 'px',
url: options.resource + '/search',
sidePagination: 'server',
selectItemName: 'btSelectItem',

View File

@@ -1,30 +1,30 @@
MIT License
Copyright (c) 2013-2024 jekkos
Copyright (c) 2017-2024 objecttothis
Copyright (c) 2017-2024 Steve Ireland
Copyright (c) 2017-2024 odiea
Copyright (c) 2018-2024 WebShells
Copyright (c) 2021-2024 BudsieBuds
Copyright (c) 2015-2023 FrancescoUK (aka daN4cat)
Copyright (c) 2015-2022 Aamir Shahzad (aka asakpke), RoshanTech, eSite.pk
Copyright (c) 2019-2020 Andriux1990
Copyright (c) 2018-2019 Erasto Marroquin (aka Erastus)
Copyright (c) 2013-2022 jekkos
Copyright (c) 2015-2021 FrancescoUK (aka daN4cat)
Copyright (c) 2017-2021 Steve Ireland
Copyright (c) 2017-2022 objecttothis
Copyright (c) 2017-2021 odiea
Copyright (c) 2017-2021 WebShells
Copyright (c) 2020-2021 Andriux1990
Copyright (c) 2021 BudsieBuds
Copyright (c) 2019 Loyd Jayme (aka loydjayme25)
Copyright (c) 2018 Erasto Marroquin (aka Erastus)
Copyright (c) 2018 Nathan Sas (aka nathanzky)
Copyright (c) 2018 Emilio Silva (aka emi-silva)
Copyright (c) 2016-2017 Ramkrishna Mondal (aka RamkrishnaMondal)
Copyright (c) 2016-2017 Jorge Colmenarez (aka jlctmaster), frontuari.com
Copyright (c) 2016-2017 Jesus Guerrero Botella (aka i92guboj)
Copyright (c) 2017 Jesus Guerrero Botella (aka i92guboj)
Copyright (c) 2017 Deep Shah (aka deepshah)
Copyright (c) 2017 Joshua Fernandez (aka joshua1234511)
Copyright (c) 2017 asadjaved63
Copyright (c) 2016-2017 Ramkrishna Mondal (aka RamkrishnaMondal)
Copyright (c) 2016-2017 Jorge Colmenarez (aka jlctmaster), frontuari.com
Copyright (c) 2016 Rinaldy@dbarber (aka rnld26)
Copyright (c) 2015-2022 Aamir Shahzad (aka asakpke), RoshanTech, eSite.pk
Copyright (c) 2015 Toni Haryanto (aka yllumi)
Copyright (c) 2012-2014 pappastech
Copyright (c) 2013 Rob Garrison
Copyright (c) 2013 Parq
Copyright (c) 2013 Ramel
Copyright (c) 2012-2014 pappastech
Copyright (c) 2012 Alain
Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -34,16 +34,16 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Additionally, you cannot claim copyright or ownership of the Software.

View File

@@ -1,6 +1,7 @@
The MIT License (MIT)
Copyright (c) 2011-2024 The Bootstrap Authors
Copyright (c) 2011-2021 Twitter, Inc.
Copyright (c) 2011-2021 The Bootstrap Authors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@@ -1 +1 @@
Bootstrap 5.3.3
Bootstrap 5.0.1

View File

@@ -1,6 +1,6 @@
The MIT License (MIT)
Copyright (c) 2019-2024 The Bootstrap Authors
Copyright (c) 2019-2020 The Bootstrap Authors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@@ -1 +1 @@
Bootstrap Icons 1.11.3
Bootstrap Icons 1.5.0

View File

@@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2013 Thomas Park
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View File

@@ -0,0 +1 @@
Bootswatch 5.0.1

View File

@@ -1 +1 @@
Bootswatch 3.4.1+1 & 5.3.3
Bootswatch 3.4.1+1

View File

@@ -1,87 +1,63 @@
{
"name": "opensourcepos/opensourcepos",
"version": "dev-master",
"name": "OpenSourcePOS",
"version": "3.4.0",
"license": [
"MIT"
],
"dependencies": {
"codeigniter4/framework": {
"version": "v4.5.5",
"codeigniter/framework": {
"version": "4.1.3",
"license": [
"MIT"
]
},
"dompdf/dompdf": {
"version": "v2.0.4",
"license": [
"LGPL-2.1"
]
},
"ezyang/htmlpurifier": {
"version": "v4.17.0",
"version": "v0.8.6",
"license": [
"LGPL-2.1-or-later"
]
},
"laminas/laminas-escaper": {
"version": "2.13.0",
"mikey179/vfsStream": {
"version": "v1.1.0",
"license": [
"BSD-3-Clause"
]
},
"masterminds/html5": {
"version": "2.8.1",
"license": [
"MIT"
"BSD"
]
},
"paragonie/random_compat": {
"version": "v2.0.21",
"version": "2.0.19",
"license": [
"MIT"
]
},
"phenx/php-font-lib": {
"version": "0.5.6",
"license": [
"LGPL-2.1-or-later"
]
},
"phenx/php-svg-lib": {
"version": "0.5.2",
"license": [
"LGPL-3.0"
]
},
"picqer/php-barcode-generator": {
"version": "v2.4.0",
"license": [
"LGPL-3.0-or-later"
]
},
"sabberworm/php-css-parser": {
"version": "v8.5.1",
"phenx/php-svg-lib": {
"version": "0.3.3",
"license": [
"MIT"
]
},
"symfony/polyfill-ctype": {
"version": "v1.31.0",
"license": [
"MIT"
]
},
"symfony/polyfill-mbstring": {
"version": "v1.31.0",
"license": [
"MIT"
"LGPL-3.0-or-later"
]
},
"tamtamchik/namecase": {
"version": "3.0.0",
"version": "1.0.6",
"license": [
"MIT"
]
},
"vlucas/phpdotenv": {
"version": "2.6.6",
"license": [
"BSD-3-Clause-Attribution"
]
},
"symfony/polyfill-ctype": {
"version": "v1.20.0",
"license": [
"MIT"
]
}
}
}