Compare commits

..

30 Commits

Author SHA1 Message Date
jekkos
f3fae110d6 Update install instructions + remove build on tag 2025-03-23 22:49:27 +01:00
jekkos
e9e82e4e50 Set release version to 3.4 2025-03-11 21:08:11 +01:00
Chathura Dilushanka
2bd38737e1 Update locale_config.php 2025-03-04 21:36:39 +01:00
JoseLuisKukMagana
2a789bb583 Translated using Weblate (Spanish (Mexico))
Currently translated at 100.0% (145 of 145 strings)

Translation: opensourcepos/reports
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/reports/es_MX/
2025-03-03 00:22:29 +01:00
JoseLuisKukMagana
e8a79910fe Translated using Weblate (Spanish (Mexico))
Currently translated at 100.0% (53 of 53 strings)

Translation: opensourcepos/customers
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/customers/es_MX/
2025-03-03 00:22:29 +01:00
JoseLuisKukMagana
9bfe6c7c4e Translated using Weblate (Spanish (Mexico))
Currently translated at 98.8% (84 of 85 strings)

Translation: opensourcepos/common
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/common/es_MX/
2025-03-03 00:22:29 +01:00
JoseLuisKukMagana
bc0e2c6833 Translated using Weblate (Spanish (Mexico))
Currently translated at 100.0% (21 of 21 strings)

Translation: opensourcepos/suppliers
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/suppliers/es_MX/
2025-03-03 00:22:29 +01:00
JoseLuisKukMagana
196375d594 Translated using Weblate (Spanish (Mexico))
Currently translated at 100.0% (327 of 327 strings)

Translation: opensourcepos/config
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/config/es_MX/
2025-03-03 00:22:29 +01:00
JoseLuisKukMagana
fafba87894 Translated using Weblate (Spanish (Mexico))
Currently translated at 100.0% (12 of 12 strings)

Translation: opensourcepos/login
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/login/es_MX/
2025-03-03 00:22:29 +01:00
JoseLuisKukMagana
66a097d9f2 Translated using Weblate (Spanish (Mexico))
Currently translated at 100.0% (38 of 38 strings)

Translation: opensourcepos/item_kits
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/item_kits/es_MX/
2025-03-03 00:22:29 +01:00
JoseLuisKukMagana
f3931577be Translated using Weblate (Spanish (Mexico))
Currently translated at 69.1% (47 of 68 strings)

Translation: opensourcepos/giftcards
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/giftcards/es_MX/
2025-03-03 00:22:29 +01:00
JoseLuisKukMagana
f125960fe2 Translated using Weblate (Spanish (Mexico))
Currently translated at 99.5% (221 of 222 strings)

Translation: opensourcepos/sales
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/sales/es_MX/
2025-03-03 00:22:29 +01:00
JoseLuisKukMagana
787977ed3e Translated using Weblate (Spanish (Mexico))
Currently translated at 100.0% (79 of 79 strings)

Translation: opensourcepos/taxes
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/taxes/es_MX/
2025-03-03 00:22:29 +01:00
JoseLuisKukMagana
502b5fd6b9 Translated using Weblate (Spanish (Mexico))
Currently translated at 100.0% (41 of 41 strings)

Translation: opensourcepos/employees
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/employees/es_MX/
2025-03-03 00:22:29 +01:00
JoseLuisKukMagana
ec2b941f3f Translated using Weblate (Spanish (Mexico))
Currently translated at 100.0% (55 of 55 strings)

Translation: opensourcepos/receivings
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/receivings/es_MX/
2025-03-03 00:22:29 +01:00
JoseLuisKukMagana
8723274418 Translated using Weblate (Spanish (Mexico))
Currently translated at 55.5% (65 of 117 strings)

