diff --git a/.env.example b/.env.example index 17298ab69..ad267516d 100644 --- a/.env.example +++ b/.env.example @@ -4,6 +4,35 @@ CI_ENVIRONMENT = production +#-------------------------------------------------------------------- +# SECURITY: ALLOWED HOSTNAMES +#-------------------------------------------------------------------- +# IMPORTANT: Whitelist of allowed hostnames to prevent Host Header +# Injection attacks (GHSA-jchf-7hr6-h4f3). +# +# If not configured, the application will default to 'localhost', +# which may break functionality in production. +# +# Configure this with all domains/subdomains that host your application: +# - Primary domain +# - WWW subdomain (if used) +# - Any alternative domains +# +# Examples: +# Single domain: +# app.allowedHostnames.0 = 'example.com' +# +# Multiple domains: +# app.allowedHostnames.0 = 'example.com' +# app.allowedHostnames.1 = 'www.example.com' +# app.allowedHostnames.2 = 'demo.opensourcepos.org' +# +# For localhost development: +# app.allowedHostnames.0 = 'localhost' +# +# Note: Do not include the protocol (http/https) or port number. +#app.allowedHostnames.0 = '' + #-------------------------------------------------------------------- # DATABASE #-------------------------------------------------------------------- diff --git a/.github/workflows/update-issue-templates.yml b/.github/workflows/update-issue-templates.yml new file mode 100644 index 000000000..f101a6264 --- /dev/null +++ b/.github/workflows/update-issue-templates.yml @@ -0,0 +1,72 @@ +name: Update Issue Templates + +on: + release: + types: [published] + workflow_dispatch: + schedule: + - cron: '0 0 * * 0' + +jobs: + update-templates: + runs-on: ubuntu-latest + permissions: + contents: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Fetch releases and update templates + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + # Fetch releases from GitHub API + RELEASES=$(gh api repos/${{ github.repository }}/releases --jq '.[].tag_name' | head -n 10) + + # Create temporary file with options + OPTIONS_FILE=$(mktemp) + echo " - development (unreleased)" >> "$OPTIONS_FILE" + while IFS= read -r release; do + echo " - opensourcepos $release" >> "$OPTIONS_FILE" + done <<< "$RELEASES" + + update_template() { + local template="$1" + local template_path=".github/ISSUE_TEMPLATE/$template" + + # Find the line numbers for the OpensourcePOS Version dropdown + start_line=$(grep -n "label: OpensourcePOS Version" "$template_path" | cut -d: -f1) + + if [ -z "$start_line" ]; then + echo "Could not find OpensourcePOS Version in $template" + return 1 + fi + + # Find the options section and default line + options_start=$((start_line + 3)) + default_line=$(grep -n "default:" "$template_path" | awk -F: -v opts="$options_start" '$1 > opts {print $1; exit}') + + # Create new template file + head -n $((options_start - 1)) "$template_path" > "${template_path}.new" + cat "$OPTIONS_FILE" >> "${template_path}.new" + tail -n +$default_line "$template_path" >> "${template_path}.new" + mv "${template_path}.new" "$template_path" + + echo "Updated $template" + } + + update_template "bug report.yml" + update_template "feature_request.yml" + + - name: Commit and push changes + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add .github/ISSUE_TEMPLATE/*.yml + if git diff --staged --quiet; then + echo "No changes to commit" + else + git commit -m "Update issue templates with latest releases [skip ci]" + git push + fi \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 000000000..828ceae42 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,40 @@ +# Agent Instructions + +This document provides guidance for AI agents working on the Open Source Point of Sale (OSPOS) codebase. + +## Code Style + +- Follow PHP CodeIgniter 4 coding standards +- Run PHP-CS-Fixer before committing: `vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.no-header.php` +- Write PHP 8.1+ compatible code with proper type declarations +- Use PSR-12 naming conventions: `camelCase` for variables and functions, `PascalCase` for classes, `UPPER_CASE` for constants + +## Development + +- Create a new git worktree for each issue, based on the latest state of `origin/master` +- Commit fixes to the worktree and push to the remote + +## Testing + +- Run PHPUnit tests: `composer test` +- Tests must pass before submitting changes + +## Build + +- Install dependencies: `composer install && npm install` +- Build assets: `npm run build` or `gulp` + +## Conventions + +- Controllers go in `app/Controllers/` +- Models go in `app/Models/` +- Views go in `app/Views/` +- Database migrations in `app/Database/Migrations/` +- Use CodeIgniter 4 framework patterns and helpers +- Sanitize user input; escape output using `esc()` helper + +## Security + +- Never commit secrets, credentials, or `.env` files +- Use parameterized queries to prevent SQL injection +- Validate and sanitize all user input \ No newline at end of file diff --git a/Dockerfile.test b/Dockerfile.test new file mode 100644 index 000000000..3729f6ac9 --- /dev/null +++ b/Dockerfile.test @@ -0,0 +1,3 @@ +FROM php:8.4-cli +RUN apt-get update && apt-get install -y libicu-dev && docker-php-ext-install intl +WORKDIR /app \ No newline at end of file diff --git a/INSTALL.md b/INSTALL.md index 3aeeca927..df08c0afc 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -6,6 +6,36 @@ - Raspberry PI based installations proved to work, see [wiki page here](). - For Windows based installations please read [the wiki](https://github.com/opensourcepos/opensourcepos/wiki). There are closed issues about this subject, as this topic has been covered a lot. +## Security Configuration + +### Allowed Hostnames (Required for Production) + +OpenSourcePOS validates the Host header against a whitelist to prevent Host Header Injection attacks (GHSA-jchf-7hr6-h4f3). **You must configure this for production deployments.** + +Add the following to your `.env` file: + +``` +app.allowedHostnames.0 = 'yourdomain.com' +app.allowedHostnames.1 = 'www.yourdomain.com' +``` + +**For local development**, use: +``` +app.allowedHostnames.0 = 'localhost' +``` + +If `allowedHostnames` is not configured: +1. A security warning will be logged +2. The application will fall back to 'localhost' as the hostname +3. This means URLs generated by the application (links, redirects, etc.) will point to 'localhost' + +### HTTPS Behind Proxy + +If your installation is behind a proxy with SSL offloading, set: +``` +FORCE_HTTPS = true +``` + ## Local install First of all, if you're seeing the message `system folder missing` after launching your browser, or cannot find `database.sql`, that most likely means you have cloned the repository and have not built the project. To build the project from a source commit point instead of from an official release check out [Building OSPOS](BUILD.md). Otherwise, continue with the following steps. diff --git a/SECURITY.md b/SECURITY.md index e44f737a0..771524f48 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,9 +1,9 @@ - - [Security Policy](#security-policy) - [Supported Versions](#supported-versions) + - [Security Advisories](#security-advisories) - [Reporting a Vulnerability](#reporting-a-vulnerability) @@ -12,14 +12,35 @@ ## Supported Versions -We release patches for security vulnerabilities. Which versions are eligible to receive such patches depend on the CVSS v3.0 Rating: +We release patches for security vulnerabilities. -| CVSS v3.0 | Supported Versions | -| --------- | -------------------------------------------------- | -| 7.3 | 3.3.5 | -| 9.8 | 3.3.6 | -| 6.8 | 3.4.2 | +| Version | Supported | +| --------- | ------------------ | +| >= 3.4.2 | :white_check_mark: | +| < 3.4.2 | :x: | + +## Security Advisories + +The following security vulnerabilities have been published: + +### High Severity + +| CVE | Vulnerability | CVSS | Published | Fixed In | Credit | +|-----|--------------|------|-----------|----------|--------| +| [CVE-2025-68434](https://github.com/opensourcepos/opensourcepos/security/advisories/GHSA-wjm4-hfwg-5w5r) | CSRF leading to Admin Creation | 8.8 | 2025-12-17 | 3.4.2 | @Nixon-H, @jekkos | +| [CVE-2025-68147](https://github.com/opensourcepos/opensourcepos/security/advisories/GHSA-xgr7-7pvw-fpmh) | Stored XSS in Return Policy | 8.1 | 2025-12-17 | 3.4.2 | @Nixon-H, @jekkos | +| [CVE-2025-66924](https://github.com/opensourcepos/opensourcepos/security/advisories/GHSA-gv8j-f6gq-g59m) | Stored XSS in Item Kits | 7.2 | 2026-03-04 | 3.4.2 | @hungnqdz, @omkaryepre | + +### Medium Severity + +| CVE | Vulnerability | CVSS | Published | Fixed In | Credit | +|-----|--------------|------|-----------|----------|--------| +| [CVE-2025-68658](https://github.com/opensourcepos/opensourcepos/security/advisories/GHSA-32r8-8r9r-9chw) | Stored XSS in Company Name | 4.3 | 2026-01-13 | 3.4.2 | @hungnqdz | + +For a complete list including draft advisories, see our [GitHub Security Advisories page](https://github.com/opensourcepos/opensourcepos/security/advisories). ## Reporting a Vulnerability -Please report (suspected) security vulnerabilities to **[jeroen@steganos.dev](mailto:jeroen@steganos.dev)**. You will receive a response from us within 48 hours. If the issue is confirmed, we will release a patch as soon as possible depending on complexity but historically within a few days. +Please report (suspected) security vulnerabilities to **[jeroen@steganos.dev](mailto:jeroen@steganos.dev)**. + +You will receive a response from us within 48 hours. If the issue is confirmed, we will release a patch as soon as possible depending on complexity but historically within a few days. \ No newline at end of file diff --git a/app/Config/App.php b/app/Config/App.php index 257d1e786..a24c70dd0 100644 --- a/app/Config/App.php +++ b/app/Config/App.php @@ -55,13 +55,21 @@ class App extends BaseConfig public string $baseURL; // Defined in the constructor /** - * Allowed Hostnames in the Site URL other than the hostname in the baseURL. - * If you want to accept multiple Hostnames, set this. - * - * E.g., - * When your site URL ($baseURL) is 'http://example.com/', and your site - * also accepts 'http://media.example.com/' and 'http://accounts.example.com/': - * ['media.example.com', 'accounts.example.com'] + * Allowed Hostnames for the Site URL. + * + * Security: This is used to validate the HTTP Host header to prevent + * Host Header Injection attacks. If the Host header doesn't match + * an entry in this list, the request will use the first allowed hostname. + * + * IMPORTANT: This MUST be configured for production deployments. + * If empty, the application will fall back to 'localhost'. + * + * Configure via .env file: + * app.allowedHostnames.0 = 'example.com' + * app.allowedHostnames.1 = 'www.example.com' + * + * For local development: + * app.allowedHostnames.0 = 'localhost' * * @var list */ @@ -284,8 +292,44 @@ class App extends BaseConfig { parent::__construct(); $this->https_on = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_ENV['FORCE_HTTPS']) && $_ENV['FORCE_HTTPS'] == 'true'); + + $host = $this->getValidHost(); $this->baseURL = $this->https_on ? 'https' : 'http'; - $this->baseURL .= '://' . ((isset($_SERVER['HTTP_HOST'])) ? $_SERVER['HTTP_HOST'] : 'localhost') . '/'; + $this->baseURL .= '://' . $host . '/'; $this->baseURL .= str_replace(basename($_SERVER['SCRIPT_NAME']), '', $_SERVER['SCRIPT_NAME']); } + + /** + * Validates and returns a trusted hostname. + * + * Security: Prevents Host Header Injection attacks (GHSA-jchf-7hr6-h4f3) + * by validating the HTTP_HOST against a whitelist of allowed hostnames. + * + * @return string A validated hostname + */ + private function getValidHost(): string + { + $httpHost = $_SERVER['HTTP_HOST'] ?? 'localhost'; + + if (empty($this->allowedHostnames)) { + log_message('warning', + 'Security: allowedHostnames is not configured. ' . + 'Host header injection protection is disabled. ' . + 'Please set app.allowedHostnames in your .env file. ' . + 'Received Host: ' . $httpHost + ); + return 'localhost'; + } + + if (in_array($httpHost, $this->allowedHostnames, true)) { + return $httpHost; + } + + log_message('warning', + 'Security: Rejected HTTP_HOST "' . $httpHost . '" - not in allowedHostnames whitelist. ' . + 'Using fallback: ' . $this->allowedHostnames[0] + ); + + return $this->allowedHostnames[0]; + } } diff --git a/app/Controllers/Attributes.php b/app/Controllers/Attributes.php index 47a8d05e9..c8da0467c 100644 --- a/app/Controllers/Attributes.php +++ b/app/Controllers/Attributes.php @@ -106,12 +106,24 @@ class Attributes extends Secure_Controller $definition_flags |= $flag; } + // Validate definition_group (definition_fk) foreign key + $definition_group_input = $this->request->getPost('definition_group'); + $definition_fk = $this->validateDefinitionGroup($definition_group_input); + + if ($definition_fk === false) { + return $this->response->setJSON([ + 'success' => false, + 'message' => lang('Attributes.definition_invalid_group'), + 'id' => NEW_ENTRY + ]); + } + // Save definition data $definition_data = [ 'definition_name' => $this->request->getPost('definition_name'), 'definition_unit' => $this->request->getPost('definition_unit') != '' ? $this->request->getPost('definition_unit') : null, 'definition_flags' => $definition_flags, - 'definition_fk' => $this->request->getPost('definition_group') != '' ? $this->request->getPost('definition_group') : null + 'definition_fk' => $definition_fk ]; if ($this->request->getPost('definition_type') != null) { @@ -150,6 +162,32 @@ class Attributes extends Secure_Controller } } + /** + * Validates a definition_group foreign key. + * Returns the validated integer ID, null if empty, or false if invalid. + * + * @param mixed $definition_group_input + * @return int|null|false + */ + private function validateDefinitionGroup(mixed $definition_group_input): int|null|false + { + if ($definition_group_input === '' || $definition_group_input === null) { + return null; + } + + $definition_group_id = (int) $definition_group_input; + + // Must be a positive integer, exist in attribute_definitions, and be of type GROUP + if ($definition_group_id <= 0 + || !$this->attribute->exists($definition_group_id) + || $this->attribute->getAttributeInfo($definition_group_id)->definition_type !== GROUP + ) { + return false; + } + + return $definition_group_id; + } + /** * * @param int $definition_id diff --git a/app/Controllers/Cashups.php b/app/Controllers/Cashups.php index 6cb06151a..0e9b06f23 100644 --- a/app/Controllers/Cashups.php +++ b/app/Controllers/Cashups.php @@ -36,6 +36,9 @@ class Cashups extends Secure_Controller // filters that will be loaded in the multiselect dropdown $data['filters'] = ['is_deleted' => lang('Cashups.is_deleted')]; + // Restore filters from URL + $data = array_merge($data, restoreTableFilters($this->request)); + return view('cashups/manage', $data); } diff --git a/app/Controllers/Config.php b/app/Controllers/Config.php index 8d04c2baf..a4ba1f609 100644 --- a/app/Controllers/Config.php +++ b/app/Controllers/Config.php @@ -11,6 +11,7 @@ use App\Models\Appconfig; use App\Models\Attribute; use App\Models\Customer_rewards; use App\Models\Dinner_table; +use App\Models\Item; use App\Models\Module; use App\Models\Enums\Rounding_mode; use App\Models\Stock_location; @@ -385,9 +386,9 @@ class Config extends Secure_Controller 'gcaptcha_enable' => $this->request->getPost('gcaptcha_enable') != null, 'gcaptcha_secret_key' => $this->request->getPost('gcaptcha_secret_key'), 'gcaptcha_site_key' => $this->request->getPost('gcaptcha_site_key'), - 'suggestions_first_column' => $this->request->getPost('suggestions_first_column'), - 'suggestions_second_column' => $this->request->getPost('suggestions_second_column'), - 'suggestions_third_column' => $this->request->getPost('suggestions_third_column'), + 'suggestions_first_column' => $this->validateSuggestionsColumn($this->request->getPost('suggestions_first_column'), 'first'), + 'suggestions_second_column' => $this->validateSuggestionsColumn($this->request->getPost('suggestions_second_column'), 'other'), + 'suggestions_third_column' => $this->validateSuggestionsColumn($this->request->getPost('suggestions_third_column'), 'other'), 'giftcard_number' => $this->request->getPost('giftcard_number'), 'derive_sale_quantity' => $this->request->getPost('derive_sale_quantity') != null, 'multi_pack_enabled' => $this->request->getPost('multi_pack_enabled') != null, @@ -976,4 +977,26 @@ class Config extends Secure_Controller return $this->response->setJSON(['success' => $success]); } + + /** + * Validates suggestions column configuration to prevent SQL injection. + * + * @param mixed $column The column value from POST + * @param string $fieldType Either 'first' or 'other' to determine default fallback + * @return string Validated column name + */ + private function validateSuggestionsColumn(mixed $column, string $fieldType): string + { + if (!is_string($column)) { + return $fieldType === 'first' ? 'name' : ''; + } + + $allowed = $fieldType === 'first' + ? Item::ALLOWED_SUGGESTIONS_COLUMNS + : Item::ALLOWED_SUGGESTIONS_COLUMNS_WITH_EMPTY; + + $fallback = $fieldType === 'first' ? 'name' : ''; + + return in_array($column, $allowed, true) ? $column : $fallback; + } } diff --git a/app/Controllers/Expenses.php b/app/Controllers/Expenses.php index d2ec24a46..258ae1dcf 100644 --- a/app/Controllers/Expenses.php +++ b/app/Controllers/Expenses.php @@ -38,6 +38,9 @@ class Expenses extends Secure_Controller 'is_deleted' => lang('Expenses.is_deleted') ]; + // Restore filters from URL + $data = array_merge($data, restoreTableFilters($this->request)); + return view('expenses/manage', $data); } @@ -90,16 +93,23 @@ class Expenses extends Secure_Controller { $data = []; // TODO: Duplicated code - $data['employees'] = []; - foreach ($this->employee->get_all()->getResult() as $employee) { - foreach (get_object_vars($employee) as $property => $value) { - $employee->$property = $value; - } - - $data['employees'][$employee->person_id] = $employee->first_name . ' ' . $employee->last_name; - } - $data['expenses_info'] = $this->expense->get_info($expense_id); + $expense_id = $data['expenses_info']->expense_id; + + $current_employee_id = $this->employee->get_logged_in_employee_info()->person_id; + $can_assign_employee = $this->employee->has_grant('employees', $current_employee_id); + + $data['employees'] = []; + if ($can_assign_employee) { + foreach ($this->employee->get_all()->getResult() as $employee) { + $data['employees'][$employee->person_id] = $employee->first_name . ' ' . $employee->last_name; + } + } else { + $stored_employee_id = $expense_id == NEW_ENTRY ? $current_employee_id : $data['expenses_info']->employee_id; + $stored_employee = $this->employee->get_info($stored_employee_id); + $data['employees'][$stored_employee_id] = $stored_employee->first_name . ' ' . $stored_employee->last_name; + } + $data['can_assign_employee'] = $can_assign_employee; $expense_categories = []; foreach ($this->expense_category->get_all(0, 0, true)->getResultArray() as $row) { @@ -107,11 +117,9 @@ class Expenses extends Secure_Controller } $data['expense_categories'] = $expense_categories; - $expense_id = $data['expenses_info']->expense_id; - if ($expense_id == NEW_ENTRY) { $data['expenses_info']->date = date('Y-m-d H:i:s'); - $data['expenses_info']->employee_id = $this->employee->get_logged_in_employee_info()->person_id; + $data['expenses_info']->employee_id = $current_employee_id; } $data['payments'] = []; @@ -152,6 +160,20 @@ class Expenses extends Secure_Controller $date_formatter = date_create_from_format($config['dateformat'] . ' ' . $config['timeformat'], $newdate); + $current_employee_id = $this->employee->get_logged_in_employee_info()->person_id; + $submitted_employee_id = $this->request->getPost('employee_id', FILTER_SANITIZE_NUMBER_INT); + + if (!$this->employee->has_grant('employees', $current_employee_id)) { + if ($expense_id == NEW_ENTRY) { + $employee_id = $current_employee_id; + } else { + $existing_expense = $this->expense->get_info($expense_id); + $employee_id = $existing_expense->employee_id; + } + } else { + $employee_id = $submitted_employee_id; + } + $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), @@ -161,7 +183,7 @@ class Expenses extends Secure_Controller '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), - 'employee_id' => $this->request->getPost('employee_id', FILTER_SANITIZE_NUMBER_INT), + 'employee_id' => $employee_id, 'deleted' => $this->request->getPost('deleted') != null ]; diff --git a/app/Controllers/Home.php b/app/Controllers/Home.php index fb5177925..97d270ffd 100644 --- a/app/Controllers/Home.php +++ b/app/Controllers/Home.php @@ -36,19 +36,18 @@ class Home extends Secure_Controller /** * Load "change employee password" form * - * @return string + * @return ResponseInterface|string * @noinspection PhpUnused */ - public function getChangePassword(int $employeeId = NEW_ENTRY): string + public function getChangePassword(int $employeeId = NEW_ENTRY) { $loggedInEmployee = $this->employee->get_logged_in_employee_info(); $currentPersonId = $loggedInEmployee->person_id; $employeeId = $employeeId === NEW_ENTRY ? $currentPersonId : $employeeId; - if (!$this->employee->can_modify_employee($employeeId, $currentPersonId)) { - header('Location: ' . base_url('no_access/home/home')); - exit(); + if (!$this->employee->isAdmin($currentPersonId) && $employeeId !== $currentPersonId) { + return $this->response->setStatusCode(403)->setBody(lang('Employees.unauthorized_modify')); } $person_info = $this->employee->get_info($employeeId); @@ -71,7 +70,7 @@ class Home extends Secure_Controller $employeeId = $employeeId === NEW_ENTRY ? $currentUser->person_id : $employeeId; - if (!$this->employee->can_modify_employee($employeeId, $currentUser->person_id)) { + if (!$this->employee->isAdmin($currentUser->person_id) && $employeeId !== $currentUser->person_id) { return $this->response->setStatusCode(403)->setJSON([ 'success' => false, 'message' => lang('Employees.unauthorized_modify') diff --git a/app/Controllers/Items.php b/app/Controllers/Items.php index e2cf400c3..66a1017b2 100644 --- a/app/Controllers/Items.php +++ b/app/Controllers/Items.php @@ -71,7 +71,12 @@ class Items extends Secure_Controller $this->session->set('allow_temp_items', 0); $data['table_headers'] = get_items_manage_table_headers(); - $data['stock_location'] = $this->item_lib->get_item_location(); + + // Restore stock_location from URL or session + $stockLocation = $this->request->getGet('stock_location', FILTER_SANITIZE_NUMBER_INT); + $data['stock_location'] = $stockLocation + ? $stockLocation + : $this->item_lib->get_item_location(); $data['stock_locations'] = $this->stock_location->get_allowed_locations(); // Filters that will be loaded in the multiselect dropdown @@ -85,6 +90,9 @@ class Items extends Secure_Controller 'temporary' => lang('Items.temp') ]; + // Restore filters from URL + $data = array_merge($data, restoreTableFilters($this->request)); + return view('items/manage', $data); } diff --git a/app/Controllers/Receivings.php b/app/Controllers/Receivings.php index 52f0169ac..1294bd152 100644 --- a/app/Controllers/Receivings.php +++ b/app/Controllers/Receivings.php @@ -241,15 +241,26 @@ class Receivings extends Secure_Controller $data['suppliers'][$supplier->person_id] = $supplier->first_name . ' ' . $supplier->last_name; } + $receiving_info = $this->receiving->get_info($receiving_id)->getRowArray(); + + $current_employee_id = $this->employee->get_logged_in_employee_info()->person_id; + $can_assign_employee = $this->employee->has_grant('employees', $current_employee_id); + $data['employees'] = []; - foreach ($this->employee->get_all()->getResult() as $employee) { - $data['employees'][$employee->person_id] = $employee->first_name . ' ' . $employee->last_name; + if ($can_assign_employee) { + foreach ($this->employee->get_all()->getResult() as $employee) { + $data['employees'][$employee->person_id] = $employee->first_name . ' ' . $employee->last_name; + } + } else { + $stored_employee_id = $receiving_info['employee_id']; + $stored_employee = $this->employee->get_info($stored_employee_id); + $data['employees'][$stored_employee_id] = $stored_employee->first_name . ' ' . $stored_employee->last_name; } - $receiving_info = $this->receiving->get_info($receiving_id)->getRowArray(); $data['selected_supplier_name'] = !empty($receiving_info['supplier_id']) ? $receiving_info['company_name'] : ''; $data['selected_supplier_id'] = $receiving_info['supplier_id']; $data['receiving_info'] = $receiving_info; + $data['can_assign_employee'] = $can_assign_employee; return view('receivings/form', $data); } @@ -491,10 +502,20 @@ class Receivings extends Secure_Controller $date_formatter = date_create_from_format($this->config['dateformat'] . ' ' . $this->config['timeformat'], $newdate); $receiving_time = $date_formatter->format('Y-m-d H:i:s'); + $current_employee_id = $this->employee->get_logged_in_employee_info()->person_id; + $submitted_employee_id = $this->request->getPost('employee_id', FILTER_SANITIZE_NUMBER_INT); + + if (!$this->employee->has_grant('employees', $current_employee_id)) { + $existing_receiving = $this->receiving->get_info($receiving_id)->getRowArray(); + $employee_id = $existing_receiving['employee_id']; + } else { + $employee_id = $submitted_employee_id; + } + $receiving_data = [ 'receiving_time' => $receiving_time, 'supplier_id' => $this->request->getPost('supplier_id') ? $this->request->getPost('supplier_id', FILTER_SANITIZE_NUMBER_INT) : null, - 'employee_id' => $this->request->getPost('employee_id', FILTER_SANITIZE_NUMBER_INT), + 'employee_id' => $employee_id, 'comment' => $this->request->getPost('comment', FILTER_SANITIZE_FULL_SPECIAL_CHARS), 'reference' => $this->request->getPost('reference') != '' ? $this->request->getPost('reference', FILTER_SANITIZE_FULL_SPECIAL_CHARS) : null ]; diff --git a/app/Controllers/Reports.php b/app/Controllers/Reports.php index 6cd8599e6..1c98d8d9d 100644 --- a/app/Controllers/Reports.php +++ b/app/Controllers/Reports.php @@ -1776,7 +1776,7 @@ class Reports extends Secure_Controller { $this->clearCache(); - $definition_names = $this->attribute->get_definitions_by_flags(attribute::SHOW_IN_SALES); + $definition_names = $this->attribute->get_definitions_by_flags(attribute::SHOW_IN_SALES, true); $inputs = [ 'start_date' => $start_date, @@ -1789,7 +1789,12 @@ class Reports extends Secure_Controller $this->detailed_sales->create($inputs); $columns = $this->detailed_sales->getDataColumns(); - $columns['details'] = array_merge($columns['details'], $definition_names); + // Extract just names for column headers + $definitionHeaders = []; + foreach ($definition_names as $definition_id => $definitionInfo) { + $definitionHeaders[$definition_id] = $definitionInfo['name']; + } + $columns['details'] = array_merge($columns['details'], $definitionHeaders); $headers = $columns; @@ -1930,14 +1935,19 @@ class Reports extends Secure_Controller { $this->clearCache(); - $definition_names = $this->attribute->get_definitions_by_flags(attribute::SHOW_IN_RECEIVINGS); + $definition_names = $this->attribute->get_definitions_by_flags(attribute::SHOW_IN_RECEIVINGS, true); $inputs = ['start_date' => $start_date, 'end_date' => $end_date, 'receiving_type' => $receiving_type, 'location_id' => $location_id, 'definition_ids' => array_keys($definition_names)]; $this->detailed_receivings->create($inputs); $columns = $this->detailed_receivings->getDataColumns(); - $columns['details'] = array_merge($columns['details'], $definition_names); + // Extract just names for column headers + $definitionHeaders = []; + foreach ($definition_names as $definition_id => $definitionInfo) { + $definitionHeaders[$definition_id] = $definitionInfo['name']; + } + $columns['details'] = array_merge($columns['details'], $definitionHeaders); $headers = $columns; $report_data = $this->detailed_receivings->getData($inputs); diff --git a/app/Controllers/Sales.php b/app/Controllers/Sales.php index 81033a3ab..628ae5057 100644 --- a/app/Controllers/Sales.php +++ b/app/Controllers/Sales.php @@ -75,15 +75,15 @@ class Sales extends Secure_Controller /** * Load the sale edit modal. Used in app/Views/sales/register.php. * - * @return string + * @return ResponseInterface|string * @noinspection PhpUnused */ - public function getManage(): string + public function getManage(): ResponseInterface|string { - $person_id = $this->session->get('person_id'); + $personId = $this->session->get('person_id'); - if (!$this->employee->has_grant('reports_sales', $person_id)) { - redirect('no_access/sales/reports_sales'); + if (!$this->employee->has_grant('reports_sales', $personId)) { + return redirect()->to('no_access/sales/reports_sales'); } else { $data['table_headers'] = get_sales_manage_table_headers(); @@ -92,18 +92,31 @@ class Sales extends Secure_Controller 'only_due' => lang('Sales.due_filter'), 'only_check' => lang('Sales.check_filter'), 'only_creditcard' => lang('Sales.credit_filter'), + 'only_debit' => lang('Sales.debit'), 'only_invoices' => lang('Sales.invoice_filter'), 'selected_customer' => lang('Sales.selected_customer') ]; if ($this->sale_lib->get_customer() != -1) { - $selected_filters = ['selected_customer']; + $selectedFilters = ['selected_customer']; $data['customer_selected'] = true; } else { $data['customer_selected'] = false; - $selected_filters = []; + $selectedFilters = []; } - $data['selected_filters'] = $selected_filters; + + // Restore filters from URL query string + $filters = restoreTableFilters($this->request); + if (!empty($filters['selected_filters'])) { + $selectedFilters = array_merge($selectedFilters, $filters['selected_filters']); + } + if (isset($filters['start_date'])) { + $data['start_date'] = $filters['start_date']; + } + if (isset($filters['end_date'])) { + $data['end_date'] = $filters['end_date']; + } + $data['selected_filters'] = $selectedFilters; return view('sales/manage', $data); } @@ -142,6 +155,7 @@ class Sales extends Secure_Controller 'only_check' => false, 'selected_customer' => false, 'only_creditcard' => false, + 'only_debit' => false, 'only_invoices' => $this->config['invoice_enable'] && $this->request->getGet('only_invoices', FILTER_SANITIZE_NUMBER_INT), 'is_valid_receipt' => $this->sale->is_valid_receipt($search) ]; diff --git a/app/Helpers/tabular_helper.php b/app/Helpers/tabular_helper.php index 76b5f8aae..70effeba7 100644 --- a/app/Helpers/tabular_helper.php +++ b/app/Helpers/tabular_helper.php @@ -408,7 +408,7 @@ function get_items_manage_table_headers(): string { $attribute = model(Attribute::class); $config = config(OSPOS::class)->settings; - $definition_names = $attribute->get_definitions_by_flags($attribute::SHOW_IN_ITEMS); // TODO: this should be made into a constant in constants.php + $definitionsWithTypes = $attribute->get_definitions_by_flags($attribute::SHOW_IN_ITEMS, true); $headers = item_headers(); @@ -420,8 +420,8 @@ function get_items_manage_table_headers(): string $headers[] = ['item_pic' => lang('Items.image'), 'sortable' => false]; - foreach ($definition_names as $definition_id => $definition_name) { - $headers[] = [$definition_id => $definition_name, 'sortable' => false]; + foreach ($definitionsWithTypes as $definition_id => $definitionInfo) { + $headers[] = [$definition_id => $definitionInfo['name'], 'sortable' => false]; } $headers[] = ['inventory' => '', 'escape' => false]; @@ -479,7 +479,7 @@ function get_item_data_row(object $item): array $item->name .= NAME_SEPARATOR . $item->pack_name; } - $definition_names = $attribute->get_definitions_by_flags($attribute::SHOW_IN_ITEMS); + $definition_names = $attribute->get_definitions_by_flags($attribute::SHOW_IN_ITEMS, true); $columns = [ 'items.item_id' => $item->item_id, @@ -634,7 +634,7 @@ function parse_attribute_values(array $columns, array $row): array } /** - * @param array $definition_names + * @param array $definition_names Array of definition_id => ['name' => name, 'type' => type] or definition_id => name * @param array $row * @return array */ @@ -651,10 +651,16 @@ function expand_attribute_values(array $definition_names, array $row): array } $attribute_values = []; - foreach ($definition_names as $definition_id => $definition_name) { + foreach ($definition_names as $definition_id => $definitionInfo) { if (isset($indexed_values[$definition_id])) { - $attribute_value = $indexed_values[$definition_id]; - $attribute_values["$definition_id"] = $attribute_value; + $raw_value = $indexed_values[$definition_id]; + + // Format DECIMAL attributes according to locale + if (is_array($definitionInfo) && isset($definitionInfo['type']) && $definitionInfo['type'] === DECIMAL) { + $attribute_values["$definition_id"] = to_decimals($raw_value); + } else { + $attribute_values["$definition_id"] = $raw_value; + } } else { $attribute_values["$definition_id"] = ""; } @@ -925,3 +931,24 @@ function get_controller(): string $controller_name_parts = explode('\\', $controller_name); return end($controller_name_parts); } + +/** + * Restores filter values from URL query string. + * + * @param CodeIgniter\HTTP\IncomingRequest $request The request object + * @return array Array with 'start_date', 'end_date', and 'selected_filters' keys + */ +function restoreTableFilters($request): array +{ + $startDate = $request->getGet('start_date', FILTER_SANITIZE_FULL_SPECIAL_CHARS); + $endDate = $request->getGet('end_date', FILTER_SANITIZE_FULL_SPECIAL_CHARS); + $urlFilters = $request->getGet('filters', FILTER_SANITIZE_FULL_SPECIAL_CHARS); + + return array_filter([ + 'start_date' => $startDate ?: null, + 'end_date' => $endDate ?: null, + 'selected_filters' => $urlFilters ?? [] + ], function($value) { + return $value !== null && $value !== []; + }); +} diff --git a/app/Language/ar-EG/Attributes.php b/app/Language/ar-EG/Attributes.php index 8d184bd9d..b286580a2 100644 --- a/app/Language/ar-EG/Attributes.php +++ b/app/Language/ar-EG/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "هل أنت متأكد من أنك تريد حذف الميزات المحددة ؟", "confirm_restore" => "هل أنت متأكد من أنك تريد استعادة السمة (السمات) المحددة؟", "definition_cannot_be_deleted" => "لا يمكن حذف السمات المحددة", + "definition_invalid_group" => "المجموعة المحددة غير موجودة أو غير صالحة.", "definition_error_adding_updating" => "لا يمكن إضافة السمة {0} أو تحديثها. يرجى التحقق من سجل الخطأ.", "definition_flags" => "رؤية الميزات", "definition_group" => "المجموعة", diff --git a/app/Language/ar-LB/Attributes.php b/app/Language/ar-LB/Attributes.php index 8d184bd9d..b286580a2 100644 --- a/app/Language/ar-LB/Attributes.php +++ b/app/Language/ar-LB/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "هل أنت متأكد من أنك تريد حذف الميزات المحددة ؟", "confirm_restore" => "هل أنت متأكد من أنك تريد استعادة السمة (السمات) المحددة؟", "definition_cannot_be_deleted" => "لا يمكن حذف السمات المحددة", + "definition_invalid_group" => "المجموعة المحددة غير موجودة أو غير صالحة.", "definition_error_adding_updating" => "لا يمكن إضافة السمة {0} أو تحديثها. يرجى التحقق من سجل الخطأ.", "definition_flags" => "رؤية الميزات", "definition_group" => "المجموعة", diff --git a/app/Language/az/Attributes.php b/app/Language/az/Attributes.php index ad86754ca..bd28a0a28 100644 --- a/app/Language/az/Attributes.php +++ b/app/Language/az/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "Seçilmiş Atributları silmək istədiyinizdən əminsinizmi?", "confirm_restore" => "Seçilmiş atributları bərpa etmək istədiyinizə əminsinizmi?", "definition_cannot_be_deleted" => "Seçilmiş xüsusiyyətləri silmək olmadı", + "definition_invalid_group" => "", "definition_error_adding_updating" => "{0} -in atributları əlavə oluna və yenilənə bilmədi. Lütfən XƏTA loq faylını yoxlayın.", "definition_flags" => "Atribut görünüşü", "definition_group" => "Qrup", diff --git a/app/Language/bg/Attributes.php b/app/Language/bg/Attributes.php index 093e018ab..3213b12e4 100644 --- a/app/Language/bg/Attributes.php +++ b/app/Language/bg/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "", "confirm_restore" => "", "definition_cannot_be_deleted" => "", + "definition_invalid_group" => "", "definition_error_adding_updating" => "", "definition_flags" => "", "definition_group" => "", diff --git a/app/Language/bs/Attributes.php b/app/Language/bs/Attributes.php index d0b9fa4a5..36a640f0b 100644 --- a/app/Language/bs/Attributes.php +++ b/app/Language/bs/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "Da li ste sigurni da želite da izbrišete izabrani atribut?", "confirm_restore" => "Da li ste sigurni da želite vratiti izabrane atribute?", "definition_cannot_be_deleted" => "Nije moguće izbrisati izabrane atribut", + "definition_invalid_group" => "", "definition_error_adding_updating" => "Atribut {0} nije moguće dodati ili ažurirati. Molimo provjerite dnevnik grešaka.", "definition_flags" => "Vidljivost atributa", "definition_group" => "Grupa", diff --git a/app/Language/ckb/Attributes.php b/app/Language/ckb/Attributes.php index 1dbabcbf9..77f189a9c 100644 --- a/app/Language/ckb/Attributes.php +++ b/app/Language/ckb/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "ئایا دڵنیای کە دەتەوێت تایبەتمەندییە هەڵبژێردراوەکە(کان) بسڕیتەوە؟", "confirm_restore" => "ئایا دڵنیای کە دەتەوێت تایبەتمەندییە هەڵبژێردراوەکە(کان) بگەڕێنیتەوە؟", "definition_cannot_be_deleted" => "نەتوانرا تایبەتمەندی هەڵبژێردراو بسڕدرێتەوە", + "definition_invalid_group" => "", "definition_error_adding_updating" => "تایبەتمەندی {0} نەتوانرا زیاد بکرێت یان نوێ بکرێتەوە. تکایە لیستی هەڵەکان بپشکنە.", "definition_flags" => "توانای بینراویی تایبەتمەندی", "definition_group" => "گروپ", diff --git a/app/Language/cs/Attributes.php b/app/Language/cs/Attributes.php index 093e018ab..3213b12e4 100644 --- a/app/Language/cs/Attributes.php +++ b/app/Language/cs/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "", "confirm_restore" => "", "definition_cannot_be_deleted" => "", + "definition_invalid_group" => "", "definition_error_adding_updating" => "", "definition_flags" => "", "definition_group" => "", diff --git a/app/Language/da/Attributes.php b/app/Language/da/Attributes.php index 8deefef87..fd643f036 100644 --- a/app/Language/da/Attributes.php +++ b/app/Language/da/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "Er du sikker på, at du vil slette de valgte egenskaber?", "confirm_restore" => "Er du sikker på, at du vil gendanne de valgte egenskaber?", "definition_cannot_be_deleted" => "De valgte egenskaber kunne ikke slettes", + "definition_invalid_group" => "Den valgte gruppe findes ikke eller er ugyldig.", "definition_error_adding_updating" => "Egenskab {0} Kunne ikke tilføjes eller opdateres. Tjek venligst fejlprotokollen.", "definition_flags" => "Egenskabens Synlighed", "definition_group" => "Gruppe", diff --git a/app/Language/de-CH/Attributes.php b/app/Language/de-CH/Attributes.php index 093e018ab..d76085ec7 100644 --- a/app/Language/de-CH/Attributes.php +++ b/app/Language/de-CH/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "", "confirm_restore" => "", "definition_cannot_be_deleted" => "", + "definition_invalid_group" => "Die ausgewählte Gruppe existiert nicht oder ist ungültig.", "definition_error_adding_updating" => "", "definition_flags" => "", "definition_group" => "", diff --git a/app/Language/de-DE/Attributes.php b/app/Language/de-DE/Attributes.php index d6e9606c2..cf7bd5348 100644 --- a/app/Language/de-DE/Attributes.php +++ b/app/Language/de-DE/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "Sind Sie sicher, dass Sie die ausgewählten Attribute löschen möchten?", "confirm_restore" => "Sind Sie sicher, dass Sie die ausgewählten Attribute wiederherstellen möchten?", "definition_cannot_be_deleted" => "Ausgewählte Attribute konnten nicht gelöscht werden", + "definition_invalid_group" => "Die ausgewählte Gruppe existiert nicht oder ist ungültig.", "definition_error_adding_updating" => "Das Attribut {0} konnte nicht hinzugefügt oder aktualisiert werden. Bitte überprüfen Sie den Error-Log.", "definition_flags" => "Attribut Sichtbarkeit", "definition_group" => "Gruppe", diff --git a/app/Language/el/Attributes.php b/app/Language/el/Attributes.php index 3d9ff2afd..54a88f00e 100644 --- a/app/Language/el/Attributes.php +++ b/app/Language/el/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "Είστε βέβαιοι ότι θέλετε να διαγράψετε τα επιλεγμένα χαρακτηριστικά;", "confirm_restore" => "Είστε βέβαιοι ότι θέλετε να επαναφέρετε τα επιλεγμένα χαρακτηριστικά;", "definition_cannot_be_deleted" => "Δεν ήταν δυνατή η διαγραφή των επιλεγμένων χαρακτηριστικών", + "definition_invalid_group" => "Η επιλεγμένη ομάδα δεν υπάρχει ή δεν είναι έγκυρη.", "definition_error_adding_updating" => "Το χαρακτηριστικό {0} δεν ήταν δυνατό να προστεθεί ή να ενημερωθεί. Ελέγξτε το αρχείο καταγραφής σφαλμάτων.", "definition_flags" => "Ορατότητα χαρακτηριστικών", "definition_group" => "Ομάδα", diff --git a/app/Language/en-GB/Attributes.php b/app/Language/en-GB/Attributes.php index 4bc728b9b..0b4bf10cc 100644 --- a/app/Language/en-GB/Attributes.php +++ b/app/Language/en-GB/Attributes.php @@ -6,6 +6,7 @@ return [ "confirm_restore" => "Are you sure you want to restore the selected attribute(s)?", "definition_cannot_be_deleted" => "Could not delete selected attribute(s)", "definition_error_adding_updating" => "Attribute {0} could not be added or updated. Please check the error log.", + "definition_invalid_group" => "The selected group does not exist or is invalid.", "definition_flags" => "Attribute Visibility", "definition_group" => "Group", "definition_id" => "Id", diff --git a/app/Language/en/Attributes.php b/app/Language/en/Attributes.php index bdbe402eb..b3ab1fde9 100644 --- a/app/Language/en/Attributes.php +++ b/app/Language/en/Attributes.php @@ -6,6 +6,7 @@ return [ "confirm_restore" => "Are you sure you want to restore the selected attribute(s)?", "definition_cannot_be_deleted" => "Could not delete selected attribute(s)", "definition_error_adding_updating" => "Attribute {0} could not be added or updated. Please check the error log.", + "definition_invalid_group" => "The selected group does not exist or is invalid.", "definition_flags" => "Attribute Visibility", "definition_group" => "Group", "definition_id" => "Id", diff --git a/app/Language/es-ES/Attributes.php b/app/Language/es-ES/Attributes.php index 3036662ad..6b05b71df 100644 --- a/app/Language/es-ES/Attributes.php +++ b/app/Language/es-ES/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "¿Está seguro de que desea borrar los atributos seleccionados?", "confirm_restore" => "¿Está seguro de que desea restaurar los atributos seleccionados?", "definition_cannot_be_deleted" => "No se han podido borrar los atributos seleccionados", + "definition_invalid_group" => "El grupo seleccionado no existe o no es válido.", "definition_error_adding_updating" => "El atributo {0} no pudo ser agregado o actulizado. Por favor compruebe el registro de errores.", "definition_flags" => "Visibilidad del atributo", "definition_group" => "Grupo", diff --git a/app/Language/es-MX/Attributes.php b/app/Language/es-MX/Attributes.php index 9a410be03..ff2619e73 100644 --- a/app/Language/es-MX/Attributes.php +++ b/app/Language/es-MX/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "¿Está seguro de eliminar el/los atributo(s) seleccionado(s)?", "confirm_restore" => "¿Está seguro que quiere restaurar los atributos seleccionados?", "definition_cannot_be_deleted" => "No ha sido posible eliminar el/los atributo(s) seleccionado(s)", + "definition_invalid_group" => "El grupo seleccionado no existe o no es válido.", "definition_error_adding_updating" => "El atributo {0} no pudo ser agregado o actualizado. Favor de revisar el registro de errorres.", "definition_flags" => "Visibilidad del atributo", "definition_group" => "Grupo", diff --git a/app/Language/fa/Attributes.php b/app/Language/fa/Attributes.php index b756373f7..260c48963 100644 --- a/app/Language/fa/Attributes.php +++ b/app/Language/fa/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "آیا مطمئن هستید که می خواهید ویژگی (های) انتخاب شده را حذف کنید؟", "confirm_restore" => "آیا مطمئن هستید که می خواهید ویژگی (های) انتخاب شده را بازیابی کنید؟", "definition_cannot_be_deleted" => "نمی توان ویژگی (های) انتخابی را حذف کرد", + "definition_invalid_group" => "گروه انتخاب شده وجود ندارد یا نامعتبر است.", "definition_error_adding_updating" => "ویژگی{0} اضافه نشد یا به روز نمی شود. لطفا گزارش خطا را بررسی کنید.", "definition_flags" => "قابلیت مشاهده ویژگی", "definition_group" => "گروه", diff --git a/app/Language/fr/Attributes.php b/app/Language/fr/Attributes.php index ce0ad5b90..436273cef 100644 --- a/app/Language/fr/Attributes.php +++ b/app/Language/fr/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "Êtes-vous certain de vouloir supprimer le(s) attribut(s) sélectionné(s) ?", "confirm_restore" => "Êtes-vous certain de vouloir restaurer le(s) attribut(s) sélectionné(s) ?", "definition_cannot_be_deleted" => "Le(s) attribut(s) sélectionné(s) n'ont pas pu être supprimé(s)", + "definition_invalid_group" => "Le groupe sélectionné n'existe pas ou est invalide.", "definition_error_adding_updating" => "L'attribut {0} n'a pas pu être ajouté ou mis à jour. Veuillez vérifier le journal d'erreurs.", "definition_flags" => "Visibilité de l'attribut", "definition_group" => "Groupe", diff --git a/app/Language/he/Attributes.php b/app/Language/he/Attributes.php index 3e7bc0cb0..53980bc72 100644 --- a/app/Language/he/Attributes.php +++ b/app/Language/he/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "האם אתה בטוח שברצונך למחוק את המאפיינים שנבחרו?", "confirm_restore" => "האם אתה בטוח שברצונך לשחזר את המאפיינים שנבחרו?", "definition_cannot_be_deleted" => "לא ניתן למחוק מאפיינים נבחר(ים)", + "definition_invalid_group" => "הקבוצה שנבחרה לא קיימת או אינה תקינה.", "definition_error_adding_updating" => "לא ניתן להוסיף או לעדכן את הערך {0}. בדוק את יומן השגיאות.", "definition_flags" => "מאפיין גלוי", "definition_group" => "קבוצה", diff --git a/app/Language/hr-HR/Attributes.php b/app/Language/hr-HR/Attributes.php index 093e018ab..3213b12e4 100644 --- a/app/Language/hr-HR/Attributes.php +++ b/app/Language/hr-HR/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "", "confirm_restore" => "", "definition_cannot_be_deleted" => "", + "definition_invalid_group" => "", "definition_error_adding_updating" => "", "definition_flags" => "", "definition_group" => "", diff --git a/app/Language/hu/Attributes.php b/app/Language/hu/Attributes.php index ef8a368f7..530aba7b4 100644 --- a/app/Language/hu/Attributes.php +++ b/app/Language/hu/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "Biztosan törli szeretné a kijelölt tulajdonságokat?", "confirm_restore" => "Biztosan visszaállítja a kijelölt tulajdonságokat?", "definition_cannot_be_deleted" => "Nem sikerült törölni a kijelölt tulajdonságokat", + "definition_invalid_group" => "A kiválasztott csoport nem létezik vagy érvénytelen.", "definition_error_adding_updating" => "{0} attribútum nem adható hozzá és nem frissíthető. Kérjük, ellenőrizze a hibanaplót.", "definition_flags" => "Tulajdonság láthatósága", "definition_group" => "Csoport", diff --git a/app/Language/hy/Attributes.php b/app/Language/hy/Attributes.php index 4e154bbbe..377b84f4b 100644 --- a/app/Language/hy/Attributes.php +++ b/app/Language/hy/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "Are you sure you want to delete the selected attribute(s)?", "confirm_restore" => "Are you sure you want to restore the selected attribute(s)?", "definition_cannot_be_deleted" => "Could not delete selected attribute(s)", + "definition_invalid_group" => "", "definition_error_adding_updating" => "Attribute {0} could not be added or updated. Please check the error log.", "definition_flags" => "Attribute Visibility", "definition_group" => "Group", diff --git a/app/Language/id/Attributes.php b/app/Language/id/Attributes.php index e997f9f6c..0d94527a0 100644 --- a/app/Language/id/Attributes.php +++ b/app/Language/id/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "Apakah Anda yakin ingin menghapus atribut tersebut?", "confirm_restore" => "Apakah Anda yakin ingin mengembalikan atribut tersebut?", "definition_cannot_be_deleted" => "Tidak bisa menghapus atribut terpilih", + "definition_invalid_group" => "Grup yang dipilih tidak ada atau tidak valid.", "definition_error_adding_updating" => "Atribut {0} tidak dapat ditambah atau diperbaharui. Silahkan periksa log kesalahan.", "definition_flags" => "Visibilitas Atribut", "definition_group" => "Grup", diff --git a/app/Language/it/Attributes.php b/app/Language/it/Attributes.php index 5665bf04a..d6c997eae 100644 --- a/app/Language/it/Attributes.php +++ b/app/Language/it/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "Sei sicuro di voler eliminare gli attributi selezionati?", "confirm_restore" => "Sei sicuro di voler ripristinare l'attributo selezionato?", "definition_cannot_be_deleted" => "Non riesco a cancellare l'attributo selezionato", + "definition_invalid_group" => "Il gruppo selezionato non esiste o non è valido.", "definition_error_adding_updating" => "Impossibile aggiungere o aggiornare l'attributo {0}. Si prega di controllare il registro degli errori.", "definition_flags" => "Visibilità attributo", "definition_group" => "Gruppo", diff --git a/app/Language/km/Attributes.php b/app/Language/km/Attributes.php index 086c8d901..557e51522 100644 --- a/app/Language/km/Attributes.php +++ b/app/Language/km/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "តើអ្នកពិតជាចង់លុប ព៌តមានបន្ថែម ដែលបានជ្រើសរើស?", "confirm_restore" => "តើអ្នកពិតជាដាក់ឡើងវិញនៅ ព៌តមានបន្ថែម ដែលបានជ្រើសរើស?", "definition_cannot_be_deleted" => "មិនអាចលុបព៌តមានបន្ថែមដែលបានជ្រើសរើស", + "definition_invalid_group" => "", "definition_error_adding_updating" => "ព៌តមានបន្ថែម {0} មិនអាចថែម រឺកែប្រែបានឡើយ។​ សូមចូលទៅឆែករបាយការណ៍កំហុស។", "definition_flags" => "ដាក់បង្ហាញព៌តមានបន្ថែម", "definition_group" => "ក្រុម", diff --git a/app/Language/lo/Attributes.php b/app/Language/lo/Attributes.php index 0ff33199d..e5bb66296 100644 --- a/app/Language/lo/Attributes.php +++ b/app/Language/lo/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "ແນ່ໃຈຫຼືບໍທີ່ຈະລືບລາຍການທີ່ເລືອກ", "confirm_restore" => "ແນ່ໃຈຫຼືບໍທີ່ຈະຄືນຄ່າແອັດທິບິ້ວດັ່ງກ່າວ?", "definition_cannot_be_deleted" => "ບໍສາມາດລືບລາຍການທີ່ເລືອກໄດ້", + "definition_invalid_group" => "", "definition_error_adding_updating" => "ລາຍການ {0} ບໍສາມາດເພີ່ມ ຫຼື ແກ້ໄຂ. ກະລຸນາກວດສອບຢູ່ log ຂໍ້ຜິດຜາດ", "definition_flags" => "ຄູນສົມບັດການເບິ່ງເຫັນ", "definition_group" => "ກຸ່ມ", diff --git a/app/Language/ml/Attributes.php b/app/Language/ml/Attributes.php index 754c48fa0..82911ea55 100644 --- a/app/Language/ml/Attributes.php +++ b/app/Language/ml/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "Are you sure you want to delete the selected attribute(s)?", "confirm_restore" => "", "definition_cannot_be_deleted" => "Could not delete selected attribute(s)", + "definition_invalid_group" => "", "definition_error_adding_updating" => "", "definition_flags" => "Attribute Visibility", "definition_group" => "Group", diff --git a/app/Language/nb/Attributes.php b/app/Language/nb/Attributes.php index 4e154bbbe..377b84f4b 100644 --- a/app/Language/nb/Attributes.php +++ b/app/Language/nb/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "Are you sure you want to delete the selected attribute(s)?", "confirm_restore" => "Are you sure you want to restore the selected attribute(s)?", "definition_cannot_be_deleted" => "Could not delete selected attribute(s)", + "definition_invalid_group" => "", "definition_error_adding_updating" => "Attribute {0} could not be added or updated. Please check the error log.", "definition_flags" => "Attribute Visibility", "definition_group" => "Group", diff --git a/app/Language/nl-BE/Attributes.php b/app/Language/nl-BE/Attributes.php index 6435fdec5..4d544a18d 100644 --- a/app/Language/nl-BE/Attributes.php +++ b/app/Language/nl-BE/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "Bent u zeker dat u de geselecteerde attributen wil verwijderen?", "confirm_restore" => "Bent u zeker dat u de geselecteerde attributen wil herstellen?", "definition_cannot_be_deleted" => "De geselecteerde attributen konden niet verwijderd worden", + "definition_invalid_group" => "De geselecteerde groep bestaat niet of is ongeldig.", "definition_error_adding_updating" => "Attribuut {0} kon niet toegevoegd of gewijzigd worden. Kijk de error logs na.", "definition_flags" => "Zichtbaarheid", "definition_group" => "Groep", diff --git a/app/Language/nl-NL/Attributes.php b/app/Language/nl-NL/Attributes.php index 8bd1a67b2..25acecf50 100644 --- a/app/Language/nl-NL/Attributes.php +++ b/app/Language/nl-NL/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "Weet u zeker dat u de geselecteerde kenmerken wilt verwijderen?", "confirm_restore" => "Weet u zeker dat u de geselecteerde kenmerken wilt herstellen?", "definition_cannot_be_deleted" => "Kan geselecteerde kenmerk(en) niet verwijderen", + "definition_invalid_group" => "De geselecteerde groep bestaat niet of is ongeldig.", "definition_error_adding_updating" => "Kenmerk {0} kan niet worden toegevoegd of bijgewerkt. Bekijk het foutenlogboek.", "definition_flags" => "Kenmerk zichtbaarheid", "definition_group" => "Groep", diff --git a/app/Language/pl/Attributes.php b/app/Language/pl/Attributes.php index 1975f20c1..3edda3db5 100644 --- a/app/Language/pl/Attributes.php +++ b/app/Language/pl/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "Czy jesteś pewny, że chcesz usunąć wybrane atrybuty?", "confirm_restore" => "Czy jesteś pewien, że chcesz przywrócić zaznaczone atrybuty?", "definition_cannot_be_deleted" => "Nie można usunąć wybranych atrybutów", + "definition_invalid_group" => "Wybrana grupa nie istnieje lub jest nieprawidłowa.", "definition_error_adding_updating" => "Atrybut 51 nie może zostać dodany lub zaktualizowany. Sprawdź dziennik błędów.", "definition_flags" => "Widoczność atrybutu", "definition_group" => "Grupa", diff --git a/app/Language/pl/Cashups.php b/app/Language/pl/Cashups.php index 91570a2f1..17d4575fe 100644 --- a/app/Language/pl/Cashups.php +++ b/app/Language/pl/Cashups.php @@ -1,50 +1,50 @@ "Liczba", - "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' => "Liczba", + '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' => "Opis", + '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' => "", ]; diff --git a/app/Language/pl/Config.php b/app/Language/pl/Config.php index c599bb83c..1524112e5 100644 --- a/app/Language/pl/Config.php +++ b/app/Language/pl/Config.php @@ -1,331 +1,331 @@ "", - "address_required" => "", - "all_set" => "All file permissions are set correctly!", - "allow_duplicate_barcodes" => "", - "apostrophe" => "", - "backup_button" => "", - "backup_database" => "", - "barcode" => "", - "barcode_company" => "", - "barcode_configuration" => "", - "barcode_content" => "", - "barcode_first_row" => "", - "barcode_font" => "", - "barcode_formats" => "", - "barcode_generate_if_empty" => "", - "barcode_height" => "", - "barcode_id" => "", - "barcode_info" => "", - "barcode_layout" => "", - "barcode_name" => "", - "barcode_number" => "", - "barcode_number_in_row" => "", - "barcode_page_cellspacing" => "", - "barcode_page_width" => "", - "barcode_price" => "", - "barcode_second_row" => "", - "barcode_third_row" => "", - "barcode_tooltip" => "", - "barcode_type" => "", - "barcode_width" => "", - "bottom" => "", - "cash_button" => "", - "cash_button_1" => "", - "cash_button_2" => "", - "cash_button_3" => "", - "cash_button_4" => "", - "cash_button_5" => "", - "cash_button_6" => "", - "cash_decimals" => "", - "cash_decimals_tooltip" => "", - "cash_rounding" => "", - "category_dropdown" => "", - "center" => "", - "change_apperance_tooltip" => "", - "comma" => "", - "company" => "", - "company_avatar" => "", - "company_change_image" => "", - "company_logo" => "", - "company_remove_image" => "", - "company_required" => "", - "company_select_image" => "", - "company_website_url" => "", - "country_codes" => "", - "country_codes_tooltip" => "", - "currency_code" => "", - "currency_decimals" => "", - "currency_symbol" => "", - "current_employee_only" => "", - "customer_reward" => "", - "customer_reward_duplicate" => "", - "customer_reward_enable" => "", - "customer_reward_invalid_chars" => "", - "customer_reward_required" => "", - "customer_sales_tax_support" => "", - "date_or_time_format" => "", - "datetimeformat" => "", - "decimal_point" => "", - "default_barcode_font_size_number" => "", - "default_barcode_font_size_required" => "", - "default_barcode_height_number" => "", - "default_barcode_height_required" => "", - "default_barcode_num_in_row_number" => "", - "default_barcode_num_in_row_required" => "", - "default_barcode_page_cellspacing_number" => "", - "default_barcode_page_cellspacing_required" => "", - "default_barcode_page_width_number" => "", - "default_barcode_page_width_required" => "", - "default_barcode_width_number" => "", - "default_barcode_width_required" => "", - "default_item_columns" => "", - "default_origin_tax_code" => "", - "default_receivings_discount" => "", - "default_receivings_discount_number" => "", - "default_receivings_discount_required" => "", - "default_sales_discount" => "", - "default_sales_discount_number" => "", - "default_sales_discount_required" => "", - "default_tax_category" => "", - "default_tax_code" => "", - "default_tax_jurisdiction" => "", - "default_tax_name_number" => "", - "default_tax_name_required" => "", - "default_tax_rate" => "", - "default_tax_rate_1" => "", - "default_tax_rate_2" => "", - "default_tax_rate_3" => "", - "default_tax_rate_number" => "", - "default_tax_rate_required" => "", - "derive_sale_quantity" => "", - "derive_sale_quantity_tooltip" => "", - "dinner_table" => "", - "dinner_table_duplicate" => "", - "dinner_table_enable" => "", - "dinner_table_invalid_chars" => "", - "dinner_table_required" => "", - "dot" => "", - "email" => "", - "email_configuration" => "", - "email_mailpath" => "", - "email_protocol" => "", - "email_receipt_check_behaviour" => "", - "email_receipt_check_behaviour_always" => "", - "email_receipt_check_behaviour_last" => "", - "email_receipt_check_behaviour_never" => "", - "email_smtp_crypto" => "", - "email_smtp_host" => "", - "email_smtp_pass" => "", - "email_smtp_port" => "", - "email_smtp_timeout" => "", - "email_smtp_user" => "", - "enable_avatar" => "", - "enable_avatar_tooltip" => "", - "enable_dropdown_tooltip" => "", - "enable_new_look" => "", - "enable_right_bar" => "", - "enable_right_bar_tooltip" => "", - "enforce_privacy" => "", - "enforce_privacy_tooltip" => "", - "fax" => "", - "file_perm" => "There are problems with file permissions please fix and reload this page.", - "financial_year" => "", - "financial_year_apr" => "", - "financial_year_aug" => "", - "financial_year_dec" => "", - "financial_year_feb" => "", - "financial_year_jan" => "", - "financial_year_jul" => "", - "financial_year_jun" => "", - "financial_year_mar" => "", - "financial_year_may" => "", - "financial_year_nov" => "", - "financial_year_oct" => "", - "financial_year_sep" => "", - "floating_labels" => "", - "gcaptcha_enable" => "", - "gcaptcha_secret_key" => "", - "gcaptcha_secret_key_required" => "", - "gcaptcha_site_key" => "", - "gcaptcha_site_key_required" => "", - "gcaptcha_tooltip" => "", - "general" => "", - "general_configuration" => "", - "giftcard_number" => "", - "giftcard_random" => "", - "giftcard_series" => "", - "image_allowed_file_types" => "", - "image_max_height_tooltip" => "", - "image_max_size_tooltip" => "", - "image_max_width_tooltip" => "", - "image_restrictions" => "", - "include_hsn" => "", - "info" => "", - "info_configuration" => "", - "input_groups" => "", - "integrations" => "", - "integrations_configuration" => "", - "invoice" => "", - "invoice_configuration" => "", - "invoice_default_comments" => "", - "invoice_email_message" => "", - "invoice_enable" => "", - "invoice_printer" => "", - "invoice_type" => "", - "is_readable" => "", - "is_writable" => "is writable, but the permissions are higher than 750.", - "item_markup" => "", - "jsprintsetup_required" => "", - "language" => "", - "last_used_invoice_number" => "", - "last_used_quote_number" => "", - "last_used_work_order_number" => "", - "left" => "", - "license" => "", - "license_configuration" => "", - "line_sequence" => "", - "lines_per_page" => "", - "lines_per_page_number" => "", - "lines_per_page_required" => "", - "locale" => "", - "locale_configuration" => "", - "locale_info" => "", - "location" => "", - "location_configuration" => "", - "location_info" => "", - "login_form" => "", - "logout" => "", - "mailchimp" => "", - "mailchimp_api_key" => "", - "mailchimp_configuration" => "", - "mailchimp_key_successfully" => "", - "mailchimp_key_unsuccessfully" => "", - "mailchimp_lists" => "", - "mailchimp_tooltip" => "", - "message" => "", - "message_configuration" => "", - "msg_msg" => "", - "msg_msg_placeholder" => "", - "msg_pwd" => "", - "msg_pwd_required" => "", - "msg_src" => "", - "msg_src_required" => "", - "msg_uid" => "", - "msg_uid_required" => "", - "multi_pack_enabled" => "", - "no_risk" => "No security/vulnerability risks.", - "none" => "", - "notify_alignment" => "", - "number_format" => "", - "number_locale" => "", - "number_locale_invalid" => "", - "number_locale_required" => "", - "number_locale_tooltip" => "", - "os_timezone" => "", - "ospos_info" => "", - "payment_options_order" => "", - "perm_risk" => "Permissions higher than 750 leaves this software at risk.", - "phone" => "", - "phone_required" => "", - "print_bottom_margin" => "", - "print_bottom_margin_number" => "", - "print_bottom_margin_required" => "", - "print_delay_autoreturn" => "", - "print_delay_autoreturn_number" => "", - "print_delay_autoreturn_required" => "", - "print_footer" => "", - "print_header" => "", - "print_left_margin" => "", - "print_left_margin_number" => "", - "print_left_margin_required" => "", - "print_receipt_check_behaviour" => "", - "print_receipt_check_behaviour_always" => "", - "print_receipt_check_behaviour_last" => "", - "print_receipt_check_behaviour_never" => "", - "print_right_margin" => "", - "print_right_margin_number" => "", - "print_right_margin_required" => "", - "print_silently" => "", - "print_top_margin" => "", - "print_top_margin_number" => "", - "print_top_margin_required" => "", - "quantity_decimals" => "", - "quick_cash_enable" => "", - "quote_default_comments" => "", - "receipt" => "", - "receipt_category" => "", - "receipt_configuration" => "", - "receipt_default" => "", - "receipt_font_size" => "", - "receipt_font_size_number" => "", - "receipt_font_size_required" => "", - "receipt_info" => "", - "receipt_printer" => "", - "receipt_short" => "", - "receipt_show_company_name" => "", - "receipt_show_description" => "", - "receipt_show_serialnumber" => "", - "receipt_show_tax_ind" => "", - "receipt_show_taxes" => "", - "receipt_show_total_discount" => "", - "receipt_template" => "", - "receiving_calculate_average_price" => "", - "recv_invoice_format" => "", - "register_mode_default" => "", - "report_an_issue" => "", - "return_policy_required" => "", - "reward" => "", - "reward_configuration" => "", - "right" => "", - "sales_invoice_format" => "", - "sales_quote_format" => "", - "saved_successfully" => "", - "saved_unsuccessfully" => "", - "security_issue" => "Security Vulnerability Warning", - "server_notice" => "Please use the below info for issue reporting.", - "service_charge" => "", - "show_due_enable" => "", - "show_office_group" => "", - "statistics" => "", - "statistics_tooltip" => "", - "stock_location" => "", - "stock_location_duplicate" => "", - "stock_location_invalid_chars" => "", - "stock_location_required" => "", - "suggestions_fifth_column" => "", - "suggestions_first_column" => "", - "suggestions_fourth_column" => "", - "suggestions_layout" => "", - "suggestions_second_column" => "", - "suggestions_third_column" => "", - "system_conf" => "Setup & Conf", - "system_info" => "System Info", - "table" => "", - "table_configuration" => "", - "takings_printer" => "", - "tax" => "", - "tax_category" => "", - "tax_category_duplicate" => "", - "tax_category_invalid_chars" => "", - "tax_category_required" => "", - "tax_category_used" => "", - "tax_configuration" => "", - "tax_decimals" => "", - "tax_id" => "", - "tax_included" => "", - "theme" => "", - "theme_preview" => "", - "thousands_separator" => "", - "timezone" => "", - "timezone_error" => "", - "top" => "", - "use_destination_based_tax" => "", - "user_timezone" => "", - "website" => "", - "wholesale_markup" => "", - "work_order_enable" => "", - "work_order_format" => "", + 'address' => "Adres Firmy", + 'address_required' => "Adres Firmy jest polem wymaganym.", + 'all_set' => "All file permissions are set correctly!", + 'allow_duplicate_barcodes' => "Zezwalaj na duplikaty kodów kreskowych", + 'apostrophe' => "apostrof", + 'backup_button' => "Kopia zapasowa", + 'backup_database' => "Kopia zapasowa bazy danych", + 'barcode' => "Kod kreskowy", + 'barcode_company' => "Nazwa firmy", + 'barcode_configuration' => "Konfiguracja Kodów Kreskowych", + 'barcode_content' => "Kontent Kodów Kreskowych", + 'barcode_first_row' => "Wiersz 1", + 'barcode_font' => "Czcionka", + 'barcode_formats' => "", + 'barcode_generate_if_empty' => "", + 'barcode_height' => "", + 'barcode_id' => "", + 'barcode_info' => "", + 'barcode_layout' => "", + 'barcode_name' => "", + 'barcode_number' => "", + 'barcode_number_in_row' => "", + 'barcode_page_cellspacing' => "", + 'barcode_page_width' => "", + 'barcode_price' => "", + 'barcode_second_row' => "", + 'barcode_third_row' => "", + 'barcode_tooltip' => "", + 'barcode_type' => "", + 'barcode_width' => "", + 'bottom' => "", + 'cash_button' => "", + 'cash_button_1' => "", + 'cash_button_2' => "", + 'cash_button_3' => "", + 'cash_button_4' => "", + 'cash_button_5' => "", + 'cash_button_6' => "", + 'cash_decimals' => "", + 'cash_decimals_tooltip' => "", + 'cash_rounding' => "", + 'category_dropdown' => "", + 'center' => "", + 'change_apperance_tooltip' => "", + 'comma' => "", + 'company' => "", + 'company_avatar' => "", + 'company_change_image' => "", + 'company_logo' => "", + 'company_remove_image' => "", + 'company_required' => "", + 'company_select_image' => "", + 'company_website_url' => "", + 'country_codes' => "", + 'country_codes_tooltip' => "", + 'currency_code' => "", + 'currency_decimals' => "", + 'currency_symbol' => "", + 'current_employee_only' => "", + 'customer_reward' => "", + 'customer_reward_duplicate' => "", + 'customer_reward_enable' => "", + 'customer_reward_invalid_chars' => "", + 'customer_reward_required' => "", + 'customer_sales_tax_support' => "", + 'date_or_time_format' => "", + 'datetimeformat' => "", + 'decimal_point' => "", + 'default_barcode_font_size_number' => "", + 'default_barcode_font_size_required' => "", + 'default_barcode_height_number' => "", + 'default_barcode_height_required' => "", + 'default_barcode_num_in_row_number' => "", + 'default_barcode_num_in_row_required' => "", + 'default_barcode_page_cellspacing_number' => "", + 'default_barcode_page_cellspacing_required' => "", + 'default_barcode_page_width_number' => "", + 'default_barcode_page_width_required' => "", + 'default_barcode_width_number' => "", + 'default_barcode_width_required' => "", + 'default_item_columns' => "", + 'default_origin_tax_code' => "", + 'default_receivings_discount' => "", + 'default_receivings_discount_number' => "", + 'default_receivings_discount_required' => "", + 'default_sales_discount' => "", + 'default_sales_discount_number' => "", + 'default_sales_discount_required' => "", + 'default_tax_category' => "", + 'default_tax_code' => "", + 'default_tax_jurisdiction' => "", + 'default_tax_name_number' => "", + 'default_tax_name_required' => "", + 'default_tax_rate' => "", + 'default_tax_rate_1' => "", + 'default_tax_rate_2' => "", + 'default_tax_rate_3' => "", + 'default_tax_rate_number' => "", + 'default_tax_rate_required' => "", + 'derive_sale_quantity' => "", + 'derive_sale_quantity_tooltip' => "", + 'dinner_table' => "", + 'dinner_table_duplicate' => "", + 'dinner_table_enable' => "", + 'dinner_table_invalid_chars' => "", + 'dinner_table_required' => "", + 'dot' => "", + 'email' => "", + 'email_configuration' => "", + 'email_mailpath' => "", + 'email_protocol' => "", + 'email_receipt_check_behaviour' => "", + 'email_receipt_check_behaviour_always' => "", + 'email_receipt_check_behaviour_last' => "", + 'email_receipt_check_behaviour_never' => "", + 'email_smtp_crypto' => "", + 'email_smtp_host' => "", + 'email_smtp_pass' => "", + 'email_smtp_port' => "", + 'email_smtp_timeout' => "", + 'email_smtp_user' => "", + 'enable_avatar' => "", + 'enable_avatar_tooltip' => "", + 'enable_dropdown_tooltip' => "", + 'enable_new_look' => "", + 'enable_right_bar' => "", + 'enable_right_bar_tooltip' => "", + 'enforce_privacy' => "", + 'enforce_privacy_tooltip' => "", + 'fax' => "", + 'file_perm' => "There are problems with file permissions please fix and reload this page.", + 'financial_year' => "", + 'financial_year_apr' => "", + 'financial_year_aug' => "", + 'financial_year_dec' => "", + 'financial_year_feb' => "", + 'financial_year_jan' => "", + 'financial_year_jul' => "", + 'financial_year_jun' => "", + 'financial_year_mar' => "", + 'financial_year_may' => "", + 'financial_year_nov' => "", + 'financial_year_oct' => "", + 'financial_year_sep' => "", + 'floating_labels' => "", + 'gcaptcha_enable' => "", + 'gcaptcha_secret_key' => "", + 'gcaptcha_secret_key_required' => "", + 'gcaptcha_site_key' => "", + 'gcaptcha_site_key_required' => "", + 'gcaptcha_tooltip' => "", + 'general' => "", + 'general_configuration' => "", + 'giftcard_number' => "Numer Karty Podarunkowej", + 'giftcard_random' => "", + 'giftcard_series' => "", + 'image_allowed_file_types' => "", + 'image_max_height_tooltip' => "", + 'image_max_size_tooltip' => "", + 'image_max_width_tooltip' => "", + 'image_restrictions' => "", + 'include_hsn' => "", + 'info' => "", + 'info_configuration' => "", + 'input_groups' => "", + 'integrations' => "", + 'integrations_configuration' => "", + 'invoice' => "", + 'invoice_configuration' => "", + 'invoice_default_comments' => "", + 'invoice_email_message' => "", + 'invoice_enable' => "", + 'invoice_printer' => "", + 'invoice_type' => "", + 'is_readable' => "", + 'is_writable' => "is writable, but the permissions are higher than 750.", + 'item_markup' => "", + 'jsprintsetup_required' => "", + 'language' => "", + 'last_used_invoice_number' => "", + 'last_used_quote_number' => "", + 'last_used_work_order_number' => "", + 'left' => "", + 'license' => "", + 'license_configuration' => "", + 'line_sequence' => "", + 'lines_per_page' => "", + 'lines_per_page_number' => "", + 'lines_per_page_required' => "", + 'locale' => "", + 'locale_configuration' => "", + 'locale_info' => "", + 'location' => "", + 'location_configuration' => "", + 'location_info' => "", + 'login_form' => "", + 'logout' => "", + 'mailchimp' => "", + 'mailchimp_api_key' => "", + 'mailchimp_configuration' => "", + 'mailchimp_key_successfully' => "", + 'mailchimp_key_unsuccessfully' => "", + 'mailchimp_lists' => "", + 'mailchimp_tooltip' => "", + 'message' => "", + 'message_configuration' => "", + 'msg_msg' => "", + 'msg_msg_placeholder' => "", + 'msg_pwd' => "", + 'msg_pwd_required' => "", + 'msg_src' => "", + 'msg_src_required' => "", + 'msg_uid' => "", + 'msg_uid_required' => "", + 'multi_pack_enabled' => "", + 'no_risk' => "No security/vulnerability risks.", + 'none' => "", + 'notify_alignment' => "", + 'number_format' => "", + 'number_locale' => "", + 'number_locale_invalid' => "", + 'number_locale_required' => "", + 'number_locale_tooltip' => "", + 'os_timezone' => "", + 'ospos_info' => "", + 'payment_options_order' => "", + 'perm_risk' => "Permissions higher than 750 leaves this software at risk.", + 'phone' => "", + 'phone_required' => "", + 'print_bottom_margin' => "", + 'print_bottom_margin_number' => "", + 'print_bottom_margin_required' => "", + 'print_delay_autoreturn' => "", + 'print_delay_autoreturn_number' => "", + 'print_delay_autoreturn_required' => "", + 'print_footer' => "", + 'print_header' => "", + 'print_left_margin' => "", + 'print_left_margin_number' => "", + 'print_left_margin_required' => "", + 'print_receipt_check_behaviour' => "", + 'print_receipt_check_behaviour_always' => "", + 'print_receipt_check_behaviour_last' => "", + 'print_receipt_check_behaviour_never' => "", + 'print_right_margin' => "", + 'print_right_margin_number' => "", + 'print_right_margin_required' => "", + 'print_silently' => "", + 'print_top_margin' => "", + 'print_top_margin_number' => "", + 'print_top_margin_required' => "", + 'quantity_decimals' => "", + 'quick_cash_enable' => "", + 'quote_default_comments' => "", + 'receipt' => "", + 'receipt_category' => "", + 'receipt_configuration' => "", + 'receipt_default' => "", + 'receipt_font_size' => "", + 'receipt_font_size_number' => "", + 'receipt_font_size_required' => "", + 'receipt_info' => "", + 'receipt_printer' => "", + 'receipt_short' => "", + 'receipt_show_company_name' => "", + 'receipt_show_description' => "", + 'receipt_show_serialnumber' => "", + 'receipt_show_tax_ind' => "", + 'receipt_show_taxes' => "", + 'receipt_show_total_discount' => "", + 'receipt_template' => "", + 'receiving_calculate_average_price' => "", + 'recv_invoice_format' => "", + 'register_mode_default' => "", + 'report_an_issue' => "", + 'return_policy_required' => "", + 'reward' => "", + 'reward_configuration' => "", + 'right' => "", + 'sales_invoice_format' => "", + 'sales_quote_format' => "", + 'saved_successfully' => "", + 'saved_unsuccessfully' => "", + 'security_issue' => "Security Vulnerability Warning", + 'server_notice' => "Please use the below info for issue reporting.", + 'service_charge' => "", + 'show_due_enable' => "", + 'show_office_group' => "", + 'statistics' => "", + 'statistics_tooltip' => "", + 'stock_location' => "", + 'stock_location_duplicate' => "", + 'stock_location_invalid_chars' => "", + 'stock_location_required' => "", + 'suggestions_fifth_column' => "", + 'suggestions_first_column' => "", + 'suggestions_fourth_column' => "", + 'suggestions_layout' => "", + 'suggestions_second_column' => "", + 'suggestions_third_column' => "", + 'system_conf' => "Setup & Conf", + 'system_info' => "System Info", + 'table' => "", + 'table_configuration' => "", + 'takings_printer' => "", + 'tax' => "", + 'tax_category' => "", + 'tax_category_duplicate' => "", + 'tax_category_invalid_chars' => "", + 'tax_category_required' => "", + 'tax_category_used' => "", + 'tax_configuration' => "", + 'tax_decimals' => "", + 'tax_id' => "", + 'tax_included' => "", + 'theme' => "", + 'theme_preview' => "", + 'thousands_separator' => "", + 'timezone' => "", + 'timezone_error' => "", + 'top' => "", + 'use_destination_based_tax' => "", + 'user_timezone' => "", + 'website' => "", + 'wholesale_markup' => "", + 'work_order_enable' => "", + 'work_order_format' => "", ]; diff --git a/app/Language/pl/Customers.php b/app/Language/pl/Customers.php index 29eb9f886..332aaaca0 100644 --- a/app/Language/pl/Customers.php +++ b/app/Language/pl/Customers.php @@ -1,57 +1,57 @@ "Konto #", - "account_number_duplicate" => "", - "available_points" => "Dostępne punkty", - "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' => "Konto #", + 'account_number_duplicate' => "", + 'available_points' => "Dostępne punkty", + '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' => "Ilość", + 'stats_info' => "", + 'successful_adding' => "", + 'successful_deleted' => "", + 'successful_updating' => "", + 'tax_code' => "", + 'tax_id' => "", + 'taxable' => "", + 'total' => "", + 'update' => "", + 'rewards_package' => "", ]; diff --git a/app/Language/pl/Expenses.php b/app/Language/pl/Expenses.php index 981b5e6f3..ebe2d1092 100644 --- a/app/Language/pl/Expenses.php +++ b/app/Language/pl/Expenses.php @@ -1,51 +1,51 @@ "Dodaj wydatek", - "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' => "Dodaj wydatek", + 'amount' => "", + 'amount_number' => "", + 'amount_required' => "", + 'by_category' => "", + 'cannot_be_deleted' => "Nie można usunąć Kategorię Wydatki", + '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' => "Opis", + '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' => "", ]; diff --git a/app/Language/pl/Expenses_categories.php b/app/Language/pl/Expenses_categories.php index ed2aa02b3..c9e82523a 100644 --- a/app/Language/pl/Expenses_categories.php +++ b/app/Language/pl/Expenses_categories.php @@ -1,23 +1,23 @@ "", - "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' => "Nazwa Kategorii Wydatków jest wymagana", + 'add_item' => "Dodaj Kategorię", + 'cannot_be_deleted' => "Nie można usunąć Kategorię Wydatki", + 'category_id' => "Id", + 'confirm_delete' => "Czy jesteś pewien, że chcesz usunąć zaznaczone Kategorie Wydatków?", + 'confirm_restore' => "Czy jesteś pewien, że chcesz przywrócić zaznaczone Kategorie Wydatków?", + 'description' => "Opis kategorii", + 'error_adding_updating' => "Błąd podczas dodawania lub aktualizowania Kategorii Wydatków", + 'info' => "Kategoria Wydatków - Informacje", + 'name' => "Nazwa Kategorii", + 'new' => "Nowa Kategoria", + 'no_expenses_categories_to_display' => "Brak Kategorii do wyświetlenia", + 'none_selected' => "Nie zaznaczono żadnej Kategorii Wydatków", + 'one_or_multiple' => "Kategoria Wydatki", + 'quantity' => "Ilość", + 'successful_adding' => "Kategoria Wydatków została dodana", + 'successful_deleted' => "Kategoria Wydatków została usunięta", + 'successful_updating' => "Kategoria Wydatków została zaktualizowana", + 'update' => "Aktualizacja Kategorii", ]; diff --git a/app/Language/pl/Giftcards.php b/app/Language/pl/Giftcards.php index e120d8b0d..fc09e2894 100644 --- a/app/Language/pl/Giftcards.php +++ b/app/Language/pl/Giftcards.php @@ -1,72 +1,72 @@ "", - "allow_alt_description" => "Zezwól na alternatywny opis", - "bulk_edit" => "Edycja zbiorcza", - "cannot_be_deleted" => "", - "cannot_find_giftcard" => "", - "cannot_use" => "", - "card_value" => "", - "category" => "", - "change_all_to_allow_alt_desc" => "", - "change_all_to_not_allow_allow_desc" => "", - "change_all_to_serialized" => "", - "change_all_to_unserialized" => "", - "confirm_bulk_edit" => "", - "confirm_delete" => "", - "confirm_restore" => "", - "cost_price" => "", - "count" => "", - "csv_import_failed" => "", - "current_quantity" => "", - "description" => "", - "details_count" => "", - "do_nothing" => "", - "edit_fields_you_want_to_update" => "", - "edit_multiple_giftcards" => "", - "error_adding_updating" => "", - "error_updating_multiple" => "", - "generate_barcodes" => "", - "giftcard" => "", - "giftcard_number" => "", - "info_provided_by" => "", - "inventory_comments" => "", - "is_serialized" => "", - "low_inventory_giftcards" => "", - "manually_editing_of_quantity" => "", - "must_select_giftcard_for_barcode" => "", - "new" => "", - "no_description_giftcards" => "", - "no_giftcards_to_display" => "", - "none" => "", - "none_selected" => "", - "number" => "", - "number_information" => "", - "number_required" => "", - "one_or_multiple" => "", - "person_id" => "", - "quantity" => "", - "quantity_required" => "", - "remaining_balance" => "", - "reorder_level" => "", - "retrive_giftcard_info" => "", - "sales_tax_1" => "", - "sales_tax_2" => "", - "serialized_giftcards" => "", - "successful_adding" => "", - "successful_bulk_edit" => "", - "successful_deleted" => "", - "successful_updating" => "", - "supplier" => "", - "tax_1" => "", - "tax_2" => "", - "tax_percent" => "", - "tax_percents" => "", - "unit_price" => "", - "upc_database" => "", - "update" => "", - "use_inventory_menu" => "", - "value" => "", - "value_required" => "", + 'add_minus' => "Ilość do dodania lub odjęcia.", + 'allow_alt_description' => "Zezwól na alternatywny opis", + 'bulk_edit' => "Edycja zbiorcza", + 'cannot_be_deleted' => "", + 'cannot_find_giftcard' => "Nie odnaleziono Karty Podarunkowej", + 'cannot_use' => "Nie można użyć Karty Podarunkowej {0} w tej sprzedaży: nieprawidłowy klient.", + 'card_value' => "Wartość", + 'category' => "Kategoria", + 'change_all_to_allow_alt_desc' => "", + 'change_all_to_not_allow_allow_desc' => "", + 'change_all_to_serialized' => "", + 'change_all_to_unserialized' => "", + 'confirm_bulk_edit' => "Czy jesteś pewny, że chcesz edytować wybrane Karty Podarunkowe?", + 'confirm_delete' => "", + 'confirm_restore' => "", + 'cost_price' => "", + 'count' => "", + 'csv_import_failed' => "Nie udało się zaimportować CSV.", + 'current_quantity' => "Aktualna Ilość", + 'description' => "Opis", + 'details_count' => "", + 'do_nothing' => "Nic nie rób", + 'edit_fields_you_want_to_update' => "", + 'edit_multiple_giftcards' => "Edytuj wiele Kart Podarunkowych", + 'error_adding_updating' => "Dodanie lub aktualizacja Karty Podarunkowej nie powiodła się.", + 'error_updating_multiple' => "", + 'generate_barcodes' => "Generuj kody kreskowe", + 'giftcard' => "Karta Podarunkowa", + 'giftcard_number' => "Numer Karty Podarunkowej", + 'info_provided_by' => "Informacje dostarczone przez", + 'inventory_comments' => "Komentarze", + 'is_serialized' => "", + 'low_inventory_giftcards' => "", + 'manually_editing_of_quantity' => "", + 'must_select_giftcard_for_barcode' => "", + 'new' => "", + 'no_description_giftcards' => "", + 'no_giftcards_to_display' => "", + 'none' => "", + 'none_selected' => "", + 'number' => "", + 'number_information' => "", + 'number_required' => "", + 'one_or_multiple' => "", + 'person_id' => "", + 'quantity' => "Ilość", + 'quantity_required' => "", + 'remaining_balance' => "", + 'reorder_level' => "", + 'retrive_giftcard_info' => "", + 'sales_tax_1' => "", + 'sales_tax_2' => "", + 'serialized_giftcards' => "", + 'successful_adding' => "", + 'successful_bulk_edit' => "", + 'successful_deleted' => "", + 'successful_updating' => "", + 'supplier' => "", + 'tax_1' => "", + 'tax_2' => "", + 'tax_percent' => "", + 'tax_percents' => "", + 'unit_price' => "", + 'upc_database' => "", + 'update' => "", + 'use_inventory_menu' => "", + 'value' => "", + 'value_required' => "", ]; diff --git a/app/Language/pl/Item_kits.php b/app/Language/pl/Item_kits.php index 9d98af25e..973d6cde9 100644 --- a/app/Language/pl/Item_kits.php +++ b/app/Language/pl/Item_kits.php @@ -1,42 +1,42 @@ "Dodaj element", - "all" => "", - "cannot_be_deleted" => "", - "confirm_delete" => "", - "confirm_restore" => "", - "description" => "", - "discount" => "", - "discount_fixed" => "", - "discount_percent" => "", - "discount_type" => "", - "error_adding_updating" => "", - "find_kit_item" => "", - "info" => "", - "item" => "", - "item_kit_number" => "", - "item_kit_number_duplicate" => "", - "item_number" => "", - "item_number_duplicate" => "", - "items" => "", - "kit" => "", - "kit_and_components" => "", - "kit_and_stock" => "", - "kit_only" => "", - "name" => "", - "new" => "", - "no_item_kits_to_display" => "", - "none_selected" => "", - "one_or_multiple" => "", - "price_option" => "", - "priced_only" => "", - "print_option" => "", - "quantity" => "", - "sequence" => "", - "successful_adding" => "", - "successful_deleted" => "", - "successful_updating" => "", - "unit_price" => "", - "update" => "", + 'add_item' => "Dodaj element", + 'all' => "", + 'cannot_be_deleted' => "", + 'confirm_delete' => "", + 'confirm_restore' => "", + 'description' => "", + 'discount' => "", + 'discount_fixed' => "", + 'discount_percent' => "", + 'discount_type' => "", + 'error_adding_updating' => "", + 'find_kit_item' => "", + 'info' => "", + 'item' => "", + 'item_kit_number' => "", + 'item_kit_number_duplicate' => "", + 'item_number' => "", + 'item_number_duplicate' => "", + 'items' => "", + 'kit' => "", + 'kit_and_components' => "", + 'kit_and_stock' => "", + 'kit_only' => "", + 'name' => "", + 'new' => "", + 'no_item_kits_to_display' => "", + 'none_selected' => "", + 'one_or_multiple' => "", + 'price_option' => "", + 'priced_only' => "", + 'print_option' => "", + 'quantity' => "Ilość", + 'sequence' => "", + 'successful_adding' => "", + 'successful_deleted' => "", + 'successful_updating' => "", + 'unit_price' => "", + 'update' => "", ]; diff --git a/app/Language/pl/Items.php b/app/Language/pl/Items.php index 42b2152bb..4bc223458 100644 --- a/app/Language/pl/Items.php +++ b/app/Language/pl/Items.php @@ -1,122 +1,122 @@ "", - "allow_alt_description" => "", - "amount_entry" => "", - "bulk_edit" => "", - "buy_price_required" => "", - "cannot_be_deleted" => "", - "cannot_find_item" => "", - "categories" => "", - "category" => "", - "category_new" => "", - "category_required" => "", - "change_all_to_allow_alt_desc" => "", - "change_all_to_not_allow_allow_desc" => "", - "change_all_to_serialized" => "", - "change_all_to_unserialized" => "", - "change_image" => "", - "confirm_bulk_edit" => "", - "confirm_bulk_edit_wipe_taxes" => "", - "confirm_delete" => "", - "confirm_restore" => "", - "cost_price" => "", - "cost_price_number" => "", - "cost_price_required" => "", - "count" => "", - "csv_import_failed" => "", - "csv_import_invalid_location" => "", - "csv_import_nodata_wrongformat" => "", - "csv_import_partially_failed" => "", - "csv_import_success" => "", - "current_quantity" => "", - "default_pack_name" => "", - "description" => "", - "details_count" => "", - "do_nothing" => "", - "edit" => "", - "edit_fields_you_want_to_update" => "", - "edit_multiple_items" => "", - "empty_upc_items" => "", - "error_adding_updating" => "", - "error_updating_multiple" => "", - "generate_barcodes" => "", - "hsn_code" => "", - "image" => "", - "import_items_csv" => "", - "info_provided_by" => "", - "inventory" => "", - "inventory_CSV_import_quantity" => "", - "inventory_comments" => "", - "inventory_data_tracking" => "", - "inventory_date" => "", - "inventory_employee" => "", - "inventory_in_out_quantity" => "", - "inventory_remarks" => "", - "is_deleted" => "", - "is_printed" => "", - "is_serialized" => "", - "item" => "", - "item_id" => "", - "item_number" => "", - "item_number_duplicate" => "", - "kit" => "", - "location" => "", - "low_inventory_items" => "", - "low_sell_item" => "", - "manually_editing_of_quantity" => "", - "markup" => "", - "name" => "", - "name_required" => "", - "new" => "", - "no_description_items" => "", - "no_items_to_display" => "", - "none" => "", - "none_selected" => "", - "nonstock" => "", - "number_information" => "", - "number_required" => "", - "one_or_multiple" => "", - "pack_name" => "", - "qty_per_pack" => "", - "quantity" => "", - "quantity_number" => "", - "quantity_required" => "", - "receiving_quantity" => "", - "remove_image" => "", - "reorder_level" => "", - "reorder_level_number" => "", - "reorder_level_required" => "", - "retrive_item_info" => "", - "sales_tax_1" => "", - "sales_tax_2" => "", - "search_attributes" => "", - "select_image" => "", - "serialized_items" => "", - "standard" => "", - "stock" => "", - "stock_location" => "", - "stock_type" => "", - "successful_adding" => "", - "successful_bulk_edit" => "", - "successful_deleted" => "", - "successful_updating" => "", - "supplier" => "", - "tax_1" => "", - "tax_2" => "", - "tax_3" => "", - "tax_category" => "", - "tax_percent" => "", - "tax_percent_number" => "", - "tax_percent_required" => "", - "tax_percents" => "", - "temp" => "", - "type" => "", - "unit_price" => "", - "unit_price_number" => "", - "unit_price_required" => "", - "upc_database" => "", - "update" => "", - "use_inventory_menu" => "", + 'add_minus' => "Ilość do dodania lub odjęcia.", + 'allow_alt_description' => "", + 'amount_entry' => "", + 'bulk_edit' => "", + 'buy_price_required' => "", + 'cannot_be_deleted' => "", + 'cannot_find_item' => "", + 'categories' => "", + 'category' => "Kategoria", + 'category_new' => "", + 'category_required' => "", + 'change_all_to_allow_alt_desc' => "", + 'change_all_to_not_allow_allow_desc' => "", + 'change_all_to_serialized' => "", + 'change_all_to_unserialized' => "", + 'change_image' => "", + 'confirm_bulk_edit' => "", + 'confirm_bulk_edit_wipe_taxes' => "", + 'confirm_delete' => "", + 'confirm_restore' => "", + 'cost_price' => "", + 'cost_price_number' => "", + 'cost_price_required' => "", + 'count' => "", + 'csv_import_failed' => "", + 'csv_import_invalid_location' => "", + 'csv_import_nodata_wrongformat' => "", + 'csv_import_partially_failed' => "", + 'csv_import_success' => "", + 'current_quantity' => "Aktualna Ilość", + 'default_pack_name' => "", + 'description' => "Opis", + 'details_count' => "", + 'do_nothing' => "Nic nie rób", + 'edit' => "", + 'edit_fields_you_want_to_update' => "", + 'edit_multiple_items' => "", + 'empty_upc_items' => "", + 'error_adding_updating' => "", + 'error_updating_multiple' => "", + 'generate_barcodes' => "Generuj kody kreskowe", + 'hsn_code' => "", + 'image' => "", + 'import_items_csv' => "", + 'info_provided_by' => "", + 'inventory' => "", + 'inventory_CSV_import_quantity' => "", + 'inventory_comments' => "Komentarze", + 'inventory_data_tracking' => "", + 'inventory_date' => "", + 'inventory_employee' => "", + 'inventory_in_out_quantity' => "", + 'inventory_remarks' => "", + 'is_deleted' => "", + 'is_printed' => "", + 'is_serialized' => "", + 'item' => "", + 'item_id' => "", + 'item_number' => "", + 'item_number_duplicate' => "", + 'kit' => "", + 'location' => "", + 'low_inventory_items' => "", + 'low_sell_item' => "", + 'manually_editing_of_quantity' => "", + 'markup' => "", + 'name' => "", + 'name_required' => "", + 'new' => "", + 'no_description_items' => "", + 'no_items_to_display' => "", + 'none' => "", + 'none_selected' => "", + 'nonstock' => "", + 'number_information' => "", + 'number_required' => "", + 'one_or_multiple' => "", + 'pack_name' => "", + 'qty_per_pack' => "", + 'quantity' => "Ilość", + 'quantity_number' => "", + 'quantity_required' => "", + 'receiving_quantity' => "", + 'remove_image' => "", + 'reorder_level' => "", + 'reorder_level_number' => "", + 'reorder_level_required' => "", + 'retrive_item_info' => "", + 'sales_tax_1' => "", + 'sales_tax_2' => "", + 'search_attributes' => "", + 'select_image' => "", + 'serialized_items' => "", + 'standard' => "", + 'stock' => "", + 'stock_location' => "", + 'stock_type' => "", + 'successful_adding' => "", + 'successful_bulk_edit' => "", + 'successful_deleted' => "", + 'successful_updating' => "", + 'supplier' => "", + 'tax_1' => "", + 'tax_2' => "", + 'tax_3' => "", + 'tax_category' => "", + 'tax_percent' => "", + 'tax_percent_number' => "", + 'tax_percent_required' => "", + 'tax_percents' => "", + 'temp' => "", + 'type' => "", + 'unit_price' => "", + 'unit_price_number' => "", + 'unit_price_required' => "", + 'upc_database' => "", + 'update' => "", + 'use_inventory_menu' => "", ]; diff --git a/app/Language/pl/Reports.php b/app/Language/pl/Reports.php index 3c2a941a2..d3aae242b 100644 --- a/app/Language/pl/Reports.php +++ b/app/Language/pl/Reports.php @@ -1,149 +1,149 @@ "Wszystko", - "authority" => "", - "canceled" => "", - "categories" => "", - "categories_summary_report" => "", - "category" => "", - "code_canceled" => "", - "code_invoice" => "", - "code_pos" => "", - "code_quote" => "", - "code_return" => "", - "code_type" => "", - "code_work_order" => "", - "comments" => "", - "commission" => "", - "complete" => "", - "completed_sales" => "", - "confirm_delete" => "", - "confirm_restore" => "", - "cost" => "", - "cost_price" => "", - "count" => "", - "customer" => "", - "customers" => "", - "customers_summary_report" => "", - "date" => "", - "date_range" => "", - "description" => "", - "detailed_receivings_report" => "", - "detailed_receivings_report_input" => "", - "detailed_reports" => "", - "detailed_requisition_report" => "", - "detailed_sales_report" => "", - "discount" => "", - "discount_fixed" => "", - "discount_percent" => "", - "discount_type" => "", - "discounts" => "", - "discounts_summary_report" => "", - "earned" => "", - "employee" => "", - "employees" => "", - "employees_summary_report" => "", - "expenses" => "", - "expenses_amount" => "", - "expenses_categories" => "", - "expenses_categories_summary_report" => "", - "expenses_category" => "", - "expenses_payment_amount" => "", - "expenses_tax_amount" => "", - "expenses_total_amount" => "", - "expenses_total_tax_amount" => "", - "graphical_reports" => "", - "inventory" => "", - "inventory_low" => "", - "inventory_low_report" => "", - "inventory_reports" => "", - "inventory_summary" => "", - "inventory_summary_report" => "", - "item" => "", - "item_count" => "", - "item_name" => "", - "item_number" => "", - "items" => "", - "items_purchased" => "", - "items_received" => "", - "items_summary_report" => "", - "jurisdiction" => "", - "low_inventory" => "", - "low_inventory_report" => "", - "low_sell_quantity" => "", - "more_than_zero" => "", - "name" => "", - "no_reports_to_display" => "", - "payment_type" => "", - "payments" => "", - "payments_summary_report" => "", - "profit" => "", - "quantity" => "", - "quantity_purchased" => "", - "quotes" => "", - "received_by" => "", - "receiving_id" => "", - "receiving_type" => "", - "receivings" => "", - "reorder_level" => "", - "report" => "", - "report_input" => "", - "reports" => "", - "requisition" => "", - "requisition_by" => "", - "requisition_id" => "", - "requisition_item" => "", - "requisition_item_quantity" => "", - "requisition_related_item" => "", - "requisition_related_item_total_quantity" => "", - "requisition_related_item_unit_quantity" => "", - "requisitions" => "", - "returns" => "", - "revenue" => "", - "sale_id" => "", - "sale_type" => "", - "sales" => "", - "sales_amount" => "", - "sales_summary_report" => "", - "sales_taxes" => "", - "sales_taxes_summary_report" => "", - "serial_number" => "", - "service_charge" => "", - "sold_by" => "", - "sold_items" => "", - "sold_to" => "", - "stock_location" => "", - "sub_total_value" => "", - "subtotal" => "", - "summary_reports" => "", - "supplied_by" => "", - "supplier" => "", - "suppliers" => "", - "suppliers_summary_report" => "", - "tax" => "", - "tax_category" => "", - "tax_name" => "", - "tax_percent" => "", - "tax_rate" => "", - "taxes" => "", - "taxes_summary_report" => "", - "total" => "", - "total_inventory_value" => "", - "total_low_sell_quantity" => "", - "total_quantity" => "", - "total_retail" => "", - "trans_amount" => "", - "trans_due" => "", - "trans_group" => "", - "trans_nopay_sales" => "", - "trans_payments" => "", - "trans_refunded" => "", - "trans_sales" => "", - "trans_type" => "", - "type" => "", - "unit_price" => "", - "used" => "", - "work_orders" => "", - "zero_and_less" => "", + 'all' => "Wszystko", + 'authority' => "", + 'canceled' => "", + 'categories' => "", + 'categories_summary_report' => "", + 'category' => "Kategoria", + 'code_canceled' => "", + 'code_invoice' => "", + 'code_pos' => "", + 'code_quote' => "", + 'code_return' => "", + 'code_type' => "", + 'code_work_order' => "", + 'comments' => "", + 'commission' => "", + 'complete' => "", + 'completed_sales' => "", + 'confirm_delete' => "", + 'confirm_restore' => "", + 'cost' => "", + 'cost_price' => "", + 'count' => "", + 'customer' => "", + 'customers' => "", + 'customers_summary_report' => "", + 'date' => "", + 'date_range' => "", + 'description' => "Opis", + 'detailed_receivings_report' => "", + 'detailed_receivings_report_input' => "", + 'detailed_reports' => "", + 'detailed_requisition_report' => "", + 'detailed_sales_report' => "", + 'discount' => "", + 'discount_fixed' => "", + 'discount_percent' => "", + 'discount_type' => "", + 'discounts' => "", + 'discounts_summary_report' => "", + 'earned' => "", + 'employee' => "", + 'employees' => "", + 'employees_summary_report' => "", + 'expenses' => "", + 'expenses_amount' => "", + 'expenses_categories' => "", + 'expenses_categories_summary_report' => "", + 'expenses_category' => "", + 'expenses_payment_amount' => "", + 'expenses_tax_amount' => "", + 'expenses_total_amount' => "", + 'expenses_total_tax_amount' => "", + 'graphical_reports' => "", + 'inventory' => "", + 'inventory_low' => "", + 'inventory_low_report' => "", + 'inventory_reports' => "", + 'inventory_summary' => "", + 'inventory_summary_report' => "", + 'item' => "", + 'item_count' => "", + 'item_name' => "", + 'item_number' => "", + 'items' => "", + 'items_purchased' => "", + 'items_received' => "", + 'items_summary_report' => "", + 'jurisdiction' => "", + 'low_inventory' => "", + 'low_inventory_report' => "", + 'low_sell_quantity' => "", + 'more_than_zero' => "", + 'name' => "", + 'no_reports_to_display' => "", + 'payment_type' => "", + 'payments' => "", + 'payments_summary_report' => "", + 'profit' => "", + 'quantity' => "Ilość", + 'quantity_purchased' => "", + 'quotes' => "", + 'received_by' => "", + 'receiving_id' => "", + 'receiving_type' => "", + 'receivings' => "", + 'reorder_level' => "", + 'report' => "", + 'report_input' => "", + 'reports' => "", + 'requisition' => "", + 'requisition_by' => "", + 'requisition_id' => "", + 'requisition_item' => "", + 'requisition_item_quantity' => "", + 'requisition_related_item' => "", + 'requisition_related_item_total_quantity' => "", + 'requisition_related_item_unit_quantity' => "", + 'requisitions' => "", + 'returns' => "", + 'revenue' => "", + 'sale_id' => "", + 'sale_type' => "", + 'sales' => "", + 'sales_amount' => "", + 'sales_summary_report' => "", + 'sales_taxes' => "", + 'sales_taxes_summary_report' => "", + 'serial_number' => "", + 'service_charge' => "", + 'sold_by' => "", + 'sold_items' => "", + 'sold_to' => "", + 'stock_location' => "", + 'sub_total_value' => "", + 'subtotal' => "", + 'summary_reports' => "", + 'supplied_by' => "", + 'supplier' => "", + 'suppliers' => "", + 'suppliers_summary_report' => "", + 'tax' => "", + 'tax_category' => "", + 'tax_name' => "", + 'tax_percent' => "", + 'tax_rate' => "", + 'taxes' => "", + 'taxes_summary_report' => "", + 'total' => "", + 'total_inventory_value' => "", + 'total_low_sell_quantity' => "", + 'total_quantity' => "", + 'total_retail' => "", + 'trans_amount' => "", + 'trans_due' => "", + 'trans_group' => "", + 'trans_nopay_sales' => "", + 'trans_payments' => "", + 'trans_refunded' => "", + 'trans_sales' => "", + 'trans_type' => "", + 'type' => "", + 'unit_price' => "", + 'used' => "", + 'work_orders' => "", + 'zero_and_less' => "", ]; diff --git a/app/Language/pl/Sales.php b/app/Language/pl/Sales.php index 3e8d5f3c5..3a5515cf5 100644 --- a/app/Language/pl/Sales.php +++ b/app/Language/pl/Sales.php @@ -1,225 +1,225 @@ "Dostępne punkty", - "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' => "Dostępne punkty", + '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' => "Karta Podarunkowa", + 'giftcard_balance' => "", + 'giftcard_filter' => "", + 'giftcard_number' => "Numer Karty Podarunkowej", + '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' => "Ilość", + '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' => "", ]; diff --git a/app/Language/pl/Suppliers.php b/app/Language/pl/Suppliers.php index eff9250fd..a9186487d 100644 --- a/app/Language/pl/Suppliers.php +++ b/app/Language/pl/Suppliers.php @@ -1,25 +1,25 @@ "Numer konta", - "agency_name" => "", - "cannot_be_deleted" => "", - "category" => "", - "company_name" => "", - "company_name_required" => "", - "confirm_delete" => "", - "confirm_restore" => "", - "cost" => "", - "error_adding_updating" => "", - "goods" => "", - "new" => "", - "none_selected" => "", - "one_or_multiple" => "", - "successful_adding" => "", - "successful_deleted" => "", - "successful_updating" => "", - "supplier" => "", - "supplier_id" => "", - "tax_id" => "", - "update" => "", + 'account_number' => "Numer konta", + 'agency_name' => "", + 'cannot_be_deleted' => "", + 'category' => "Kategoria", + 'company_name' => "", + 'company_name_required' => "", + 'confirm_delete' => "", + 'confirm_restore' => "", + 'cost' => "", + 'error_adding_updating' => "", + 'goods' => "", + 'new' => "", + 'none_selected' => "", + 'one_or_multiple' => "", + 'successful_adding' => "", + 'successful_deleted' => "", + 'successful_updating' => "", + 'supplier' => "", + 'supplier_id' => "", + 'tax_id' => "", + 'update' => "", ]; diff --git a/app/Language/pt-BR/Attributes.php b/app/Language/pt-BR/Attributes.php index 06848de15..f71960da8 100644 --- a/app/Language/pt-BR/Attributes.php +++ b/app/Language/pt-BR/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "Tem certeza de que deseja excluir os atributos selecionados?", "confirm_restore" => "Tem certeza de que deseja restaurar o(s) atributo(s) selecionado(s)?", "definition_cannot_be_deleted" => "Não foi possível excluir atributo selecionado (s)", + "definition_invalid_group" => "O grupo selecionado não existe ou é inválido.", "definition_error_adding_updating" => "Atributo {0} não pode ser adicionado ou atualizado. Por favor verifique o log de erros.", "definition_flags" => "Visibilidade de atributo", "definition_group" => "Grupo", diff --git a/app/Language/ro/Attributes.php b/app/Language/ro/Attributes.php index 5a2599b46..921b86361 100644 --- a/app/Language/ro/Attributes.php +++ b/app/Language/ro/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "Sigur doriti stergerea atributului/atributelor selectat(e)?", "confirm_restore" => "", "definition_cannot_be_deleted" => "Nu se poate sterge atributul/atributele selectat(e)", + "definition_invalid_group" => "Grupul selectat nu există sau este invalid.", "definition_error_adding_updating" => "", "definition_flags" => "Vizibilitate atribut", "definition_group" => "Grup", diff --git a/app/Language/ru/Attributes.php b/app/Language/ru/Attributes.php index 896fd9053..08822fa57 100644 --- a/app/Language/ru/Attributes.php +++ b/app/Language/ru/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "Вы уверены, что хотите удалить выбранные атрибут(ы)?", "confirm_restore" => "Вы уверены, что хотите восстановить выбранные атрибут(ы)?", "definition_cannot_be_deleted" => "Не удалось удалить выбранные атрибут(ы)", + "definition_invalid_group" => "Выбранная группа не существует или недействительна.", "definition_error_adding_updating" => "Атрибут {0} не может быть добавлен или обновлен. Пожалуйста, проверьте журнал ошибок.", "definition_flags" => "Видимость атрибута", "definition_group" => "Группа", diff --git a/app/Language/sv/Attributes.php b/app/Language/sv/Attributes.php index c86125997..8efad3d00 100644 --- a/app/Language/sv/Attributes.php +++ b/app/Language/sv/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "Är du säker på att du vill ta bort de valda attributen?", "confirm_restore" => "Är du säker på att du vill återställa de valda attributen?", "definition_cannot_be_deleted" => "Det gick inte att ta bort valda attribut", + "definition_invalid_group" => "Den valda gruppen finns inte eller är ogiltig.", "definition_error_adding_updating" => "Attribut{0} kunde inte läggas till eller uppdateras. Kontrollera felloggen.", "definition_flags" => "Attribut synlighet", "definition_group" => "Grupp", diff --git a/app/Language/sw-KE/Attributes.php b/app/Language/sw-KE/Attributes.php index 9953939c0..241521565 100644 --- a/app/Language/sw-KE/Attributes.php +++ b/app/Language/sw-KE/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "Una uhakika unataka kufuta sifa iliyochaguliwa/zilizochaguliwa?", "confirm_restore" => "Una uhakika unataka kurejesha sifa iliyochaguliwa/zilizochaguliwa?", "definition_cannot_be_deleted" => "Haiwezekani kufuta sifa iliyochaguliwa/zilizochaguliwa", + "definition_invalid_group" => "Kikundi ulichochagua hakipo au hakitoshi.", "definition_error_adding_updating" => "Sifa {0} haiwezekani kuongezwa au kusasishwa. Tafadhali angalia logi ya makosa.", "definition_flags" => "Uonekano wa Sifa", "definition_group" => "Kundi", diff --git a/app/Language/sw-TZ/Attributes.php b/app/Language/sw-TZ/Attributes.php index 9953939c0..241521565 100644 --- a/app/Language/sw-TZ/Attributes.php +++ b/app/Language/sw-TZ/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "Una uhakika unataka kufuta sifa iliyochaguliwa/zilizochaguliwa?", "confirm_restore" => "Una uhakika unataka kurejesha sifa iliyochaguliwa/zilizochaguliwa?", "definition_cannot_be_deleted" => "Haiwezekani kufuta sifa iliyochaguliwa/zilizochaguliwa", + "definition_invalid_group" => "Kikundi ulichochagua hakipo au hakitoshi.", "definition_error_adding_updating" => "Sifa {0} haiwezekani kuongezwa au kusasishwa. Tafadhali angalia logi ya makosa.", "definition_flags" => "Uonekano wa Sifa", "definition_group" => "Kundi", diff --git a/app/Language/ta/Attributes.php b/app/Language/ta/Attributes.php index 7c7d53525..9c278989d 100644 --- a/app/Language/ta/Attributes.php +++ b/app/Language/ta/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "தேர்ந்தெடுக்கப்பட்ட பண்புக்கூறு (களை) நீக்க விரும்புகிறீர்களா?", "confirm_restore" => "தேர்ந்தெடுக்கப்பட்ட பண்புக்கூறுகளை (களை) மீட்டெடுக்க விரும்புகிறீர்களா?", "definition_cannot_be_deleted" => "Could not delete selected attribute(s)", + "definition_invalid_group" => "", "definition_error_adding_updating" => "Attribute {0} could not be added or updated. Please check the error log.", "definition_flags" => "Attribute Visibility", "definition_group" => "Group", diff --git a/app/Language/th/Attributes.php b/app/Language/th/Attributes.php index 4b5d5b65e..4c1e161b3 100644 --- a/app/Language/th/Attributes.php +++ b/app/Language/th/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "ต้องการลบคุณลักษณะที่เลือกหรือไม่ ?", "confirm_restore" => "ต้องการคืนค่าคุณลักษณะที่เลือกหรือไม่ ?", "definition_cannot_be_deleted" => "ไม่สามารถลบคุณลักษณะที่เลือก", + "definition_invalid_group" => "กลุ่มที่เลือกไม่มีอยู่หรือไม่ถูกต้อง", "definition_error_adding_updating" => "ไม่สามารถเพิ่มหรือแก้ไขคุณลักษณะ {0}, โปรดตรวจสอบความผิดพลาดในบันทึก", "definition_flags" => "การมองเห็นคุณลักษณะ", "definition_group" => "กลุ่ม", diff --git a/app/Language/th/Employees.php b/app/Language/th/Employees.php index d586c714f..6ff5c027a 100644 --- a/app/Language/th/Employees.php +++ b/app/Language/th/Employees.php @@ -1,47 +1,47 @@ "", - "basic_information" => "ข้อมูลพื้นฐานของพนักงาน", - "cannot_be_deleted" => "ไม่สามารถลบพนักงานที่เลือกไว้ได้ เนื่องจากมีการทำรายการขายหรือคุณกำลังพยายามที่จะลบบัญชีของคุณเอง", - "change_employee" => "", - "change_password" => "เปลี่ยนรหัสผ่าน", - "clerk" => "", - "commission" => "", - "confirm_delete" => "คุณยืนยันการลบข้อมูลพนักงานที่เลือกไว้?", - "confirm_restore" => "คุณแน่ใจหรือไม่ว่าต้องการกู้คืนพนักงานที่เลือกไว้?", - "current_password" => "รหัสผ่านปัจจุบัน", - "current_password_invalid" => "รหัสผ่านปัจจุบันไม่ถูกต้อง", - "employee" => "พนักงาน", - "error_adding_updating" => "การเพิ่มหรือปรับปรุงข้อมูลพนักงานผิดพลาด", - "error_deleting_admin" => "", - "error_updating_admin" => "", - "error_deleting_demo_admin" => "คุณไม่สามารถลบผู้ใช้งานสำหรับการเดโม้ได้", - "error_updating_demo_admin" => "คุณไม่สามารถทำการเปลี่ยนข้อมูลผู้ใช้งานเดโม้ได้", - "language" => "ภาษา", - "login_info" => "รหัสเข้าระบบ", - "manager" => "", - "new" => "เพิ่มพนักงาน", - "none_selected" => "โปรดเลือกพนักงานที่จะลบ", - "one_or_multiple" => "พนักงาน", - "password" => "รหัสผ่าน", - "password_minlength" => "รหัสผ่านต้องยาวอย่างน้อย 8 อักษร", - "password_must_match" => "รหัสผ่านไม่ตรงกัน", - "password_not_must_match" => "รหัสผ่านปัจจุบันและรหัสผ่านใหม่จะต้องไม่ซ้ำกัน", - "password_required" => "ต้องระบุรหัสผ่าน", - "permission_desc" => "ทำเครื่องหมายในช่องด้านล่างเพื่อให้สิทธิ์การเข้าถึงโมดูลต่างๆ", - "permission_info" => "สิทธิ์", - "repeat_password" => "ระบุรหัสผ่านอีกครั้ง", - "subpermission_required" => "เพิ่มการอนุญาตอย่างน้อยหนึ่งรายการสำหรับแต่ละโมดูล", - "successful_adding" => "เพิ่มข้อมูลพนักงานเรียบร้อยแล้ว", - "successful_change_password" => "ทำการเปลี่ยนรหัสผ่านเรียบร้อยแล้ว", - "successful_deleted" => "ลบข้อมูลสำเร็จ", - "successful_updating" => "ปรับปรุงข้อมูลพนักงานเรียบร้อยแล้ว", - "system_language" => "ภาษาของระบบ", - "unsuccessful_change_password" => "เปลี่ยนรหัสผ่านไม่สำเร็จ", - "update" => "แก้ไขข้อมูลพนักงาน", - "username" => "ชื่อผู้ใช้งาน", - "username_duplicate" => "ชื่อผู้ใช้งานพนักงานถูกใช้งานแล้ว กรุณาเลือกใช้งานชื่ออื่น", - "username_minlength" => "ชื่อผู้ใช้งานต้องยาวอย่างน้อย 5 อักษร", - "username_required" => "จำเป็นต้องระบุชื่อผู้ใช้งาน", + 'administrator' => "", + 'basic_information' => "ข้อมูลพื้นฐานของพนักงาน", + 'cannot_be_deleted' => "ไม่สามารถลบพนักงานที่เลือกไว้ได้ เนื่องจากมีการทำรายการขายหรือคุณกำลังพยายามที่จะลบบัญชีของคุณเอง", + 'change_employee' => "", + 'change_password' => "เปลี่ยนรหัสผ่าน", + 'clerk' => "", + 'commission' => "", + 'confirm_delete' => "คุณยืนยันการลบข้อมูลพนักงานที่เลือกไว้?", + 'confirm_restore' => "คุณแน่ใจหรือไม่ว่าต้องการกู้คืนพนักงานที่เลือกไว้?", + 'current_password' => "รหัสผ่านปัจจุบัน", + 'current_password_invalid' => "รหัสผ่านปัจจุบันไม่ถูกต้อง", + 'employee' => "พนักงาน", + 'error_adding_updating' => "การเพิ่มหรือปรับปรุงข้อมูลพนักงานผิดพลาด", + 'error_deleting_admin' => "คุณไม่สามารถลบบัญชีแอดมินได้", + 'error_updating_admin' => "คุณไม่สามารถแก้ไขบัญชีแอดมินได้", + 'error_deleting_demo_admin' => "คุณไม่สามารถลบผู้ใช้งานสำหรับการเดโม้ได้", + 'error_updating_demo_admin' => "คุณไม่สามารถทำการเปลี่ยนข้อมูลผู้ใช้งานเดโม้ได้", + 'language' => "ภาษา", + 'login_info' => "รหัสเข้าระบบ", + 'manager' => "", + 'new' => "เพิ่มพนักงาน", + 'none_selected' => "โปรดเลือกพนักงานที่จะลบ", + 'one_or_multiple' => "พนักงาน", + 'password' => "รหัสผ่าน", + 'password_minlength' => "รหัสผ่านต้องยาวอย่างน้อย 8 อักษร", + 'password_must_match' => "รหัสผ่านไม่ตรงกัน", + 'password_not_must_match' => "รหัสผ่านปัจจุบันและรหัสผ่านใหม่จะต้องไม่ซ้ำกัน", + 'password_required' => "ต้องระบุรหัสผ่าน", + 'permission_desc' => "ทำเครื่องหมายในช่องด้านล่างเพื่อให้สิทธิ์การเข้าถึงโมดูลต่างๆ", + 'permission_info' => "สิทธิ์", + 'repeat_password' => "ระบุรหัสผ่านอีกครั้ง", + 'subpermission_required' => "เพิ่มการอนุญาตอย่างน้อยหนึ่งรายการสำหรับแต่ละโมดูล", + 'successful_adding' => "เพิ่มข้อมูลพนักงานเรียบร้อยแล้ว", + 'successful_change_password' => "ทำการเปลี่ยนรหัสผ่านเรียบร้อยแล้ว", + 'successful_deleted' => "ลบข้อมูลสำเร็จ", + 'successful_updating' => "ปรับปรุงข้อมูลพนักงานเรียบร้อยแล้ว", + 'system_language' => "ภาษาของระบบ", + 'unsuccessful_change_password' => "เปลี่ยนรหัสผ่านไม่สำเร็จ", + 'update' => "แก้ไขข้อมูลพนักงาน", + 'username' => "ชื่อผู้ใช้งาน", + 'username_duplicate' => "ชื่อผู้ใช้งานพนักงานถูกใช้งานแล้ว กรุณาเลือกใช้งานชื่ออื่น", + 'username_minlength' => "ชื่อผู้ใช้งานต้องยาวอย่างน้อย 5 อักษร", + 'username_required' => "จำเป็นต้องระบุชื่อผู้ใช้งาน", ]; diff --git a/app/Language/th/Expenses.php b/app/Language/th/Expenses.php index cea3f47fb..d7e8cd142 100644 --- a/app/Language/th/Expenses.php +++ b/app/Language/th/Expenses.php @@ -1,51 +1,51 @@ "เพิ่มรายจ่าย", - "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' => "ปรับปรุงค่าใช้จ่าย", ]; diff --git a/app/Language/th/Giftcards.php b/app/Language/th/Giftcards.php index f1a860dcb..07ff26cdd 100644 --- a/app/Language/th/Giftcards.php +++ b/app/Language/th/Giftcards.php @@ -1,72 +1,72 @@ "สินค้าคงคลัง เพิ่ม/ลด", - "allow_alt_description" => "คำอธิบายสำรอง", - "bulk_edit" => "แก้ไขเป็นกลุ่ม", - "cannot_be_deleted" => "ไม่สามารถลบข้อมูลบัตรของขวัญที่เลือก, หรือบัตรของขวัญได้มีการใช้ไปแล้ว", - "cannot_find_giftcard" => "ไม่พบข้อมูลเกี่ยวกับบัตรของขวัญนี้", - "cannot_use" => "บัตรของขวัญ {0} ไม่สามารถใช้งานกับรายการขายนี้ได้ เนื่องจากรายการลูกค้าไม่ถูกต้อง", - "card_value" => "มูลค่า", - "category" => "ประเภท", - "change_all_to_allow_alt_desc" => "คำอธิบายสำรองสำหรับทั้งหมด", - "change_all_to_not_allow_allow_desc" => "ไม่อนุญาตให้เปลี่ยนคำอธิบายทั้งหมด", - "change_all_to_serialized" => "เปลี่ยนแปลงทั้งหมด", - "change_all_to_unserialized" => "เปลี่ยนทั้งหมดเป็นแบบไม่ต่อเนื่องกัน", - "confirm_bulk_edit" => "คุณแน่ใจหรือไม่ว่าต้องการแก้ไขบัตรของขวัญที่เลือก?", - "confirm_delete" => "คุณแน่ใจหรือไม่ว่าต้องการลบบัตรของขวัญที่เลือก?", - "confirm_restore" => "คุณแน่ใจหรือไม่ว่าต้องการยกเลิกบัตรของขวัญที่เลือก?", - "cost_price" => "ต้นทุน", - "count" => "ปรับปรุงสินค้าคงคลัง", - "csv_import_failed" => "การส่งออกในรูปแบบไฟล์เอ็กเซล ไม่สำเร็จ", - "current_quantity" => "จำนวน ณ. ปัจจุบัน", - "description" => "รายละเอียด", - "details_count" => "รายละเอียดการตรวจนับในสินค้าคงคลัง", - "do_nothing" => "ไม่ทำอะไร", - "edit_fields_you_want_to_update" => "แก้ไขฟิลด์ที่ต้องการสำหรับบัตรของขวัญที่เลือก", - "edit_multiple_giftcards" => "แก้ไขบัตรกำนัลหลายใบ", - "error_adding_updating" => "มีข้อผิดพลาดในการ เพิ่ม/ปรับปรุง บัตรกำนัล", - "error_updating_multiple" => "มีข้อผิดพลาดในการปรับปรุง บัตรกำนัล", - "generate_barcodes" => "สร้างบาร์โค้ด", - "giftcard" => "บัตรกำนัล", - "giftcard_number" => "เลขบัตรกำนัล", - "info_provided_by" => "ข้อมูลที่จัดทำโดย", - "inventory_comments" => "คำแนะนำ", - "is_serialized" => "Giftcard has Serial Number", - "low_inventory_giftcards" => "Low Inventory Giftcards", - "manually_editing_of_quantity" => "แก้ไขจำนวนปริมาณเอง", - "must_select_giftcard_for_barcode" => "กรุณาเลือกบัตรกำนัลอย่างน้อย 1 รายการ เพื่อสร้างบาร์โค๊ด", - "new" => "เพิ่มบัตรกำนัล", - "no_description_giftcards" => "No Description Giftcards", - "no_giftcards_to_display" => "No Giftcards to display", - "none" => "ไม่มี", - "none_selected" => "กรุณาเลือกบัตรกำนัลที่ต้องการแก้ไข", - "number" => "เลขบัตรกำนัลต้องเป็นตัวเลขเท่านั้น", - "number_information" => "หมายเลขบัตรของขวัญ", - "number_required" => "ต้องกรอกเลขบัตรกำนัล", - "one_or_multiple" => "giftcard(s)", - "person_id" => "เจ้าของบัตร", - "quantity" => "ปริมาณ", - "quantity_required" => "ช่องข้อมูลปริมาณ จำเป็นต้องกรอก. คลิกที่เครื่องหมาย ( X ) เพื่อยกเลิก", - "remaining_balance" => "บัตรของขวัญ {0} มีมูลค่า {1}!", - "reorder_level" => "ยอดขั้นต่ำ", - "retrive_giftcard_info" => "Retrieve Giftcard Info", - "sales_tax_1" => "ภาษีการขาย", - "sales_tax_2" => "ภาษีขาย 2", - "serialized_giftcards" => "Serialized Giftcards", - "successful_adding" => "You have successfully added giftcard", - "successful_bulk_edit" => "You have successfully updated the selected giftcards", - "successful_deleted" => "คุณทำการลบสำเร็จแล้ว", - "successful_updating" => "You have successfully updated giftcard", - "supplier" => "ผู้ผลิต", - "tax_1" => "ภาษี 1", - "tax_2" => "ภาษี 2", - "tax_percent" => "เปอร์เซ็นต์ภาษี", - "tax_percents" => "อัตราภาษีแบบเปอร์เซ็นต์", - "unit_price" => "ราคาปลีก", - "upc_database" => "ฐานข้อมุลบาร์โค๊ด", - "update" => "ปรับข้อมูลบัตรกำนัล", - "use_inventory_menu" => "ใช้เมนูสินค้าคงคลัง", - "value" => "มูลค่าบัตรกำนัลต้องเป็นตัวเลขเท่านั้น", - "value_required" => "ต้องกรอกมูลค่าบัตรกำนัล", + 'add_minus' => "สินค้าคงคลัง เพิ่ม/ลด", + 'allow_alt_description' => "คำอธิบายสำรอง", + 'bulk_edit' => "แก้ไขเป็นกลุ่ม", + 'cannot_be_deleted' => "ไม่สามารถลบข้อมูลบัตรของขวัญที่เลือก, หรือบัตรของขวัญได้มีการใช้ไปแล้ว", + 'cannot_find_giftcard' => "ไม่พบข้อมูลเกี่ยวกับบัตรของขวัญนี้", + 'cannot_use' => "บัตรของขวัญ {0} ไม่สามารถใช้งานกับรายการขายนี้ได้ เนื่องจากรายการลูกค้าไม่ถูกต้อง", + 'card_value' => "มูลค่า", + 'category' => "ประเภท", + 'change_all_to_allow_alt_desc' => "คำอธิบายสำรองสำหรับทั้งหมด", + 'change_all_to_not_allow_allow_desc' => "ไม่อนุญาตให้เปลี่ยนคำอธิบายทั้งหมด", + 'change_all_to_serialized' => "เปลี่ยนแปลงทั้งหมด", + 'change_all_to_unserialized' => "เปลี่ยนทั้งหมดเป็นแบบไม่ต่อเนื่องกัน", + 'confirm_bulk_edit' => "คุณแน่ใจหรือไม่ว่าต้องการแก้ไขบัตรของขวัญที่เลือก?", + 'confirm_delete' => "คุณแน่ใจหรือไม่ว่าต้องการลบบัตรของขวัญที่เลือก?", + 'confirm_restore' => "คุณแน่ใจหรือไม่ว่าต้องการยกเลิกบัตรของขวัญที่เลือก?", + 'cost_price' => "ราคาขายส่ง", + 'count' => "ปรับปรุงสินค้าคงคลัง", + 'csv_import_failed' => "การส่งออกในรูปแบบไฟล์เอ็กเซล ไม่สำเร็จ", + 'current_quantity' => "จำนวน ณ. ปัจจุบัน", + 'description' => "รายละเอียด", + 'details_count' => "รายละเอียดการตรวจนับในสินค้าคงคลัง", + 'do_nothing' => "ไม่ทำอะไร", + 'edit_fields_you_want_to_update' => "แก้ไขฟิลด์ที่ต้องการสำหรับบัตรของขวัญที่เลือก", + 'edit_multiple_giftcards' => "แก้ไขบัตรกำนัลหลายใบ", + 'error_adding_updating' => "มีข้อผิดพลาดในการ เพิ่ม/ปรับปรุง บัตรกำนัล", + 'error_updating_multiple' => "มีข้อผิดพลาดในการปรับปรุง บัตรกำนัล", + 'generate_barcodes' => "สร้างบาร์โค้ด", + 'giftcard' => "บัตรกำนัล", + 'giftcard_number' => "เลขบัตรกำนัล", + 'info_provided_by' => "ข้อมูลที่จัดทำโดย", + 'inventory_comments' => "คำแนะนำ", + 'is_serialized' => "Giftcard has Serial Number", + 'low_inventory_giftcards' => "Low Inventory Giftcards", + 'manually_editing_of_quantity' => "แก้ไขจำนวนปริมาณเอง", + 'must_select_giftcard_for_barcode' => "กรุณาเลือกบัตรกำนัลอย่างน้อย 1 รายการ เพื่อสร้างบาร์โค๊ด", + 'new' => "เพิ่มบัตรกำนัล", + 'no_description_giftcards' => "No Description Giftcards", + 'no_giftcards_to_display' => "No Giftcards to display", + 'none' => "ไม่มี", + 'none_selected' => "กรุณาเลือกบัตรกำนัลที่ต้องการแก้ไข", + 'number' => "เลขบัตรกำนัลต้องเป็นตัวเลขเท่านั้น", + 'number_information' => "หมายเลขบัตรของขวัญ", + 'number_required' => "ต้องกรอกเลขบัตรกำนัล", + 'one_or_multiple' => "giftcard(s)", + 'person_id' => "เจ้าของบัตร", + 'quantity' => "ปริมาณ", + 'quantity_required' => "ช่องข้อมูลปริมาณ จำเป็นต้องกรอก. คลิกที่เครื่องหมาย ( X ) เพื่อยกเลิก", + 'remaining_balance' => "บัตรของขวัญ {0} มีมูลค่า {1}!", + 'reorder_level' => "ยอดขั้นต่ำ", + 'retrive_giftcard_info' => "Retrieve Giftcard Info", + 'sales_tax_1' => "ภาษีการขาย", + 'sales_tax_2' => "ภาษีขาย 2", + 'serialized_giftcards' => "Serialized Giftcards", + 'successful_adding' => "You have successfully added giftcard", + 'successful_bulk_edit' => "You have successfully updated the selected giftcards", + 'successful_deleted' => "คุณทำการลบสำเร็จแล้ว", + 'successful_updating' => "You have successfully updated giftcard", + 'supplier' => "ผู้ผลิต", + 'tax_1' => "ภาษี 1", + 'tax_2' => "ภาษี 2", + 'tax_percent' => "เปอร์เซ็นต์ภาษี", + 'tax_percents' => "อัตราภาษีแบบเปอร์เซ็นต์", + 'unit_price' => "ราคาปลีก", + 'upc_database' => "ฐานข้อมุลบาร์โค๊ด", + 'update' => "ปรับข้อมูลบัตรกำนัล", + 'use_inventory_menu' => "ใช้เมนูสินค้าคงคลัง", + 'value' => "มูลค่าบัตรกำนัลต้องเป็นตัวเลขเท่านั้น", + 'value_required' => "ต้องกรอกมูลค่าบัตรกำนัล", ]; diff --git a/app/Language/th/Items.php b/app/Language/th/Items.php index ca0f0d3a7..bf7c18a02 100644 --- a/app/Language/th/Items.php +++ b/app/Language/th/Items.php @@ -1,122 +1,122 @@ "เพิ่ม/ลบ จำนวนสินค้าคงคลัง", - "allow_alt_description" => "แสดงข้อมูลเพิ่มเติม", - "amount_entry" => "จำนวนเงิน", - "bulk_edit" => "แก้ไขความจุ", - "buy_price_required" => "ราคาซื้อขายต้องกรอก", - "cannot_be_deleted" => "ไม่สามารถลบสินค้าที่เลือก, สินค้าที่เลือกถูกขายไปแล้ว.", - "cannot_find_item" => "ไม่พบข้อมูลของสินค้า", - "categories" => "", - "category" => "หมวดหมู่", - "category_new" => "", - "category_required" => "หมวดหมู่สินค้าต้องกรอก", - "change_all_to_allow_alt_desc" => "อนุญาตให้รายละเอียดสำรองทั้งหมด", - "change_all_to_not_allow_allow_desc" => "ไม่อนุญาตให้จัดเรียงลำดับ", - "change_all_to_serialized" => "เปลี่ยนแปลงรหัสสินค้าทั้งหมด", - "change_all_to_unserialized" => "ลบรหัสสินค้าทั้งหมด", - "change_image" => "เปลี่ยนรูปภาพ", - "confirm_bulk_edit" => "แน่ใจหรือไม่ที่จะแก้ใขสินค้าทั้งหมดที่คุณเลือก?", - "confirm_bulk_edit_wipe_taxes" => "ข้อมูลภาษีทั้งหมดจะถูกแทนที่", - "confirm_delete" => "โปรดยืนยันการลบสินค้าที่ถูกเลือก?", - "confirm_restore" => "คุณแน่ใจหรือไม่ว่าต้องการกู้คืนรายการที่เลือก?", - "cost_price" => "ราคาขายส่ง", - "cost_price_number" => "ราคาขายส่งต้องเป็นตัวเลข", - "cost_price_required" => "ต้องกรอกราคาขายส่ง", - "count" => "แก้ไขจำนวนสินค้าคงคลัง", - "csv_import_failed" => "นำเข้าข้อมูล CSV ล้มเหลว", - "csv_import_invalid_location" => "", - "csv_import_nodata_wrongformat" => "Your uploaded file has no data or wrong format", - "csv_import_partially_failed" => "มีรายการ {0} รายการที่นำเข้าล้มเหลว : {1} รายการที่ยังไม่ได้นำเข้า", - "csv_import_success" => "Import of Items successful", - "current_quantity" => "ปริมาณสินค้าคงคลัง", - "default_pack_name" => "ชิ้นละ", - "description" => "รายละเอียด", - "details_count" => "รายละเอียดจำนวนสินค้าคงคลัง", - "do_nothing" => "ไม่ต้องทำอะไร", - "edit" => "", - "edit_fields_you_want_to_update" => "แก้ไขสินค้าทุกชนิดที่คุณเลือก", - "edit_multiple_items" => "แก้ใขสินค้าต่างๆ", - "empty_upc_items" => "Empty UPC Items", - "error_adding_updating" => "เพิ่ม/ปรับแต่ง สินค้าล้มเหลว", - "error_updating_multiple" => "ปรับแต่งสินค้าล้มเหลว", - "generate_barcodes" => "พิมพ์บาร์โค๊ด", - "hsn_code" => "ระบบการตั้งชื่อที่กลมกลืนกัน", - "image" => "รูป", - "import_items_csv" => "รายการที่นำเข้าจาก CSV", - "info_provided_by" => "จัดเตรียมข้อมูลโดย", - "inventory" => "สินค้าคงเหลือ", - "inventory_CSV_import_quantity" => "จำนวนที่นำเข้าจาก CSV", - "inventory_comments" => "คำอธิบาย", - "inventory_data_tracking" => "การติดตามข้อมูลสินค้าคงคลัง", - "inventory_date" => "วันที่", - "inventory_employee" => "พนักงาน", - "inventory_in_out_quantity" => "ปริมาณเข้า / ออก", - "inventory_remarks" => "หมายเหตุ", - "is_deleted" => "ถูกลบแล้ว", - "is_printed" => "", - "is_serialized" => "สินค้ามีซีเรียลนัมเบอร์", - "item" => "สินค้า", - "item_id" => "", - "item_number" => "โค๊ด", - "item_number_duplicate" => "The item number is already present in the database", - "kit" => "ชุด", - "location" => "ที่ตั้ง", - "low_inventory_items" => "สินค้าคงเหลือน้อย", - "low_sell_item" => "รายการขายต่ำ", - "manually_editing_of_quantity" => "แก้ไขจำนวน", - "markup" => "", - "name" => "ชื่อสินค้า", - "name_required" => "ชื่อสินค้าต้องกรอก", - "new" => "เพิ่มรายการสินค้า", - "no_description_items" => "สินค้าที่ไม่มีคำอธิบายหรือวิธีการใช้", - "no_items_to_display" => "ไม่มีสินค้าแสดง", - "none" => "ว่างเปล่า", - "none_selected" => "กรุณาเลือสินค้าที่ต้องการแก้ไข", - "nonstock" => "ไม่นับสต็อก", - "number_information" => "หมายเลขสินค้า", - "number_required" => "จำเป็นต้องระบุบาร์โค้ด", - "one_or_multiple" => "สินค้า(s)", - "pack_name" => "ชื่อแพ็ค", - "qty_per_pack" => "ปริมาณต่อแพ็ค", - "quantity" => "จำนวน", - "quantity_number" => "จำนวนต้องเป็นตัวเลข", - "quantity_required" => "จำนวนต้องกรอก", - "receiving_quantity" => "ยอดรับมา", - "remove_image" => "นำภาพออก", - "reorder_level" => "ระดับการสั่งใหม่", - "reorder_level_number" => "ระดับการสั่งใหม่ต้องเป็นตัวเลข", - "reorder_level_required" => "ระดับการสั่งไหม่ต้องกรอก", - "retrive_item_info" => "ดึงข้อมูลรายการ", - "sales_tax_1" => "ถาษีขาย", - "sales_tax_2" => "ภาษีขาย 2", - "search_attributes" => "ค้นหาตามคุณสมบัติ", - "select_image" => "เลือกรูปภาพ", - "serialized_items" => "รหัสสินค้า", - "standard" => "มาตรฐาน", - "stock" => "คลังสินค้า", - "stock_location" => "ที่เก็บ", - "stock_type" => "ประเภทคลัง", - "successful_adding" => "เพิ่มสินค้าสำเร็จ", - "successful_bulk_edit" => "ปรับแต่งสินค้าสำเร็จ", - "successful_deleted" => "ลบสินค้าสำเร็จ", - "successful_updating" => "ปรับแต่งสินค้าสำเร็จ", - "supplier" => "ผู้ผลิต", - "tax_1" => "ภาษี 1", - "tax_2" => "ภาษี 2", - "tax_3" => "", - "tax_category" => "ประเภทภาษี", - "tax_percent" => "ภาษี(%)", - "tax_percent_number" => "เปอร์เซ็นต์ภาษีต้องเป็นค่าตัวเลข", - "tax_percent_required" => "เปอร์เซ็นต์ต้องกรอก", - "tax_percents" => "ภาษี(%)", - "temp" => "ชั่วคราว", - "type" => "ประเภทรายการ", - "unit_price" => "ราคาขาย", - "unit_price_number" => "ราคาต่อหน่วยต้องเป็นตัวเลข", - "unit_price_required" => "ราคาต่อหน่วยต้องกรอก", - "upc_database" => "UPC ฐานข้อมูล", - "update" => "ปรับแต่งสินค้า", - "use_inventory_menu" => "ใช้เมนูสินค้าคงเหลือ", + 'add_minus' => "เพิ่ม/ลบ จำนวนสินค้าคงคลัง", + 'allow_alt_description' => "แสดงข้อมูลเพิ่มเติม", + 'amount_entry' => "จำนวนเงิน", + 'bulk_edit' => "แก้ไขความจุ", + 'buy_price_required' => "ราคาซื้อขายต้องกรอก", + 'cannot_be_deleted' => "ไม่สามารถลบสินค้าที่เลือก, สินค้าที่เลือกถูกขายไปแล้ว.", + 'cannot_find_item' => "ไม่พบข้อมูลของสินค้า", + 'categories' => "", + 'category' => "หมวดหมู่", + 'category_new' => "", + 'category_required' => "หมวดหมู่สินค้าต้องกรอก", + 'change_all_to_allow_alt_desc' => "อนุญาตให้รายละเอียดสำรองทั้งหมด", + 'change_all_to_not_allow_allow_desc' => "ไม่อนุญาตให้จัดเรียงลำดับ", + 'change_all_to_serialized' => "เปลี่ยนแปลงรหัสสินค้าทั้งหมด", + 'change_all_to_unserialized' => "ลบรหัสสินค้าทั้งหมด", + 'change_image' => "เปลี่ยนรูปภาพ", + 'confirm_bulk_edit' => "แน่ใจหรือไม่ที่จะแก้ใขสินค้าทั้งหมดที่คุณเลือก?", + 'confirm_bulk_edit_wipe_taxes' => "ข้อมูลภาษีทั้งหมดจะถูกแทนที่", + 'confirm_delete' => "โปรดยืนยันการลบสินค้าที่ถูกเลือก?", + 'confirm_restore' => "คุณแน่ใจหรือไม่ว่าต้องการกู้คืนรายการที่เลือก?", + 'cost_price' => "ราคาขายส่ง", + 'cost_price_number' => "ราคาขายส่งต้องเป็นตัวเลข", + 'cost_price_required' => "ต้องกรอกราคาขายส่ง", + 'count' => "แก้ไขจำนวนสินค้าคงคลัง", + 'csv_import_failed' => "นำเข้าข้อมูล CSV ล้มเหลว", + 'csv_import_invalid_location' => "คลังสินค้าไม่ถูกต้องหรือไม่พบ: {0} อนุญาตเฉพาะคลังสินค้าที่มีเท่านั้น", + 'csv_import_nodata_wrongformat' => "Your uploaded file has no data or wrong format", + 'csv_import_partially_failed' => "มีรายการ {0} รายการที่นำเข้าล้มเหลว : {1} รายการที่ยังไม่ได้นำเข้า", + 'csv_import_success' => "Import of Items successful", + 'current_quantity' => "ปริมาณสินค้าคงคลัง", + 'default_pack_name' => "ชิ้นละ", + 'description' => "รายละเอียด", + 'details_count' => "รายละเอียดจำนวนสินค้าคงคลัง", + 'do_nothing' => "ไม่ต้องทำอะไร", + 'edit' => "", + 'edit_fields_you_want_to_update' => "แก้ไขสินค้าทุกชนิดที่คุณเลือก", + 'edit_multiple_items' => "แก้ใขสินค้าต่างๆ", + 'empty_upc_items' => "Empty UPC Items", + 'error_adding_updating' => "เพิ่ม/ปรับแต่ง สินค้าล้มเหลว", + 'error_updating_multiple' => "ปรับแต่งสินค้าล้มเหลว", + 'generate_barcodes' => "พิมพ์บาร์โค๊ด", + 'hsn_code' => "ระบบการตั้งชื่อที่กลมกลืนกัน", + 'image' => "รูป", + 'import_items_csv' => "รายการที่นำเข้าจาก CSV", + 'info_provided_by' => "จัดเตรียมข้อมูลโดย", + 'inventory' => "สินค้าคงเหลือ", + 'inventory_CSV_import_quantity' => "จำนวนที่นำเข้าจาก CSV", + 'inventory_comments' => "คำอธิบาย", + 'inventory_data_tracking' => "การติดตามข้อมูลสินค้าคงคลัง", + 'inventory_date' => "วันที่", + 'inventory_employee' => "พนักงาน", + 'inventory_in_out_quantity' => "ปริมาณเข้า / ออก", + 'inventory_remarks' => "หมายเหตุ", + 'is_deleted' => "ถูกลบแล้ว", + 'is_printed' => "", + 'is_serialized' => "สินค้ามีซีเรียลนัมเบอร์", + 'item' => "สินค้า", + 'item_id' => "", + 'item_number' => "โค๊ด", + 'item_number_duplicate' => "The item number is already present in the database", + 'kit' => "ชุด", + 'location' => "ที่ตั้ง", + 'low_inventory_items' => "สินค้าคงเหลือน้อย", + 'low_sell_item' => "รายการขายต่ำ", + 'manually_editing_of_quantity' => "แก้ไขจำนวน", + 'markup' => "", + 'name' => "ชื่อสินค้า", + 'name_required' => "ชื่อสินค้าต้องกรอก", + 'new' => "เพิ่มรายการสินค้า", + 'no_description_items' => "สินค้าที่ไม่มีคำอธิบายหรือวิธีการใช้", + 'no_items_to_display' => "ไม่มีสินค้าแสดง", + 'none' => "ว่างเปล่า", + 'none_selected' => "กรุณาเลือสินค้าที่ต้องการแก้ไข", + 'nonstock' => "ไม่นับสต็อก", + 'number_information' => "หมายเลขสินค้า", + 'number_required' => "จำเป็นต้องระบุบาร์โค้ด", + 'one_or_multiple' => "สินค้า(s)", + 'pack_name' => "ชื่อแพ็ค", + 'qty_per_pack' => "ปริมาณต่อแพ็ค", + 'quantity' => "จำนวน", + 'quantity_number' => "จำนวนต้องเป็นตัวเลข", + 'quantity_required' => "จำนวนต้องกรอก", + 'receiving_quantity' => "ยอดรับมา", + 'remove_image' => "นำภาพออก", + 'reorder_level' => "ระดับการสั่งใหม่", + 'reorder_level_number' => "ระดับการสั่งใหม่ต้องเป็นตัวเลข", + 'reorder_level_required' => "ระดับการสั่งไหม่ต้องกรอก", + 'retrive_item_info' => "ดึงข้อมูลรายการ", + 'sales_tax_1' => "ถาษีขาย", + 'sales_tax_2' => "ภาษีขาย 2", + 'search_attributes' => "ค้นหาตามคุณสมบัติ", + 'select_image' => "เลือกรูปภาพ", + 'serialized_items' => "รหัสสินค้า", + 'standard' => "มาตรฐาน", + 'stock' => "คลังสินค้า", + 'stock_location' => "ที่เก็บ", + 'stock_type' => "ประเภทคลัง", + 'successful_adding' => "เพิ่มสินค้าสำเร็จ", + 'successful_bulk_edit' => "ปรับแต่งสินค้าสำเร็จ", + 'successful_deleted' => "ลบสินค้าสำเร็จ", + 'successful_updating' => "ปรับแต่งสินค้าสำเร็จ", + 'supplier' => "ผู้ผลิต", + 'tax_1' => "ภาษี 1", + 'tax_2' => "ภาษี 2", + 'tax_3' => "", + 'tax_category' => "ประเภทภาษี", + 'tax_percent' => "ภาษี(%)", + 'tax_percent_number' => "เปอร์เซ็นต์ภาษีต้องเป็นค่าตัวเลข", + 'tax_percent_required' => "เปอร์เซ็นต์ต้องกรอก", + 'tax_percents' => "ภาษี(%)", + 'temp' => "ชั่วคราว", + 'type' => "ประเภทรายการ", + 'unit_price' => "ราคาขาย", + 'unit_price_number' => "ราคาต่อหน่วยต้องเป็นตัวเลข", + 'unit_price_required' => "ราคาต่อหน่วยต้องกรอก", + 'upc_database' => "UPC ฐานข้อมูล", + 'update' => "ปรับแต่งสินค้า", + 'use_inventory_menu' => "ใช้เมนูสินค้าคงเหลือ", ]; diff --git a/app/Language/th/Reports.php b/app/Language/th/Reports.php index cc0bdbca2..013abd1ad 100644 --- a/app/Language/th/Reports.php +++ b/app/Language/th/Reports.php @@ -1,149 +1,150 @@ "ทั้งหมด", - "authority" => "ผู้ได้รับอนุญาติ", - "canceled" => "ถูกยกเลิก", - "categories" => "หมวดหมู่", - "categories_summary_report" => "รายงานสรุปหมวดหมู่", - "category" => "หมวดหมู่", - "code_canceled" => "รหัสยกเลิก", - "code_invoice" => "รหัสใบแจ้งหนี้", - "code_pos" => "รหัส POS", - "code_quote" => "อ้างอิง", - "code_return" => "รหัสส่งคืน", - "code_type" => "ประเภท", - "code_work_order" => "รหัสสั่งงาน", - "comments" => "หมายเหตุ", - "commission" => "", - "complete" => "การขายและรับคืนที่สมบูรณ์", - "completed_sales" => "การขายที่สมบูรณ์", - "confirm_delete" => "คุณแน่ใจหรือว่าต้องการลบรายการที่เลือก ?", - "confirm_restore" => "คุณแน่ใจหรือไม่ว่าต้องการกู้คืนรายการที่เลือก?", - "cost" => "ราคาขายส่ง", - "cost_price" => "ราคาขายส่ง", - "count" => "นับ", - "customer" => "ลูกค้า", - "customers" => "ลูกค้า", - "customers_summary_report" => "รายงานสรุปลูกค้า", - "date" => "วันที่", - "date_range" => "ระหว่างวันที่", - "description" => "คำอธิบาย", - "detailed_receivings_report" => "รายงานรายละเอียกการรับของ", - "detailed_receivings_report_input" => "", - "detailed_reports" => "รายละเอียดรายงาน", - "detailed_requisition_report" => "รายงานรายละเอียดการเบิกของ", - "detailed_sales_report" => "รายงายงานขาย", - "discount" => "ส่วนลด", - "discount_fixed" => "ส่วนลดคงที่", - "discount_percent" => "เปอร์เซ็นต์ส่วนลด", - "discount_type" => "ประเภทส่วนลด", - "discounts" => "ส่วนลด", - "discounts_summary_report" => "รายงานสรุปส่วนลด", - "earned" => "คะแนนที่ได้รับ", - "employee" => "พนักงาน", - "employees" => "พนักงาน", - "employees_summary_report" => "รายงานสรุปพนักงาน", - "expenses" => "รายจ่าย", - "expenses_amount" => "ยอดรวม", - "expenses_categories" => "สรุปค่าใช้จ่าย", - "expenses_categories_summary_report" => "รายงานสรุปหมวดหมู่ค่าใช้จ่าย", - "expenses_category" => "หมวดหมู่", - "expenses_payment_amount" => "", - "expenses_tax_amount" => "ภาษี", - "expenses_total_amount" => "ยอดรวมทั้งหมด", - "expenses_total_tax_amount" => "ภาษีทั้งหมด", - "graphical_reports" => "รายงายแบบกราฟ", - "inventory" => "สินค้าคงคลัง", - "inventory_low" => "สินค้าเหลือน้อย", - "inventory_low_report" => "รายงานสินค้าที่เหลือน้อย", - "inventory_reports" => "รายงานสินค้าคงเหลือ", - "inventory_summary" => "รายงานสินค้าคงเหลือ", - "inventory_summary_report" => "รายงานสรุปสินค้าคงเหลือ", - "item" => "สินค้า", - "item_count" => "ตัวกรองรายการตามการนับ", - "item_name" => "ชื่อสินค้า", - "item_number" => "เลขสินค้า", - "items" => "สินค้า", - "items_purchased" => "สินค้าที่ถูกซื้อ", - "items_received" => "สินค้าเข้า", - "items_summary_report" => "รายงานสรุปสินค้า", - "jurisdiction" => "การควบคุม", - "low_inventory" => "", - "low_inventory_report" => "", - "low_sell_quantity" => "จำนวนขายน้อย", - "more_than_zero" => "มากกว่าศูนย์", - "name" => "ชื่อ", - "no_reports_to_display" => "ไม่มีสินค้าแสดง", - "payment_type" => "ชนิดของการจ่าย", - "payments" => "รายจ่าย", - "payments_summary_report" => "รายงานสรุปการจ่าย", - "profit" => "กำไร", - "quantity" => "จำนวน", - "quantity_purchased" => "จำนวนการช์้อ", - "quotes" => "อ้างอิง", - "received_by" => "รับโดย", - "receiving_id" => "เลขที่การรับ", - "receiving_type" => "รูปแบบการรับสินค้า", - "receivings" => "รับสินค้า", - "reorder_level" => "ระดับการสั่งใหม่", - "report" => "รายงาน", - "report_input" => "ข้อมูลรายงาน", - "reports" => "รายงาน", - "requisition" => "เบิกสินค้า", - "requisition_by" => "ผู้เบิกสินค้า", - "requisition_id" => "IDเบิกสินค้า", - "requisition_item" => "ชื่อสินค้า", - "requisition_item_quantity" => "จำนวนเบิก", - "requisition_related_item" => "สินค้าย่อย", - "requisition_related_item_total_quantity" => "จำนวนรวมสินค้าย่อย", - "requisition_related_item_unit_quantity" => "จำนวนสินค้าย่ิอย", - "requisitions" => "ใบเบิกของ", - "returns" => "คืน", - "revenue" => "รายรับ", - "sale_id" => "เลขที่รายการ", - "sale_type" => "ชนิดของการขาย", - "sales" => "ขาย", - "sales_amount" => "จำนวนขาย", - "sales_summary_report" => "รายงานสรุปการขาย", - "sales_taxes" => "ภาษีขาย", - "sales_taxes_summary_report" => "รายงานสรุปภาษีขาย", - "serial_number" => "หมายเลขซีเรียล", - "service_charge" => "", - "sold_by" => "ขายโดย", - "sold_items" => "", - "sold_to" => "ขายไปที่", - "stock_location" => "ที่ตั้งคลังสินค้า", - "sub_total_value" => "ยอดรวมหักภาษี", - "subtotal" => "ยอดรวมรอง", - "summary_reports" => "สรุปรายงาน", - "supplied_by" => "ผบิตโดย", - "supplier" => "ผู้ผลิต", - "suppliers" => "ผู้ผลิต", - "suppliers_summary_report" => "รายงานสรุปผู้ผลิต", - "tax" => "ภาษี", - "tax_category" => "หมวดหมู่ภาษี", - "tax_name" => "ชื่อผู้เสียภาษี", - "tax_percent" => "เปอร์เซ็นภาษี", - "tax_rate" => "อัตราภาษี", - "taxes" => "ภาษี", - "taxes_summary_report" => "รายงานสรุปภาษี", - "total" => "ยอดรวม", - "total_inventory_value" => "มูลค่าสินค้าคงคลังรวม", - "total_low_sell_quantity" => "จำนวนการขายต่ำ", - "total_quantity" => "ปริมาณรวม", - "total_retail" => "มูลค่ารวมใบแจ้งหนี้ค้าปลีก", - "trans_amount" => "จำนวนรายการ", - "trans_due" => "วันนัดหมาย", - "trans_group" => "กลุ่มธุรกรรม", - "trans_nopay_sales" => "การขายโดยไม่มีการชำระเงิน", - "trans_payments" => "การชำระเงิน", - "trans_refunded" => "คืนเงิน", - "trans_sales" => "การขาย", - "trans_type" => "ประเภทธุรกรรม", - "type" => "ชนิด", - "unit_price" => "ราคาขาย", - "used" => "คะแนนที่ใช้", - "work_orders" => "การสั่งงาน", - "zero_and_less" => "เท่ากับศูนย์และน้อยกว่า", + 'all' => "ทั้งหมด", + 'authority' => "ผู้ได้รับอนุญาติ", + 'canceled' => "ถูกยกเลิก", + 'categories' => "หมวดหมู่", + 'categories_summary_report' => "รายงานสรุปหมวดหมู่", + 'category' => "หมวดหมู่", + 'code_canceled' => "รหัสยกเลิก", + 'code_invoice' => "รหัสใบแจ้งหนี้", + 'code_pos' => "รหัส POS", + 'code_quote' => "อ้างอิง", + 'code_return' => "รหัสส่งคืน", + 'code_type' => "ประเภท", + 'code_work_order' => "รหัสสั่งงาน", + 'comments' => "หมายเหตุ", + 'commission' => "", + 'complete' => "การขายและรับคืนที่สมบูรณ์", + 'completed_sales' => "การขายที่สมบูรณ์", + 'confirm_delete' => "คุณแน่ใจหรือว่าต้องการลบรายการที่เลือก ?", + 'confirm_restore' => "คุณแน่ใจหรือไม่ว่าต้องการกู้คืนรายการที่เลือก?", + 'cost' => "ราคาขายส่ง", + 'cost_price' => "ราคาขายส่ง", + 'count' => "นับ", + 'customer' => "ลูกค้า", + 'customers' => "ลูกค้า", + 'customers_summary_report' => "รายงานสรุปลูกค้า", + 'date' => "วันที่", + 'date_range' => "ระหว่างวันที่", + 'description' => "คำอธิบาย", + 'detailed_receivings_report' => "รายงานรายละเอียกการรับของ", + 'detailed_receivings_report_input' => "", + 'detailed_reports' => "รายละเอียดรายงาน", + 'detailed_requisition_report' => "รายงานรายละเอียดการเบิกของ", + 'detailed_sales_report' => "รายงายงานขาย", + 'discount' => "ส่วนลด", + 'discount_fixed' => "ส่วนลดคงที่", + 'discount_percent' => "เปอร์เซ็นต์ส่วนลด", + 'discount_type' => "ประเภทส่วนลด", + 'discounts' => "ส่วนลด", + 'discounts_summary_report' => "รายงานสรุปส่วนลด", + 'earned' => "คะแนนที่ได้รับ", + 'employee' => "พนักงาน", + 'employees' => "พนักงาน", + 'employees_summary_report' => "รายงานสรุปพนักงาน", + 'expenses' => "ค่าใช้จ่าย", + 'expenses_amount' => "ยอดรวม", + 'expenses_categories' => "สรุปค่าใช้จ่าย", + 'expenses_categories_summary_report' => "รายงานสรุปหมวดหมู่ค่าใช้จ่าย", + 'expenses_category' => "หมวดหมู่", + 'expenses_payment_amount' => "", + 'expenses_tax_amount' => "ภาษี", + 'expenses_total_amount' => "ยอดรวมทั้งหมด", + 'expenses_total_tax_amount' => "ภาษีทั้งหมด", + 'graphical_reports' => "รายงายแบบกราฟ", + 'inventory' => "สินค้าคงคลัง", + 'inventory_low' => "สินค้าเหลือน้อย", + 'inventory_low_report' => "รายงานสินค้าที่เหลือน้อย", + 'inventory_reports' => "รายงานสินค้าคงเหลือ", + 'inventory_summary' => "รายงานสินค้าคงเหลือ", + 'inventory_summary_report' => "รายงานสรุปสินค้าคงเหลือ", + 'item' => "สินค้า", + 'item_count' => "ตัวกรองรายการตามการนับ", + 'item_name' => "ชื่อสินค้า", + 'item_number' => "เลขสินค้า", + 'items' => "สินค้า", + 'items_purchased' => "สินค้าที่ถูกซื้อ", + 'items_received' => "สินค้าเข้า", + 'items_summary_report' => "รายงานสรุปสินค้า", + 'jurisdiction' => "การควบคุม", + 'low_inventory' => "", + 'low_inventory_report' => "", + 'low_sell_quantity' => "จำนวนขายน้อย", + 'more_than_zero' => "มากกว่าศูนย์", + 'name' => "ชื่อ", + 'no_reports_to_display' => "ไม่มีสินค้าแสดง", + 'payment_type' => "ชนิดของการจ่าย", + 'payments' => "รายจ่าย", + 'payments_summary_report' => "รายงานสรุปการจ่าย", + 'profit' => "กำไร", + 'quantity' => "จำนวน", + 'quantity_purchased' => "จำนวนการช์้อ", + 'quotes' => "อ้างอิง", + 'received_by' => "รับโดย", + 'receiving_id' => "เลขที่การรับ", + 'receiving_type' => "รูปแบบการรับสินค้า", + 'receivings' => "รับสินค้า", + 'reorder_level' => "ระดับการสั่งใหม่", + 'report' => "รายงาน", + 'report_input' => "ข้อมูลรายงาน", + 'reports' => "รายงาน", + 'requisition' => "เบิกสินค้า", + 'requisition_by' => "ผู้เบิกสินค้า", + 'requisition_id' => "IDเบิกสินค้า", + 'requisition_item' => "ชื่อสินค้า", + 'requisition_item_quantity' => "จำนวนเบิก", + 'requisition_related_item' => "สินค้าย่อย", + 'requisition_related_item_total_quantity' => "จำนวนรวมสินค้าย่อย", + 'requisition_related_item_unit_quantity' => "จำนวนสินค้าย่ิอย", + 'requisitions' => "ใบเบิกของ", + 'returns' => "คืน", + 'revenue' => "รายรับ", + 'sale_id' => "เลขที่รายการ", + 'sale_type' => "ชนิดของการขาย", + 'sales' => "ขาย", + 'sales_amount' => "จำนวนขาย", + 'sales_summary_report' => "รายงานสรุปการขาย", + 'sales_taxes' => "ภาษีขาย", + 'sales_taxes_summary_report' => "รายงานสรุปภาษีขาย", + 'serial_number' => "หมายเลขซีเรียล", + 'service_charge' => "", + 'sold_by' => "ขายโดย", + 'sold_items' => "", + 'sold_to' => "ขายไปที่", + 'stock_location' => "ที่ตั้งคลังสินค้า", + 'sub_total_value' => "ยอดรวมหักภาษี", + 'subtotal' => "ยอดรวมรอง", + 'summary_reports' => "สรุปรายงาน", + 'supplied_by' => "ผบิตโดย", + 'supplier' => "ผู้ผลิต", + 'suppliers' => "ผู้ผลิต", + 'suppliers_summary_report' => "รายงานสรุปผู้ผลิต", + 'tax' => "ภาษี", + 'tax_category' => "หมวดหมู่ภาษี", + 'tax_name' => "ชื่อผู้เสียภาษี", + 'tax_percent' => "เปอร์เซ็นภาษี", + 'tax_rate' => "อัตราภาษี", + 'taxes' => "ภาษี", + 'taxes_summary_report' => "รายงานสรุปภาษี", + 'total' => "ยอดรวม", + 'total_inventory_value' => "มูลค่าสินค้าคงคลังรวม", + 'total_low_sell_quantity' => "จำนวนการขายต่ำ", + 'total_quantity' => "ปริมาณรวม", + 'total_retail' => "มูลค่ารวมใบแจ้งหนี้ค้าปลีก", + 'trans_amount' => "จำนวนรายการ", + 'trans_due' => "วันนัดหมาย", + 'trans_group' => "กลุ่มธุรกรรม", + 'trans_nopay_sales' => "การขายโดยไม่มีการชำระเงิน", + 'trans_payments' => "การชำระเงิน", + 'trans_refunded' => "คืนเงิน", + 'trans_sales' => "การขาย", + 'trans_type' => "ประเภทธุรกรรม", + 'type' => "ชนิด", + 'unit_price' => "ราคาขาย", + 'used' => "คะแนนที่ใช้", + 'work_orders' => "การสั่งงาน", + 'zero_and_less' => "เท่ากับศูนย์และน้อยกว่า", + 'toggle_cost_and_profit' => "เปลี่ยนระหว่างต้นทุนและกำไร", ]; diff --git a/app/Language/tl/Attributes.php b/app/Language/tl/Attributes.php index 809a1978b..e163b8835 100644 --- a/app/Language/tl/Attributes.php +++ b/app/Language/tl/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "Are you sure you want to restore the selected attribute(s)?", "confirm_restore" => "Are you sure you want to delete the selected attribute(s)?", "definition_cannot_be_deleted" => "Could not delete selected attribute(s)", + "definition_invalid_group" => "", "definition_error_adding_updating" => "Attribute {0} could not be added or updated. Please check the error log.", "definition_flags" => "Attribute Visibility", "definition_group" => "Group", diff --git a/app/Language/tr/Attributes.php b/app/Language/tr/Attributes.php index 73bedab9c..877496fc7 100644 --- a/app/Language/tr/Attributes.php +++ b/app/Language/tr/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "Seçili niteliği ya da nitelikleri silmek istediğinize emin misiniz?", "confirm_restore" => "Seçili nitelik ya da nitelikleri kurtarmak istediğinize emin misiniz?", "definition_cannot_be_deleted" => "Seçili nitelik ya da nitelikler silinemedi", + "definition_invalid_group" => "Seçilen grup mevcut değil veya geçersiz.", "definition_error_adding_updating" => "Nitelik {0} eklenemedi ya da güncellenemedi. Lütfen hata kaydını gözden geçirin.", "definition_flags" => "Nitelik Görünebilirliği", "definition_group" => "Küme", diff --git a/app/Language/uk/Attributes.php b/app/Language/uk/Attributes.php index ea0eb4947..f9302f861 100644 --- a/app/Language/uk/Attributes.php +++ b/app/Language/uk/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "Ви впевнені, що хочете видалити вибрані атрибут(и)?", "confirm_restore" => "Ви впевнені, що хочете відновити вибрані атрибут(и)?", "definition_cannot_be_deleted" => "Не вдалося видалити вибрані атрибут(и)", + "definition_invalid_group" => "Вибрана група не існує або недійсна.", "definition_error_adding_updating" => "Атрибут {0} не може бути доданий або оновлений. Будь ласка, перевірте журнал помилок.", "definition_flags" => "Видимість атрибуту", "definition_group" => "Група", diff --git a/app/Language/ur/Attributes.php b/app/Language/ur/Attributes.php index 27a2051be..ce02d9f2c 100644 --- a/app/Language/ur/Attributes.php +++ b/app/Language/ur/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "کیا آپ منتخب شدہ کو حذف کرنا چاہتے ہیں ؟", "confirm_restore" => "کیا آپ منتخب شدہ کو بحال کرنا چاہتے ہیں ؟", "definition_cannot_be_deleted" => "منتخب شدہ کو حذف نہیں کیا جا سکتا", + "definition_invalid_group" => "", "definition_error_adding_updating" => "Attribute {0} could not be added or updated. Please check the error log.", "definition_flags" => "Attribute Visibility", "definition_group" => "Group", diff --git a/app/Language/vi/Attributes.php b/app/Language/vi/Attributes.php index 970597d35..90bd2245e 100644 --- a/app/Language/vi/Attributes.php +++ b/app/Language/vi/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "Bạn có chắc chắn muốn xóa (các) thuộc tính đã chọn không?", "confirm_restore" => "Bạn có chắc chắn muốn khôi phục (các) thuộc tính đã chọn không?", "definition_cannot_be_deleted" => "Không thể xóa (các) thuộc tính được chọn", + "definition_invalid_group" => "Nhóm đã chọn không tồn tại hoặc không hợp lệ.", "definition_error_adding_updating" => "Thuộc tính {0} không thể thêm hoặc cập nhật. Vui lòng kiểm tra nhật ký lỗi.", "definition_flags" => "Hiển thị thuộc tính", "definition_group" => "Nhóm", diff --git a/app/Language/zh-Hans/Attributes.php b/app/Language/zh-Hans/Attributes.php index 58f0a67b8..883d91935 100644 --- a/app/Language/zh-Hans/Attributes.php +++ b/app/Language/zh-Hans/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "确定要删除所选属性吗", "confirm_restore" => "您确定要还原所选属性吗?", "definition_cannot_be_deleted" => "不能删除该特征属性", + "definition_invalid_group" => "所选组不存在或无效。", "definition_error_adding_updating" => "无法添加或更新属性{0}。 请检查错误日志。", "definition_flags" => "属性可见性", "definition_group" => "组", diff --git a/app/Language/zh-Hant/Attributes.php b/app/Language/zh-Hant/Attributes.php index 4463cf5a1..66a3b19fa 100644 --- a/app/Language/zh-Hant/Attributes.php +++ b/app/Language/zh-Hant/Attributes.php @@ -5,6 +5,7 @@ return [ "confirm_delete" => "您確定要刪除此屬性?", "confirm_restore" => "您確定要還原所選屬性嗎?", "definition_cannot_be_deleted" => "無法刪除所選屬性", + "definition_invalid_group" => "所選擇的群組不存在或無效。", "definition_error_adding_updating" => "無法添加或更新屬性 {0}。 請檢查錯誤日誌。", "definition_flags" => "屬性可見性", "definition_group" => "群組", diff --git a/app/Libraries/Token_lib.php b/app/Libraries/Token_lib.php index 057af6607..e260240e1 100644 --- a/app/Libraries/Token_lib.php +++ b/app/Libraries/Token_lib.php @@ -1,6 +1,6 @@ 'EEE', + '%A' => 'EEEE', + '%b' => 'MMM', + '%B' => 'MMMM', + '%d' => 'dd', + '%D' => 'MM/dd/yy', + '%e' => 'd', + '%F' => 'yyyy-MM-dd', + '%h' => 'MMM', + '%j' => 'D', + '%m' => 'MM', + '%U' => 'w', + '%V' => 'ww', + '%W' => 'ww', + '%y' => 'yy', + '%Y' => 'yyyy', + '%H' => 'HH', + '%I' => 'hh', + '%l' => 'h', + '%M' => 'mm', + '%p' => 'a', + '%P' => 'a', + '%r' => 'hh:mm:ss a', + '%R' => 'HH:mm', + '%S' => 'ss', + '%T' => 'HH:mm:ss', + '%X' => 'HH:mm:ss', + '%z' => 'ZZZZZ', + '%Z' => 'z', + '%g' => 'yy', + '%G' => 'yyyy', + '%u' => 'e', + '%w' => 'c', + ]; + + private array $validStrftimeFormats = [ + 'a', 'A', 'b', 'B', 'c', 'd', 'D', 'e', 'F', 'g', 'G', + 'h', 'H', 'I', 'j', 'm', 'M', 'n', 'p', 'P', 'r', 'R', + 'S', 't', 'T', 'u', 'U', 'V', 'w', 'W', 'x', 'X', 'y', 'Y', 'z', 'Z' + ]; + /** * Expands all the tokens found in a given text string and returns the results. */ 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) { - $tokened_text = strftime($tokened_text); // TODO: these need to be converted to IntlDateFormatter::format() + if (str_contains($tokened_text, '%')) { + $tokened_text = $this->applyDateFormats($tokened_text); } - // Call scan to build an array of all of the 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 $tokened_text; } $token_values = []; $tokens_to_replace = []; - $this->generate($token_tree, $tokens_to_replace, $token_values, $tokens, $save); + $this->generate($token_tree, $tokens, $tokens_to_replace, $token_values, $save); return str_replace($tokens_to_replace, $token_values, $tokened_text); } - /** - * Parses out the all the tokens enclosed in braces {} and subparses on the colon : character where supplied - */ + private function applyDateFormats(string $text): string + { + $formatter = new IntlDateFormatter( + null, + IntlDateFormatter::FULL, + IntlDateFormatter::FULL, + null, + null, + '' + ); + + $dateTime = new DateTime(); + + return preg_replace_callback( + '/%([a-zA-Z%])/', + function ($match) use ($formatter, $dateTime) { + $formatChar = $match[1]; + + if ($formatChar === '%') { + return '%'; + } + + if ($formatChar === 'n') { + return "\n"; + } + + if ($formatChar === 't') { + return "\t"; + } + + if ($formatChar === 'C') { + return str_pad((string) intdiv((int) $dateTime->format('Y'), 100), 2, '0', STR_PAD_LEFT); + } + + if ($formatChar === 'c') { + $formatter->setPattern('yyyy-MM-dd HH:mm:ss'); + $result = $formatter->format($dateTime); + return $result !== false ? $result : $match[0]; + } + + if ($formatChar === 'x') { + $formatter->setPattern('yyyy-MM-dd'); + $result = $formatter->format($dateTime); + return $result !== false ? $result : $match[0]; + } + + if (!in_array($formatChar, $this->validStrftimeFormats, true)) { + return $match[0]; + } + + $intlPattern = $this->strftimeToIntlPatternMap[$match[0]] ?? null; + + if ($intlPattern === null) { + return $match[0]; + } + + $formatter->setPattern($intlPattern); + $result = $formatter->format($dateTime); + + return $result !== false ? $result : $match[0]; + }, + $text + ); + } + public function scan(string $text): array { - // Matches tokens with the following pattern: [$token:$length] preg_match_all('/ \{ # [ - pattern start ([^\s\{\}:]+) # match $token not containing whitespace : { or } @@ -69,12 +166,6 @@ class Token_lib return $token_tree; } - /** - * @param string|null $quantity - * @param string|null $price - * @param string|null $item_id_or_number_or_item_kit_or_receipt - * @return void - */ public function parse_barcode(?string &$quantity, ?string &$price, ?string &$item_id_or_number_or_item_kit_or_receipt): void { $config = config(OSPOS::class)->settings; @@ -90,17 +181,11 @@ class Token_lib $price = (isset($parsed_results['P'])) ? (double) $parsed_results['P'] : null; } } else { - $quantity = 1; // TODO: Quantity is handled using bcmath functions so that it is precision safe. This should be '1' + $quantity = 1; } } - /** - * @param string $string - * @param string $pattern - * @param array $tokens - * @return array - */ - public function parse(string $string, string $pattern, array $tokens = []): array // TODO: $string is a poor name for this parameter. + public function parse(string $string, string $pattern, array $tokens = []): array { $token_tree = $this->scan($pattern); @@ -129,19 +214,10 @@ class Token_lib return $results; } - /** - * @param array $used_tokens - * @param array $tokens_to_replace - * @param array $token_values - * @param array $tokens - * @param bool $save - * @return array - */ - public function generate(array $used_tokens, array &$tokens_to_replace, array &$token_values, array $tokens, bool $save = true): array // TODO: $tokens + private function generate(array $used_tokens, array $tokens, array &$tokens_to_replace, array &$token_values, bool $save = true): void { foreach ($used_tokens as $token_code => $token_info) { - // Generate value here based on the key value - $token_value = $this->resolve_token($token_code, [], $save); + $token_value = $this->resolve_token($token_code, $tokens, $save); foreach ($token_info as $length => $token_spec) { $tokens_to_replace[] = $token_spec; @@ -152,16 +228,8 @@ class Token_lib } } } - - return $token_values; } - /** - * @param $token_code - * @param array $tokens - * @param bool $save - * @return string - */ private function resolve_token($token_code, array $tokens = [], bool $save = true): string { foreach (array_merge($tokens, Token::get_tokens()) as $token) { @@ -172,4 +240,4 @@ class Token_lib return ''; } -} +} \ No newline at end of file diff --git a/app/Models/Attribute.php b/app/Models/Attribute.php index 57fe3c9e0..7e48f5caa 100644 --- a/app/Models/Attribute.php +++ b/app/Models/Attribute.php @@ -263,9 +263,10 @@ class Attribute extends Model /** * @param int $definition_flags + * @param bool $include_types If true, returns array with definition_id => ['name' => name, 'type' => type] * @return array */ - public function get_definitions_by_flags(int $definition_flags): array + public function get_definitions_by_flags(int $definition_flags, bool $include_types = false): array { $builder = $this->db->table('attribute_definitions'); $builder->where(new RawSql("definition_flags & $definition_flags")); // TODO: we need to heed CI warnings to escape properly @@ -275,6 +276,17 @@ class Attribute extends Model $results = $builder->get()->getResultArray(); + if ($include_types) { + $definitions = []; + foreach ($results as $result) { + $definitions[$result['definition_id']] = [ + 'name' => $result['definition_name'], + 'type' => $result['definition_type'] + ]; + } + return $definitions; + } + return $this->to_array($results, 'definition_id', 'definition_name'); } diff --git a/app/Models/Item.php b/app/Models/Item.php index 0d21edaaa..08f41bab7 100644 --- a/app/Models/Item.php +++ b/app/Models/Item.php @@ -16,6 +16,10 @@ use stdClass; */ class Item extends Model { + + public const ALLOWED_SUGGESTIONS_COLUMNS = ['name', 'item_number', 'description', 'cost_price', 'unit_price']; + public const ALLOWED_SUGGESTIONS_COLUMNS_WITH_EMPTY = ['', 'name', 'item_number', 'description', 'cost_price', 'unit_price']; + public const ALLOWED_BULK_EDIT_FIELDS = [ 'name', 'category', @@ -27,7 +31,6 @@ class Item extends Model 'allow_alt_description', 'is_serialized' ]; - protected $table = 'items'; protected $primaryKey = 'item_id'; protected $useAutoIncrement = true; @@ -544,13 +547,17 @@ class Item extends Model public function get_search_suggestion_format(?string $seed = null): string { $config = config(OSPOS::class)->settings; - $seed .= ',' . $config['suggestions_first_column']; + + $suggestionsFirstColumn = $this->suggestionColumnIsAllowed($config['suggestions_first_column']) + ? $config['suggestions_first_column'] + : 'name'; + $seed .= ',' . $suggestionsFirstColumn; - if ($config['suggestions_second_column'] !== '') { + if ($config['suggestions_second_column'] !== '' && $this->suggestionColumnIsAllowed($config['suggestions_second_column'])) { $seed .= ',' . $config['suggestions_second_column']; } - if ($config['suggestions_third_column'] !== '') { + if ($config['suggestions_third_column'] !== '' && $this->suggestionColumnIsAllowed($config['suggestions_third_column'])) { $seed .= ',' . $config['suggestions_third_column']; } @@ -566,9 +573,15 @@ class Item extends Model $config = config(OSPOS::class)->settings; $label = ''; - $label1 = $config['suggestions_first_column']; - $label2 = $config['suggestions_second_column']; - $label3 = $config['suggestions_third_column']; + $label1 = $this->suggestionColumnIsAllowed($config['suggestions_first_column']) + ? $config['suggestions_first_column'] + : 'name'; + $label2 = $this->suggestionColumnIsAllowed($config['suggestions_second_column']) + ? $config['suggestions_second_column'] + : ''; + $label3 = $this->suggestionColumnIsAllowed($config['suggestions_third_column']) + ? $config['suggestions_third_column'] + : ''; $this->format_result_numbers($result_row); @@ -592,6 +605,17 @@ class Item extends Model return $label; } + /** + * Validates if a column name is in the allowed suggestions columns. + * + * @param string $columnName + * @return bool + */ + private function suggestionColumnIsAllowed(string $columnName): bool + { + return in_array($columnName, self::ALLOWED_SUGGESTIONS_COLUMNS, true); + } + /** * Converts decimal money values to their correct locale format. * diff --git a/app/Models/Reports/Summary_taxes.php b/app/Models/Reports/Summary_taxes.php index 078738e18..6ebd05898 100644 --- a/app/Models/Reports/Summary_taxes.php +++ b/app/Models/Reports/Summary_taxes.php @@ -14,10 +14,7 @@ class Summary_taxes extends Summary_report $this->config = config(OSPOS::class)->settings; } - /** - * @return array[] - */ - protected function _get_data_columns(): array // TODO: hungarian notation + protected function _get_data_columns(): array { return [ ['tax_name' => lang('Reports.tax_name'), 'sortable' => false], @@ -29,12 +26,7 @@ class Summary_taxes extends Summary_report ]; } - /** - * @param array $inputs - * @param $builder - * @return void - */ - protected function _where(array $inputs, &$builder): void // TODO: hungarian notation + protected function _where(array $inputs, &$builder): void { $builder->where('sales.sale_status', COMPLETED); @@ -45,51 +37,90 @@ class Summary_taxes extends Summary_report } } - /** - * @param array $inputs - * @return array - */ public function getData(array $inputs): array { $decimals = totals_decimals(); $db_prefix = $this->db->getPrefix(); + $sale_amount = '(CASE WHEN ' . $db_prefix . 'sales_items.discount_type = ' . PERCENT + . " THEN " . $db_prefix . "sales_items.quantity_purchased * " . $db_prefix . "sales_items.item_unit_price - ROUND(" . $db_prefix . "sales_items.quantity_purchased * " . $db_prefix . "sales_items.item_unit_price * " . $db_prefix . "sales_items.discount / 100, $decimals)" + . ' ELSE ' . $db_prefix . 'sales_items.quantity_purchased * (' . $db_prefix . "sales_items.item_unit_price - " . $db_prefix . "sales_items.discount) END)"; + + $sale_tax = "IFNULL(" . $db_prefix . "sales_items_taxes.item_tax_amount, 0)"; + if ($this->config['tax_included']) { - $sale_total = '(CASE WHEN ' . $db_prefix . 'sales_items.discount_type = ' . PERCENT - . " THEN " . $db_prefix . "sales_items.quantity_purchased * " . $db_prefix . "sales_items.item_unit_price - ROUND(" . $db_prefix . "sales_items.quantity_purchased * " . $db_prefix . "sales_items.item_unit_price * " . $db_prefix . "sales_items.discount / 100, $decimals)" - . ' ELSE ' . $db_prefix . 'sales_items.quantity_purchased * (' . $db_prefix . 'sales_items.item_unit_price - ' . $db_prefix . 'sales_items.discount) END)'; - - $sale_subtotal = '(CASE WHEN ' . $db_prefix . 'sales_items.discount_type = ' . PERCENT - . " THEN " . $db_prefix . "sales_items.quantity_purchased * " . $db_prefix . "sales_items.item_unit_price - ROUND(" . $db_prefix . "sales_items.quantity_purchased * " . $db_prefix . "sales_items.item_unit_price * " . $db_prefix . "sales_items.discount / 100, $decimals) " - . 'ELSE ' . $db_prefix . 'sales_items.quantity_purchased * ' . $db_prefix . 'sales_items.item_unit_price - ' . $db_prefix . 'sales_items.discount END * (100 / (100 + ' . $db_prefix . 'sales_items_taxes.percent)))'; + $sale_subtotal = "ROUND($sale_amount - $sale_tax, $decimals)"; } else { - $sale_total = '(CASE WHEN ' . $db_prefix . 'sales_items.discount_type = ' . PERCENT - . " THEN " . $db_prefix . "sales_items.quantity_purchased * " . $db_prefix . "sales_items.item_unit_price - ROUND(" . $db_prefix . "sales_items.quantity_purchased * " . $db_prefix . "sales_items.item_unit_price * " . $db_prefix . "sales_items.discount / 100, $decimals)" - . ' ELSE ' . $db_prefix . 'sales_items.quantity_purchased * ' . $db_prefix . 'sales_items.item_unit_price - ' . $db_prefix . 'sales_items.discount END * (1 + (' . $db_prefix . 'sales_items_taxes.percent / 100)))'; - - $sale_subtotal = '(CASE WHEN ' . $db_prefix . 'sales_items.discount_type = ' . PERCENT - . " THEN " . $db_prefix . "sales_items.quantity_purchased * " . $db_prefix . "sales_items.item_unit_price - ROUND(" . $db_prefix . "sales_items.quantity_purchased * " . $db_prefix . "sales_items.item_unit_price * " . $db_prefix . "sales_items.discount / 100, $decimals)" - . ' ELSE ' . $db_prefix . 'sales_items.quantity_purchased * (' . $db_prefix . 'sales_items.item_unit_price - ' . $db_prefix . 'sales_items.discount) END)'; + $sale_subtotal = "ROUND($sale_amount, $decimals)"; } + $sale_tax_rounded = "ROUND($sale_tax, $decimals)"; + $sale_total = "($sale_subtotal + $sale_tax_rounded)"; $subquery_builder = $this->db->table('sales_items'); - $subquery_builder->select("name AS name, CONCAT(IFNULL(ROUND(percent, $decimals), 0), '%') AS percent, sales.sale_id AS sale_id, $sale_subtotal AS subtotal, IFNULL($db_prefix" . "sales_items_taxes.item_tax_amount, 0) AS tax, IFNULL($sale_total, $sale_subtotal) AS total"); + $subquery_builder->select( + "name AS name, " + . "CONCAT(IFNULL(ROUND(percent, $decimals), 0), '%') AS percent, " + . "sales.sale_id AS sale_id, " + . "$sale_subtotal AS subtotal, " + . "$sale_tax_rounded AS tax, " + . "$sale_total AS total" + ); $subquery_builder->join('sales', 'sales_items.sale_id = sales.sale_id', 'inner'); - $subquery_builder->join('sales_items_taxes', 'sales_items.sale_id = sales_items_taxes.sale_id AND sales_items.item_id = sales_items_taxes.item_id AND sales_items.line = sales_items_taxes.line', 'left outer'); + $subquery_builder->join( + 'sales_items_taxes', + 'sales_items.sale_id = sales_items_taxes.sale_id AND sales_items.item_id = sales_items_taxes.item_id AND sales_items.line = sales_items_taxes.line', + 'left outer' + ); $subquery_builder->where('sale_status', COMPLETED); if (empty($this->config['date_or_time_format'])) { - $subquery_builder->where('DATE(' . $db_prefix . 'sales.sale_time) BETWEEN ' . $this->db->escape($inputs['start_date']) . ' AND ' . $this->db->escape($inputs['end_date'])); + $subquery_builder->where( + 'DATE(' . $db_prefix . 'sales.sale_time) BETWEEN ' . $this->db->escape($inputs['start_date']) + . ' AND ' . $this->db->escape($inputs['end_date']) + ); } else { - $subquery_builder->where('sales.sale_time BETWEEN ' . $this->db->escape(rawurldecode($inputs['start_date'])) . ' AND ' . $this->db->escape(rawurldecode($inputs['end_date']))); + $subquery_builder->where( + 'sales.sale_time BETWEEN ' . $this->db->escape(rawurldecode($inputs['start_date'])) + . ' AND ' . $this->db->escape(rawurldecode($inputs['end_date'])) + ); } $builder = $this->db->newQuery()->fromSubquery($subquery_builder, 'temp_taxes'); - $builder->select("name, percent, COUNT(DISTINCT sale_id) AS count, ROUND(SUM(subtotal), $decimals) AS subtotal, ROUND(SUM(tax), $decimals) AS tax, ROUND(SUM(total), $decimals) total"); + $builder->select( + "name, percent, COUNT(DISTINCT sale_id) AS count, " + . "ROUND(SUM(subtotal), $decimals) AS subtotal, " + . "ROUND(SUM(tax), $decimals) AS tax, " + . "ROUND(SUM(total), $decimals) AS total" + ); $builder->groupBy('percent, name'); return $builder->get()->getResultArray(); } -} + + public function getSummaryData(array $inputs): array + { + $decimals = totals_decimals(); + $data = $this->getData($inputs); + + $subtotal = 0; + $tax = 0; + $total = 0; + $count = 0; + + foreach ($data as $row) { + $subtotal += (float) $row['subtotal']; + $tax += (float) $row['tax']; + $total += (float) $row['total']; + $count += (int) $row['count']; + } + + return [ + 'subtotal' => round($subtotal, $decimals), + 'tax' => round($tax, $decimals), + 'total' => round($total, $decimals), + 'count' => $count + ]; + } +} \ No newline at end of file diff --git a/app/Models/Sale.php b/app/Models/Sale.php index 719e35795..ff332ff8a 100644 --- a/app/Models/Sale.php +++ b/app/Models/Sale.php @@ -273,6 +273,10 @@ class Sale extends Model $builder->like('payment_type', lang('Sales.credit')); } + if ($filters['only_debit']) { + $builder->like('payment_type', lang('Sales.debit')); + } + $builder->groupBy('payment_type'); $payments = $builder->get()->getResultArray(); @@ -1494,6 +1498,10 @@ class Sale extends Model $builder->like('payments.payment_type', lang('Sales.credit')); } + if ($filters['only_debit']) { + $builder->like('payments.payment_type', lang('Sales.debit')); + } + if ($filters['only_due']) { $builder->like('payments.payment_type', lang('Sales.due')); } diff --git a/app/Views/attributes/form.php b/app/Views/attributes/form.php index 46afb3d23..2b47e354a 100644 --- a/app/Views/attributes/form.php +++ b/app/Views/attributes/form.php @@ -23,7 +23,7 @@ 'name' => 'definition_name', 'id' => 'definition_name', 'class' => 'form-control input-sm', - 'value' => $definition_info->definition_name + 'value' => esc($definition_info->definition_name) ]) ?> @@ -69,7 +69,7 @@
'definition_unit', - 'value' => $definition_info->definition_unit, + 'value' => esc($definition_info->definition_unit), 'class' => 'form-control input-sm', 'id' => 'definition_unit' ]) ?> diff --git a/app/Views/attributes/item.php b/app/Views/attributes/item.php index 6b1bf8b69..c9ae3e86d 100644 --- a/app/Views/attributes/item.php +++ b/app/Views/attributes/item.php @@ -23,7 +23,7 @@ $definition_value) { ?>
- 'control-label col-xs-3']) ?> + 'control-label col-xs-3']) ?>
attribute_value)) ? $definition_value['selected_value'] : $attribute_value->attribute_value; echo form_input([ 'name' => "attribute_links[$definition_id]", - 'value' => $value, + 'value' => esc($value), 'class' => 'form-control valid_chars', 'data-definition-id' => $definition_id ]); diff --git a/app/Views/cashups/manage.php b/app/Views/cashups/manage.php index db21cbb37..75ae7cb13 100644 --- a/app/Views/cashups/manage.php +++ b/app/Views/cashups/manage.php @@ -3,7 +3,10 @@ * @var string $controller_name * @var string $table_headers * @var array $filters + * @var array $selected_filters * @var array $config + * @var string|null $start_date + * @var string|null $end_date */ ?> @@ -11,20 +14,19 @@ + false, 'selected_printer' => 'takings_printer']) ?> @@ -58,7 +61,7 @@   'daterangepicker', 'class' => 'form-control input-sm', 'id' => 'daterangepicker']) ?> - 'filters', 'data-none-selected-text' => lang('Common.none_selected_text'), 'class' => 'selectpicker show-menu-arrow', diff --git a/app/Views/expenses/form.php b/app/Views/expenses/form.php index 2fc89f99e..64407e8e1 100644 --- a/app/Views/expenses/form.php +++ b/app/Views/expenses/form.php @@ -126,7 +126,12 @@
'control-label col-xs-3']) ?>
- employee_id, 'id="employee_id" class="form-control"') ?> + + employee_id, 'id="employee_id" class="form-control"') ?> + + employee_id) ?> + 'employee_name', 'value' => esc($employees[$expenses_info->employee_id] ?? ''), 'class' => 'form-control', 'readonly' => 'readonly']) ?> +
diff --git a/app/Views/expenses/manage.php b/app/Views/expenses/manage.php index a47e57334..f3bfd12dd 100644 --- a/app/Views/expenses/manage.php +++ b/app/Views/expenses/manage.php @@ -3,7 +3,10 @@ * @var string $controller_name * @var string $table_headers * @var array $filters + * @var array $selected_filters * @var array $config + * @var string|null $start_date + * @var string|null $end_date */ ?> @@ -11,20 +14,19 @@ +> false, 'selected_printer' => 'takings_printer']) ?> @@ -65,7 +69,7 @@   'daterangepicker', 'class' => 'form-control input-sm', 'id' => 'daterangepicker']) ?> - 'filters', 'data-none-selected-text' => lang('Common.none_selected_text'), 'class' => 'selectpicker show-menu-arrow', diff --git a/app/Views/items/manage.php b/app/Views/items/manage.php index 71d0428df..526d0a16c 100644 --- a/app/Views/items/manage.php +++ b/app/Views/items/manage.php @@ -6,6 +6,9 @@ * @var array $stock_locations * @var int $stock_location * @var array $config + * @var string|null $start_date + * @var string|null $end_date + * @var array $selected_filters */ use App\Models\Employee; @@ -22,24 +25,20 @@ use App\Models\Employee; ); }); - // When any filter is clicked and the dropdown window is closed - $('#filters').on('hidden.bs.select', function(e) { - table_support.refresh(); - }); - // Load the preset daterange picker // Set the beginning of time as starting date $('#daterangepicker').data('daterangepicker').setStartDate(""); // Update the hidden inputs with the selected dates before submitting the search data var start_date = ""; - $("#daterangepicker").on('apply.daterangepicker', function(ev, picker) { - table_support.refresh(); - }); - $("#stock_location").change(function() { - table_support.refresh(); - }); + // Override dates from server if provided + + start_date = ""; + + + end_date = ""; + + ['stock_location']]) ?> +