Compare commits

...

43 Commits

Author SHA1 Message Date
jekkos
b4c48e5141 Blind sql injection fixes (#3284) 2021-08-27 00:20:50 +02:00
jekkos
b925155ba5 Update changelist (#3218) 2021-08-26 08:23:40 +02:00
jekkos
d07b9349e3 Try to upgrade docker version (#3281) 2021-08-26 00:29:50 +02:00
jekkos
51a8cffc9e Bump to 3.3.5 (#3281) 2021-08-25 23:13:40 +02:00
Dan Tiganuc
694b7fe52d Translated using Weblate (Romanian)
Currently translated at 10.2% (12 of 117 strings)

Translation: opensourcepos/items
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/items/ro/
2021-08-24 11:29:46 +02:00
jekkos
5669dff7da Add sorting for quantity and sales (#3262) 2021-08-20 23:36:02 +02:00
Johntini
6d8890f61e Translated using Weblate (Spanish)
Currently translated at 100.0% (47 of 47 strings)

Translation: opensourcepos/expenses
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/expenses/es/
2021-08-20 22:41:13 +02:00
Johntini
a4bae6536d Translated using Weblate (Spanish)
Currently translated at 100.0% (41 of 41 strings)

Translation: opensourcepos/employees
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/employees/es/
2021-08-20 22:41:13 +02:00
Johntini
e1e61ba98d Translated using Weblate (Spanish)
Currently translated at 100.0% (47 of 47 strings)

Translation: opensourcepos/cashups
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/cashups/es/
2021-08-20 22:41:13 +02:00
Johntini
225bfda867 Translated using Weblate (Spanish)
Currently translated at 100.0% (79 of 79 strings)

Translation: opensourcepos/taxes
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/taxes/es/
2021-08-20 22:41:13 +02:00
Johntini
0a2dc49e3e Translated using Weblate (Spanish)
Currently translated at 100.0% (86 of 86 strings)

Translation: opensourcepos/common
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/common/es/
2021-08-20 22:41:13 +02:00
Johntini
dcc9745991 Translated using Weblate (Spanish)
Currently translated at 100.0% (327 of 327 strings)

Translation: opensourcepos/config
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/config/es/
2021-08-20 22:41:13 +02:00
Johntini
339eca6028 Translated using Weblate (Spanish)
Currently translated at 100.0% (45 of 45 strings)

Translation: opensourcepos/module
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/module/es/
2021-08-20 22:41:13 +02:00
Johntini
d1e9b6d943 Translated using Weblate (Spanish)
Currently translated at 100.0% (53 of 53 strings)

Translation: opensourcepos/customers
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/customers/es/
2021-08-20 22:41:13 +02:00
Johntini
2da34b0789 Translated using Weblate (Spanish)
Currently translated at 100.0% (145 of 145 strings)

Translation: opensourcepos/reports
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/reports/es/
2021-08-20 22:41:13 +02:00
Johntini
44d89a5ed2 Translated using Weblate (Spanish)
Currently translated at 100.0% (37 of 37 strings)

Translation: opensourcepos/item_kits
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/item_kits/es/
2021-08-20 22:41:13 +02:00
Johntini
0637266560 Translated using Weblate (Spanish)
Currently translated at 100.0% (117 of 117 strings)

Translation: opensourcepos/items
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/items/es/
2021-08-20 22:41:13 +02:00
Johntini
32c99248af Translated using Weblate (Spanish)
Currently translated at 100.0% (55 of 55 strings)

Translation: opensourcepos/receivings
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/receivings/es/
2021-08-20 22:41:13 +02:00
Johntini
fad53d52d4 Translated using Weblate (Spanish)
Currently translated at 100.0% (200 of 200 strings)

Translation: opensourcepos/sales
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/sales/es/
2021-08-20 22:41:13 +02:00
Johntini
29bdb7b75e Translated using Weblate (Spanish)
Currently translated at 100.0% (11 of 11 strings)

Translation: opensourcepos/login
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/login/es/
2021-08-20 22:41:13 +02:00
Johntini
3f1bbf99b4 Translated using Weblate (Spanish)
Currently translated at 100.0% (8 of 8 strings)

Translation: opensourcepos/bootstrap_tables
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/bootstrap_tables/es/
2021-08-20 22:41:13 +02:00
Jeroen Peelaerts
4c3f6e4c31 Fix username verification on insert/update (#3239) 2021-08-07 02:12:30 +02:00
Jeroen Peelaerts
85f577556e Fix employee update (#3239) 2021-08-07 02:12:30 +02:00
Jeroen Peelaerts
dc2b2862f9 Fix employee update (#3239) 2021-08-07 02:12:30 +02:00
objecttothis
9217f2d12f Fixed missing function call
This removes the function call to a function that doesn't exist anymore.
The replacement does the same job in one line of code.
Added comment to bring clarity to what the code is doing.
2021-08-06 19:19:09 +02:00
objecttothis
5ebe626543 Formatting Changes
- Removed unneeded tabs that mess up alignment.
2021-08-06 19:16:52 +02:00
Mehmet Keçeci
e277fc09ac minimal Turkish translation 2021-08-05 10:40:56 +02:00
sonnysk76
7e2a5eb297 Translated using Weblate (Spanish (Mexico))
Currently translated at 94.4% (34 of 36 strings)

Translation: opensourcepos/item_kits
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/item_kits/es_MX/
2021-08-05 07:09:41 +02:00
sonnysk76
bcc9cac570 Translated using Weblate (Spanish (Mexico))
Currently translated at 35.8% (14 of 39 strings)

Translation: opensourcepos/module
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/module/es_MX/
2021-08-05 07:09:41 +02:00
sonnysk76
6d4421e13b Translated using Weblate (Spanish (Mexico))
Currently translated at 13.6% (15 of 110 strings)

Translation: opensourcepos/items
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/items/es_MX/
2021-08-05 07:09:41 +02:00
sonnysk76
9d320772f5 Translated using Weblate (Spanish (Mexico))
Currently translated at 100.0% (12 of 12 strings)

Translation: opensourcepos/messages
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/messages/es_MX/
2021-08-05 07:09:41 +02:00
sonnysk76
3d441689d0 Translated using Weblate (Spanish (Mexico))
Currently translated at 100.0% (11 of 11 strings)

Translation: opensourcepos/login
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/login/es_MX/
2021-08-05 07:09:40 +02:00
sonnysk76
4eacc65785 Translated using Weblate (Spanish (Mexico))
Currently translated at 100.0% (52 of 52 strings)

Translation: opensourcepos/receivings
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/receivings/es_MX/
2021-08-05 07:09:40 +02:00
sonnysk76
a31ae36e18 Translated using Weblate (Spanish (Mexico))
Currently translated at 19.4% (27 of 139 strings)

Translation: opensourcepos/reports
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/reports/es_MX/
2021-08-05 07:09:40 +02:00
sonnysk76
74ed7488ee Translated using Weblate (Spanish (Mexico))
Currently translated at 100.0% (36 of 36 strings)

Translation: opensourcepos/employees
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/employees/es_MX/
2021-08-05 07:09:39 +02:00
khao_lek
be72a0169b Translated using Weblate (Thai)
Currently translated at 100.0% (11 of 11 strings)

Translation: opensourcepos/login
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/login/th/
2021-08-04 07:03:00 +02:00
khao_lek
d786039765 Translated using Weblate (Thai)
Currently translated at 99.3% (300 of 302 strings)

Translation: opensourcepos/config
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/config/th/
2021-08-04 07:03:00 +02:00
khao_lek
74724a890f Translated using Weblate (Thai)
Currently translated at 98.7% (76 of 77 strings)

Translation: opensourcepos/common
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/common/th/
2021-08-04 07:03:00 +02:00
Jeroen Peelaerts
8c201816b9 Update spanish (#3255) 2021-08-03 11:04:03 +02:00
Jeroen Peelaerts
5767a3929f Fix duplicate username error message (#3239) 2021-07-30 21:16:35 +02:00
Jeroen Peelaerts
2311a644ab Fix employee username duplication check (#3239) 2021-07-30 21:09:17 +02:00
objecttothis
3d65c3fffa CSV import optimizations and code cleanup (#3150)
Optimizations and CSV Import Rework
- Replaced " with ' where possible to prevent the parser from being called when not needed.
- Replaced == and != with === and !== where possible for bug prevention and speed.
- Replaced -1 with NEW_ITEM global constant for code clarity.
- Added NEW_ITEM global constant to constants.php.
- Refactored CSV import function names for clarity.
- Added capability to import a CSV file containing updates.
- Replaced array() with [] for speed and consistency.
- Removed hungarian notation from two private functions.
- Refactored QueryBuilder functions to place table name in the get() function call.
- Replaced (int) cast with call to intval() for speed.
- Replaced == and != with === and !== where possible to prevent bugs and for speed.
- Replaced array() with [] for speed and consistency.
- Fixed search_custom call

Optimizations and bugfixes for attributes used in csv_import
- Reordered where statements in queries to match composite index on attribute_links table.
- fixed value_exists() to account for different attribute types.
- Removed hungarian notation on private function.
- Replaced array() with [] for speed and consistency.
- Replaced != with <> in SQL for consistency.
- Removed from() calls in querybuilder where possible to reduce function calls.
- Add get_items_by_value()
- Reworked check_data_validity()
- Remove unneeded comments
- Refactor functions for code clarity.
- Use $this->db->dbprefix() where possible instead of hand-writing ospos_...
- Removed unneeded column from query.
- Replaced (int) cast with intval() call for speed.
- Added get_attribute_values()
- Fixed issue with date format locale not being used
- Refactored save_value to respect different attribute_types
- Added delete_orphaned_links() to remove attribute_links that are no longer linked to any items
- Added get_attributes_by_definition()
- Added attribute_cleanup()

Optimizations used in csv_import
- replaced array() with [] for consistency and speed.
- Removed hungarian notation in private functions.
- Replaced " with ' where possible to prevent the parser from being called.
- Minor formatting
- Refactored if statement to tertiary notation for cleaner implementation.
- Replaced " for ' where possible to prevent the parser from being called.
- Added the Id column in the generate_import_items_csv() template so that users can submit an update to an existing item.
- Removed unused key=>value pairs in foreach loops for speed.
- Removed unneeded comments where the function name was self-explanatory.
- Rework get_csv_file() for speed.
- Rework bom_exists() for speed.
- Replaced array() with [] for speed and consistency.
- Replaced == with === where possible to prevent bugs and for speed.
- Reworked valid_date() and valid_decimal helper functions for speed and accuracy according to the locale_format instead of a fixed format.
- Minor Reformatting for clarity.
- Replaced " for ' to prevent the parser from being called.
- Refactored function call names to reflect new names.
- Added missing ; in &nbsp;
- Used String interpolation where useful.

- Spelling fix in comment

Requested Review Changes
- Fixed indentation in Items.php
- Fixed indentation in Attribute.php
- Refactored variable out of long line of code to make it more readable.
2021-07-29 22:22:59 +02:00
gurulenin
517635181c Translated using Weblate (Tamil)
Currently translated at 100.0% (44 of 44 strings)

Translation: opensourcepos/expenses
Translate-URL: https://translate.opensourcepos.org/projects/opensourcepos/expenses/ta/
2021-07-28 15:46:15 +02:00
66 changed files with 1281 additions and 967 deletions

View File

@@ -7,6 +7,11 @@ branches:
services:
- docker
before_install:
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
- sudo apt-get update
- sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce
- docker --version
- curl -L https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` > docker-compose
- chmod +x docker-compose
- sudo mv docker-compose /usr/local/bin
@@ -22,7 +27,7 @@ script:
- docker-compose -f docker-compose.test.yml up --abort-on-container-exit
env:
global:
- DOCKER_COMPOSE_VERSION=1.21.1
- DOCKER_COMPOSE_VERSION=1.29.1
- TAG=$(echo ${TRAVIS_BRANCH} | sed s/feature\\///)
- date=`date +%Y%m%d%H%M%S` && branch=${TRAVIS_BRANCH} && rev=`git rev-parse --short=6 HEAD`
after_success:

27
SECURITY.md Normal file
View File

@@ -0,0 +1,27 @@
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
- [Security Policy](#security-policy)
- [Supported Versions](#supported-versions)
- [Reporting a Vulnerability](#reporting-a-vulnerability)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
# Security Policy
## Supported Versions
We release patches for security vulnerabilities. Which versions are eligible
receiving such patches depend on the CVSS v3.0 Rating:
| CVSS v3.0 | Supported Versions |
| --------- | -------------------------------------------------- |
| 7.3 | 3.5.5 |
## Reporting a Vulnerability
Please report (suspected) security vulnerabilities to
**[jekkos](mailto:jekkos@opensourcepos.org)**. You will receive a response from
us within 48 hours. If the issue is confirmed, we will release a patch as soon
as possible depending on complexity but historically within a few days.

View File

@@ -1,3 +1,18 @@
Version 3.3.5
-------------
+ Translation updates (Romanian, Ukranian, Vietnamese, Thai, Polish, Swedish, Portugese, Arabic, French, Chinese, Dutch, Tamil, Turkish, Spanish)
+ New login page restyle
+ Partial BS5 upgrade
+ Username verification fix on employee insert/update
+ Minor report fixes
+ Attribute encoding fix
+ Grunt/CI updates
+ Database and performance optimizations
+ CSV item import improvements
+ Fix decimal render
+ Translation fallback in other languages than english
+ Fixes for docker to make it run on Windows
Version 3.3.4
-------------
+ Translation updates (Hungarian, Indonesian, Bosnian, Ukranian, Vietnamese, Spanish)

View File

@@ -8,7 +8,7 @@
|
|
*/
$config['application_version'] = '3.4.0-dev';
$config['application_version'] = '3.3.5';
/*
|--------------------------------------------------------------------------

View File

@@ -110,6 +110,7 @@ define('ITEM', 0);
define('ITEM_KIT', 1);
define('ITEM_AMOUNT_ENTRY', 2);
define('ITEM_TEMP', 3);
define('NEW_ITEM', -1);
define('PRINT_ALL', 0);
define('PRINT_PRICED', 1);

View File

@@ -1,6 +1,6 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
require_once("Secure_Controller.php");
require_once('Secure_Controller.php');
class Attributes extends Secure_Controller
{
@@ -24,16 +24,16 @@ class Attributes extends Secure_Controller
$search = $this->input->get('search');
$limit = $this->input->get('limit');
$offset = $this->input->get('offset');
$sort = $this->input->get('sort');
$sort = $this->input->post('sort') === NULL ? definition.definition_name : $this->db->escape($this->input->get('sort'));
$order = $this->input->get('order');
$attributes = $this->Attribute->search($search, $limit, $offset, $sort, $order);
$total_rows = $this->Attribute->get_found_rows($search);
$data_rows = array();
$data_rows = [];
foreach($attributes->result() as $attribute)
{
$attribute->definition_flags = $this->_get_attributes($attribute->definition_flags);
$attribute->definition_flags = $this->get_attributes($attribute->definition_flags);
$data_rows[] = get_attribute_definition_data_row($attribute, $this);
}
@@ -68,7 +68,7 @@ class Attributes extends Secure_Controller
{
$definition_flags = 0;
$flags = (empty($this->input->post('definition_flags'))) ? array() : $this->input->post('definition_flags');
$flags = (empty($this->input->post('definition_flags'))) ? [] : $this->input->post('definition_flags');
foreach($flags as $flag)
{
@@ -129,15 +129,15 @@ class Attributes extends Secure_Controller
public function get_row($row_id)
{
$attribute_definition_info = $this->Attribute->get_info($row_id);
$attribute_definition_info->definition_flags = $this->_get_attributes($attribute_definition_info->definition_flags);
$attribute_definition_info->definition_flags = $this->get_attributes($attribute_definition_info->definition_flags);
$data_row = $this->xss_clean(get_attribute_definition_data_row($attribute_definition_info));
echo json_encode($data_row);
}
private function _get_attributes($definition_flags = 0)
private function get_attributes($definition_flags = 0)
{
$definition_flag_names = array();
$definition_flag_names = [];
foreach (Attribute::get_definition_flags() as $id => $term)
{
if ($id & $definition_flags)
@@ -163,11 +163,11 @@ class Attributes extends Secure_Controller
$data['definition_info'] = $info;
$show_all = Attribute::SHOW_IN_ITEMS | Attribute::SHOW_IN_RECEIVINGS | Attribute::SHOW_IN_SALES;
$data['definition_flags'] = $this->_get_attributes($show_all);
$data['definition_flags'] = $this->get_attributes($show_all);
$selected_flags = $info->definition_flags === '' ? $show_all : $info->definition_flags;
$data['selected_definition_flags'] = $this->_get_attributes($selected_flags);
$data['selected_definition_flags'] = $this->get_attributes($selected_flags);
$this->load->view("attributes/form", $data);
$this->load->view('attributes/form', $data);
}
public function delete_value($attribute_id)
@@ -189,4 +189,4 @@ class Attributes extends Secure_Controller
echo json_encode(array('success' => FALSE, 'message' => $this->lang->line('attributes_definition_cannot_be_deleted')));
}
}
}
}

View File

@@ -25,7 +25,7 @@ class Cashups extends Secure_Controller
$search = $this->input->get('search');
$limit = $this->input->get('limit');
$offset = $this->input->get('offset');
$sort = $this->input->get('sort');
$sort = $this->input->post('sort') === NULL ? 'cashup_id' : $this->db->escape($this->input->get('sort'));
$order = $this->input->get('order');
$filters = array(
'start_date' => $this->input->get('start_date'),

View File

@@ -58,7 +58,7 @@ class Customers extends Persons
$search = $this->input->get('search');
$limit = $this->input->get('limit');
$offset = $this->input->get('offset');
$sort = $this->input->get('sort');
$sort = $this->input->post('sort') === NULL ? LAST_NAME : $this->db->escape($this->input->get('sort'));
$order = $this->input->get('order');
$customers = $this->Customer->search($search, $limit, $offset, $sort, $order);

View File

@@ -17,7 +17,7 @@ class Employees extends Persons
$search = $this->input->get('search');
$limit = $this->input->get('limit');
$offset = $this->input->get('offset');
$sort = $this->input->get('sort');
$sort = $this->input->post('sort') === NULL ? LAST_NAME : $this->db->escape($this->input->get('sort'));
$order = $this->input->get('order');
$employees = $this->Employee->search($search, $limit, $offset, $sort, $order);
@@ -60,6 +60,7 @@ class Employees extends Persons
$person_info->$property = $this->xss_clean($value);
}
$data['person_info'] = $person_info;
$data['employee_id'] = $employee_id;
$modules = array();
foreach($this->Module->get_all_modules()->result() as $module)
@@ -190,5 +191,11 @@ class Employees extends Persons
echo json_encode(array('success' => FALSE, 'message' => $this->lang->line('employees_cannot_be_deleted')));
}
}
public function check_username($employee_id)
{
$exists = $this->Employee->username_exists($employee_id, $this->input->get('username'));
echo !$exists ? 'true' : 'false';
}
}
?>

View File

@@ -30,7 +30,7 @@ class Expenses extends Secure_Controller
$search = $this->input->get('search');
$limit = $this->input->get('limit');
$offset = $this->input->get('offset');
$sort = $this->input->get('sort');
$sort = $this->input->post('sort') === NULL ? 'expense_id' : $this->db->escape($this->input->get('sort'));
$order = $this->input->get('order');
$filters = array(
'start_date' => $this->input->get('start_date'),

View File

@@ -24,7 +24,7 @@ class Expenses_categories extends Secure_Controller
$search = $this->input->get('search');
$limit = $this->input->get('limit');
$offset = $this->input->get('offset');
$sort = $this->input->get('sort');
$sort = $this->input->post('sort') === NULL ? 'category_name' : $this->db->escape($this->input->get('sort'));
$order = $this->input->get('order');
$expense_categories = $this->Expense_category->search($search, $limit, $offset, $sort, $order);

View File

@@ -24,7 +24,7 @@ class Giftcards extends Secure_Controller
$search = $this->input->get('search');
$limit = $this->input->get('limit');
$offset = $this->input->get('offset');
$sort = $this->input->get('sort');
$sort = $this->input->post('sort') === NULL ? 'giftcard_number' : $this->db->escape($this->input->get('sort'));
$order = $this->input->get('order');
$giftcards = $this->Giftcard->search($search, $limit, $offset, $sort, $order);

View File

@@ -59,7 +59,7 @@ class Item_kits extends Secure_Controller
$search = $this->input->get('search');
$limit = $this->input->get('limit');
$offset = $this->input->get('offset');
$sort = $this->input->get('sort');
$sort = $this->input->post('sort') === NULL ? NAME : $this->db->escape($this->input->get('sort'));
$order = $this->input->get('order');
$item_kits = $this->Item_kit->search($search, $limit, $offset, $sort, $order);

View File

File diff suppressed because it is too large Load Diff

View File

@@ -54,10 +54,10 @@ class Sales extends Secure_Controller
public function search()
{
$search = $this->input->get('search');
$limit = $this->input->get('limit');
$limit = $this->input->get('limit');
$offset = $this->input->get('offset');
$sort = $this->input->get('sort');
$order = $this->input->get('order');
$sort = $this->input->post('sort') === NULL ? 'sales.sale_time' : $this->db->escape($this->input->get('sort'));
$order = $this->input->get('order');
$filters = array('sale_type' => 'all',
'location_id' => 'all',

View File

@@ -35,7 +35,7 @@ class Suppliers extends Persons
$search = $this->input->get('search');
$limit = $this->input->get('limit');
$offset = $this->input->get('offset');
$sort = $this->input->get('sort');
$sort = $this->input->post('sort') === NULL ? LAST_NAME : $this->db->escape($this->input->get('sort'));
$order = $this->input->get('order');
$suppliers = $this->Supplier->search($search, $limit, $offset, $sort, $order);

View File

@@ -25,7 +25,7 @@ class Tax_categories extends Secure_Controller
$search = $this->input->get('search');
$limit = $this->input->get('limit');
$offset = $this->input->get('offset');
$sort = $this->input->get('sort');
$sort = $this->input->post('sort') === NULL ? 'tax_category' : $this->db->escape($this->input->get('sort'));
$order = $this->input->get('order');
$tax_categories = $this->Tax_category->search($search, $limit, $offset, $sort, $order);

View File

@@ -29,7 +29,7 @@ class Tax_codes extends Secure_Controller
$search = $this->input->get('search');
$limit = $this->input->get('limit');
$offset = $this->input->get('offset');
$sort = $this->input->get('sort');
$sort = $this->input->post('sort') === NULL ? 'tax_code_name' : $this->db->escape($this->input->get('sort'));
$order = $this->input->get('order');
$tax_codes = $this->Tax_code->search($search, $limit, $offset, $sort, $order);

View File

@@ -25,7 +25,7 @@ class Tax_jurisdictions extends Secure_Controller
$search = $this->input->get('search');
$limit = $this->input->get('limit');
$offset = $this->input->get('offset');
$sort = $this->input->get('sort');
$sort = $this->input->post('sort') === NULL ? 'jurisdiction_name' : $this->db->escape($this->input->get('sort'));
$order = $this->input->get('order');
$tax_jurisdictions = $this->Tax_jurisdiction->search($search, $limit, $offset, $sort, $order);

View File

@@ -57,7 +57,7 @@ class Taxes extends Secure_Controller
$search = $this->input->get('search');
$limit = $this->input->get('limit');
$offset = $this->input->get('offset');
$sort = $this->input->get('sort');
$sort = $this->input->post('sort') === NULL ? 'tax_code_name' : $this->db->escape($this->input->get('sort'));
$order = $this->input->get('order');
$tax_rates = $this->Tax->search($search, $limit, $offset, $sort, $order);

View File

@@ -1,30 +1,20 @@
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
* Generates the header content for the import_items.csv file
*
* @return string Comma separated headers for the CSV file
*/
function generate_import_items_csv($stock_locations,$attributes)
{
$csv_headers = pack("CCC",0xef,0xbb,0xbf); //Encode the Byte-Order Mark (BOM) so that UTF-8 File headers display properly in Microsoft Excel
$csv_headers .= 'Barcode,"Item Name",Category,"Supplier ID","Cost Price","Unit Price","Tax 1 Name","Tax 1 Percent","Tax 2 Name","Tax 2 Percent","Reorder Level",Description,"Allow Alt Description","Item has Serial Number",item_image,HSN';
$csv_headers = pack('CCC',0xef,0xbb,0xbf); //Encode the Byte-Order Mark (BOM) so that UTF-8 File headers display properly in Microsoft Excel
$csv_headers .= 'Id,Barcode,"Item Name",Category,"Supplier ID","Cost Price","Unit Price","Tax 1 Name","Tax 1 Percent","Tax 2 Name","Tax 2 Percent","Reorder Level",Description,"Allow Alt Description","Item has Serial Number",Image,HSN';
$csv_headers .= generate_stock_location_headers($stock_locations);
$csv_headers .= generate_attribute_headers($attributes);
return $csv_headers;
}
/**
* Generates a list of stock location names as a string
*
* @return string Comma-separated list of stock location names
*/
function generate_stock_location_headers($locations)
{
$location_headers = "";
$location_headers = '';
foreach($locations as $location_id => $location_name)
foreach($locations as $location_name)
{
$location_headers .= ',"location_' . $location_name . '"';
}
@@ -32,14 +22,9 @@ function generate_stock_location_headers($locations)
return $location_headers;
}
/**
* Generates a list of attribute names as a string
*
* @return string Comma-separated list of attribute names
*/
function generate_attribute_headers($attribute_names)
{
$attribute_headers = "";
$attribute_headers = '';
unset($attribute_names[-1]);
foreach($attribute_names as $attribute_name)
@@ -50,61 +35,59 @@ function generate_attribute_headers($attribute_names)
return $attribute_headers;
}
/**
* Read the contents of a given CSV formatted file into a two-dimensional array
*
* @param string $file_name Name of the file to read.
* @return boolean|array[][] two-dimensional array with the file contents or FALSE on failure.
*/
function get_csv_file($file_name)
{
ini_set("auto_detect_line_endings", true);
//TODO: current implementation reads the entire file in. This is memory intensive for large files.
//We may want to rework the CSV import feature to read the file in chunks, process it and continue.
//It must be done in a way that does not significantly negatively affect performance.
ini_set('auto_detect_line_endings', true);
$csv_rows = FALSE;
if(($csv_file = fopen($file_name,'r')) !== FALSE)
{
$CI =& get_instance();
$CI->load->helper('security');
$csv_rows = [];
//Skip Byte-Order Mark
if(bom_exists($csv_file) === TRUE)
{
fseek($csv_file, 3);
}
while (($data = fgetcsv($csv_file)) !== FALSE)
$headers = fgetcsv($csv_file);
while(($row = fgetcsv($csv_file)) !== FALSE)
{
//Skip empty lines
if(array(null) !== $data)
//Skip empty lines
if($row !== array(null))
{
$line_array[] = $data;
$csv_rows[] = array_combine($headers, $CI->security->xss_clean($row));
}
}
}
else
{
return FALSE;
fclose($csv_file);
}
return $line_array;
return $csv_rows;
}
/**
* Checks the first three characters of a file for the Byte-Order Mark then returns the file position to the first character.
*
* @param object $file_handle File handle to check
* @return bool Returns TRUE if the BOM exists and FALSE otherwise.
*/
function bom_exists(&$file_handle)
{
$str = fread($file_handle,3);
$result = FALSE;
$candidate = fread($file_handle, 3);
rewind($file_handle);
$bom = pack("CCC", 0xef, 0xbb, 0xbf);
$bom = pack('CCC', 0xef, 0xbb, 0xbf);
if (0 === strncmp($str, $bom, 3))
if (0 === strncmp($candidate, $bom, 3))
{
return TRUE;
}
else
{
return FALSE;
$result = TRUE;
}
return $result;
}
?>

View File

@@ -249,7 +249,7 @@ function get_payment_options()
$config = get_instance()->config;
$lang = get_instance()->lang;
$payments = array();
$payments = [];
if($config->item('payment_options_order') == 'debitcreditcash')
@@ -388,7 +388,7 @@ function to_quantity_decimals($number)
return to_decimals($number, 'quantity_decimals');
}
function to_decimals($number, $decimals=NULL, $type=\NumberFormatter::DECIMAL)
function to_decimals($number, $decimals = NULL, $type=\NumberFormatter::DECIMAL)
{
// ignore empty strings and return
// NOTE: do not change it to empty otherwise tables will show a 0 with no decimal nor currency symbol
@@ -424,7 +424,6 @@ function parse_tax($number)
function parse_decimals($number, $decimals = NULL)
{
// ignore empty strings and return
if(empty($number))
{
return $number;
@@ -442,7 +441,7 @@ function parse_decimals($number, $decimals = NULL)
$config = get_instance()->config;
if($decimals == NULL)
if($decimals === NULL)
{
$decimals = $config->item('currency_decimals');
}
@@ -600,12 +599,13 @@ function dateformat_bootstrap($php_format)
function valid_date($date)
{
return preg_match('/^([0-9]{2,4})-([0-1][0-9])-([0-3][0-9])(?:( [0-2][0-9]):([0-5][0-9]):([0-5][0-9]))?$/', $date);
$config = get_instance()->Appconfig;
return (DateTime::createFromFormat($config->get('dateformat'), $date));
}
function valid_decimal($decimal)
{
return preg_match('/^(\d*\.)?\d+$/', $decimal);
return (preg_match('/^(\d*\.)?\d+$/', $decimal) === 1);
}
?>

View File

@@ -8,6 +8,7 @@ $lang["employees_confirm_restore"] = "Are you sure you want to restore the selec
$lang["employees_current_password"] = "Current Password";
$lang["employees_current_password_invalid"] = "Current Password is invalid";
$lang["employees_employee"] = "Employee";
$lang["employees_username_duplicate"] = "Employee username is already in use. Please choose another one.";
$lang["employees_error_adding_updating"] = "Employee add or update failed";
$lang["employees_error_deleting_demo_admin"] = "You cannot delete the demo admin user";
$lang["employees_error_updating_demo_admin"] = "You cannot change the demo admin user";

View File

@@ -8,6 +8,7 @@ $lang["employees_confirm_restore"] = "Are you sure you want to restore selected
$lang["employees_current_password"] = "Current Password";
$lang["employees_current_password_invalid"] = "Current Password is invalid.";
$lang["employees_employee"] = "Employee";
$lang["employees_username_duplicate"] = "Employee username is already in use. Please choose another one.";
$lang["employees_error_adding_updating"] = "Employee add or update failed.";
$lang["employees_error_deleting_demo_admin"] = "You can not delete the demo admin user.";
$lang["employees_error_updating_demo_admin"] = "You can not change the demo admin user.";

View File

@@ -4,7 +4,7 @@ $lang["attributes_attribute_value_invalid_chars"] = "El valor del atributo no pu
$lang["attributes_confirm_delete"] = "¿Está seguro de que desea borrar los atributos seleccionados?";
$lang["attributes_confirm_restore"] = "¿Está seguro de que desea restaurar los atributos seleccionados?";
$lang["attributes_definition_cannot_be_deleted"] = "No se han podido borrar los atributos seleccionados";
$lang["attributes_definition_error_adding_updating"] = "El atributo %1 no pudo ser agregado o actualizado. Por favor compruebe el registro de errores.";
$lang["attributes_definition_error_adding_updating"] = "El atributo %1 no pudo ser agregado o actulizado. Por favor, compruebe el registro de errores.";
$lang["attributes_definition_flags"] = "Visibilidad del atributo";
$lang["attributes_definition_group"] = "Grupo";
$lang["attributes_definition_id"] = "Id";

View File

@@ -1,10 +1,9 @@
<?php
$lang["tables_all"] = "Todos";
<?php
$lang["tables_all"] = "Todas";
$lang["tables_columns"] = "Columnas";
$lang["tables_hide_show_pagination"] = "Ocultar/Mostrar paginación";
$lang["tables_loading"] = "Por favor espere...";
$lang["tables_page_from_to"] = "Mostrando desde {0} hasta {1} de {2} resultados";
$lang["tables_refresh"] = "Actualizar";
$lang["tables_page_from_to"] = "Mostrando desde {0} hasta {1} - En total {2} resultados";
$lang["tables_refresh"] = "Refrescar";
$lang["tables_rows_per_page"] = "{0} resultados por página";
$lang["tables_toggle"] = "Ocultar/Mostrar";

View File

@@ -1,5 +1,4 @@
<?php
<?php
$lang["cashups_amount"] = "Cantidad";
$lang["cashups_amount_number"] = "Cantidad debe ser un numero";
$lang["cashups_amount_required"] = "Cantidad es un campo obligatorio.";
@@ -9,8 +8,8 @@ $lang["cashups_close_employee"] = "Cerrado por";
$lang["cashups_closed_amount_card"] = "Tarjetas";
$lang["cashups_closed_amount_cash"] = "Efectivo Final";
$lang["cashups_closed_amount_check"] = "Cheques";
$lang["cashups_closed_amount_due"] = "Deudado";
$lang["cashups_closed_amount_total"] = "Total";
$lang["cashups_closed_amount_due"] = "Cobros pendientes";
$lang["cashups_closed_amount_total"] = "Balance Total";
$lang["cashups_closed_date"] = "Fecha de Cierre";
$lang["cashups_confirm_delete"] = "¿Estás seguro de que quieres borrar el Turno seleccionado?";
$lang["cashups_confirm_restore"] = "¿Está seguro de que desea restaurar los Turnos seleccionados?";
@@ -24,7 +23,7 @@ $lang["cashups_is_deleted"] = "Borrado";
$lang["cashups_new"] = "Nuevo Turno";
$lang["cashups_no_cashups_to_display"] = "No hay Turnos para mostrar";
$lang["cashups_none_selected"] = "No ha seleccionado ningún Turno";
$lang["cashups_note"] = "Notas";
$lang["cashups_note"] = "Nota de pago";
$lang["cashups_one_or_multiple"] = "Turno(s)";
$lang["cashups_open_amount_cash"] = "Efectivo Inicial";
$lang["cashups_open_date"] = "Fecha de Apertura";
@@ -34,5 +33,16 @@ $lang["cashups_successful_adding"] = "Turno agregado con éxito";
$lang["cashups_successful_deleted"] = "Turno borrado con éxito";
$lang["cashups_successful_updating"] = "Turno actualizado con éxito";
$lang["cashups_total"] = "Total";
$lang["cashups_transfer_amount_cash"] = "Entrada/Salida de Efectivo";
$lang["cashups_transfer_amount_cash"] = "Salida/Entrada de Efectivo";
$lang["cashups_update"] = "Actualizar Turno";
$lang["cashups_warning"] = "No enviar a menos que sea Abierto o Cerrado en el día";
$lang['cashups_transfer_amount_cash'] = "Entrada/Salida de Efectivo";
$lang['cashups_transfer_amount_cash_minus'] = "Convertir en Efectivo = -";
$lang["cashups_info_employee"] = "Empleado Información de Efectivo";
$lang["cashups_giftcard"] = "Tarjetas de Regalo de Efectivo";
$lang["cashups_enable_expected"] = "Mostrar Ventas";
$lang["cashups_closed_amount_giftcard"] = "Tarjetas de Regalo";
$lang["cashups_confirm_submit"] = "¿Está seguro que desea enviar este efectivo? La jornada estará cerrada.";
$lang["cashups_cash_difference"] = "Diferencia de Efectivo: ";
$lang["cashups_cancel_cashups_enter"] = "Pulse Aceptar para enviar o haga clic en Cancelar para continuar editando";
$lang["cashups_cancel_cashups"] = "Cancelar";

View File

@@ -1,5 +1,4 @@
<?php
<?php
$lang["common_address_1"] = "Dirección 1";
$lang["common_address_2"] = "Dirección 2";
$lang["common_city"] = "Ciudad";
@@ -8,16 +7,16 @@ $lang["common_comments"] = "Comentarios";
$lang["common_common"] = "Común";
$lang["common_confirm_search"] = "Has seleccionado una o más filas. Éstas no estarán seleccionadas después de tu búsqueda. ¿Seguro(a) que quieres hacer esta búsqueda?";
$lang["common_copyrights"] = "© 2010 - %1";
$lang["common_correct_errors"] = "Por favor corrija los errores identificados antes de guardar";
$lang["common_correct_errors"] = "Por favor, corrija los errores identificados antes de guardar";
$lang["common_country"] = "País";
$lang["common_date"] = "Fecha";
$lang["common_delete"] = "Borrar";
$lang["common_det"] = "Detalles";
$lang["common_det"] = "detalles";
$lang["common_download_import_template"] = "Descargar Plantilla de Importación de CSV (CSV)";
$lang["common_edit"] = "Editar";
$lang["common_edit"] = "editar";
$lang["common_email"] = "Email";
$lang["common_email_invalid_format"] = "El correo-e no está en el formato requerido.";
$lang["common_export_csv"] = "Exportar CSV";
$lang["common_export_csv"] = "Reporte en CSV";
$lang["common_export_csv_no"] = "No";
$lang["common_export_csv_yes"] = "Si";
$lang["common_fields_required_message"] = "Los campos en rojo son requeridos";
@@ -28,12 +27,12 @@ $lang["common_gender"] = "Género";
$lang["common_gender_female"] = "F";
$lang["common_gender_male"] = "M";
$lang["common_gender_undefined"] = "";
$lang["common_icon"] = "";
$lang["common_id"] = "Id";
$lang["common_icon"] = "Icono";
$lang["common_id"] = "Identificación";
$lang["common_import"] = "Importar";
$lang["common_import_change_file"] = "Cambiar";
$lang["common_import_csv"] = "Importar CSV";
$lang["common_import_full_path"] = "Se requiere la ruta completa del archivo CSV";
$lang["common_import_full_path"] = "La ruta completa al archivo CSV es requerida";
$lang["common_import_remove_file"] = "Quitar";
$lang["common_import_select_file"] = "Selecciona archivo";
$lang["common_inv"] = "Inv";
@@ -42,9 +41,9 @@ $lang["common_last_name_required"] = "Apellidos es un campo requerido.";
$lang["common_last_page"] = "Ultima";
$lang["common_learn_about_project"] = "para leer la información más reciente acerca del proyecto.";
$lang["common_list_of"] = "Lista de";
$lang["common_logo"] = "";
$lang["common_logo_mark"] = "";
$lang["common_logout"] = "Salir";
$lang["common_logo"] = "Logotipo";
$lang["common_logo_mark"] = "Marca";
$lang["common_logout"] = "Cerrar sesión";
$lang["common_migration_needed"] = "La migración de la base de datos hacia %1 comenzará después de iniciar sesión.";
$lang["common_new"] = "Nuevo";
$lang["common_no"] = "";
@@ -64,8 +63,8 @@ $lang["common_return_policy"] = "Política de Devolución";
$lang["common_search"] = "Buscar";
$lang["common_search_options"] = "Opciones de búsqueda";
$lang["common_searched_for"] = "Buscado";
$lang["common_software_short"] = "";
$lang["common_software_title"] = "";
$lang["common_software_short"] = "OSPOS";
$lang["common_software_title"] = "Punto de Venta Open Source";
$lang["common_state"] = "Estado";
$lang["common_submit"] = "Enviar";
$lang["common_total_spent"] = "Total gastado";
@@ -73,7 +72,40 @@ $lang["common_unknown"] = "Desconocido";
$lang["common_view_recent_sales"] = "Ver Ventas Recientes";
$lang["common_website"] = "opensourcepos.org";
$lang["common_welcome"] = "Bienvenido(a)";
$lang["common_welcome_message"] = "Bienvenido(a) a OSPOS. Haz click en algún módulo para empezar.";
$lang["common_welcome_message"] = "Bienvenido(a) a OSPOS. Haz click en algún módulo, para empezar.";
$lang["common_yes"] = "";
$lang["common_you_are_using_ospos"] = "Estás usando Open Source Point Of Sale Versión";
$lang["common_zip"] = "Código Postal";
$lang["commom_carrier"] = "Operadores
AT&T
@txt.att.net
Boost Mobile\t
@smsmyboostmobile.com
Cricket\t
@sms.cricketwireless.net
Sprint\t
@messaging.sprintpcs.com
T-Mobile
@tmomail.net
U.S. Cellular\t
@email.uscc.net
Verizon\t
@vtext.com
Virgin Mobile\t
@vmobl.com";
$lang["common_position"] = "Posición";
$lang["common_people"] = "Personas";
$lang["common_manager"] = "Administrador";
$lang["common_fields_required_message_unique"] = "Los campos en rojo son obligatorios y deben ser únicos";
$lang["common_dashboard"] = "Tablero";
$lang["common_color"] = "Colores del tema";
$lang["common_clerk"] = "Empleado";
$lang["common_admin"] = "Administrador";

View File

@@ -1,5 +1,4 @@
<?php
<?php
$lang["config_address"] = "Dirección del Comercio";
$lang["config_address_required"] = "Dirección del Comercio es requerida.";
$lang["config_all_set"] = "¡Todos los permisos de archivo están configurados correctamente!";
@@ -18,7 +17,7 @@ $lang["config_barcode_generate_if_empty"] = "Generar si esta vacio.";
$lang["config_barcode_height"] = "Alto (px)";
$lang["config_barcode_id"] = "Id/Artículo";
$lang["config_barcode_info"] = "Información de Configuración de Código de Barras";
$lang["config_barcode_layout"] = "Presentación Código Barras";
$lang["config_barcode_layout"] = "Diseño Código de Barras";
$lang["config_barcode_name"] = "Nombre";
$lang["config_barcode_number"] = "UPC/EAN/ISBN";
$lang["config_barcode_number_in_row"] = "Número en la línea";
@@ -27,14 +26,14 @@ $lang["config_barcode_page_width"] = "Mostrar ancho de página";
$lang["config_barcode_price"] = "Precio";
$lang["config_barcode_second_row"] = "Fila 2";
$lang["config_barcode_third_row"] = "Fila 3";
$lang["config_barcode_tooltip"] = "Cuidado: esta característica puede causar duplicados ser importados o creados. No lo use si no quiere códigos de barras duplicadas.";
$lang["config_barcode_tooltip"] = "Cuidado: esta característica puede causar duplicados ser importados o creados, No lo use si no quiere códigos de barras duplicadas.";
$lang["config_barcode_type"] = "Tipo de Código de Barra";
$lang["config_barcode_width"] = "Ancho (px)";
$lang["config_bottom"] = "Abajo";
$lang["config_cash_decimals"] = "Decimales del efectivo";
$lang["config_cash_decimals"] = "Decimales del Efectivo";
$lang["config_cash_decimals_tooltip"] = "Si los decimales del efectivo y del tipo de moneda son los mismos no habrá redondeo de los pagos en efectivo.";
$lang["config_cash_rounding"] = "Redondeo de efectivo";
$lang["config_category_dropdown"] = "";
$lang["config_cash_rounding"] = "Redondeo del Efectivo";
$lang["config_category_dropdown"] = "Mostrar Categoria como desplegable";
$lang["config_center"] = "Centro";
$lang["config_comma"] = "coma";
$lang["config_company"] = "Nombre del Comercio";
@@ -44,16 +43,16 @@ $lang["config_company_remove_image"] = "Quitar Imagen";
$lang["config_company_required"] = "Nombre del Comercio es requerido";
$lang["config_company_select_image"] = "Seleccionar Imagen";
$lang["config_company_website_url"] = "Sitio Web no es una URL estándar (http://...).";
$lang["config_country_codes"] = "Codigo de pais";
$lang["config_country_codes"] = "Código de País";
$lang["config_country_codes_tooltip"] = "Lista de codigo de paises separado por coma para busqueda de direcciones.";
$lang["config_currency_code"] = "Código de Moneda";
$lang["config_currency_decimals"] = "Decimales de moneda";
$lang["config_currency_symbol"] = "Símbolo de moneda";
$lang["config_customer_reward"] = "Premio";
$lang["config_currency_decimals"] = "Decimales del tipo de moneda";
$lang["config_currency_symbol"] = "Símbolo de la moneda";
$lang["config_customer_reward"] = "Cat. de Cliente";
$lang["config_customer_reward_duplicate"] = "La recompensa debe ser única.";
$lang["config_customer_reward_enable"] = "Activar los premios para los consumidores";
$lang["config_customer_reward_invalid_chars"] = "El nombre del premio no puede contener el carácter '_'";
$lang["config_customer_reward_required"] = "El premio es un campo obligatorio";
$lang["config_customer_reward_enable"] = "Activar recompenza para clientes";
$lang["config_customer_reward_invalid_chars"] = "El nombre de la recompenza no puede contener el carácter '_'";
$lang["config_customer_reward_required"] = "El nombre es un campo obligatorio";
$lang["config_customer_sales_tax_support"] = "Habilitar la gestión de impuestos en las ventas a clientes";
$lang["config_date_or_time_format"] = "Filtro de fecha y hora";
$lang["config_datetimeformat"] = "Formato de fecha y hora";
@@ -74,7 +73,7 @@ $lang["config_default_item_columns"] = "Columnas de Productos Visibles por Defec
$lang["config_default_origin_tax_code"] = "Código de impuesto por defecto";
$lang["config_default_receivings_discount"] = "Descuento por Defecto para Recibos";
$lang["config_default_receivings_discount_number"] = "El Descuento por Defecto Para Los Recibos Debe Ser Un Número.";
$lang["config_default_receivings_discount_required"] = "El Descuento Predeterminado para los Recibos es un campo obligatorio.";
$lang["config_default_receivings_discount_required"] = "El Descuento Predeterminado para los Recibos es un campo obligatorio.";
$lang["config_default_sales_discount"] = "Descuento Predeterminado para Ventas";
$lang["config_default_sales_discount_number"] = "Descuento en ventas predeterminado debe ser un número.";
$lang["config_default_sales_discount_required"] = "Descuento en ventas predeterminado es requerido.";
@@ -96,7 +95,7 @@ $lang["config_dinner_table_enable"] = "Activar Mesa de Restaurante";
$lang["config_dinner_table_invalid_chars"] = "El nombre de la mesa no puede contener '_'.";
$lang["config_dinner_table_required"] = "La mesa es un campo obligatorio.";
$lang["config_dot"] = "punto";
$lang["config_email"] = "Correo-e";
$lang["config_email"] = "E-mail";
$lang["config_email_configuration"] = "Configuracion de correo";
$lang["config_email_mailpath"] = "Ruta a Sendmail";
$lang["config_email_protocol"] = "Protocolo";
@@ -127,7 +126,7 @@ $lang["config_financial_year_may"] = "1º de Mayo";
$lang["config_financial_year_nov"] = "1º de Noviembre";
$lang["config_financial_year_oct"] = "1º de Octubre";
$lang["config_financial_year_sep"] = "1º de Septiembre";
$lang["config_floating_labels"] = "";
$lang["config_floating_labels"] = "Etiquetas flotantes";
$lang["config_gcaptcha_enable"] = "Inicio de sesión con reCAPTCHA";
$lang["config_gcaptcha_secret_key"] = "Llave secreta reCAPTCHA";
$lang["config_gcaptcha_secret_key_required"] = "reCAPTCHA Secret Key es requerida si se usa";
@@ -147,7 +146,7 @@ $lang["config_image_restrictions"] = "Restricciones de carga de imágenes";
$lang["config_include_hsn"] = "Incluir Soporte para Códigos HSN";
$lang["config_info"] = "Información";
$lang["config_info_configuration"] = "Información del Comercio";
$lang["config_input_groups"] = "";
$lang["config_input_groups"] = "Introducir Grupos";
$lang["config_integrations"] = "Componentes Integrados";
$lang["config_integrations_configuration"] = "Componentes de Terceros Integrados";
$lang["config_invoice"] = "Factura";
@@ -157,8 +156,8 @@ $lang["config_invoice_email_message"] = "Plantilla de Factura por Email";
$lang["config_invoice_enable"] = "Activar Facturación";
$lang["config_invoice_printer"] = "Impresora Facturadora";
$lang["config_invoice_type"] = "Tipo de Factura";
$lang["config_is_readable"] = "";
$lang["config_is_writable"] = "es grabable, pero los permisos son superiores a 750.";
$lang["config_is_readable"] = "es legible, pero los permisos de lectura son incorrectos. Pongalos en 640 o 660 cargue nuevamente.";
$lang["config_is_writable"] = "es escribible, pero los permisos de escritura son incorrectos. Pongalos en 750 y recargue la página de nuevo.";
$lang["config_jsprintsetup_required"] = "Advertencia!Esta funcionalidad desactivada solo funciona con el addon jsPrintSetup de FireFox instalado. Guardar de todas formas?";
$lang["config_language"] = "Idioma";
$lang["config_last_used_invoice_number"] = "Último numero de factura utilizado";
@@ -177,16 +176,16 @@ $lang["config_locale_info"] = "Informacion de la configuracion de la zona";
$lang["config_location"] = "Inventario";
$lang["config_location_configuration"] = "Ubicación de Inventario";
$lang["config_location_info"] = "Información de Configuración de Ubicación";
$lang["config_login_form"] = "";
$lang["config_login_form"] = "Estilo del formulario de inicio de sesión";
$lang["config_logout"] = "Desea hacer un respaldo antes de salir? Pulsa [OK] para respaldar o [Cancelar] para salir.";
$lang["config_mailchimp"] = "Correo Chimp";
$lang["config_mailchimp_api_key"] = "Clave de la API Mailchimp";
$lang["config_mailchimp"] = "Correo MailChimp";
$lang["config_mailchimp_api_key"] = "Clave API de Mailchimp";
$lang["config_mailchimp_configuration"] = "Configuración de Mailchimp";
$lang["config_mailchimp_key_successfully"] = "Clave API correcta.";
$lang["config_mailchimp_key_unsuccessfully"] = "Clave API incorrecta.";
$lang["config_mailchimp_lists"] = "Lista(s) de Mailchimp";
$lang["config_mailchimp_tooltip"] = "Haga clic en el icono de una clave de API.";
$lang["config_message"] = "Mensaje";
$lang["config_message"] = "Mensajes SMS";
$lang["config_message_configuration"] = "Configuracion del mensaje";
$lang["config_msg_msg"] = "Texto del mensaje guardado";
$lang["config_msg_msg_placeholder"] = "Si desea usar un formato de SMS guarde su mensaje aquí, en caso contrario deje en blanco.";
@@ -205,18 +204,18 @@ $lang["config_number_locale"] = "Localización";
$lang["config_number_locale_invalid"] = "Localización ingresada invalida. Revisa el link en el tooltip para encontrar informacion.";
$lang["config_number_locale_required"] = "Numero localizacion es un campo requerido.";
$lang["config_number_locale_tooltip"] = "Encontrar una zonificacion adecuada en este enlace.";
$lang["config_os_timezone"] = "";
$lang["config_os_timezone"] = "Zona Horaria Local:";
$lang["config_ospos_info"] = "Información de la Instalación OSPOS";
$lang["config_payment_options_order"] = "Orden de opciones de pago";
$lang["config_perm_risk"] = "Permisos superiores a 750 dejan este software en riesgo.";
$lang["config_phone"] = "Teléfono del Comercio";
$lang["config_perm_risk"] = "Los permisos incorrectos dejan a este software en riesgo.";
$lang["config_phone"] = "Teléfono comercial";
$lang["config_phone_required"] = "Teléfono del Comercio es requerido.";
$lang["config_print_bottom_margin"] = "Margen Inferior";
$lang["config_print_bottom_margin_number"] = "Margen Inferior debe ser un número.";
$lang["config_print_bottom_margin_required"] = "Margen Inferior es requerido.";
$lang["config_print_delay_autoreturn"] = "Devolver automatico a Vender";
$lang["config_print_delay_autoreturn_number"] = "Tiempo espera para Devolver a la venta es requerido.";
$lang["config_print_delay_autoreturn_required"] = "Tiempo espera Devolver a la Venta debe ser numero.";
$lang["config_print_delay_autoreturn"] = "Regresar automaticamente a Vender";
$lang["config_print_delay_autoreturn_number"] = "Tiempo espera requerido para regresar a ventas.";
$lang["config_print_delay_autoreturn_required"] = "El tiempo espera debe ser numérico.";
$lang["config_print_footer"] = "Imprimir el pie de página del navegador";
$lang["config_print_header"] = "Imprimir el encabezado del navegador";
$lang["config_print_left_margin"] = "Margen Izquierdo";
@@ -233,7 +232,7 @@ $lang["config_print_silently"] = "Mostrar configuracion pre- impresión";
$lang["config_print_top_margin"] = "Margen Superior";
$lang["config_print_top_margin_number"] = "Margen Superior debe ser un número.";
$lang["config_print_top_margin_required"] = "Margen Superior es requerido.";
$lang["config_quantity_decimals"] = "Cantidad de decimales";
$lang["config_quantity_decimals"] = "Decimales de Cantidades";
$lang["config_quote_default_comments"] = "Comentario inicial de cotizaciones";
$lang["config_receipt"] = "Recibo";
$lang["config_receipt_configuration"] = "Parámetros de Impresión";
@@ -251,13 +250,13 @@ $lang["config_receipt_show_tax_ind"] = "Mostrar indicador de impuestos";
$lang["config_receipt_show_taxes"] = "Mostrar impuestos";
$lang["config_receipt_show_total_discount"] = "Mostrar Descuento Total";
$lang["config_receipt_template"] = "Formato de recibo";
$lang["config_receiving_calculate_average_price"] = "Cal. precio prom. (Recepción)";
$lang["config_receiving_calculate_average_price"] = "Cambiar precio de coste. (Recepción)";
$lang["config_recv_invoice_format"] = "Formato de Factura de Recepción";
$lang["config_register_mode_default"] = "Modo de registro por defecto";
$lang["config_report_an_issue"] = "";
$lang["config_return_policy_required"] = "Política de Devolución es requerida.";
$lang["config_reward"] = "Premio";
$lang["config_reward_configuration"] = "Configuración de premios";
$lang["config_report_an_issue"] = "Informe de algún problema";
$lang["config_return_policy_required"] = "Política de Devolución requerida.";
$lang["config_reward"] = "Recompenzas";
$lang["config_reward_configuration"] = "Configuración de Recompenzas";
$lang["config_right"] = "Derecha";
$lang["config_sales_invoice_format"] = "Formato de Facturas de Venta";
$lang["config_sales_quote_format"] = "Formato de presupuesto de las ventas";
@@ -276,12 +275,12 @@ $lang["config_suggestions_first_column"] = "Columna 1";
$lang["config_suggestions_layout"] = "Sugerencias de búsqueda";
$lang["config_suggestions_second_column"] = "Columna 2";
$lang["config_suggestions_third_column"] = "Columna 3";
$lang["config_system_conf"] = "Setup & Conf";
$lang["config_system_conf"] = "Sistema OSPOS";
$lang["config_system_info"] = "System Info";
$lang["config_table"] = "Mesa";
$lang["config_table_configuration"] = "Configuración de Mesa";
$lang["config_takings_printer"] = "Impresión de retenciones";
$lang["config_tax"] = "Imp";
$lang["config_tax"] = "Impuestos";
$lang["config_tax_category"] = "Categoría impuesto";
$lang["config_tax_category_duplicate"] = "Categoría de impuesto ingresada ya existe.";
$lang["config_tax_category_invalid_chars"] = "Categoría de impuesto ingresada es invalida.";
@@ -292,13 +291,38 @@ $lang["config_tax_decimals"] = "Decimales de impuestos";
$lang["config_tax_id"] = "Identificador del Impuesto";
$lang["config_tax_included"] = "Impuestos incluidos";
$lang["config_theme"] = "Tema";
$lang["config_theme_preview"] = "";
$lang["config_theme_preview"] = "Vista Previa del Tema:";
$lang["config_thousands_separator"] = "Separador de miles";
$lang["config_timezone"] = "Zona Horaria";
$lang["config_timezone_error"] = "";
$lang["config_timezone_error"] = "La zona horaria de OSPOS es diferente de tu zona horaria local.";
$lang["config_top"] = "Arriba";
$lang["config_use_destination_based_tax"] = "Usar Impuesto Basado en Destino";
$lang["config_user_timezone"] = "";
$lang["config_user_timezone"] = "Zona Horaria OSPOS:";
$lang["config_website"] = "Sitio Web";
$lang["config_work_order_enable"] = "Soporte Ordenes de Trabajo";
$lang["config_work_order_format"] = "Formato Ordenes de trabajo";
$lang['config_wholesale_markup'] = "Marcado al por mayor";
$lang["config_suggestions_fifth_column"] = "Columna 5";
$lang["config_suggestions_fourth_column"] = "Columna 4";
$lang["config_show_due_enable"] = "Mostrar vencimientos de clientes";
$lang["config_service_charge"] = "Costo de Servicio";
$lang["config_receipt_category"] = "Recibo con categoría";
$lang["config_item_markup"] = "Marcado de Artículo";
$lang['config_enable_avatar_tooltip'] = "Habilitar Avatares para que se muestren en el menú desplegable Categorías y Registrarse ";
$lang['config_enable_avatar'] = "Habilitar Avatar";
$lang['config_enable_right_bar_tooltip'] = "Cambiar la barra lateral de izquierda a derecha ";
$lang['config_enable_right_bar'] = " Habilitar la barra lateral derecha";
$lang['config_enable_new_look'] = "Habilitar nueva apariencia";
$lang["config_enable_dropdown_tooltip"] = "No podrá agregar nuevas categorías si esto está marcado";
$lang["config_default_tax_rate_3"] = "Tasa de Impuestos 3";
$lang["config_current_employee_only"] = "Mostrar registro sólo del empleado actual";
$lang["config_company_avatar"] = "Avatar de Empleado";
$lang["config_change_apperance_tooltip"] = "Cambiar Aspecto de OSPOS";
$lang["config_quick_cash_enable"] = "Activar Botones de Efectivo";
$lang["config_cash_button_6"] = "Botón 6";
$lang["config_cash_button_5"] = "Botón 5";
$lang["config_cash_button_4"] = "Botón 4";
$lang["config_cash_button_3"] = "Botón 3";
$lang["config_cash_button_2"] = "Botón 2";
$lang["config_cash_button_1"] = "Botón 1";
$lang["config_cash_button"] = "Botones de Efectivo Rápido";

View File

@@ -1,8 +1,7 @@
<?php
<?php
$lang["customers_account_number"] = "Cuenta #";
$lang["customers_account_number_duplicate"] = "Este número de cuenta ya esta en la base de datos.";
$lang["customers_available_points"] = "Puntos disponibles";
$lang["customers_available_points"] = "Puntos Disponibles";
$lang["customers_average"] = "Gasto promedio";
$lang["customers_avg_discount"] = "Descuento promedio";
$lang["customers_basic_information"] = "Información";
@@ -32,7 +31,7 @@ $lang["customers_mailchimp_activity_open"] = "Correo abierto";
$lang["customers_mailchimp_activity_total"] = "Correo enviado";
$lang["customers_mailchimp_activity_unopen"] = "Correo sin abrir";
$lang["customers_mailchimp_email_client"] = "Correo del cliente";
$lang["customers_mailchimp_info"] = "Mail chimp";
$lang["customers_mailchimp_info"] = "Correo Mailchimp";
$lang["customers_mailchimp_member_rating"] = "Porcentaje";
$lang["customers_mailchimp_status"] = "Estado";
$lang["customers_mailchimp_vip"] = "VIP";
@@ -52,3 +51,4 @@ $lang["customers_taxable"] = "Gravable";
$lang["customers_total"] = "Total";
$lang["customers_update"] = "Actualizar Cliente";
$lang["rewards_package"] = "Paquete de premios";
$lang["customers_available_points_value"] = "Puntos Disponibles";

View File

@@ -1,5 +1,4 @@
<?php
<?php
$lang["employees_basic_information"] = "Información Básica de Empleados";
$lang["employees_cannot_be_deleted"] = "No se pudieron borrar empleados. Uno o más empleados tiene ventas procesadas o estás tratando de borrarte a tí mismo(a).";
$lang["employees_change_password"] = "Cambiar Contraseña";
@@ -35,3 +34,9 @@ $lang["employees_update"] = "Actualizar Empleado";
$lang["employees_username"] = "Usuario";
$lang["employees_username_minlength"] = "El nombre de usuario debe ser por lo menos, 5 caracteres.";
$lang["employees_username_required"] = "Nombre de usuario es requerido.";
$lang["employees_manager"] = "Encargado";
$lang["employees_username_duplicate"] = "Nombre de Usuario de Empleado yá está en uso. Por favor escoja otro.";
$lang["employees_commission"] = "Tasa de Comisión";
$lang["employees_clerk"] = "Empleado";
$lang["employees_change_employee"] = "Cambio de Empleado";
$lang["employees_administrator"] = "Administrador";

View File

@@ -1,5 +1,4 @@
<?php
<?php
$lang["expenses_add_item"] = "Agregar Gasto";
$lang["expenses_amount"] = "Monto";
$lang["expenses_amount_number"] = "Monto debe ser numerico";
@@ -12,8 +11,8 @@ $lang["expenses_categories_name"] = "Categoria";
$lang["expenses_category_required"] = "categoria es un campo requerido";
$lang["expenses_check"] = "Cheque";
$lang["expenses_check_filter"] = "Cheque";
$lang["expenses_confirm_delete"] = "¿Esta seguro de querer borrar los gastos seleccionados?";
$lang["expenses_confirm_restore"] = "¿Esta seguro de querer recuperar los gastos seleccionados?";
$lang["expenses_confirm_delete"] = "¿Esta seguro que quiere borrar (el)los gasto(s) seleccionado(s)?";
$lang["expenses_confirm_restore"] = "¿Está seguro que quiere restaurar (el)los gasto(s) seleccionado(s)?";
$lang["expenses_credit"] = "Tarjeta Credito";
$lang["expenses_credit_filter"] = "Tarjeta Credito";
$lang["expenses_date"] = "Fecha";
@@ -44,3 +43,6 @@ $lang["expenses_supplier_name"] = "Proveedor";
$lang["expenses_supplier_tax_code"] = "Codigo Imp";
$lang["expenses_tax_amount"] = "Imp";
$lang["expenses_update"] = "Actualizar Gasto";
$lang["expenses_tax_amount_number"] = "Número de Importe de Impuestos";
$lang["expenses_new_supplier"] = "Nuevo Proveedor";
$lang["expenses_ip_address"] = "Dirección IP";

View File

@@ -1,29 +1,28 @@
<?php
<?php
$lang["item_kits_add_item"] = "Agregar Artículo";
$lang["item_kits_all"] = "Todo";
$lang["item_kits_cannot_be_deleted"] = "Borrado de Kit(s) de Artículos fallido.";
$lang["item_kits_confirm_delete"] = "¿Estás seguro(a) de querer borrar los kits seleccionados?";
$lang["item_kits_confirm_restore"] = "Esta seguro de quere restaurar lo(s) kit(s) seleccionado(s)?";
$lang["item_kits_description"] = "Descripción del Kit de Artículos";
$lang["item_kits_confirm_restore"] = "Esta seguro de quere restaurar los kit seleccionados?";
$lang["item_kits_description"] = "Descripción";
$lang["item_kits_discount"] = "Descuento";
$lang["item_kits_discount_fixed"] = "Descuento Fijo";
$lang["item_kits_discount_percent"] = "Porcentaje de descuento";
$lang["item_kits_discount_type"] = "Tipo de Descuento";
$lang["item_kits_error_adding_updating"] = "Error agregando/actualizando Kit de Artículos.";
$lang["item_kits_find_kit_item"] = "Kit de Artículo";
$lang["item_kits_info"] = "Info de Kit de Artículos";
$lang["item_kits_find_kit_item"] = "Buscar Kit";
$lang["item_kits_info"] = "Info de Kit";
$lang["item_kits_item"] = "Artículo";
$lang["item_kits_item_kit_number"] = "";
$lang["item_kits_item_kit_number_duplicate"] = "";
$lang["item_kits_item_kit_number"] = "Código";
$lang["item_kits_item_number_duplicate"] = "Código de Kit Duplicado";
$lang["item_kits_item_number"] = "";
$lang["item_kits_items"] = "Artículos";
$lang["item_kits_kit"] = "Id Kit";
$lang["item_kits_kit"] = "Id";
$lang["item_kits_kit_and_components"] = "Artículos y componentes";
$lang["item_kits_kit_and_stock"] = "Artículos y stocks";
$lang["item_kits_kit_only"] = "Solo artículos";
$lang["item_kits_name"] = "Nombre del Kit de Artículos";
$lang["item_kits_new"] = "Nuevo Kit de Artículos";
$lang["item_kits_name"] = "Nombre del Kit";
$lang["item_kits_new"] = "Nuevo Kit";
$lang["item_kits_no_item_kits_to_display"] = "Sin kits de artículos para mostrar.";
$lang["item_kits_none_selected"] = "No has seleccionado Kits de Artículos.";
$lang["item_kits_one_or_multiple"] = "Kit(s) de Artículos";
@@ -31,8 +30,10 @@ $lang["item_kits_price_option"] = "Opción del precio";
$lang["item_kits_priced_only"] = "Solo con precio";
$lang["item_kits_print_option"] = "Opciones de impresión";
$lang["item_kits_quantity"] = "Cantidad";
$lang["item_kits_sequence"] = "Secuencia";
$lang["item_kits_sequence"] = "Orden";
$lang["item_kits_successful_adding"] = "Has agregado satisfactoriamente un Kit de Artículos";
$lang["item_kits_successful_deleted"] = "Has borrado satisfactoriamente";
$lang["item_kits_successful_updating"] = "Has actualizado satisfactoriamente un Kit de Artículos";
$lang["item_kits_update"] = "Actualizar Kit de Artículos";
$lang["item_kits_unit_price"] = "Precio Unitario";
$lang["item_kits_item_kit_number_duplicate"] = "El Número del Kit de Artículo yá está presente en la base de datos.";

View File

@@ -1,5 +1,4 @@
<?php
<?php
$lang["items_add_minus"] = "Inventario a agregar/substraer.";
$lang["items_allow_alt_description"] = "Permitir Descripción Alternativa";
$lang["items_amount_entry"] = "Monto entrada";
@@ -18,9 +17,9 @@ $lang["items_confirm_bulk_edit"] = "¿Estás seguro(a) de querer editar los art
$lang["items_confirm_bulk_edit_wipe_taxes"] = "Toda la información de impuesto del articulo sera cambiada.";
$lang["items_confirm_delete"] = "¿Estás seguro(a) de querer borrar los artículos seleccionados?";
$lang["items_confirm_restore"] = "Esta seguro de querer restaurar lo(s) articulo(s) seleccionada(s)?";
$lang["items_cost_price"] = "Precio de Compra";
$lang["items_cost_price_number"] = "Precio de Compra debe ser número.";
$lang["items_cost_price_required"] = "Precio de Compra es requerido.";
$lang["items_cost_price"] = "Precio de Costo";
$lang["items_cost_price_number"] = "Precio de Costo debe ser un número.";
$lang["items_cost_price_required"] = "Precio de Costo es requerido.";
$lang["items_count"] = "Actualizar Inventario";
$lang["items_csv_import_failed"] = "Falló la importación de Hoja de Cálculo";
$lang["items_csv_import_nodata_wrongformat"] = "El archivo subido no tiene datos o el formato es incorrecto.";
@@ -68,7 +67,7 @@ $lang["items_none"] = "Ninguno";
$lang["items_none_selected"] = "No has seleccionado artículos para editar";
$lang["items_nonstock"] = "Sin stock";
$lang["items_number_information"] = "Número del Artículo";
$lang["items_number_required"] = "UPC/EAN/ISBN es requerido.";
$lang["items_number_required"] = "UPC/EAN/ISBN es requerido";
$lang["items_one_or_multiple"] = "articulo(s)";
$lang["items_pack_name"] = "Nombre del Paquete";
$lang["items_qty_per_pack"] = "Cantidad por Paquete";
@@ -80,11 +79,11 @@ $lang["items_remove_image"] = "Quitar Imagen";
$lang["items_reorder_level"] = "Cantidad Mínima";
$lang["items_reorder_level_number"] = "Cantidad Mínima debe ser número.";
$lang["items_reorder_level_required"] = "Cantidad Mínima es requerido.";
$lang["items_retrive_item_info"] = "Obtener Info de Artículo";
$lang["items_retrive_item_info"] = "Obtener Información de Artículo";
$lang["items_sales_tax_1"] = "Impuesto de Ventas 1";
$lang["items_sales_tax_2"] = "Impuesto de Ventas 2";
$lang["items_search_attributes"] = "Atributos de búsqueda";
$lang["items_select_image"] = "Seleccionar Imagen";
$lang["items_search_attributes"] = "Atributos de búsqueda. Formato de fecha Y-m-d";
$lang["items_select_image"] = "Seleccionar Imagen";
$lang["items_serialized_items"] = "Artículos Serializados";
$lang["items_standard"] = "Estándar";
$lang["items_stock"] = "Existencia";
@@ -110,3 +109,10 @@ $lang["items_unit_price_required"] = "Precio de Venta es requerido.";
$lang["items_upc_database"] = "Base de datos UPC";
$lang["items_update"] = "Actualizar Artículo";
$lang["items_use_inventory_menu"] = "Usar Menú de Inventario";
$lang["items_markup"] = "El marcado de elementos está habilitado";
$lang["items_tax_3"] = "Impuestos 3";
$lang["items_item_id"] = "Id del Artículo";
$lang["items_is_printed"] = "No impreso";
$lang["items_edit"] = "Editar";
$lang["items_categories"] = "Categorías. Seleccione el número de artículo.";
$lang["items_category_new"] = "Nueva Categoría";

View File

@@ -1,13 +1,12 @@
<?php
<?php
$lang["login_gcaptcha"] = "No soy un robot.";
$lang["login_go"] = "Ir";
$lang["login_invalid_gcaptcha"] = "Inválido, no soy un robot.";
$lang["login_invalid_gcaptcha"] = "Por favor verifique si usted no es un robot.";
$lang["login_invalid_installation"] = "La instalación no es correcta, comprueba el fichero php.ini.";
$lang["login_invalid_username_and_password"] = "Usuario o Contraseña no válidos.";
$lang["login_invalid_username_and_password"] = "Usuario y/o Contraseña no validos.";
$lang["login_login"] = "Iniciar Sesión";
$lang["login_logout"] = "";
$lang["login_migration_needed"] = "";
$lang["login_logout"] = "Cerrar sesión";
$lang["login_migration_needed"] = "La migración de la base de datos a %1 se iniciará después del inicio de sesión.";
$lang["login_password"] = "Contraseña";
$lang["login_username"] = "Usuario";
$lang["login_welcome"] = "";
$lang["login_welcome"] = "Bienvenido a %1!";

View File

@@ -1,9 +1,8 @@
<?php
<?php
$lang["module_attributes"] = "Atributos";
$lang["module_attributes_desc"] = "Agregar, Actualizar, Eliminar y Buscar atributos.";
$lang["module_both"] = "Ambos";
$lang["module_cashups"] = "Turnos";
$lang["module_cashups"] = "Día de apertura o Cierre";
$lang["module_cashups_desc"] = "Agregar, Actualizar, Borrar y Buscar Turnos.";
$lang["module_config"] = "Configuración de la Tienda";
$lang["module_config_desc"] = "Cambiar la configuración de OSPOS.";
@@ -39,3 +38,9 @@ $lang["module_suppliers"] = "Proveedores";
$lang["module_suppliers_desc"] = "Agregar, Actualizar, Borrar y Buscar Proveedores.";
$lang["module_taxes"] = "Impuestos";
$lang["module_taxes_desc"] = "Configurar Impuestos de Ventas.";
$lang["module_timeclocks_categories_desc"] = "Agregar, Actualizar, Borrar, y buscar Reloj de Registro de Categorías";
$lang["module_timeclocks_categories"] = "Reloj de Registro de Categorías";
$lang["module_timeclocks_desc"] = "Reloj de Registro.";
$lang["module_timeclocks"] = "Reloj de Registro";
$lang["module_admin_cashups_desc"] = "Administrador de retiro";
$lang["module_admin_cashups"] = "Administrador de retiro";

View File

@@ -1,5 +1,4 @@
<?php
<?php
$lang["receivings_cancel_receiving"] = "Cancelar";
$lang["receivings_cannot_be_deleted"] = "Ingreso(s) no se borraron.";
$lang["receivings_comments"] = "Comentarios";
@@ -34,7 +33,7 @@ $lang["receivings_reference"] = "Referencia";
$lang["receivings_register"] = "Entrada de Artículos";
$lang["receivings_requisition"] = "Requisición";
$lang["receivings_return"] = "Devolver";
$lang["receivings_select_supplier"] = "Seleccionar Proveedor (Opcional)";
$lang["receivings_select_supplier"] = "Seleccionar Proveedor (Requerido)";
$lang["receivings_ship_pack"] = "Paquete de Envío";
$lang["receivings_start_typing_supplier_name"] = "Empieza a escribir el nombre del proveedor...";
$lang["receivings_stock"] = "Inventario";
@@ -52,3 +51,6 @@ $lang["receivings_transaction_failed"] = "La(s) Transaccion(es) de Entrada Falla
$lang["receivings_unable_to_add_item"] = "No se pudo agregar el artículo.";
$lang["receivings_unsuccessfully_updated"] = "Actualizacion de Recepción fallida.";
$lang["receivings_update"] = "Editar";
$lang["receivings_daily"] = "Recepción Diaria";
$lang["receivings_confirm_restore"] = "Seguro que quiere restaurar esta recepción? Éste será restaurado.";
$lang["receivings_amount_due"] = "Importe Adeudado";

View File

@@ -1,5 +1,4 @@
<?php
<?php
$lang["reports_all"] = "Todo";
$lang["reports_authority"] = "Autorización";
$lang["reports_canceled"] = "Cancelado";
@@ -110,7 +109,7 @@ $lang["reports_sold_to"] = "Vendido A";
$lang["reports_stock_location"] = "Ubicación de Inventario";
$lang["reports_sub_total_value"] = "SubTotal";
$lang["reports_subtotal"] = "Sub-total";
$lang["reports_summary_reports"] = "Reportes Resumidos";
$lang["reports_summary_reports"] = "Reportes Resumidos de Ventas";
$lang["reports_supplied_by"] = "Provisto por";
$lang["reports_supplier"] = "Proveedor";
$lang["reports_suppliers"] = "Proveedores";
@@ -139,3 +138,9 @@ $lang["reports_unit_price"] = "Precio de Venta";
$lang["reports_used"] = "Puntos usados";
$lang["reports_work_orders"] = "Ordenes";
$lang["reports_zero_and_less"] = "Cero y negativos";
$lang["reports_tax_name"] = "Nombres de Impuestos";
$lang["reports_sold_items"] = "Artículos Vendidos";
$lang["reports_service_charge"] = "Costo de Servicio";
$lang["reports_expenses_payment_amount"] = "Pago";
$lang["reports_detailed_receivings_report_input"] = "Entrada detallada del reporte de recepción";
$lang["reports_commission"] = "Comisión";

View File

@@ -1,5 +1,4 @@
<?php
<?php
$lang["customers_available_points"] = "Puntos disponibles";
$lang["rewards_package"] = "Premios";
$lang["rewards_remaining_balance"] = "El remanente de puntos es ";
@@ -10,23 +9,23 @@ $lang["sales_amount_tendered"] = "Cantidad Recibida";
$lang["sales_authorized_signature"] = "Firma Autorizada";
$lang["sales_cancel_sale"] = "Cancelar Venta";
$lang["sales_cash"] = "Efectivo";
$lang["sales_cash_adjustment"] = "";
$lang["sales_cash_adjustment"] = "Ajuste de Efectivo";
$lang["sales_cash_deposit"] = "Deposito Efectivo";
$lang["sales_cash_filter"] = "Efectivo";
$lang["sales_change_due"] = "Cambio";
$lang["sales_change_price"] = "Cambiar el precio de venta";
$lang["sales_check"] = "Comprobación de ventas";
$lang["sales_check"] = "Cheque";
$lang["sales_check_balance"] = "Balance de Cheque";
$lang["sales_check_filter"] = "Comprobar";
$lang["sales_check_filter"] = "Cheque";
$lang["sales_comment"] = "Comentario";
$lang["sales_comments"] = "Comentarios";
$lang["sales_complete_sale"] = "Completar Venta";
$lang["sales_confirm_cancel_sale"] = "¿Seguro(a) de querer limpiar esta venta? Todos los artículos serán limpiados.";
$lang["sales_confirm_delete"] = "¿Seguro(a) de querer borrar las ventas seleccionadas?";
$lang["sales_confirm_cancel_sale"] = "¿Seguro quiere cancelar esta venta? Todos los artículos serán eliminados.";
$lang["sales_confirm_delete"] = "¿Seguro quiere borrar las ventas seleccionadas?";
$lang["sales_confirm_restore"] = "Esta seguro de querer restaurar la(s) venta(s) seleccionada(s)?";
$lang["sales_credit"] = "Tarjeta de Crédito";
$lang["sales_credit_deposit"] = "Deposito Credito";
$lang["sales_credit_filter"] = "";
$lang["sales_credit_filter"] = "Tarjeta de Crédito";
$lang["sales_customer"] = "cliente";
$lang["sales_customer_address"] = "Direccion";
$lang["sales_customer_discount"] = "Descuento";
@@ -41,8 +40,9 @@ $lang["sales_date_range"] = "Rango de Fecha";
$lang["sales_date_required"] = "Una fecha correcta debe ser ingresada.";
$lang["sales_date_type"] = "Campo de Fecha es requerido.";
$lang["sales_debit"] = "Tarjeta de Débito";
$lang["sales_debit_filter"] = "Tarjeta de Débito";
$lang["sales_delete"] = "Permitir borrar";
$lang["sales_delete_confirmation"] = "¿Seguro(a) de querer borrar esta venta? Esta acción no se puede deshacer.";
$lang["sales_delete_confirmation"] = "¿Seguro quiere borrar esta venta? Esta acción no se puede deshacer.";
$lang["sales_delete_entire_sale"] = "Borrar la venta completa";
$lang["sales_delete_successful"] = "Venta borrada correctamente.";
$lang["sales_delete_unsuccessful"] = "Venta no borrada, fallida.";
@@ -52,8 +52,8 @@ $lang["sales_discard_quote"] = "Descartar";
$lang["sales_discount"] = "Descuento";
$lang["sales_discount_included"] = "% Descuento";
$lang["sales_discount_short"] = "%";
$lang["sales_due"] = "Deudado";
$lang["sales_due_filter"] = "Deudado";
$lang["sales_due"] = "Adeudado";
$lang["sales_due_filter"] = "Adeudado";
$lang["sales_edit"] = "Editar";
$lang["sales_edit_item"] = "Editar Artículo";
$lang["sales_edit_sale"] = "Editar Venta";
@@ -112,7 +112,7 @@ $lang["sales_price"] = "Precio";
$lang["sales_print_after_sale"] = "Imprimir recibo después de una venta";
$lang["sales_quantity"] = "Cantidad";
$lang["sales_quantity_less_than_reorder_level"] = "Advertencia. La cantidad deseada es insuficiente.";
$lang["sales_quantity_less_than_zero"] = "Advertencia. La cantidad deseada es insuficiente. Puedes procesar la venta pero verifica el inventario.";
$lang["sales_quantity_less_than_zero"] = "Advertencia. La cantidad deseada está agotada en stock. Puedes procesar la venta pero audita el inventario.";
$lang["sales_quantity_of_items"] = "Cantidad de %1 articulos";
$lang["sales_quote"] = "Cotizar";
$lang["sales_quote_number"] = "Número de Presupuesto";
@@ -162,11 +162,11 @@ $lang["sales_tax"] = "Imp";
$lang["sales_tax_id"] = "Identificador del Impuesto";
$lang["sales_tax_invoice"] = "Impuesto de la Factura";
$lang["sales_tax_percent"] = "% de Imp";
$lang["sales_taxed_ind"] = "I";
$lang["sales_taxed_ind"] = "Ventas gravadas";
$lang["sales_total"] = "Total";
$lang["sales_total_tax_exclusive"] = "Sin impuesto";
$lang["sales_transaction_failed"] = "La transacción de venta falló.";
$lang["sales_unable_to_add_item"] = "No se puede agregar el artículo a la venta";
$lang["sales_unable_to_add_item"] = "Error al agregar artículo a la venta. Agotado";
$lang["sales_unsuccessfully_deleted"] = "Ha fallado la eliminación de la Venta.";
$lang["sales_unsuccessfully_restored"] = "Restaurar Venta fallida.";
$lang["sales_unsuccessfully_suspended_sale"] = "Venta suspendida satisfactoriamente.";
@@ -180,3 +180,22 @@ $lang["sales_work_order_number"] = "Numero Orden Trabajo";
$lang["sales_work_order_number_duplicate"] = "El numero de orden de trabajo debe ser unico.";
$lang["sales_work_order_sent"] = "Orden de trabajo enviada a";
$lang["sales_work_order_unsent"] = "Orden de trabajo fallida al enviar a";
$lang["sales_wholesale"] = "Precio al por mayor";
$lang["sales_visa"] = "Tarjeta Visa";
$lang["sales_sales_total"] = "Ventas Totales";
$lang["sales_show_due"] = "Mostrar los Importes Adeudados";
$lang["sales_service_charge"] = "Costo de Servicio";
$lang["sales_remove_discount"] = "Descuentos";
$lang["sales_payments"] = "Pagos";
$lang["sales_mc"] = "Tarjeta Master Card";
$lang["sales_giftcard_filter"] = "Tarjeta de Regalo";
$lang['sales_daily_sales'] = "Sus Ventas Diarias";
$lang["sales_customer_total_spent"] = "Total Gastado";
$lang["sales_current_table"] = "Tabla Actual";
$lang["sales_complete"] = "Completa";
$lang["sales_company_name"] = "Nombre de Comañía";
$lang["sales_close"] = "Cerrar Lista";
$lang["sales_cash_4"] = "20";
$lang["sales_cash_3"] = "10";
$lang["sales_cash_2"] = "5";
$lang["sales_cash_1"] = "1";

View File

@@ -1,5 +1,4 @@
<?php
<?php
$lang["taxes_add_exception"] = "Añadir excepción";
$lang["taxes_cascade"] = "Cascada";
$lang["taxes_cascade_sequence"] = "Secuencia en cascada";
@@ -78,3 +77,4 @@ $lang["taxes_tax_rounding"] = "Redondeo de Impuestos";
$lang["taxes_tax_type"] = "Tipo de Impuesto";
$lang["taxes_update"] = "Actualizar Tasa de Impuesto";
$lang["taxes_vat_tax"] = "IVA";
$lang["taxes_no_taxes"] = "Sin Importe de Impuestos";

View File

@@ -1,5 +1,4 @@
<?php
<?php
$lang["employees_basic_information"] = "Información";
$lang["employees_cannot_be_deleted"] = "No se puede borrar los empleados seleccionados, uno o más de ellos tienen ventas registradas ó intentas borrar tu propia cuenta.";
$lang["employees_change_password"] = "Cambiar contraseña";
@@ -35,3 +34,4 @@ $lang["employees_update"] = "Actualizar Empleado";
$lang["employees_username"] = "Nombre de Usuario";
$lang["employees_username_minlength"] = "Nombre de usuario debe tener por lo menos 5 letras.";
$lang["employees_username_required"] = "Es necesario el nombre de usuario.";
$lang["employees_username_duplicate"] = "El usuario del empleado ya esta en uso. Favor de escoger otro.";

View File

@@ -1,5 +1,4 @@
<?php
<?php
$lang["item_kits_add_item"] = "Agregar Artículo";
$lang["item_kits_all"] = "Todo";
$lang["item_kits_cannot_be_deleted"] = "Borrado de Kit(s) de Artículos fallido.";
@@ -7,7 +6,7 @@ $lang["item_kits_confirm_delete"] = "¿Estás seguro(a) de querer borrar los kit
$lang["item_kits_confirm_restore"] = "¿Está seguro de querer restaurar lo(s) kit(s) seleccionado(s)?";
$lang["item_kits_description"] = "Descripción del Kit de Artículos";
$lang["item_kits_discount"] = "Descuento";
$lang["item_kits_discount_fixed"] = "";
$lang["item_kits_discount_fixed"] = "Descuento Fijo";
$lang["item_kits_discount_percent"] = "Porcentaje de descuento";
$lang["item_kits_discount_type"] = "Tipo de Descuento";
$lang["item_kits_error_adding_updating"] = "Error agregando/actualizando Kit de Artículos.";

View File

@@ -1,19 +1,18 @@
<?php
$lang["items_add_minus"] = "";
$lang["items_allow_alt_description"] = "";
$lang["items_amount_entry"] = "";
$lang["items_bulk_edit"] = "";
$lang["items_buy_price_required"] = "";
$lang["items_cannot_be_deleted"] = "";
$lang["items_cannot_find_item"] = "";
$lang["items_category"] = "";
$lang["items_category_required"] = "";
$lang["items_change_all_to_allow_alt_desc"] = "";
$lang["items_change_all_to_not_allow_allow_desc"] = "";
$lang["items_change_all_to_serialized"] = "";
$lang["items_change_all_to_unserialized"] = "";
$lang["items_change_image"] = "";
<?php
$lang["items_add_minus"] = "Inventario a agregar o disminuir.";
$lang["items_allow_alt_description"] = "Permitir Descripción Alternativa";
$lang["items_amount_entry"] = "Ingrese Cantidad";
$lang["items_bulk_edit"] = "Edición Masiva";
$lang["items_buy_price_required"] = "Precio de Compra es un campo requerido.";
$lang["items_cannot_be_deleted"] = "No se puede borrar el item(s) seleccionado, uno a mas de los items seleccionados tienen ventas.";
$lang["items_cannot_find_item"] = "Articulo no encontrado.";
$lang["items_category"] = "Categoría";
$lang["items_category_required"] = "Categoría es un campo requerido.";
$lang["items_change_all_to_allow_alt_desc"] = "Permitir Descripción Alternativa para todo.";
$lang["items_change_all_to_not_allow_allow_desc"] = "No permitir Descripción Alternativa para todo.";
$lang["items_change_all_to_serialized"] = "Cambiar todo a Serializado";
$lang["items_change_all_to_unserialized"] = "Cambiar todo a No-Serializado";
$lang["items_change_image"] = "Cambiar Imagen";
$lang["items_confirm_bulk_edit"] = "";
$lang["items_confirm_bulk_edit_wipe_taxes"] = "";
$lang["items_confirm_delete"] = "";

View File

@@ -1,13 +1,12 @@
<?php
$lang["login_gcaptcha"] = "";
$lang["login_go"] = "";
$lang["login_invalid_gcaptcha"] = "";
$lang["login_invalid_installation"] = "";
$lang["login_invalid_username_and_password"] = "";
$lang["login_login"] = "";
$lang["login_logout"] = "";
$lang["login_migration_needed"] = "";
$lang["login_password"] = "";
$lang["login_username"] = "";
$lang["login_welcome"] = "";
<?php
$lang["login_gcaptcha"] = "No soy un robot.";
$lang["login_go"] = "Entrar";
$lang["login_invalid_gcaptcha"] = "Por favor compruebe que usted no es un robot.";
$lang["login_invalid_installation"] = "La instalacion no es correcta, revise el archivo php.ini.";
$lang["login_invalid_username_and_password"] = "Usuario y/o Password Invalido.";
$lang["login_login"] = "Login";
$lang["login_logout"] = "Salir";
$lang["login_migration_needed"] = "Una migración de base de datos a %1 empezara después de entrar.";
$lang["login_password"] = "Contraseña";
$lang["login_username"] = "Usuario";
$lang["login_welcome"] = "Bienvenido a %1!";

View File

@@ -1,14 +1,13 @@
<?php
$lang["messages_first_name"] = "";
$lang["messages_last_name"] = "";
$lang["messages_message"] = "";
$lang["messages_message_placeholder"] = "";
$lang["messages_message_required"] = "";
$lang["messages_multiple_phones"] = "";
$lang["messages_phone"] = "";
$lang["messages_phone_number_required"] = "";
$lang["messages_phone_placeholder"] = "";
$lang["messages_sms_send"] = "";
$lang["messages_successfully_sent"] = "";
$lang["messages_unsuccessfully_sent"] = "";
<?php
$lang["messages_first_name"] = "Nombre(s)";
$lang["messages_last_name"] = "Apellido(s)";
$lang["messages_message"] = "Mensaje";
$lang["messages_message_placeholder"] = "Tu mensaje aquí...";
$lang["messages_message_required"] = "Requiere mensaje";
$lang["messages_multiple_phones"] = "(En caso de varios destinatarios, ingrese los números de teléfono separado por comas)";
$lang["messages_phone"] = "Número de teléfono";
$lang["messages_phone_number_required"] = "Requiere de número telefónico";
$lang["messages_phone_placeholder"] = "Números de teléfonos celulares aquí...";
$lang["messages_sms_send"] = "Enviar SMS";
$lang["messages_successfully_sent"] = "Mensaje enviado exitosamente a: ";
$lang["messages_unsuccessfully_sent"] = "Mensaje no enviado a: ";

View File

@@ -1,19 +1,18 @@
<?php
$lang["module_attributes"] = "";
$lang["module_attributes_desc"] = "";
$lang["module_both"] = "";
$lang["module_cashups"] = "";
$lang["module_cashups_desc"] = "";
$lang["module_config"] = "";
$lang["module_config_desc"] = "";
$lang["module_customers"] = "";
$lang["module_customers_desc"] = "";
$lang["module_employees"] = "";
$lang["module_employees_desc"] = "";
$lang["module_expenses"] = "";
$lang["module_expenses_categories"] = "";
$lang["module_expenses_categories_desc"] = "";
<?php
$lang["module_attributes"] = "Atributos";
$lang["module_attributes_desc"] = "Agregar, Actualizar, Borrar y Buscar atributos.";
$lang["module_both"] = "Ambos";
$lang["module_cashups"] = "Corte de Caja";
$lang["module_cashups_desc"] = "Agregar, Actualizar, Borrar y Buscar Cortes de Caja.";
$lang["module_config"] = "Configuración";
$lang["module_config_desc"] = "Cambiar Configuracion de OSPOS.";
$lang["module_customers"] = "Clientes";
$lang["module_customers_desc"] = "Agregar, Actualizar, Borrar y Buscar Clientes.";
$lang["module_employees"] = "Empleados";
$lang["module_employees_desc"] = "Agregar, Actualizar, Borrar y Buscar Empleados.";
$lang["module_expenses"] = "Gastos";
$lang["module_expenses_categories"] = "Categorías de Gastos";
$lang["module_expenses_categories_desc"] = "Agregar, Actualizar, y Borrar Categorías de Gastos.";
$lang["module_expenses_desc"] = "";
$lang["module_giftcards"] = "";
$lang["module_giftcards_desc"] = "";

View File

@@ -1,54 +1,53 @@
<?php
$lang["receivings_cancel_receiving"] = "";
$lang["receivings_cannot_be_deleted"] = "";
$lang["receivings_comments"] = "";
$lang["receivings_complete_receiving"] = "";
$lang["receivings_confirm_cancel_receiving"] = "";
$lang["receivings_confirm_delete"] = "";
$lang["receivings_confirm_finish_receiving"] = "";
$lang["receivings_cost"] = "";
$lang["receivings_date"] = "";
$lang["receivings_date_required"] = "";
$lang["receivings_date_type"] = "";
$lang["receivings_delete_entire_sale"] = "";
$lang["receivings_discount"] = "";
$lang["receivings_edit"] = "";
$lang["receivings_edit_sale"] = "";
$lang["receivings_employee"] = "";
$lang["receivings_error_editing_item"] = "";
$lang["receivings_error_requisition"] = "";
$lang["receivings_find_or_scan_item"] = "";
$lang["receivings_find_or_scan_item_or_receipt"] = "";
$lang["receivings_id"] = "";
$lang["receivings_item_name"] = "";
$lang["receivings_mode"] = "";
$lang["receivings_new_supplier"] = "";
$lang["receivings_one_or_multiple"] = "";
$lang["receivings_print_after_sale"] = "";
$lang["receivings_quantity"] = "";
$lang["receivings_receipt"] = "";
$lang["receivings_receipt_number"] = "";
$lang["receivings_receiving"] = "";
$lang["receivings_reference"] = "";
$lang["receivings_register"] = "";
$lang["receivings_requisition"] = "";
$lang["receivings_return"] = "";
$lang["receivings_select_supplier"] = "";
$lang["receivings_ship_pack"] = "";
$lang["receivings_start_typing_supplier_name"] = "";
$lang["receivings_stock"] = "";
$lang["receivings_stock_destination"] = "";
$lang["receivings_stock_locaiton"] = "";
$lang["receivings_stock_source"] = "";
$lang["receivings_successfully_deleted"] = "";
$lang["receivings_successfully_updated"] = "";
$lang["receivings_supplier"] = "";
$lang["receivings_supplier_address"] = "";
$lang["receivings_supplier_email"] = "";
$lang["receivings_supplier_location"] = "";
$lang["receivings_total"] = "";
$lang["receivings_transaction_failed"] = "";
$lang["receivings_unable_to_add_item"] = "";
$lang["receivings_unsuccessfully_updated"] = "";
$lang["receivings_update"] = "";
<?php
$lang["receivings_cancel_receiving"] = "Cancelar";
$lang["receivings_cannot_be_deleted"] = "Falló al borrar Entrada(s).";
$lang["receivings_comments"] = "Comentarios";
$lang["receivings_complete_receiving"] = "Completado";
$lang["receivings_confirm_cancel_receiving"] = "Esta seguro que quiere eliminar esta recepción? Todos los items se borraran.";
$lang["receivings_confirm_delete"] = "Esta seguro que quiere borrar esta recepción? Esta acción no se puede deshacer.";
$lang["receivings_confirm_finish_receiving"] = "Esta seguro que quiere enviar esta recepción? Esto no se puede deshacer.";
$lang["receivings_cost"] = "Costo";
$lang["receivings_date"] = "Fecha de Recibido";
$lang["receivings_date_required"] = "Se debe de agregar la fecha correcta.";
$lang["receivings_date_type"] = "Fecha es un campo obligatorio.";
$lang["receivings_delete_entire_sale"] = "Borrar Venta Completa";
$lang["receivings_discount"] = "Descuento";
$lang["receivings_edit"] = "Editar";
$lang["receivings_edit_sale"] = "Editar Recepción";
$lang["receivings_employee"] = "Empleado";
$lang["receivings_error_editing_item"] = "Fallo la edición del item.";
$lang["receivings_error_requisition"] = "No se puede mover el inventario desde o hacia la misma Ubicación.";
$lang["receivings_find_or_scan_item"] = "Encontrar o Escanear Articulo";
$lang["receivings_find_or_scan_item_or_receipt"] = "Encontrar o Escanear Articulo o Recibo";
$lang["receivings_id"] = "ID de Recepción";
$lang["receivings_item_name"] = "Nombre del Articulo";
$lang["receivings_mode"] = "Modo de Recepción";
$lang["receivings_new_supplier"] = "Nuevo Proveedor";
$lang["receivings_one_or_multiple"] = "recepción(es)";
$lang["receivings_print_after_sale"] = "Imprimir después de la Venta";
$lang["receivings_quantity"] = "Cant.";
$lang["receivings_receipt"] = "Recibo de Recepcion";
$lang["receivings_receipt_number"] = "Recepción #";
$lang["receivings_receiving"] = "Recibir";
$lang["receivings_reference"] = "Referencia";
$lang["receivings_register"] = "Recepción de Artículos";
$lang["receivings_requisition"] = "Requisición";
$lang["receivings_return"] = "Devolución";
$lang["receivings_select_supplier"] = "Seleccionar Proveedor (Opcional)";
$lang["receivings_ship_pack"] = "Empaque de Envio";
$lang["receivings_start_typing_supplier_name"] = "Empiece a escribir el nombre del Proveedor...";
$lang["receivings_stock"] = "Inventario";
$lang["receivings_stock_destination"] = "Destino del Inventario";
$lang["receivings_stock_locaiton"] = "Ubicación del Inventario";
$lang["receivings_stock_source"] = "Origen del Inventario";
$lang["receivings_successfully_deleted"] = "Se ha borrado exitosamente";
$lang["receivings_successfully_updated"] = "Recepción actualizada exitosamente";
$lang["receivings_supplier"] = "Proveedor";
$lang["receivings_supplier_address"] = "Dirección";
$lang["receivings_supplier_email"] = "Email";
$lang["receivings_supplier_location"] = "Ubicación";
$lang["receivings_total"] = "Total";
$lang["receivings_transaction_failed"] = "Transacción de Recepción falló.";
$lang["receivings_unable_to_add_item"] = "Agregar Articulo a Recepción falló.";
$lang["receivings_unsuccessfully_updated"] = "Actualización de Recepción falló.";
$lang["receivings_update"] = "Actualizar";

View File

@@ -1,5 +1,4 @@
<?php
<?php
$lang["reports_all"] = "Todas";
$lang["reports_authority"] = "Autoridad";
$lang["reports_canceled"] = "Cancelado";
@@ -11,10 +10,10 @@ $lang["reports_code_invoice"] = "INV";
$lang["reports_code_pos"] = "POS";
$lang["reports_code_quote"] = "Q";
$lang["reports_code_return"] = "RET";
$lang["reports_code_type"] = "";
$lang["reports_code_work_order"] = "";
$lang["reports_comments"] = "";
$lang["reports_complete"] = "";
$lang["reports_code_type"] = "Tipo";
$lang["reports_code_work_order"] = "OT";
$lang["reports_comments"] = "Comentarios";
$lang["reports_complete"] = "Ventas y Devoluciones Completadas";
$lang["reports_completed_sales"] = "";
$lang["reports_confirm_delete"] = "";
$lang["reports_confirm_restore"] = "";

View File

@@ -1,5 +1,4 @@
<?php
<?php
$lang["items_add_minus"] = "";
$lang["items_allow_alt_description"] = "";
$lang["items_amount_entry"] = "";
@@ -7,17 +6,17 @@ $lang["items_bulk_edit"] = "";
$lang["items_buy_price_required"] = "";
$lang["items_cannot_be_deleted"] = "";
$lang["items_cannot_find_item"] = "";
$lang["items_category"] = "";
$lang["items_category_required"] = "";
$lang["items_change_all_to_allow_alt_desc"] = "";
$lang["items_change_all_to_not_allow_allow_desc"] = "";
$lang["items_category"] = "Categorie";
$lang["items_category_required"] = "Campul Categorie este obligatoriu.";
$lang["items_change_all_to_allow_alt_desc"] = "Permite descriere alternativa pentru tot.";
$lang["items_change_all_to_not_allow_allow_desc"] = "Nu permite descriere alternativa pentru tot.";
$lang["items_change_all_to_serialized"] = "";
$lang["items_change_all_to_unserialized"] = "";
$lang["items_change_image"] = "";
$lang["items_confirm_bulk_edit"] = "";
$lang["items_confirm_bulk_edit_wipe_taxes"] = "";
$lang["items_confirm_delete"] = "";
$lang["items_confirm_restore"] = "";
$lang["items_change_image"] = "Schimbare imagine";
$lang["items_confirm_bulk_edit"] = "Sigur doriti editarea produsului/produselor selectate?";
$lang["items_confirm_bulk_edit_wipe_taxes"] = "Toate informatiile cu privire la taxe, vor fi inlocuite.";
$lang["items_confirm_delete"] = "Sigur doriti stergerea produselor selectate?";
$lang["items_confirm_restore"] = "Sigur doriti restaurarea produselor selectate?";
$lang["items_cost_price"] = "";
$lang["items_cost_price_number"] = "";
$lang["items_cost_price_required"] = "";
@@ -110,3 +109,5 @@ $lang["items_unit_price_required"] = "";
$lang["items_upc_database"] = "";
$lang["items_update"] = "";
$lang["items_use_inventory_menu"] = "";
$lang["items_categories"] = "Categorii - selectare numar produs.";
$lang["items_category_new"] = "Categorie noua";

View File

@@ -1,45 +1,45 @@
<?php
$lang["expenses_add_item"] = "Add Expense";
$lang["expenses_amount"] = "Amount";
$lang["expenses_amount_number"] = "Amount must be a number";
$lang["expenses_amount_required"] = "Expense Amount required";
$lang["expenses_by_category"] = "Category";
$lang["expenses_cannot_be_deleted"] = "Could not delete Category Expense(s)";
$lang["expenses_cash"] = "Cash";
$lang["expenses_cash_filter"] = "Cash";
$lang["expenses_categories_name"] = "Category";
$lang["expenses_category_required"] = "category is a required field";
$lang["expenses_check"] = "Check";
$lang["expenses_check_filter"] = "Check";
$lang["expenses_confirm_delete"] = "தேர்ந்தெடுக்கப்பட்ட செலவ நீக்க விரும்புகிறீர்களா?";
$lang["expenses_add_item"] = "செலவை சேர்க்கவும்";
$lang["expenses_amount"] = "தொகை";
$lang["expenses_amount_number"] = "தொகை ஒரு எண்ணாக இருக்க வேண்டும்";
$lang["expenses_amount_required"] = "செலவுத் தொகை தேவை";
$lang["expenses_by_category"] = "வகை";
$lang["expenses_cannot_be_deleted"] = "செலவு(களு)க்கான வகையை நீக்க முடியவில்லை";
$lang["expenses_cash"] = "பணம்";
$lang["expenses_cash_filter"] = "பணம்";
$lang["expenses_categories_name"] = "வகை";
$lang["expenses_category_required"] = "வகை என்பது தேவையான புலம்";
$lang["expenses_check"] = "சரிபார்";
$lang["expenses_check_filter"] = "சரிபார்";
$lang["expenses_confirm_delete"] = "தேர்ந்தெடுக்கப்பட்ட செலவு(களை) நீக்க விரும்புகிறீர்களா?";
$lang["expenses_confirm_restore"] = "தேர்ந்தெடுக்கப்பட்ட செலவு(களை) மீட்டெடுக்க விரும்புகிறீர்களா?";
$lang["expenses_credit"] = "Credit Card";
$lang["expenses_credit_filter"] = "Credit Card";
$lang["expenses_date"] = "Date";
$lang["expenses_date_number"] = "date must be a number";
$lang["expenses_date_required"] = "date is a required field";
$lang["expenses_debit"] = "Debit Card";
$lang["expenses_debit_filter"] = "Debit Card";
$lang["expenses_description"] = "Description";
$lang["expenses_due"] = "Due";
$lang["expenses_due_filter"] = "Due";
$lang["expenses_employee"] = "Created By";
$lang["expenses_error_adding_updating"] = "Error adding/updating Expense";
$lang["expenses_expense_id"] = "Id";
$lang["expenses_expenses_employee"] = "Employee";
$lang["expenses_info"] = "Expense Info";
$lang["expenses_is_deleted"] = "Deleted";
$lang["expenses_name_required"] = "Expense Name required";
$lang["expenses_new"] = "New Expense";
$lang["expenses_no_expenses_to_display"] = "There are no Expenses to display";
$lang["expenses_none_selected"] = "You have not selected any Expense";
$lang["expenses_one_or_multiple"] = "Expense(s)";
$lang["expenses_payment"] = "Payment Type";
$lang["expenses_start_typing_supplier_name"] = "Start Typing Supplier's name...";
$lang["expenses_successful_adding"] = "Expense add successful";
$lang["expenses_successful_deleted"] = "Expense delete successful";
$lang["expenses_successful_updating"] = "Expense update successful";
$lang["expenses_supplier_name"] = "Supplier";
$lang["expenses_supplier_tax_code"] = "Tax Code";
$lang["expenses_tax_amount"] = "Tax";
$lang["expenses_update"] = "Update Expense";
$lang["expenses_credit"] = "கடன் அட்டை";
$lang["expenses_credit_filter"] = "கடன் அட்டை";
$lang["expenses_date"] = "தேதி";
$lang["expenses_date_number"] = "தேதி ஒரு எண்ணாக இருக்க வேண்டும்";
$lang["expenses_date_required"] = "தேதி என்பது ஒரு தேவையான புலம்";
$lang["expenses_debit"] = "பற்று அட்டை";
$lang["expenses_debit_filter"] = "பற்று அட்டை";
$lang["expenses_description"] = "விளக்கம்";
$lang["expenses_due"] = "கொடுக்க வேண்டிய";
$lang["expenses_due_filter"] = "கொடுக்க வேண்டிய";
$lang["expenses_employee"] = "உருவாக்கியவர்";
$lang["expenses_error_adding_updating"] = "செலவைச் சேர்ப்பதில் / புதுப்பிப்பதில் பிழை";
$lang["expenses_expense_id"] = "அடையாளம்";
$lang["expenses_expenses_employee"] = "பணியாளர்";
$lang["expenses_info"] = "செலவு தகவல்";
$lang["expenses_is_deleted"] = "நீக்கப்பட்டது";
$lang["expenses_name_required"] = "செலவுக்கான பெயர் தேவை";
$lang["expenses_new"] = "புதிய செலவு";
$lang["expenses_no_expenses_to_display"] = "காண்பிக்க செலவுகள் எதுவும் இல்லை";
$lang["expenses_none_selected"] = "நீங்கள் எந்த செலவையும் தேர்ந்தெடுக்கவில்லை";
$lang["expenses_one_or_multiple"] = "செலவு(கள்)";
$lang["expenses_payment"] = "கட்டண வகை";
$lang["expenses_start_typing_supplier_name"] = "வழங்குபவரின் பெயரைத் தட்டச்சு செய்யத் தொடங்குங்கள் ...";
$lang["expenses_successful_adding"] = "செலவு வெற்றிகரமாக சேர்க்கிறது";
$lang["expenses_successful_deleted"] = "செலவு வெற்றிகரமாக நீக்கப்பட்டது";
$lang["expenses_successful_updating"] = "செலவு வெற்றிகரமாக புதுப்பிக்கப்படுகிறது";
$lang["expenses_supplier_name"] = "வழங்குபவர்";
$lang["expenses_supplier_tax_code"] = "வரி குறியீடு";
$lang["expenses_tax_amount"] = "வரி";
$lang["expenses_update"] = "செலவுகள் புதுப்பிப்பு";

View File

@@ -1,5 +1,4 @@
<?php
<?php
$lang["common_address_1"] = "ที่อยู่";
$lang["common_address_2"] = "ที่อยู่ (เพิ่มเติม)";
$lang["common_city"] = "อำเภอ";
@@ -28,8 +27,8 @@ $lang["common_gender"] = "เพศ";
$lang["common_gender_female"] = "หญิง";
$lang["common_gender_male"] = "ชาย";
$lang["common_gender_undefined"] = "";
$lang["common_icon"] = "";
$lang["common_id"] = "ID";
$lang["common_icon"] = "ไอคอน";
$lang["common_id"] = "ไอดี";
$lang["common_import"] = "นำเข้า";
$lang["common_import_change_file"] = "เปลี่ยน";
$lang["common_import_csv"] = "นำเข้าไฟล์ CSV";
@@ -42,8 +41,8 @@ $lang["common_last_name_required"] = "นามสกุล จำเป็น
$lang["common_last_page"] = "ลำดับสุดท้าย";
$lang["common_learn_about_project"] = "เพื่อศึกษาข้อมูลล่าสุดของโครงการ";
$lang["common_list_of"] = "รายการ";
$lang["common_logo"] = "";
$lang["common_logo_mark"] = "";
$lang["common_logo"] = "โลโก้";
$lang["common_logo_mark"] = "เครื่องหมาย";
$lang["common_logout"] = "ออกจากระบบ";
$lang["common_migration_needed"] = "การย้ายฐานข้อมูลไปยัง %1 จะเริ่มขึ้นหลังจากเข้าสู่ระบบ";
$lang["common_new"] = "สร้างใหม่";
@@ -64,8 +63,8 @@ $lang["common_return_policy"] = "นโยบายคืนสินค้า";
$lang["common_search"] = "ค้นหา";
$lang["common_search_options"] = "ตัวเลือกการค้นหา";
$lang["common_searched_for"] = "การค้นหา";
$lang["common_software_short"] = "";
$lang["common_software_title"] = "";
$lang["common_software_short"] = "โอเอสพีโอเอส";
$lang["common_software_title"] = "โอเพ่นซอร์สพอยออฟเซล";
$lang["common_state"] = "จังหวัด";
$lang["common_submit"] = "ส่งข้อมูล";
$lang["common_total_spent"] = "ยอดสั่งซื้อทั้งหมด";

View File

@@ -1,5 +1,4 @@
<?php
<?php
$lang["config_address"] = "ที่อยู่";
$lang["config_address_required"] = "ที่อยู่ต้องกรอก";
$lang["config_all_set"] = "การตั้งค่าอนุญาตไฟล์ทั้งหมดถูกต้อง!";
@@ -127,7 +126,7 @@ $lang["config_financial_year_may"] = "วันที่ 1 พฤษภาคม
$lang["config_financial_year_nov"] = "วันที่ 1 พฤศจิกายน";
$lang["config_financial_year_oct"] = "วันที่ 1 ตุลาคม";
$lang["config_financial_year_sep"] = "วันที่ 1 กันยายน";
$lang["config_floating_labels"] = "";
$lang["config_floating_labels"] = "Floating Labels";
$lang["config_gcaptcha_enable"] = "ขอรหัสยืนยันใหม่ เพื่อเข้าระบบ";
$lang["config_gcaptcha_secret_key"] = "รหัสลับ สำหรับรหัสยืนยัน";
$lang["config_gcaptcha_secret_key_required"] = "จำเป็นต้องระบุ รหัสลับ สำหรับรหัสยืนยัน";
@@ -147,7 +146,7 @@ $lang["config_image_restrictions"] = "ข้อจำกัดของไฟล
$lang["config_include_hsn"] = "เพิ่มการรองรับ HSN Codes";
$lang["config_info"] = "ข้อมูลร้านค้า";
$lang["config_info_configuration"] = "ข้อมูลร้านค้า";
$lang["config_input_groups"] = "";
$lang["config_input_groups"] = "Input Groups";
$lang["config_integrations"] = "การเข้าร่วม";
$lang["config_integrations_configuration"] = "การเข้าร่วมกับบุคคลภายนอก";
$lang["config_invoice"] = "ใบแจ้งหนี้";
@@ -177,7 +176,7 @@ $lang["config_locale_info"] = "ข้อมูลเขตพื้นที่"
$lang["config_location"] = "สินค้าคงคลัง";
$lang["config_location_configuration"] = "ตำแหน่งสินค้าคงคลัง";
$lang["config_location_info"] = "ข้อมูลตำแหน่งสินค้าคงคลัง";
$lang["config_login_form"] = "";
$lang["config_login_form"] = "รูปแบบแบบฟอร์มการเข้าระบบ";
$lang["config_logout"] = "ต้องการสำรองข้อมูลก่อนออกจากระบบหรือไม่? [OK] สำรองข้อมูล / [Cancel] ออกจากระบบ";
$lang["config_mailchimp"] = "ระบบส่งอีเมล์เมล์ชิม";
$lang["config_mailchimp_api_key"] = "API Key สำหรับระบบส่งอีเมล์เมล์ชิม";
@@ -292,7 +291,7 @@ $lang["config_tax_decimals"] = "จำนวนทศนิยมภาษี";
$lang["config_tax_id"] = "เลขประจำตัวผู้เสียภาษี";
$lang["config_tax_included"] = "รวมภาษีแล้ว";
$lang["config_theme"] = "Theme";
$lang["config_theme_preview"] = "";
$lang["config_theme_preview"] = "ดูตัวอย่างธีม:";
$lang["config_thousands_separator"] = "ตัวคั่นหลักพัน";
$lang["config_timezone"] = "โซนเวลา";
$lang["config_timezone_error"] = "เขตเวลาของระบบ OSPOS แตกต่างกับเขตเวลาปัจจุบันของคุณ";

View File

@@ -1,13 +1,12 @@
<?php
<?php
$lang["login_gcaptcha"] = "ฉันไม่ใช่หุ่นยนต์";
$lang["login_go"] = "ไป";
$lang["login_invalid_gcaptcha"] = "กรุณาแสดงตัวตนว่าคุณไม่ใช่หุ่นยนต์";
$lang["login_invalid_installation"] = "การติดตั้งไม่ถูกต้องตรวจสอบการตั้งค่าที่ไฟล์ php.ini ของคุณ";
$lang["login_invalid_username_and_password"] = "ชื่อผู้ใช้/รหัส ไม่ถูกต้อง";
$lang["login_invalid_username_and_password"] = "ชื่อผู้ใช้งานและ/หรือรหัสผ่านเข้าระบบไม่ถูกต้อง";
$lang["login_login"] = "ลงชื่อเข้าใช้";
$lang["login_logout"] = "";
$lang["login_migration_needed"] = "";
$lang["login_logout"] = "ออกจากระบบ";
$lang["login_migration_needed"] = "การย้ายฐานข้อมูลไปยัง %1 จะเริ่มต้นหลังจากเข้าสู่ระบบ";
$lang["login_password"] = "รหัสผ่าน";
$lang["login_username"] = "ชื่อผู้ใช้";
$lang["login_welcome"] = "";
$lang["login_welcome"] = "ยินดีต้อนรับสู่ %1!";

View File

@@ -1,11 +1,11 @@
<!DOCTYPE html>
<html>
<head>
<title>403 Forbidden</title>
<title>403 Yasaklı</title>
</head>
<body>
<p>Directory access is forbidden.</p>
<p>Dizin erişimi yasaktır.</p>
</body>
</html>
</html>

View File

@@ -21,18 +21,24 @@ class Attribute extends CI_Model
*/
public function exists($definition_id, $deleted = FALSE)
{
$this->db->from('attribute_definitions');
$this->db->where('definition_id', $definition_id);
$this->db->where('deleted', $deleted);
return ($this->db->get()->num_rows() == 1);
return ($this->db->get('attribute_definitions')->num_rows() == 1);
}
/**
* Returns whether an attribute_link row exists given an item_id and optionally a definition_id
* @param int $item_id
* @param boolean $definition_id
* @return boolean TRUE if at least one attribute_link exists or FALSE if no attributes exist.
*/
public function link_exists($item_id, $definition_id = FALSE)
{
$this->db->where('item_id', $item_id);
$this->db->where('sale_id');
$this->db->where('receiving_id');
$this->db->from('attribute_links');
if(empty($definition_id))
{
$this->db->where('definition_id <>');
@@ -43,25 +49,38 @@ class Attribute extends CI_Model
$this->db->where('definition_id', $definition_id);
}
$this->db->where('item_id', $item_id);
return ($this->db->get()->num_rows() > 0);
return ($this->db->get('attribute_links')->num_rows() > 0);
}
/*
Determines if a given attribute_value exists in the attribute_values table and returns the attribute_id if it does
* Determines if a given attribute_value exists in the attribute_values table and returns the attribute_id if it does
*/
public function value_exists($attribute_value)
public function value_exists($attribute_value, $definition_type = TEXT)
{
$this->db->distinct('attribute_id');
$this->db->from('attribute_values');
$this->db->where('attribute_value', $attribute_value);
switch($definition_type)
{
case DATE:
$data_type = 'date';
$attribute_date_value = DateTime::createFromFormat($this->Appconfig->get('dateformat'), $attribute_value);
$attribute_value = $attribute_date_value->format('Y-m-d');
break;
case DECIMAL:
$data_type = 'decimal';
break;
default:
$data_type = 'value';
break;
}
$query = $this->db->get();
if ($query->num_rows() > 0)
$this->db->select('attribute_id');
$this->db->where("attribute_$data_type", $attribute_value);
$query = $this->db->get('attribute_values');
if($query->num_rows() > 0)
{
return $query->row()->attribute_id;
}
return FALSE;
}
@@ -86,7 +105,7 @@ class Attribute extends CI_Model
//Get empty base parent object, as $item_id is NOT an item
$item_obj = new stdClass();
//Get all the fields from items table
//Get all the fields from attribute_definitions table
foreach($this->db->list_fields('attribute_definitions') as $field)
{
$item_obj->$field = '';
@@ -106,9 +125,10 @@ class Attribute extends CI_Model
$this->db->join('attribute_definitions AS parent_definition', 'parent_definition.definition_id = definition.definition_fk', 'left');
$this->db->group_start();
$this->db->like('definition.definition_name', $search);
$this->db->or_like('definition.definition_type', $search);
$this->db->like('definition.definition_name', $search);
$this->db->or_like('definition.definition_type', $search);
$this->db->group_end();
$this->db->where('definition.deleted', 0);
$this->db->order_by($sort, $order);
@@ -122,68 +142,63 @@ class Attribute extends CI_Model
public function get_attributes_by_item($item_id)
{
$this->db->from('attribute_definitions');
$this->db->join('attribute_links', 'attribute_links.definition_id = attribute_definitions.definition_id');
$this->db->where('item_id', $item_id);
$this->db->where('receiving_id');
$this->db->where('sale_id');
$this->db->where('receiving_id');
$this->db->where('deleted', 0);
$this->db->order_by('definition_name','ASC');
$this->db->order_by('definition_name', 'ASC');
$results = $this->db->get()->result_array();
$results = $this->db->get('attribute_definitions')->result_array();
return $this->_to_array($results, 'definition_id');
return $this->to_array($results, 'definition_id');
}
public function get_values_by_definitions($definition_ids)
{
if(count($definition_ids ? : []))
{
$this->db->from('attribute_definitions');
$this->db->group_start();
$this->db->where_in('definition_fk', array_keys($definition_ids));
$this->db->or_where_in('definition_id', array_keys($definition_ids));
$this->db->where('definition_type !=', GROUP);
$this->db->where_in('definition_fk', array_keys($definition_ids));
$this->db->or_where_in('definition_id', array_keys($definition_ids));
$this->db->where('definition_type !=', GROUP);
$this->db->group_end();
$this->db->where('deleted', 0);
$results = $this->db->get()->result_array();
$results = $this->db->get('attribute_definitions')->result_array();
return $this->_to_array($results, 'definition_id');
return $this->to_array($results, 'definition_id');
}
return array();
return [];
}
public function get_definitions_by_type($attribute_type, $definition_id = NO_DEFINITION_ID)
{
$this->db->from('attribute_definitions');
$this->db->where('definition_type', $attribute_type);
$this->db->where('deleted', 0);
$this->db->where('definition_fk');
if($definition_id != CATEGORY_DEFINITION_ID)
{
$this->db->where('definition_id != ', $definition_id);
$this->db->where('definition_id <>', $definition_id);
}
$this->db->where('definition_fk');
$results = $this->db->get()->result_array();
$results = $this->db->get('attribute_definitions')->result_array();
return $this->_to_array($results, 'definition_id', 'definition_name');
return $this->to_array($results, 'definition_id', 'definition_name');
}
public function get_definitions_by_flags($definition_flags)
{
$this->db->from('attribute_definitions');
$this->db->where('definition_flags &', $definition_flags);
$this->db->where('deleted', 0);
$this->db->where('definition_type <>', GROUP);
$this->db->order_by('definition_id');
$results = $this->db->get()->result_array();
$results = $this->db->get('attribute_definitions')->result_array();
return $this->_to_array($results, 'definition_id', 'definition_name');
return $this->to_array($results, 'definition_id', 'definition_name');
}
/**
@@ -194,7 +209,6 @@ class Attribute extends CI_Model
*/
public function get_definition_names($groups = TRUE)
{
$this->db->from('attribute_definitions');
$this->db->where('deleted', 0);
$this->db->order_by('definition_name','ASC');
@@ -203,11 +217,10 @@ class Attribute extends CI_Model
$this->db->where_not_in('definition_type',GROUP);
}
$results = $this->db->get()->result_array();
$results = $this->db->get('attribute_definitions')->result_array();
$definition_name = array(-1 => $this->lang->line('common_none_selected_text'));
return $definition_name + $this->_to_array($results, 'definition_id', 'definition_name');
return $definition_name + $this->to_array($results, 'definition_id', 'definition_name');
}
public function get_definition_values($definition_id)
@@ -216,23 +229,22 @@ class Attribute extends CI_Model
if($definition_id > 0 || $definition_id == CATEGORY_DEFINITION_ID)
{
$this->db->from('attribute_links');
$this->db->join('attribute_values', 'attribute_values.attribute_id = attribute_links.attribute_id');
$this->db->where('definition_id', $definition_id);
$this->db->where('item_id');
$this->db->where('definition_id', $definition_id);
$this->db->order_by('attribute_value','ASC');
$results = $this->db->get()->result_array();
$results = $this->db->get('attribute_links')->result_array();
return $this->_to_array($results, 'attribute_id', 'attribute_value');
return $this->to_array($results, 'attribute_id', 'attribute_value');
}
return $attribute_values;
}
private function _to_array($results, $key, $value = '')
private function to_array($results, $key, $value = '')
{
return array_column(array_map(function($result) use ($key, $value) {
return array_column(array_map(function($result) use ($key, $value){
return [$result[$key], empty($value) ? $result : $result[$value]];
}, $results), 1, 0);
}
@@ -242,10 +254,9 @@ class Attribute extends CI_Model
*/
public function get_total_rows()
{
$this->db->from('attribute_definitions');
$this->db->where('deleted', 0);
return $this->db->count_all_results();
return $this->db->count_all_results('attribute_definitions');
}
/*
@@ -256,73 +267,83 @@ class Attribute extends CI_Model
return $this->search($search)->num_rows();
}
private function check_data_validity($definition, $from, $to)
private function check_data_validity($definition_id, $from, $to)
{
$success = FALSE;
if($from === TEXT)
{
$this->db->select('item_id,attribute_value');
$this->db->from('attribute_values');
$this->db->join('attribute_links', 'attribute_values.attribute_id = attribute_links.attribute_id');
$this->db->where('definition_id',$definition);
$success = TRUE;
if($to === DATE)
$this->db->distinct()->select('attribute_value');
$this->db->join('attribute_links', 'attribute_values.attribute_id = attribute_links.attribute_id');
$this->db->where('definition_id', $definition_id);
foreach($this->db->get('attribute_values')->result() as $attribute)
{
foreach($this->db->get()->result_array() as $row)
switch($to)
{
if(valid_date($row['attribute_value']) === FALSE)
{
log_message('ERROR', 'item_id: ' . $row['item_id'] . ' with attribute_value: ' . $row['attribute_value'] . ' cannot be converted to datetime');
$success = FALSE;
}
case DATE:
$success = valid_date($attribute->attribute_value);
break;
case DECIMAL:
$success = valid_decimal($attribute->attribute_value);
break;
}
}
else if($to === DECIMAL)
{
foreach($this->db->get()->result_array() as $row)
if($success === FALSE)
{
if(valid_decimal($row['attribute_value']) === FALSE)
$affected_items = $this->get_items_by_value($attribute->attribute_value, $definition_id);
foreach($affected_items as $affected_item)
{
log_message('ERROR', 'item_id: ' . $row['item_id'] . ' with attribute_value: ' . $row['attribute_value'] . ' cannot be converted to decimal');
$success = FALSE;
$affected_items[] = $affected_item['item_id'];
}
log_message('ERROR', "Attribute_value: '$attribute->attribute_value' cannot be converted to $to. Affected Items: ". implode(',', $affected_items));
unset($affected_items);
}
}
}
return $success;
}
private function convert_definition_type($definition_id, $from_type, $to_type)
/**
* Returns all item_ids with a specific attribute_value and attribute_definition
* @param string $attribute_value
* @param int $definition_id
* @return array
*/
private function get_items_by_value($attribute_value, $definition_id)
{
$this->db->select('item_id');
$this->db->join('attribute_values', 'attribute_values.attribute_id = attribute_links.attribute_id');
$this->db->where('definition_id', $definition_id);
$this->db->where('attribute_value', $attribute_value);
return $this->db->get('attribute_links')->result_array();
}
/**
* Converts data in attribute_values and attribute_links tables associated with the conversion of one attribute type to another.
* @param int $definition_id
* @param string $from_type
* @param string $to_type
* @return boolean
*/
private function convert_definition_data($definition_id, $from_type, $to_type)
{
$success = FALSE;
//From TEXT
if($from_type === TEXT)
{
//To DATETIME or DECIMAL
if(in_array($to_type, [DATE, DECIMAL], TRUE))
{
$field = ($to_type === DATE ? 'attribute_date' : 'attribute_decimal');
if($this->check_data_validity($definition_id, $from_type, $to_type))
{
$this->db->trans_start();
$query = 'UPDATE ospos_attribute_values ';
$query .= 'INNER JOIN ospos_attribute_links ';
$query .= 'ON ospos_attribute_values.attribute_id = ospos_attribute_links.attribute_id ';
$query .= 'SET '. $field .'= attribute_value, ';
$query .= 'attribute_value = NULL ';
$query .= 'WHERE definition_id = ' . $this->db->escape($definition_id);
$success = $this->db->query($query);
$this->db->trans_complete();
$attributes_to_convert = $this->get_attributes_by_definition($definition_id);
$success = $this->attribute_cleanup($attributes_to_convert, $definition_id, $to_type);
}
}
//To DROPDOWN or CHECKBOX
else if($to_type === DROPDOWN)
{
$success = TRUE;
@@ -333,57 +354,44 @@ class Attribute extends CI_Model
$this->db->trans_start();
$query = 'UPDATE ospos_attribute_values values ';
$query .= 'INNER JOIN ospos_attribute_links links ';
$query .= 'ON values.attribute_id = links.attribute_id ';
$query .= "SET links.attribute_id = IF((values.attribute_value IN('FALSE','0','') OR (values.attribute_value IS NULL)), $checkbox_attribute_values[0], $checkbox_attribute_values[1]) ";
$query .= 'WHERE definition_id = ' . $this->db->escape($definition_id);
$query = 'UPDATE '. $this->db->dbprefix('attribute_links') .' links ';
$query .= 'JOIN '. $this->db->dbprefix('attribute_values') .' vals ';
$query .= 'ON vals.attribute_id = links.attribute_id ';
$query .= "SET links.attribute_id = IF((attribute_value IN('FALSE','0','') OR (attribute_value IS NULL)), $checkbox_attribute_values[0], $checkbox_attribute_values[1]) ";
$query .= 'WHERE definition_id = '. $this->db->escape($definition_id);
$success = $this->db->query($query);
$this->db->trans_complete();
}
}
//From DROPDOWN
else if($from_type === DROPDOWN)
{
//To TEXT
if(in_array($to_type, [TEXT, CHECKBOX], TRUE))
{
$this->db->trans_start();
$this->db->from('ospos_attribute_links');
$this->db->where('definition_id',$definition_id);
$this->db->where('item_id', NULL);
$success = $this->db->delete();
$this->db->trans_complete();
//To CHECKBOX
if($to_type === CHECKBOX)
{
$checkbox_attribute_values = $this->checkbox_attribute_values($definition_id);
$this->db->trans_start();
$query = 'UPDATE ospos_attribute_values vals ';
$query .= 'INNER JOIN ospos_attribute_links links ';
$query = 'UPDATE '. $this->db->dbprefix('attribute_links') .' links ';
$query .= 'JOIN '. $this->db->dbprefix('attribute_values') .' vals ';
$query .= 'ON vals.attribute_id = links.attribute_id ';
$query .= "SET links.attribute_id = IF((vals.attribute_value IN('FALSE','0','') OR (vals.attribute_value IS NULL)), $checkbox_attribute_values[0], $checkbox_attribute_values[1]) ";
$query .= 'WHERE links.definition_id = ' . $this->db->escape($definition_id);
$query .= "SET links.attribute_id = IF((attribute_value IN('FALSE','0','') OR (attribute_value IS NULL)), $checkbox_attribute_values[0], $checkbox_attribute_values[1]) ";
$query .= 'WHERE definition_id = '. $this->db->escape($definition_id);
$success = $this->db->query($query);
$this->db->trans_complete();
}
}
}
//From any other type
else
{
$success = TRUE;
}
$this->delete_orphaned_links($definition_id);
$this->delete_orphaned_values();
return $success;
}
@@ -410,7 +418,6 @@ class Attribute extends CI_Model
*/
public function save_definition(&$definition_data, $definition_id = NO_DEFINITION_ID)
{
//Run these queries as a transaction, we want to make sure we do all or nothing
$this->db->trans_start();
//Definition doesn't exist
@@ -418,7 +425,7 @@ class Attribute extends CI_Model
{
if($this->exists($definition_id,TRUE))
{
$success = $this->undelete($definition_id);
$success = $this->undelete_definition($definition_id);
}
else
{
@@ -430,26 +437,27 @@ class Attribute extends CI_Model
//Definition already exists
else
{
$this->db->select('definition_type, definition_name');
$this->db->from('attribute_definitions');
//Get current definition type and name
$this->db->select('definition_type');
$this->db->where('definition_id', $definition_id);
$row = $this->db->get()->row();
$row = $this->db->get('attribute_definitions')->row();
$from_definition_type = $row->definition_type;
$from_definition_name = $row->definition_name;
$to_definition_type = $definition_data['definition_type'];
//Update the definition values
$this->db->where('definition_id', $definition_id);
$success = $this->db->update('attribute_definitions', $definition_data);
$definition_data['definition_id'] = $definition_id;
if($from_definition_type !== $to_definition_type)
{
if(!$this->convert_definition_type($definition_id,$from_definition_type,$to_definition_type))
if($this->convert_definition_data($definition_id, $from_definition_type, $to_definition_type) === FALSE)
{
return FALSE;
}
}
$this->db->where('definition_id', $definition_id);
$success = $this->db->update('attribute_definitions', $definition_data);
$definition_data['definition_id'] = $definition_id;
}
$this->db->trans_complete();
@@ -461,14 +469,14 @@ class Attribute extends CI_Model
public function get_definition_by_name($definition_name, $definition_type = FALSE)
{
$this->db->from('attribute_definitions');
$this->db->where('definition_name', $definition_name);
if($definition_type != FALSE)
{
$this->db->where('definition_type', $definition_type);
}
return $this->db->get()->result_array();
return $this->db->get('attribute_definitions')->result_array();
}
public function save_link($item_id, $definition_id, $attribute_id)
@@ -485,7 +493,10 @@ class Attribute extends CI_Model
}
else
{
$this->db->insert('attribute_links', array('attribute_id' => $attribute_id, 'item_id' => $item_id, 'definition_id' => $definition_id));
$this->db->insert('attribute_links', array(
'attribute_id' => $attribute_id,
'item_id' => $item_id,
'definition_id' => $definition_id));
}
$this->db->trans_complete();
@@ -493,20 +504,30 @@ class Attribute extends CI_Model
return $this->db->trans_status();
}
public function delete_link($item_id)
public function delete_link($item_id, $definition_id = FALSE)
{
$delete_data = array('item_id' => $item_id);
//Exclude rows where sale_id or receiving_id has a value
$this->db->where('sale_id');
$this->db->where('receiving_id');
return $this->db->delete('attribute_links', array('item_id' => $item_id));
if(!empty($definition_id))
{
$delete_data += ['definition_id' => $definition_id];
}
$success = $this->db->delete('attribute_links', $delete_data);
return $success;
}
public function get_link_value($item_id, $definition_id)
{
$this->db->where('item_id', $item_id);
$this->db->where('definition_id', $definition_id);
$this->db->where('sale_id');
$this->db->where('receiving_id');
$this->db->where('definition_id', $definition_id);
return $this->db->get('attribute_links')->row_object();
}
@@ -516,11 +537,11 @@ class Attribute extends CI_Model
$format = $this->db->escape(dateformat_mysql());
$this->db->select("GROUP_CONCAT(attribute_value SEPARATOR ', ') AS attribute_values");
$this->db->select("GROUP_CONCAT(DATE_FORMAT(attribute_date, $format) SEPARATOR ', ') AS attribute_dtvalues");
$this->db->from('attribute_links');
$this->db->join('attribute_values', 'attribute_values.attribute_id = attribute_links.attribute_id');
$this->db->join('attribute_definitions', 'attribute_definitions.definition_id = attribute_links.definition_id');
$this->db->where('definition_type <>', GROUP);
$this->db->where('deleted', 0);
$this->db->where('item_id', intval($item_id));
if(!empty($id))
{
@@ -532,37 +553,47 @@ class Attribute extends CI_Model
$this->db->where('receiving_id');
}
$this->db->where('item_id', (int) $item_id);
$this->db->where('definition_flags & ', $definition_flags);
return $this->db->get();
return $this->db->get('attribute_links');
}
public function get_attribute_value($item_id, $definition_id)
{
$this->db->from('attribute_values');
$this->db->join('attribute_links', 'attribute_links.attribute_id = attribute_values.attribute_id');
$this->db->where('definition_id', $definition_id);
$this->db->where('item_id', intval($item_id));
$this->db->where('sale_id');
$this->db->where('receiving_id');
$this->db->where('item_id', (int) $item_id);
$this->db->where('definition_id', $definition_id);
return $this->db->get()->row_object();
return $this->db->get('attribute_values')->row_object();
}
public function get_attribute_values($item_id)
{
$this->db->select('attribute_values.attribute_value, attribute_values.attribute_decimal, attribute_values.attribute_date, attribute_links.definition_id');
$this->db->join('attribute_values', 'attribute_links.attribute_id = attribute_values.attribute_id');
$this->db->where('item_id', intval($item_id));
$results = $this->db->get('attribute_links')->result_array();
return $this->to_array($results, 'definition_id');
}
public function copy_attribute_links($item_id, $sale_receiving_fk, $id)
{
$this->db->query(
'INSERT INTO ospos_attribute_links (item_id, definition_id, attribute_id, ' . $sale_receiving_fk . ')
SELECT ' . $this->db->escape($item_id) . ', definition_id, attribute_id, ' . $this->db->escape($id) . '
FROM ' . $this->db->dbprefix('attribute_links') . '
WHERE item_id = ' . $this->db->escape($item_id) . ' AND sale_id IS NULL AND receiving_id IS NULL'
'INSERT INTO ' . $this->db->dbprefix('attribute_links') . ' (item_id, definition_id, attribute_id, ' . $sale_receiving_fk . ')
SELECT ' . $this->db->escape($item_id) . ', definition_id, attribute_id, ' . $this->db->escape($id) . '
FROM ' . $this->db->dbprefix('attribute_links') . '
WHERE item_id = ' . $this->db->escape($item_id) . ' AND sale_id IS NULL AND receiving_id IS NULL'
);
}
public function get_suggestions($definition_id, $term)
{
$suggestions = array();
$suggestions = [];
$this->db->distinct();
$this->db->select('attribute_value, attribute_values.attribute_id');
$this->db->from('attribute_definitions AS definition');
@@ -586,25 +617,32 @@ class Attribute extends CI_Model
{
$this->db->trans_start();
$locale_date_format = $this->Appconfig->get('dateformat');
//New Attribute
if(empty($attribute_id) || empty($item_id))
{
if(in_array($definition_type, [TEXT, DROPDOWN, CHECKBOX], TRUE))
{
$attribute_id = $this->value_exists($attribute_value);
//Update attribute_value
$attribute_id = $this->value_exists($attribute_value, $definition_type);
if(empty($attribute_id))
if($attribute_id === FALSE)
{
switch($definition_type)
{
$this->db->insert('attribute_values', array('attribute_value' => $attribute_value));
case DATE:
$data_type = 'date';
$attribute_date_value = DateTime::createFromFormat($locale_date_format, $attribute_value);
$attribute_value = $attribute_date_value->format('Y-m-d');
break;
case DECIMAL:
$data_type = 'decimal';
break;
default:
$data_type = 'value';
break;
}
}
else if($definition_type == DECIMAL)
{
$this->db->insert('attribute_values', array('attribute_decimal' => $attribute_value));
}
else
{
$this->db->insert('attribute_values', array('attribute_date' => date('Y-m-d', strtotime($attribute_value))));
$this->db->insert('attribute_values', array("attribute_$data_type" => $attribute_value));
}
$attribute_id = $attribute_id ? $attribute_id : $this->db->insert_id();
@@ -614,24 +652,26 @@ class Attribute extends CI_Model
'item_id' => empty($item_id) ? NULL : $item_id,
'definition_id' => $definition_id));
}
//Existing Attribute
else
{
$this->db->where('attribute_id', $attribute_id);
switch($definition_type)
{
case DATE:
$data_type = 'date';
$attribute_date_value = DateTime::createFromFormat($locale_date_format, $attribute_value);
$attribute_value = $attribute_date_value->format('Y-m-d');
break;
case DECIMAL:
$data_type = 'decimal';
break;
default:
$data_type = 'value';
break;
}
if(in_array($definition_type, [TEXT, DROPDOWN], TRUE))
{
$this->db->update('attribute_values', array('attribute_value' => $attribute_value));
}
else if($definition_type == DECIMAL)
{
$this->db->update('attribute_values', array('attribute_decimal' => $attribute_value));
}
else
{
$this->db->update('attribute_values', array('attribute_date' => date('Y-m-d', strtotime($attribute_value))));
}
$this->db->where('attribute_id', $attribute_id);
$this->db->update('attribute_values', array("attribute_$data_type" => $attribute_value));
}
$this->db->trans_complete();
@@ -641,14 +681,14 @@ class Attribute extends CI_Model
public function delete_value($attribute_value, $definition_id)
{
return $this->db->query("DELETE atrv, atrl FROM " . $this->db->dbprefix('attribute_values') . " atrv, " . $this->db->dbprefix('attribute_links') . " atrl " .
"WHERE atrl.attribute_id = atrv.attribute_id AND atrv.attribute_value = " . $this->db->escape($attribute_value) . " AND atrl.definition_id = " . $this->db->escape($definition_id));
return $this->db->query('DELETE atrv, atrl FROM ' . $this->db->dbprefix('attribute_values') . ' atrv, ' . $this->db->dbprefix('attribute_links') . ' atrl ' .
'WHERE atrl.attribute_id = atrv.attribute_id AND atrv.attribute_value = ' . $this->db->escape($attribute_value) . ' AND atrl.definition_id = ' . $this->db->escape($definition_id));
}
/**
* Deletes an Attribute definition from the database and associated column in the items_import.csv
*
* @param unknown $definition_id Attribute definition ID to remove.
* @param int $definition_id Attribute definition ID to remove.
* @return boolean TRUE if successful and FALSE if there is a failure
*/
public function delete_definition($definition_id)
@@ -666,6 +706,33 @@ class Attribute extends CI_Model
}
/**
* Deletes any attribute_links for a specific definition that do not have an item_id associated with them and are not DROPDOWN types
*
* @param int $definition_id
* @return boolean TRUE is returned if the delete was successful or FALSE if there were any failures
*/
public function delete_orphaned_links($definition_id)
{
$this->db->select('definition_type');
$this->db->where('definition_id', $definition_id);
$definition = $this->db->get('attribute_definitions')->row();
if($definition->definition_type != DROPDOWN)
{
$this->db->trans_start();
$this->db->where('item_id');
$this->db->where('definition_id', $definition_id);
$this->db->delete('attribute_links');
$this->db->trans_complete();
return $this->db->trans_status();
}
}
/*
* Deletes any orphaned values that do not have associated links
* @param int $definition_id
* @return boolean TRUE is returned if the delete was successful or FALSE if there were any failures
@@ -693,6 +760,48 @@ class Attribute extends CI_Model
{
$this->db->where('definition_id', $definition_id);
return $this->db->update('attribute_definitions', array('deleted'=>0));
return $this->db->update('attribute_definitions', array('deleted' => 0));
}
/**
*
* @param array attributes attributes that need to be fixed
* @param int $definition_id
* @param string $definition_type This dictates what column should be populated in any new attribute_values that are created
*/
public function attribute_cleanup($attributes, $definition_id, $definition_type)
{
$this->db->trans_begin();
foreach($attributes as $attribute)
{
$new_attribute_id = $this->save_value($attribute['attribute_value'], $definition_id, FALSE, $attribute['attribute_id'], $definition_type);
if($this->save_link($attribute['item_id'], $definition_id, $new_attribute_id) == FALSE)
{
log_message('Error', 'Transaction failed');
$this->db->trans_rollback();
return FALSE;
}
}
$success = $this->delete_orphaned_links($definition_id);
$this->db->trans_commit();
return $success;
}
/**
* Returns all attribute_ids and item_ids assigned to that definition_id
*
* @param int $definition_id
* @return array All attribute_id and item_id pairs in the attribute_links table with that attribute definition_id
*/
public function get_attributes_by_definition($definition_id)
{
$this->db->select('attribute_links.attribute_id, item_id, attribute_value, attribute_decimal, attribute_date');
$this->db->join('attribute_values', 'attribute_values.attribute_id = attribute_links.attribute_id');
$this->db->where('definition_id', $definition_id);
return $this->db->get('attribute_links')->result_array();
}
}

View File

@@ -18,10 +18,11 @@ class Employee extends Person
return ($this->db->get()->num_rows() == 1);
}
public function username_exists($username)
public function username_exists($employee_id, $username)
{
$this->db->from('employees');
$this->db->where('employees.username', $username);
$this->db->where('employees.person_id <>', $employee_id);
return ($this->db->get()->num_rows() == 1);
}
@@ -105,7 +106,7 @@ class Employee extends Person
//Run these queries as a transaction, we want to make sure we do all or nothing
$this->db->trans_start();
if(ENVIRONMENT != 'testing' && !$this->username_exists($employee_data['username']) && parent::save($person_data, $employee_id))
if(ENVIRONMENT != 'testing' && parent::save($person_data, $employee_id))
{
if(!$employee_id || !$this->exists($employee_id))
{

View File

@@ -12,16 +12,15 @@ class Item extends CI_Model
{
// check if $item_id is a number and not a string starting with 0
// because cases like 00012345 will be seen as a number where it is a barcode
if(ctype_digit($item_id) && substr($item_id, 0, 1) != '0')
if(ctype_digit($item_id) && substr($item_id, 0, 1) !== '0')
{
$this->db->from('items');
$this->db->where('item_id', (int) $item_id);
if($ignore_deleted == FALSE)
$this->db->where('item_id', intval($item_id));
if($ignore_deleted === FALSE)
{
$this->db->where('deleted', $deleted);
}
return ($this->db->get()->num_rows() == 1);
return ($this->db->get('items')->num_rows() === 1);
}
return FALSE;
@@ -37,16 +36,15 @@ class Item extends CI_Model
return FALSE;
}
$this->db->from('items');
$this->db->where('item_number', (string) $item_number);
// check if $item_id is a number and not a string starting with 0
// because cases like 00012345 will be seen as a number where it is a barcode
if(ctype_digit($item_id) && substr($item_id, 0, 1) != '0')
{
$this->db->where('item_id !=', (int) $item_id);
$this->db->where('item_id !=', intval($item_id));
}
return $this->db->get()->num_rows() >= 1;
return ($this->db->get('items')->num_rows() >= 1);
}
/*
@@ -82,7 +80,7 @@ class Item extends CI_Model
public function search($search, $filters, $rows = 0, $limit_from = 0, $sort = 'items.name', $order = 'asc', $count_only = FALSE)
{
// get_found_rows case
if($count_only == TRUE)
if($count_only === TRUE)
{
$this->db->select('COUNT(DISTINCT items.item_id) AS count');
}
@@ -208,7 +206,7 @@ class Item extends CI_Model
}
// get_found_rows case
if($count_only == TRUE)
if($count_only === TRUE)
{
return $this->db->get()->row()->count;
}
@@ -262,13 +260,12 @@ class Item extends CI_Model
$this->db->select('GROUP_CONCAT(attribute_value SEPARATOR \'|\') AS attribute_values');
$this->db->select('GROUP_CONCAT(attribute_decimal SEPARATOR \'|\') AS attribute_dvalues');
$this->db->select('GROUP_CONCAT(attribute_date SEPARATOR \'|\') AS attribute_dtvalues');
$this->db->from('items');
$this->db->join('attribute_links', 'attribute_links.item_id = items.item_id', 'left');
$this->db->join('attribute_values', 'attribute_links.attribute_id = attribute_values.attribute_id', 'left');
$this->db->where('items.item_id', $item_id);
$this->db->group_by('items.item_id');
$query = $this->db->get();
$query = $this->db->get('items');
if($query->num_rows() == 1)
{
@@ -294,17 +291,14 @@ class Item extends CI_Model
*/
public function get_info_by_id_or_number($item_id, $include_deleted = TRUE)
{
$this->db->from('items');
$this->db->group_start();
$this->db->where('items.item_number', $item_id);
// check if $item_id is a number and not a string starting with 0
// because cases like 00012345 will be seen as a number where it is a barcode
if(ctype_digit($item_id) && substr($item_id, 0, 1) != '0')
{
$this->db->or_where('items.item_id', (int) $item_id);
$this->db->or_where('items.item_id', intval($item_id));
}
$this->db->group_end();
@@ -318,7 +312,7 @@ class Item extends CI_Model
// due to barcode and item_id clash
$this->db->limit(1);
$query = $this->db->get();
$query = $this->db->get('items');
if($query->num_rows() == 1)
{
@@ -390,10 +384,16 @@ class Item extends CI_Model
$this->db->where('item_id', $item_data['item_id']);
$this->db->update('items', array('low_sell_item_id'=>$item_data['item_id']));
}
return TRUE;
}
return FALSE;
}
else
{
$item_data['item_id'] = $item_id;
}
$this->db->where('item_id', $item_id);
@@ -546,7 +546,7 @@ class Item extends CI_Model
public function get_search_suggestions($search, $filters = array('is_deleted' => FALSE, 'search_custom' => FALSE), $unique = FALSE, $limit = 25)
{
$suggestions = array();
$suggestions = [];
$non_kit = array(ITEM, ITEM_AMOUNT_ENTRY);
$this->db->select($this->get_search_suggestion_format('item_id, name, pack_name'));
@@ -614,16 +614,16 @@ class Item extends CI_Model
}
//Search by custom fields
if($filters['search_custom'] != FALSE)
if($filters['search_custom'] !== FALSE)
{
$this->db->from('attribute_links');
$this->db->join('attribute_values','attribute_links.attribute_id = attribute_values.attribute_id');
$this->db->join('attribute_values', 'attribute_links.attribute_id = attribute_values.attribute_id');
$this->db->join('attribute_definitions', 'attribute_definitions.definition_id = attribute_links.definition_id');
$this->db->like('attribute_value', $search);
$this->db->where('definition_type', TEXT);
$this->db->where('deleted', $filters['is_deleted']);
$this->db->where_in('item_type', $non_kit); // standard, exclude kit items since kits will be picked up later
foreach($this->db->get()->result() as $row)
foreach($this->db->get('attribute_links')->result() as $row)
{
$suggestions[] = array('value' => $row->item_id, 'label' => $this->get_search_suggestion_label($row));
}
@@ -642,7 +642,7 @@ class Item extends CI_Model
public function get_stock_search_suggestions($search, $filters = array('is_deleted' => FALSE, 'search_custom' => FALSE), $unique = FALSE, $limit = 25)
{
$suggestions = array();
$suggestions = [];
$non_kit = array(ITEM, ITEM_AMOUNT_ENTRY);
$this->db->select($this->get_search_suggestion_format('item_id, name, pack_name'));
@@ -716,16 +716,16 @@ class Item extends CI_Model
}
//Search by custom fields
if($filters['search_custom'] != FALSE)
if($filters['search_custom'] !== FALSE)
{
$this->db->from('attribute_links');
$this->db->join('attribute_links.attribute_id = attribute_values.attribute_id');
$this->db->join('attribute_values', 'attribute_links.attribute_id = attribute_values.attribute_id');
$this->db->join('attribute_definitions', 'attribute_definitions.definition_id = attribute_links.definition_id');
$this->db->like('attribute_value', $search);
$this->db->where('definition_type', TEXT);
$this->db->where('stock_type', '0'); // stocked items only
$this->db->where('deleted', $filters['is_deleted']);
foreach($this->db->get()->result() as $row)
foreach($this->db->get('attribute_links')->result() as $row)
{
$suggestions[] = array('value' => $row->item_id, 'label' => $this->get_search_suggestion_label($row));
}
@@ -743,16 +743,15 @@ class Item extends CI_Model
public function get_kit_search_suggestions($search, $filters = array('is_deleted' => FALSE, 'search_custom' => FALSE), $unique = FALSE, $limit = 25)
{
$suggestions = array();
$suggestions = [];
$non_kit = array(ITEM, ITEM_AMOUNT_ENTRY);
$this->db->select('item_id, name');
$this->db->from('items');
$this->db->where('deleted', $filters['is_deleted']);
$this->db->where('item_type', ITEM_KIT);
$this->db->like('name', $search);
$this->db->order_by('name', 'asc');
foreach($this->db->get()->result() as $row)
foreach($this->db->get('items')->result() as $row)
{
$suggestions[] = array('value' => $row->item_id, 'label' => $row->name);
}
@@ -778,6 +777,7 @@ class Item extends CI_Model
$this->db->distinct();
$this->db->like('category', $search);
$this->db->order_by('category', 'asc');
foreach($this->db->get()->result() as $row)
{
$suggestions[] = array('label' => $row->category);
@@ -787,10 +787,12 @@ class Item extends CI_Model
$this->db->select('company_name');
$this->db->from('suppliers');
$this->db->like('company_name', $search);
// restrict to non deleted companies only if is_deleted is FALSE
$this->db->where('deleted', $filters['is_deleted']);
$this->db->distinct();
$this->db->order_by('company_name', 'asc');
foreach($this->db->get()->result() as $row)
{
$suggestions[] = array('label' => $row->company_name);
@@ -813,31 +815,19 @@ class Item extends CI_Model
}
//Search by custom fields
if($filters['search_custom'] != FALSE)
if($filters['search_custom'] !== FALSE)
{
// This section is currently never used but custom fields are replaced with attributes
// therefore in case this feature is required a proper query needs to be written here
/*
$this->db->from('items');
$this->db->group_start();
$this->db->where('item_type', ITEM_KIT);
$this->db->like('custom1', $search);
$this->db->or_like('custom2', $search);
$this->db->or_like('custom3', $search);
$this->db->or_like('custom4', $search);
$this->db->or_like('custom5', $search);
$this->db->or_like('custom6', $search);
$this->db->or_like('custom7', $search);
$this->db->or_like('custom8', $search);
$this->db->or_like('custom9', $search);
$this->db->or_like('custom10', $search);
$this->db->group_end();
$this->db->join('attribute_values', 'attribute_links.attribute_id = attribute_values.attribute_id');
$this->db->join('attribute_definitions', 'attribute_definitions.definition_id = attribute_links.definition_id');
$this->db->like('attribute_value', $search);
$this->db->where('definition_type', TEXT);
$this->db->where('stock_type', '0'); // stocked items only
$this->db->where('deleted', $filters['is_deleted']);
foreach($this->db->get()->result() as $row)
foreach($this->db->get('attribute_links')->result() as $row)
{
$suggestions[] = array('value' => $row->item_id, 'label' => $row->name);
$suggestions[] = array('value' => $row->item_id, 'label' => $this->get_search_suggestion_label($row));
}
*/
}
}
@@ -852,7 +842,7 @@ class Item extends CI_Model
public function get_low_sell_suggestions($search)
{
$suggestions = array();
$suggestions = [];
$this->db->select($this->get_search_suggestion_format('item_id, pack_name'));
$this->db->from('items');
@@ -870,7 +860,7 @@ class Item extends CI_Model
public function get_category_suggestions($search)
{
$suggestions = array();
$suggestions = [];
$this->db->distinct();
$this->db->select('category');
$this->db->from('items');
@@ -887,7 +877,7 @@ class Item extends CI_Model
public function get_location_suggestions($search)
{
$suggestions = array();
$suggestions = [];
$this->db->distinct();
$this->db->select('location');
$this->db->from('items');

View File

@@ -10,7 +10,7 @@ class Summary_items extends Summary_report
array('item_name' => $this->lang->line('reports_item')),
array('category' => $this->lang->line('reports_category')),
array('unit_price' => $this->lang->line('reports_unit_price'), 'sorter' => 'number_sorter'),
array('quantity' => $this->lang->line('reports_quantity')),
array('quantity' => $this->lang->line('reports_quantity'), 'sorter' => 'number_sorter'),
array('subtotal' => $this->lang->line('reports_subtotal'), 'sorter' => 'number_sorter'),
array('tax' => $this->lang->line('reports_tax'), 'sorter' => 'number_sorter'),
array('total' => $this->lang->line('reports_total'), 'sorter' => 'number_sorter'),

View File

@@ -8,7 +8,7 @@ class Summary_taxes extends Summary_report
{
return array(
array('tax_percent' => $this->lang->line('reports_tax_percent'), 'sorter' => 'number_sorter'),
array('report_count' => $this->lang->line('reports_sales')),
array('report_count' => $this->lang->line('reports_sales'), 'sorter' => 'number_sorter'),
array('subtotal' => $this->lang->line('reports_subtotal'), 'sorter' => 'number_sorter'),
array('tax' => $this->lang->line('reports_tax'), 'sorter' => 'number_sorter'),
array('total' => $this->lang->line('reports_total'), 'sorter' => 'number_sorter'));

View File

@@ -209,8 +209,10 @@ $(document).ready(function()
last_name: 'required',
username:
{
required: true,
minlength: 5
minlength: 5,
remote: '<?php echo site_url("$controller_name/check_username/$employee_id")?>'
},
password:
{
@@ -238,8 +240,9 @@ $(document).ready(function()
username:
{
required: "<?php echo $this->lang->line('employees_username_required'); ?>",
minlength: "<?php echo $this->lang->line('employees_username_minlength'); ?>"
},
minlength: "<?php echo $this->lang->line('employees_username_minlength'); ?>",
remote: "<?php echo $this->lang->line('employees_username_duplicate'); ?>"
},
password:
{
<?php

View File

@@ -1,10 +1,10 @@
<ul id="error_message_box" class="error_message_box"></ul>
<?php echo form_open_multipart('items/do_csv_import/', array('id'=>'csv_form', 'class'=>'form-horizontal')); ?>
<?php echo form_open_multipart('items/import_csv_file/', array('id'=>'csv_form', 'class'=>'form-horizontal')); ?>
<fieldset id="item_basic_info">
<div class="form-group form-group-sm">
<div class="col-xs-12">
<a href="<?php echo site_url('items/csv'); ?>"><?php echo $this->lang->line('common_download_import_template'); ?></a>
<a href="<?php echo site_url('items/generate_csv_file'); ?>"><?php echo $this->lang->line('common_download_import_template'); ?></a>
</div>
</div>
@@ -12,8 +12,8 @@
<div class='col-xs-12'>
<div class="fileinput fileinput-new input-group" data-provides="fileinput">
<div class="form-control" data-trigger="fileinput"><i class="glyphicon glyphicon-file fileinput-exists"></i><span class="fileinput-filename"></span></div>
<span class="input-group-addon input-sm btn btn-default btn-file"><span class="fileinput-new"><?php echo $this->lang->line("common_import_select_file"); ?></span><span class="fileinput-exists"><?php echo $this->lang->line("common_import_change_file"); ?></span><input type="file" id="file_path" name="file_path" accept=".csv"></span>
<a href="#" class="input-group-addon input-sm btn btn-default fileinput-exists" data-dismiss="fileinput"><?php echo $this->lang->line("common_import_remove_file"); ?></a>
<span class="input-group-addon input-sm btn btn-default btn-file"><span class="fileinput-new"><?php echo $this->lang->line('common_import_select_file'); ?></span><span class="fileinput-exists"><?php echo $this->lang->line('common_import_change_file'); ?></span><input type="file" id="file_path" name="file_path" accept=".csv"></span>
<a href="#" class="input-group-addon input-sm btn btn-default fileinput-exists" data-dismiss="fileinput"><?php echo $this->lang->line('common_import_remove_file'); ?></a>
</div>
</div>
</div>

View File

@@ -1,4 +1,4 @@
<?php $this->load->view("partial/header"); ?>
<?php $this->load->view('partial/header'); ?>
<script type="text/javascript">
$(document).ready(function()
@@ -17,7 +17,7 @@ $(document).ready(function()
table_support.refresh();
});
// load the preset datarange picker
// load the preset daterange picker
<?php $this->load->view('partial/daterangepicker'); ?>
// set the beginning of time as starting date
$('#daterangepicker').data('daterangepicker').setStartDate("<?php echo date($this->config->item('dateformat'), mktime(0,0,0,01,01,2010));?>");
@@ -58,28 +58,28 @@ $(document).ready(function()
</script>
<div id="title_bar" class="btn-toolbar print_hide">
<button class='btn btn-info btn-sm pull-right modal-dlg' data-btn-submit='<?php echo $this->lang->line('common_submit') ?>' data-href='<?php echo site_url($controller_name."/csv_import"); ?>'
<button class='btn btn-info btn-sm pull-right modal-dlg' data-btn-submit='<?php echo $this->lang->line('common_submit') ?>' data-href='<?php echo site_url("$controller_name/csv_import"); ?>'
title='<?php echo $this->lang->line('items_import_items_csv'); ?>'>
<span class="glyphicon glyphicon-import">&nbsp</span><?php echo $this->lang->line('common_import_csv'); ?>
<span class="glyphicon glyphicon-import">&nbsp;</span><?php echo $this->lang->line('common_import_csv'); ?>
</button>
<button class='btn btn-info btn-sm pull-right modal-dlg' data-btn-new='<?php echo $this->lang->line('common_new') ?>' data-btn-submit='<?php echo $this->lang->line('common_submit') ?>' data-href='<?php echo site_url($controller_name."/view"); ?>'
<button class='btn btn-info btn-sm pull-right modal-dlg' data-btn-new='<?php echo $this->lang->line('common_new') ?>' data-btn-submit='<?php echo $this->lang->line('common_submit') ?>' data-href='<?php echo site_url("$controller_name/view"); ?>'
title='<?php echo $this->lang->line($controller_name . '_new'); ?>'>
<span class="glyphicon glyphicon-tag">&nbsp</span><?php echo $this->lang->line($controller_name. '_new'); ?>
<span class="glyphicon glyphicon-tag">&nbsp;</span><?php echo $this->lang->line($controller_name. '_new'); ?>
</button>
</div>
<div id="toolbar">
<div class="pull-left form-inline" role="toolbar">
<button id="delete" class="btn btn-default btn-sm print_hide">
<span class="glyphicon glyphicon-trash">&nbsp</span><?php echo $this->lang->line("common_delete"); ?>
<span class="glyphicon glyphicon-trash">&nbsp;</span><?php echo $this->lang->line('common_delete'); ?>
</button>
<button id="bulk_edit" class="btn btn-default btn-sm modal-dlg print_hide", data-btn-submit='<?php echo $this->lang->line('common_submit') ?>', data-href='<?php echo site_url($controller_name."/bulk_edit"); ?>'
<button id="bulk_edit" class="btn btn-default btn-sm modal-dlg print_hide", data-btn-submit='<?php echo $this->lang->line('common_submit') ?>', data-href='<?php echo site_url("$controller_name/bulk_edit"); ?>'
title='<?php echo $this->lang->line('items_edit_multiple_items'); ?>'>
<span class="glyphicon glyphicon-edit">&nbsp</span><?php echo $this->lang->line("items_bulk_edit"); ?>
<span class="glyphicon glyphicon-edit">&nbsp;</span><?php echo $this->lang->line("items_bulk_edit"); ?>
</button>
<button id="generate_barcodes" class="btn btn-default btn-sm print_hide" data-href='<?php echo site_url($controller_name."/generate_barcodes"); ?>' title='<?php echo $this->lang->line('items_generate_barcodes');?>'>
<span class="glyphicon glyphicon-barcode">&nbsp</span><?php echo $this->lang->line("items_generate_barcodes"); ?>
<button id="generate_barcodes" class="btn btn-default btn-sm print_hide" data-href='<?php echo site_url("$controller_name/generate_barcodes"); ?>' title='<?php echo $this->lang->line('items_generate_barcodes');?>'>
<span class="glyphicon glyphicon-barcode">&nbsp;</span><?php echo $this->lang->line('items_generate_barcodes'); ?>
</button>
<?php echo form_input(array('name'=>'daterangepicker', 'class'=>'form-control input-sm', 'id'=>'daterangepicker')); ?>
<?php echo form_multiselect('filters[]', $filters, '', array('id'=>'filters', 'class'=>'selectpicker show-menu-arrow', 'data-none-selected-text'=>$this->lang->line('common_none_selected_text'), 'data-selected-text-format'=>'count > 1', 'data-style'=>'btn-default btn-sm', 'data-width'=>'fit')); ?>
@@ -96,4 +96,4 @@ $(document).ready(function()
<table id="table"></table>
</div>
<?php $this->load->view("partial/footer"); ?>
<?php $this->load->view('partial/footer'); ?>

View File

@@ -1,7 +1,7 @@
{
"name": "opensourcepos",
"description": "Open Source Point of Sale is a web based POS system written in the PHP language. It uses MySQL as backend and has a simple user interface",
"version": "3.4.0",
"version": "3.3.5",
"license": "MIT",
"authors": [
"jekkos <jekkos - at - opensourcepos.org>",

View File

@@ -14,7 +14,7 @@ networks:
services:
ospos:
image: jekkos/opensourcepos:3.4.0
image: jekkos/opensourcepos:3.3.5
restart: always
depends_on:
- mysql

View File

@@ -14,7 +14,7 @@ networks:
services:
ospos:
image: jekkos/opensourcepos:3.3.4
image: jekkos/opensourcepos:3.3.5
restart: always
depends_on:
- mysql

View File

@@ -1,6 +1,6 @@
{
"name": "opensourcepos",
"version": "3.4.0",
"version": "3.3.5",
"description": "Open Source Point of Sale is a web based point of sale system written in the PHP language. It uses MySQL as the data storage back-end and has a simple user interface.",
"main": "index.php",
"license": "MIT",