Translation: opensourcepos/items
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/items/es_MX/
2025-03-03 00:22:29 +01:00
jekkos
cf73ffa825 Fix attribute dropdown delete (#4176) 2025-03-01 00:37:23 +01:00
jekkos
eeaa693ede Fix for giftcard numbering (#4182) 2025-02-15 01:12:35 +01:00
jekkos
1378794e7e Revert "Use app language for current_lang (#4175)"
This reverts commit 19974bc8e0.
2025-02-15 01:10:16 +01:00
jekkos
d1d8aa0401 Fix greyed out submit after validation (#4174) 2025-02-15 01:09:53 +01:00
jekkos
882f3b4522 Fix table header translations (#4175) 2025-02-15 01:08:19 +01:00
jekkos
19974bc8e0 Use app language for current_lang (#4175) 2025-02-10 08:53:11 +01:00
SONKO ABDOU
d0b2b3e80b Translated using Weblate (French)
Currently translated at 100.0% (12 of 12 strings)

Translation: opensourcepos/login
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/login/fr/
2025-02-09 20:35:46 +01:00
BudsieBuds
57c36e7ba7 Fixes for CHANGELOG 2025-02-08 00:00:56 +01:00
jekkos
8516ffe216 Add php-json to dependency list (#4168) 2025-02-07 23:59:59 +01:00
jekkos
534f7361d6 Update CHANGELOG 2025-02-06 23:25:39 +01:00
jekkos
5609859fdf Fix attribute dropdown creation (#4171) 2025-02-05 22:24:33 +01:00
jekkos
c6c5fcac26 Fix sales tax summary with time filter (#4166) 2025-02-05 22:01:59 +01:00
BudsieBuds
4d9cd80f8b Random fixes #2
- change old directories to new (ci4)
- updated documentation for clarity
2025-02-05 21:58:28 +01:00
jekkos
2924a889c7 Remove localhost in port mapping (#4168) 2025-02-04 12:11:54 +01:00
43 changed files with 1554 additions and 1479 deletions

View File

@@ -49,22 +49,3 @@ deploy:
on:
branch: master
- provider: releases
edge: true
file: dist/opensourcepos.$version.$rev.zip
name: "OpensourcePos $version"
release_notes_file: CHANGELOG.md
prerelease: true
user: jekkos
overwrite: true
api_key:
secure: "KOukL8IFf/uL/BjMyCSKjf2vylydjcWqgEx0eMqFCg3nZ4ybMaOwPORRthIfyT72/FvGX/aoxxEn0uR/AEtb+hYQXHmNS+kZdX72JCe8LpGuZ7FJ5X+Eo9mhJcsmS+smd1sC95DySSc/GolKPo+0WtJYONY/xGCLxm+9Ay4HREg="
branches:
except:
- unstable
- /unstable.*/
on:
tags: true
branch: master

View File

@@ -1,4 +1,5 @@
[unreleased]: https://github.com/opensourcepos/opensourcepos/compare/3.3.9...HEAD
[unreleased]: https://github.com/opensourcepos/opensourcepos/compare/3.4.0...HEAD
[3.4.0]: https://github.com/opensourcepos/opensourcepos/compare/3.3.9...3.4.0
[3.3.9]: https://github.com/opensourcepos/opensourcepos/compare/3.3.8...3.3.9
[3.3.8]: https://github.com/opensourcepos/opensourcepos/compare/3.3.7...3.3.8
[3.3.7]: https://github.com/opensourcepos/opensourcepos/compare/3.3.6...3.3.7
@@ -31,6 +32,16 @@ All notable changes to this project will be documented in this file.
## [Unreleased]
## [3.4.0] - 2025-02-06
- Translation updates (Spanish, Indonesian, Swedish, Urdu, Chinese, Thai, French, Dutch)
- PHP 8.x support
- Security fixes (XSS, SQLi)
- Migration to Gulp as buildsystem
- Decimal validation fix
- Sticky header fix
- Receipt sent as attachment
- Barcode generation library upgrade
- Bump framework to CodeIgniter `4.x.x`
- Improve security performance against bots

View File

@@ -1,21 +1,20 @@
## Server Requirements
- PHP version `7.4` is supported, PHP version `≤7.3` is NOT supported. Please note that PHP needs to have the extensions `php-gd`, `php-bcmath`, `php-intl`, `php-openssl`, `php-mbstring` , `php-curl` and `php-xml` installed and enabled. PHP version `8.x` is only supported by the code that is still under development in master branch. An unstable build can be downloaded in the releases section.
- MySQL `5.6` and `5.7` are supported, also MariaDB replacement `10.x` is supported and might offer better performance.
- PHP version `8.1` to `8.3` are supported, PHP version `≤7.4` is NOT supported. Please note that PHP needs to have the extensions `php-json`, `php-gd`, `php-bcmath`, `php-intl`, `php-openssl`, `php-mbstring` , `php-curl` and `php-xml` installed and enabled. An unstable master build can be downloaded in the releases section.
- MySQL `5.7` is supported, also MariaDB replacement `10.x` is supported and might offer better performance.
- Apache `2.4` is supported. Nginx should work fine too, see [wiki page here](https://github.com/opensourcepos/opensourcepos/wiki/Local-Deployment-using-LEMP).
- Raspberry PI based installations proved to work, see [wiki page here](<https://github.com/opensourcepos/opensourcepos/wiki/Installing-on-Raspberry-PI---Orange-PI-(Headless-OSPOS)>).
- 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.
## Local install
First of all, if you're seeing the message `system folder missing` after launching your browser, or cannot find `database.php`, 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.
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.
1. Download the a [pre-release for a specific branch](https://github.com/opensourcepos/opensourcepos/packages/1047637) or the latest stable [from GitHub here](https://github.com/opensourcepos/opensourcepos/releases). A repository clone will not work unless know how to build the project.
1. Download the a [pre-release for a specific branch](https://github.com/opensourcepos/opensourcepos/releases) or the latest stable [from GitHub here](https://github.com/opensourcepos/opensourcepos/releases). A repository clone will not work unless know how to build the project.
2. Create/locate a new MySQL database to install Open Source Point of Sale into.
3. Execute the file `database/database.sql` to create the tables needed.
4. Unzip and upload Open Source Point of Sale files to the web-server.
5. Open `app/Config/database.php` and modify credentials to connect to your database if needed.
6. Open `app/Config/config.php` and swap the encryption key with your own.
7. Go to your install `public` dir via the browser.
8. Log in using
- Username: admin

View File

@@ -94,11 +94,11 @@ NOTE: If you're running non-release code, please make sure you always run the la
- Apache server configurations are SysAdmin issues and not strictly related to OSPOS. Please make sure you can show a "Hello world" HTML page before pointing to OSPOS public directory. Make sure `.htaccess` is correctly configured.
- If the avatar pictures are not shown in items or at item save you get an error, please make sure your `public` and subdirs are assigned to the correct owner and the access permission is set to `750`.
- If the avatar pictures are not shown in items or at item save you get an error, please make sure your `writable` and subdirs are assigned to the correct owner and the access permission is set to `750`.
- If you install OSPOS in Docker behind a proxy that performs `ssloffloading`, you can enable the URL generated to be HTTPS instead of HTTP, by activating the environment variable `FORCE_HTTPS = 1`.
- If you install OSPOS behind a proxy and OSPOS constantly drops your session, consider whitelisting the proxy IP address by setting `$config['proxy_ips'] = '<proxy ip>';` in the [main PHP config file](https://github.com/opensourcepos/opensourcepos/blob/master/application/config/config.php). In extreme instances, changing `$config['sess_match_ip'] = true;` to `FALSE` may also help.
- If you install OSPOS behind a proxy and OSPOS constantly drops your session, consider whitelisting the proxy IP address by setting `public array $proxyIPs = [];` in the [main PHP config file](https://github.com/opensourcepos/opensourcepos/blob/master/app/Config/App.php).
- If you have suhosin installed and face an issue with CSRF, please make sure you read [issue #1492](https://github.com/opensourcepos/opensourcepos/issues/1492).

View File

@@ -1,5 +1,8 @@
## How to Upgrade
> [!WARNING]
> Not updated for upcoming CodeIgniter4 release (3.4.0 and subsequent versions).
1. Back up all your current database and OSPOS code.
2. Make sure you have a copy of `application/config/config.php` and `application/config/database.php`.
3. Remove all directories.

View File

@@ -12,7 +12,7 @@ class App extends BaseConfig
*
* @var string
*/
public string $application_version = '3.4.0-dev';
public string $application_version = '3.4.0';
/**
* This is the commit hash for the version you are currently using.

View File

@@ -41,7 +41,7 @@ class Attributes extends Secure_Controller
$search = $this->request->getGet('search');
$limit = $this->request->getGet('limit', FILTER_SANITIZE_NUMBER_INT);
$offset = $this->request->getGet('offset', FILTER_SANITIZE_NUMBER_INT);
$sort = $this->sanitizeSortColumn(ATTRIBUTE_DEFINITION_HEADERS, $this->request->getGet('sort', FILTER_SANITIZE_FULL_SPECIAL_CHARS), 'definition_id');
$sort = $this->sanitizeSortColumn(attribute_definition_headers(), $this->request->getGet('sort', FILTER_SANITIZE_FULL_SPECIAL_CHARS), 'definition_id');
$order = $this->request->getGet('order', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
$attributes = $this->attribute->search($search, $limit, $offset, $sort, $order);
@@ -67,8 +67,8 @@ class Attributes extends Secure_Controller
$success = $this->attribute->saveAttributeValue(
html_entity_decode($this->request->getPost('attribute_value')),
$this->request->getPost('definition_id', FILTER_SANITIZE_NUMBER_INT),
$this->request->getPost('item_id', FILTER_SANITIZE_NUMBER_INT),
$this->request->getPost('attribute_id', FILTER_SANITIZE_NUMBER_INT)
$this->request->getPost('item_id', FILTER_SANITIZE_NUMBER_INT) ?? false,
$this->request->getPost('attribute_id', FILTER_SANITIZE_NUMBER_INT) ?? false
);
echo json_encode(['success' => $success != 0]);
@@ -231,14 +231,15 @@ class Attributes extends Secure_Controller
}
/**
* AJAX called function to delete an attribute value. This is never called in the code. Perhaps it was boiler plate code that just isn't needed?
* @param int $attribute_id
* AJAX called function to delete an attribute value. This is called when a dropdown item is removed.
*
* @param string $attribute_value
* @return bool
* @noinspection PhpUnused
*/
public function delete_value(int $attribute_id): bool //TODO: This function appears to never be used in the codebase. Is it needed?
public function delete_value(string $attribute_value): bool
{
return $this->attribute->delete_value($attribute_id, NO_DEFINITION_ID);
return $this->attribute->delete_value($attribute_value, NO_DEFINITION_ID);
}
/**

View File

@@ -46,7 +46,7 @@ class Cashups extends Secure_Controller
$search = $this->request->getGet('search');
$limit = $this->request->getGet('limit', FILTER_SANITIZE_NUMBER_INT);
$offset = $this->request->getGet('offset', FILTER_SANITIZE_NUMBER_INT);
$sort = $this->sanitizeSortColumn(CASHUPS_HEADERS, $this->request->getGet('sort', FILTER_SANITIZE_FULL_SPECIAL_CHARS), 'cashup_id');
$sort = $this->sanitizeSortColumn(cashup_headers(), $this->request->getGet('sort', FILTER_SANITIZE_FULL_SPECIAL_CHARS), 'cashup_id');
$order = $this->request->getGet('order', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
$filters = [
'start_date' => $this->request->getGet('start_date', FILTER_SANITIZE_FULL_SPECIAL_CHARS), //TODO: Is this the best way to filter dates

View File

@@ -90,7 +90,7 @@ class Customers extends Persons
$search = $this->request->getGet('search');
$limit = $this->request->getGet('limit', FILTER_SANITIZE_NUMBER_INT);
$offset = $this->request->getGet('offset', FILTER_SANITIZE_NUMBER_INT);
$sort = $this->sanitizeSortColumn(CUSTOMER_HEADERS, $this->request->getGet('sort', FILTER_SANITIZE_FULL_SPECIAL_CHARS), 'people.person_id');
$sort = $this->sanitizeSortColumn(customer_headers(), $this->request->getGet('sort', FILTER_SANITIZE_FULL_SPECIAL_CHARS), 'people.person_id');
$order = $this->request->getGet('order', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
$customers = $this->customer->search($search, $limit, $offset, $sort, $order);

View File

@@ -30,7 +30,7 @@ class Employees extends Persons
$search = $this->request->getGet('search');
$limit = $this->request->getGet('limit', FILTER_SANITIZE_NUMBER_INT);
$offset = $this->request->getGet('offset', FILTER_SANITIZE_NUMBER_INT);
$sort = $this->sanitizeSortColumn(PERSON_HEADERS, $this->request->getGet('sort', FILTER_SANITIZE_FULL_SPECIAL_CHARS), 'people.person_id');
$sort = $this->sanitizeSortColumn(person_headers(), $this->request->getGet('sort', FILTER_SANITIZE_FULL_SPECIAL_CHARS), 'people.person_id');
$order = $this->request->getGet('order', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
$employees = $this->employee->search($search, $limit, $offset, $sort, $order);

View File

@@ -48,7 +48,7 @@ class Expenses extends Secure_Controller
$search = $this->request->getGet('search');
$limit = $this->request->getGet('limit', FILTER_SANITIZE_NUMBER_INT);
$offset = $this->request->getGet('offset', FILTER_SANITIZE_NUMBER_INT);
$sort = $this->sanitizeSortColumn(EXPENSE_HEADERS, $this->request->getGet('sort', FILTER_SANITIZE_FULL_SPECIAL_CHARS), 'expense_id');
$sort = $this->sanitizeSortColumn(expense_headers(), $this->request->getGet('sort', FILTER_SANITIZE_FULL_SPECIAL_CHARS), 'expense_id');
$order = $this->request->getGet('order', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
$filters = [
'start_date' => $this->request->getGet('start_date', FILTER_SANITIZE_FULL_SPECIAL_CHARS),

View File

@@ -34,7 +34,7 @@ class Expenses_categories extends Secure_Controller //TODO: Is this class ever u
$search = $this->request->getGet('search');
$limit = $this->request->getGet('limit', FILTER_SANITIZE_NUMBER_INT);
$offset = $this->request->getGet('offset', FILTER_SANITIZE_NUMBER_INT);
$sort = $this->sanitizeSortColumn(EXPENSE_CATEGORY_HEADERS, $this->request->getGet('sort', FILTER_SANITIZE_FULL_SPECIAL_CHARS), 'expense_category_id');
$sort = $this->sanitizeSortColumn(expense_category_headers(), $this->request->getGet('sort', FILTER_SANITIZE_FULL_SPECIAL_CHARS), 'expense_category_id');
$order = $this->request->getGet('order', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
$expense_categories = $this->expense_category->search($search, $limit, $offset, $sort, $order);

View File

@@ -35,7 +35,7 @@ class Giftcards extends Secure_Controller
$search = $this->request->getGet('search');
$limit = $this->request->getGet('limit', FILTER_SANITIZE_NUMBER_INT);
$offset = $this->request->getGet('offset', FILTER_SANITIZE_NUMBER_INT);
$sort = $this->sanitizeSortColumn(GIFTCARD_HEADERS, $this->request->getGet('sort', FILTER_SANITIZE_FULL_SPECIAL_CHARS), 'giftcard_id');
$sort = $this->sanitizeSortColumn(giftcard_headers(), $this->request->getGet('sort', FILTER_SANITIZE_FULL_SPECIAL_CHARS), 'giftcard_id');
$order = $this->request->getGet('order', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
$giftcards = $this->giftcard->search($search, $limit, $offset, $sort, $order);

View File

@@ -79,7 +79,7 @@ class Item_kits extends Secure_Controller
$search = $this->request->getGet('search') ?? '';
$limit = $this->request->getGet('limit', FILTER_SANITIZE_NUMBER_INT);
$offset = $this->request->getGet('offset', FILTER_SANITIZE_NUMBER_INT);
$sort = $this->sanitizeSortColumn(ITEM_KIT_HEADERS, $this->request->getGet('sort', FILTER_SANITIZE_FULL_SPECIAL_CHARS), 'item_kit_id');
$sort = $this->sanitizeSortColumn(item_kit_headers(), $this->request->getGet('sort', FILTER_SANITIZE_FULL_SPECIAL_CHARS), 'item_kit_id');
$order = $this->request->getGet('order', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
$item_kits = $this->item_kit->search($search, $limit, $offset, $sort, $order);

View File

@@ -97,7 +97,7 @@ class Items extends Secure_Controller
$search = $this->request->getGet('search');
$limit = $this->request->getGet('limit', FILTER_SANITIZE_NUMBER_INT);
$offset = $this->request->getGet('offset', FILTER_SANITIZE_NUMBER_INT);
$sort = $this->sanitizeSortColumn(ITEM_HEADERS, $this->request->getGet('sort', FILTER_SANITIZE_FULL_SPECIAL_CHARS), 'item_id');
$sort = $this->sanitizeSortColumn(item_headers(), $this->request->getGet('sort', FILTER_SANITIZE_FULL_SPECIAL_CHARS), 'item_id');
$order = $this->request->getGet('order', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
$this->item_lib->set_item_location($this->request->getGet('stock_location'));

View File

@@ -136,7 +136,7 @@ class Sales extends Secure_Controller
$search = $this->request->getGet('search', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
$limit = $this->request->getGet('limit', FILTER_SANITIZE_NUMBER_INT);
$offset = $this->request->getGet('offset', FILTER_SANITIZE_NUMBER_INT);
$sort = $this->sanitizeSortColumn(SALES_HEADERS, $this->request->getGet('sort', FILTER_SANITIZE_FULL_SPECIAL_CHARS), 'sale_id');
$sort = $this->sanitizeSortColumn(sales_headers(), $this->request->getGet('sort', FILTER_SANITIZE_FULL_SPECIAL_CHARS), 'sale_id');
$order = $this->request->getGet('order', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
$filters = [

View File

@@ -48,7 +48,7 @@ class Suppliers extends Persons
$search = $this->request->getGet('search');
$limit = $this->request->getGet('limit', FILTER_SANITIZE_NUMBER_INT);
$offset = $this->request->getGet('offset', FILTER_SANITIZE_NUMBER_INT);
$sort = $this->sanitizeSortColumn(SUPPLIER_HEADERS, $this->request->getGet('sort', FILTER_SANITIZE_FULL_SPECIAL_CHARS), 'people.person_id');
$sort = $this->sanitizeSortColumn(supplier_headers(), $this->request->getGet('sort', FILTER_SANITIZE_FULL_SPECIAL_CHARS), 'people.person_id');
$order = $this->request->getGet('order', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
$suppliers = $this->supplier->search($search, $limit, $offset, $sort, $order);

View File

@@ -18,7 +18,15 @@ class fix_duplicate_attributes extends Migration
helper('migration');
$this->drop_foreign_key_constraints();
$foreignKeys = [
'ospos_attribute_links_ibfk_1',
'ospos_attribute_links_ibfk_2',
'ospos_attribute_links_ibfk_3',
'ospos_attribute_links_ibfk_4',
'ospos_attribute_links_ibfk_5'
];
drop_foreign_key_constraints($foreignKeys, 'ospos_attribute_links');
execute_script(APPPATH . 'Database/Migrations/sqlscripts/3.4.0_attribute_links_unique_constraint.sql');
}
@@ -57,44 +65,6 @@ class fix_duplicate_attributes extends Migration
}
}
/**
* Drops the foreign key constraints from the attribute_links table.
* This is required to successfully create the generated unique constraint.
*
* @return void
*/
private function drop_foreign_key_constraints(): void
{
$foreignKeys = [
'ospos_attribute_links_ibfk_1',
'ospos_attribute_links_ibfk_2',
'ospos_attribute_links_ibfk_3',
'ospos_attribute_links_ibfk_4',
'ospos_attribute_links_ibfk_5'
];
$current_prefix = $this->db->getPrefix();
$this->db->setPrefix('');
$database_name = $this->db->database;
foreach ($foreignKeys as $fk)
{
$builder = $this->db->table('INFORMATION_SCHEMA.TABLE_CONSTRAINTS');
$builder->select('CONSTRAINT_NAME');
$builder->where('TABLE_SCHEMA', $database_name);
$builder->where('TABLE_NAME', 'ospos_attribute_links');
$builder->where('CONSTRAINT_TYPE', 'FOREIGN KEY');
$builder->where('CONSTRAINT_NAME', $fk);
$query = $builder->get();
if($query->getNumRows() > 0)
{
$this->db->query("ALTER TABLE `ospos_attribute_links` DROP FOREIGN KEY `$fk`");
}
}
$this->db->setPrefix($current_prefix);
}
/**
* Revert a migration step.

View File

@@ -0,0 +1,29 @@
<?php
namespace App\Database\Migrations;
use CodeIgniter\Database\Migration;
use App\Models\Attribute;
use CodeIgniter\Database\ResultInterface;
class Migration_Attributes_fix_cascading_delete extends Migration
{
/**
* Perform a migration step.
*/
public function up(): void
{
helper('migration');
drop_foreign_key_constraints(['ospos_attribute_links_ibfk_1', 'ospos_attribute_links_ibfk_2'], 'ospos_attribute_links');
$this->db->query("ALTER TABLE `ospos_attribute_links` ADD CONSTRAINT `ospos_attribute_links_ibfk_1` FOREIGN KEY (`definition_id`) REFERENCES `ospos_attribute_definitions` (`definition_id`) ON DELETE CASCADE;");
$this->db->query("ALTER TABLE `ospos_attribute_links` ADD CONSTRAINT `ospos_attribute_links_ibfk_2` FOREIGN KEY (`attribute_id`) REFERENCES `ospos_attribute_values` (`attribute_id`) ON DELETE CASCADE;");
}
/**
* Revert a migration step.
*/
public function down(): void
{
}
}

View File

@@ -30,4 +30,37 @@ function execute_script(string $path): void
}
error_log("Migrated to $version");
}
}
/**
* Drops the foreign key constraints from the attribute_links table.
* This is required to successfully create the generated unique constraint.
*
* @return void
*/
function drop_foreign_key_constraints(array $foreignKeys, string $table): void
{
$db = Database::connect();
$current_prefix = $db->getPrefix();
$db->setPrefix('');
$database_name = $db->database;
foreach ($foreignKeys as $fk)
{
$builder = $db->table('INFORMATION_SCHEMA.TABLE_CONSTRAINTS');
$builder->select('CONSTRAINT_NAME');
$builder->where('TABLE_SCHEMA', $database_name);
$builder->where('TABLE_NAME', $table);
$builder->where('CONSTRAINT_TYPE', 'FOREIGN KEY');
$builder->where('CONSTRAINT_NAME', $fk);
$query = $builder->get();
if($query->getNumRows() > 0)
{
$db->query("ALTER TABLE `$table` DROP FOREIGN KEY `$fk`");
}
}
$db->setPrefix($current_prefix);
}

View File

@@ -63,22 +63,26 @@ function transform_headers(array $headers, bool $readonly = false, bool $editabl
return json_encode($result);
}
define("SALES_HEADERS", [
['sale_id' => lang('Common.id')],
['sale_time' => lang('Sales.sale_time')],
['customer_name' => lang('Customers.customer')],
['amount_due' => lang('Sales.amount_due')],
['amount_tendered' => lang('Sales.amount_tendered')],
['change_due' => lang('Sales.change_due')],
['payment_type' => lang('Sales.payment_type')]
]);
function sales_headers(): array
{
return [
['sale_id' => lang('Common.id')],
['sale_time' => lang('Sales.sale_time')],
['customer_name' => lang('Customers.customer')],
['amount_due' => lang('Sales.amount_due')],
['amount_tendered' => lang('Sales.amount_tendered')],
['change_due' => lang('Sales.change_due')],
['payment_type' => lang('Sales.payment_type')]
];
}
/**
* Get the header for the sales tabular view
*/
function get_sales_manage_table_headers(): string
{
$headers = SALES_HEADERS;
$headers = sales_headers();
$config = config(OSPOS::class)->settings;
if($config['invoice_enable'])
@@ -189,20 +193,24 @@ function get_sales_manage_payments_summary(array $payments): string
return $table;
}
define('PERSON_HEADERS', [
['people.person_id' => lang('Common.id')],
['last_name' => lang('Common.last_name')],
['first_name' => lang('Common.first_name')],
['email' => lang('Common.email')],
['phone_number' => lang('Common.phone_number')]
]);
function person_headers(): array
{
return [
['people.person_id' => lang('Common.id')],
['last_name' => lang('Common.last_name')],
['first_name' => lang('Common.first_name')],
['email' => lang('Common.email')],
['phone_number' => lang('Common.phone_number')]
];
}
/**
* Get the header for the people tabular view
*/
function get_people_manage_table_headers(): string
{
$headers = PERSON_HEADERS;
$headers = person_headers();
$employee = model(Employee::class);
$session = session();
@@ -251,21 +259,25 @@ function get_person_data_row(object $person): array
];
}
define('CUSTOMER_HEADERS', [
['people.person_id' => lang('Common.id')],
['last_name' => lang('Common.last_name')],
['first_name' => lang('Common.first_name')],
['email' => lang('Common.email')],
['phone_number' => lang('Common.phone_number')],
['total' => lang('Common.total_spent'), 'sortable' => false]
]);
function customer_headers(): array
{
return [
['people.person_id' => lang('Common.id')],
['last_name' => lang('Common.last_name')],
['first_name' => lang('Common.first_name')],
['email' => lang('Common.email')],
['phone_number' => lang('Common.phone_number')],
['total' => lang('Common.total_spent'), 'sortable' => false]
];
}
/**
* Get the header for the customer tabular view
*/
function get_customer_manage_table_headers(): string
{
$headers = CUSTOMER_HEADERS;
$headers = customer_headers();
$employee = model(Employee::class);
$session = session();
@@ -315,23 +327,26 @@ function get_customer_data_row(object $person, object $stats): array
];
}
define('SUPPLIER_HEADERS', [
['people.person_id' => lang('Common.id')],
['company_name' => lang('Suppliers.company_name')],
['agency_name' => lang('Suppliers.agency_name')],
['category' => lang('Suppliers.category')],
['last_name' => lang('Common.last_name')],
['first_name' => lang('Common.first_name')],
['email' => lang('Common.email')],
['phone_number' => lang('Common.phone_number')]
]);
function supplier_headers(): array
{
return [
['people.person_id' => lang('Common.id')],
['company_name' => lang('Suppliers.company_name')],
['agency_name' => lang('Suppliers.agency_name')],
['category' => lang('Suppliers.category')],
['last_name' => lang('Common.last_name')],
['first_name' => lang('Common.first_name')],
['email' => lang('Common.email')],
['phone_number' => lang('Common.phone_number')]
];
}
/**
* Get the header for the suppliers tabular view
*/
function get_suppliers_manage_table_headers(): string
{
$headers = SUPPLIER_HEADERS;
$headers = supplier_headers();
$employee = model(Employee::class);
$session = session();
@@ -383,16 +398,19 @@ function get_supplier_data_row(object $supplier): array
];
}
define('ITEM_HEADERS', [
['items.item_id' => lang('Common.id')],
['item_number' => lang('Items.item_number')],
['name' => lang('Items.name')],
['category' => lang('Items.category')],
['company_name' => lang('Suppliers.company_name')],
['cost_price' => lang('Items.cost_price')],
['unit_price' => lang('Items.unit_price')],
['quantity' => lang('Items.quantity')]
]);
function item_headers(): array
{
return [
['items.item_id' => lang('Common.id')],
['item_number' => lang('Items.item_number')],
['name' => lang('Items.name')],
['category' => lang('Items.category')],
['company_name' => lang('Suppliers.company_name')],
['cost_price' => lang('Items.cost_price')],
['unit_price' => lang('Items.unit_price')],
['quantity' => lang('Items.quantity')]
];
}
/**
* Get the header for the items tabular view
@@ -403,7 +421,7 @@ function get_items_manage_table_headers(): string
$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
$headers = ITEM_HEADERS;
$headers = item_headers();
if($config['use_destination_based_tax'])
{
@@ -533,20 +551,23 @@ function get_item_data_row(object $item): array
return $columns + expand_attribute_values($definition_names, (array) $item) + $icons;
}
define('GIFTCARD_HEADERS', [
['giftcard_id' => lang('Common.id')],
['last_name' => lang('Common.last_name')],
['first_name' => lang('Common.first_name')],
['giftcard_number' => lang('Giftcards.giftcard_number')],
['value' => lang('Giftcards.card_value')]
]);
function giftcard_headers(): array
{
return [
['giftcard_id' => lang('Common.id')],
['last_name' => lang('Common.last_name')],
['first_name' => lang('Common.first_name')],
['giftcard_number' => lang('Giftcards.giftcard_number')],
['value' => lang('Giftcards.card_value')]
];
}
/**
* Get the header for the giftcard tabular view
*/
function get_giftcards_manage_table_headers(): string
{
return transform_headers(GIFTCARD_HEADERS);
return transform_headers(giftcard_headers());
}
/**
@@ -574,21 +595,24 @@ function get_giftcard_data_row(object $giftcard): array
];
}
define('ITEM_KIT_HEADERS', [
['item_kit_id' => lang('Item_kits.kit')],
['item_kit_number' => lang('Item_kits.item_kit_number')],
['name' => lang('Item_kits.name')],
['description' => lang('Item_kits.description')],
['total_cost_price' => lang('Items.cost_price'), 'sortable' => false],
['total_unit_price' => lang('Items.unit_price'), 'sortable' => false]
]);
function item_kit_headers(): array
{
return [
['item_kit_id' => lang('Item_kits.kit')],
['item_kit_number' => lang('Item_kits.item_kit_number')],
['name' => lang('Item_kits.name')],
['description' => lang('Item_kits.description')],
['total_cost_price' => lang('Items.cost_price'), 'sortable' => FALSE],
['total_unit_price' => lang('Items.unit_price'), 'sortable' => FALSE]
];
}
/**
* Get the header for the item kits tabular view
*/
function get_item_kits_manage_table_headers(): string
{
return transform_headers(ITEM_KIT_HEADERS);
return transform_headers(item_kit_headers());
}
/**
@@ -672,20 +696,23 @@ function expand_attribute_values(array $definition_names, array $row): array
return $attribute_values;
}
define('ATTRIBUTE_DEFINITION_HEADERS', [
['definition_id' => lang('Attributes.definition_id')],
['definition_name' => lang('Attributes.definition_name')],
['definition_type' => lang('Attributes.definition_type')],
['definition_flags' => lang('Attributes.definition_flags')],
['definition_group' => lang('Attributes.definition_group')],
]);
function attribute_definition_headers(): array
{
return [
['definition_id' => lang('Attributes.definition_id')],
['definition_name' => lang('Attributes.definition_name')],
['definition_type' => lang('Attributes.definition_type')],
['definition_flags' => lang('Attributes.definition_flags')],
['definition_group' => lang('Attributes.definition_group')],
];
}
/**
* @return string
*/
function get_attribute_definition_manage_table_headers(): string
{
return transform_headers(ATTRIBUTE_DEFINITION_HEADERS);
return transform_headers(attribute_definition_headers());
}
/**
@@ -729,18 +756,21 @@ function get_attribute_definition_data_row(object $attribute_row): array
];
}
define('EXPENSE_CATEGORY_HEADERS', [
['expense_category_id' => lang('Expenses_categories.category_id')],
['category_name' => lang('Expenses_categories.name')],
['category_description' => lang('Expenses_categories.description')]
]);
function expense_category_headers(): array
{
return [
['expense_category_id' => lang('Expenses_categories.category_id')],
['category_name' => lang('Expenses_categories.name')],
['category_description' => lang('Expenses_categories.description')]
];
}
/**
* Get the header for the expense categories tabular view
*/
function get_expense_category_manage_table_headers(): string
{
return transform_headers(EXPENSE_CATEGORY_HEADERS);
return transform_headers(expense_category_headers());
}
/**
@@ -766,25 +796,28 @@ function get_expense_category_data_row(object $expense_category): array
];
}
define('EXPENSE_HEADERS', [
['expense_id' => lang('Expenses.expense_id')],
['date' => lang('Expenses.date')],
['supplier_name' => lang('Expenses.supplier_name')],
['supplier_tax_code' => lang('Expenses.supplier_tax_code')],
['amount' => lang('Expenses.amount')],
['tax_amount' => lang('Expenses.tax_amount')],
['payment_type' => lang('Expenses.payment')],
['category_name' => lang('Expenses_categories.name')],
['description' => lang('Expenses.description')],
['created_by' => lang('Expenses.employee')]
]);
function expense_headers(): array
{
return [
['expense_id' => lang('Expenses.expense_id')],
['date' => lang('Expenses.date')],
['supplier_name' => lang('Expenses.supplier_name')],
['supplier_tax_code' => lang('Expenses.supplier_tax_code')],
['amount' => lang('Expenses.amount')],
['tax_amount' => lang('Expenses.tax_amount')],
['payment_type' => lang('Expenses.payment')],
['category_name' => lang('Expenses_categories.name')],
['description' => lang('Expenses.description')],
['created_by' => lang('Expenses.employee')]
];
}
/**
* Get the header for the expenses tabular view
*/
function get_expenses_manage_table_headers(): string
{
return transform_headers(EXPENSE_HEADERS);
return transform_headers(expense_headers());
}
/**
@@ -858,7 +891,9 @@ function get_expenses_manage_payments_summary(array $payments, ResultInterface $
return $table;
}
define('CASHUPS_HEADERS', [
function cashup_headers(): array
{
return [
['cashup_id' => lang('Cashups.id')],
['open_date' => lang('Cashups.opened_date')],
['open_employee_id' => lang('Cashups.open_employee')],
@@ -872,8 +907,8 @@ define('CASHUPS_HEADERS', [
['closed_amount_card' => lang('Cashups.closed_amount_card')],
['closed_amount_check' => lang('Cashups.closed_amount_check')],
['closed_amount_total' => lang('Cashups.closed_amount_total')]
]
);
];
}
/**
@@ -881,7 +916,7 @@ define('CASHUPS_HEADERS', [
*/
function get_cashups_manage_table_headers(): string
{
$headers = CASHUPS_HEADERS;
$headers = cashup_headers();
return transform_headers($headers);
}

View File

@@ -1,88 +1,89 @@
<?php
return [
"address_1" => "Dirección 1",
"address_2" => "Dirección 2",
"admin" => "",
"city" => "Ciudad",
"clerk" => "",
"close" => "Cerrar",
"color" => "",
"comments" => "Comentarios",
"common" => "común",
"confirm_search" => "Ha seleccionado una o más filas, éstas no estarán seleccionadas después de su búsqueda. ¿Está seguro(a) de enviar su búsqueda?",
"copyrights" => "© 2010 - {0}",
"correct_errors" => "Por favor verifique que no hay errores antes de guardar",
"country" => "País",
"dashboard" => "",
"date" => "Fecha",
"delete" => "Eliminar",
"det" => "detalles",
"download_import_template" => "Descargar Plantilla para Importar desde CSV (CSV)",
"edit" => "editar",
"email" => "Correo-e",
"email_invalid_format" => "La dirección de correo-e no tiene el formato correcto.",
"export_csv" => "Exportar a CSV",
"export_csv_no" => "No",
"export_csv_yes" => "Si",
"fields_required_message" => "Los campos en rojo son requeridos",
"fields_required_message_unique" => "",
"first_name" => "Nombre",
"first_name_required" => "El nombre es un campo requerido.",
"first_page" => "Primero",
"gender" => "Género",
"gender_female" => "M",
"gender_male" => "H",
"gender_undefined" => "",
"icon" => "Ícono",
"id" => "Id",
"import" => "Importar",
"import_change_file" => "Cambiar",
"import_csv" => "Importar de CSV",
"import_full_path" => "Se requiere la ruta completa del archivo de CSV",
"import_remove_file" => "Eliminar",
"import_select_file" => "Seleccionar archivo",
"inv" => "Inv",
"last_name" => "Apellido(s)",
"last_name_required" => "El/Los Apellido(s) es un campo requerido.",
"last_page" => "Último",
"learn_about_project" => "para conocer la última información sobre el proyecto.",
"list_of" => "Lista de",
"logo" => "Logo",
"logo_mark" => "Marca",
"logout" => "Cerrar Sesión",
"manager" => "",
"migration_needed" => "La migración de la base de datos a {0} comenzará luego de acceder.",
"new" => "Nuevo(a)",
"no" => "",
"no_persons_to_display" => "No existen personas para mostrar.",
"none_selected_text" => "[Seleccionar]",
"or" => "O",
"people" => "",
"phone_number" => "Número Tel",
"phone_number_required" => "",
"please_visit_my" => "Por favor visite",
"position" => "",
"powered_by" => "Ejecutando sobre",
"price" => "Precio",
"print" => "Imprimir",
"remove" => "Elliminar",
"required" => "Requerido",
"restore" => "Restaurar",
"return_policy" => "Política de Devoluciones",
"search" => "Buscar",
"search_options" => "Opciones de búsqueda",
"searched_for" => "Buscado por",
"software_short" => "OSPOS",
"software_title" => "Punto de Venta de Código Abierto (Open Source Point of Sale)",
"state" => "Estado",
"submit" => "Enviar",
"total_spent" => "Total Gastado",
"unknown" => "Desconocido",
"view_recent_sales" => "Ver Ventas Recientes",
"website" => "sitio web",
"welcome" => "Bienvenido(a)",
"welcome_message" => "Bienvenido(a) a OSPOS, haga clic en un módulo para comenzar.",
"yes" => "",
"you_are_using_ospos" => "Está utilizando la versión de Código Abierto de Punto de Venta",
"zip" => "CP",
'address_1' => "Dirección 1",
'address_2' => "Dirección 2",
'admin' => "",
'city' => "Ciudad",
'clerk' => "",
'close' => "Cerrar",
'color' => "",
'comments' => "Comentarios",
'common' => "común",
'confirm_search' => "Ha seleccionado una o más filas, éstas no estarán seleccionadas después de su búsqueda. ¿Está seguro(a) de enviar su búsqueda?",
'copyrights' => "© 2010 - {0}",
'correct_errors' => "Por favor verifique que no hay errores antes de guardar",
'country' => "País",
'dashboard' => "",
'date' => "Fecha",
'delete' => "Eliminar",
'det' => "detalles",
'download_import_template' => "Descargar Plantilla para Importar desde CSV (CSV)",
'edit' => "editar",
'email' => "Correo-e",
'email_invalid_format' => "La dirección de correo-e no tiene el formato correcto.",
'export_csv' => "Exportar a CSV",
'export_csv_no' => "No",
'export_csv_yes' => "Si",
'fields_required_message' => "Los campos en rojo son requeridos",
'fields_required_message_unique' => "",
'first_name' => "Nombre",
'first_name_required' => "El nombre es un campo requerido.",
'first_page' => "Primero",
'gender' => "Género",
'gender_female' => "M",
'gender_male' => "H",
'gender_undefined' => "",
'icon' => "Ícono",
'id' => "Id",
'import' => "Importar",
'import_change_file' => "Cambiar",
'import_csv' => "Importar de CSV",
'import_full_path' => "Se requiere la ruta completa del archivo de CSV",
'import_remove_file' => "Eliminar",
'import_select_file' => "Seleccionar archivo",
'inv' => "Inv",
'last_name' => "Apellido(s)",
'last_name_required' => "El/Los Apellido(s) es un campo requerido.",
'last_page' => "Último",
'learn_about_project' => "para conocer la última información sobre el proyecto.",
'list_of' => "Lista de",
'logo' => "Logo",
'logo_mark' => "Marca",
'logout' => "Cerrar Sesión",
'manager' => "",
'migration_needed' => "La migración de la base de datos a {0} comenzará luego de acceder.",
'new' => "Nuevo(a)",
'no' => "",
'no_persons_to_display' => "No existen personas para mostrar.",
'none_selected_text' => "[Seleccionar]",
'or' => "O",
'people' => "",
'phone_number' => "Número Tel",
'phone_number_required' => "",
'please_visit_my' => "Por favor visite",
'position' => "",
'powered_by' => "Ejecutando sobre",
'price' => "Precio",
'print' => "Imprimir",
'remove' => "Elliminar",
'required' => "Requerido",
'restore' => "Restaurar",
'return_policy' => "Política de Devoluciones",
'search' => "Buscar",
'search_options' => "Opciones de búsqueda",
'searched_for' => "Buscado por",
'software_short' => "OSPOS",
'software_title' => "Punto de Venta de Código Abierto (Open Source Point of Sale)",
'state' => "Estado",
'submit' => "Enviar",
'total_spent' => "Total Gastado",
'unknown' => "Desconocido",
'view_recent_sales' => "Ver Ventas Recientes",
'website' => "sitio web",
'welcome' => "Bienvenido(a)",
'welcome_message' => "Bienvenido(a) a OSPOS, haga clic en un módulo para comenzar.",
'yes' => "Si",
'you_are_using_ospos' => "Está utilizando la versión de Código Abierto de Punto de Venta",
'zip' => "CP",
];

View File

@@ -1,330 +1,331 @@
<?php
return [
"address" => "Dirección de la Empresa",
"address_required" => "La Dirección de la Empresa es un campo requerido.",
"all_set" => "Todos los permisos han sido establecidos correctamente!",
"allow_duplicate_barcodes" => "Permitir Códigos de Barra Duplicados",
"apostrophe" => "apostrofé",
"backup_button" => "Respaldar",
"backup_database" => "Respaldar Base de Datos",
"barcode" => "Código de Barras",
"barcode_company" => "Nombre de la Empresa",
"barcode_configuration" => "Configuración del Código de Barras",
"barcode_content" => "Contenido del Código de Barras",
"barcode_first_row" => "Fila 1",
"barcode_font" => "Tipo de Letra",
"barcode_formats" => "Formatos de Entrada",
"barcode_generate_if_empty" => "Generar si está vacío.",
"barcode_height" => "Alto (px)",
"barcode_id" => "Id Artículo/Nombre",
"barcode_info" => "Información de Configuración para Códigos de Barras",
"barcode_layout" => "Formato Código de Barras",
"barcode_name" => "Nombre",
"barcode_number" => "Código de Barras",
"barcode_number_in_row" => "Número en renglón",
"barcode_page_cellspacing" => "Mostrar espaciado de celda de la página.",
"barcode_page_width" => "Ancho de página",
"barcode_price" => "Precio",
"barcode_second_row" => "Renglón 2",
"barcode_third_row" => "Renglón 3",
"barcode_tooltip" => "Advertencia: Esta función puede hacer que se importen o creen elementos duplicados. No lo use si no desea códigos de barras duplicados.",
"barcode_type" => "Tipo de código de barras",
"barcode_width" => "Ancho (px)",
"bottom" => "Final",
"cash_button" => "",
"cash_button_1" => "",
"cash_button_2" => "",
"cash_button_3" => "",
"cash_button_4" => "",
"cash_button_5" => "",
"cash_button_6" => "",
"cash_decimals" => "decimales en efectivo",
"cash_decimals_tooltip" => "Si los decimales son iguales entonces no tendrá redondeo.",
"cash_rounding" => "Redondeo de efectivo",
"category_dropdown" => "Mostrar categoría como un menú desplegable",
"center" => "Centro",
"change_apperance_tooltip" => "",
"comma" => "coma",
"company" => "Nombre de la Compañía",
"company_avatar" => "",
"company_change_image" => "Cambiar Imagen",
"company_logo" => "Logo de la Compañía",
"company_remove_image" => "Eliminar Imagen",
"company_required" => "Nombre de la compañia es un campo requerido",
"company_select_image" => "Seleccionar Imagen",
"company_website_url" => "Website de la compañía no es una URL valida (http://...).",
"country_codes" => "Códigos de Países",
"country_codes_tooltip" => "Lista separada por comas de códigos de países para la búsqueda de direcciones nominatim.",
"currency_code" => "código de moneda",
"currency_decimals" => "Decimales de moneda",
"currency_symbol" => "Símbolo de moneda",
"current_employee_only" => "",
"customer_reward" => "Recompensa",
"customer_reward_duplicate" => "Recompensa debe ser única.",
"customer_reward_enable" => "Habilita recompensas para los clientes",
"customer_reward_invalid_chars" => "Recompensa no debe tener '_'",
"customer_reward_required" => "Recompensa es un campo requerido",
"customer_sales_tax_support" => "",
"date_or_time_format" => "Filtro Fecha y Hora",
"datetimeformat" => "Formato de Fecha y Hora",
"decimal_point" => "Punto Decimal",
"default_barcode_font_size_number" => "El tamaño de fuente del código de barras predeterminado debe ser un número.",
"default_barcode_font_size_required" => "El tamaño de fuente predeterminado del código de barras es un campo obligatorio.",
"default_barcode_height_number" => "La altura predeterminada del código de barras debe ser un número.",
"default_barcode_height_required" => "La altura predeterminada del código de barras es un campo obligatorio.",
"default_barcode_num_in_row_number" => "El número de código de barras predeterminado en la fila debe ser un número.",
"default_barcode_num_in_row_required" => "El número de código de barras predeterminado en la fila es un campo obligatorio.",
"default_barcode_page_cellspacing_number" => "El espacio entre celdas predeterminado de la página de código de barras debe ser un número.",
"default_barcode_page_cellspacing_required" => "El espaciado entre celdas de página de código de barras predeterminado es un campo obligatorio.",
"default_barcode_page_width_number" => "La anchura del código de barras debe ser un número.",
"default_barcode_page_width_required" => "El ancho predeterminado del código de barras es un campo obligatorio.",
"default_barcode_width_number" => "El Ancho del código de barra debe ser un número.",
"default_barcode_width_required" => "El ancho predeterminado del código de barras es un campo obligatorio.",
"default_item_columns" => "Número de artículos por columna predeterminado",
"default_origin_tax_code" => "Código de Impuesto predeterminado",
"default_receivings_discount" => "Descuentos de recibos predeterminados",
"default_receivings_discount_number" => "Descuentos de recibos deben ser números.",
"default_receivings_discount_required" => "Descuentos de recibos es un campo requerido.",
"default_sales_discount" => "% Descuentos en ventas",
"default_sales_discount_number" => "El descuento predeterminado debe ser un número.",
"default_sales_discount_required" => "Descuento de Ventas por Defecto es un campo requerido.",
"default_tax_category" => "Categoría de Impuesto Predeterminada",
"default_tax_code" => "Código de Impuesto Predeterminado",
"default_tax_jurisdiction" => "Jurisdicción de Impuesto Predeterminada",
"default_tax_name_number" => "Nombre de Impuesto Predeterminado debe ser una cadena de texto.",
"default_tax_name_required" => "Nombre de Impuesto Predeterminado es un campo requerido.",
"default_tax_rate" => "Tasa impositiva predeterminada %",
"default_tax_rate_1" => "Tasa de Impuestos 1",
"default_tax_rate_2" => "Tasa de Impuestos 2",
"default_tax_rate_3" => "",
"default_tax_rate_number" => "La tasa impositiva predeterminada debe ser un número.",
"default_tax_rate_required" => "Tasa de impuestos predeterminada es un campo obligatorio.",
"derive_sale_quantity" => "Permitir cantidad de venta derivada",
"derive_sale_quantity_tooltip" => "Si se marca, se proporcionará un nuevo tipo de artículo para los artículos pedidos por cantidad extendida",
"dinner_table" => "Mesa",
"dinner_table_duplicate" => "La tabla debe ser única.",
"dinner_table_enable" => "Habilitar Mesa de Alimentos",
"dinner_table_invalid_chars" => "El nombre de la tabla no puede llevar '_'.",
"dinner_table_required" => "Tabla es requerida.",
"dot" => "punto(.)",
"email" => "Email",
"email_configuration" => "Configuración Email",
"email_mailpath" => "Ruta a Sendmail",
"email_protocol" => "Protocolo",
"email_receipt_check_behaviour" => "Email Receipt checkbox",
"email_receipt_check_behaviour_always" => "Siempre selecionado",
"email_receipt_check_behaviour_last" => "Recuerda la última selección",
"email_receipt_check_behaviour_never" => "Núnca seleccionado",
"email_smtp_crypto" => "Encriptación SMTP",
"email_smtp_host" => "Servidor SMTP",
"email_smtp_pass" => "Contraseña del Servidor SMTP",
"email_smtp_port" => "Puerto del Servidor SMTP",
"email_smtp_timeout" => "Expiró Tiempo de Espera del Servidor SMTP",
"email_smtp_user" => "Nombre de Usuario del Servidor SMTP",
"enable_avatar" => "",
"enable_avatar_tooltip" => "",
"enable_dropdown_tooltip" => "",
"enable_new_look" => "",
"enable_right_bar" => "",
"enable_right_bar_tooltip" => "",
"enforce_privacy" => "Enforce privacy",
"enforce_privacy_tooltip" => "Protect Customers privacy enforcing data scrambling in case of their data being deleted",
"fax" => "Fax",
"file_perm" => "Hay problemas con los permisos de archivo, por favor corríjalos y recargue esta página.",
"financial_year" => "Inicio del Año Fiscal",
"financial_year_apr" => "1.º de Abril",
"financial_year_aug" => "1.º de Agosto",
"financial_year_dec" => "1.º de Diciembre",
"financial_year_feb" => "1.º de Febrero",
"financial_year_jan" => "1.º de Enero",
"financial_year_jul" => "1.º de Julio",
"financial_year_jun" => "1.º de Junio",
"financial_year_mar" => "1.º de Marzo",
"financial_year_may" => "1.º de Mayo",
"financial_year_nov" => "1.º de Noviembre",
"financial_year_oct" => "1.º de Octubre",
"financial_year_sep" => "1º. de Septiembre",
"floating_labels" => "Etiquetas Flotantes",
"gcaptcha_enable" => "reCAPTCHA de Página de Ingreso",
"gcaptcha_secret_key" => "reCAPTCHA Secret Key",
"gcaptcha_secret_key_required" => "reCAPTCHA Llave Secreta es un campo requerido",
"gcaptcha_site_key" => "reCAPTCHA Site Key",
"gcaptcha_site_key_required" => "reCAPTCHA Site Key is a required field",
"gcaptcha_tooltip" => "Protect the Login page with Google reCAPTCHA, click the icon for an API key pair.",
"general" => "General",
"general_configuration" => "General Configuration",
"giftcard_number" => "Gift Card Number",
"giftcard_random" => "Generate Random",
"giftcard_series" => "Generate in Series",
"image_allowed_file_types" => "Tipo de archivos permitidos",
"image_max_height_tooltip" => "Altura máxima permitida de imágenes en píxeles (px).",
"image_max_size_tooltip" => "Tamaño máximo permitido de archivo de imágenes en kilobytes (kb).",
"image_max_width_tooltip" => "Ancho máximo permitido para imágenes en píxeles (px).",
"image_restrictions" => "Restricciones de carga de imágenes",
"include_hsn" => "Include Support for HSN Codes",
"info" => "Information",
"info_configuration" => "Store Information",
"input_groups" => "Grupos de Entrada",
"integrations" => "Integraciones",
"integrations_configuration" => "Integraciones Externas",
"invoice" => "Invoice",
"invoice_configuration" => "Invoice Print Settings",
"invoice_default_comments" => "Default Invoice Comments",
"invoice_email_message" => "Invoice Email Template",
"invoice_enable" => "Enable Invoicing",
"invoice_printer" => "Invoice Printer",
"invoice_type" => "Invoice Type",
"is_readable" => "es legible, pero los permisos están configurados incorrectamente. Configúrelo en 640 o 660 y actualice.",
"is_writable" => "se puede escribir, pero los permisos están configurados incorrectamente. Configúrelo en 750 y actualice.",
"item_markup" => "",
"jsprintsetup_required" => "Warning: This functionality will only work if you have the FireFox jsPrintSetup addon installed. Save anyway?",
"language" => "Language",
"last_used_invoice_number" => "Last used Invoice Number",
"last_used_quote_number" => "Last used Quote Number",
"last_used_work_order_number" => "Last used W/O Number",
"left" => "Left",
"license" => "License",
"license_configuration" => "License Statement",
"line_sequence" => "Line Sequence",
"lines_per_page" => "Lines per Page",
"lines_per_page_number" => "Lines per Page must be a number.",
"lines_per_page_required" => "Lines per Page is a required field.",
"locale" => "Localization",
"locale_configuration" => "Localization Configuration",
"locale_info" => "Localization Configuration Information",
"location" => "Stock",
"location_configuration" => "Stock Locations",
"location_info" => "Location Configuration Information",
"login_form" => "Estilo de formulario de inicio de sesión",
"logout" => "Do you want to make a backup before logging out? Click [OK] to backup or [Cancel] to logout.",
"mailchimp" => "Mailchimp",
"mailchimp_api_key" => "Mailchimp Clave API",
"mailchimp_configuration" => "Configuración de MailChimp",
"mailchimp_key_successfully" => "API Key is valid.",
"mailchimp_key_unsuccessfully" => "API Key is invalid.",
"mailchimp_lists" => "Lista (s) de MailChimp",
"mailchimp_tooltip" => "Click the icon for an API Key.",
"message" => "Message",
"message_configuration" => "Message Configuration",
"msg_msg" => "Saved Text Message",
"msg_msg_placeholder" => "If you wish to use a SMS template save your message here, otherwise leave the box blank.",
"msg_pwd" => "SMS-API Password",
"msg_pwd_required" => "SMS-API Password is a required field",
"msg_src" => "SMS-API Sender ID",
"msg_src_required" => "SMS-API Sender ID is a required field",
"msg_uid" => "SMS-API Username",
"msg_uid_required" => "SMS-API Username is a required field",
"multi_pack_enabled" => "Multiple Packages per Item",
"no_risk" => "No security/vulnerability risks.",
"none" => "none",
"notify_alignment" => "Notification Popup Position",
"number_format" => "Number Format",
"number_locale" => "Localization",
"number_locale_invalid" => "The entered locale is invalid. Check the link in the tooltip to find a valid locale.",
"number_locale_required" => "Number Locale is a required field.",
"number_locale_tooltip" => "Find a suitable locale through this link.",
"os_timezone" => "Zona horaria OSPOS:",
"ospos_info" => "Información de instalación OSPOS",
"payment_options_order" => "Payment Options Order",
"perm_risk" => "Los permisos incorrectos ponen en riesgo este software.",
"phone" => "Company Phone",
"phone_required" => "Company Phone is a required field.",
"print_bottom_margin" => "Margin Bottom",
"print_bottom_margin_number" => "Margin Bottom must be a number.",
"print_bottom_margin_required" => "Margin Bottom is a required field.",
"print_delay_autoreturn" => "Autoreturn to Sale delay",
"print_delay_autoreturn_number" => "Autoreturn to Sale delay is a required field.",
"print_delay_autoreturn_required" => "Autoreturn to Sale delay must be a number.",
"print_footer" => "Print Browser Footer",
"print_header" => "Print Browser Header",
"print_left_margin" => "Margin Left",
"print_left_margin_number" => "Margin Left must be a number.",
"print_left_margin_required" => "Margin Left is a required field.",
"print_receipt_check_behaviour" => "Print Receipt checkbox",
"print_receipt_check_behaviour_always" => "Always checked",
"print_receipt_check_behaviour_last" => "Remember last selection",
"print_receipt_check_behaviour_never" => "Always unchecked",
"print_right_margin" => "Margin Right",
"print_right_margin_number" => "Margin Right must be a number.",
"print_right_margin_required" => "Margin Right is a required field.",
"print_silently" => "Show Print Dialog",
"print_top_margin" => "Margin Top",
"print_top_margin_number" => "Margin Top must be a number.",
"print_top_margin_required" => "Margin Top is a required field.",
"quantity_decimals" => "Quantity Decimals",
"quick_cash_enable" => "",
"quote_default_comments" => "Default Quote Comments",
"receipt" => "Receipt",
"receipt_category" => "",
"receipt_configuration" => "Receipt Print Settings",
"receipt_default" => "Default",
"receipt_font_size" => "Font Size",
"receipt_font_size_number" => "Font Size must be a number.",
"receipt_font_size_required" => "Font Size is a required field.",
"receipt_info" => "Receipt Configuration Information",
"receipt_printer" => "Ticket Printer",
"receipt_short" => "Short",
"receipt_show_company_name" => "Show Company Name",
"receipt_show_description" => "Show Description",
"receipt_show_serialnumber" => "Show Serial Number",
"receipt_show_tax_ind" => "Mostrar indicador de impuestos",
"receipt_show_taxes" => "Show Taxes",
"receipt_show_total_discount" => "Show Total Discount",
"receipt_template" => "Receipt Template",
"receiving_calculate_average_price" => "Calcular promedio, Precio (Recepción)",
"recv_invoice_format" => "Receivings Invoice Format",
"register_mode_default" => "Default Register Mode",
"report_an_issue" => "Reportar un problema",
"return_policy_required" => "Return policy is a required field.",
"reward" => "Reward",
"reward_configuration" => "Reward Configuration",
"right" => "Right",
"sales_invoice_format" => "Sales Invoice Format",
"sales_quote_format" => "Sales Quote Format",
"saved_successfully" => "Configuration save successful.",
"saved_unsuccessfully" => "Configuration save failed.",
"security_issue" => "Security Vulnerability Warning",
"server_notice" => "Please use the below info for issue reporting.",
"service_charge" => "",
"show_due_enable" => "",
"show_office_group" => "Show office icon",
"statistics" => "Send Statistics",
"statistics_tooltip" => "Send statistics for development and feature improvement purposes.",
"stock_location" => "Stock location",
"stock_location_duplicate" => "Stock Location must be unique.",
"stock_location_invalid_chars" => "Stock Location can not contain '_'.",
"stock_location_required" => "Stock location is a required field.",
"suggestions_fifth_column" => "",
"suggestions_first_column" => "Column 1",
"suggestions_fourth_column" => "",
"suggestions_layout" => "Search Suggestions Layout",
"suggestions_second_column" => "Column 2",
"suggestions_third_column" => "Column 3",
"system_conf" => "Setup & Conf",
"system_info" => "System Info",
"table" => "Table",
"table_configuration" => "Table Configuration",
"takings_printer" => "Receipt Printer",
"tax" => "Tax",
"tax_category" => "Tax Category",
"tax_category_duplicate" => "The entered tax category already exists.",
"tax_category_invalid_chars" => "The entered tax category is invalid.",
"tax_category_required" => "The tax category is required.",
"tax_category_used" => "Tax category cannot be deleted because it is being used.",
"tax_configuration" => "Tax Configuration",
"tax_decimals" => "Tax Decimals",
"tax_id" => "Tax Id",
"tax_included" => "Tax Included",
"theme" => "Theme",
"theme_preview" => "Vista Previa del Tema:",
"thousands_separator" => "Thousands Separator",
"timezone" => "Timezone",
"timezone_error" => "La zona horaria de OSPOS es diferente a su zona horaria local.",
"top" => "Top",
"use_destination_based_tax" => "Use Destination Based Tax",
"user_timezone" => "Zona horaria local:",
"website" => "Website",
"wholesale_markup" => "",
"work_order_enable" => "Work Order Support",
"work_order_format" => "Work Order Format",
'address' => "Dirección de la Empresa",
'address_required' => "La Dirección de la Empresa es un campo requerido.",
'all_set' => "Todos los permisos han sido establecidos correctamente!",
'allow_duplicate_barcodes' => "Permitir Códigos de Barra Duplicados",
'apostrophe' => "apostrofé",
'backup_button' => "Respaldar",
'backup_database' => "Respaldar Base de Datos",
'barcode' => "Código de Barras",
'barcode_company' => "Nombre de la Empresa",
'barcode_configuration' => "Configuración del Código de Barras",
'barcode_content' => "Contenido del Código de Barras",
'barcode_first_row' => "Fila 1",
'barcode_font' => "Tipo de Letra",
'barcode_formats' => "Formatos de Entrada",
'barcode_generate_if_empty' => "Generar si está vacío.",
'barcode_height' => "Alto (px)",
'barcode_id' => "Id Artículo/Nombre",
'barcode_info' => "Información de Configuración para Códigos de Barras",
'barcode_layout' => "Formato Código de Barras",
'barcode_name' => "Nombre",
'barcode_number' => "Código de Barras",
'barcode_number_in_row' => "Número en renglón",
'barcode_page_cellspacing' => "Mostrar espaciado de celda de la página.",
'barcode_page_width' => "Ancho de página",
'barcode_price' => "Precio",
'barcode_second_row' => "Renglón 2",
'barcode_third_row' => "Renglón 3",
'barcode_tooltip' => "Advertencia: Esta función puede hacer que se importen o creen elementos duplicados. No lo use si no desea códigos de barras duplicados.",
'barcode_type' => "Tipo de código de barras",
'barcode_width' => "Ancho (px)",
'bottom' => "Final",
'cash_button' => "",
'cash_button_1' => "",
'cash_button_2' => "",
'cash_button_3' => "",
'cash_button_4' => "",
'cash_button_5' => "",
'cash_button_6' => "",
'cash_decimals' => "decimales en efectivo",
'cash_decimals_tooltip' => "Si los decimales son iguales entonces no tendrá redondeo.",
'cash_rounding' => "Redondeo de efectivo",
'category_dropdown' => "Mostrar categoría como un menú desplegable",
'center' => "Centro",
'change_apperance_tooltip' => "",
'comma' => "coma",
'company' => "Nombre de la Compañía",
'company_avatar' => "",
'company_change_image' => "Cambiar Imagen",
'company_logo' => "Logo de la Compañía",
'company_remove_image' => "Eliminar Imagen",
'company_required' => "Nombre de la compañia es un campo requerido",
'company_select_image' => "Seleccionar Imagen",
'company_website_url' => "Website de la compañía no es una URL valida (http://...).",
'country_codes' => "Códigos de Países",
'country_codes_tooltip' => "Lista separada por comas de códigos de países para la búsqueda de direcciones nominatim.",
'currency_code' => "código de moneda",
'currency_decimals' => "Decimales de moneda",
'currency_symbol' => "Símbolo de moneda",
'current_employee_only' => "",
'customer_reward' => "Recompensa",
'customer_reward_duplicate' => "Recompensa debe ser única.",
'customer_reward_enable' => "Habilita recompensas para los clientes",
'customer_reward_invalid_chars' => "Recompensa no debe tener '_'",
'customer_reward_required' => "Recompensa es un campo requerido",
'customer_sales_tax_support' => "",
'date_or_time_format' => "Filtro Fecha y Hora",
'datetimeformat' => "Formato de Fecha y Hora",
'decimal_point' => "Punto Decimal",
'default_barcode_font_size_number' => "El tamaño de fuente del código de barras predeterminado debe ser un número.",
'default_barcode_font_size_required' => "El tamaño de fuente predeterminado del código de barras es un campo obligatorio.",
'default_barcode_height_number' => "La altura predeterminada del código de barras debe ser un número.",
'default_barcode_height_required' => "La altura predeterminada del código de barras es un campo obligatorio.",
'default_barcode_num_in_row_number' => "El número de código de barras predeterminado en la fila debe ser un número.",
'default_barcode_num_in_row_required' => "El número de código de barras predeterminado en la fila es un campo obligatorio.",
'default_barcode_page_cellspacing_number' => "El espacio entre celdas predeterminado de la página de código de barras debe ser un número.",
'default_barcode_page_cellspacing_required' => "El espaciado entre celdas de página de código de barras predeterminado es un campo obligatorio.",
'default_barcode_page_width_number' => "La anchura del código de barras debe ser un número.",
'default_barcode_page_width_required' => "El ancho predeterminado del código de barras es un campo obligatorio.",
'default_barcode_width_number' => "El Ancho del código de barra debe ser un número.",
'default_barcode_width_required' => "El ancho predeterminado del código de barras es un campo obligatorio.",
'default_item_columns' => "Número de artículos por columna predeterminado",
'default_origin_tax_code' => "Código de Impuesto predeterminado",
'default_receivings_discount' => "Descuentos de recibos predeterminados",
'default_receivings_discount_number' => "Descuentos de recibos deben ser números.",
'default_receivings_discount_required' => "Descuentos de recibos es un campo requerido.",
'default_sales_discount' => "% Descuentos en ventas",
'default_sales_discount_number' => "El descuento predeterminado debe ser un número.",
'default_sales_discount_required' => "Descuento de Ventas por Defecto es un campo requerido.",
'default_tax_category' => "Categoría de Impuesto Predeterminada",
'default_tax_code' => "Código de Impuesto Predeterminado",
'default_tax_jurisdiction' => "Jurisdicción de Impuesto Predeterminada",
'default_tax_name_number' => "Nombre de Impuesto Predeterminado debe ser una cadena de texto.",
'default_tax_name_required' => "Nombre de Impuesto Predeterminado es un campo requerido.",
'default_tax_rate' => "Tasa impositiva predeterminada %",
'default_tax_rate_1' => "Tasa de Impuestos 1",
'default_tax_rate_2' => "Tasa de Impuestos 2",
'default_tax_rate_3' => "",
'default_tax_rate_number' => "La tasa impositiva predeterminada debe ser un número.",
'default_tax_rate_required' => "Tasa de impuestos predeterminada es un campo obligatorio.",
'derive_sale_quantity' => "Permitir cantidad de venta derivada",
'derive_sale_quantity_tooltip' => "Si se marca, se proporcionará un nuevo tipo de artículo para los artículos pedidos por cantidad extendida",
'dinner_table' => "Mesa",
'dinner_table_duplicate' => "La tabla debe ser única.",
'dinner_table_enable' => "Habilitar Mesa de Alimentos",
'dinner_table_invalid_chars' => "El nombre de la tabla no puede llevar '_'.",
'dinner_table_required' => "Tabla es requerida.",
'dot' => "punto(.)",
'email' => "Email",
'email_configuration' => "Configuración Email",
'email_mailpath' => "Ruta a Sendmail",
'email_protocol' => "Protocolo",
'email_receipt_check_behaviour' => "Email Receipt checkbox",
'email_receipt_check_behaviour_always' => "Siempre selecionado",
'email_receipt_check_behaviour_last' => "Recuerda la última selección",
'email_receipt_check_behaviour_never' => "Núnca seleccionado",
'email_smtp_crypto' => "Encriptación SMTP",
'email_smtp_host' => "Servidor SMTP",
'email_smtp_pass' => "Contraseña del Servidor SMTP",
'email_smtp_port' => "Puerto del Servidor SMTP",
'email_smtp_timeout' => "Expiró Tiempo de Espera del Servidor SMTP",
'email_smtp_user' => "Nombre de Usuario del Servidor SMTP",
'enable_avatar' => "",
'enable_avatar_tooltip' => "",
'enable_dropdown_tooltip' => "",
'enable_new_look' => "",
'enable_right_bar' => "",
'enable_right_bar_tooltip' => "",
'enforce_privacy' => "Enforce privacy",
'enforce_privacy_tooltip' => "Protect Customers privacy enforcing data scrambling in case of their data being deleted",
'fax' => "Fax",
'file_perm' => "Hay problemas con los permisos de archivo, por favor corríjalos y recargue esta página.",
'financial_year' => "Inicio del Año Fiscal",
'financial_year_apr' => "1.º de Abril",
'financial_year_aug' => "1.º de Agosto",
'financial_year_dec' => "1.º de Diciembre",
'financial_year_feb' => "1.º de Febrero",
'financial_year_jan' => "1.º de Enero",
'financial_year_jul' => "1.º de Julio",
'financial_year_jun' => "1.º de Junio",
'financial_year_mar' => "1.º de Marzo",
'financial_year_may' => "1.º de Mayo",
'financial_year_nov' => "1.º de Noviembre",
'financial_year_oct' => "1.º de Octubre",
'financial_year_sep' => "1º. de Septiembre",
'floating_labels' => "Etiquetas Flotantes",
'gcaptcha_enable' => "reCAPTCHA de Página de Ingreso",
'gcaptcha_secret_key' => "reCAPTCHA Secret Key",
'gcaptcha_secret_key_required' => "reCAPTCHA Llave Secreta es un campo requerido",
'gcaptcha_site_key' => "reCAPTCHA Site Key",
'gcaptcha_site_key_required' => "reCAPTCHA Site Key is a required field",
'gcaptcha_tooltip' => "Protect the Login page with Google reCAPTCHA, click the icon for an API key pair.",
'general' => "General",
'general_configuration' => "General Configuration",
'giftcard_number' => "Gift Card Number",
'giftcard_random' => "Generate Random",
'giftcard_series' => "Generate in Series",
'image_allowed_file_types' => "Tipo de archivos permitidos",
'image_max_height_tooltip' => "Altura máxima permitida de imágenes en píxeles (px).",
'image_max_size_tooltip' => "Tamaño máximo permitido de archivo de imágenes en kilobytes (kb).",
'image_max_width_tooltip' => "Ancho máximo permitido para imágenes en píxeles (px).",
'image_restrictions' => "Restricciones de carga de imágenes",
'include_hsn' => "Include Support for HSN Codes",
'info' => "Information",
'info_configuration' => "Store Information",
'input_groups' => "Grupos de Entrada",
'integrations' => "Integraciones",
'integrations_configuration' => "Integraciones Externas",
'invoice' => "Invoice",
'invoice_configuration' => "Invoice Print Settings",
'invoice_default_comments' => "Default Invoice Comments",
'invoice_email_message' => "Invoice Email Template",
'invoice_enable' => "Enable Invoicing",
'invoice_printer' => "Invoice Printer",
'invoice_type' => "Invoice Type",
'is_readable' => "es legible, pero los permisos están configurados incorrectamente. Configúrelo en 640 o 660 y actualice.",
'is_writable' => "se puede escribir, pero los permisos están configurados incorrectamente. Configúrelo en 750 y actualice.",
'item_markup' => "",
'jsprintsetup_required' => "Warning: This functionality will only work if you have the FireFox jsPrintSetup addon installed. Save anyway?",
'language' => "Language",
'last_used_invoice_number' => "Last used Invoice Number",
'last_used_quote_number' => "Last used Quote Number",
'last_used_work_order_number' => "Last used W/O Number",
'left' => "Left",
'license' => "License",
'license_configuration' => "License Statement",
'line_sequence' => "Line Sequence",
'lines_per_page' => "Lines per Page",
'lines_per_page_number' => "Lines per Page must be a number.",
'lines_per_page_required' => "Lines per Page is a required field.",
'locale' => "Localization",
'locale_configuration' => "Localization Configuration",
'locale_info' => "Localization Configuration Information",
'location' => "Stock",
'location_configuration' => "Stock Locations",
'location_info' => "Location Configuration Information",
'login_form' => "Estilo de formulario de inicio de sesión",
'logout' => "Do you want to make a backup before logging out? Click [OK] to backup or [Cancel] to logout.",
'mailchimp' => "Mailchimp",
'mailchimp_api_key' => "Mailchimp Clave API",
'mailchimp_configuration' => "Configuración de MailChimp",
'mailchimp_key_successfully' => "API Key is valid.",
'mailchimp_key_unsuccessfully' => "API Key is invalid.",
'mailchimp_lists' => "Lista (s) de MailChimp",
'mailchimp_tooltip' => "Click the icon for an API Key.",
'message' => "Message",
'message_configuration' => "Message Configuration",
'msg_msg' => "Saved Text Message",
'msg_msg_placeholder' => "If you wish to use a SMS template save your message here, otherwise leave the box blank.",
'msg_pwd' => "SMS-API Password",
'msg_pwd_required' => "SMS-API Password is a required field",
'msg_src' => "SMS-API Sender ID",
'msg_src_required' => "SMS-API Sender ID is a required field",
'msg_uid' => "SMS-API Username",
'msg_uid_required' => "SMS-API Username is a required field",
'multi_pack_enabled' => "Multiple Packages per Item",
'no_risk' => "No security/vulnerability risks.",
'none' => "none",
'notify_alignment' => "Notification Popup Position",
'number_format' => "Number Format",
'number_locale' => "Localization",
'number_locale_invalid' => "The entered locale is invalid. Check the link in the tooltip to find a valid locale.",
'number_locale_required' => "Number Locale is a required field.",
'number_locale_tooltip' => "Find a suitable locale through this link.",
'os_timezone' => "Zona horaria OSPOS:",
'ospos_info' => "Información de instalación OSPOS",
'payment_options_order' => "Payment Options Order",
'perm_risk' => "Los permisos incorrectos ponen en riesgo este software.",
'phone' => "Company Phone",
'phone_required' => "Company Phone is a required field.",
'print_bottom_margin' => "Margin Bottom",
'print_bottom_margin_number' => "Margin Bottom must be a number.",
'print_bottom_margin_required' => "Margin Bottom is a required field.",
'print_delay_autoreturn' => "Autoreturn to Sale delay",
'print_delay_autoreturn_number' => "Autoreturn to Sale delay is a required field.",
'print_delay_autoreturn_required' => "Autoreturn to Sale delay must be a number.",
'print_footer' => "Print Browser Footer",
'print_header' => "Print Browser Header",
'print_left_margin' => "Margin Left",
'print_left_margin_number' => "Margin Left must be a number.",
'print_left_margin_required' => "Margin Left is a required field.",
'print_receipt_check_behaviour' => "Print Receipt checkbox",
'print_receipt_check_behaviour_always' => "Always checked",
'print_receipt_check_behaviour_last' => "Remember last selection",
'print_receipt_check_behaviour_never' => "Always unchecked",
'print_right_margin' => "Margin Right",
'print_right_margin_number' => "Margin Right must be a number.",
'print_right_margin_required' => "Margin Right is a required field.",
'print_silently' => "Show Print Dialog",
'print_top_margin' => "Margin Top",
'print_top_margin_number' => "Margin Top must be a number.",
'print_top_margin_required' => "Margin Top is a required field.",
'quantity_decimals' => "Quantity Decimals",
'quick_cash_enable' => "",
'quote_default_comments' => "Default Quote Comments",
'receipt' => "Receipt",
'receipt_category' => "",
'receipt_configuration' => "Receipt Print Settings",
'receipt_default' => "Default",
'receipt_font_size' => "Font Size",
'receipt_font_size_number' => "Font Size must be a number.",
'receipt_font_size_required' => "Font Size is a required field.",
'receipt_info' => "Receipt Configuration Information",
'receipt_printer' => "Ticket Printer",
'receipt_short' => "Short",
'receipt_show_company_name' => "Show Company Name",
'receipt_show_description' => "Show Description",
'receipt_show_serialnumber' => "Show Serial Number",
'receipt_show_tax_ind' => "Mostrar indicador de impuestos",
'receipt_show_taxes' => "Show Taxes",
'receipt_show_total_discount' => "Show Total Discount",
'receipt_template' => "Receipt Template",
'receiving_calculate_average_price' => "Calcular promedio, Precio (Recepción)",
'recv_invoice_format' => "Receivings Invoice Format",
'register_mode_default' => "Default Register Mode",
'report_an_issue' => "Reportar un problema",
'return_policy_required' => "Return policy is a required field.",
'reward' => "Reward",
'reward_configuration' => "Reward Configuration",
'right' => "Right",
'sales_invoice_format' => "Sales Invoice Format",
'sales_quote_format' => "Sales Quote Format",
'saved_successfully' => "Configuration save successful.",
'saved_unsuccessfully' => "Configuration save failed.",
'security_issue' => "Security Vulnerability Warning",
'server_notice' => "Please use the below info for issue reporting.",
'service_charge' => "",
'show_due_enable' => "",
'show_office_group' => "Show office icon",
'statistics' => "Send Statistics",
'statistics_tooltip' => "Send statistics for development and feature improvement purposes.",
'stock_location' => "Ubicación del inventario",
'stock_location_duplicate' => "Stock Location must be unique.",
'stock_location_invalid_chars' => "Stock Location can not contain '_'.",
'stock_location_required' => "Stock location is a required field.",
'suggestions_fifth_column' => "",
'suggestions_first_column' => "Column 1",
'suggestions_fourth_column' => "",
'suggestions_layout' => "Search Suggestions Layout",
'suggestions_second_column' => "Column 2",
'suggestions_third_column' => "Column 3",
'system_conf' => "Setup & Conf",
'system_info' => "System Info",
'table' => "Table",
'table_configuration' => "Table Configuration",
'takings_printer' => "Receipt Printer",
'tax' => "Tax",
'tax_category' => "Tax Category",
'tax_category_duplicate' => "The entered tax category already exists.",
'tax_category_invalid_chars' => "The entered tax category is invalid.",
'tax_category_required' => "The tax category is required.",
'tax_category_used' => "Tax category cannot be deleted because it is being used.",
'tax_configuration' => "Tax Configuration",
'tax_decimals' => "Tax Decimals",
'tax_id' => "Tax Id",
'tax_included' => "Tax Included",
'theme' => "Theme",
'theme_preview' => "Vista Previa del Tema:",
'thousands_separator' => "Thousands Separator",
'timezone' => "Timezone",
'timezone_error' => "La zona horaria de OSPOS es diferente a su zona horaria local.",
'top' => "Top",
'use_destination_based_tax' => "Use Destination Based Tax",
'user_timezone' => "Zona horaria local:",
'website' => "Website",
'wholesale_markup' => "",
'work_order_enable' => "Work Order Support",
'work_order_format' => "Work Order Format",
];

View File

@@ -1,56 +1,57 @@
<?php
return [
"account_number" => "Cuenta #",
"account_number_duplicate" => "El Número de Cuenta ya se encuentra en la base de datos.",
"available_points" => "Puntos Disponibles",
"available_points_value" => "",
"average" => "Gasto Promedio",
"avg_discount" => "Descuento Promedio",
"basic_information" => "Información",
"cannot_be_deleted" => "No se pueden borrar los Clientes seleccionados, uno o más tienen ventas.",
"company_name" => "Compañia",
"confirm_delete" => "¿Está seguro que quiere borrar los Clientes seleccionados?",
"confirm_restore" => "¿Está seguro que quiere restaurar los clientes seleccionados?",
"consent" => "Consentimiento de registro",
"consent_required" => "Consentimiento de registro es un campo requerido.",
"csv_import_failed" => "Fallo al importar a CSV",
"csv_import_nodata_wrongformat" => "El archivo subido no contiene datos o no está formado correctamente.",
"csv_import_partially_failed" => "La importación del Cliente fue exitosa pero con algunos errores:",
"csv_import_success" => "Cliente importado exitosamente.",
"customer" => "Cliente",
"date" => "Fecha",
"discount" => "Descuento",
"discount_fixed" => "Descuento Fijo",
"discount_percent" => "Porcentaje de Descuento",
"discount_type" => "Tipo de Descuento",
"email_duplicate" => "El correo electrónico ya se encuentra en la base de datos.",
"employee" => "Empleado",
"error_adding_updating" => "Fallo al agregar o actualizar el Cliente.",
"import_items_csv" => "Importar Cliente desde CSV",
"mailchimp_activity_click" => "Click Correo Electrónico",
"mailchimp_activity_lastopen" => "Último correo electrónico abierto",
"mailchimp_activity_open" => "Correo electrónico abierto",
"mailchimp_activity_total" => "Correo electrónico enviado",
"mailchimp_activity_unopen" => "Correo electrónico sin abrir",
"mailchimp_email_client" => "cliente de correo electrónico",
"mailchimp_info" => "Mailchimp",
"mailchimp_member_rating" => "Puntaje",
"mailchimp_status" => "Estado",
"mailchimp_vip" => "VIP",
"max" => "Gasto Máximo",
"min" => "Gasto Mínimo",
"new" => "Nuevo Cliente",
"none_selected" => "No ha seleccionado un Cliente para borrar.",
"one_or_multiple" => "Cliente(s)",
"quantity" => "Cantidad",
"stats_info" => "Estadísticas",
"successful_adding" => "Ha agregado un Cliente con éxito",
"successful_deleted" => "Lo ha borrado exitosamente",
"successful_updating" => "Ha actualizado un Cliente exitosamente",
"tax_code" => "Código de Impuesto",
"tax_id" => "Id Impuesto",
"taxable" => "Impuestable",
"total" => "Gasto total",
"update" => "Actualizar Cliente",
"rewards_package" => "Paquete de Recompensas",
'account_number' => "Cuenta #",
'account_number_duplicate' => "El Número de Cuenta ya se encuentra en la base de datos.",
'available_points' => "Puntos Disponibles",
'available_points_value' => "",
'average' => "Gasto Promedio",
'avg_discount' => "Descuento Promedio",
'basic_information' => "Información",
'cannot_be_deleted' => "No se pueden borrar los Clientes seleccionados, uno o más tienen ventas.",
'company_name' => "Compañia",
'confirm_delete' => "¿Está seguro que quiere borrar los Clientes seleccionados?",
'confirm_restore' => "¿Está seguro que quiere restaurar los clientes seleccionados?",
'consent' => "Consentimiento de registro",
'consent_required' => "Consentimiento de registro es un campo requerido.",
'csv_import_failed' => "Fallo al importar a CSV",
'csv_import_nodata_wrongformat' => "El archivo subido no contiene datos o no está formado correctamente.",
'csv_import_partially_failed' => "La importación del Cliente fue exitosa pero con algunos errores:",
'csv_import_success' => "Cliente importado exitosamente.",
'customer' => "Cliente",
'date' => "Fecha",
'discount' => "Descuento",
'discount_fixed' => "Descuento Fijo",
'discount_percent' => "Porcentaje de Descuento",
'discount_type' => "Tipo de Descuento",
'email_duplicate' => "El correo electrónico ya se encuentra en la base de datos.",
'employee' => "Empleado",
'error_adding_updating' => "Fallo al agregar o actualizar el Cliente.",
'import_items_csv' => "Importar Cliente desde CSV",
'mailchimp_activity_click' => "Click Correo Electrónico",
'mailchimp_activity_lastopen' => "Último correo electrónico abierto",
'mailchimp_activity_open' => "Correo electrónico abierto",
'mailchimp_activity_total' => "Correo electrónico enviado",
'mailchimp_activity_unopen' => "Correo electrónico sin abrir",
'mailchimp_email_client' => "cliente de correo electrónico",
'mailchimp_info' => "Mailchimp",
'mailchimp_member_rating' => "Puntaje",
'mailchimp_status' => "Estado",
'mailchimp_vip' => "VIP",
'max' => "Gasto Máximo",
'min' => "Gasto Mínimo",
'new' => "Nuevo Cliente",
'none_selected' => "No ha seleccionado un Cliente para borrar.",
'one_or_multiple' => "Cliente(s)",
'quantity' => "Cantidad",
'stats_info' => "Estadísticas",
'successful_adding' => "Ha agregado un Cliente con éxito",
'successful_deleted' => "Se ha borrado correctamente",
'successful_updating' => "Ha actualizado un Cliente exitosamente",
'tax_code' => "Código de Impuesto",
'tax_id' => "Id Impuesto",
'taxable' => "Impuestable",
'total' => "Gasto total",
'update' => "Actualizar Cliente",
'rewards_package' => "Paquete de Recompensas",
];

View File

@@ -1,44 +1,45 @@
<?php
return [
"administrator" => "",
"basic_information" => "Información",
"cannot_be_deleted" => "No se puede borrar los empleados seleccionados, uno o más de ellos tienen ventas registradas ó intentas borrar tu propia cuenta.",
"change_employee" => "",
"change_password" => "Cambiar contraseña",
"clerk" => "",
"commission" => "",
"confirm_delete" => "¿Estás seguro que deseas borrar los empleados seleccionados?",
"confirm_restore" => "¿Estás seguro que deseas restaurar los empleados seleccionados?",
"current_password" => "Contraseña Actual",
"current_password_invalid" => "La contraseña actual es inválida.",
"employee" => "Empleado",
"error_adding_updating" => "Agregar ó Actualizar empleado ha fallado.",
"error_deleting_demo_admin" => "No puede borrar el usuario demo de administrador.",
"error_updating_demo_admin" => "No puede cambiar el usuario demo de administrador.",
"language" => "Idioma",
"login_info" => "Iniciar sesión",
"manager" => "",
"new" => "Nuevo Empleado",
"none_selected" => "No ha seleccionado empleados a borrar.",
"one_or_multiple" => "Empleado(s)",
"password" => "Contraseña",
"password_minlength" => "La contraseña debe tener por lo menos 8 letras.",
"password_must_match" => "Las contraseñas no coinciden.",
"password_not_must_match" => "La contraseña actual y nueva contraseña deben ser distintas.",
"password_required" => "Se requiere contraseña.",
"permission_desc" => "Selecciona las casillas para otorgar acceso a los módulos.",
"permission_info" => "Permisos",
"repeat_password" => "Contraseña otra vez",
"subpermission_required" => "Concede por lo menos un permiso para cada módulo.",
"successful_adding" => "Empleado agregado exitosamente.",
"successful_change_password" => "Cambio de contraseña exitoso.",
"successful_deleted" => "Eliminado Satisfactoriamente",
"successful_updating" => "Empleado actualizado exitosamente",
"system_language" => "Idioma del sistema",
"unsuccessful_change_password" => "El cambio de contraseña ha fallado.",
"update" => "Actualizar Empleado",
"username" => "Nombre de Usuario",
"username_duplicate" => "El usuario del empleado ya esta en uso. Favor de escoger otro.",
"username_minlength" => "Nombre de usuario debe tener por lo menos 5 letras.",
"username_required" => "Es necesario el nombre de usuario.",
'administrator' => "",
'basic_information' => "Información",
'cannot_be_deleted' => "No se puede borrar los empleados seleccionados, uno o más de ellos tienen ventas registradas ó intentas borrar tu propia cuenta.",
'change_employee' => "",
'change_password' => "Cambiar contraseña",
'clerk' => "",
'commission' => "",
'confirm_delete' => "¿Estás seguro que deseas borrar los empleados seleccionados?",
'confirm_restore' => "¿Estás seguro que deseas restaurar los empleados seleccionados?",
'current_password' => "Contraseña Actual",
'current_password_invalid' => "La contraseña actual es inválida.",
'employee' => "Empleado",
'error_adding_updating' => "Agregar ó Actualizar empleado ha fallado.",
'error_deleting_demo_admin' => "No puede borrar el usuario demo de administrador.",
'error_updating_demo_admin' => "No puede cambiar el usuario demo de administrador.",
'language' => "Idioma",
'login_info' => "Iniciar sesión",
'manager' => "",
'new' => "Nuevo Empleado",
'none_selected' => "No ha seleccionado empleados a borrar.",
'one_or_multiple' => "Empleado(s)",
'password' => "Contraseña",
'password_minlength' => "La contraseña debe tener por lo menos 8 letras.",
'password_must_match' => "Las contraseñas no coinciden.",
'password_not_must_match' => "La contraseña actual y nueva contraseña deben ser distintas.",
'password_required' => "Se requiere contraseña.",
'permission_desc' => "Selecciona las casillas para otorgar acceso a los módulos.",
'permission_info' => "Permisos",
'repeat_password' => "Contraseña otra vez",
'subpermission_required' => "Concede por lo menos un permiso para cada módulo.",
'successful_adding' => "Empleado agregado exitosamente.",
'successful_change_password' => "Cambio de contraseña exitoso.",
'successful_deleted' => "Se ha borrado correctamente",
'successful_updating' => "Empleado actualizado exitosamente",
'system_language' => "Idioma del sistema",
'unsuccessful_change_password' => "El cambio de contraseña ha fallado.",
'update' => "Actualizar Empleado",
'username' => "Nombre de Usuario",
'username_duplicate' => "El usuario del empleado ya esta en uso. Favor de escoger otro.",
'username_minlength' => "Nombre de usuario debe tener por lo menos 5 letras.",
'username_required' => "Es necesario el nombre de usuario.",
];

View File

@@ -1,71 +1,72 @@
<?php
return [
"add_minus" => "Inventario para agregar o restar.",
"allow_alt_description" => "Permitir Descripción Alterna",
"bulk_edit" => "Editor Masivo",
"cannot_be_deleted" => "No se puede borrar la tarjeta (s) de regalo seleccionada(s), una o mas de las Tarjetas de Regalo ya tuvo ventas.",
"cannot_find_giftcard" => "Tarjeta de Regalo no encontrada.",
"cannot_use" => "Tarjeta de Regalo {0} no puede ser usada para esta venta: Cliente incorrecto.",
"card_value" => "Valor",
"category" => "Categoría",
"change_all_to_allow_alt_desc" => "Permitir descripción alternativa para todos.",
"change_all_to_not_allow_allow_desc" => "No permitir descripción alternativa para todos.",
"change_all_to_serialized" => "Cambiar Todos a Serializados",
"change_all_to_unserialized" => "Cambiar Todos a Sin Serializar",
"confirm_bulk_edit" => "¿Estas seguro que deseas editar las Tarjeta(s) de regalo seleccionadas?",
"confirm_delete" => "¿Estas seguro que deseas borrar las Tarjetas(s) de regalo seleccionadas?",
"confirm_restore" => "¿Estas seguro que deseas restaurar las Tarjeta(s) de regalo seleccionadas?",
"cost_price" => "Precio de Mayoreo",
"count" => "Actualizar Inventario",
"csv_import_failed" => "Fallo en la importación de CSV.",
"current_quantity" => "Cantidad Actual",
"description" => "Descripción",
"details_count" => "Detalles del Inventario",
"do_nothing" => "No hacer Nada",
"edit_fields_you_want_to_update" => "Editar campos para las Tarjeta(s) de regalo seleccionadas.",
"edit_multiple_giftcards" => "Editar Multiples Tarjetas de regalo.",
"error_adding_updating" => "Error al agregar o actualizar la Tarjeta de Regalo.",
"error_updating_multiple" => "Fallo en la actualización de la(s) Tarjeta(s) de regalo.",
"generate_barcodes" => "Generar Códigos de Barra",
"giftcard" => "Tarjeta de Regalo",
"giftcard_number" => "Numero de la Tarjeta de Regalo",
"info_provided_by" => "Información provista por",
"inventory_comments" => "Comentarios",
"is_serialized" => "La Tarjeta de Regalo tiene Numero de Serie",
"low_inventory_giftcards" => "Tarjetas de Regalo con Inventario Bajo",
"manually_editing_of_quantity" => "Editor Manual de Cantidad",
"must_select_giftcard_for_barcode" => "Debes seleccionar al menos (1) Tarjeta de Regalo para generar Códigos de Barra.",
"new" => "Nueva Tarjeta de Regalo",
"no_description_giftcards" => "Gif Cards sin Descripción",
"no_giftcards_to_display" => "No hay Gift Cards para mostrar.",
"none" => "Ninguno",
"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' => "Inventario para agregar o restar.",
'allow_alt_description' => "Permitir Descripción Alterna",
'bulk_edit' => "Editor Masivo",
'cannot_be_deleted' => "No se puede borrar la tarjeta (s) de regalo seleccionada(s), una o mas de las Tarjetas de Regalo ya tuvo ventas.",
'cannot_find_giftcard' => "Tarjeta de Regalo no encontrada.",
'cannot_use' => "Tarjeta de Regalo {0} no puede ser usada para esta venta: Cliente incorrecto.",
'card_value' => "Valor",
'category' => "Categoría",
'change_all_to_allow_alt_desc' => "Permitir descripción alternativa para todos.",
'change_all_to_not_allow_allow_desc' => "No permitir descripción alternativa para todos.",
'change_all_to_serialized' => "Cambiar Todos a Serializados",
'change_all_to_unserialized' => "Cambiar Todos a Sin Serializar",
'confirm_bulk_edit' => "¿Estas seguro que deseas editar las Tarjeta(s) de regalo seleccionadas?",
'confirm_delete' => "¿Estas seguro que deseas borrar las Tarjetas(s) de regalo seleccionadas?",
'confirm_restore' => "¿Estas seguro que deseas restaurar las Tarjeta(s) de regalo seleccionadas?",
'cost_price' => "Precio mayoreo.",
'count' => "Actualizar inventario",
'csv_import_failed' => "Fallo en la importación de CSV.",
'current_quantity' => "Cantidad actual",
'description' => "Descripción",
'details_count' => "Detalles del Inventario",
'do_nothing' => "No hacer Nada",
'edit_fields_you_want_to_update' => "Editar campos para las Tarjeta(s) de regalo seleccionadas.",
'edit_multiple_giftcards' => "Editar Multiples Tarjetas de regalo.",
'error_adding_updating' => "Error al agregar o actualizar la Tarjeta de Regalo.",
'error_updating_multiple' => "Fallo en la actualización de la(s) Tarjeta(s) de regalo.",
'generate_barcodes' => "Generar Códigos de Barra",
'giftcard' => "Tarjeta de Regalo",
'giftcard_number' => "Numero de la Tarjeta de Regalo",
'info_provided_by' => "Información provista por",
'inventory_comments' => "Comentarios",
'is_serialized' => "La Tarjeta de Regalo tiene Numero de Serie",
'low_inventory_giftcards' => "Tarjetas de Regalo con Inventario Bajo",
'manually_editing_of_quantity' => "Editor Manual de Cantidad",
'must_select_giftcard_for_barcode' => "Debes seleccionar al menos (1) Tarjeta de Regalo para generar Códigos de Barra.",
'new' => "Nueva Tarjeta de Regalo",
'no_description_giftcards' => "Gif Cards sin Descripción",
'no_giftcards_to_display' => "No hay Gift Cards para mostrar.",
'none' => "Ninguno",
'none_selected' => "",
'number' => "",
'number_information' => "Numero de tarjeta de regalo",
'number_required' => "",
'one_or_multiple' => "Tarjeta de regalo",
'person_id' => "",
'quantity' => "Cantidad",
'quantity_required' => "",
'remaining_balance' => "",
'reorder_level' => "Cantidad minima",
'retrive_giftcard_info' => "",
'sales_tax_1' => "Impuesto de Ventas 1",
'sales_tax_2' => "Impuesto de Ventas 2",
'serialized_giftcards' => "",
'successful_adding' => "",
'successful_bulk_edit' => "La tarjeta de regalo seleccionada ha sido actualizada",
'successful_deleted' => "Se ha borrado correctamente",
'successful_updating' => "",
'supplier' => "",
'tax_1' => "",
'tax_2' => "",
'tax_percent' => "",
'tax_percents' => "",
'unit_price' => "",
'upc_database' => "",
'update' => "",
'use_inventory_menu' => "",
'value' => "",
'value_required' => "",
];

View File

@@ -1,41 +1,42 @@
<?php
return [
"add_item" => "Agregar Artículo",
"all" => "Todo",
"cannot_be_deleted" => "Borrado de Kit(s) de Artículos fallido.",
"confirm_delete" => "¿Estás seguro(a) de querer borrar los kits seleccionados?",
"confirm_restore" => "¿Está seguro de querer restaurar lo(s) kit(s) seleccionado(s)?",
"description" => "Descripción del Kit de Artículos",
"discount" => "Descuento",
"discount_fixed" => "Descuento Fijo",
"discount_percent" => "Porcentaje de descuento",
"discount_type" => "Tipo de Descuento",
"error_adding_updating" => "Error agregando/actualizando Kit de Artículos.",
"find_kit_item" => "Kit de Artículos",
"info" => "Información del kit de artículos",
"item" => "Artículo",
"item_kit_number" => "Código de barras",
"item_kit_number_duplicate" => "El Número del Kit de Artículo ya está presente en la base de datos.",
"item_number" => "",
"item_number_duplicate" => "",
"items" => "Artículos",
"kit" => "ID del Kit",
"kit_and_components" => "Kits y Componentes",
"kit_and_stock" => "Kit y Stock",
"kit_only" => "Sólo kit",
"name" => "Nombre del Kit de Artículos",
"new" => "Nuevo Kit de Artículos",
"no_item_kits_to_display" => "Sin kit de artículos para mostrar.",
"none_selected" => "No ha seleccionado ningún kit de artículos.",
"one_or_multiple" => "Kit(s) de Artículos",
"price_option" => "Opciones de precio",
"priced_only" => "Sólo precio",
"print_option" => "Opciones de impresión",
"quantity" => "Cantidad",
"sequence" => "Secuencia",
"successful_adding" => "Has agregado un kit de artículos",
"successful_deleted" => "Borrado completo",
"successful_updating" => "Kit de Artículos actualizado",
"unit_price" => "",
"update" => "Actualizar Kit de Artículos",
'add_item' => "Agregar Artículo",
'all' => "Todo",
'cannot_be_deleted' => "Borrado de Kit(s) de Artículos fallido.",
'confirm_delete' => "¿Estás seguro(a) de querer borrar los kits seleccionados?",
'confirm_restore' => "¿Está seguro de querer restaurar lo(s) kit(s) seleccionado(s)?",
'description' => "Descripción del Kit de Artículos",
'discount' => "Descuento",
'discount_fixed' => "Descuento Fijo",
'discount_percent' => "Porcentaje de descuento",
'discount_type' => "Tipo de Descuento",
'error_adding_updating' => "Error agregando/actualizando Kit de Artículos.",
'find_kit_item' => "Kit de Artículos",
'info' => "Información del kit de artículos",
'item' => "Articulo",
'item_kit_number' => "Código de barras",
'item_kit_number_duplicate' => "El Número del Kit de Artículo ya está presente en la base de datos.",
'item_number' => "",
'item_number_duplicate' => "",
'items' => "Artículos",
'kit' => "ID del Kit",
'kit_and_components' => "Kits y Componentes",
'kit_and_stock' => "Kit y Stock",
'kit_only' => "Sólo kit",
'name' => "Nombre del Kit de Artículos",
'new' => "Nuevo Kit de Artículos",
'no_item_kits_to_display' => "Sin kit de artículos para mostrar.",
'none_selected' => "No ha seleccionado ningún kit de artículos.",
'one_or_multiple' => "Kit(s) de Artículos",
'price_option' => "Opciones de precio",
'priced_only' => "Sólo precio",
'print_option' => "Opciones de impresión",
'quantity' => "Cantidad",
'sequence' => "Secuencia",
'successful_adding' => "Has agregado un kit de artículos",
'successful_deleted' => "Se ha borrado correctamente",
'successful_updating' => "Kit de Artículos actualizado",
'unit_price' => "",
'update' => "Actualizar Kit de Artículos",
];

View File

@@ -1,120 +1,121 @@
<?php
return [
"add_minus" => "Inventario a agregar o disminuir.",
"allow_alt_description" => "Permitir Descripción Alternativa",
"amount_entry" => "Ingrese Cantidad",
"bulk_edit" => "Edición Masiva",
"buy_price_required" => "Precio de Compra es un campo requerido.",
"cannot_be_deleted" => "No se puede borrar el item(s) seleccionado, uno a mas de los items seleccionados tienen ventas.",
"cannot_find_item" => "Articulo no encontrado.",
"categories" => "",
"category" => "Categoría",
"category_new" => "",
"category_required" => "Categoría es un campo requerido.",
"change_all_to_allow_alt_desc" => "Permitir Descripción Alternativa para todo.",
"change_all_to_not_allow_allow_desc" => "No permitir Descripción Alternativa para todo.",
"change_all_to_serialized" => "Cambiar todo a Serializado",
"change_all_to_unserialized" => "Cambiar todo a No-Serializado",
"change_image" => "Cambiar Imagen",
"confirm_bulk_edit" => "¿Esta seguro que quiere editar los artículos seleccionados?",
"confirm_bulk_edit_wipe_taxes" => "Toda la información de Impuestos de los Artículos será reemplazada.",
"confirm_delete" => "¿Esta seguro que quiere eliminar los artículos seleccionados?",
"confirm_restore" => "¿Esta seguro de restaurar los articulos seleccionado?",
"cost_price" => "",
"cost_price_number" => "",
"cost_price_required" => "",
"count" => "",
"csv_import_failed" => "",
"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' => "Inventario a agregar o disminuir.",
'allow_alt_description' => "Permitir Descripción Alternativa",
'amount_entry' => "Ingrese Cantidad",
'bulk_edit' => "Edición Masiva",
'buy_price_required' => "Precio de Compra es un campo requerido.",
'cannot_be_deleted' => "No se puede borrar el item(s) seleccionado, uno a mas de los items seleccionados tienen ventas.",
'cannot_find_item' => "Articulo no encontrado.",
'categories' => "",
'category' => "Categoría",
'category_new' => "",
'category_required' => "Categoría es un campo requerido.",
'change_all_to_allow_alt_desc' => "Permitir Descripción Alternativa para todo.",
'change_all_to_not_allow_allow_desc' => "No permitir Descripción Alternativa para todo.",
'change_all_to_serialized' => "Cambiar todo a Serializado",
'change_all_to_unserialized' => "Cambiar todo a No-Serializado",
'change_image' => "Cambiar Imagen",
'confirm_bulk_edit' => "¿Esta seguro que quiere editar los artículos seleccionados?",
'confirm_bulk_edit_wipe_taxes' => "Toda la información de Impuestos de los Artículos será reemplazada.",
'confirm_delete' => "¿Esta seguro que quiere eliminar los artículos seleccionados?",
'confirm_restore' => "¿Esta seguro de restaurar los articulos seleccionado?",
'cost_price' => "Precio mayoreo.",
'cost_price_number' => "El precio de mayoreo debe ser números.",
'cost_price_required' => "El precio de mayoreo es requerido.",
'count' => "Actualizar inventario",
'csv_import_failed' => "",
'csv_import_nodata_wrongformat' => "",
'csv_import_partially_failed' => "",
'csv_import_success' => "",
'current_quantity' => "Cantidad actual",
'default_pack_name' => "",
'description' => "Descripción",
'details_count' => "",
'do_nothing' => "",
'edit' => "",
'edit_fields_you_want_to_update' => "",
'edit_multiple_items' => "Edición de varios elementos",
'empty_upc_items' => "",
'error_adding_updating' => "",
'error_updating_multiple' => "",
'generate_barcodes' => "",
'hsn_code' => "",
'image' => "",
'import_items_csv' => "",
'info_provided_by' => "",
'inventory' => "Inventario",
'inventory_CSV_import_quantity' => "",
'inventory_comments' => "Comentarios",
'inventory_data_tracking' => "",
'inventory_date' => "Fecha",
'inventory_employee' => "Empleado",
'inventory_in_out_quantity' => "",
'inventory_remarks' => "",
'is_deleted' => "",
'is_printed' => "",
'is_serialized' => "el articulo tiene número de serie",
'item' => "Articulo",
'item_id' => "",
'item_number' => "Código de barras",
'item_number_duplicate' => "El código del artículo ya está presente en la base de datos.",
'kit' => "Kit",
'location' => "Ubicación",
'low_inventory_items' => "",
'low_sell_item' => "",
'manually_editing_of_quantity' => "",
'markup' => "",
'name' => "",
'name_required' => "",
'new' => "Nuevo articulo",
'no_description_items' => "",
'no_items_to_display' => "Sin artículos.",
'none' => "",
'none_selected' => "Debe elegir algún articulo para poder modificarlo",
'nonstock' => "",
'number_information' => "",
'number_required' => "",
'one_or_multiple' => "Articulos",
'pack_name' => "",
'qty_per_pack' => "Cantidad por paquete",
'quantity' => "Cantidad",
'quantity_number' => "Cantidad debe ser número.",
'quantity_required' => "Especifique la cantidad.",
'receiving_quantity' => "Cantidad recibida",
'remove_image' => "Quitar imagen",
'reorder_level' => "Cantidad minima",
'reorder_level_number' => "Cantidad minima deber ser numero.",
'reorder_level_required' => "Cantidad minima no puede estar vacío.",
'retrive_item_info' => "Obtener información del articulo",
'sales_tax_1' => "Impuesto de Ventas 1",
'sales_tax_2' => "Impuesto de Ventas 2",
'search_attributes' => "Atributos de Búsqueda",
'select_image' => "Seleccionar imagen",
'serialized_items' => "Artículos con número de serie",
'standard' => "Estándar",
'stock' => "Existencia",
'stock_location' => "Ubicación del inventario",
'stock_type' => "",
'successful_adding' => "",
'successful_bulk_edit' => "",
'successful_deleted' => "Se ha borrado correctamente",
'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' => "",
];

View File

@@ -1,15 +1,16 @@
<?php
return [
"gcaptcha" => "No soy un robot.",
"go" => "Entrar",
"invalid_gcaptcha" => "Por favor compruebe que usted no es un robot.",
"invalid_installation" => "La instalacion no es correcta, revise el archivo php.ini.",
"invalid_username_and_password" => "Usuario y/o Password Invalido.",
"login" => "Login",
"logout" => "Salir",
"migration_needed" => "Una migración de base de datos a {0} empezara después de entrar.",
"password" => "Contraseña",
"required_username" => "",
"username" => "Usuario",
"welcome" => "Bienvenido a {0}!",
'gcaptcha' => "No soy un robot.",
'go' => "Entrar",
'invalid_gcaptcha' => "Por favor compruebe que usted no es un robot.",
'invalid_installation' => "La instalacion no es correcta, revise el archivo php.ini.",
'invalid_username_and_password' => "Usuario y/o Password Invalido.",
'login' => "Login",
'logout' => "Salir",
'migration_needed' => "Una migración de base de datos a {0} empezara después de entrar.",
'password' => "Contraseña",
'required_username' => "El nombre de usuario es obligatorio.",
'username' => "Usuario",
'welcome' => "Bienvenido a {0}!",
];

View File

@@ -1,58 +1,59 @@
<?php
return [
"amount_due" => "",
"cancel_receiving" => "Cancelar",
"cannot_be_deleted" => "Falló al borrar Entrada(s).",
"comments" => "Comentarios",
"complete_receiving" => "Completado",
"confirm_cancel_receiving" => "Esta seguro que quiere eliminar esta recepción? Todos los items se borraran.",
"confirm_delete" => "Esta seguro que quiere borrar esta recepción? Esta acción no se puede deshacer.",
"confirm_finish_receiving" => "Esta seguro que quiere enviar esta recepción? Esto no se puede deshacer.",
"confirm_restore" => "",
"cost" => "Costo",
"daily" => "",
"date" => "Fecha de Recibido",
"date_required" => "Se debe de agregar la fecha correcta.",
"date_type" => "Fecha es un campo obligatorio.",
"delete_entire_sale" => "Borrar Venta Completa",
"discount" => "Descuento",
"edit" => "Editar",
"edit_sale" => "Editar Recepción",
"employee" => "Empleado",
"error_editing_item" => "Fallo la edición del item.",
"error_requisition" => "No se puede mover el inventario desde o hacia la misma Ubicación.",
"find_or_scan_item" => "Encontrar o Escanear Articulo",
"find_or_scan_item_or_receipt" => "Encontrar o Escanear Articulo o Recibo",
"id" => "ID de Recepción",
"item_name" => "Nombre del Articulo",
"mode" => "Modo de Recepción",
"new_supplier" => "Nuevo Proveedor",
"one_or_multiple" => "recepción(es)",
"print_after_sale" => "Imprimir después de la Venta",
"quantity" => "Cant.",
"receipt" => "Recibo de Recepcion",
"receipt_number" => "Recepción #",
"receiving" => "Recibir",
"reference" => "Referencia",
"register" => "Recepción de Artículos",
"requisition" => "Requisición",
"return" => "Devolución",
"select_supplier" => "Seleccionar Proveedor (Opcional)",
"ship_pack" => "Empaque de Envio",
"start_typing_supplier_name" => "Empiece a escribir el nombre del Proveedor...",
"stock" => "Inventario",
"stock_destination" => "Destino del Inventario",
"stock_locaiton" => "Ubicación del Inventario",
"stock_source" => "Origen del Inventario",
"successfully_deleted" => "Se ha borrado exitosamente",
"successfully_updated" => "Recepción actualizada exitosamente",
"supplier" => "Proveedor",
"supplier_address" => "Dirección",
"supplier_email" => "Email",
"supplier_location" => "Ubicación",
"total" => "Total",
"transaction_failed" => "Transacción de Recepción falló.",
"unable_to_add_item" => "Agregar Articulo a Recepción falló.",
"unsuccessfully_updated" => "Actualización de Recepción falló.",
"update" => "Actualizar",
'amount_due' => "",
'cancel_receiving' => "Cancelar",
'cannot_be_deleted' => "Falló al borrar Entrada(s).",
'comments' => "Comentarios",
'complete_receiving' => "Completado",
'confirm_cancel_receiving' => "Esta seguro que quiere eliminar esta recepción? Todos los items se borraran.",
'confirm_delete' => "Esta seguro que quiere borrar esta recepción? Esta acción no se puede deshacer.",
'confirm_finish_receiving' => "Esta seguro que quiere enviar esta recepción? Esto no se puede deshacer.",
'confirm_restore' => "",
'cost' => "Costo",
'daily' => "",
'date' => "Fecha de Recibido",
'date_required' => "Se debe de agregar la fecha correcta.",
'date_type' => "Fecha es un campo obligatorio.",
'delete_entire_sale' => "Borrar Venta Completa",
'discount' => "Descuento",
'edit' => "Editar",
'edit_sale' => "Editar Recepción",
'employee' => "Empleado",
'error_editing_item' => "Fallo la edición del item.",
'error_requisition' => "No se puede mover el inventario desde o hacia la misma Ubicación.",
'find_or_scan_item' => "Encontrar o Escanear Articulo",
'find_or_scan_item_or_receipt' => "Encontrar o Escanear Articulo o Recibo",
'id' => "ID de Recepción",
'item_name' => "Nombre del Articulo",
'mode' => "Modo de Recepción",
'new_supplier' => "Nuevo Proveedor",
'one_or_multiple' => "recepción(es)",
'print_after_sale' => "Imprimir después de la Venta",
'quantity' => "Cant.",
'receipt' => "Recibo de Recepcion",
'receipt_number' => "Recepción #",
'receiving' => "Recibir",
'reference' => "Referencia",
'register' => "Recepción de Artículos",
'requisition' => "Requisición",
'return' => "Devolución",
'select_supplier' => "Seleccionar Proveedor (Opcional)",
'ship_pack' => "Empaque de Envio",
'start_typing_supplier_name' => "Empiece a escribir el nombre del Proveedor...",
'stock' => "Existencia",
'stock_destination' => "Destino del Inventario",
'stock_locaiton' => "Ubicación del Inventario",
'stock_source' => "Origen del Inventario",
'successfully_deleted' => "Se ha borrado exitosamente",
'successfully_updated' => "Recepción actualizada exitosamente",
'supplier' => "Proveedor",
'supplier_address' => "Dirección",
'supplier_email' => "Email",
'supplier_location' => "Ubicación",
'total' => "Total",
'transaction_failed' => "Transacción de Recepción falló.",
'unable_to_add_item' => "Agregar Articulo a Recepción falló.",
'unsuccessfully_updated' => "Actualización de Recepción falló.",
'update' => "Actualizar",
];

View File

@@ -1,148 +1,149 @@
<?php
return [
"all" => "Todas",
"authority" => "Autoridad",
"canceled" => "Cancelado",
"categories" => "Categorías",
"categories_summary_report" => "Informe resumido de categorías",
"category" => "Categoría",
"code_canceled" => "CNL",
"code_invoice" => "INV",
"code_pos" => "POS",
"code_quote" => "Q",
"code_return" => "RET",
"code_type" => "Tipo",
"code_work_order" => "OT",
"comments" => "Comentarios",
"commission" => "",
"complete" => "Ventas y Devoluciones Completadas",
"completed_sales" => "Ventas Completadas",
"confirm_delete" => "Está seguro que quiere borrar la(s) entrada(s) seleccionada(s)?",
"confirm_restore" => "Está seguro que quiere restaurar la(s) entrada(s) seleccionada(s)?",
"cost" => "Al por mayor",
"cost_price" => "Precio al por mayor",
"count" => "Contar",
"customer" => "Cliente",
"customers" => "Clientes",
"customers_summary_report" => "Reporte Resumido de Clientes",
"date" => "Fecha",
"date_range" => "Rango de Fecha",
"description" => "Descripción",
"detailed_receivings_report" => "Reporte Detallado de Recepciones",
"detailed_receivings_report_input" => "",
"detailed_reports" => "Reportes detallados",
"detailed_requisition_report" => "",
"detailed_sales_report" => "Reporte Detallado de Transacciones",
"discount" => "Descuento",
"discount_fixed" => "Descuento Fijo",
"discount_percent" => "Porcentaje de Descuento",
"discount_type" => "Tipo de Descuento",
"discounts" => "Descuentos",
"discounts_summary_report" => "Reporte Resumido de Descuentos",
"earned" => "Puntos ganados",
"employee" => "Empleado",
"employees" => "Empleados",
"employees_summary_report" => "Reporte Resumido de Empleados",
"expenses" => "Gastos",
"expenses_amount" => "Cantidad",
"expenses_categories" => "Gastos",
"expenses_categories_summary_report" => "Reporte Resumido de Gastos por Categoría",
"expenses_category" => "Categoría",
"expenses_payment_amount" => "",
"expenses_tax_amount" => "Impuesto",
"expenses_total_amount" => "Monto Total",
"expenses_total_tax_amount" => "Impuesto Total",
"graphical_reports" => "Reportes Gráficos",
"inventory" => "Inventario",
"inventory_low" => "Inventario Bajo",
"inventory_low_report" => "Reporte de Inventario Bajo",
"inventory_reports" => "Reportes de Inventario",
"inventory_summary" => "Resumen de Inventario",
"inventory_summary_report" => "Reporte Resumido de Inventario",
"item" => "Artículo",
"item_count" => "Filtrar Recuento de Artículos",
"item_name" => "Nombre del Artículo",
"item_number" => "Código de barras",
"items" => "Artículos",
"items_purchased" => "Artículos Comprados",
"items_received" => "Artículos Recibidos",
"items_summary_report" => "Reporte Resumido de Artículos",
"jurisdiction" => "Jurisdicción",
"low_inventory" => "",
"low_inventory_report" => "",
"low_sell_quantity" => "Cantidad Venta Baja",
"more_than_zero" => "Más que cero",
"name" => "Nombre",
"no_reports_to_display" => "No hay Artículos para mostrar.",
"payment_type" => "Tipo de Pago",
"payments" => "Pagos",
"payments_summary_report" => "Reporte Resumido de Pagos",
"profit" => "Ganancias",
"quantity" => "Cantidad",
"quantity_purchased" => "Cantidad Comprada",
"quotes" => "Presupuesto",
"received_by" => "Recepcionado por",
"receiving_id" => "Id de Recepción",
"receiving_type" => "Tipo de Recepción",
"receivings" => "Recepciones",
"reorder_level" => "Cantidad nima",
"report" => "Reporte",
"report_input" => "Entrada de Reporte",
"reports" => "Reportes",
"requisition" => "",
"requisition_by" => "",
"requisition_id" => "",
"requisition_item" => "",
"requisition_item_quantity" => "",
"requisition_related_item" => "",
"requisition_related_item_total_quantity" => "",
"requisition_related_item_unit_quantity" => "",
"requisitions" => "Requisiciones",
"returns" => "Devoluciones",
"revenue" => "Ingresos",
"sale_id" => "Id de Transacciones",
"sale_type" => "Tipo de Transacción",
"sales" => "Transacciones",
"sales_amount" => "Monto de Transacciones",
"sales_summary_report" => "Reporte Resumido de Transacciones",
"sales_taxes" => "Impuesto sobre las Ventas",
"sales_taxes_summary_report" => "Reporte Resumido de Impuestos sobre las Ventas",
"serial_number" => "Número de Serie",
"service_charge" => "",
"sold_by" => "Vendido por",
"sold_items" => "",
"sold_to" => "Vendido a",
"stock_location" => "Ubicación de Stock",
"sub_total_value" => "el Subtotal",
"subtotal" => "el Subtotal",
"summary_reports" => "Reportes Resumidos",
"supplied_by" => "Suministrado por",
"supplier" => "Proveedor",
"suppliers" => "Proveedores",
"suppliers_summary_report" => "Reporte Resumido de Proveedores",
"tax" => "Impuesto",
"tax_category" => "Categoría de Impuesto",
"tax_name" => "Nombre de Impuesto",
"tax_percent" => "Porcentaje de Impuesto",
"tax_rate" => "Tarifa de Impuesto",
"taxes" => "Impuestos",
"taxes_summary_report" => "Reporte Resumido de Impuestos",
"total" => "Total",
"total_inventory_value" => "Valor Total del Inventario",
"total_low_sell_quantity" => "Cantidad Total de Venta Baja",
"total_quantity" => "Cantidad Total",
"total_retail" => "Valor Menor Total del Inventario",
"trans_amount" => "Monto de Transacción",
"trans_due" => "Debido",
"trans_group" => "Grupo de Transacción",
"trans_nopay_sales" => "Ventas sin pago",
"trans_payments" => "Pagos",
"trans_refunded" => "Reembolsado",
"trans_sales" => "Ventas",
"trans_type" => "Tipo de Transacción",
"type" => "Tipo",
"unit_price" => "Precio de Venta",
"used" => "Puntos Usados",
"work_orders" => "Órdenes de Trabajo",
"zero_and_less" => "Cero y menos",
'all' => "Todas",
'authority' => "Autoridad",
'canceled' => "Cancelado",
'categories' => "Categorías",
'categories_summary_report' => "Informe resumido de categorías",
'category' => "Categoría",
'code_canceled' => "CNL",
'code_invoice' => "INV",
'code_pos' => "POS",
'code_quote' => "Q",
'code_return' => "RET",
'code_type' => "Tipo",
'code_work_order' => "OT",
'comments' => "Comentarios",
'commission' => "",
'complete' => "Ventas y Devoluciones Completadas",
'completed_sales' => "Ventas Completadas",
'confirm_delete' => "Está seguro que quiere borrar la(s) entrada(s) seleccionada(s)?",
'confirm_restore' => "Está seguro que quiere restaurar la(s) entrada(s) seleccionada(s)?",
'cost' => "Al por mayor",
'cost_price' => "Precio mayoreo.",
'count' => "Contar",
'customer' => "Cliente",
'customers' => "Clientes",
'customers_summary_report' => "Reporte Resumido de Clientes",
'date' => "Fecha",
'date_range' => "Rango de Fecha",
'description' => "Descripción",
'detailed_receivings_report' => "Reporte Detallado de Recepciones",
'detailed_receivings_report_input' => "",
'detailed_reports' => "Reportes detallados",
'detailed_requisition_report' => "",
'detailed_sales_report' => "Reporte Detallado de Transacciones",
'discount' => "Descuento",
'discount_fixed' => "Descuento Fijo",
'discount_percent' => "Porcentaje de Descuento",
'discount_type' => "Tipo de Descuento",
'discounts' => "Descuentos",
'discounts_summary_report' => "Reporte Resumido de Descuentos",
'earned' => "Puntos ganados",
'employee' => "Empleado",
'employees' => "Empleados",
'employees_summary_report' => "Reporte Resumido de Empleados",
'expenses' => "Gastos",
'expenses_amount' => "Cantidad",
'expenses_categories' => "Gastos",
'expenses_categories_summary_report' => "Reporte Resumido de Gastos por Categoría",
'expenses_category' => "Categoría",
'expenses_payment_amount' => "",
'expenses_tax_amount' => "Impuesto",
'expenses_total_amount' => "Monto Total",
'expenses_total_tax_amount' => "Impuesto Total",
'graphical_reports' => "Reportes Gráficos",
'inventory' => "Inventario",
'inventory_low' => "Inventario Bajo",
'inventory_low_report' => "Reporte de Inventario Bajo",
'inventory_reports' => "Reportes de Inventario",
'inventory_summary' => "Resumen de Inventario",
'inventory_summary_report' => "Reporte Resumido de Inventario",
'item' => "Articulo",
'item_count' => "Filtrar Recuento de Artículos",
'item_name' => "Nombre del Artículo",
'item_number' => "Código de barras",
'items' => "Artículos",
'items_purchased' => "Artículos Comprados",
'items_received' => "Artículos Recibidos",
'items_summary_report' => "Reporte Resumido de Artículos",
'jurisdiction' => "Jurisdicción",
'low_inventory' => "",
'low_inventory_report' => "",
'low_sell_quantity' => "Cantidad Venta Baja",
'more_than_zero' => "Más que cero",
'name' => "Nombre",
'no_reports_to_display' => "No hay Artículos para mostrar.",
'payment_type' => "Tipo de Pago",
'payments' => "Pagos",
'payments_summary_report' => "Reporte Resumido de Pagos",
'profit' => "Ganancias",
'quantity' => "Cantidad",
'quantity_purchased' => "Cantidad Comprada",
'quotes' => "Presupuesto",
'received_by' => "Recepcionado por",
'receiving_id' => "Id de Recepción",
'receiving_type' => "Tipo de Recepción",
'receivings' => "Recepciones",
'reorder_level' => "Cantidad minima",
'report' => "Reporte",
'report_input' => "Entrada de Reporte",
'reports' => "Reportes",
'requisition' => "",
'requisition_by' => "",
'requisition_id' => "",
'requisition_item' => "",
'requisition_item_quantity' => "",
'requisition_related_item' => "",
'requisition_related_item_total_quantity' => "",
'requisition_related_item_unit_quantity' => "",
'requisitions' => "Requisiciones",
'returns' => "Devoluciones",
'revenue' => "Ingresos",
'sale_id' => "Id de Transacciones",
'sale_type' => "Tipo de Transacción",
'sales' => "Transacciones",
'sales_amount' => "Monto de Transacciones",
'sales_summary_report' => "Reporte Resumido de Transacciones",
'sales_taxes' => "Impuesto sobre las Ventas",
'sales_taxes_summary_report' => "Reporte Resumido de Impuestos sobre las Ventas",
'serial_number' => "Número de Serie",
'service_charge' => "",
'sold_by' => "Vendido por",
'sold_items' => "",
'sold_to' => "Vendido a",
'stock_location' => "Ubicación de Stock",
'sub_total_value' => "el Subtotal",
'subtotal' => "el Subtotal",
'summary_reports' => "Reportes Resumidos",
'supplied_by' => "Suministrado por",
'supplier' => "Proveedor",
'suppliers' => "Proveedores",
'suppliers_summary_report' => "Reporte Resumido de Proveedores",
'tax' => "Impuesto",
'tax_category' => "Categoría de Impuesto",
'tax_name' => "Nombre de Impuesto",
'tax_percent' => "Porcentaje de Impuesto",
'tax_rate' => "Tarifa de Impuesto",
'taxes' => "Impuestos",
'taxes_summary_report' => "Reporte Resumido de Impuestos",
'total' => "Total",
'total_inventory_value' => "Valor Total del Inventario",
'total_low_sell_quantity' => "Cantidad Total de Venta Baja",
'total_quantity' => "Cantidad Total",
'total_retail' => "Valor Menor Total del Inventario",
'trans_amount' => "Monto de Transacción",
'trans_due' => "Debido",
'trans_group' => "Grupo de Transacción",
'trans_nopay_sales' => "Ventas sin pago",
'trans_payments' => "Pagos",
'trans_refunded' => "Reembolsado",
'trans_sales' => "Ventas",
'trans_type' => "Tipo de Transacción",
'type' => "Tipo",
'unit_price' => "Precio de Venta",
'used' => "Puntos Usados",
'work_orders' => "Órdenes de Trabajo",
'zero_and_less' => "Cero y menos",
];

View File

@@ -1,224 +1,225 @@
<?php
return [
"customers_available_points" => "Puntos Disponibles",
"rewards_package" => "Premios",
"rewards_remaining_balance" => "Puntos de recompensa sobrante son: ",
"account_number" => "Cuenta #",
"add_payment" => "Agregar Pago",
"amount_due" => "Monto de adeudo",
"amount_tendered" => "Cantidad Recibida",
"authorized_signature" => "Firma Autorizada",
"cancel_sale" => "Cancelar",
"cash" => "Efectivo",
"cash_1" => "",
"cash_2" => "",
"cash_3" => "",
"cash_4" => "",
"cash_adjustment" => "Ajuste de efectivo",
"cash_deposit" => "Deposito en Efectivo",
"cash_filter" => "Efectivo",
"change_due" => "Cambio",
"change_price" => "Cambiar precio de venta",
"check" => "Cheque",
"check_balance" => "Balance de Cheque",
"check_filter" => "Comprobar",
"close" => "",
"comment" => "Comentario",
"comments" => "Comentarios",
"company_name" => "",
"complete" => "",
"complete_sale" => "Completar",
"confirm_cancel_sale" => "¿Está seguro que desea limpiar la venta? Todos los artículos serán borrados.",
"confirm_delete" => "¿Está seguro que desea borrar todas las ventas seleccionadas?",
"confirm_restore" => "¿Está seguro de desear restaurar las ventas seleccionadas?",
"credit" => "Tarjeta de Crédito",
"credit_deposit" => "Deposito de crédito",
"credit_filter" => "Tarjeta de crédito",
"current_table" => "",
"customer" => "Cliente",
"customer_address" => "Dirección",
"customer_discount" => "Descuento",
"customer_email" => "Correo electrónico",
"customer_location" => "Ubicación",
"customer_mailchimp_status" => "Estado de MailChimp",
"customer_optional" => "(Obligatorio para pagos vencidos)",
"customer_required" => "(Obligatorio)",
"customer_total" => "Total",
"customer_total_spent" => "",
"daily_sales" => "",
"date" => "Fecha de venta",
"date_range" => "Rango de fechas",
"date_required" => "Ingresar una fecha correcta.",
"date_type" => "La fecha es un campo requerido.",
"debit" => "Tarjeta de débito",
"debit_filter" => "",
"delete" => "Permitir borrar",
"delete_confirmation" => "¿Seguro(a) de querer borrar esta venta? Esta acción no se puede deshacer.",
"delete_entire_sale" => "Eliminar la venta completa",
"delete_successful" => "Venta borrada correctamente.",
"delete_unsuccessful" => "Fallo al borrar la venta.",
"description_abbrv" => "Descrip.",
"discard" => "Descartar",
"discard_quote" => "",
"discount" => "Desc.",
"discount_included" => "% Descuento",
"discount_short" => "%",
"due" => "Adeudo",
"due_filter" => "Adeudo",
"edit" => "Editar",
"edit_item" => "Editar artículo",
"edit_sale" => "Editar venta",
"email_receipt" => "Enviar ticket",
"employee" => "Empleado",
"entry" => "Entrada",
"error_editing_item" => "Error editando el artículo",
"find_or_scan_item" => "Buscar o escanear artículo",
"find_or_scan_item_or_receipt" => "Buscar o escanear artículo o recibo",
"giftcard" => "Tarjeta de regalo",
"giftcard_balance" => "Balance de Tarjeta de Regalo",
"giftcard_filter" => "",
"giftcard_number" => "Número de Tarjeta de Regalo",
"group_by_category" => "Grupo por Categoría",
"group_by_type" => "Grupo por Tipo",
"hsn" => "HSN",
"id" => "ID de Venta",
"include_prices" => "¿Incluir precios?",
"invoice" => "Factura de venta",
"invoice_confirm" => "Esta factura sera enviada a",
"invoice_enable" => "Crear factura",
"invoice_filter" => "Facturas",
"invoice_no_email" => "Este cliente no tiene un correo electrónico válido.",
"invoice_number" => "Factura #",
"invoice_number_duplicate" => "Por favor ingrese un número de factura único.",
"invoice_sent" => "Factura enviada a",
"invoice_total" => "Total Facturado",
"invoice_type_custom_invoice" => "Factura Personalizada (custom_invoice.php)",
"invoice_type_custom_tax_invoice" => "Factura de Impuesto personalizada (custom_tax_invoice.php)",
"invoice_type_invoice" => "Factura",
"invoice_type_tax_invoice" => "Factura de Impuestos",
"invoice_unsent" => "Fallo el envio de la factura a",
"invoice_update" => "Recuento",
"item_insufficient_of_stock" => "Cantidad insuficiente en inventario.",
"item_name" => "Nombre del Artículo",
"item_number" => "Artículo #",
"item_out_of_stock" => "El artículo está agotado.",
"key_browser" => "Atajos Útiles",
"key_cancel" => "Cancelar actual Cotización/Factura/Venta",
"key_customer_search" => "Buscar Cliente",
"key_finish_quote" => "Finalizar Cotización/Factura sin pago",
"key_finish_sale" => "Agregar pago y Completar la Factura/Venta",
"key_full" => "Abrir en modo Pantalla Completa",
"key_function" => "Function",
"key_help" => "Atajos",
"key_help_modal" => "Abrir Ventana de Atajos",
"key_in" => "Acercar",
"key_item_search" => "Buscar Artículo",
"key_out" => "Alejar",
"key_payment" => "Agregar Pago",
"key_print" => "Imprimir Página Actual",
"key_restore" => "Restaurar Vista",
"key_search" => "Buscar Tablas de Reporte",
"key_suspend" => "Suspender Venta Actual",
"key_suspended" => "Mostrar Ventas Suspendidas",
"key_system" => "Atajos del Sistema",
"key_tendered" => "Editar Importe Licitado",
"key_title" => "Atajos de Teclado para Ventas",
"mc" => "",
"mode" => "Registrar Modo",
"must_enter_numeric" => "Cantidad recibida debe ser un número.",
"must_enter_numeric_giftcard" => "Número de Tarjeta de Regalo debe ser un número.",
"new_customer" => "Cliente Nuevo",
"new_item" => "Artículo Nuevo",
"no_description" => "Sin descripción",
"no_filter" => "Todos",
"no_items_in_cart" => "No hay artículos en el carrito.",
"no_sales_to_display" => "No hay ventas que mostrar.",
"none_selected" => "No has seleccionado alguna venta para borrar.",
"nontaxed_ind" => " ' ",
"not_authorized" => "Esta acción no esta autorizada.",
"one_or_multiple" => "Venta(s)",
"payment" => "Tipo de pago",
"payment_amount" => "Cantidad",
"payment_not_cover_total" => "La cantidad pagada debe ser mayor o igual al Total.",
"payment_type" => "Tipo",
"payments" => "",
"payments_total" => "Total de pagado",
"price" => "Precio",
"print_after_sale" => "Imprimir recibo después de una venta",
"quantity" => "Cantidad",
"quantity_less_than_reorder_level" => "Advertencia. La cantidad deseada es insuficiente.",
"quantity_less_than_zero" => "Advertencia. La cantidad deseada es insuficiente. Puedes procesar la venta, pero verifica tu inventario.",
"quantity_of_items" => "Cantidad de {0} artículos",
"quote" => "Cotizar",
"quote_number" => "Número de presupuesto",
"quote_number_duplicate" => "El número de cotización debe ser único.",
"quote_sent" => "Cotización enviada a",
"quote_unsent" => "La cotización no se pudo enviar a",
"receipt" => "Recibo de venta",
"receipt_no_email" => "Este cliente no tiene una dirección de correo válida.",
"receipt_number" => "Venta #",
"receipt_sent" => "Recibo enviado a",
"receipt_unsent" => "Falló el envío del recibo a",
"refund" => "Modo de Reembolso",
"register" => "Registro de ventas",
"remove_customer" => "Borrar cliente",
"remove_discount" => "",
"return" => "Devolución",
"rewards" => "Puntos de recompensa",
"rewards_balance" => "Balance de puntos de recompensa",
"sale" => "Venta",
"sale_by_invoice" => "Venta por factura",
"sale_for_customer" => "Cliente:",
"sale_time" => "Hora",
"sales_tax" => "Impuestos",
"sales_total" => "",
"select_customer" => "Seleccionar cliente",
"send_invoice" => "Enviar factura",
"send_quote" => "Enviar cotización",
"send_receipt" => "Enviar recibo",
"send_work_order" => "Enviar orden de trabajo",
"serial" => "Serie",
"service_charge" => "",
"show_due" => "",
"show_invoice" => "Mostrar factura",
"show_receipt" => "Mostrar recibo",
"start_typing_customer_name" => "Empiece a escribir los detalles del cliente...",
"start_typing_item_name" => "Escriba el nombre del artículo o escanea el código de barras...",
"stock" => "Inventario",
"stock_location" => "Localización del inventario",
"sub_total" => "el subtotal",
"successfully_deleted" => "Se ha eliminado",
"successfully_restored" => "Se ha restuarado satisfactoriamente",
"successfully_suspended_sale" => "La venta se ha suspendido.",
"successfully_updated" => "Venta actualizada.",
"suspend_sale" => "Suspender",
"suspended_doc_id" => "Documento",
"suspended_sale_id" => "ID",
"suspended_sales" => "Suspendidas",
"table" => "Datos",
"takings" => "Ventas diarias",
"tax" => "Impuestos",
"tax_id" => "ID Impuesto",
"tax_invoice" => "Impuesto de la factura",
"tax_percent" => "Impuesto %",
"taxed_ind" => "T",
"total" => "Total",
"total_tax_exclusive" => "Sin impuesto",
"transaction_failed" => "Ha fallado la venta.",
"unable_to_add_item" => "Falló al agregar artículos para venta",
"unsuccessfully_deleted" => "La eliminación de venta falló.",
"unsuccessfully_restored" => "La restauración de la venta falló.",
"unsuccessfully_suspended_sale" => "La suspensión de venta falló.",
"unsuccessfully_updated" => "Ha fallado la actualización de la venta.",
"unsuspend" => "Retomar",
"unsuspend_and_delete" => "Acción",
"update" => "Actualizar",
"upi" => "UPI",
"visa" => "",
"wholesale" => "",
"work_order" => "Orden de trabajo",
"work_order_number" => "Número de orden de trabajo",
"work_order_number_duplicate" => "El número de orden de trabajo debe ser único.",
"work_order_sent" => "Orden de trabajo enviada a",
"work_order_unsent" => "Falló la Orden de Trabajo al enviar a",
'customers_available_points' => "Puntos Disponibles",
'rewards_package' => "Premios",
'rewards_remaining_balance' => "Puntos de recompensa sobrante son: ",
'account_number' => "Cuenta #",
'add_payment' => "Agregar Pago",
'amount_due' => "Monto de adeudo",
'amount_tendered' => "Cantidad Recibida",
'authorized_signature' => "Firma Autorizada",
'cancel_sale' => "Cancelar",
'cash' => "Efectivo",
'cash_1' => "",
'cash_2' => "",
'cash_3' => "",
'cash_4' => "",
'cash_adjustment' => "Ajuste de efectivo",
'cash_deposit' => "Deposito en Efectivo",
'cash_filter' => "Efectivo",
'change_due' => "Cambio",
'change_price' => "Cambiar precio de venta",
'check' => "Cheque",
'check_balance' => "Balance de Cheque",
'check_filter' => "Comprobar",
'close' => "",
'comment' => "Comentario",
'comments' => "Comentarios",
'company_name' => "",
'complete' => "",
'complete_sale' => "Completar",
'confirm_cancel_sale' => "¿Está seguro que desea limpiar la venta? Todos los artículos serán borrados.",
'confirm_delete' => "¿Está seguro que desea borrar todas las ventas seleccionadas?",
'confirm_restore' => "¿Está seguro de desear restaurar las ventas seleccionadas?",
'credit' => "Tarjeta de Crédito",
'credit_deposit' => "Deposito de crédito",
'credit_filter' => "Tarjeta de crédito",
'current_table' => "",
'customer' => "Cliente",
'customer_address' => "Dirección",
'customer_discount' => "Descuento",
'customer_email' => "Correo electrónico",
'customer_location' => "Ubicación",
'customer_mailchimp_status' => "Estado de MailChimp",
'customer_optional' => "(Obligatorio para pagos vencidos)",
'customer_required' => "(Obligatorio)",
'customer_total' => "Total",
'customer_total_spent' => "",
'daily_sales' => "",
'date' => "Fecha de venta",
'date_range' => "Rango de fechas",
'date_required' => "Ingresar una fecha correcta.",
'date_type' => "La fecha es un campo requerido.",
'debit' => "Tarjeta de débito",
'debit_filter' => "",
'delete' => "Permitir borrar",
'delete_confirmation' => "¿Seguro(a) de querer borrar esta venta? Esta acción no se puede deshacer.",
'delete_entire_sale' => "Eliminar la venta completa",
'delete_successful' => "Venta borrada correctamente.",
'delete_unsuccessful' => "Fallo al borrar la venta.",
'description_abbrv' => "Descrip.",
'discard' => "Descartar",
'discard_quote' => "",
'discount' => "Desc.",
'discount_included' => "% Descuento",
'discount_short' => "%",
'due' => "Adeudo",
'due_filter' => "Adeudo",
'edit' => "Editar",
'edit_item' => "Editar artículo",
'edit_sale' => "Editar venta",
'email_receipt' => "Enviar ticket",
'employee' => "Empleado",
'entry' => "Entrada",
'error_editing_item' => "Error editando el artículo",
'find_or_scan_item' => "Buscar o escanear artículo",
'find_or_scan_item_or_receipt' => "Buscar o escanear artículo o recibo",
'giftcard' => "Tarjeta de regalo",
'giftcard_balance' => "Balance de Tarjeta de Regalo",
'giftcard_filter' => "",
'giftcard_number' => "Número de Tarjeta de Regalo",
'group_by_category' => "Grupo por Categoría",
'group_by_type' => "Grupo por Tipo",
'hsn' => "HSN",
'id' => "ID de Venta",
'include_prices' => "¿Incluir precios?",
'invoice' => "Factura de venta",
'invoice_confirm' => "Esta factura sera enviada a",
'invoice_enable' => "Crear factura",
'invoice_filter' => "Facturas",
'invoice_no_email' => "Este cliente no tiene un correo electrónico válido.",
'invoice_number' => "Factura #",
'invoice_number_duplicate' => "Por favor ingrese un número de factura único.",
'invoice_sent' => "Factura enviada a",
'invoice_total' => "Total Facturado",
'invoice_type_custom_invoice' => "Factura Personalizada (custom_invoice.php)",
'invoice_type_custom_tax_invoice' => "Factura de Impuesto personalizada (custom_tax_invoice.php)",
'invoice_type_invoice' => "Factura",
'invoice_type_tax_invoice' => "Factura de Impuestos",
'invoice_unsent' => "Fallo el envio de la factura a",
'invoice_update' => "Recuento",
'item_insufficient_of_stock' => "Cantidad insuficiente en inventario.",
'item_name' => "Nombre del Artículo",
'item_number' => "Artículo #",
'item_out_of_stock' => "El artículo está agotado.",
'key_browser' => "Atajos Útiles",
'key_cancel' => "Cancelar actual Cotización/Factura/Venta",
'key_customer_search' => "Buscar Cliente",
'key_finish_quote' => "Finalizar Cotización/Factura sin pago",
'key_finish_sale' => "Agregar pago y Completar la Factura/Venta",
'key_full' => "Abrir en modo Pantalla Completa",
'key_function' => "Function",
'key_help' => "Atajos",
'key_help_modal' => "Abrir Ventana de Atajos",
'key_in' => "Acercar",
'key_item_search' => "Buscar Artículo",
'key_out' => "Alejar",
'key_payment' => "Agregar Pago",
'key_print' => "Imprimir Página Actual",
'key_restore' => "Restaurar Vista",
'key_search' => "Buscar Tablas de Reporte",
'key_suspend' => "Suspender Venta Actual",
'key_suspended' => "Mostrar Ventas Suspendidas",
'key_system' => "Atajos del Sistema",
'key_tendered' => "Editar Importe Licitado",
'key_title' => "Atajos de Teclado para Ventas",
'mc' => "",
'mode' => "Registrar Modo",
'must_enter_numeric' => "Cantidad recibida debe ser un número.",
'must_enter_numeric_giftcard' => "Número de Tarjeta de Regalo debe ser un número.",
'new_customer' => "Cliente Nuevo",
'new_item' => "Artículo Nuevo",
'no_description' => "Sin descripción",
'no_filter' => "Todos",
'no_items_in_cart' => "No hay artículos en el carrito.",
'no_sales_to_display' => "No hay ventas que mostrar.",
'none_selected' => "No has seleccionado alguna venta para borrar.",
'nontaxed_ind' => " ' ",
'not_authorized' => "Esta acción no esta autorizada.",
'one_or_multiple' => "Venta(s)",
'payment' => "Tipo de pago",
'payment_amount' => "Cantidad",
'payment_not_cover_total' => "La cantidad pagada debe ser mayor o igual al Total.",
'payment_type' => "Tipo",
'payments' => "",
'payments_total' => "Total de pagado",
'price' => "Precio",
'print_after_sale' => "Imprimir recibo después de una venta",
'quantity' => "Cantidad",
'quantity_less_than_reorder_level' => "Advertencia. La cantidad deseada es insuficiente.",
'quantity_less_than_zero' => "Advertencia. La cantidad deseada es insuficiente. Puedes procesar la venta, pero verifica tu inventario.",
'quantity_of_items' => "Cantidad de {0} artículos",
'quote' => "Cotizar",
'quote_number' => "Número de presupuesto",
'quote_number_duplicate' => "El número de cotización debe ser único.",
'quote_sent' => "Cotización enviada a",
'quote_unsent' => "La cotización no se pudo enviar a",
'receipt' => "Recibo de venta",
'receipt_no_email' => "Este cliente no tiene una dirección de correo válida.",
'receipt_number' => "Venta #",
'receipt_sent' => "Recibo enviado a",
'receipt_unsent' => "Falló el envío del recibo a",
'refund' => "Modo de Reembolso",
'register' => "Registro de ventas",
'remove_customer' => "Borrar cliente",
'remove_discount' => "",
'return' => "Devolución",
'rewards' => "Puntos de recompensa",
'rewards_balance' => "Balance de puntos de recompensa",
'sale' => "Venta",
'sale_by_invoice' => "Venta por factura",
'sale_for_customer' => "Cliente:",
'sale_time' => "Hora",
'sales_tax' => "Impuestos",
'sales_total' => "",
'select_customer' => "Seleccionar cliente",
'send_invoice' => "Enviar factura",
'send_quote' => "Enviar cotización",
'send_receipt' => "Enviar recibo",
'send_work_order' => "Enviar orden de trabajo",
'serial' => "Serie",
'service_charge' => "",
'show_due' => "",
'show_invoice' => "Mostrar factura",
'show_receipt' => "Mostrar recibo",
'start_typing_customer_name' => "Empiece a escribir los detalles del cliente...",
'start_typing_item_name' => "Escriba el nombre del artículo o escanea el código de barras...",
'stock' => "Existencia",
'stock_location' => "Localización del inventario",
'sub_total' => "el subtotal",
'successfully_deleted' => "Se ha eliminado",
'successfully_restored' => "Se ha restuarado satisfactoriamente",
'successfully_suspended_sale' => "La venta se ha suspendido.",
'successfully_updated' => "Venta actualizada.",
'suspend_sale' => "Suspender",
'suspended_doc_id' => "Documento",
'suspended_sale_id' => "ID",
'suspended_sales' => "Suspendidas",
'table' => "Datos",
'takings' => "Ventas diarias",
'tax' => "Impuestos",
'tax_id' => "ID Impuesto",
'tax_invoice' => "Impuesto de la factura",
'tax_percent' => "Impuesto %",
'taxed_ind' => "T",
'total' => "Total",
'total_tax_exclusive' => "Sin impuesto",
'transaction_failed' => "Ha fallado la venta.",
'unable_to_add_item' => "Falló al agregar artículos para venta",
'unsuccessfully_deleted' => "La eliminación de venta falló.",
'unsuccessfully_restored' => "La restauración de la venta falló.",
'unsuccessfully_suspended_sale' => "La suspensión de venta falló.",
'unsuccessfully_updated' => "Ha fallado la actualización de la venta.",
'unsuspend' => "Retomar",
'unsuspend_and_delete' => "Acción",
'update' => "Actualizar",
'upi' => "UPI",
'visa' => "",
'wholesale' => "",
'work_order' => "Orden de trabajo",
'work_order_number' => "Número de orden de trabajo",
'work_order_number_duplicate' => "El número de orden de trabajo debe ser único.",
'work_order_sent' => "Orden de trabajo enviada a",
'work_order_unsent' => "Falló la Orden de Trabajo al enviar a",
];

View File

@@ -1,24 +1,25 @@
<?php
return [
"account_number" => "Número de Cuenta",
"agency_name" => "Nombre de Agencia",
"cannot_be_deleted" => "No se puede borrar el/los Proveedor(es) seleccionado(s). Uno o más tienen Ventas.",
"category" => "Categoría",
"company_name" => "Nombre de la Compañía",
"company_name_required" => "Nombre de la Compañía es un campo requerido.",
"confirm_delete" => "¿Está seguro que quiere borrar al/los Proveedor(es) seleccionados?",
"confirm_restore" => "¿Esá seguro que quiere restaurar al o los Proveedores seleccionados?",
"cost" => "Costo del Proveedor",
"error_adding_updating" => "Fallo al actualizar o agregar un Proveedor.",
"goods" => "Proveedor de Materiales",
"new" => "Nuevo Proveedor",
"none_selected" => "No ha seleccionado Proveedor(es) para borrar.",
"one_or_multiple" => "Proveedor(es)",
"successful_adding" => "Usted ha agregado un Proveedor exitosamente",
"successful_deleted" => "Ha borrado con éxito",
"successful_updating" => "Ha actualizado un Proveedor con éxito",
"supplier" => "Proveedor",
"supplier_id" => "Id",
"tax_id" => "Id Impuesto",
"update" => "Actualizar Proveedor",
'account_number' => "Número de Cuenta",
'agency_name' => "Nombre de Agencia",
'cannot_be_deleted' => "No se puede borrar el/los Proveedor(es) seleccionado(s). Uno o más tienen Ventas.",
'category' => "Categoría",
'company_name' => "Nombre de la Compañía",
'company_name_required' => "Nombre de la Compañía es un campo requerido.",
'confirm_delete' => "¿Está seguro que quiere borrar al/los Proveedor(es) seleccionados?",
'confirm_restore' => "¿Esá seguro que quiere restaurar al o los Proveedores seleccionados?",
'cost' => "Costo del Proveedor",
'error_adding_updating' => "Fallo al actualizar o agregar un Proveedor.",
'goods' => "Proveedor de Materiales",
'new' => "Nuevo Proveedor",
'none_selected' => "No ha seleccionado Proveedor(es) para borrar.",
'one_or_multiple' => "Proveedor(es)",
'successful_adding' => "Usted ha agregado un Proveedor exitosamente",
'successful_deleted' => "Se ha borrado correctamente",
'successful_updating' => "Ha actualizado un Proveedor con éxito",
'supplier' => "Proveedor",
'supplier_id' => "Id",
'tax_id' => "Id Impuesto",
'update' => "Actualizar Proveedor",
];

View File

@@ -1,82 +1,83 @@
<?php
return [
"add_exception" => "Agregar Excepcion",
"cascade" => "Cascada",
"cascade_sequence" => "Secuencia de Cascada",
"city" => "Ciudad",
"code" => "Codigo",
"confirm_delete" => "Estas seguro que deseas eliminar este código de impuesto? Esta acción es irreversible",
"confirm_restore" => "Estas seguro que deseas restaurar los códigos de impuestos?",
"default_tax_category" => "Impuesto por Default",
"default_tax_rate" => "Tarifa de impuesto por default",
"error_adding_updating" => "Código de impuesto agregado o error en actualización",
"group_seq" => "Secuencia de Grupo",
"jurisdiction_name" => "Nombre de la Jurisdicción",
"name" => "Nombre",
"new" => "Impuesto Nuevo",
"no_taxes" => "",
"no_taxes_to_display" => "Códigos de impuestos no disponible",
"reporting_authority" => "Imformacion de Autoridad",
"round_half_down" => "a número entero inferior",
"round_half_even" => "a numero par entero más próximo",
"round_half_odd" => "a numero entero impar mas próximo",
"round_half_up" => "a numero entero superior",
"rounding_code" => "código de redondeo",
"sales_tax" => "Impuesto de Venta",
"sales_tax_by_invoice" => "Impuesto de Ventas por factura",
"sequence" => "Secuencia",
"state" => "Estado",
"successful_deleted" => "Eliminado Satisfactoriamente",
"tax_categories" => "Categorias de Impuestos",
"tax_categories_configuration" => "Configuración de Categorías de Impuestos",
"tax_categories_saved_successfully" => "Las categorías de impuestos han sido guardados",
"tax_categories_saved_unsuccessfully" => "Categorías de impuestos no han sido guardados",
"tax_category" => "Categoria de Impuesto",
"tax_category_code" => "codigo de categoria de impuesto",
"tax_category_duplicate" => "duplicar categoria de impuesto",
"tax_category_invalid_chars" => "caracteres invalidos en el nombre de la categoria de impuesto",
"tax_category_name" => "nombre de la categoria de impuesto",
"tax_category_new" => "nueva categoria de impuesto",
"tax_category_required" => "Categoría de impuesto es requerida",
"tax_code" => "codigo de impuesto",
"tax_code_cannot_be_deleted" => "error al eliminar codigo de impuesto",
"tax_code_duplicate" => "Código de impuesto duplicado",
"tax_code_invalid_chars" => "Caracteres inválidos en el código de impuesto",
"tax_code_name" => "nombre del codigo de impuesto",
"tax_code_required" => "codigo de impuesto es un campo requerido",
"tax_code_successful_deleted" => "has eliminado satisfactoriamente el codigo de impuesto",
"tax_code_successful_updated" => "has actualizado satisfactoriamente",
"tax_code_successful_updating" => "has actualizado satisfactoriamente el codigo de impuesto",
"tax_code_successfully_added" => "has agregado satisfactoriamente",
"tax_code_type" => "tipo de codigo de impuesto",
"tax_codes" => "codigos de impuesto",
"tax_codes_configuration" => "configuracion de codigos de impuesto",
"tax_codes_saved_successfully" => "cambios guardados en codigo de impuesto",
"tax_codes_saved_unsuccessfully" => "no se guardaron los cambios en el codigo de impuesto",
"tax_excluded" => "impuesto excluido",
"tax_group" => "grupo de impuesto",
"tax_group_not_unique" => "Grupo de impuestos {0} no es el unico",
"tax_group_sequence" => "secuencia de grupo de impuesto",
"tax_included" => "impuesto incluido",
"tax_jurisdiction" => "impuesto por ley",
"tax_jurisdiction_duplicate" => "Impuesto por ley duplicado",
"tax_jurisdiction_invalid_chars" => "Caracteres inválidos en el nombre por ley",
"tax_jurisdiction_required" => "impuesto por ley es requerido",
"tax_jurisdictions" => "impuestos por leyes",
"tax_jurisdictions_configuration" => "configuracion de impuestos por leyes",
"tax_jurisdictions_saved_successfully" => "cambios guardados en los impuestos por leyes",
"tax_jurisdictions_saved_unsuccessfully" => "no se guardaron los cambios en los impuestos por leyes",
"tax_rate" => "tarifa de impuesto",
"tax_rate_configuration" => "configuracion de tarifa de impuesto",
"tax_rate_error_adding_updating" => "tarifa de impuesto agregado o actualizacion fallida",
"tax_rate_numeric" => "tarifa de impuesto debe ser numero",
"tax_rate_required" => "tarifa de impuesto es requerida",
"tax_rate_successful_updated" => "has actualizado satisfactoriamente",
"tax_rate_successfully_added" => "has agregado satisfactoriamente",
"tax_rates" => "tarifas de impuestos",
"tax_rates_configuration" => "configuracion de tarifas de impuestos",
"tax_rounding" => "impuesto redondeado",
"tax_type" => "tipo de impuesto",
"update" => "Actualizar tarifa de impuesto",
"vat_tax" => "Impuesto IVA",
'add_exception' => "Agregar Excepcion",
'cascade' => "Cascada",
'cascade_sequence' => "Secuencia de Cascada",
'city' => "Ciudad",
'code' => "Codigo",
'confirm_delete' => "Estas seguro que deseas eliminar este código de impuesto? Esta acción es irreversible",
'confirm_restore' => "Estas seguro que deseas restaurar los códigos de impuestos?",
'default_tax_category' => "Impuesto por Default",
'default_tax_rate' => "Tarifa de impuesto por default",
'error_adding_updating' => "Código de impuesto agregado o error en actualización",
'group_seq' => "Secuencia de Grupo",
'jurisdiction_name' => "Nombre de la Jurisdicción",
'name' => "Nombre",
'new' => "Impuesto Nuevo",
'no_taxes' => "",
'no_taxes_to_display' => "Códigos de impuestos no disponible",
'reporting_authority' => "Imformacion de Autoridad",
'round_half_down' => "a número entero inferior",
'round_half_even' => "a numero par entero más próximo",
'round_half_odd' => "a numero entero impar mas próximo",
'round_half_up' => "a numero entero superior",
'rounding_code' => "código de redondeo",
'sales_tax' => "Impuesto de Venta",
'sales_tax_by_invoice' => "Impuesto de Ventas por factura",
'sequence' => "Secuencia",
'state' => "Estado",
'successful_deleted' => "Se ha borrado correctamente",
'tax_categories' => "Categorias de Impuestos",
'tax_categories_configuration' => "Configuración de Categorías de Impuestos",
'tax_categories_saved_successfully' => "Las categorías de impuestos han sido guardados",
'tax_categories_saved_unsuccessfully' => "Categorías de impuestos no han sido guardados",
'tax_category' => "Categoria de Impuesto",
'tax_category_code' => "codigo de categoria de impuesto",
'tax_category_duplicate' => "duplicar categoria de impuesto",
'tax_category_invalid_chars' => "caracteres invalidos en el nombre de la categoria de impuesto",
'tax_category_name' => "nombre de la categoria de impuesto",
'tax_category_new' => "nueva categoria de impuesto",
'tax_category_required' => "Categoría de impuesto es requerida",
'tax_code' => "codigo de impuesto",
'tax_code_cannot_be_deleted' => "error al eliminar codigo de impuesto",
'tax_code_duplicate' => "Código de impuesto duplicado",
'tax_code_invalid_chars' => "Caracteres inválidos en el código de impuesto",
'tax_code_name' => "nombre del codigo de impuesto",
'tax_code_required' => "codigo de impuesto es un campo requerido",
'tax_code_successful_deleted' => "has eliminado satisfactoriamente el codigo de impuesto",
'tax_code_successful_updated' => "has actualizado satisfactoriamente",
'tax_code_successful_updating' => "has actualizado satisfactoriamente el codigo de impuesto",
'tax_code_successfully_added' => "has agregado satisfactoriamente",
'tax_code_type' => "tipo de codigo de impuesto",
'tax_codes' => "codigos de impuesto",
'tax_codes_configuration' => "configuracion de codigos de impuesto",
'tax_codes_saved_successfully' => "cambios guardados en codigo de impuesto",
'tax_codes_saved_unsuccessfully' => "no se guardaron los cambios en el codigo de impuesto",
'tax_excluded' => "impuesto excluido",
'tax_group' => "grupo de impuesto",
'tax_group_not_unique' => "Grupo de impuestos {0} no es el unico",
'tax_group_sequence' => "secuencia de grupo de impuesto",
'tax_included' => "impuesto incluido",
'tax_jurisdiction' => "impuesto por ley",
'tax_jurisdiction_duplicate' => "Impuesto por ley duplicado",
'tax_jurisdiction_invalid_chars' => "Caracteres inválidos en el nombre por ley",
'tax_jurisdiction_required' => "impuesto por ley es requerido",
'tax_jurisdictions' => "impuestos por leyes",
'tax_jurisdictions_configuration' => "configuracion de impuestos por leyes",
'tax_jurisdictions_saved_successfully' => "cambios guardados en los impuestos por leyes",
'tax_jurisdictions_saved_unsuccessfully' => "no se guardaron los cambios en los impuestos por leyes",
'tax_rate' => "tarifa de impuesto",
'tax_rate_configuration' => "configuracion de tarifa de impuesto",
'tax_rate_error_adding_updating' => "tarifa de impuesto agregado o actualizacion fallida",
'tax_rate_numeric' => "tarifa de impuesto debe ser numero",
'tax_rate_required' => "tarifa de impuesto es requerida",
'tax_rate_successful_updated' => "has actualizado satisfactoriamente",
'tax_rate_successfully_added' => "has agregado satisfactoriamente",
'tax_rates' => "tarifas de impuestos",
'tax_rates_configuration' => "configuracion de tarifas de impuestos",
'tax_rounding' => "impuesto redondeado",
'tax_type' => "tipo de impuesto",
'update' => "Actualizar tarifa de impuesto",
'vat_tax' => "Impuesto IVA",
];

View File

@@ -1,15 +1,16 @@
<?php
return [
"gcaptcha" => "Je ne suis pas un robot.",
"go" => "Lancer",
"invalid_gcaptcha" => "Veuillez vérifier que vous n'êtes pas un robot.",
"invalid_installation" => "Cette installation est incorrecte, veuillez vérifier votre fichier php.ini.",
"invalid_username_and_password" => "Nom d'utilisateur et/ou mot de passe invalide.",
"login" => "Login",
"logout" => "Déconnexion",
"migration_needed" => "Une migration de base de données vers {0} débutera après l'ouverture de session.",
"password" => "Mot de passe",
"required_username" => "",
"username" => "Nom d'utilisateur",
"welcome" => "Bienvenue à {0} !",
'gcaptcha' => "Je ne suis pas un robot.",
'go' => "Lancer",
'invalid_gcaptcha' => "Veuillez vérifier que vous n'êtes pas un robot.",
'invalid_installation' => "Cette installation est incorrecte, veuillez vérifier votre fichier php.ini.",
'invalid_username_and_password' => "Nom d'utilisateur et/ou mot de passe invalide.",
'login' => "Login",
'logout' => "Déconnexion",
'migration_needed' => "Une migration de base de données vers {0} débutera après l'ouverture de session.",
'password' => "Mot de passe",
'required_username' => "Le champ nom utilisateur est obligatoire.",
'username' => "Nom d'utilisateur",
'welcome' => "Bienvenue à {0} !",
];

View File

@@ -70,7 +70,7 @@ class Attribute extends Model
* @param int|bool $definition_id Attribute definition ID to check.
* @return bool returns true if at least one attribute_link exists or false if no attributes exist for that item and attribute.
*/
public function attributeLinkExists(int $item_id, int|bool $definition_id = false): bool
public function attributeLinkExists(?int $item_id, int|bool $definition_id = false): bool
{
$builder = $this->db->table('attribute_links');
$builder->where('item_id', $item_id);
@@ -547,7 +547,7 @@ class Attribute extends Model
{
$builder = $this->db->table('attribute_definitions');
$success = $builder->insert($definition_data);
$definition_data['definition_id'] = $this->getInsertID();
$definition_data['definition_id'] = $this->db->insertID();
}
}
@@ -875,7 +875,7 @@ class Attribute extends Model
$builder->set(["attribute_$data_type" => $attribute_value]);
$builder->insert();
$attribute_id = $this->getInsertID();
$attribute_id = $this->db->insertID();
}
$data = [

View File

@@ -42,7 +42,7 @@ class Giftcard extends Model
{
$builder = $this->db->table('giftcards');
$builder->select('CAST(giftcard_number AS UNSIGNED) AS giftcard_number');
$builder->where('giftcard_number REGEXP \'^[0-9]+$\' = 0');
$builder->where('giftcard_number REGEXP \'^[0-9]+$\'');
$builder->orderBy("giftcard_number","desc");
$builder->limit(1);

View File

@@ -61,7 +61,7 @@ class Summary_sales_taxes extends Summary_report
}
else
{
$builder->where('sale_time BETWEEN ' . rawurldecode($inputs['start_date']) . ' AND ' . rawurldecode($inputs['end_date']));
$builder->where('sale_time BETWEEN ' . $this->db->escape(rawurldecode($inputs['start_date'])) . ' AND ' . $this->db->escape(rawurldecode($inputs['end_date'])));
}
$builder->select('reporting_authority, jurisdiction_name, tax_category, tax_rate, SUM(sale_tax_amount) AS tax');

View File

@@ -296,7 +296,7 @@ $(document).ready(function()
data['currency_symbol'] = $('#currency_symbol').val();
data['currency_code'] = $('#currency_code').val();
data['thousands_separator'] = $('#thousands_separator').is(":checked")
$.post("<?= "$controller_name /checkNumberLocale" ?>",
$.post("<?= "$controller_name/checkNumberLocale" ?>",
data,
function(response) {
$("input[name='save_number_locale']").val(response.save_number_locale);

View File

@@ -78,13 +78,11 @@ use Config\OSPOS;
}
echo esc(getBrowserNameAndVersion($_SERVER['HTTP_USER_AGENT']));
?><br>
.Server Software: <?= esc($_SERVER['SERVER_SOFTWARE']) ?><br>
.PHP Version: <?= PHP_VERSION ?><br>
.DB Version: <?= esc($dbVersion) ?><br>
.Server Port: <?= esc($_SERVER['SERVER_PORT']) ?><br>
.OS: <?= php_uname('s') .' '. php_uname('r') ?><br><br>
.OS Time Zone: <span id="timezone" style="font-weight:600"></span><br>
.OSPOS Time Zone: <span id="ostimezone" style="font-weight:600;" ><?= esc($config['timezone']) ?></span>
Server Software: <?= esc($_SERVER['SERVER_SOFTWARE']) ?><br>
PHP Version: <?= PHP_VERSION ?><br>
DB Version: <?= esc($dbVersion) ?><br>
Server Port: <?= esc($_SERVER['SERVER_PORT']) ?><br>
OS: <?= php_uname('s') .' '. php_uname('r') ?><br><br>
<br><br>
File Permissions:<br>
@@ -115,7 +113,7 @@ use Config\OSPOS;
clearstatcache();
?>
<br>
&#187; [public/uploads:]
&#187; [writable/uploads:]
<?php
if (is_writable($uploads))
{
@@ -230,13 +228,14 @@ use Config\OSPOS;
document.getSelection().removeAllRanges();
});
document.getElementById("timezone").innerText = Intl.DateTimeFormat().resolvedOptions().timeZone;
$(function() {
$('#timezone').clone().appendTo('#timezoneE');
});
if($('#timezone').html() !== $('#ostimezone').html())
document.getElementById("TimeError").innerHTML = '<span style="color: red;"><?= lang('Config.timezone_error') ?></span><br><br><?= lang('Config.user_timezone') ?><div id="timezoneE" style="font-weight:600;"></div><br><?= lang('Config.os_timezone') ?><div id="ostimezoneE" style="font-weight:600;"><?= esc($config['timezone']) ?></div><br>';
if($('#timezone').html() !== $('#ostimezone').html()) {
document.getElementById("timezone").innerText = Intl.DateTimeFormat().resolvedOptions().timeZone;
document.getElementById("TimeError").innerHTML = '<span style="color: red;"><?= lang('Config.timezone_error') ?></span><br><br><?= lang('Config.user_timezone') ?><div id="timezoneE" style="font-weight:600;"></div><br><?= lang('Config.os_timezone') ?><div id="ostimezoneE" style="font-weight:600;"><?= esc($config['timezone']) ?></div><br>';
}
</script>
</div>

View File

@@ -23,8 +23,8 @@ services:
networks:
- app_net
volumes:
- uploads:/app/public/uploads
- logs:/app/application/logs
- uploads:/app/writable/uploads
- logs:/app/writable/logs
environment:
- CI_ENVIRONMENT=${OSPOS_CI_ENV}
- FORCE_HTTPS=true

View File

@@ -15,8 +15,8 @@ services:
networks:
- app_net
volumes:
- uploads:/app/public/uploads
- logs:/app/application/logs
- uploads:/app/writable/uploads
- logs:/app/writable/logs
environment:
- CI_ENVIRONMENT=production
- FORCE_HTTPS=false

View File

@@ -21,7 +21,7 @@
if (button_id == 'submit' && (!submitted && btn_id != "btnNew")) {
form.submit();
$('#submit').prop('disabled', true).css('opacity', 0.5);
validator.valid() && $('#submit').prop('disabled', true).css('opacity', 0.5);
}
return false;
}