Compare commits

...

574 Commits
3.0.2 ... 3.1.0

Author SHA1 Message Date
FrancescoUK
52ab4ce035 Fix db upgrade script and prepare 3.1.0 release (#1242) 2017-09-02 12:43:21 +01:00
FrancescoUK
8dbd5e55dd Switch from en to en_US & en_GB (#1485) 2017-09-01 22:19:32 +01:00
FrancescoUK
1eb7ab2406 Translated using Weblate (English (United Kingdom))
Currently translated at 100.0% (16 of 16 strings)
2017-09-01 06:32:21 +00:00
FrancescoUK
97fbfb32b9 Translated using Weblate (French)
Currently translated at 100.0% (117 of 117 strings)
2017-09-01 06:32:20 +00:00
FrancescoUK
c5f73e0f38 Translated using Weblate (English (United Kingdom))
Currently translated at 100.0% (137 of 137 strings)
2017-09-01 06:32:20 +00:00
FrancescoUK
62030d50d8 Translated using Weblate (English (United Kingdom))
Currently translated at 100.0% (87 of 87 strings)
2017-09-01 06:32:20 +00:00
FrancescoUK
d20dcce5b4 Translated using Weblate (French)
Currently translated at 100.0% (50 of 50 strings)
2017-09-01 06:32:20 +00:00
FrancescoUK
00d15765f3 Translated using Weblate (English (United Kingdom))
Currently translated at 100.0% (50 of 50 strings)
2017-09-01 06:32:20 +00:00
FrancescoUK
11ff84e71d Translated using Weblate (English (United Kingdom))
Currently translated at 100.0% (101 of 101 strings)
2017-09-01 06:32:19 +00:00
FrancescoUK
3806b9350b Translated using Weblate (English (United Kingdom))
Currently translated at 100.0% (29 of 29 strings)
2017-09-01 06:32:18 +00:00
FrancescoUK
7429637dbf Translated using Weblate (French)
Currently translated at 100.0% (67 of 67 strings)
2017-09-01 06:32:18 +00:00
FrancescoUK
26fa619127 Translated using Weblate (English (United Kingdom))
Currently translated at 100.0% (67 of 67 strings)
2017-09-01 06:32:18 +00:00
FrancescoUK
a6a3f83378 Translated using Weblate (English (United Kingdom))
Currently translated at 100.0% (2 of 2 strings)
2017-09-01 06:32:17 +00:00
FrancescoUK
5ad39fe230 Translated using Weblate (English (United Kingdom))
Currently translated at 100.0% (32 of 32 strings)
2017-09-01 06:32:17 +00:00
FrancescoUK
91ef1af0c5 Translated using Weblate (English (United Kingdom))
Currently translated at 100.0% (43 of 43 strings)
2017-09-01 06:32:16 +00:00
FrancescoUK
54f1ca2d1f Translated using Weblate (French)
Currently translated at 100.0% (227 of 227 strings)
2017-09-01 06:32:16 +00:00
FrancescoUK
28953a0def Translated using Weblate (English (United Kingdom))
Currently translated at 100.0% (239 of 239 strings)
2017-09-01 06:32:16 +00:00
FrancescoUK
688ce015fe Translated using Weblate (English (United Kingdom))
Currently translated at 100.0% (63 of 63 strings)
2017-09-01 06:32:15 +00:00
FrancescoUK
b3189a01bf Translated using Weblate (Portuguese (Brazil))
Currently translated at 95.3% (82 of 86 strings)
2017-08-30 20:46:18 +00:00
Rogério Almeida Rodrigues
eee3132cce Translated using Weblate (Portuguese (Brazil))
Currently translated at 91.0% (92 of 101 strings)
2017-08-30 20:41:43 +00:00
FrancescoUK
3730cb0803 Translated using Weblate (Portuguese (Brazil))
Currently translated at 91.0% (92 of 101 strings)
2017-08-30 20:41:33 +00:00
Rogério Almeida Rodrigues
a39c15c71d Translated using Weblate (Portuguese (Brazil))
Currently translated at 65.5% (19 of 29 strings)
2017-08-30 20:38:45 +00:00
Emin Tufan Çetin
fea5b064a9 Translated using Weblate (Turkish)
Currently translated at 98.3% (60 of 61 strings)
2017-08-29 10:15:47 +00:00
FrancescoUK
8169a08ff1 Minor fix 2017-08-27 18:21:29 +01:00
FrancescoUK
e26290469f Regen database script files 2017-08-27 18:12:59 +01:00
jekkos
5dfed09167 Only push zip files to bintray (#1485) 2017-08-27 14:04:01 +02:00
jekkos
a3a48d3ea6 Use sudo to copy files? (#1485) 2017-08-27 13:50:20 +02:00
jekkos
07441d2144 Copy language files to vendor/ (#1485) 2017-08-27 13:45:51 +02:00
objecttothis
3612ecf577 Addition and changes
This app_config key/value exists in the 3.0.2_to_3.1.0 upgrade script but not in tables.sql
Custom values changed to varchar 255 and allowing null to match change in update scripts.
2017-08-27 13:15:25 +02:00
FrancescoUK
f9edc63385 Merge branch 'objecttothis-patch-14'
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
2017-08-26 20:54:35 +01:00
FrancescoUK
31367d8943 Regen db script files 2017-08-26 20:54:16 +01:00
FrancescoUK
4c763ea9c0 Drop location column after migration 2017-08-26 20:47:31 +01:00
objecttothis
7b8a7033a1 Update receivings and sales tables
changing comment to default to null which allows comment fields to not be filled
2017-08-25 22:06:20 +04:00
FrancescoUK
8478a7797c Merge pull request #1523 from objecttothis/patch-4
Removed duplicate lines that exist elsewhere
2017-08-25 15:13:57 +01:00
FrancescoUK
44a571ad4f Remove duplicates from database.sql script 2017-08-25 15:12:37 +01:00
FrancescoUK
0dcfc650a4 Merge pull request #1524 from objecttothis/patch-12
This line needs to go into 2.3_migrate_locations.sql
2017-08-25 14:40:49 +01:00
objecttothis
e4e106d6bc This line needs to go into 2.3_migrate_locations.sql
-- ALTER TABLE ospos_items DROP COLUMN location;
2017-08-25 16:59:21 +04:00
objecttothis
00bc200643 Removed duplicate lines that exist elsewhere
('currency_decimals', '2'), exists in 2.4_to_3.0.sql
('cash_decimals', '2'), already exists above
('cash_rounding_code', '0'), already exists above
2017-08-25 16:40:05 +04:00
FrancescoUK
a40ccfd232 Merge pull request #1508 from objecttothis/patch-2
Increase acceptable length of custom fields and allow null values
2017-08-25 13:15:25 +01:00
Weblate
19cc328c65 Added files since 3.1 (en_US) (#1485) 2017-08-25 11:59:15 +00:00
Emin Tufan Çetin
f26963ed3b Translated using Weblate (Turkish)
Currently translated at 100.0% (16 of 16 strings)
2017-08-25 11:59:15 +00:00
Chiraq Bookstore
a175879fe2 Translated using Weblate (English (United States))
Currently translated at 100.0% (16 of 16 strings)
2017-08-25 11:59:15 +00:00
Emin Tufan Çetin
46e515db1e Translated using Weblate (Turkish)
Currently translated at 89.0% (122 of 137 strings)
2017-08-25 11:59:15 +00:00
Chiraq Bookstore
3368003a53 Translated using Weblate (English (United States))
Currently translated at 100.0% (137 of 137 strings)
2017-08-25 11:59:14 +00:00
Chiraq Bookstore
0112fea0a6 Translated using Weblate (English (United States))
Currently translated at 100.0% (87 of 87 strings)
2017-08-25 11:59:14 +00:00
Chiraq Bookstore
2a5e8fe98c Translated using Weblate (English (United States))
Currently translated at 100.0% (50 of 50 strings)
2017-08-25 11:59:14 +00:00
Chiraq Bookstore
b07d99ea38 Translated using Weblate (English (United States))
Currently translated at 100.0% (12 of 12 strings)
2017-08-25 11:59:14 +00:00
Chiraq Bookstore
ea328d6543 Translated using Weblate (English (United States))
Currently translated at 100.0% (8 of 8 strings)
2017-08-25 11:59:14 +00:00
Chiraq Bookstore
b2b0cb34b5 Translated using Weblate (English (United States))
Currently translated at 100.0% (101 of 101 strings)
2017-08-25 11:59:14 +00:00
Emin Tufan Çetin
a91aa3792b Translated using Weblate (Turkish)
Currently translated at 96.5% (28 of 29 strings)
2017-08-25 11:59:14 +00:00
Chiraq Bookstore
de49a50187 Translated using Weblate (English (United States))
Currently translated at 100.0% (29 of 29 strings)
2017-08-25 11:59:14 +00:00
Emin Tufan Çetin
675404ce89 Translated using Weblate (Turkish)
Currently translated at 96.9% (64 of 66 strings)
2017-08-25 11:59:14 +00:00
Chiraq Bookstore
1ea015c734 Translated using Weblate (English (United States))
Currently translated at 100.0% (67 of 67 strings)
2017-08-25 11:59:14 +00:00
Chiraq Bookstore
56f4dee411 Translated using Weblate (English (United States))
Currently translated at 100.0% (2 of 2 strings)
2017-08-25 11:59:14 +00:00
Chiraq Bookstore
f393cb4c04 Translated using Weblate (English (United States))
Currently translated at 100.0% (32 of 32 strings)
2017-08-25 11:59:14 +00:00
Chiraq Bookstore
4a4172bd0f Translated using Weblate (English (United States))
Currently translated at 100.0% (20 of 20 strings)
2017-08-25 11:59:14 +00:00
Chiraq Bookstore
0aee736fd1 Translated using Weblate (English (United States))
Currently translated at 100.0% (43 of 43 strings)
2017-08-25 11:59:14 +00:00
Chiraq Bookstore
86fc8209a2 Translated using Weblate (English (United States))
Currently translated at 100.0% (239 of 239 strings)
2017-08-25 11:59:14 +00:00
Chiraq Bookstore
db49939d6e Translated using Weblate (English (United States))
Currently translated at 100.0% (8 of 8 strings)
2017-08-25 11:59:14 +00:00
Emin Tufan Çetin
8f2052b43e Translated using Weblate (Turkish)
Currently translated at 100.0% (61 of 61 strings)
2017-08-25 11:59:14 +00:00
Chiraq Bookstore
b7aeb7f36d Translated using Weblate (English (United States))
Currently translated at 100.0% (63 of 63 strings)
2017-08-25 11:59:14 +00:00
Weblate
2fe9c1f58b Added translation using Weblate (Central Khmer) 2017-08-25 11:59:14 +00:00
FrancescoUK
63f859d392 Merge pull request #1520 from objecttothis/patch-10
add missing keys delete dropped key
2017-08-25 08:56:53 +01:00
FrancescoUK
26a5f4688b Merge pull request #1521 from objecttothis/patch-11
add distinct designation to prevent sql error
2017-08-25 08:56:29 +01:00
objecttothis
93d00f06b3 removed the addition of client_id to app_config
this field is added automatically and not needed to be added by the update script.
2017-08-25 11:52:27 +04:00
objecttothis
b5f6cd56d6 add distinct designation to prevent sql error
without distinct it migrates multiple copies of the same stock location name which later cause issues in 2.3_to_2.3.1.sql when trying to insert into ospos_permissions.
2017-08-25 00:12:48 +04:00
FrancescoUK
e451618114 Merge pull request #1519 from objecttothis/patch-9
Corrections to dB modifications
2017-08-24 21:01:06 +01:00
objecttothis
8e8713d1b0 add missing keys delete dropped key
added several missing keys to app_config
deleted one key that was removed from the app at some point
2017-08-24 23:33:25 +04:00
objecttothis
90523b79e2 Corrections to dB modifications
removed comment lines as those appear in 2.3.2_to_2.3.3.sql
2017-08-24 23:25:08 +04:00
FrancescoUK
c715bca5cd Merge pull request #1516 from objecttothis/patch-4
Ignore inserted to prevent SQL errors on duplicate values and comment to default null
2017-08-24 19:23:13 +01:00
FrancescoUK
c88bbe3852 Merge pull request #1515 from objecttothis/patch-8
Ignore pre-existing rows
2017-08-24 19:22:29 +01:00
FrancescoUK
1ee11ea61c Merge pull request #1514 from objecttothis/patch-3
Duplicate inserts into ospos_grants cause error
2017-08-24 19:21:59 +01:00
FrancescoUK
5a19031271 Merge pull request #1512 from objecttothis/patch-7
This insert actually needed to be done in 2.3_to_2.3.1
2017-08-24 19:21:06 +01:00
FrancescoUK
8817005401 Merge pull request #1511 from objecttothis/patch-6
#1509 add missing key,value pairs to permissions
2017-08-24 19:20:30 +01:00
FrancescoUK
6df1c7818e Merge pull request #1513 from objecttothis/patch-5
migrations table won't exist for everyone
2017-08-24 19:19:56 +01:00
objecttothis
3af4bf0187 Ignore pre-existing rows
sales_stock and receivings_stock already exist at the point this insert gets run causing the sql to fail.  Adding the IGNORE directive causes duplicate entries to be skipped in the insert.
2017-08-24 17:55:35 +04:00
objecttothis
1d4692a44a This insert actually needed to be done in 2.3_to_2.3.1
I've already submitted the change in 2.3_to_2.3.1.sql
2017-08-24 17:44:19 +04:00
objecttothis
258debc94a #1509 add missing key,value pairs to permissions
sales_stock and receivings_stock are missing from permissions and it's causing a constraint failure.
2017-08-24 16:51:28 +04:00
objecttothis
34c01ed179 migrations table wont exist for everyone
and the people it does exist for should already have the correct collation
2017-08-24 14:37:30 +04:00
objecttothis
477dcb78db comment should be default null 2017-08-24 14:28:23 +04:00
objecttothis
d4ddb4c8ee IGNORE statement prevents mysql error if already exists 2017-08-24 14:08:23 +04:00
objecttothis
9864b126a8 SQL Fails if key already exists
Using the IGNORE keyword bypasses the insert of that key if it already exists and moves onto the next one.
2017-08-24 14:02:20 +04:00
objecttothis
d29ed9441e Duplicate inserts into ospos_grants cause error
INSERT INTO `ospos_grants` (`permission_id`, `person_id`) VALUES
('sales_stock', 1),
('receivings_stock', 1);

sales_stock and receivings_stock are inserted into the database in 2.3_to_2.3.1.sql, so when this is run it returns an SQL error.
2017-08-24 13:52:57 +04:00
objecttothis
e940c1e99d Increase acceptable length of custom fields and allow null values
Currently the maximum length of these custom fields is 25 characters.  It's not too difficult to imagine a case in which this is far too little.  Also, currently none of the fields are allowed to remain null, which for most uses doesn't make sense as every item wont necessarily have all the fields populated.
2017-08-24 12:31:21 +04:00
FrancescoUK
bdc63c5c02 Missing additions to database update scripts (#1488) 2017-08-23 22:28:11 +01:00
FrancescoUK
120b932219 Include mod_rewrite to redirect to ./public/ (#1491) 2017-08-23 21:40:52 +01:00
FrancescoUK
745b9efed1 Small payment summary report query optimisation 2017-08-22 22:31:00 +01:00
jekkos
582311a461 Try to fix php file copy (#1458) 2017-08-22 20:40:18 +02:00
jekkos
69b687989d Fix travis build (#1458) 2017-08-22 09:00:26 +02:00
jekkos
1055ebc5ff Explicitly set folder permissions (#1458) 2017-08-22 08:44:24 +02:00
jekkos
d49cb4fc0f Copy default english to en_US, en_GB and az_AZ (#1485) 2017-08-22 08:38:14 +02:00
Travis Garrison
31bcad32a6 Translated using Weblate (Russian)
Currently translated at 85.0% (114 of 134 strings)
2017-08-21 21:51:54 +00:00
Emin Tufan Çetin
6956c6362e Translated using Weblate (Turkish)
Currently translated at 100.0% (12 of 12 strings)
2017-08-21 21:51:53 +00:00
Emin Tufan Çetin
4821a8851e Translated using Weblate (Turkish)
Currently translated at 100.0% (26 of 26 strings)
2017-08-21 21:51:53 +00:00
Emin Tufan Çetin
8f133b804f Translated using Weblate (Turkish)
Currently translated at 100.0% (20 of 20 strings)
2017-08-21 21:51:53 +00:00
Emin Tufan Çetin
7894c0c0fc Translated using Weblate (Turkish)
Currently translated at 78.5% (168 of 214 strings)
2017-08-21 21:51:53 +00:00
Travis Garrison
2254ce1fbb Translated using Weblate (Russian)
Currently translated at 100.0% (8 of 8 strings)
2017-08-21 21:51:53 +00:00
Emin Tufan Çetin
7eb8284f2e Translated using Weblate (Turkish)
Currently translated at 100.0% (61 of 61 strings)
2017-08-21 21:51:53 +00:00
Emin Tufan Çetin
75f5e0f1fc Translated using Weblate (Turkish)
Currently translated at 100.0% (20 of 20 strings)
Added translation using Weblate (English (United Kingdom))

Added translation using Weblate (English (United States))
2017-08-21 21:51:32 +00:00
Weblate
0cf8543991 Added translation using Weblate (English (United States)) 2017-08-21 21:50:04 +00:00
Weblate
ec11d3f3e4 Added translation using Weblate (English (United Kingdom)) 2017-08-21 21:50:04 +00:00
Weblate
33ff6c9a44 Added translation using Weblate (Azerbaijani) 2017-08-21 21:50:04 +00:00
FrancescoUK
5dd7a5fde1 Fix sql upgrade scripts and UPGRADE.txt description (#1488) 2017-08-20 17:11:26 +01:00
Guenther Lomas
6f261132a3 Translated using Weblate (Chinese)
Currently translated at 86.8% (119 of 137 strings)
2017-08-18 19:55:09 +00:00
Guenther Lomas
665edee213 Translated using Weblate (Chinese)
Currently translated at 82.0% (41 of 50 strings)
2017-08-18 19:55:09 +00:00
Guenther Lomas
a2af047899 Translated using Weblate (Chinese)
Currently translated at 90.0% (18 of 20 strings)
2017-08-18 19:55:09 +00:00
Guenther Lomas
bbec55e77b Translated using Weblate (Chinese)
Currently translated at 92.0% (23 of 25 strings)
2017-08-18 19:55:09 +00:00
Guenther Lomas
896cc96119 Translated using Weblate (Chinese)
Currently translated at 83.1% (178 of 214 strings)
2017-08-18 19:55:09 +00:00
Guenther Lomas
ec1ff216ad Translated using Weblate (Chinese)
Currently translated at 100.0% (61 of 61 strings)
2017-08-18 19:55:09 +00:00
FrancescoUK
c57679cac1 Fix Enhancement typo in ISSUE_TEMPLATE.md 2017-08-18 19:52:39 +01:00
FrancescoUK
ddaa1e88e9 Fix comment cannot be null issue (#1483) 2017-08-18 19:49:01 +01:00
jekkos
6a65618e82 Set branch name to travis_branch + create folders on the fly (#1480) 2017-08-18 18:10:04 +02:00
jekkos
833490c9a3 Copy translations files with superuser powers (#1480) 2017-08-18 17:58:31 +02:00
jekkos
92f62621d5 Fix Baku timezone offset (#1487) 2017-08-18 16:07:59 +02:00
jekkos
97334b2e42 Add languages before packaging (#1480) 2017-08-18 10:20:34 +02:00
jekkos
767b0d293b Fix error in upgrade script (#1477) 2017-08-16 22:55:09 +02:00
jekkos
ffc7b10b3c Fix nominatim autocomplete (jQuery 2.0) (#1471) 2017-08-16 00:00:00 +02:00
jekkos
5a41626ffd Fix .travis.yml (#1448) 2017-08-15 23:28:06 +02:00
jekkos
e12de53fd8 Publish zip's for all branches + extend filename (#1448) 2017-08-15 23:22:04 +02:00
jekkos
768bbf8b18 Add check for testfile presence (#1455) 2017-08-13 18:45:07 +02:00
jekkos
0e4fcadd9f Resync language files (#1242) 2017-08-13 18:40:12 +02:00
jekkos
dd6c8fdd25 Add CSV files to dist zip (#1469) 2017-08-13 18:31:41 +02:00
FrancescoUK
c579fcf2fa Merge pull request #1468 from RuleDomain/fix-receipt-short
Drop price from short receipt per #1466
2017-08-13 08:33:04 +01:00
FrancescoUK
1ac7994758 Replace spaces with tabs 2017-08-13 08:31:42 +01:00
FrancescoUK
c9fd560b00 Merge pull request #1467 from RuleDomain/fix-cash-rounding-error
Fix cash rounding issue (#1430)
2017-08-13 07:03:45 +01:00
Steve Ireland
a9afce8e14 Drop price from short receipt. 2017-08-12 22:04:43 -04:00
Steve Ireland
2177e71f47 Fix cash rounding issue 2017-08-12 21:17:52 -04:00
FrancescoUK
2a4668a80f Merge pull request #1465 from Altoubi/patch-1
Update config_lang.php
2017-08-12 22:55:50 +01:00
Mohammed Altoubi
86d152a668 Update config_lang.php 2017-08-13 01:50:55 +04:00
FrancescoUK
f23f583ced Add Customer get_row function in order to refresh the table row correctly (#1369) 2017-08-12 22:41:10 +01:00
FrancescoUK
712414c56e Added "due payment" to manage credit (#1427) 2017-08-12 20:46:07 +01:00
FrancescoUK
6fefe3e016 Merge branch 'RuleDomain-fix-receiving-issue'
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
2017-08-12 19:23:14 +01:00
FrancescoUK
abd3e8ac34 Fix receiving issue (#1457) 2017-08-12 19:22:27 +01:00
FrancescoUK
c364d296cd Fix PRICE_KIT_ITEMS mistake (#1450) 2017-08-07 20:21:30 +01:00
FrancescoUK
8e86fbdc2a Fix comparisons in constant substitution of magic numbers (#1450) 2017-08-07 20:11:21 +01:00
FrancescoUK
0f8c7f52cd Fix 3.0.2_to_3.1.0.sql script mistake 2017-08-07 16:37:42 +01:00
FrancescoUK
bbe766165a Fix sql script error due to foreign key constraints 2017-08-06 19:55:22 +01:00
FrancescoUK
48fe421bf0 Merge pull request #1441 from jekkos/feature/cleanup
Cleanup Sales controller
2017-08-06 19:40:30 +01:00
jekkos
6c714b2dc4 Add constants for magic numbers 2017-08-06 14:33:26 +01:00
FrancescoUK
9d08e9e5be Restore barcode formats 2017-08-06 14:33:26 +01:00
jekkos
4a05f00307 Some indentation 2017-08-06 14:33:26 +01:00
jekkos
6b0a2576a3 Remove unused methods 2017-08-06 14:33:26 +01:00
jekkos
86d3c6bf04 Cleanup Sales controller 2017-08-06 14:33:26 +01:00
FrancescoUK
3ef1abdcc5 Check at login time all the PHP extensions are available if not error_log 2017-08-06 14:32:17 +01:00
FrancescoUK
627bbb9b07 Update README.md 2017-08-06 10:07:29 +01:00
jekkos
283ec86c3f Only deploy from master 2017-08-06 10:28:00 +02:00
FrancescoUK
b15b302624 Merge pull request #1445 from RuleDomain/fix-long-alt-description
Fix to print 255 character alt item description
2017-08-06 06:43:42 +01:00
jekkos
1f508d0b89 Update README instructions 2017-08-06 02:10:18 +02:00
FrancescoUK
e218453ab3 Add robots.txt directive file to avoid scanning of web bots 2017-08-06 02:10:18 +02:00
jekkos
0476265e7a Add translations to output zip 2017-08-06 02:10:18 +02:00
jekkos
1589b8ecee Try to fix filename generation 2017-08-06 02:10:18 +02:00
jekkos
32e1babefd Fix filename 2017-08-06 02:10:18 +02:00
jekkos
ec2fe4a5de Fix find replace 2017-08-06 02:10:18 +02:00
jekkos
91b03ab78b Add deployment files 2017-08-06 02:10:18 +02:00
FrancescoUK
1f6e689151 Development installation script 2017-08-06 02:10:18 +02:00
jekkos
560d25a281 Fix .travis.yml 2017-08-06 02:10:18 +02:00
jekkos
0ab72d8719 Add git revision to bintray zip 2017-08-06 02:10:18 +02:00
FrancescoUK
991042a0f6 Clean bower license file 2017-08-06 02:10:18 +02:00
FrancescoUK
6c043e8c5f Clean public/dist folder 2017-08-06 02:10:18 +02:00
FrancescoUK
0530abc5f8 Install better random support for 5.x as suggested by CodeIgniter 2017-08-06 02:10:18 +02:00
FrancescoUK
32004f28d4 Clean completely vendor folder 2017-08-06 02:10:18 +02:00
FrancescoUK
2a05d91d44 Update composer.LICENSES 2017-08-06 02:10:18 +02:00
FrancescoUK
a99d3536ce FIx Gruntfile.js double entry 2017-08-06 02:10:18 +02:00
FrancescoUK
c6378ba4d2 Minor fix 2017-08-06 02:10:18 +02:00
FrancescoUK
aa0e250250 Fixed styling issues and inventory missing translation 2017-08-06 02:10:18 +02:00
FrancescoUK
6dc1f81cbf Update js plugins and regen dist files 2017-08-06 02:10:18 +02:00
jekkos
c3d9173442 Add back name capitalization library 2017-08-06 02:10:18 +02:00
jekkos
3d238ee78c Add .htaccess to zipfile (#1305) 2017-08-06 02:10:18 +02:00
jekkos
f0fd8a305b Cleanup source repository, create dist zip (#1305) 2017-08-06 02:10:18 +02:00
Steve Ireland
a6045d9e7b Restore the ability to print the entire 255 character alt item
description on quote and invoice.
2017-08-05 19:09:06 -04:00
FrancescoUK
02813c8374 Merge pull request #1431 from RuleDomain/sales-tax-correction
Display tax decimals or currency decimals for tax amounts.
2017-08-05 16:27:47 +01:00
FrancescoUK
4835507e1e Merge pull request #1438 from jekkos/feature/barcode_format
Add function to parse barcode fields (#1243)
2017-08-05 16:25:31 +01:00
FrancescoUK
3b0df85f69 Various fixes 2017-08-05 16:17:06 +01:00
jekkos
36177d1431 Fix jQuery get and make it future proof 2017-08-05 15:18:49 +01:00
jekkos
bc04884190 Add function to parse barcode fields 2017-08-05 15:18:49 +01:00
FrancescoUK
8a3ba5692a Minor fixes (#1443) 2017-08-05 15:10:04 +01:00
FrancescoUK
e89bd73bb5 Add reCaptcha to login page (#1443) 2017-08-05 11:46:48 +01:00
FrancescoUK
f1936dbb4d Fixed rewards foreign key constraint issue (#1436) 2017-08-03 21:39:40 +01:00
Steve Ireland
629f180b8d Dispay tax decimals or currency decimals for tax amounts depending on if sales tax is enabled. 2017-07-29 22:54:49 -04:00
FrancescoUK
6485cf050d Add database foreign keys related to rewards 2017-07-29 22:21:20 +01:00
FrancescoUK
cd792eb56a Add receipt font size configuration (#1401 #1416) 2017-07-28 21:48:34 +01:00
FrancescoUK
256c926e3d Fix French translation mistakes causing errors (#1418) 2017-07-28 20:50:32 +01:00
FrancescoUK
c18c703237 Fix double counting of payments in summary report (#1415) 2017-07-28 20:39:19 +01:00
FrancescoUK
6e64f8ef00 Add customer phone number if available in the register suggestions (#744) 2017-07-28 20:22:00 +01:00
FrancescoUK
591d432d4f Lookup customer in sales register by phone number and email (#1087) 2017-07-28 20:08:00 +01:00
FrancescoUK
4a61119c3d Regen ApiGen code documentation 2017-07-28 18:15:35 +01:00
FrancescoUK
d7237261f7 Update js plugins 2017-07-28 18:11:28 +01:00
FrancescoUK
81512aa76e Update bower.json 2017-07-28 16:57:26 +01:00
FrancescoUK
0dec6819ad Fix git exclusion (#1408) 2017-07-27 20:03:09 +01:00
FrancescoUK
afca2882f8 Regen dist and database files 2017-07-27 19:47:14 +01:00
jekkos
eb610fccb5 Add missing bootswatch themes (#1408) 2017-07-25 22:20:02 +02:00
Steve Ireland
641e2f414c Add missing language element for rounding code "Unknown" and eliminate duplicate statements in upgrade statement, and fix issue with 0 tax_category_id 2017-07-25 00:56:59 +02:00
jekkos
5d49728c74 Don't add csrf token if cookie expired (#1392) 2017-07-18 08:51:36 +02:00
FrancescoUK
858845f4f5 Merge pull request #1397 from RuleDomain/tax-category-cleanup
Improve tax category maintenance.
2017-07-15 22:08:09 +01:00
Steve Ireland
eccf08cf8f Improve tax category maintenance. 2017-07-15 16:42:27 -04:00
FrancescoUK
623572b0f5 Update js plugin and regen dist files 2017-07-14 16:29:47 +01:00
FrancescoUK
dc0d580d05 Fix exceptions in invoice and receipt emails (#1325) 2017-07-14 11:28:08 +01:00
FrancescoUK
fe05845bd4 Fix invoice code indentation 2017-07-14 09:57:55 +01:00
Weblate
1798b4553b Update weblate translations 2017-07-14 07:02:39 +00:00
AELHOFY
e59a3372a9 Translated using Weblate (Arabic)
Currently translated at 100.0% (214 of 214 strings)
2017-07-14 07:00:06 +00:00
jekkos
8a7b93f1b9 Sync language files (#1242) 2017-07-14 08:34:30 +02:00
jekkos
61a3fee4a6 Fix sales / token substitution 2017-07-14 08:30:35 +02:00
jekkos
a92d60d99f Minor refactoring tax story 2017-07-14 00:07:13 +02:00
FrancescoUK
47486b980f Fix Store Config Tax category, Reward, Locations and Tables add and remove of entries 2017-07-13 22:43:49 +01:00
FrancescoUK
dc14cbd7ab Merge pull request #1395 from RuleDomain/fix-quotes-in-takings-2
Remove redundant where clause in Sale.php
2017-07-13 18:54:57 +01:00
Steve Ireland
d7b7f5510c Remove redundant where clause in Sales.php 2017-07-13 13:15:54 -04:00
FrancescoUK
323b7900e9 Merge pull request #1393 from RuleDomain/fix-quotes-in-takings
Remove quotes from the list of takings.
2017-07-13 15:02:17 +01:00
Steve Ireland
eb4d0c8c88 Remove quotes from the list of takings. 2017-07-12 23:15:34 -04:00
FrancescoUK
b0e3600ea6 Fix stock location update (#1389) 2017-07-12 22:22:05 +01:00
FrancescoUK
41ae935223 Merge branch 'RuleDomain-long-alt-description'
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
2017-07-11 22:53:37 +01:00
FrancescoUK
60db2cc4b0 Fixes 2017-07-11 22:43:08 +01:00
Steve Ireland
b7951ea5b2 Consolidate tax configuration. 2017-07-11 22:36:32 +01:00
Steve Ireland
cb31ebb06e Extend alternate item description to 255 characters. 2017-07-11 22:32:51 +01:00
FrancescoUK
3f0a53933c Merge branch 'RuleDomain-tax-configuration'
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
2017-07-11 22:23:42 +01:00
FrancescoUK
f92b06cff2 Fixes 2017-07-11 22:23:14 +01:00
Steve Ireland
bab4791b5e Consolidate tax configuration. 2017-07-09 18:48:47 -04:00
FrancescoUK
421468f6d8 Update README.md 2017-07-07 21:25:55 +01:00
FrancescoUK
f3a08eab3b Update ISSUE_TEMPLATE.md 2017-07-07 21:23:10 +01:00
FrancescoUK
863988d2ab Regen ApiGen documentation 2017-07-06 22:13:18 +01:00
FrancescoUK
e524593a15 Minor fixes 2017-07-06 20:38:41 +01:00
FrancescoUK
181d904360 Visualise the taxes according to the selected number of decimals (#1133) 2017-07-06 20:31:35 +01:00
Steve Ireland
4448348f7c Improve sale status reporting 2017-07-04 22:02:27 -04:00
FrancescoUK
bb762efac7 Merge pull request #1376 from odiea/master
Update Items.php . Changed receiving_quantity to 1
2017-07-04 08:55:48 +01:00
FrancescoUK
c5697edf76 Fix payment summary report missing return and location (#1133) 2017-07-03 22:07:58 +01:00
FrancescoUK
3f73e449f0 Fix summary report and detailed sale report different tax issue (#1133) 2017-07-03 20:13:37 +01:00
odiea
a18745b3af Update Items.php 2017-07-03 06:23:05 -06:00
FrancescoUK
0057c77721 Replace UPC/EAN/ISBN with Barcode label (#1370) 2017-07-02 21:52:07 +01:00
FrancescoUK
fd3fecbd76 Update README 2017-07-02 21:31:56 +01:00
FrancescoUK
ad690c9ca6 Add odiea to the hall of fame :-) 2017-07-02 21:27:09 +01:00
FrancescoUK
ab29527619 Fix (yet again) registry "complete" issue with rounding 2017-07-02 21:07:55 +01:00
FrancescoUK
12b5ed43c6 Regen ApiGen documentation 2017-07-02 20:26:45 +01:00
FrancescoUK
a78f053c80 Fix config Table and Reward errors 2017-07-02 19:48:58 +01:00
FrancescoUK
5ea0324bc0 Fix rounding issues in reports (#1336) 2017-07-02 15:32:06 +01:00
FrancescoUK
005193e3e0 Update CodeIgniter to vs 3.1.5 2017-07-02 13:05:12 +01:00
FrancescoUK
95733ea476 Regen Apigen documentation 2017-07-02 11:23:09 +01:00
FrancescoUK
c8499599ab General code tidy up, added documentation 2017-07-02 11:15:57 +01:00
FrancescoUK
2f44a9d5c2 Update ISSUE_TEMPLATE.md 2017-07-02 09:00:34 +01:00
FrancescoUK
d28e95208b Update TEMPLATE_ISSUES.md to reflect the latest 2017-07-01 10:06:05 +01:00
FrancescoUK
c4bda0e1fe Merge branch 'RuleDomain-vat-discount-amount-issues'
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
2017-06-30 19:11:41 +01:00
FrancescoUK
15e0da4515 Minor fixes 2017-06-30 19:10:43 +01:00
Steve Ireland
c71ce1e8ae Fix discount issue on checkout in VAT tax scenario 2017-06-30 19:05:03 +01:00
FrancescoUK
d5e2b6cb0d Regen files 2017-06-30 19:03:15 +01:00
FrancescoUK
d25b1408c9 Merge pull request #1362 from RuleDomain/discard-quote-fix
Fix #1340 - failure to discard quotes
2017-06-27 06:22:09 +01:00
Steve Ireland
c3f83202a8 Fix failure to discard quotes 2017-06-26 23:32:35 -04:00
FrancescoUK
643c5d91a6 Merge pull request #1360 from RuleDomain/suspended-sale-inventory-fix
Fix for #1354, inventory update issue for suspended sales
2017-06-26 05:55:38 +01:00
Steve Ireland
69e56d06ae Correction to update inventory only if item type is standard and sale type is standard. 2017-06-25 22:11:06 -04:00
FrancescoUK
ee2f66aa61 Merge pull request #1359 from odiea/master
Fix Detailed Reports to show table content.
2017-06-25 20:35:31 +01:00
odiea
16502065fa Fix Detailed Reports to show table content. 2017-06-25 09:53:57 -06:00
FrancescoUK
1a7ed8a69b Fix line duplication mistake (#1358) 2017-06-24 17:44:58 +01:00
FrancescoUK
d2eaaab92c Merge pull request #1358 from odiea/master
Update Receiving.php
2017-06-24 16:37:17 +01:00
odiea
55666caac5 Update Receiving.php 2017-06-24 09:29:01 -06:00
FrancescoUK
841c8166a2 Fixed missing English translation (#1355) 2017-06-24 13:39:35 +01:00
FrancescoUK
4e5ac5c521 Merge branch 'odiea-receivingquantity'
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
2017-06-24 13:03:54 +01:00
FrancescoUK
d59e713f1f move receiving database update to common database update script 2017-06-24 13:03:00 +01:00
odiea
78877094fb Update receipt.php 2017-06-24 13:03:00 +01:00
odiea
e2e0ade259 Update for Items receiving_quantity 2017-06-24 13:03:00 +01:00
FrancescoUK
e61e409bfe Fix name Title Case issue (#1301) using a composer lib 2017-06-24 12:25:46 +01:00
jekkos
5d22e41fe2 Fix refresh on focusout (#1351, #1328) 2017-06-20 22:39:32 +02:00
jekkos
0d82db42da Show string placeholders if translations are missing (#1349) 2017-06-19 22:14:01 +02:00
jekkos
ff7848dcff Fix escape error in french (#1344) 2017-06-19 22:06:57 +02:00
FrancescoUK
4866457164 Merge pull request #1342 from RuleDomain/fix-undefined-table-status
Fix undefined table_status error in Sale.php
2017-06-18 09:51:35 +01:00
Steve Ireland
acd003a44c Fix undeifined table_status error in Sale.php 2017-06-13 20:43:47 -04:00
jekkos
f407702dbe Add database.php to docker image (#1297) 2017-06-13 19:17:34 +02:00
FrancescoUK
d129610b24 Merge pull request #1335 from Frontuari/master
Fixed Dinner Tables feature
2017-06-07 19:44:18 +01:00
Jorge Colmenarez
55bf5eddda Fixed Dinner Tables feature 2017-06-07 11:15:46 -04:00
FrancescoUK
94ea15bc18 Fixed notification pop up issues in Config with tables & rewards 2017-06-04 14:31:50 +01:00
FrancescoUK
91fd435cca Fixes to reports tax summary and rewards regressions 2017-06-04 10:46:24 +01:00
FrancescoUK
8f019b4631 Merge branch 'RuleDomain-sales-tax-reporting'
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
2017-06-03 23:09:15 +01:00
FrancescoUK
51e160982e Upgrades sales tax reporting 2017-06-03 23:08:09 +01:00
Steve Ireland
1f2218bbc9 Upgrades sales tax reporting 2017-06-03 21:51:02 +01:00
jekkos
77145d29a8 Regnerate language files (#1330) 2017-06-02 19:47:13 +02:00
jekkos
3a447561eb Merge pull request #1330 from rotrico/master
Improve spanish translation
2017-06-02 19:43:21 +02:00
rotrico
6ee545d6eb Improve spanish translation to master version 2017-06-01 13:56:48 +02:00
FrancescoUK
afbf714bd2 Revert "Translated using Weblate (English)" mistakes 2017-05-30 21:04:22 +01:00
FrancescoUK
1a2bc1cc42 Merge pull request #1327 from joshua1234511/hotfix/giftcard-stuck-at-10-issue
fix for Giftcard  issue both display and count (#1315)
2017-05-30 07:07:05 +01:00
Joshua Fernandes
4268a70388 fix for that issue both display and count 2017-05-30 07:36:57 +05:30
Almubaraq Ratomi
189b189e08 Translated using Weblate (Indonesian)
Currently translated at 100.0% (16 of 16 strings)
2017-05-29 22:22:30 +00:00
Almubaraq Ratomi
403c875edf Translated using Weblate (Indonesian)
Currently translated at 100.0% (133 of 133 strings)
2017-05-29 22:22:29 +00:00
Almubaraq Ratomi
4f6cf8b917 Translated using Weblate (Indonesian)
Currently translated at 100.0% (86 of 86 strings)
2017-05-29 22:22:29 +00:00
Almubaraq Ratomi
fd6335081d Translated using Weblate (English)
Currently translated at 100.0% (29 of 29 strings)
2017-05-29 22:22:29 +00:00
Almubaraq Ratomi
234cedff15 Translated using Weblate (Indonesian)
Currently translated at 100.0% (67 of 67 strings)
2017-05-29 22:22:29 +00:00
Almubaraq Ratomi
8348628dc6 Translated using Weblate (English)
Currently translated at 100.0% (66 of 66 strings)
2017-05-29 22:22:29 +00:00
Almubaraq Ratomi
ade9a57fe0 Translated using Weblate (Indonesian)
Currently translated at 100.0% (214 of 214 strings)
2017-05-29 22:22:29 +00:00
Almubaraq Ratomi
6559f9c561 Translated using Weblate (Indonesian)
Currently translated at 100.0% (62 of 62 strings)
2017-05-29 22:22:29 +00:00
Almubaraq Ratomi
a7a559fc72 Translated using Weblate (Indonesian)
Currently translated at 92.7% (89 of 96 strings)
2017-05-29 22:22:29 +00:00
Marcos
e25d1483ae Translated using Weblate (Portuguese (Brazil))
Currently translated at 83.6% (179 of 214 strings)
2017-05-29 22:22:29 +00:00
Almubaraq Ratomi
41a5218583 Translated using Weblate (Indonesian)
Currently translated at 100.0% (96 of 96 strings)
2017-05-29 22:22:29 +00:00
Almubaraq Ratomi
cc7fcaf264 Translated using Weblate (Indonesian)
Currently translated at 100.0% (96 of 96 strings)
2017-05-29 22:22:29 +00:00
Almubaraq Ratomi
e776f31ec5 Translated using Weblate (Indonesian)
Currently translated at 100.0% (62 of 62 strings)
2017-05-29 22:22:29 +00:00
jekkos
d60e1283bd Fix double submit issue (#1309) 2017-05-30 00:14:33 +02:00
FrancescoUK
b2d80acafc Regenerate db files 2017-05-28 09:06:04 +01:00
jekkos
37097babcf Fix double submit after focusing OK button (#1309) 2017-05-24 09:21:58 +02:00
jekkos
15bb3ad6a3 Reset stock inventory when deleting items (#1288) 2017-05-22 19:33:13 +02:00
Adrian Wahyudi
5c0c74b037 Translated using Weblate (Indonesian)
Currently translated at 98.9% (94 of 95 strings)
2017-05-16 14:13:37 +00:00
Adrian Wahyudi
7093874366 Translated using Weblate (Indonesian)
Currently translated at 100.0% (214 of 214 strings)
2017-05-16 14:13:37 +00:00
Adrian Wahyudi
34ae6486dc Translated using Weblate (Indonesian)
Currently translated at 100.0% (214 of 214 strings)
2017-05-16 14:13:36 +00:00
FrancescoUK
2d3d385cbc Add migration support and upgrade db to new tax tables (#1133) 2017-05-14 18:40:46 +01:00
Steve Ireland
c0a9349b60 Add support for database migration 2017-05-09 20:45:25 -04:00
FrancescoUK
c4a76ad01c Fixed Takings filters bug (#1286) 2017-05-01 13:12:25 +01:00
FrancescoUK
8d1bc4cf17 Removed npm package dependencies section 2017-05-01 12:28:09 +01:00
FrancescoUK
daa1614615 Revert "Merge pull request #1281 from RuleDomain/migrate-sales-tax-history"
This reverts commit 11e1cc51aa, reversing
changes made to b32c23ce10.

# Conflicts:
#	application/models/Sale.php
2017-05-01 11:50:13 +01:00
FrancescoUK
34afb9d496 Merge pull request #1283 from RuleDomain/remove-debug-code
Remove debug code
2017-05-01 08:08:00 +01:00
Steve Ireland
27d5fd882b Remove debug code 2017-04-30 23:31:31 -04:00
FrancescoUK
d25c6dc8c1 Added ApiGen documentation to model/person class as an example 2017-04-30 23:27:15 +01:00
FrancescoUK
11e1cc51aa Merge pull request #1281 from RuleDomain/migrate-sales-tax-history
Sales tax history migration (#1163)
2017-04-30 23:14:41 +01:00
FrancescoUK
b32c23ce10 Merge pull request #1282 from Frontuari/fix-change-password-issue
Fix issue for change password support (#227)
2017-04-30 19:25:03 +01:00
Jorge Colmenarez
00a792213c Fix issue for change password support 2017-04-30 13:16:12 -04:00
Steve Ireland
c710ec938f Sales tax history migration 2017-04-30 11:30:39 -04:00
FrancescoUK
d0ada1e42f Created bin/gendocs.sh script to invoke ApiGen removing all vendor/ dependencies (#1278) 2017-04-30 13:53:49 +01:00
FrancescoUK
e89fc6afb2 Move Gruntfile.js composer task and apigen task to separate tasks (#1278) 2017-04-30 13:40:22 +01:00
FrancescoUK
f9fb9e44b3 Added apigen to generate OSPOS code documentation (see docs)
Added grunt-composer and grunt-apigen and scripted all the steps in Grunt
2017-04-29 23:43:15 +01:00
FrancescoUK
4c2d63bbd3 Added Total Spent to Customer tabular view 2017-04-29 19:55:03 +01:00
FrancescoUK
ac92c16c0a Always reformat first and last name, and lower case emails 2017-04-29 15:55:03 +01:00
FrancescoUK
edd1f047bd Merge branch 'joshua1234511-feature/auto-complete-giftcard'
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
2017-04-27 19:49:49 +01:00
FrancescoUK
c8ac6a65dc Fixed css and indentation 2017-04-27 19:49:11 +01:00
Joshua Fernandes
6acfc60988 auto suggest gift card 2017-04-27 12:41:27 +05:30
FrancescoUK
6682b77164 Merge branch 'joshua1234511-hotfix/giftcard-customer-restrict-fix'
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
2017-04-26 20:06:39 +01:00
FrancescoUK
eb4f3b425b fixes for giftcard 2017-04-26 20:06:08 +01:00
Joshua Fernandes
93b0844121 fixes for giftcard 2017-04-26 20:03:59 +01:00
FrancescoUK
40d32e1b8a Use consistent name for forms (#227) 2017-04-24 20:30:56 +01:00
FrancescoUK
af1aee0015 Fix change password bugs (#227) 2017-04-24 20:26:48 +01:00
FrancescoUK
1e64b3e610 Merge pull request #1257 from Frontuari/changepassword
Support for change user password (#227)
2017-04-24 19:21:54 +01:00
Jorge Colmenarez
8f728500d4 Verify current password before change password 2017-04-24 13:51:25 -04:00
FrancescoUK
c68fa19584 Made print company name in receipts optional (#925) 2017-04-22 17:09:22 +01:00
FrancescoUK
5bdf6d396b Add Mailchimp connector (#113) avoid email duplicates (#112) 2017-04-22 16:07:33 +01:00
FrancescoUK
0114223e99 Giftcard random number/alpha numeric 2017-04-22 13:38:56 +01:00
FrancescoUK
b819442e98 Fix indentation and regen db scripts 2017-04-22 13:33:45 +01:00
Joshua Fernandes
15681edf43 fixed query 2017-04-22 13:33:45 +01:00
Joshua Fernandes
0cd19ca43f uncommenr var dumb 2017-04-22 13:33:45 +01:00
Joshua Fernandes
621a74653d requested changes 2017-04-22 13:33:45 +01:00
Joshua Fernandes
6dc49ca00e sales fixes 2017-04-22 13:33:45 +01:00
Joshua Fernandes
7a91388d8d giftcard random number 2017-04-22 13:33:45 +01:00
FrancescoUK
1680f2b602 Fix wrong code issue (#1247) 2017-04-22 10:28:05 +01:00
FrancescoUK
80c58cf27d Add search custom items string (#1256) 2017-04-22 10:01:27 +01:00
FrancescoUK
dd21f205b7 Fix wrong code issue (#1247) 2017-04-22 09:30:53 +01:00
Jorge Colmenarez
8261cc1f72 Support for change password 2017-04-21 16:13:25 -04:00
FrancescoUK
08a7bd9606 Fix review comment (#1253) 2017-04-21 19:02:11 +01:00
FrancescoUK
56ae0f265a Merge pull request #1253 from RuleDomain/fix-customer-change-issue
Fix the customer change issue (#1250)
2017-04-21 06:43:44 +01:00
Steve Ireland
c95c56ade7 Fix the customer change issue. 2017-04-20 23:34:56 -04:00
jekkos
b057d1c3c0 Overload existing env vars with .env contents (#974)
Add error handling if .env is not present
2017-04-20 08:27:04 +02:00
Deep Shah
248cd29e01 change database variable names in example file 2017-04-20 08:27:04 +02:00
Deep Shah
bacc07ce35 revert change on db_log_enabled 2017-04-20 08:27:04 +02:00
Deep Shah
aef542d096 dotenv used for configurations 2017-04-20 08:27:04 +02:00
Deep Shah
28141185a4 change database settings as per Dockerfile, remove the correspoding scripts from Dockerfile 2017-04-20 08:27:04 +02:00
Deep Shah
deb235a971 change ['<key>'] to getenv('<key>') 2017-04-20 08:27:04 +02:00
Deep Shah
878d93aee9 revert change on db_log_enabled 2017-04-20 08:27:04 +02:00
Deep Shah
9db7eddc68 dotenv used for configurations 2017-04-20 08:27:04 +02:00
Jorge Colmenarez
e2232ba9cc Translated using Weblate (Spanish)
Currently translated at 100.0% (201 of 201 strings)
2017-04-18 17:14:30 +00:00
jekkos
4db76371fd Regenerate langauge files (#1242) 2017-04-18 19:12:41 +02:00
FrancescoUK
9d01398a4b Minor code style adjustments 2017-04-17 21:47:22 +01:00
FrancescoUK
66a4507525 Added more financial year start dates (#1141) 2017-04-17 20:31:10 +01:00
FrancescoUK
938907fe20 Added financial year start date (#1141), various fixes on date & time 2017-04-17 20:20:53 +01:00
FrancescoUK
1738f76402 Regen dist files (#1234) 2017-04-17 12:31:14 +01:00
jekkos
b7251dd693 Fix button enabled state after search and page change (#1234) 2017-04-17 13:17:00 +02:00
jekkos
8f7a425333 Set folder owner for application to www-data in docker (#1189) 2017-04-17 13:17:00 +02:00
FrancescoUK
7e7c068c90 Add only_check filter to takings (#1244) 2017-04-17 12:00:56 +01:00
FrancescoUK
73ae7b8fd2 Minor fixes to database scripts 2017-04-17 12:00:56 +01:00
Aril Apria Susanto
56b228c698 Translated using Weblate (Indonesian)
Currently translated at 99.2% (132 of 133 strings)
2017-04-16 21:31:22 +00:00
Aril Apria Susanto
b5a44a8308 Translated using Weblate (Indonesian)
Currently translated at 97.6% (84 of 86 strings)
2017-04-16 21:31:22 +00:00
Aril Apria Susanto
1788941b5f Translated using Weblate (Indonesian)
Currently translated at 100.0% (50 of 50 strings)
2017-04-16 21:31:22 +00:00
Aril Apria Susanto
27f093cf73 Translated using Weblate (Indonesian)
Currently translated at 100.0% (12 of 12 strings)
2017-04-16 21:31:22 +00:00
Aril Apria Susanto
efe9ed22b3 Translated using Weblate (Indonesian)
Currently translated at 98.9% (94 of 95 strings)
2017-04-16 21:31:22 +00:00
Aril Apria Susanto
e6a51d8c28 Translated using Weblate (Indonesian)
Currently translated at 89.6% (26 of 29 strings)
2017-04-16 21:31:22 +00:00
Aril Apria Susanto
27f5dd7efc Translated using Weblate (Indonesian)
Currently translated at 100.0% (66 of 66 strings)
2017-04-16 21:31:22 +00:00
Aril Apria Susanto
07642bd953 Translated using Weblate (Indonesian)
Currently translated at 100.0% (24 of 24 strings)
2017-04-16 21:31:22 +00:00
Aril Apria Susanto
99afc02c9d Translated using Weblate (Indonesian)
Currently translated at 100.0% (196 of 196 strings)
2017-04-16 21:31:22 +00:00
FrancescoUK
74972712a6 Fix drop down box size 2017-04-16 22:27:25 +01:00
FrancescoUK
826ffd79c9 Merge pull request #1241 from RuleDomain/fix-same-item-receivings-line-total
Fix the line total extension error when receiving received item (#1233)
2017-04-16 18:41:51 +01:00
Steve Ireland
7f8ac815ef Fix the line total extension error when receiving the same item multiple times. 2017-04-16 10:06:24 -04:00
FrancescoUK
04f27c328d Merge pull request #1240 from RuleDomain/fix-tax-category-item-update
Fix item update of tax category (#1133)
2017-04-16 08:53:23 +01:00
FrancescoUK
793dd73248 Merge pull request #1239 from RuleDomain/make-sales-tax-code-uppercase
Make Sales Tax Code uppercase
2017-04-16 08:52:05 +01:00
FrancescoUK
28d89c685b Merge branch 'RuleDomain-fix-database-creation-dup-config-val' (#1192)
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
2017-04-16 08:48:55 +01:00
FrancescoUK
d59b79e4b6 Fix database creation duplicate config value error 2017-04-16 08:37:03 +01:00
Steve Ireland
422ca99ab3 Fix item update of tax category. 2017-04-15 19:38:32 -04:00
Steve Ireland
0ff095e889 Make Sales Tax Code uppercase 2017-04-15 17:45:54 -04:00
Steve Ireland
e0bc9bb8f7 Fix database creation duplicate config value error 2017-04-15 16:22:20 -04:00
FrancescoUK
86afbf0d30 Merge branch 'RuleDomain-customer-sales-tax-feature' (#1133 #1192)
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
2017-04-15 10:29:48 +01:00
FrancescoUK
26d5605de5 Regen db, js, css files 2017-04-15 10:21:52 +01:00
FrancescoUK
6c0124cd17 Minor fixes 2017-04-15 10:04:48 +01:00
Steve Ireland
effba9d102 Add support for customer sales tax and cash rounding 2017-04-14 21:21:44 -04:00
FrancescoUK
15b13e1a3d Merge pull request #1225 from RuleDomain/fix-item-import
Fix for item excel import
2017-04-10 06:24:32 +01:00
Steve Ireland
1a0a3fbeba Fix for item excel import 2017-04-09 21:40:56 -04:00
Aril Apria Susanto
b7e0c0eba6 Translated using Weblate (Indonesian)
Currently translated at 87.2% (116 of 133 strings)
2017-04-05 20:58:17 +00:00
Aril Apria Susanto
354076f8c3 Translated using Weblate (Indonesian)
Currently translated at 95.7% (91 of 95 strings)
2017-04-05 20:58:15 +00:00
Aril Apria Susanto
6e9e7abcff Translated using Weblate (Indonesian)
Currently translated at 100.0% (66 of 66 strings)
2017-04-05 20:58:15 +00:00
Aril Apria Susanto
cf314f98a6 Translated using Weblate (Indonesian)
Currently translated at 100.0% (26 of 26 strings)
2017-04-05 20:58:14 +00:00
Aril Apria Susanto
a316e250de Translated using Weblate (Indonesian)
Currently translated at 100.0% (196 of 196 strings)
2017-04-05 20:58:13 +00:00
Aril Apria Susanto
33b9f97bce Translated using Weblate (Indonesian)
Currently translated at 100.0% (61 of 61 strings)
2017-04-05 20:58:13 +00:00
Weblate
3677b61dd9 Merge with master 2017-04-02 21:25:26 +00:00
Aril Apria Susanto
e592040962 Translated using Weblate (Indonesian)
Currently translated at 87.2% (116 of 133 strings)
2017-04-02 19:51:27 +00:00
Aril Apria Susanto
e51c79c423 Translated using Weblate (Indonesian)
Currently translated at 100.0% (8 of 8 strings)
2017-04-02 19:51:24 +00:00
Aril Apria Susanto
f556361ade Update Indonesian Translation 2017-04-02 21:49:03 +02:00
FrancescoUK
a317c32d1e Removed php-enum composer package (#1198) 2017-04-01 13:04:45 +01:00
FrancescoUK
0e60d5e6e1 Updated js plugins 2017-03-25 19:17:43 +00:00
FrancescoUK
6fda5d63fe Updated CodeIgniter to 3.1.4 2017-03-25 19:15:18 +00:00
FrancescoUK
7c9a2dee37 Added php-enum composer package (#1198) 2017-03-25 19:14:11 +00:00
FrancescoUK
06f404ddc4 Fixed wrong id reference in js script (#1194) 2017-03-25 11:42:47 +00:00
langlais
562a43a942 Translated using Weblate (French)
Currently translated at 96.0% (48 of 50 strings)
2017-03-22 20:55:31 +00:00
langlais
cbda2dae13 Translated using Weblate (French)
Currently translated at 100.0% (29 of 29 strings)
2017-03-22 20:55:31 +00:00
langlais
1abdd765de Translated using Weblate (French)
Currently translated at 100.0% (66 of 66 strings)
2017-03-22 20:55:31 +00:00
Xyko Arteiro
2f4d0986d9 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (196 of 196 strings)
2017-03-22 20:55:31 +00:00
langlais
bbac0f16bf Translated using Weblate (French)
Currently translated at 98.4% (193 of 196 strings)
2017-03-22 20:55:31 +00:00
FrancescoUK
b986ad437a Fix composer.lock 2017-03-19 11:04:40 +00:00
jekkos
68883230e8 Make encryption key configurable in docker (#1189) 2017-03-19 11:04:07 +01:00
jekkos
5cb8141641 Regenerate langauge files 2017-03-18 16:12:57 +01:00
Emin Tufan Çetin
e6d6bf0392 Translated using Weblate (Turkish)
Currently translated at 87.9% (117 of 133 strings)
2017-03-16 07:04:38 +00:00
Jorge Colmenarez
85d2cf9e68 Translated using Weblate (English)
Currently translated at 100.0% (95 of 95 strings)
2017-03-16 07:04:38 +00:00
FrancescoUK
91f33d14b7 Merge pull request #1188 from Langlais115/Langlais115-Item-by-Article
French translations
2017-03-15 20:41:00 +00:00
Langlais115
5e004309f0 Minor change 2017-03-15 17:11:25 +01:00
Langlais115
aa8351c147 Improve translation 2017-03-15 15:51:02 +01:00
Langlais115
adacc2ab5f Improve translation 2017-03-15 15:42:26 +01:00
Langlais115
8bb4171265 Improve translation 2017-03-15 15:33:58 +01:00
Langlais115
87bd59a6bf Improve translation 2017-03-15 15:15:53 +01:00
Langlais115
488fc58a03 Translate the file 2017-03-15 15:12:00 +01:00
Langlais115
8cd521c6d1 Improve translation 2017-03-15 15:05:55 +01:00
Langlais115
faaac45653 Change Item by Article 2017-03-15 14:47:20 +01:00
Langlais115
d8e19ceeca Change Item by Article 2017-03-15 14:42:39 +01:00
FrancescoUK
00f99c524a Updated LICENSE, upgraded js plugin and regen dist files 2017-03-13 14:38:27 +00:00
FrancescoUK
91d5157765 Fixed Dinner Table support in suspended (#886) 2017-03-13 14:17:03 +00:00
FrancescoUK
b8414cc969 Merge branch 'joshua1234511-hotfix/enable-reward-points-issue'
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
2017-03-13 12:29:45 +00:00
FrancescoUK
387b0004a8 Fix typo in !empty 2017-03-13 12:26:53 +00:00
Joshua Fernandes
cdc401dd7e review change empty check 2017-03-13 15:40:00 +05:30
Joshua Fernandes
74681e78e3 fixed issues with enable reward points 2017-03-13 10:58:34 +05:30
FrancescoUK
3f489d6f53 Fix payment issue (#1182) regen sql script files 2017-03-12 22:12:42 +00:00
FrancescoUK
55350b8bf8 Merge pull request #1178 from joshua1234511/feature/reward-points-customer
Feature/reward points customer (#1179)
2017-03-12 18:58:21 +00:00
Joshua Fernandes
f52b61ae36 removed the sepearte sql after adding to migrate and table 2017-03-12 19:20:30 +05:30
Joshua Fernandes
e131cda843 sql queires added 2017-03-12 19:18:02 +05:30
Joshua Fernandes
991854f0f2 Removed my key 2017-03-04 22:58:39 +05:30
Joshua Fernandes
af7d2f27aa fix for display reports 2017-03-04 17:38:03 +05:30
Joshua Fernandes
3650b47d8b reports display added for detailed sale and customer 2017-03-04 17:17:03 +05:30
Joshua Fernandes
deea43ce67 customer reward points first phase work 2017-03-04 16:13:56 +05:30
FrancescoUK
3d9665c0a9 Merge pull request #1169 from jlctmaster/dinner-tables
Support for Configurable Dinner Tables Feature
2017-03-01 22:17:16 +00:00
FrancescoUK
ae90dfa333 Fixed receipt total mistake with double taxation (#1163) 2017-02-27 23:25:49 +00:00
Valentin Seipt
02dcb4dc90 Translated using Weblate (German)
Currently translated at 100.0% (178 of 178 strings)
2017-02-27 19:54:18 +00:00
jekkos
4dc3c49d9d Merge pull request #1171 from RuleDomain/fix-undefined-property
Fix for undefined property in Sale_lib.php #1166
2017-02-27 12:15:19 +01:00
Steve Ireland
a77d63fad8 Fix for undefined property in Sale_lib.php #1166 2017-02-26 21:42:12 -05:00
FrancescoUK
b487573b05 Fix line removal mistake (#1166) 2017-02-26 23:59:09 +00:00
FrancescoUK
4528436fd5 Fixed tax calculation issues (#1094, #1163) 2017-02-26 23:56:12 +00:00
jekkos
5876efbbee Merge pull request #1170 from RuleDomain/fix-undefined-property
Fix for undefined property in Sale_lib.php #1166
2017-02-26 22:24:11 +01:00
Steve Ireland
1e1b0cd06b Fix for undefined property in Sale_lib.php #1166 2017-02-26 15:35:13 -05:00
Jorge Colmenarez
6826115b2d Support for Configurable Dinner Tables Feature 2017-02-26 15:35:21 -04:00
jekkos
032bb34131 Merge pull request #1149 from RuleDomain/tokens-quotes
Tokens quotes
2017-02-26 12:05:47 +01:00
jekkos
e9aa0068fe Enable auto refresh for serialnumber and description (#1154) 2017-02-23 08:03:37 +01:00
jekkos
e55b5a743a Add realtime cart update in sale and receiving (#1154) 2017-02-21 23:28:22 +01:00
Steve Ireland
e4955027d1 Hide stock_type and item_type if the employee isn't authorized to item kits. On register if item type is non-stock don't display the zero stock balance message, and correct the default quote format when initializing the field. 2017-02-19 13:41:04 -05:00
Steve Ireland
9bf8989960 This will add support for preparing quotes and generating invoices prior
to payments
2017-02-19 13:37:32 -05:00
FrancescoUK
53dcdc02cf Fixed payment issue in return mode (#1081) 2017-02-18 21:48:21 +00:00
FrancescoUK
69391eb434 Added to composer.json PHP7.0 support 2017-02-18 17:27:18 +00:00
FrancescoUK
aff7e6df3b Fixed composer.json name format (required by Packagist) 2017-02-18 16:50:18 +00:00
Luc Gagnier
9bf24fee5f Translated using Weblate (French)
Currently translated at 100.0% (178 of 178 strings)

Translated using Weblate (French)

Currently translated at 100.0% (22 of 22 strings)

Translated using Weblate (French)

Currently translated at 98.8% (88 of 89 strings)

Translated using Weblate (French)

Currently translated at 86.0% (43 of 50 strings)

Translated using Weblate (French)

Currently translated at 99.1% (116 of 117 strings)
2017-02-15 23:54:00 +01:00
FrancescoUK
2c53f0e585 Fixed typo in README and added more info 2017-02-14 09:09:12 +00:00
FrancescoUK
5aeb1234a2 Fixed POS or pos issue in sale register (#1081) 2017-02-13 22:14:00 +00:00
FrancescoUK
6e62a3fe15 Update README with latest System Requirement 2017-02-13 18:55:36 +00:00
jekkos
67594190fc Merge pull request #1140 from RuleDomain/item-kit-git-info-fix
This fixes an error with Item_kit.get_info
2017-02-13 08:16:24 +01:00
Steve Ireland
c6597ba6ce This fixes an error with Item_kit.get_info that occurs in developer test mode. 2017-02-12 21:16:53 -05:00
FrancescoUK
2187898b04 Add CI language support 2017-02-12 13:39:37 +00:00
FrancescoUK
a6b5220047 Updated to CI version 3.1.3 2017-02-11 22:08:00 +00:00
FrancescoUK
78cb4822c2 Updated js plugins and composer 2017-02-11 20:51:32 +00:00
FrancescoUK
ae4ff80974 Fix encryption key generation issue (#1110) 2017-02-07 20:49:19 +00:00
jekkos
df2d616566 Merge pull request #1128 from RuleDomain/fixes-item-kit-discount-not-working
Fix for discount assignment not working
2017-02-07 20:27:08 +01:00
Steve Ireland
353fa8e95c Fix for discount assignment bug 2017-02-06 18:37:34 -05:00
FrancescoUK
699236bca0 Merge pull request #1122 from i92guboj/pic_filename
Preliminary fix for dot corruption in pic_filename (#1026)
2017-02-05 21:34:48 +00:00
FrancescoUK
4ca862ba9f Refactor code (#1110) 2017-02-05 21:24:29 +00:00
i92guboj
7222df3551 Remove unnecessary/redundant check 2017-02-05 21:30:17 +01:00
i92guboj
72e1158847 Cleanup and tabs 2017-02-05 21:25:00 +01:00
i92guboj
145d97737f Preliminary fix for dot corruption in pic_filename 2017-02-05 17:10:34 +01:00
FrancescoUK
8140d1aee4 Update language files (#932) 2017-02-04 12:15:40 +00:00
FrancescoUK
5f5394b18f Fix correct database upgrade script (#632) 2017-02-03 22:24:38 +00:00
FrancescoUK
ceb9687e5e Merge pull request #1115 from jlctmaster/date_or_time_format
Fixed bug sales data preview of day (#932)
2017-02-03 22:04:30 +00:00
Jorge Colmenarez
7a4525319a Fixed bug sales data preview of day when date or time field is checked into config location tab 2017-02-03 15:39:11 -04:00
jekkos
a175111b59 Merge pull request #1114 from RuleDomain/this-fixes-add-item-kit
This will fix the issue with the PHP error when adding a new item kit…
2017-02-03 10:54:22 +01:00
Steve Ireland
4cda5343aa This will fix the issue with the PHP error when adding a new item kit. It also initializes the line_sequence config option. 2017-02-02 23:25:04 -05:00
FrancescoUK
e7cbacaae6 Merge pull request #1111 from RuleDomain/fix-kit-item-selection
Change kit item selection from the Item Kit maintenance to only selec…
2017-02-01 20:07:48 +00:00
Steve Ireland
faadbe554a Change kit item selection from the Item Kit maintenance to only select kit items. 2017-02-01 14:43:16 -05:00
jekkos
999e12279a Extract pic_filename update into method (clean code #1026) 2017-02-01 08:08:51 +01:00
jekkos
37bb9b50f9 Bump Mysql version in docker dev container (#630, #591) 2017-02-01 08:06:56 +01:00
FrancescoUK
5e02f31866 Fix bugs (#1026) 2017-01-31 23:16:38 +00:00
FrancescoUK
bf0d24a96f Fix bugs (#1026) 2017-01-31 23:08:56 +00:00
FrancescoUK
be66258bfc Fix bugs (#1026) 2017-01-31 23:03:53 +00:00
FrancescoUK
87247333cc Fix bugs (#1026) 2017-01-31 22:52:37 +00:00
FrancescoUK
5e75613fec Update LICENSE file 2017-01-31 21:14:20 +00:00
FrancescoUK
5b4d12cac8 Improve Items picture storing (#1026) 2017-01-31 20:23:59 +00:00
jekkos
0e013220ad Use PHP7 + newest MariaDB in docker compose + cloud (#630, #591) 2017-01-31 20:09:12 +00:00
Steve Ireland
ae92231903 Generate low inventory message if at least one of the item kit items added to a sale are below the reorder level. 2017-01-31 20:09:12 +00:00
Steve Ireland
9a1cf6752c Change the inventory reports to exclude non-stock items. 2017-01-31 20:09:12 +00:00
FrancescoUK
9db439a8fe Merge pull request #1107 from RuleDomain/low-inventory-check-for-kits
Low inventory check for kits
2017-01-31 20:02:34 +00:00
FrancescoUK
e458b23b7e Merge pull request #1106 from RuleDomain/fix-inventory-low-missing-reorder_level-check
Restore reorder level check for low inventory report
2017-01-31 20:00:21 +00:00
jekkos
4ca0e74d42 Use PHP7 + newest MariaDB in docker compose + cloud (#630, #591) 2017-01-31 19:24:40 +01:00
i92guboj
47357aaafc Merge branch 'master' into pic_filename 2017-01-31 16:04:33 +01:00
Steve Ireland
a99f326bb8 Generate low inventory message if at least one of the item kit items added to a sale are below the reorder level. 2017-01-31 09:03:36 -05:00
Steve Ireland
cc584ca063 Change the inventory reports to exclude non-stock items. 2017-01-31 08:29:14 -05:00
FrancescoUK
d85aeaeaf8 Merge pull request #1103 from RuleDomain/restrict-inventory-reports-to-stock-items
Restrict inventory reports to stock items
2017-01-31 08:05:54 +00:00
FrancescoUK
cc2fd1876d Merge pull request #1102 from RuleDomain/fix-out-of-stock-warning
Fix out of stock warning
2017-01-31 08:04:52 +00:00
FrancescoUK
f4a52dab8b Merge pull request #1101 from RuleDomain/fix-for-line_sequence
Fix merge issues related to line_sequence for receipts and invoices
2017-01-31 08:03:52 +00:00
Steve Ireland
d75a936472 Change the inventory reports to exclude non-stock items. 2017-01-30 21:34:32 -05:00
Steve Ireland
2719c43e3d Fix for issue where the warning messages for out of stock or below reorder level were not being sent to the user. 2017-01-30 20:38:24 -05:00
Steve Ireland
85983cd17a Fix merge issues related to line_sequence for receipts and invoices 2017-01-30 19:03:57 -05:00
FrancescoUK
df9b776d56 Add support for MySQL 5.7 (#630) and PHP7 (#591), better Item Kits (#625) 2017-01-30 20:10:17 +00:00
i92guboj
b373b1e07e Merge branch 'master' into pic_filename 2017-01-30 17:45:47 +01:00
Steve Ireland
68cf3bf68b Merge remote-tracking branch 'jekkos/item-kit' into item-kit 2017-01-29 23:10:37 -05:00
Steve Ireland
f9c1dde054 Changes to support Item Kits, support for MySQL 5.7, and a tweak for PHP 7 2017-01-29 22:23:46 -05:00
FrancescoUK
1393af1676 Fix Summary payments and taxes issue (#932) 2017-01-29 19:44:45 +00:00
FrancescoUK
f359c475d3 Fix Takings issue (#932) 2017-01-29 19:31:02 +00:00
FrancescoUK
9bc9b5c984 Add date/time summary payment report (#932) 2017-01-29 18:10:14 +00:00
FrancescoUK
4922f5bb66 Add date/time config translation (#932) 2017-01-29 17:57:21 +00:00
FrancescoUK
e36b2a1a03 Add Support for filter reports with format date/time (#932) 2017-01-29 17:43:38 +00:00
FrancescoUK
bb5d39cd0d Fix partial/header.php change 2017-01-29 17:35:11 +00:00
FrancescoUK
afe564e152 Fix LICENSE file 2017-01-29 17:35:11 +00:00
RamkrishnaMondal
17ff097406 Third commit 2017-01-29 17:35:11 +00:00
FrancescoUK
3b37f6c61a Fix Detailed Receiving Report not showing Supplier (#1093) 2017-01-29 17:35:11 +00:00
RamkrishnaMondal
96cefd97b4 Second commit 2017-01-29 17:35:11 +00:00
RamkrishnaMondal
03af00e26e First commit 2017-01-29 17:35:11 +00:00
jekkos
92bd7c2d43 Amend license file with copyright dates 2017-01-29 17:35:11 +00:00
FrancescoUK
4d6cc381ae Bump version to 3.1.0 2017-01-29 17:35:11 +00:00
FrancescoUK
3f36a8b15e Bump version to 3.1.0 2017-01-29 17:35:11 +00:00
jekkos
5a9b6bd98b Add ERD for sales diagram (for wiki page) 2017-01-29 17:35:11 +00:00
jekkos
b9e160eaa3 Improve PHP7 compatibility (#591) 2017-01-29 17:35:11 +00:00
jekkos
ba95853884 Remove quirk in master (#1076) 2017-01-29 17:35:11 +00:00
Emin Tufan Çetin
f157d4d43d Translated using Weblate (Turkish)
Currently translated at 100.0% (84 of 84 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (61 of 61 strings)
2017-01-29 17:35:11 +00:00
mitchel
a2c3130720 Translated using Weblate (Dutch (Belgium))
Currently translated at 100.0% (61 of 61 strings)
2017-01-29 17:35:11 +00:00
jekkos
258622ec87 Enable jsPrint for custom receipt templates (#1070) 2017-01-29 17:35:11 +00:00
FrancescoUK
b4023a051c Update WHATS_NEW.txt with 3.0.2 improvements 2017-01-29 17:35:11 +00:00
FrancescoUK
1cdbee1a42 Fix Summary Reports Payments (#1045) 2017-01-29 17:35:11 +00:00
jekkos
feff5ff3f3 Set folder upload folder permissions to 755 (#1014)
Don't load item avatar if item_pic is empty
2017-01-29 17:19:00 +00:00
jekkos
0507db6a6f Set apache as owner of uploads folder (#1014) 2017-01-29 17:19:00 +00:00
jekkos
9b473e415d Hook standard jquery submit function and update csrf (#1019) 2017-01-29 17:19:00 +00:00
jekkos
47974074ee Stop running compose as travis seems to fail after startup? 2017-01-29 17:19:00 +00:00
jekkos
bc56ee54a3 Fix date, location and sale type filtering for summary payments (#1045) 2017-01-29 17:19:00 +00:00
jekkos
046a02d83c Refresh csrf tokens before submit (#1019) 2017-01-29 17:19:00 +00:00
mitchel
57e559e67b Translated using Weblate (Dutch (Belgium))
Currently translated at 100.0% (22 of 22 strings)

Translated using Weblate (Dutch (Belgium))

Currently translated at 100.0% (26 of 26 strings)

Translated using Weblate (Dutch (Belgium))

Currently translated at 100.0% (66 of 66 strings)

Translated using Weblate (Dutch (Belgium))

Currently translated at 100.0% (89 of 89 strings)

Translated using Weblate (Dutch (Belgium))

Currently translated at 100.0% (12 of 12 strings)

Translated using Weblate (Dutch (Belgium))

Currently translated at 100.0% (84 of 84 strings)

Translated using Weblate (Dutch (Belgium))

Currently translated at 100.0% (117 of 117 strings)
2017-01-29 17:19:00 +00:00
jekkos
10e3ce9a9f Fix csrf refresh issue in register (#1019) 2017-01-29 17:19:00 +00:00
FrancescoUK
953fa534f4 Print just first letter of Employee family name to protect privacy (#1027) 2017-01-29 17:19:00 +00:00
FrancescoUK
c7982b9552 Bump OSPOS version to 3.0.2 2017-01-29 17:19:00 +00:00
FrancescoUK
6e0011b165 Fix Invoice Template editing issues (#1088), centre company name on top navbar 2017-01-29 17:15:46 +00:00
FrancescoUK
a3c172624a Fix partial/header.php change 2017-01-29 17:09:00 +00:00
FrancescoUK
3a81a712ff Fix LICENSE file 2017-01-29 16:57:47 +00:00
RamkrishnaMondal
775f40cb75 Merge pull request #8 from jekkos/master
Fix Detailed Receiving Report not showing Supplier (#1093)
2017-01-29 21:51:12 +05:30
RamkrishnaMondal
5814bfc7e8 Third commit 2017-01-29 21:32:16 +05:30
FrancescoUK
3f309298d8 Fix Detailed Receiving Report not showing Supplier (#1093) 2017-01-29 15:51:26 +00:00
RamkrishnaMondal
4ef8fc8df3 Second commit 2017-01-29 17:44:35 +05:30
RamkrishnaMondal
a627276265 First commit 2017-01-29 17:34:55 +05:30
RamkrishnaMondal
6e4155ccbb Merge pull request #7 from jekkos/master
update from upstream
2017-01-29 16:23:07 +05:30
jekkos
84ef147835 Bump PHP version to 7.0 2017-01-28 21:40:00 +01:00
jekkos
925bee2b0a Amend license file with copyright dates 2017-01-28 11:41:09 +01:00
FrancescoUK
680f2bb555 Bump version to 3.1.0 2017-01-27 18:37:09 +00:00
FrancescoUK
29920c5456 Bump version to 3.1.0 2017-01-27 18:36:34 +00:00
Steve Ireland
ace3bedbbc Correct typo 2017-01-22 20:53:43 -05:00
Steve Ireland
476db84e86 Change SUM to MAX and a couple of indent issues. 2017-01-22 16:40:20 -05:00
Steve Ireland
dc638c74b5 Resolves Item view and Takings view issues that odiea spotted. 2017-01-22 10:57:59 -05:00
jekkos
f04a2db4a5 Add ERD for sales diagram (for wiki page) 2017-01-22 11:18:19 +01:00
Steve Ireland
dd6bd1cf11 Changes to support Item Kits, support for MySQL 5.7, and a tweak for PHP 7 2017-01-21 23:26:01 -05:00
jekkos
4b1d5456cc Improve PHP7 compatibility (#591) 2017-01-21 00:01:59 +01:00
jekkos
4b85c14f00 Remove quirk in master (#1076) 2017-01-20 23:24:31 +01:00
Emin Tufan Çetin
9b33f39086 Translated using Weblate (Turkish)
Currently translated at 100.0% (84 of 84 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (61 of 61 strings)
2017-01-20 00:16:36 +01:00
mitchel
bebb9ca34b Translated using Weblate (Dutch (Belgium))
Currently translated at 100.0% (61 of 61 strings)
2017-01-20 00:10:41 +01:00
jekkos
1dba07049c Enable jsPrint for custom receipt templates (#1070) 2017-01-19 23:54:30 +01:00
i92guboj
6095577f47 ran grunt 2016-12-20 22:03:16 +01:00
i92guboj
06db967ee6 simplify code cause pic_thumb() always receives filename.ext 2016-12-20 20:46:00 +01:00
i92guboj
467ed586b1 indentation and revert func parameter experiment 2016-12-19 20:46:30 +01:00
i92guboj
74660bcaa1 migration script for already existing DBs 2016-12-19 20:19:05 +01:00
i92guboj
d9a4f93cfa pic_filename behavior and silent migration from pic_id 2016-12-19 20:18:05 +01:00
i92guboj
c6e4584f71 Convert pic_id to pic_filename - db and csv files 2016-12-19 18:37:52 +01:00
root
31335deeea Add Line into LICENSE 2016-11-30 14:43:34 -04:00
root
ae26d9a007 Fixed Subtitle reports 2016-11-30 14:40:17 -04:00
root
305d9dd55e Support for Date or Time Format 2016-11-30 14:32:25 -04:00
Jorge Colmenarez
9a9dc9bf1e Merge branch 'master' of https://github.com/jlctmaster/opensourcepos 2016-11-30 10:52:09 -04:00
Jorge Colmenarez
04246d35ad Merge pull request #4 from jekkos/master
Merge with source proyect
2016-11-18 12:22:13 -04:00
Jorge Colmenarez
20c0ffb9b0 Merge pull request #3 from jlctmaster/revert-2-feature/datetime_reports
Revert "Feature/datetime reports"
2016-11-18 12:20:23 -04:00
Jorge Colmenarez
88db2af11b Revert "Feature/datetime reports" 2016-11-18 12:19:42 -04:00
Jorge Colmenarez
00eb59f083 Merge pull request #2 from jlctmaster/feature/datetime_reports
Feature/datetime reports
2016-11-10 18:30:26 -04:00
Jorge Colmenarez
eefd9a88bd Merge pull request #1 from jekkos/master
Update with base proyect
2016-11-06 21:39:30 -04:00
Jorge Colmenarez
88219b6aa0 Add Support for filter datetime records into Models Items and modify width of input daterangepicker 2016-11-06 21:18:26 -04:00
Jorge Colmenarez
e326c1dfd4 Remove copyright comments and apply suggestions 2016-11-04 09:32:41 -04:00
Jorge Colmenarez
0f95c6c9b5 Add Support for filter reports with format date/time 2016-11-01 22:08:47 -04:00
1980 changed files with 21367 additions and 379485 deletions

View File

@@ -1,7 +1,6 @@
node_modules
tmp
application/config/email.php
application/config/database.php
*.patch
patches/
.idea/

View File

@@ -1,32 +1,42 @@
### IMPORTANT IMPORTANT IMPORTANT
Chose what you want to report: New Feature or Bug.
If you remove the template when submitting a Bug your issue will be closed as we cannot help without basic information.
1. Chose what you want to report between the sections "New Feature / Enhancement" and "Issue / Question / Bug".
2. Remove just the one of the two sections you don't need
3. Remove this section as it's just a guideline
4. Fill in all the details as requested by the section you chose
If you remove the complete template when submitting a Bug your issue will be closed as we cannot help without basic information.
### New Feature / Enhacement
### New Feature / Enhancement
For New Features or Enhacements please remove all the template text and clearly write your proposal.
*For New Features or Enhancements please clearly write your proposal.
It's important to state whether you expect the community to implement it or you will contribute the work.
Please bear in mind that we will implement new features only on the current code, there is no support for old versions.
Please bear in mind that we will implement new features only on the current code, there is no support for older versions.*
### Issue / Question / Bug
Before submitting an issue please make sure you remove the first section of the template and you tick (add a x between the square brakets) and agree with all the following check boxes:
Before submitting an issue please make sure you tick (add an x between the square brackets with no spaces) the following check boxes:
- [] Checked the current issues database and no similar issue was already discussed
- [] Read the README, WHATS_NEW and UPGRADE
- [] Read the FAQ (https://github.com/jekkos/opensourcepos#faq) for any known install and/or upgrade gotchas (in specific PHP has php5-gd, php-intl and sockets installed)
- [] Reporting an issue of an unmodified OSPOS installation
- [] PHP version is at least 5.5 and not 7.x
- [] MySQL version is 5.5 or 5.6 and not 5.7
- [] Ran any database upgrade scripts (e.g. database/2.4_to_3.0.sql)
- [] Know the version of OSPOS and git commit hash (check the footer of your OSPOS) and will add to my issue report
- [] Know the name and version of OS, Web server and MySQL and will add to my issue report
- [] I'm reporting an issue of an unmodified OSPOS installation
- [] I checked open and closed issues database and no similar issue was already discussed (please make sure you searched!)
- [] I read the README, WHATS_NEW and UPGRADE
- [] I read the FAQ (https://github.com/jekkos/opensourcepos#faq) for any known install and/or upgrade gotchas (in specific PHP has php-gd, php-intl, sockets and etc. installed)
- [] I read the wiki
- [] I ran any database upgrade scripts (e.g. database/2.4_to_3.0.sql), and migrating function
- [] I'm aware the latest master could be a development version and therefore not stable
- [] I know the version of OSPOS and git commit hash (check the footer of your OSPOS), the name and version of OS, Web server, PHP and MySQL and will add them to my issue report
### Installation information
- OSPOS version is:
- OSPOS git commit hash is:
- PHP version is: (e.g. 5.5, 5.6, 7.0, 7.1)
- MySQL or MariaDB version is: (e.g. MySQL 5.5, MySQL 5.6, MySQL 5.7, MariaDB 10.0, MariaDB 10.1, MariaDB 10.2)
- OS and version is: (e.g. CentOS 6.9, Ubuntu 16.4, Windows 10)
- WebServer is: (e.g. Apache 2.2, Apache 2.4, Nginx 1.12, Nginx 1.13)
- (If applicable) Installation package for the LAMP/LEMP stack is: (e.g. WAMP, XAMPP)
### Expected behaviour
@@ -34,4 +44,4 @@ Before submitting an issue please make sure you remove the first section of the
### Actual behaviour
### Steps to reproduce the issue
### Steps to reproduce the issue

7
.gitignore vendored
View File

@@ -1,11 +1,14 @@
node_modules
tmp
application/config/email.php
application/config/database.php
application/sessions/*
application/logs/*
application/uploads/*
public/license/.licenses
public/license/bower.LICENSES
public/dist
dist/
docs/
public/bower_components
*.patch
patches/
@@ -16,9 +19,11 @@ git-svn-diff.py
.buildpath
.project
.settings/*
vendor/
*.swp
*.rej
*.orig
*~
*.~
*.log
.env

View File

@@ -1,3 +1,9 @@
# redirect to public page
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/public$
RewriteRule ^(.*)/$ /public/ [R=301,L]
# disable directory browsing
# For security reasons, Option all cannot be overridden.
Options +ExecCGI +Includes +IncludesNOEXEC +SymLinksIfOwnerMatch -Indexes

View File

@@ -1,19 +1,32 @@
sudo: true # Required to install packages
sudo: true
branches:
except:
- weblate
services:
services:
- docker
before_install:
- curl -L https://github.com/docker/compose/releases/download/1.7.1/docker-compose-`uname -s`-`uname -m` > docker-compose
- chmod +x docker-compose
- sudo mv docker-compose /usr/local/bin
- date=`date +%Y%m%d%H%M%S` && branch=${TRAVIS_BRANCH} && rev=`git rev-parse --short=6 HEAD` && sed -i "s/\$1/\$1.$date.$branch.$rev/g" deployment.json
script:
- docker run --rm -v $(pwd):/app composer/composer install
- git clone https://github.com/bcit-ci/codeigniter3-translations dist/ci-translations && sudo cp -r dist/ci-translations/language/* vendor/codeigniter/framework/system/language
- docker run --rm -it -v $(pwd):/app -w /app digitallyseamless/nodejs-bower-grunt sh -c "npm install && bower install && grunt package"
- docker-compose build
env:
env:
- TAG=$(echo ${TRAVIS_BRANCH} | sed s/feature\\///)
after_success:
- '[ -n ${DOCKER_USERNAME} ] && docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD" && docker tag opensourcepos_php "jekkos/opensourcepos:$TAG" && docker tag opensourcepos_sqlscript jekkos/opensourcepos:sqlscript && docker push "jekkos/opensourcepos:$TAG" && docker push jekkos/opensourcepos:sqlscript'
'[ -n ${DOCKER_USERNAME} ] && docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"
&& docker tag opensourcepos_php "jekkos/opensourcepos:$TAG" && docker tag opensourcepos_sqlscript
jekkos/opensourcepos:sqlscript && docker push "jekkos/opensourcepos:$TAG" && docker
push jekkos/opensourcepos:sqlscript'
deploy:
provider: bintray
file: deployment.json
user: jekkos
on:
all_branches: true
key:
secure: NGzLiwBZ4A6zO9AqUsVeht29A7UZejO/LKEJntQMdzYaBXD6Ao3zXpS3bPN3UwU/YTNdcm3I7DemAL2ypAkCxcdzfp842eeTlFMDuzUiD5MxrQyWeZnbFxyeN4bJgXOnH/93eXxoIg0qT7ORVzwHrrA6vOqfxB1Nq/DAV2MpK/0=

View File

@@ -1,4 +1,4 @@
FROM php:5-apache
FROM php:7.0.15-apache
MAINTAINER jekkos
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
php5-apcu \
@@ -7,18 +7,13 @@ RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
libmcrypt-dev
RUN a2enmod rewrite
RUN docker-php-ext-install mysql mysqli bcmath intl gd sockets mbstring mcrypt
RUN docker-php-ext-install mysqli bcmath intl gd sockets mbstring mcrypt
RUN echo "date.timezone = \"\${PHP_TIMEZONE}\"" > /usr/local/etc/php/conf.d/timezone.ini
RUN echo -e “$(hostname -i)\t$(hostname) $(hostname).localhost” >> /etc/hosts
WORKDIR /app
COPY . /app
RUN ln -s /app/*[^public] /var/www && rm -rf /var/www/html && ln -nsf /app/public /var/www/html
RUN chmod 755 /app/public/uploads && chown -R www-data:www-data /app/public/uploads
RUN chmod 755 /app/public/uploads && chown -R www-data:www-data /app/public /app/application
RUN cp application/config/database.php.tmpl application/config/database.php && \
sed -i -e "s/\(localhost\)/web/g" test/ospos.js && \
sed -i -e "s/\(user.*\?=.\).*\(.\)$/\1getenv('MYSQL_USERNAME')\2/g" application/config/database.php && \
sed -i -e "s/\(password.*\?=.\).*\(.\)$/\1getenv('MYSQL_PASSWORD')\2/g" application/config/database.php && \
sed -i -e "s/\(database.*\?=.\).*\(.\)$/\1getenv('MYSQL_DB_NAME')\2/g" application/config/database.php && \
sed -i -e "s/\(hostname.*\?=.\).*\(.\)$/\1getenv('MYSQL_HOST_NAME')\2/g" application/config/database.php
RUN [ ! -f test/ospos.js ] || sed -i -e "s/\(localhost\)/web/g" test/ospos.js

View File

@@ -23,27 +23,22 @@ module.exports = function(grunt) {
options: {
report: false
},
targetdistjqueryui: {
options: {
srcPrefix: 'public/bower_components/jquery-ui',
destPrefix: 'public/dist'
},
files: {
'jquery-ui': 'themes/base/jquery-ui.min.css'
}
},
targetdistbootswatch: {
options: {
srcPrefix: 'public/bower_components/bootswatch',
destPrefix: 'public/dist/bootswatch'
destPrefix: 'public/dist'
},
files: {
'cerulean/bootstrap.min.css': 'cerulean/bootstrap.min.css',
'cosmo/bootstrap.min.css': 'cosmo/bootstrap.min.css',
'cyborg/bootstrap.min.css': 'cyborg/bootstrap.min.css',
'darkly/bootstrap.min.css': 'darkly/bootstrap.min.css',
'flatly/bootstrap.min.css': 'flatly/bootstrap.min.css',
'journal/bootstrap.min.css': 'journal/bootstrap.min.css',
'paper/bootstrap.min.css': 'paper/bootstrap.min.css',
'readable/bootstrap.min.css': 'readable/bootstrap.min.css',
'sandstone/bootstrap.min.css': 'sandstone/bootstrap.min.css',
'slate/bootstrap.min.css': 'slate/bootstrap.min.css',
'spacelab/bootstrap.min.css': 'spacelab/bootstrap.min.css',
'superhero/bootstrap.min.css': 'superhero/bootstrap.min.css',
'united/bootstrap.min.css': 'united/bootstrap.min.css',
'yeti/bootstrap.min.css': 'yeti/bootstrap.min.css',
'fonts': 'fonts'
bootswatch: '*/'
}
},
targetlicense: {
@@ -53,12 +48,12 @@ module.exports = function(grunt) {
files: {
'public/license': 'LICENSE'
}
},
}
},
cssmin: {
target: {
files: {
'public/dist/<%= pkg.name %>.min.css': ['tmp/opensourcepos_bower.css', 'public/css/*.css', '!public/css/login.css', '!public/css/invoice_email.css', '!public/css/barcode_font.css', '!public/css/style.css']
'public/dist/<%= pkg.name %>.min.css': ['tmp/opensourcepos_bower.css', 'public/css/*.css', '!public/css/login.css', '!public/css/invoice_email.css', '!public/css/barcode_font.css']
}
}
},
@@ -121,7 +116,8 @@ module.exports = function(grunt) {
closeTag: '<!-- end mincss template tags -->',
ignorePath: '../../../public/'
},
src: ['public/dist/*.css', '!public/dist/login.css', '!public/dist/invoice_email.css', '!public/dist/barcode_font.css'],
// jquery-ui must be first or at least before opensourcepos.min.css
src: ['public/dist/jquery-ui/*.css', 'public/dist/*.css'],
dest: 'application/views/partial/header.php',
},
css_login: {
@@ -131,7 +127,7 @@ module.exports = function(grunt) {
closeTag: '<!-- end css template tags -->',
ignorePath: '../../public/'
},
src: ['public/dist/login.css'],
src: ['public/css/login.css'],
dest: 'application/views/login.php'
},
js: {
@@ -195,8 +191,8 @@ module.exports = function(grunt) {
// Target-specific options go here.
directory: 'public/bower_components',
output: 'public/license/bower.LICENSES'
},
},
}
}
},
'bower-licensechecker': {
options: {
@@ -217,13 +213,40 @@ module.exports = function(grunt) {
noGood: true,
}
}
},
apigen: {
generate:{
options: {
apigenPath: 'vendor/bin/',
source: 'application',
destination: 'docs'
}
}
},
compress: {
main: {
options: {
mode: 'zip',
archive: 'dist/opensourcepos.zip'
},
files: [
{src: ['public/**', 'vendor/**', 'application/**', '!/public/images/menubar/png/', '!/public/dist/bootswatch/', '/public/dist/bootswatch/*/*.css', 'database/**', '*.txt', '*.md', 'LICENSE', 'docker*', 'Dockerfile', '**/.htaccess', '*.csv']}
]
}
}
});
});
require('load-grunt-tasks')(grunt);
grunt.loadNpmTasks('grunt-mocha-webdriver');
grunt.loadNpmTasks('grunt-composer');
grunt.loadNpmTasks('grunt-apigen');
grunt.loadNpmTasks('grunt-contrib-compress');
grunt.registerTask('default', ['wiredep', 'bower_concat', 'bowercopy', 'concat', 'uglify', 'cssmin', 'tags', 'cachebreaker']);
grunt.registerTask('update', ['composer:update', 'bower:update']);
grunt.registerTask('genlicense', ['clean:license', 'license', 'bower-licensechecker']);
grunt.registerTask('package', ['default', 'compress']);
grunt.registerTask('packages', ['composer:update']);
grunt.registerTask('gendocs', ['apigen:generate']);
};

14
LICENSE
View File

@@ -5,12 +5,18 @@ Copyright (c) 2012 Alain
Copyright (c) 2013 Rob Garrison
Copyright (c) 2013 Parq
Copyright (c) 2013 Ramel
Copyright (c) 2014-2016 jekkos
Copyright (c) 2015-2016 FrancescoUK (aka daN4cat)
Copyright (c) 2013-2017 jekkos
Copyright (c) 2015-2017 FrancescoUK (aka daN4cat)
Copyright (c) 2015 Aamir Shahzad (aka asakpke), RoshanTech.com
Copyright (c) 2015 Toni Haryanto (aka yllumi)
Copyright (c) 2016 Ramkrishna Mondal (aka RamkrishnaMondal)
Copyright (c) 2016-2017 Ramkrishna Mondal (aka RamkrishnaMondal)
Copyright (c) 2016 Rinaldy@dbarber (aka rnld26)
Copyright (c) 2016-2017 Jorge Colmenarez (aka jlctmaster), frontuari.com
Copyright (c) 2017 Steve Ireland
Copyright (c) 2017 Jesus Guerrero Botella (aka i92guboj)
Copyright (c) 2017 Deep Shah (aka deepshah)
Copyright (c) 2017 Joshua Fernandez (aka joshua1234511)
Copyright (c) 2017 odiea
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
@@ -33,4 +39,4 @@ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@@ -5,31 +5,39 @@
[![GitHub version](https://badge.fury.io/gh/jekkos%2Fopensourcepos.svg)](https://badge.fury.io/gh/jekkos%2Fopensourcepos)
[![Translation status](http://weblate.jpeelaer.net/widgets/ospos/-/svg-badge.svg)](http://weblate.jpeelaer.net/engage/ospos/?utm_source=widget)
Introduction
------------
Open Source Point of Sale is a web based point of sale system.
The main features are:
* Stock management
* Stock management (Items and Kits)
* VAT, customer and multi tiers taxation
* Sale register with transactions logging
* Receipt and invoice printing and emailing
* Quotation and invoicing
* Receipt and invoice printing and/or emailing
* Barcode generation and printing
* Suppliers and Customers database
* Multiuser with permission control
* Reporting
* Gift card
* Receivings
* Barcode generation and printing
* Messaging
* Giftcard
* Rewards
* Restaurant tables
* Messaging (SMS)
* Multilanguage
* Different UI themes
* Selectable Boostrap (Bootswatch) based UI theme
* Mailchimp integration
* reCAPTCHA to protect login page from brute force attacks
* Reporting on sales, orders, inventory status
The software is written in PHP language, it uses MySQL or MariaDB as data storage back-end and has a simple but intuitive user interface.
The software is written in PHP language, it uses MySQL (or MariaDB) as data storage back-end and has a simple but intuitive user interface.
The latest version 3.0.2 is a complete overhaul of the original software.
The latest 3.x version is a complete overhaul of the original software.
It is now based on Bootstrap 3.x using Bootswatch themes, and still uses CodeIgniter 3.x as framework.
It also has improved functionality and security.
Deployed to a Cloud it can be defined as a SaaS (Software as as Service) type of solution.
Deployed to a Cloud it's a SaaS (Software as a Service) solution.
License
-------
@@ -58,41 +66,48 @@ In short you are free to use the software but you cannot claim any property on i
Any person or company found breaching the license agreement will be chased up.
Keep the Machine Running
------------------------
If you like the project, and you are making money out of it on a daily basis, then consider buying me a coffee so I can keep adding features.
[![Donate](https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=MUN6AEG7NY6H8)
Server Requirements
-------------------
PHP version 5.5 or newer is recommended but PHP 7.x is not fully supported yet.
PHP needs to have `php-gd`, `php-bcmath`, `php-intl`, `php-sockets` and `php-mcrypt` installed and enabled.
PHP version 5.6 or newer is recommended (PHP 7.x is supported). Please note that PHP needs to have `php-gd`, `php-bcmath`, `php-intl`, `php-sockets`, `php-mcrypt` and `php-curl` installed and enabled.
MySQL 5.5 or 5.6 are fine but MySQL 5.7 is not supported yet.
MySQL 5.5, 5.6 and 5.7 are supported, also MariaDB replacement is supported and apparently offering better performance.
Apache 2.2 and 2.4 are supported. Also Nginx has been proven to work fine, see [wiki page here](https://github.com/jekkos/opensourcepos/wiki/Local-Deployment-using-LEMP)
Raspberry PI based installations proved to work, see [wiki page here](https://github.com/jekkos/opensourcepos/wiki/Installing-on-Raspberry-PI---Orange-PI-(Headless-OSPOS))
For Windows based installations please read [the wiki](https://github.com/jekkos/opensourcepos/wiki) and also existing closed issues as this topic has been covered well in all the variants and issues.
Apache 2.2 and 2.4 are working both fine.
Local install
-------------
1. Create/locate a new mysql database to install open source point of sale into
2. Execute the file database/database.sql to create the tables needed
3. unzip and upload Open Source Point of Sale files to web server
4. Copy application/config/database.php.tmpl to application/config/database.php
5. Modify application/config/database.php to connect to your database
1. Dowload the latest [stable release](https://github.com/jekkos/opensourcepos/releases) from github or [unstable build](https://bintray.com/jekkos/opensourcepos/opensourcepos/view/files?sort=updated&order=asc#files) from bintray
2. Create/locate a new mysql database to install open source point of sale into
3. Execute the file database/database.sql to create the tables needed
4. unzip and upload Open Source Point of Sale files to web server
5. Modify application/config/database.php and modify credentials if needed to connect to your database
6. Modify application/config/config.php encryption key with your own
7. Go to your point of sale install public dir via the browser
8. LOGIN using
* username: admin
* password: pointofsale
9. Enjoy
10. Oops an issue? Please read the FAQ first thing :-)
P.S.: For more info about a local install based on Raspberry PI please read our wiki
10. Oops an issue? Please make sure you read the FAQ, wiki page and you checked open and closed issue on GitHub. PHP display_errors is disabled by default. Create an application/config/.env file from the .env.example to enable it in a development environment.
Local install using Docker
--------------------------
From now on ospos can be deployed using Docker on Linux, Mac or Windows. This setup dramatically reduces the number of possible issues as all setup is now done in a Dockerfile. Docker runs natively on mac and linux, but will require more overhead on windows. Please refer to the docker documentation for instructions on how to set it up on your platform.
To build and run the image, issue following commands in a terminal with docker installed
@@ -100,13 +115,17 @@ To build and run the image, issue following commands in a terminal with docker i
docker-compose build
docker-compose up
Cloud install
-------------
A quick option would be to install directly to [Digitalocean](https://m.do.co/c/ac38c262507b) using their preconfigured LAMP stack.
Create a DO account first, add a droplet with preconfigured LAMP and follow the instructions for Local Install below. You will be running a provisioned VPS within minutes.
Cloud install using Docker
--------------------------
If you want to run a quick demo of ospos or run it permanently in the cloud, then we
suggest using Docker cloud together with the DigitalOcean hosting platform. This way all the
configuration is done automatically and the install will just work.
@@ -127,18 +146,20 @@ month of uptime on the platform. A full setup will only take about 2 minutes by
More info [on maintaining a docker](https://github.com/jekkos/opensourcepos/wiki/Docker-cloud-maintenance) install can be found on the wiki
Reporting Bugs
--------------
If you are taking a release candidate code please make sure you always run the latest database upgrade script and you took the latest code from master.
Please DO NOT post issues if you have not done those step.
Bug reports must follow this schema:
1. Ospos **version string with git commit hash** (see ospos footer)
2. OS name and version running your Web Server (e.g. Linux Ubuntu 15.0)
2. OS name and version running your Web Server (e.g. Linux Ubuntu 16.04)
3. Web Server name and version (e.g. Apache 2.4)
4. Database name and version (e.g. =< MySQL 5.6)
5. PHP version (e.g. PHP 5.5)
4. Database name and version (e.g. MySQL 5.6)
5. PHP version (e.g. PHP 5.6)
6. Language selected in OSPOS (e.g. English, Spanish)
7. Any configuration of OSPOS that you changed
8. Exact steps to reproduce the issue (test case)
@@ -147,20 +168,18 @@ Bug reports must follow this schema:
If above information is not provided in full, your issue will be tagged as pending.
If missing information is not provided within a week we will close your issue.
FAQ
---
* If a blank page (HTTP status 500) shows after search completion or receipt generation, then double check `php5-gd` presence in your php installation. On windows check in php.ini whether the lib is installed. On Ubuntu issue `sudo apt-get install php5-gd`. Also have a look at the Dockerfile for a complete list of recommended packages.
* If sales and receiving views don't show properly, please make sure BCMath lib (`php-bcmath`) is installed. On windows check php.ini and make sure php_bcmath extension is not commented out
* If the following error is seen in sales module `Message: Class 'NumberFormatter' not found` then you don't have `php5-intl` extension installed. Please check the [wiki](https://github.com/jekkos/opensourcepos/wiki/Localisation-support#php5-intl-extension-installation) to resolve this issue on your platform. If you use WAMP, please read [issue #949](https://github.com/jekkos/opensourcepos/issues/949)
* If you are getting the error `Message: Can't use method return value in write context` that means that you are probably using PHP7 which is not completely supported yet. Check your hosting configuration to verify whether you have a supported PHP version installed
* If you read errors containing messages with Socket word in it, please make sure you have installed PHP Sockets support (e.g. go to PHP.ini and make sure all the needed modules are not commented out. This means `php5-gd`, `php-intl` and `php-sockets`. Restart the web server)
* If you get various errors at item creation, opening views or reports, or having issues at login please make sure you are not using MySQL 5.7 as it's not supported yet
* If you installed your OSPOS under a web server subdir, please edit public/.htaccess and go to the lines with comment `if in web root` and `if in subdir comment above line, uncomment below one and replace <OSPOS path> with your path` and follow the instruction on the second comment line. If you face more issues please read [issue #920](https://github.com/jekkos/opensourcepos/issues/920) for more help
* If the avatar pictures are not shown in Items or at Item save time you get an error, please make sure your public and subdirs are assigned to the correct owner and the access permission is set to 755

View File

@@ -7,9 +7,10 @@ How to Upgrade
5. Run the database upgrade scripts from database/ dir (check which ones you need according to the version you are upgrading from)
6. Take the saved old config.php and upgrade the new config.php with any additional changes you made in the old.
Take time to understand if new config rules require some changes (e.g. encryption keys)
7. Copy application/config/database.php.tmpl to application/config/database.php
8. Take the saved old database.php and change the new database.php to contain all the configuration you had in the old setup.
7. Take the saved old database.php and change the new database.php to contain all the configuration you had in the old setup.
Please try not to use the old layout, use the new one and just copy the content of the config variables
9. Restore the content of the old uploads/ folder into public/uploads/ one
10. Once new code is in place, database is updated and config files are sorted you are good to start the new OSPOS
11. If any issue please check FAQ and/or GitHub issues as somebody else might have had your problem already or post a question
8. Restore the content of the old uploads/ folder into public/uploads/ one
9. Once the new code is in place, database is updated and config files are sorted you are good to start the new OSPOS
10. Once logged in in OSPOS go to Migrate (see Migrate button after Store Config) and run the Migrate script
11. Now you can use OSPOS
12. If any issue please check FAQ and/or GitHub issues as somebody else might have had your problem already or post a question

View File

@@ -1,3 +1,32 @@
Version 3.1.0
-----------
+ MySQL 5.7 and PHP 7.x support
+ Advanced Tax support with customer tax categories and etc,
+ Better HORECA use case support with Dinner Table sale tagging
+ Customer Rewards support
+ Added quote support and better invoice support
+ Added integration with Mailchimp to connect Customer list with Mailchimp list
+ Prevent inserting two customers with same email address
+ Customer total spending and stats
+ Added reCAPTCHA to Login page to increase protection from Brute Force attacks
+ Added due payment for credit sale support
+ Gifcard numbering with two options: Series and Random
+ Extended Item Kits functionality
+ Employee allowed to change their own password clicking their name on top bar
+ Cash rounding support, extended decimals
+ Reworked Item Pictures and file name and storing
+ Financial year start date and selection from date range pickers
+ Date time range filters can be date & time or date only
+ Added two new Bootswatch themes
+ Receipts font size support
+ Fix automatically people's name first capital letter, emails in lower case only
+ Fixes to Receiving
+ Various amendments to database script updates from older versions
+ Added dotenv support
+ Updates to language translations (split English to American English and British English)
+ Various Dockers support improvements
+ Minor bugfixes
Version 3.0.2
-----------
+ Fixed error when performing scans multiple times in a row

View File

@@ -0,0 +1,7 @@
CI_ENV="development"
#Database Settings
MYSQL_HOST_NAME="localhost"
MYSQL_USERNAME=""
MYSQL_PASSWORD=""
MYSQL_DB_NAME=""

View File

@@ -132,4 +132,4 @@ $autoload['language'] = array();
|
| $autoload['model'] = array('first_model' => 'first');
*/
$autoload['model'] = array('Appconfig', 'Person', 'Customer', 'Employee', 'Module', 'Item', 'Item_taxes', 'Sale', 'Sale_suspended', 'Supplier', 'Inventory', 'Receiving', 'Giftcard', 'Item_kit', 'Item_kit_items', 'Stock_location', 'Item_quantity');
$autoload['model'] = array('Appconfig', 'Person', 'Customer', 'Employee', 'Module', 'Item', 'Item_taxes', 'Sale', 'Supplier', 'Inventory', 'Receiving', 'Giftcard', 'Item_kit', 'Item_kit_items', 'Stock_location', 'Item_quantity', 'Dinner_table', 'Customer_rewards', 'Rewards', 'Tax');

View File

@@ -8,7 +8,7 @@
|
|
*/
$config['application_version'] = '3.0.2';
$config['application_version'] = '3.1.0';
/*
|--------------------------------------------------------------------------
@@ -19,7 +19,7 @@ $config['application_version'] = '3.0.2';
|
|
*/
$config['commit_sha1'] = '$Id$';
$config['commit_sha1'] = '$Id $';
/*
|--------------------------------------------------------------------------
@@ -358,7 +358,7 @@ $config['cache_query_string'] = FALSE;
| https://codeigniter.com/user_guide/libraries/encryption.html
|
*/
$config['encryption_key'] = '';
$config['encryption_key'] = getenv('ENCRYPTION_KEY') ? getenv('ENCRYPTION_KEY') : '';
/*
|--------------------------------------------------------------------------
@@ -511,6 +511,7 @@ $config['csrf_exclude_uris'] = array();
*/
$config['compress_output'] = FALSE;
/*
|--------------------------------------------------------------------------
| Master Time Reference
@@ -554,4 +555,4 @@ $config['rewrite_short_tags'] = FALSE;
| Comma-separated: '10.0.1.200,192.168.5.0/24'
| Array: array('10.0.1.200', '192.168.5.0/24')
*/
$config['proxy_ips'] = '';
$config['proxy_ips'] = '';

View File

@@ -75,12 +75,12 @@ $query_builder = TRUE;
$db['default'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => '',
'password' => '',
'database' => '',
'hostname' => !empty(getenv('MYSQL_HOST_NAME')) ? getenv('MYSQL_HOST_NAME') : 'localhost',
'username' => !empty(getenv('MYSQL_USERNAME')) ? getenv('MYSQL_USERNAME') : 'admin',
'password' => !empty(getenv('MYSQL_PASSWORD')) ? getenv('MYSQL_PASSWORD') : 'pointofsale',
'database' => !empty(getenv('MYSQL_DB_NAME')) ? getenv('MYSQL_DB_NAME') : 'ospos',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'dbprefix' => 'ospos_',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
@@ -93,4 +93,4 @@ $db['default'] = array(
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);
);

View File

@@ -1,96 +0,0 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| DATABASE CONNECTIVITY SETTINGS
| -------------------------------------------------------------------
| This file will contain the settings needed to access your database.
|
| For complete instructions please consult the 'Database Connection'
| page of the User Guide.
|
| -------------------------------------------------------------------
| EXPLANATION OF VARIABLES
| -------------------------------------------------------------------
|
| ['dsn'] The full DSN string describe a connection to the database.
| ['hostname'] The hostname of your database server.
| ['username'] The username used to connect to the database
| ['password'] The password used to connect to the database
| ['database'] The name of the database you want to connect to
| ['dbdriver'] The database driver. e.g.: mysqli.
| Currently supported:
| cubrid, ibase, mssql, mysql, mysqli, oci8,
| odbc, pdo, postgre, sqlite, sqlite3, sqlsrv
| ['dbprefix'] You can add an optional prefix, which will be added
| to the table name when using the Query Builder class
| ['pconnect'] TRUE/FALSE - Whether to use a persistent connection
| ['db_debug'] TRUE/FALSE - Whether database errors should be displayed.
| ['cache_on'] TRUE/FALSE - Enables/disables query caching
| ['cachedir'] The path to the folder where cache files should be stored
| ['char_set'] The character set used in communicating with the database
| ['dbcollat'] The character collation used in communicating with the database
| NOTE: For MySQL and MySQLi databases, this setting is only used
| as a backup if your server is running PHP < 5.2.3 or MySQL < 5.0.7
| (and in table creation queries made with DB Forge).
| There is an incompatibility in PHP with mysql_real_escape_string() which
| can make your site vulnerable to SQL injection if you are using a
| multi-byte character set and are running versions lower than these.
| Sites using Latin-1 or UTF-8 database character set and collation are unaffected.
| ['swap_pre'] A default table prefix that should be swapped with the dbprefix
| ['encrypt'] Whether or not to use an encrypted connection.
|
| 'mysql' (deprecated), 'sqlsrv' and 'pdo/sqlsrv' drivers accept TRUE/FALSE
| 'mysqli' and 'pdo/mysql' drivers accept an array with the following options:
|
| 'ssl_key' - Path to the private key file
| 'ssl_cert' - Path to the public key certificate file
| 'ssl_ca' - Path to the certificate authority file
| 'ssl_capath' - Path to a directory containing trusted CA certificats in PEM format
| 'ssl_cipher' - List of *allowed* ciphers to be used for the encryption, separated by colons (':')
| 'ssl_verify' - TRUE/FALSE; Whether verify the server certificate or not ('mysqli' only)
|
| ['compress'] Whether or not to use client compression (MySQL only)
| ['stricton'] TRUE/FALSE - forces 'Strict Mode' connections
| - good for ensuring strict SQL while developing
| ['ssl_options'] Used to set various SSL options that can be used when making SSL connections.
| ['failover'] array - A array with 0 or more data for connections if the main should fail.
| ['save_queries'] TRUE/FALSE - Whether to "save" all executed queries.
| NOTE: Disabling this will also effectively disable both
| $this->db->last_query() and profiling of DB queries.
| When you run a query, with this setting set to TRUE (default),
| CodeIgniter will store the SQL statement for debugging purposes.
| However, this may cause high memory usage, especially if you run
| a lot of SQL queries ... disable this to avoid that problem.
|
| The $active_group variable lets you choose which connection group to
| make active. By default there is only one group (the 'default' group).
|
| The $query_builder variables lets you determine whether or not to load
| the query builder class.
*/
$active_group = 'default';
$query_builder = TRUE;
$db['default'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => '',
'password' => '',
'database' => '',
'dbdriver' => 'mysqli',
'dbprefix' => 'ospos_',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);

View File

@@ -31,4 +31,14 @@ $hook['post_controller'] = array(
'function' => 'db_log_queries',
'filename' => 'db_log.php',
'filepath' => 'hooks'
);
);
$hook['pre_system'] = function() {
$config_path = APPPATH . 'config/';
try {
$dotenv = new Dotenv\Dotenv($config_path);
$dotenv->overload();
} catch(Exception $e) {
// continue, .env file not present
}
};

View File

@@ -11,7 +11,7 @@ defined('BASEPATH') OR exit('No direct script access allowed');
| and disable it back when you're done.
|
*/
$config['migration_enabled'] = FALSE;
$config['migration_enabled'] = TRUE;
/*
|--------------------------------------------------------------------------
@@ -69,7 +69,7 @@ $config['migration_auto_latest'] = FALSE;
| be upgraded / downgraded to.
|
*/
$config['migration_version'] = 0;
$config['migration_version'] = 20170502221500;
/*
|--------------------------------------------------------------------------

View File

@@ -1,14 +1,15 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
require_once("Secure_Controller.php");
class Config extends Secure_Controller
class Config extends Secure_Controller
{
public function __construct()
{
parent::__construct('config');
$this->load->library('barcode_lib');
$this->load->library('sale_lib');
}
/*
@@ -80,22 +81,22 @@ class Config extends Secure_Controller
$license[$i]['text'] = '';
$file = file_get_contents('license/composer.LICENSES');
$array = json_decode($file, true);
$array = json_decode($file, TRUE);
foreach($array as $key => $val)
{
if(is_array($val) && $key == 'dependencies')
{
{
foreach($val as $key1 => $val1)
{
if(is_array($val1))
{
{
$license[$i]['text'] .= 'component: ' . $key1 . "\n";
foreach($val1 as $key2 => $val2)
{
{
if(is_array($val2))
{
{
$license[$i]['text'] .= $key2 . ': ';
foreach($val2 as $key3 => $val3)
@@ -120,7 +121,7 @@ class Config extends Secure_Controller
}
}
}
$license[$i]['text'] = $this->xss_clean($license[$i]['text']);
}
@@ -132,14 +133,14 @@ class Config extends Secure_Controller
$license[$i]['text'] = '';
$file = file_get_contents('license/bower.LICENSES');
$array = json_decode($file, true);
$array = json_decode($file, TRUE);
foreach($array as $key => $val)
{
if(is_array($val))
{
$license[$i]['text'] .= 'component: ' . $key . "\n";
foreach($val as $key1 => $val1)
{
if(is_array($val1))
@@ -162,13 +163,16 @@ class Config extends Secure_Controller
$license[$i]['text'] .= "\n";
}
}
$license[$i]['text'] = $this->xss_clean($license[$i]['text']);
}
return $license;
}
/*
* This function loads all the available themes in the dist/bootswatch directory
*/
private function _themes()
{
$themes = array();
@@ -180,7 +184,8 @@ class Config extends Secure_Controller
{
if($dirinfo->isDir() && !$dirinfo->isDot() && $dirinfo->getFileName() != 'fonts')
{
$themes[$dirinfo->getFileName()] = $dirinfo->getFileName();
$file = $this->xss_clean($dirinfo->getFileName());
$themes[$file] = $file;
}
}
@@ -188,22 +193,60 @@ class Config extends Secure_Controller
return $themes;
}
public function index()
{
$data['stock_locations'] = $this->Stock_location->get_all()->result_array();
$data['dinner_tables'] = $this->Dinner_table->get_all()->result_array();
$data['tax_categories'] = $this->Tax->get_all_tax_categories()->result_array();
$data['customer_rewards'] = $this->Customer_rewards->get_all()->result_array();
$data['support_barcode'] = $this->barcode_lib->get_list_barcodes();
$data['logo_exists'] = $this->config->item('company_logo') != '';
$data['line_sequence_options'] = $this->sale_lib->get_line_sequence_options();
$data['register_mode_options'] = $this->sale_lib->get_register_mode_options();
$data['rounding_options'] = Rounding_mode::get_rounding_options();
$data['tax_codes'] = $this->get_tax_code_options();
$data = $this->xss_clean($data);
// load all the license statements, they are already XSS cleaned in the private function
$data['licenses'] = $this->_licenses();
// load all the themes, already XSS cleaned in the private function
$data['themes'] = $this->_themes();
$data['mailchimp'] = array();
if($this->_check_encryption())
{
$data['mailchimp']['api_key'] = $this->encryption->decrypt($this->config->item('mailchimp_api_key'));
$data['mailchimp']['list_id'] = $this->encryption->decrypt($this->config->item('mailchimp_list_id'));
}
else
{
$data['mailchimp']['api_key'] = '';
$data['mailchimp']['list_id'] = '';
}
// load mailchimp lists associated to the given api key, already XSS cleaned in the private function
$data['mailchimp']['lists'] = $this->_mailchimp();
$this->load->view("configs/manage", $data);
}
public function get_tax_code_options()
{
$tax_codes = $this->Tax->get_all_tax_codes()->result_array();
$tax_code_options = array();
foreach($tax_codes as $tax_code)
{
$a = $tax_code['tax_code'];
$b = $tax_code['tax_code_name'];
$tax_code_options[$a] = $b;
}
return $tax_code_options;
}
public function save_info()
{
$upload_success = $this->_handle_logo_upload();
@@ -215,41 +258,44 @@ class Config extends Secure_Controller
'phone' => $this->input->post('phone'),
'email' => $this->input->post('email'),
'fax' => $this->input->post('fax'),
'website' => $this->input->post('website'),
'website' => $this->input->post('website'),
'return_policy' => $this->input->post('return_policy')
);
if (!empty($upload_data['orig_name']))
if(!empty($upload_data['orig_name']))
{
// XSS file image sanity check
if ($this->xss_clean($upload_data['raw_name'], TRUE) === TRUE)
if($this->xss_clean($upload_data['raw_name'], TRUE) === TRUE)
{
$batch_save_data['company_logo'] = $upload_data['raw_name'] . $upload_data['file_ext'];
}
}
$result = $this->Appconfig->batch_save($batch_save_data);
$success = $upload_success && $result ? TRUE : FALSE;
$message = $this->lang->line('config_saved_' . ($success ? '' : 'un') . 'successfully');
$message = $upload_success ? $message : strip_tags($this->upload->display_errors());
echo json_encode(array('success' => $success, 'message' => $message));
echo json_encode(array(
'success' => $success,
'message' => $message
));
}
public function save_general()
{
$batch_save_data = array(
'theme' => $this->input->post('theme'),
'default_tax_1_rate' => parse_decimals($this->input->post('default_tax_1_rate')),
'default_tax_1_name' => $this->input->post('default_tax_1_name'),
'default_tax_2_rate' => parse_decimals($this->input->post('default_tax_2_rate')),
'default_tax_2_name' => $this->input->post('default_tax_2_name'),
'tax_included' => $this->input->post('tax_included') != NULL,
'default_sales_discount' => $this->input->post('default_sales_discount'),
'receiving_calculate_average_price' => $this->input->post('receiving_calculate_average_price') != NULL,
'lines_per_page' => $this->input->post('lines_per_page'),
'default_sales_discount' => $this->input->post('default_sales_discount'),
'notify_horizontal_position' => $this->input->post('notify_horizontal_position'),
'notify_vertical_position' => $this->input->post('notify_vertical_position'),
'gcaptcha_enable' => $this->input->post('gcaptcha_enable') != NULL,
'gcaptcha_secret_key' => $this->input->post('gcaptcha_secret_key'),
'gcaptcha_site_key' => $this->input->post('gcaptcha_site_key'),
'giftcard_number' => $this->input->post('giftcard_number'),
'statistics' => $this->input->post('statistics') != NULL,
'custom1_name' => $this->input->post('custom1_name'),
'custom2_name' => $this->input->post('custom2_name'),
'custom3_name' => $this->input->post('custom3_name'),
@@ -259,14 +305,16 @@ class Config extends Secure_Controller
'custom7_name' => $this->input->post('custom7_name'),
'custom8_name' => $this->input->post('custom8_name'),
'custom9_name' => $this->input->post('custom9_name'),
'custom10_name' => $this->input->post('custom10_name'),
'statistics' => $this->input->post('statistics') != NULL,
'custom10_name' => $this->input->post('custom10_name')
);
$result = $this->Appconfig->batch_save($batch_save_data);
$success = $result ? TRUE : FALSE;
echo json_encode(array('success' => $success, 'message' => $this->lang->line('config_saved_' . ($success ? '' : 'un') . 'successfully')));
echo json_encode(array(
'success' => $success,
'message' => $this->lang->line('config_saved_' . ($success ? '' : 'un') . 'successfully')
));
}
public function check_number_locale()
@@ -274,7 +322,7 @@ class Config extends Secure_Controller
$number_locale = $this->input->post('number_locale');
$fmt = new \NumberFormatter($number_locale, \NumberFormatter::CURRENCY);
$currency_symbol = empty($this->input->post('currency_symbol')) ? $fmt->getSymbol(\NumberFormatter::CURRENCY_SYMBOL) : $this->input->post('currency_symbol');
if ($this->input->post('thousands_separator') == "false")
if($this->input->post('thousands_separator') == 'false')
{
$fmt->setAttribute(\NumberFormatter::GROUPING_SEPARATOR_SYMBOL, '');
}
@@ -299,18 +347,25 @@ class Config extends Secure_Controller
'dateformat' => $this->input->post('dateformat'),
'timeformat' => $this->input->post('timeformat'),
'thousands_separator' => $this->input->post('thousands_separator'),
'number_locale' => $this->input->post('number_locale'),
'number_locale' => $this->input->post('number_locale'),
'currency_decimals' => $this->input->post('currency_decimals'),
'tax_decimals' => $this->input->post('tax_decimals'),
'quantity_decimals' => $this->input->post('quantity_decimals'),
'country_codes' => $this->input->post('country_codes'),
'payment_options_order' => $this->input->post('payment_options_order')
'payment_options_order' => $this->input->post('payment_options_order'),
'date_or_time_format' => $this->input->post('date_or_time_format'),
'cash_decimals' => $this->input->post('cash_decimals'),
'cash_rounding_code' => $this->input->post('cash_rounding_code'),
'financial_year' => $this->input->post('financial_year')
);
$result = $this->Appconfig->batch_save($batch_save_data);
$success = $result ? TRUE : FALSE;
echo json_encode(array('success' => $success, 'message' => $this->lang->line('config_saved_' . ($success ? '' : 'un') . 'successfully')));
echo json_encode(array(
'success' => $success,
'message' => $this->lang->line('config_saved_' . ($success ? '' : 'un') . 'successfully')
));
}
public function save_email()
@@ -321,7 +376,7 @@ class Config extends Secure_Controller
{
$password = $this->encryption->encrypt($this->input->post('smtp_pass'));
}
$batch_save_data = array(
'protocol' => $this->input->post('protocol'),
'mailpath' => $this->input->post('mailpath'),
@@ -336,7 +391,10 @@ class Config extends Secure_Controller
$result = $this->Appconfig->batch_save($batch_save_data);
$success = $result ? TRUE : FALSE;
echo json_encode(array('success' => $success, 'message' => $this->lang->line('config_saved_' . ($success ? '' : 'un') . 'successfully')));
echo json_encode(array(
'success' => $success,
'message' => $this->lang->line('config_saved_' . ($success ? '' : 'un') . 'successfully')
));
}
public function save_message()
@@ -348,53 +406,148 @@ class Config extends Secure_Controller
$password = $this->encryption->encrypt($this->input->post('msg_pwd'));
}
$batch_save_data = array(
$batch_save_data = array(
'msg_msg' => $this->input->post('msg_msg'),
'msg_uid' => $this->input->post('msg_uid'),
'msg_pwd' => $password,
'msg_src' => $this->input->post('msg_src')
);
$result = $this->Appconfig->batch_save($batch_save_data);
$success = $result ? TRUE : FALSE;
echo json_encode(array('success' => $success, 'message' => $this->lang->line('config_saved_' . ($success ? '' : 'un') . 'successfully')));
echo json_encode(array(
'success' => $success,
'message' => $this->lang->line('config_saved_' . ($success ? '' : 'un') . 'successfully')
));
}
public function stock_locations()
/*
* This function fetches all the available lists from Mailchimp for the given API key
*/
private function _mailchimp($api_key = '')
{
$this->load->library('mailchimp_lib', array('api_key' => $api_key));
$result = array();
if(($lists = $this->mailchimp_lib->getLists()) !== FALSE)
{
if(is_array($lists) && !empty($lists['lists']) && is_array($lists['lists']))
{
foreach($lists['lists'] as $list)
{
$list = $this->xss_clean($list);
$result[$list['id']] = $list['name'] . ' [' . $list['stats']['member_count'] . ']';
}
}
}
return $result;
}
/*
AJAX call from mailchimp config form to fetch the Mailchimp lists when a valid API key is inserted
*/
public function ajax_check_mailchimp_api_key()
{
// load mailchimp lists associated to the given api key, already XSS cleaned in the private function
$lists = $this->_mailchimp($this->input->post('mailchimp_api_key'));
$success = count($lists) > 0 ? TRUE : FALSE;
echo json_encode(array(
'success' => $success,
'message' => $this->lang->line('config_mailchimp_key_' . ($success ? '' : 'un') . 'successfully'),
'mailchimp_lists' => $lists
));
}
public function save_mailchimp()
{
$api_key = '';
$list_id = '';
if($this->_check_encryption())
{
$api_key = $this->encryption->encrypt($this->input->post('mailchimp_api_key'));
$list_id = $this->encryption->encrypt($this->input->post('mailchimp_list_id'));
}
$batch_save_data = array(
'mailchimp_api_key' => $api_key,
'mailchimp_list_id' => $list_id
);
$result = $this->Appconfig->batch_save($batch_save_data);
$success = $result ? TRUE : FALSE;
echo json_encode(array(
'success' => $success,
'message' => $this->lang->line('config_saved_' . ($success ? '' : 'un') . 'successfully')
));
}
public function ajax_stock_locations()
{
$stock_locations = $this->Stock_location->get_all()->result_array();
$stock_locations = $this->xss_clean($stock_locations);
$this->load->view('partial/stock_locations', array('stock_locations' => $stock_locations));
}
}
public function ajax_dinner_tables()
{
$dinner_tables = $this->Dinner_table->get_all()->result_array();
$dinner_tables = $this->xss_clean($dinner_tables);
$this->load->view('partial/dinner_tables', array('dinner_tables' => $dinner_tables));
}
public function ajax_tax_categories()
{
$tax_categories = $this->Tax->get_all_tax_categories()->result_array();
$tax_categories = $this->xss_clean($tax_categories);
$this->load->view('partial/tax_categories', array('tax_categories' => $tax_categories));
}
public function ajax_customer_rewards()
{
$customer_rewards = $this->Customer_rewards->get_all()->result_array();
$customer_rewards = $this->xss_clean($customer_rewards);
$this->load->view('partial/customer_rewards', array('customer_rewards' => $customer_rewards));
}
private function _clear_session_state()
{
$this->load->library('sale_lib');
$this->sale_lib->clear_sale_location();
$this->sale_lib->clear_table();
$this->sale_lib->clear_all();
$this->load->library('receiving_lib');
$this->receiving_lib->clear_stock_source();
$this->receiving_lib->clear_stock_destination();
$this->receiving_lib->clear_all();
}
public function save_locations()
public function save_locations()
{
$this->db->trans_start();
$deleted_locations = $this->Stock_location->get_allowed_locations();
$not_to_delete = array();
foreach($this->input->post() as $key => $value)
{
if (strstr($key, 'stock_location'))
if(strstr($key, 'stock_location'))
{
$location_id = preg_replace("/.*?_(\d+)$/", "$1", $key);
unset($deleted_locations[$location_id]);
$not_to_delete[] = $location_id;
// save or update
$location_data = array('location_name' => $value);
if ($this->Stock_location->save($location_data, $location_id))
if($this->Stock_location->save($location_data, $location_id))
{
$this->_clear_session_state();
}
@@ -402,21 +555,226 @@ class Config extends Secure_Controller
}
// all locations not available in post will be deleted now
foreach ($deleted_locations as $location_id => $location_name)
$deleted_locations = $this->Stock_location->get_all()->result_array();
foreach($deleted_locations as $location => $location_data)
{
$this->Stock_location->delete($location_id);
if(!in_array($location_data['location_id'], $not_to_delete))
{
$this->Stock_location->delete($location_data['location_id']);
}
}
$this->db->trans_complete();
$success = $this->db->trans_status();
echo json_encode(array('success' => $success, 'message' => $this->lang->line('config_saved_' . ($success ? '' : 'un') . 'successfully')));
echo json_encode(array(
'success' => $success,
'message' => $this->lang->line('config_saved_' . ($success ? '' : 'un') . 'successfully')
));
}
public function save_barcode()
{
$batch_save_data = array(
public function save_tables()
{
$this->db->trans_start();
$dinner_table_enable = $this->input->post('dinner_table_enable') != NULL;
$this->Appconfig->save('dinner_table_enable', $dinner_table_enable);
if($dinner_table_enable)
{
$not_to_delete = array();
foreach($this->input->post() as $key => $value)
{
if(strstr($key, 'dinner_table') && $key != 'dinner_table_enable')
{
$dinner_table_id = preg_replace("/.*?_(\d+)$/", "$1", $key);
$not_to_delete[] = $dinner_table_id;
// save or update
$table_data = array('name' => $value);
if($this->Dinner_table->save($table_data, $dinner_table_id))
{
$this->_clear_session_state();
}
}
}
// all tables not available in post will be deleted now
$deleted_tables = $this->Dinner_table->get_all()->result_array();
foreach($deleted_tables as $dinner_tables => $table)
{
if(!in_array($table['dinner_table_id'], $not_to_delete))
{
$this->Dinner_table->delete($table['dinner_table_id']);
}
}
}
$this->db->trans_complete();
$success = $this->db->trans_status();
echo json_encode(array(
'success' => $success,
'message' => $this->lang->line('config_saved_' . ($success ? '' : 'un') . 'successfully')
));
}
public function save_tax()
{
$this->db->trans_start();
$customer_sales_tax_support = $this->input->post('customer_sales_tax_support') != NULL;
$batch_save_data = array(
'default_tax_1_rate' => parse_decimals($this->input->post('default_tax_1_rate')),
'default_tax_1_name' => $this->input->post('default_tax_1_name'),
'default_tax_2_rate' => parse_decimals($this->input->post('default_tax_2_rate')),
'default_tax_2_name' => $this->input->post('default_tax_2_name'),
'tax_included' => $this->input->post('tax_included') != NULL,
'customer_sales_tax_support' => $customer_sales_tax_support,
'default_origin_tax_code' => $this->input->post('default_origin_tax_code')
);
$success = $this->Appconfig->batch_save($batch_save_data) ? TRUE : FALSE;
$delete_rejected = FALSE;
if($customer_sales_tax_support)
{
$array_save = array();
foreach($this->input->post() as $key => $value)
{
if(strstr($key, 'tax_category'))
{
$tax_category_id = preg_replace("/.*?_(\d+)$/", "$1", $key);
$array_save[$tax_category_id]['tax_category'] = $value;
}
elseif(strstr($key, 'tax_group_sequence'))
{
$tax_category_id = preg_replace("/.*?_(\d+)$/", "$1", $key);
$array_save[$tax_category_id]['tax_group_sequence'] = $value;
}
}
$not_to_delete = array();
if(!empty($array_save))
{
foreach($array_save as $key => $value)
{
// save or update
$category_data = array('tax_category' => $value['tax_category'], 'tax_group_sequence' => $value['tax_group_sequence']);
$this->Tax->save_tax_category($category_data, $key);
$not_to_delete[] = $key;
}
}
// all categories not available in post will be deleted now
$deleted_categories = $this->Tax->get_all_tax_categories()->result_array();
foreach($deleted_categories as $tax_category => $category)
{
if(!in_array($category['tax_category_id'], $not_to_delete))
{
$usg1 = $this->Tax->get_tax_category_usage($category['tax_category_id']);
$usg2 = $this->Item->get_tax_category_usage($category['tax_category_id']);
if(($usg1 + $usg2) == 0)
{
$this->Tax->delete_tax_category($category['tax_category_id']);
}
else
{
$delete_rejected = TRUE;
}
}
}
}
$this->db->trans_complete();
$success &= $this->db->trans_status();
$message = "";
if($success && $delete_rejected)
{
$message = $this->lang->line('config_tax_category_used');
$success = false;
}
else
{
$message = $this->lang->line('config_saved_' . ($success ? '' : 'un') . 'successfully');
}
echo json_encode(array(
'success' => $success,
'message' => $message
));
}
public function save_rewards()
{
$this->db->trans_start();
$customer_reward_enable = $this->input->post('customer_reward_enable') != NULL;
$this->Appconfig->save('customer_reward_enable', $customer_reward_enable);
if($customer_reward_enable)
{
$not_to_delete = array();
$array_save = array();
foreach($this->input->post() as $key => $value)
{
if(strstr($key, 'customer_reward') && $key != 'customer_reward_enable')
{
$customer_reward_id = preg_replace("/.*?_(\d+)$/", "$1", $key);
$not_to_delete[] = $customer_reward_id;
$array_save[$customer_reward_id]['package_name'] = $value;
}
elseif(strstr($key, 'reward_points'))
{
$customer_reward_id = preg_replace("/.*?_(\d+)$/", "$1", $key);
$array_save[$customer_reward_id]['points_percent'] = $value;
}
}
if(!empty($array_save))
{
foreach($array_save as $key => $value)
{
// save or update
$package_data = array('package_name' => $value['package_name'], 'points_percent' => $value['points_percent']);
$this->Customer_rewards->save($package_data, $key);
}
}
// all packages not available in post will be deleted now
$deleted_packages = $this->Customer_rewards->get_all()->result_array();
foreach($deleted_packages as $customer_rewards => $reward_category)
{
if(!in_array($reward_category['package_id'], $not_to_delete))
{
$this->Customer_rewards->delete($reward_category['package_id']);
}
}
}
$this->db->trans_complete();
$success = $this->db->trans_status();
echo json_encode(array(
'success' => $success,
'message' => $this->lang->line('config_saved_' . ($success ? '' : 'un') . 'successfully')
));
}
public function save_barcode()
{
$batch_save_data = array(
'barcode_type' => $this->input->post('barcode_type'),
'barcode_quality' => $this->input->post('barcode_quality'),
'barcode_width' => $this->input->post('barcode_width'),
@@ -430,19 +788,25 @@ class Config extends Secure_Controller
'barcode_page_width' => $this->input->post('barcode_page_width'),
'barcode_page_cellspacing' => $this->input->post('barcode_page_cellspacing'),
'barcode_generate_if_empty' => $this->input->post('barcode_generate_if_empty') != NULL,
'barcode_content' => $this->input->post('barcode_content')
);
$result = $this->Appconfig->batch_save($batch_save_data);
$success = $result ? TRUE : FALSE;
echo json_encode(array('success' => $success, 'message' => $this->lang->line('config_saved_' . ($success ? '' : 'un') . 'successfully')));
}
public function save_receipt()
{
$batch_save_data = array (
'barcode_content' => $this->input->post('barcode_content'),
'barcode_formats' => json_encode($this->input->post('barcode_formats'))
);
$result = $this->Appconfig->batch_save($batch_save_data);
$success = $result ? TRUE : FALSE;
echo json_encode(array(
'success' => $success,
'message' => $this->lang->line('config_saved_' . ($success ? '' : 'un') . 'successfully')
));
}
public function save_receipt()
{
$batch_save_data = array (
'receipt_template' => $this->input->post('receipt_template'),
'receipt_font_size' => $this->input->post('receipt_font_size'),
'receipt_show_company_name' => $this->input->post('receipt_show_company_name') != NULL,
'receipt_show_taxes' => $this->input->post('receipt_show_taxes') != NULL,
'receipt_show_total_discount' => $this->input->post('receipt_show_total_discount') != NULL,
'receipt_show_description' => $this->input->post('receipt_show_description') != NULL,
@@ -456,88 +820,106 @@ class Config extends Secure_Controller
'print_right_margin' => $this->input->post('print_right_margin')
);
$result = $this->Appconfig->batch_save($batch_save_data);
$success = $result ? TRUE : FALSE;
$result = $this->Appconfig->batch_save($batch_save_data);
$success = $result ? TRUE : FALSE;
echo json_encode(array('success' => $success, 'message' => $this->lang->line('config_saved_' . ($success ? '' : 'un') . 'successfully')));
}
echo json_encode(array(
'success' => $success,
'message' => $this->lang->line('config_saved_' . ($success ? '' : 'un') . 'successfully')
));
}
public function save_invoice()
{
$batch_save_data = array (
public function save_invoice()
{
$batch_save_data = array (
'invoice_enable' => $this->input->post('invoice_enable') != NULL,
'default_register_mode' => $this->input->post('default_register_mode'),
'sales_invoice_format' => $this->input->post('sales_invoice_format'),
'sales_quote_format' => $this->input->post('sales_quote_format'),
'recv_invoice_format' => $this->input->post('recv_invoice_format'),
'invoice_default_comments' => $this->input->post('invoice_default_comments'),
'invoice_email_message' => $this->input->post('invoice_email_message')
'invoice_email_message' => $this->input->post('invoice_email_message'),
'line_sequence' => $this->input->post('line_sequence'),
'last_used_invoice_number' =>$this->input->post('last_used_invoice_number'),
'last_used_quote_number' =>$this->input->post('last_used_quote_number')
);
$result = $this->Appconfig->batch_save($batch_save_data);
$success = $result ? TRUE : FALSE;
$result = $this->Appconfig->batch_save($batch_save_data);
$success = $result ? TRUE : FALSE;
echo json_encode(array('success' => $success, 'message' => $this->lang->line('config_saved_' . ($success ? '' : 'un') . 'successfully')));
}
// Update the register mode with the latest change so that if the user
// switches immediately back to the register the mode reflects the change
if($success == TRUE)
{
if($this->config->item('invoice_enable') == '1')
{
$this->sale_lib->set_mode($batch_save_data['default_register_mode']);
}
else
{
$this->sale_lib->set_mode('sale');
}
}
echo json_encode(array(
'success' => $success,
'message' => $this->lang->line('config_saved_' . ($success ? '' : 'un') . 'successfully')
));
}
public function remove_logo()
{
$result = $this->Appconfig->batch_save(array('company_logo' => ''));
echo json_encode(array('success' => $result));
}
private function _handle_logo_upload()
{
$this->load->helper('directory');
// load upload library
$config = array('upload_path' => './uploads/',
'allowed_types' => 'gif|jpg|png',
'max_size' => '1024',
'max_width' => '800',
'max_height' => '680',
'file_name' => 'company_logo');
$this->load->library('upload', $config);
$this->upload->do_upload('company_logo');
private function _handle_logo_upload()
{
$this->load->helper('directory');
return strlen($this->upload->display_errors()) == 0 || !strcmp($this->upload->display_errors(), '<p>'.$this->lang->line('upload_no_file_selected').'</p>');
// load upload library
$config = array('upload_path' => './uploads/',
'allowed_types' => 'gif|jpg|png',
'max_size' => '1024',
'max_width' => '800',
'max_height' => '680',
'file_name' => 'company_logo');
$this->load->library('upload', $config);
$this->upload->do_upload('company_logo');
return strlen($this->upload->display_errors()) == 0 || !strcmp($this->upload->display_errors(), '<p>'.$this->lang->line('upload_no_file_selected').'</p>');
}
private function _check_encryption()
{
$encryption_key = $this->config->item('encryption_key');
// check if the encryption_key config item is the default one
if($encryption_key == '' || $encryption_key == 'YOUR KEY')
{
// Config path
$config_path = APPPATH . 'config/config.php';
// Open the file
$config = file_get_contents($config_path);
// $key will be assigned a 32-byte (256-bit) hex-encoded random key
$key = bin2hex($this->encryption->create_key(32));
// replace the empty placeholder with a real randomly generated encryption key
if($encryption_key == '')
{
$config = str_replace("['encryption_key'] = '';", "['encryption_key'] = '" . $key . "';", $config);
}
else
{
$config = str_replace("['encryption_key'] = 'YOUR KEY';", "['encryption_key'] = '" . $key . "';", $config);
}
// set the encryption key in the config item
$this->config->set_item('encryption_key', $key);
// Write the new config.php file
$handle = fopen($config_path, 'w+');
// replace the empty placeholder with a real randomly generated encryption key
$config = preg_replace("/(.*encryption_key.*)('');/", "$1'$key';", $config);
$result = FALSE;
// Chmod the file
@chmod($config_path, 0777);
$result = FALSE;
// Write the new config.php file
$handle = fopen($config_path, 'w+');
// Verify file permissions
if(is_writable($config_path))
@@ -545,46 +927,46 @@ class Config extends Secure_Controller
// Write the file
$result = (fwrite($handle, $config) === FALSE) ? FALSE : TRUE;
}
fclose($handle);
// Chmod the file
@chmod($config_path, 0444);
fclose($handle);
return $result;
}
return TRUE;
}
public function backup_db()
{
$employee_id = $this->Employee->get_logged_in_employee_info()->person_id;
if($this->Employee->has_module_grant('config', $employee_id))
{
$this->load->dbutil();
$prefs = array(
public function backup_db()
{
$employee_id = $this->Employee->get_logged_in_employee_info()->person_id;
if($this->Employee->has_module_grant('config', $employee_id))
{
$this->load->dbutil();
$prefs = array(
'format' => 'zip',
'filename' => 'ospos.sql'
);
$backup = $this->dbutil->backup($prefs);
$file_name = 'ospos-' . date("Y-m-d-H-i-s") .'.zip';
$save = 'uploads/' . $file_name;
$this->load->helper('download');
while(ob_get_level())
{
ob_end_clean();
}
);
force_download($file_name, $backup);
}
else
{
redirect('no_access/config');
}
}
$backup = $this->dbutil->backup($prefs);
$file_name = 'ospos-' . date("Y-m-d-H-i-s") .'.zip';
$save = 'uploads/' . $file_name;
$this->load->helper('download');
while(ob_get_level())
{
ob_end_clean();
}
force_download($file_name, $backup);
}
else
{
redirect('no_access/config');
}
}
}
?>

View File

@@ -4,18 +4,52 @@ require_once("Persons.php");
class Customers extends Persons
{
private $_list_id;
public function __construct()
{
parent::__construct('customers');
$this->load->library('mailchimp_lib');
$CI =& get_instance();
$this->_list_id = $CI->encryption->decrypt($CI->Appconfig->get('mailchimp_list_id'));
}
public function index()
{
$data['table_headers'] = $this->xss_clean(get_people_manage_table_headers());
$data['table_headers'] = $this->xss_clean(get_customer_manage_table_headers());
$this->load->view('people/manage', $data);
}
/*
Gets one row for a customer manage table. This is called using AJAX to update one row.
*/
public function get_row($row_id)
{
$person = $this->Customer->get_info($row_id);
// retrieve the total amount the customer spent so far together with min, max and average values
$stats = $this->Customer->get_stats($person->person_id);
if(empty($stats))
{
//create object with empty properties.
$stats = new stdClass;
$stats->total = 0;
$stats->min = 0;
$stats->max = 0;
$stats->average = 0;
$stats->avg_discount = 0;
$stats->quantity = 0;
}
$data_row = $this->xss_clean(get_customer_data_row($person, $stats, $this));
echo json_encode($data_row);
}
/*
Returns customer table data rows. This will be called with AJAX.
*/
@@ -33,14 +67,28 @@ class Customers extends Persons
$data_rows = array();
foreach($customers->result() as $person)
{
$data_rows[] = get_person_data_row($person, $this);
// retrieve the total amount the customer spent so far together with min, max and average values
$stats = $this->Customer->get_stats($person->person_id);
if(empty($stats))
{
//create object with empty properties.
$stats = new stdClass;
$stats->total = 0;
$stats->min = 0;
$stats->max = 0;
$stats->average = 0;
$stats->avg_discount = 0;
$stats->quantity = 0;
}
$data_rows[] = get_customer_data_row($person, $stats, $this);
}
$data_rows = $this->xss_clean($data_rows);
echo json_encode(array('total' => $total_rows, 'rows' => $data_rows));
}
/*
Gives search suggestions based on what is being searched for
*/
@@ -57,34 +105,125 @@ class Customers extends Persons
echo json_encode($suggestions);
}
/*
Loads the customer edit form
*/
public function view($customer_id = -1)
{
$customer_sales_tax_support = $this->config->item('customer_sales_tax_support');
$info = $this->Customer->get_info($customer_id);
foreach(get_object_vars($info) as $property => $value)
{
$info->$property = $this->xss_clean($value);
}
$data['person_info'] = $info;
$data['sales_tax_code_label'] = $info->sales_tax_code . ' ' . $this->Tax->get_info($info->sales_tax_code)->tax_code_name;
$packages = array('' => $this->lang->line('items_none'));
foreach($this->Customer_rewards->get_all()->result_array() as $row)
{
$packages[$this->xss_clean($row['package_id'])] = $this->xss_clean($row['package_name']);
}
$data['packages'] = $packages;
$data['selected_package'] = $info->package_id;
$data['total'] = $this->xss_clean($this->Customer->get_totals($customer_id)->total);
if ($customer_sales_tax_support == '1')
{
$data['customer_sales_tax_enabled'] = TRUE;
}
else
{
$data['customer_sales_tax_enabled'] = FALSE;
}
// retrieve the total amount the customer spent so far together with min, max and average values
$stats = $this->Customer->get_stats($customer_id);
if(!empty($stats))
{
foreach(get_object_vars($stats) as $property => $value)
{
$info->$property = $this->xss_clean($value);
}
$data['stats'] = $stats;
}
// retrieve the info from Mailchimp only if there is an email address assigned
if(!empty($info->email))
{
// collect mailchimp customer info
if(($mailchimp_info = $this->mailchimp_lib->getMemberInfo($this->_list_id, $info->email)) !== FALSE)
{
$data['mailchimp_info'] = $this->xss_clean($mailchimp_info);
// collect customer mailchimp emails activities (stats)
if(($activities = $this->mailchimp_lib->getMemberActivity($this->_list_id, $info->email)) !== FALSE)
{
if(array_key_exists('activity', $activities))
{
$open = 0;
$unopen = 0;
$click = 0;
$total = 0;
$lastopen = '';
foreach($activities['activity'] as $activity)
{
if($activity['action'] == 'sent')
{
++$unopen;
}
elseif($activity['action'] == 'open')
{
if(empty($lastopen))
{
$lastopen = substr($activity['timestamp'], 0, 10);
}
++$open;
}
elseif($activity['action'] == 'click')
{
if(empty($lastopen))
{
$lastopen = substr($activity['timestamp'], 0, 10);
}
++$click;
}
++$total;
}
$data['mailchimp_activity']['total'] = $total;
$data['mailchimp_activity']['open'] = $open;
$data['mailchimp_activity']['unopen'] = $unopen;
$data['mailchimp_activity']['click'] = $click;
$data['mailchimp_activity']['lastopen'] = $lastopen;
}
}
}
}
$this->load->view("customers/form", $data);
}
/*
Inserts/updates a customer
*/
public function save($customer_id = -1)
{
$first_name = $this->xss_clean($this->input->post('first_name'));
$last_name = $this->xss_clean($this->input->post('last_name'));
$email = $this->xss_clean(strtolower($this->input->post('email')));
// format first and last name properly
$first_name = $this->nameize($first_name);
$last_name = $this->nameize($last_name);
$person_data = array(
'first_name' => $this->input->post('first_name'),
'last_name' => $this->input->post('last_name'),
'first_name' => $first_name,
'last_name' => $last_name,
'gender' => $this->input->post('gender'),
'email' => $this->input->post('email'),
'email' => $email,
'phone_number' => $this->input->post('phone_number'),
'address_1' => $this->input->post('address_1'),
'address_2' => $this->input->post('address_2'),
@@ -94,57 +233,90 @@ class Customers extends Persons
'country' => $this->input->post('country'),
'comments' => $this->input->post('comments')
);
$customer_data = array(
'account_number' => $this->input->post('account_number') == '' ? NULL : $this->input->post('account_number'),
'company_name' => $this->input->post('company_name') == '' ? NULL : $this->input->post('company_name'),
'discount_percent' => $this->input->post('discount_percent') == '' ? 0.00 : $this->input->post('discount_percent'),
'package_id' => $this->input->post('package_id') == '' ? NULL : $this->input->post('package_id'),
'taxable' => $this->input->post('taxable') != NULL
);
$tax_code = $this->input->post('sales_tax_code');
if(!isset($tax_code))
{
$customer_data['sales_tax_code'] = '';
}
else
{
$customer_data['sales_tax_code'] = $tax_code;
}
if($this->Customer->save_customer($person_data, $customer_data, $customer_id))
{
$person_data = $this->xss_clean($person_data);
$customer_data = $this->xss_clean($customer_data);
//New customer
// save customer to Mailchimp selected list
$this->mailchimp_lib->addOrUpdateMember($this->_list_id, $email, $first_name, $last_name, $this->input->post('mailchimp_status'), array('vip' => $this->input->post('mailchimp_vip') != NULL));
// New customer
if($customer_id == -1)
{
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('customers_successful_adding').' '.
$person_data['first_name'].' '.$person_data['last_name'], 'id' => $customer_data['person_id']));
echo json_encode(array('success' => TRUE,
'message' => $this->lang->line('customers_successful_adding') . ' ' . $first_name . ' ' . $last_name,
'id' => $this->xss_clean($customer_data['person_id'])));
}
else //Existing customer
else // Existing customer
{
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('customers_successful_updating').' '.
$person_data['first_name'].' '.$person_data['last_name'], 'id' => $customer_id));
echo json_encode(array('success' => TRUE,
'message' => $this->lang->line('customers_successful_updating') . ' ' . $first_name . ' ' . $last_name,
'id' => $customer_id));
}
}
else//failure
else // Failure
{
$person_data = $this->xss_clean($person_data);
echo json_encode(array('success' => FALSE, 'message' => $this->lang->line('customers_error_adding_updating').' '.
$person_data['first_name'].' '.$person_data['last_name'], 'id' => -1));
echo json_encode(array('success' => FALSE,
'message' => $this->lang->line('customers_error_adding_updating') . ' ' . $first_name . ' ' . $last_name,
'id' => -1));
}
}
public function check_account_number()
/*
AJAX call to verify if an email address already exists
*/
public function ajax_check_email()
{
$exists = $this->Customer->account_number_exists($this->input->post('account_number'), $this->input->post('person_id'));
$exists = $this->Customer->check_email_exists(strtolower($this->input->post('email')), $this->input->post('person_id'));
echo !$exists ? 'true' : 'false';
}
/*
AJAX call to verify if an account number already exists
*/
public function ajax_check_account_number()
{
$exists = $this->Customer->check_account_number_exists($this->input->post('account_number'), $this->input->post('person_id'));
echo !$exists ? 'true' : 'false';
}
/*
This deletes customers from the customers table
*/
public function delete()
{
$customers_to_delete = $this->xss_clean($this->input->post('ids'));
$customers_to_delete = $this->input->post('ids');
$customers_info = $this->Customer->get_multiple_info($customers_to_delete);
if($this->Customer->delete_list($customers_to_delete))
{
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('customers_successful_deleted').' '.
count($customers_to_delete).' '.$this->lang->line('customers_one_or_multiple')));
foreach($customers_info->result() as $info)
{
// remove customer from Mailchimp selected list
$this->mailchimp_lib->removeMember($this->_list_id, $info->email);
}
echo json_encode(array('success' => TRUE,
'message' => $this->lang->line('customers_successful_deleted') . ' ' . count($customers_to_delete) . ' ' . $this->lang->line('customers_one_or_multiple')));
}
else
{
@@ -161,7 +333,7 @@ class Customers extends Persons
$data = file_get_contents('../' . $name);
force_download($name, $data);
}
public function excel_import()
{
$this->load->view('customers/form_excel_import', NULL);
@@ -177,24 +349,25 @@ class Customers extends Persons
{
if(($handle = fopen($_FILES['file_path']['tmp_name'], 'r')) !== FALSE)
{
// Skip the first row as it's the table description
// Skip the first row as it's the table description
fgetcsv($handle);
$i = 1;
$failCodes = array();
while(($data = fgetcsv($handle)) !== FALSE)
while(($data = fgetcsv($handle)) !== FALSE)
{
// XSS file data sanity check
$data = $this->xss_clean($data);
if(sizeof($data) >= 15)
{
$email = strtolower($data[3]);
$person_data = array(
'first_name' => $data[0],
'last_name' => $data[1],
'gender' => $data[2],
'email' => $data[3],
'email' => $email,
'phone_number' => $data[4],
'address_1' => $data[5],
'address_2' => $data[6],
@@ -204,38 +377,49 @@ class Customers extends Persons
'country' => $data[10],
'comments' => $data[11]
);
$customer_data = array(
'company_name' => $data[12],
'discount_percent' => $data[14],
'taxable' => $data[15] == '' ? 0 : 1
);
$account_number = $data[13];
$invalidated = FALSE;
if($account_number != '')
// don't duplicate people with same email
$invalidated = $this->Customer->check_email_exists($email);
if($account_number != '')
{
$customer_data['account_number'] = $account_number;
$invalidated = $this->Customer->account_number_exists($account_number);
$invalidated &= $this->Customer->check_account_number_exists($account_number);
}
}
else
else
{
$invalidated = TRUE;
}
if($invalidated || !$this->Customer->save_customer($person_data, $customer_data))
{
if($invalidated)
{
$failCodes[] = $i;
}
elseif($this->Customer->save_customer($person_data, $customer_data))
{
// save customer to Mailchimp selected list
$this->mailchimp_lib->addOrUpdateMember($this->_list_id, $person_data['email'], $person_data['first_name'], '', $person_data['last_name']);
}
else
{
$failCodes[] = $i;
}
++$i;
}
if(count($failCodes) > 0)
{
$message = $this->lang->line('customers_excel_import_partially_failed') . ' (' . count($failCodes) . '): ' . implode(', ', $failCodes);
echo json_encode(array('success' => FALSE, 'message' => $message));
}
else
@@ -243,11 +427,11 @@ class Customers extends Persons
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('customers_excel_import_success')));
}
}
else
else
{
echo json_encode(array('success' => FALSE, 'message' => $this->lang->line('customers_excel_import_nodata_wrongformat')));
echo json_encode(array('success' => FALSE, 'message' => $this->lang->line('customers_excel_import_nodata_wrongformat')));
}
}
}
}
?>
?>

View File

@@ -8,14 +8,7 @@ class Employees extends Persons
{
parent::__construct('employees');
}
public function index()
{
$data['table_headers'] = $this->xss_clean(get_people_manage_table_headers());
$this->load->view('people/manage', $data);
}
/*
Returns employee table data rows. This will be called with AJAX.
*/
@@ -40,7 +33,7 @@ class Employees extends Persons
echo json_encode(array('total' => $total_rows, 'rows' => $data_rows));
}
/*
Gives search suggestions based on what is being searched for
*/
@@ -50,7 +43,7 @@ class Employees extends Persons
echo json_encode($suggestions);
}
/*
Loads the employee edit form
*/
@@ -68,7 +61,7 @@ class Employees extends Persons
{
$module->module_id = $this->xss_clean($module->module_id);
$module->grant = $this->xss_clean($this->Employee->has_grant($module->module_id, $person_info->person_id));
$modules[] = $module;
}
$data['all_modules'] = $modules;
@@ -79,75 +72,108 @@ class Employees extends Persons
$permission->module_id = $this->xss_clean($permission->module_id);
$permission->permission_id = $this->xss_clean($permission->permission_id);
$permission->grant = $this->xss_clean($this->Employee->has_grant($permission->permission_id, $person_info->person_id));
$permissions[] = $permission;
}
$data['all_subpermissions'] = $permissions;
$this->load->view("employees/form", $data);
$this->load->view('employees/form', $data);
}
/*
Inserts/updates an employee
*/
public function save($employee_id = -1)
{
$person_data = array(
'first_name' => $this->input->post('first_name'),
'last_name' => $this->input->post('last_name'),
'gender' => $this->input->post('gender'),
'email' => $this->input->post('email'),
'phone_number' => $this->input->post('phone_number'),
'address_1' => $this->input->post('address_1'),
'address_2' => $this->input->post('address_2'),
'city' => $this->input->post('city'),
'state' => $this->input->post('state'),
'zip' => $this->input->post('zip'),
'country' => $this->input->post('country'),
'comments' => $this->input->post('comments'),
);
$grants_data = $this->input->post('grants') != NULL ? $this->input->post('grants') : array();
//Password has been changed OR first time password set
if($this->input->post('password') != '')
if($this->input->post('current_password') != '')
{
$employee_data = array(
'username' => $this->input->post('username'),
'password' => password_hash($this->input->post('password'), PASSWORD_DEFAULT),
'hash_version' => 2
if($this->Employee->check_password($this->input->post('username'), $this->input->post('current_password')))
{
$employee_data = array(
'username' => $this->input->post('username'),
'password' => password_hash($this->input->post('password'), PASSWORD_DEFAULT),
'hash_version' => 2
);
if($this->Employee->change_password($employee_data, $employee_id))
{
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('employees_successful_change_password'), 'id' => $employee_id));
}
else//failure
{
echo json_encode(array('success' => FALSE, 'message' => $this->lang->line('employees_unsuccessful_change_password'), 'id' => -1));
}
}
else
{
echo json_encode(array('success' => FALSE, 'message' => $this->lang->line('employees_current_password_invalid'), 'id' => -1));
}
}
else
{
$first_name = $this->xss_clean($this->input->post('first_name'));
$last_name = $this->xss_clean($this->input->post('last_name'));
$email = $this->xss_clean(strtolower($this->input->post('email')));
// format first and last name properly
$first_name = $this->nameize($first_name);
$last_name = $this->nameize($last_name);
$person_data = array(
'first_name' => $first_name,
'last_name' => $last_name,
'gender' => $this->input->post('gender'),
'email' => $email,
'phone_number' => $this->input->post('phone_number'),
'address_1' => $this->input->post('address_1'),
'address_2' => $this->input->post('address_2'),
'city' => $this->input->post('city'),
'state' => $this->input->post('state'),
'zip' => $this->input->post('zip'),
'country' => $this->input->post('country'),
'comments' => $this->input->post('comments'),
);
}
else //Password not changed
{
$employee_data = array('username' => $this->input->post('username'));
}
if($this->Employee->save_employee($person_data, $employee_data, $grants_data, $employee_id))
{
$person_data = $this->xss_clean($person_data);
$employee_data = $this->xss_clean($employee_data);
$grants_data = $this->input->post('grants') != NULL ? $this->input->post('grants') : array();
//New employee
if($employee_id == -1)
//Password has been changed OR first time password set
if($this->input->post('password') != '')
{
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('employees_successful_adding').' '.
$person_data['first_name'].' '.$person_data['last_name'], 'id' => $employee_data['person_id']));
$employee_data = array(
'username' => $this->input->post('username'),
'password' => password_hash($this->input->post('password'), PASSWORD_DEFAULT),
'hash_version' => 2
);
}
else //Existing employee
else //Password not changed
{
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('employees_successful_updating').' '.
$person_data['first_name'].' '.$person_data['last_name'], 'id' => $employee_id));
$employee_data = array('username' => $this->input->post('username'));
}
}
else//failure
{
$person_data = $this->xss_clean($person_data);
echo json_encode(array('success' => FALSE, 'message' => $this->lang->line('employees_error_adding_updating').' '.
$person_data['first_name'].' '.$person_data['last_name'], 'id' => -1));
if($this->Employee->save_employee($person_data, $employee_data, $grants_data, $employee_id))
{
// New employee
if($employee_id == -1)
{
echo json_encode(array('success' => TRUE,
'message' => $this->lang->line('employees_successful_adding') . ' ' . $first_name . ' ' . $last_name,
'id' => $this->xss_clean($employee_data['person_id'])));
}
else // Existing employee
{
echo json_encode(array('success' => TRUE,
'message' => $this->lang->line('employees_successful_updating') . ' ' . $first_name . ' ' . $last_name,
'id' => $employee_id));
}
}
else // Failure
{
echo json_encode(array('success' => FALSE,
'message' => $this->lang->line('employees_error_adding_updating') . ' ' . $first_name . ' ' . $last_name,
'id' => -1));
}
}
}
/*
This deletes employees from the employees table
*/
@@ -157,13 +183,28 @@ class Employees extends Persons
if($this->Employee->delete_list($employees_to_delete))
{
echo json_encode(array('success' => TRUE,'message' => $this->lang->line('employees_successful_deleted').' '.
count($employees_to_delete).' '.$this->lang->line('employees_one_or_multiple')));
echo json_encode(array('success' => TRUE,'message' => $this->lang->line('employees_successful_deleted') . ' ' .
count($employees_to_delete) . ' ' . $this->lang->line('employees_one_or_multiple')));
}
else
{
echo json_encode(array('success' => FALSE,'message' => $this->lang->line('employees_cannot_be_deleted')));
echo json_encode(array('success' => FALSE, 'message' => $this->lang->line('employees_cannot_be_deleted')));
}
}
/*
Loads the change password form
*/
public function change_password($employee_id = -1)
{
$person_info = $this->Employee->get_info($employee_id);
foreach(get_object_vars($person_info) as $property => $value)
{
$person_info->$property = $this->xss_clean($value);
}
$data['person_info'] = $person_info;
$this->load->view('employees/form_change_password', $data);
}
}
?>
?>

View File

@@ -44,6 +44,14 @@ class Giftcards extends Secure_Controller
/*
Gives search suggestions based on what is being searched for
*/
public function suggest()
{
$suggestions = $this->xss_clean($this->Giftcard->get_search_suggestions($this->input->get('term'), TRUE));
echo json_encode($suggestions);
}
public function suggest_search()
{
$suggestions = $this->xss_clean($this->Giftcard->get_search_suggestions($this->input->post('term')));
@@ -63,10 +71,17 @@ class Giftcards extends Secure_Controller
$giftcard_info = $this->Giftcard->get_info($giftcard_id);
$data['selected_person_name'] = ($giftcard_id > 0 && isset($giftcard_info->person_id)) ? $giftcard_info->first_name . ' ' . $giftcard_info->last_name : '';
$data['selected_person_id'] = $giftcard_info->person_id;
$data['giftcard_number'] = $giftcard_id > 0 ? $giftcard_info->giftcard_number : $this->Giftcard->get_max_number()->giftcard_number + 1;
$data['giftcard_id'] = $giftcard_id;
$data['giftcard_value'] = $giftcard_info->value;
$data['selected_person_id'] = $giftcard_info->person_id;
if($this->config->item('giftcard_number') == "random")
{
$data['giftcard_number'] = $giftcard_id > 0 ? $giftcard_info->giftcard_number : '';
}
else
{
$data['giftcard_number'] = $giftcard_id > 0 ? $giftcard_info->giftcard_number : $this->Giftcard->get_max_number()->giftcard_number + 1;
}
$data['giftcard_id'] = $giftcard_id;
$data['giftcard_value'] = $giftcard_info->value;
$data = $this->xss_clean($data);
@@ -75,9 +90,16 @@ class Giftcards extends Secure_Controller
public function save($giftcard_id = -1)
{
$giftcard_number = $this->input->post('giftcard_number');
if($giftcard_id == -1 && trim($giftcard_number) == '')
{
$giftcard_number = $this->Giftcard->generate_unique_giftcard_name($this->input->post('value'));
}
$giftcard_data = array(
'record_time' => date('Y-m-d H:i:s'),
'giftcard_number' => $this->input->post('giftcard_number'),
'giftcard_number' => $giftcard_number,
'value' => parse_decimals($this->input->post('value')),
'person_id' => $this->input->post('person_id') == '' ? NULL : $this->input->post('person_id')
);
@@ -89,12 +111,12 @@ class Giftcards extends Secure_Controller
//New giftcard
if($giftcard_id == -1)
{
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('giftcards_successful_adding').' '.
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('giftcards_successful_adding') . ' ' .
$giftcard_data['giftcard_number'], 'id' => $giftcard_data['giftcard_id']));
}
else //Existing giftcard
{
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('giftcards_successful_updating').' '.
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('giftcards_successful_updating') . ' ' .
$giftcard_data['giftcard_number'], 'id' => $giftcard_id));
}
}
@@ -102,7 +124,7 @@ class Giftcards extends Secure_Controller
{
$giftcard_data = $this->xss_clean($giftcard_data);
echo json_encode(array('success' => FALSE, 'message' => $this->lang->line('giftcards_error_adding_updating').' '.
echo json_encode(array('success' => FALSE, 'message' => $this->lang->line('giftcards_error_adding_updating') . ' ' .
$giftcard_data['giftcard_number'], 'id' => -1));
}
}
@@ -113,7 +135,7 @@ class Giftcards extends Secure_Controller
if($this->Giftcard->delete_list($giftcards_to_delete))
{
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('giftcards_successful_deleted').' '.
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('giftcards_successful_deleted') . ' ' .
count($giftcards_to_delete).' '.$this->lang->line('giftcards_one_or_multiple')));
}
else

View File

@@ -4,11 +4,6 @@ require_once("Secure_Controller.php");
class Home extends Secure_Controller
{
public function __construct()
{
parent::__construct();
}
public function index()
{
$this->load->view('home');
@@ -21,4 +16,4 @@ class Home extends Secure_Controller
$this->Employee->logout();
}
}
?>
?>

View File

@@ -84,23 +84,36 @@ class Item_kits extends Secure_Controller
public function view($item_kit_id = -1)
{
$info = $this->Item_kit->get_info($item_kit_id);
if($item_kit_id == -1)
{
$info->price_option = '0';
$info->print_option = PRINT_ALL;
$info->kit_item_id = 0;
}
foreach(get_object_vars($info) as $property => $value)
{
$info->$property = $this->xss_clean($value);
}
$data['item_kit_info'] = $info;
$items = array();
foreach($this->Item_kit_items->get_info($item_kit_id) as $item_kit_item)
{
$item['kit_sequence'] = $this->xss_clean($item_kit_item['kit_sequence']);
$item['name'] = $this->xss_clean($this->Item->get_info($item_kit_item['item_id'])->name);
$item['item_id'] = $this->xss_clean($item_kit_item['item_id']);
$item['quantity'] = $this->xss_clean($item_kit_item['quantity']);
$items[] = $item;
}
$data['item_kit_items'] = $items;
$data['selected_kit_item_id'] = $info->kit_item_id;
$data['selected_kit_item'] = ($item_kit_id > 0 && isset($info->kit_item_id)) ? $info->item_name : '';
$this->load->view("item_kits/form", $data);
}
@@ -108,36 +121,54 @@ class Item_kits extends Secure_Controller
{
$item_kit_data = array(
'name' => $this->input->post('name'),
'item_id' => $this->input->post('kit_item_id'),
'kit_discount_percent' => $this->input->post('kit_discount_percent'),
'price_option' => $this->input->post('price_option'),
'print_option' => $this->input->post('print_option'),
'description' => $this->input->post('description')
);
if($this->Item_kit->save($item_kit_data, $item_kit_id))
{
$success = TRUE;
$new_item = FALSE;
//New item kit
if ($item_kit_id == -1)
{
$item_kit_id = $item_kit_data['item_kit_id'];
$new_item = TRUE;
}
if($this->input->post('item_kit_item') != NULL)
if($this->input->post('item_kit_qty') != NULL)
{
$item_kit_items = array();
foreach($this->input->post('item_kit_item') as $item_id => $quantity)
foreach($this->input->post('item_kit_qty') as $item_id => $quantity)
{
$seq = $this->input->post('item_kit_seq[' . $item_id . ']');
$item_kit_items[] = array(
'item_id' => $item_id,
'quantity' => $quantity
'quantity' => $quantity,
'kit_sequence' => $seq
);
}
$success = $this->Item_kit_items->save($item_kit_items, $item_kit_id);
}
$success = $this->Item_kit_items->save($item_kit_items, $item_kit_id);
$item_kit_data = $this->xss_clean($item_kit_data);
echo json_encode(array('success' => $success,
'message' => $this->lang->line('item_kits_successful_adding').' '.$item_kit_data['name'], 'id' => $item_kit_id));
if($new_item)
{
echo json_encode(array('success' => $success,
'message' => $this->lang->line('item_kits_successful_adding').' '.$item_kit_data['name'], 'id' => $item_kit_id));
}
else
{
echo json_encode(array('success' => $success,
'message' => $this->lang->line('item_kits_successful_updating').' '.$item_kit_data['name'], 'id' => $item_kit_id));
}
}
else//failure
{
@@ -182,7 +213,7 @@ class Item_kits extends Secure_Controller
}
$data['items'] = $result;
$barcode_config = $this->barcode_lib->get_barcode_config();
$barcode_config = $this->barcode_lib->get_barcode_config();
// in case the selected barcode type is not Code39 or Code128 we set by default Code128
// the rationale for this is that EAN codes cannot have strings as seed, so 'KIT ' is not allowed
if($barcode_config['barcode_type'] != 'Code39' && $barcode_config['barcode_type'] != 'Code128')
@@ -195,4 +226,4 @@ class Item_kits extends Secure_Controller
$this->load->view("barcodes/barcode_sheet", $data);
}
}
?>
?>

View File

@@ -57,27 +57,36 @@ class Items extends Secure_Controller
$filters = array_merge($filters, $filledup);
$items = $this->Item->search($search, $filters, $limit, $offset, $sort, $order);
$total_rows = $this->Item->get_found_rows($search, $filters);
$data_rows = array();
foreach($items->result() as $item)
{
$data_rows[] = $this->xss_clean(get_item_data_row($item, $this));
if($item->pic_filename!='')
{
$this->_update_pic_filename($item);
}
}
echo json_encode(array('total' => $total_rows, 'rows' => $data_rows));
}
public function pic_thumb($pic_id)
public function pic_thumb($pic_filename)
{
$this->load->helper('file');
$this->load->library('image_lib');
$base_path = './uploads/item_pics/' . $pic_id;
$images = glob($base_path . '.*');
// in this context, $pic_filename always has .ext
$ext = pathinfo($pic_filename, PATHINFO_EXTENSION);
$images = glob('./uploads/item_pics/' . $pic_filename);
// make sure we pick only the file name, without extension
$base_path = './uploads/item_pics/' . pathinfo($pic_filename, PATHINFO_FILENAME);
if(sizeof($images) > 0)
{
$image_path = $images[0];
$ext = pathinfo($image_path, PATHINFO_EXTENSION);
$thumb_path = $base_path . $this->image_lib->thumb_marker . '.' . $ext;
if(sizeof($images) < 2)
{
@@ -87,8 +96,8 @@ class Items extends Secure_Controller
$config['create_thumb'] = TRUE;
$config['width'] = 52;
$config['height'] = 32;
$this->image_lib->initialize($config);
$image = $this->image_lib->resize();
$this->image_lib->initialize($config);
$image = $this->image_lib->resize();
$thumb_path = $this->image_lib->full_dst_path;
}
$this->output->set_content_type(get_mime_by_extension($thumb_path));
@@ -115,6 +124,14 @@ class Items extends Secure_Controller
echo json_encode($suggestions);
}
public function suggest_kits()
{
$suggestions = $this->xss_clean($this->Item->get_kit_search_suggestions($this->input->post_get('term'),
array('search_custom' => FALSE, 'is_deleted' => FALSE), TRUE));
echo json_encode($suggestions);
}
/*
Gives search suggestions based on what is being searched for
*/
@@ -163,6 +180,7 @@ class Items extends Secure_Controller
$data['item_tax_info'] = $this->xss_clean($this->Item_taxes->get_info($item_id));
$data['default_tax_1_rate'] = '';
$data['default_tax_2_rate'] = '';
$data['item_kits_enabled'] = $this->Employee->has_grant('item_kits', $this->Employee->get_logged_in_employee_info()->person_id);
$item_info = $this->Item->get_info($item_id);
foreach(get_object_vars($item_info) as $property => $value)
@@ -174,9 +192,12 @@ class Items extends Secure_Controller
{
$data['default_tax_1_rate'] = $this->config->item('default_tax_1_rate');
$data['default_tax_2_rate'] = $this->config->item('default_tax_2_rate');
$item_info->receiving_quantity = 0;
$item_info->reorder_level = 0;
$item_info->receiving_quantity = 1;
$item_info->reorder_level = 1;
$item_info->item_type = ITEM; // standard
$item_info->stock_type = HAS_STOCK;
$item_info->tax_category_id = 1; // Standard
}
$data['item_info'] = $item_info;
@@ -189,27 +210,52 @@ class Items extends Secure_Controller
$data['suppliers'] = $suppliers;
$data['selected_supplier'] = $item_info->supplier_id;
$data['logo_exists'] = $item_info->pic_id != '';
if (!empty($item_info->pic_id))
$customer_sales_tax_support = $this->config->item('customer_sales_tax_support');
if($customer_sales_tax_support == '1')
{
$images = glob('./uploads/item_pics/' . $item_info->pic_id . '.*');
$data['image_path'] = sizeof($images) > 0 ? base_url($images[0]) : '';
$data['customer_sales_tax_enabled'] = TRUE;
$tax_categories = array();
foreach($this->Tax->get_all_tax_categories()->result_array() as $row)
{
$tax_categories[$this->xss_clean($row['tax_category_id'])] = $this->xss_clean($row['tax_category']);
}
$data['tax_categories'] = $tax_categories;
$data['selected_tax_category'] = $item_info->tax_category_id;
}
else
{
$data['customer_sales_tax_enabled'] = FALSE;
$data['tax_categories'] = array();
$data['selected_tax_category'] = '';
}
$data['logo_exists'] = $item_info->pic_filename != '';
$ext = pathinfo($item_info->pic_filename, PATHINFO_EXTENSION);
if($ext == '')
{
// if file extension is not found guess it (legacy)
$images = glob('./uploads/item_pics/' . $item_info->pic_filename . '.*');
}
else
{
// else just pick that file
$images = glob('./uploads/item_pics/' . $item_info->pic_filename);
}
$data['image_path'] = sizeof($images) > 0 ? base_url($images[0]) : '';
$stock_locations = $this->Stock_location->get_undeleted_all()->result_array();
foreach($stock_locations as $location)
{
foreach($stock_locations as $location)
{
$location = $this->xss_clean($location);
$quantity = $this->xss_clean($this->Item_quantity->get_item_quantity($item_id, $location['location_id'])->quantity);
$quantity = ($item_id == -1) ? 0 : $quantity;
$location_array[$location['location_id']] = array('location_name' => $location['location_name'], 'quantity' => $quantity);
$data['stock_locations'] = $location_array;
}
}
$this->load->view('items/form', $data);
}
public function inventory($item_id = -1)
{
$item_info = $this->Item->get_info($item_id);
@@ -219,16 +265,16 @@ class Items extends Secure_Controller
}
$data['item_info'] = $item_info;
$data['stock_locations'] = array();
$stock_locations = $this->Stock_location->get_undeleted_all()->result_array();
foreach($stock_locations as $location)
{
$data['stock_locations'] = array();
$stock_locations = $this->Stock_location->get_undeleted_all()->result_array();
foreach($stock_locations as $location)
{
$location = $this->xss_clean($location);
$quantity = $this->xss_clean($this->Item_quantity->get_item_quantity($item_id, $location['location_id'])->quantity);
$data['stock_locations'][$location['location_id']] = $location['location_name'];
$data['item_quantities'][$location['location_id']] = $quantity;
}
$data['stock_locations'][$location['location_id']] = $location['location_name'];
$data['item_quantities'][$location['location_id']] = $quantity;
}
$this->load->view('items/form_inventory', $data);
}
@@ -242,16 +288,16 @@ class Items extends Secure_Controller
}
$data['item_info'] = $item_info;
$data['stock_locations'] = array();
$stock_locations = $this->Stock_location->get_undeleted_all()->result_array();
foreach($stock_locations as $location)
{
$data['stock_locations'] = array();
$stock_locations = $this->Stock_location->get_undeleted_all()->result_array();
foreach($stock_locations as $location)
{
$location = $this->xss_clean($location);
$quantity = $this->xss_clean($this->Item_quantity->get_item_quantity($item_id, $location['location_id'])->quantity);
$data['stock_locations'][$location['location_id']] = $location['location_name'];
$data['item_quantities'][$location['location_id']] = $quantity;
}
$data['stock_locations'][$location['location_id']] = $location['location_name'];
$data['item_quantities'][$location['location_id']] = $quantity;
}
$this->load->view('items/form_count_details', $data);
}
@@ -271,7 +317,7 @@ class Items extends Secure_Controller
{
$item = $this->xss_clean($item);
// update the UPC/EAN/ISBN field if empty / NULL with the newly generated barcode
// update the barcode field if empty / NULL with the newly generated barcode
if(empty($item['item_number']) && $this->config->item('barcode_generate_if_empty'))
{
// get the newly generated barcode
@@ -280,7 +326,7 @@ class Items extends Secure_Controller
$save_item = array('item_number' => $item['item_number']);
// update the item in the database in order to save the UPC/EAN/ISBN field
// update the item in the database in order to save the barcode field
$this->Item->save($save_item, $item['item_id']);
}
}
@@ -323,6 +369,8 @@ class Items extends Secure_Controller
'name' => $this->input->post('name'),
'description' => $this->input->post('description'),
'category' => $this->input->post('category'),
'item_type' => $this->input->post('item_type'),
'stock_type' => $this->input->post('stock_type'),
'supplier_id' => $this->input->post('supplier_id') == '' ? NULL : $this->input->post('supplier_id'),
'item_number' => $this->input->post('item_number') == '' ? NULL : $this->input->post('item_number'),
'cost_price' => parse_decimals($this->input->post('cost_price')),
@@ -343,13 +391,23 @@ class Items extends Secure_Controller
'custom9' => $this->input->post('custom9') == NULL ? '' : $this->input->post('custom9'),
'custom10' => $this->input->post('custom10') == NULL ? '' : $this->input->post('custom10')
);
$x = $this->input->post('tax_category_id');
if(!isset($x))
{
$item_data['tax_category_id'] = '';
}
else
{
$item_data['tax_category_id'] = $this->input->post('tax_category_id');
}
if(!empty($upload_data['orig_name']))
{
// XSS file image sanity check
if($this->xss_clean($upload_data['raw_name'], TRUE) === TRUE)
{
$item_data['pic_id'] = $upload_data['raw_name'];
$item_data['pic_filename'] = $upload_data['raw_name'];
}
}
@@ -380,45 +438,45 @@ class Items extends Secure_Controller
}
}
$success &= $this->Item_taxes->save($items_taxes_data, $item_id);
//Save item quantity
$stock_locations = $this->Stock_location->get_undeleted_all()->result_array();
foreach($stock_locations as $location)
{
$updated_quantity = parse_decimals($this->input->post('quantity_' . $location['location_id']));
$location_detail = array('item_id' => $item_id,
'location_id' => $location['location_id'],
'quantity' => $updated_quantity);
$item_quantity = $this->Item_quantity->get_item_quantity($item_id, $location['location_id']);
if($item_quantity->quantity != $updated_quantity || $new_item)
{
$success &= $this->Item_quantity->save($location_detail, $item_id, $location['location_id']);
$inv_data = array(
'trans_date' => date('Y-m-d H:i:s'),
'trans_items' => $item_id,
'trans_user' => $employee_id,
'trans_location' => $location['location_id'],
'trans_comment' => $this->lang->line('items_manually_editing_of_quantity'),
'trans_inventory' => $updated_quantity - $item_quantity->quantity
);
$success &= $this->Inventory->insert($inv_data);
}
}
//Save item quantity
$stock_locations = $this->Stock_location->get_undeleted_all()->result_array();
foreach($stock_locations as $location)
{
$updated_quantity = parse_decimals($this->input->post('quantity_' . $location['location_id']));
$location_detail = array('item_id' => $item_id,
'location_id' => $location['location_id'],
'quantity' => $updated_quantity);
$item_quantity = $this->Item_quantity->get_item_quantity($item_id, $location['location_id']);
if($item_quantity->quantity != $updated_quantity || $new_item)
{
$success &= $this->Item_quantity->save($location_detail, $item_id, $location['location_id']);
$inv_data = array(
'trans_date' => date('Y-m-d H:i:s'),
'trans_items' => $item_id,
'trans_user' => $employee_id,
'trans_location' => $location['location_id'],
'trans_comment' => $this->lang->line('items_manually_editing_of_quantity'),
'trans_inventory' => $updated_quantity - $item_quantity->quantity
);
$success &= $this->Inventory->insert($inv_data);
}
}
if($success && $upload_success)
{
$message = $this->xss_clean($this->lang->line('items_successful_' . ($new_item ? 'adding' : 'updating')) . ' ' . $item_data['name']);
{
$message = $this->xss_clean($this->lang->line('items_successful_' . ($new_item ? 'adding' : 'updating')) . ' ' . $item_data['name']);
echo json_encode(array('success' => TRUE, 'message' => $message, 'id' => $item_id));
}
else
{
$message = $this->xss_clean($upload_success ? $this->lang->line('items_error_adding_updating') . ' ' . $item_data['name'] : strip_tags($this->upload->display_errors()));
echo json_encode(array('success' => TRUE, 'message' => $message, 'id' => $item_id));
}
else
{
$message = $this->xss_clean($upload_success ? $this->lang->line('items_error_adding_updating') . ' ' . $item_data['name'] : strip_tags($this->upload->display_errors()));
echo json_encode(array('success' => FALSE, 'message' => $message, 'id' => $item_id));
}
echo json_encode(array('success' => FALSE, 'message' => $message, 'id' => $item_id));
}
}
else//failure
{
@@ -433,30 +491,43 @@ class Items extends Secure_Controller
$exists = $this->Item->item_number_exists($this->input->post('item_number'), $this->input->post('item_id'));
echo !$exists ? 'true' : 'false';
}
/*
If adding a new item check to see if an item kit with the same name as the item already exists.
*/
public function check_kit_exists()
{
if ($this->input->post('item_number') === -1)
{
$exists = $this->Item_kit->item_kit_exists_for_name($this->input->post('name'));
}
else
{
$exists = FALSE;
}
echo !$exists ? 'true' : 'false';
}
private function _handle_image_upload()
{
$this->load->helper('directory');
$map = directory_map('./uploads/item_pics/', 1);
/* Let files be uploaded with their original name */
// load upload library
$config = array('upload_path' => './uploads/item_pics/',
'allowed_types' => 'gif|jpg|png',
'max_size' => '100',
'max_width' => '640',
'max_height' => '480',
'file_name' => sizeof($map) + 1
'max_height' => '480'
);
$this->load->library('upload', $config);
$this->upload->do_upload('item_image');
$this->upload->do_upload('item_image');
return strlen($this->upload->display_errors()) == 0 || !strcmp($this->upload->display_errors(), '<p>'.$this->lang->line('upload_no_file_selected').'</p>');
}
public function remove_logo($item_id)
{
$item_data = array('pic_id' => NULL);
$item_data = array('pic_filename' => NULL);
$result = $this->Item->save($item_data, $item_id);
echo json_encode(array('success' => $result));
@@ -466,7 +537,7 @@ class Items extends Secure_Controller
{
$employee_id = $this->Employee->get_logged_in_employee_info()->person_id;
$cur_item_info = $this->Item->get_info($item_id);
$location_id = $this->input->post('stock_location');
$location_id = $this->input->post('stock_location');
$inv_data = array(
'trans_date' => date('Y-m-d H:i:s'),
'trans_items' => $item_id,
@@ -579,133 +650,146 @@ class Items extends Secure_Controller
$this->load->view('items/form_excel_import', NULL);
}
public function do_excel_import()
{
if($_FILES['file_path']['error'] != UPLOAD_ERR_OK)
{
echo json_encode(array('success' => FALSE, 'message' => $this->lang->line('items_excel_import_failed')));
}
else
public function do_excel_import()
{
if($_FILES['file_path']['error'] != UPLOAD_ERR_OK)
{
if(($handle = fopen($_FILES['file_path']['tmp_name'], 'r')) !== FALSE)
{
// Skip the first row as it's the table description
fgetcsv($handle);
$i = 1;
echo json_encode(array('success' => FALSE, 'message' => $this->lang->line('items_excel_import_failed')));
}
else
{
if(($handle = fopen($_FILES['file_path']['tmp_name'], 'r')) !== FALSE)
{
// Skip the first row as it's the table description
fgetcsv($handle);
$i = 1;
$failCodes = array();
while(($data = fgetcsv($handle)) !== FALSE)
{
while(($data = fgetcsv($handle)) !== FALSE)
{
// XSS file data sanity check
$data = $this->xss_clean($data);
/* haven't touched this so old templates will work, or so I guess... */
if(sizeof($data) >= 23)
{
$item_data = array(
'name' => $data[1],
'description' => $data[11],
'category' => $data[2],
'cost_price' => $data[4],
'unit_price' => $data[5],
'reorder_level' => $data[10],
'supplier_id' => $this->Supplier->exists($data[3]) ? $data[3] : NULL,
'allow_alt_description' => $data[12] != '' ? '1' : '0',
'is_serialized' => $data[13] != '' ? '1' : '0',
'custom1' => $data[14],
'custom2' => $data[15],
'custom3' => $data[16],
'custom4' => $data[17],
'custom5' => $data[18],
'custom6' => $data[19],
'custom7' => $data[20],
'custom8' => $data[21],
'custom9' => $data[22],
'custom10' => $data[23]
);
$item_number = $data[0];
$invalidated = FALSE;
if($item_number != '')
{
$item_data['item_number'] = $item_number;
$invalidated = $this->Item->item_number_exists($item_number);
}
$item_data = array(
'name' => $data[1],
'description' => $data[11],
'category' => $data[2],
'cost_price' => $data[4],
'unit_price' => $data[5],
'reorder_level' => $data[10],
'supplier_id' => $this->Supplier->exists($data[3]) ? $data[3] : NULL,
'allow_alt_description' => $data[12] != '' ? '1' : '0',
'is_serialized' => $data[13] != '' ? '1' : '0',
'custom1' => $data[14],
'custom2' => $data[15],
'custom3' => $data[16],
'custom4' => $data[17],
'custom5' => $data[18],
'custom6' => $data[19],
'custom7' => $data[20],
'custom8' => $data[21],
'custom9' => $data[22],
'custom10' => $data[23]
);
/* we could do something like this, however, the effectiveness of
this is rather limited, since for now, you have to upload files manually
into that directory, so you really can do whatever you want, this probably
needs further discussion */
$pic_file = $data[24];
/*if(strcmp('.htaccess', $pic_file)==0) {
$pic_file='';
}*/
$item_data['pic_filename'] = $pic_file;
$item_number = $data[0];
$invalidated = FALSE;
if($item_number != '')
{
$item_data['item_number'] = $item_number;
$invalidated = $this->Item->item_number_exists($item_number);
}
}
else
{
$invalidated = TRUE;
}
if(!$invalidated && $this->Item->save($item_data))
{
$items_taxes_data = NULL;
//tax 1
if(is_numeric($data[7]) && $data[6] != '')
{
$items_taxes_data[] = array('name' => $data[6], 'percent' => $data[7] );
}
if(!$invalidated && $this->Item->save($item_data))
{
$items_taxes_data = NULL;
//tax 1
if(is_numeric($data[7]) && $data[6] != '')
{
$items_taxes_data[] = array('name' => $data[6], 'percent' => $data[7] );
}
//tax 2
if(is_numeric($data[9]) && $data[8] != '')
{
$items_taxes_data[] = array('name' => $data[8], 'percent' => $data[9] );
}
//tax 2
if(is_numeric($data[9]) && $data[8] != '')
{
$items_taxes_data[] = array('name' => $data[8], 'percent' => $data[9] );
}
// save tax values
if(count($items_taxes_data) > 0)
{
$this->Item_taxes->save($items_taxes_data, $item_data['item_id']);
}
// save tax values
if(count($items_taxes_data) > 0)
{
$this->Item_taxes->save($items_taxes_data, $item_data['item_id']);
}
// quantities & inventory Info
$employee_id = $this->Employee->get_logged_in_employee_info()->person_id;
$emp_info = $this->Employee->get_info($employee_id);
$comment ='Qty CSV Imported';
// quantities & inventory Info
$employee_id = $this->Employee->get_logged_in_employee_info()->person_id;
$emp_info = $this->Employee->get_info($employee_id);
$comment ='Qty CSV Imported';
$cols = count($data);
$cols = count($data);
// array to store information if location got a quantity
$allowed_locations = $this->Stock_location->get_allowed_locations();
for ($col = 24; $col < $cols; $col = $col + 2)
{
$location_id = $data[$col];
if(array_key_exists($location_id, $allowed_locations))
{
$item_quantity_data = array(
'item_id' => $item_data['item_id'],
'location_id' => $location_id,
'quantity' => $data[$col + 1],
);
$this->Item_quantity->save($item_quantity_data, $item_data['item_id'], $location_id);
// array to store information if location got a quantity
$allowed_locations = $this->Stock_location->get_allowed_locations();
for ($col = 25; $col < $cols; $col = $col + 2)
{
$location_id = $data[$col];
if(array_key_exists($location_id, $allowed_locations))
{
$item_quantity_data = array(
'item_id' => $item_data['item_id'],
'location_id' => $location_id,
'quantity' => $data[$col + 1],
);
$this->Item_quantity->save($item_quantity_data, $item_data['item_id'], $location_id);
$excel_data = array(
'trans_items' => $item_data['item_id'],
'trans_user' => $employee_id,
'trans_comment' => $comment,
'trans_location' => $data[$col],
'trans_inventory' => $data[$col + 1]
);
$excel_data = array(
'trans_items' => $item_data['item_id'],
'trans_user' => $employee_id,
'trans_comment' => $comment,
'trans_location' => $data[$col],
'trans_inventory' => $data[$col + 1]
);
$this->Inventory->insert($excel_data);
unset($allowed_locations[$location_id]);
}
}
$this->Inventory->insert($excel_data);
unset($allowed_locations[$location_id]);
}
}
/*
* now iterate through the array and check for which location_id no entry into item_quantities was made yet
* those get an entry with quantity as 0.
* unfortunately a bit duplicate code from above...
*/
foreach($allowed_locations as $location_id => $location_name)
{
$item_quantity_data = array(
'item_id' => $item_data['item_id'],
'location_id' => $location_id,
'quantity' => 0,
);
$this->Item_quantity->save($item_quantity_data, $item_data['item_id'], $data[$col]);
/*
* now iterate through the array and check for which location_id no entry into item_quantities was made yet
* those get an entry with quantity as 0.
* unfortunately a bit duplicate code from above...
*/
foreach($allowed_locations as $location_id => $location_name)
{
$item_quantity_data = array(
'item_id' => $item_data['item_id'],
'location_id' => $location_id,
'quantity' => 0,
);
$this->Item_quantity->save($item_quantity_data, $item_data['item_id'], $data[$col]);
$excel_data = array(
$excel_data = array(
'trans_items' => $item_data['item_id'],
'trans_user' => $employee_id,
'trans_comment' => $comment,
@@ -713,16 +797,16 @@ class Items extends Secure_Controller
'trans_inventory' => 0
);
$this->Inventory->insert($excel_data);
}
}
else //insert or update item failure
{
$failCodes[] = $i;
}
$this->Inventory->insert($excel_data);
}
}
else //insert or update item failure
{
$failCodes[] = $i;
}
++$i;
}
}
if(count($failCodes) > 0)
{
@@ -737,9 +821,35 @@ class Items extends Secure_Controller
}
else
{
echo json_encode(array('success' => FALSE, 'message' => $this->lang->line('items_excel_import_nodata_wrongformat')));
echo json_encode(array('success' => FALSE, 'message' => $this->lang->line('items_excel_import_nodata_wrongformat')));
}
}
}
}
/**
* Guess whether file extension is not in the table field,
* if it isn't, then it's an old-format (formerly pic_id) field,
* so we guess the right filename and update the table
* @param $item the item to update
*/
private function _update_pic_filename($item)
{
$filename = pathinfo($item->pic_filename, PATHINFO_FILENAME);
if($filename=='')
{
// if the field is empty there's nothing to check
return;
}
$ext = pathinfo($item->pic_filename, PATHINFO_EXTENSION);
if ($ext == '') {
$images = glob('./uploads/item_pics/' . $item->pic_filename . '.*');
if (sizeof($images) > 0) {
$new_pic_filename = pathinfo($images[0], PATHINFO_BASENAME);
$item_data = array('pic_filename' => $new_pic_filename);
$this->Item->save($item_data, $item->item_id);
}
}
}
}
?>

View File

@@ -1,12 +1,7 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Login extends CI_Controller
class Login extends CI_Controller
{
public function __construct()
{
parent::__construct();
}
public function index()
{
if($this->Employee->is_logged_in())
@@ -15,9 +10,15 @@ class Login extends CI_Controller
}
else
{
$this->form_validation->set_rules('username', 'lang:login_undername', 'callback_login_check');
$this->form_validation->set_error_delimiters('<div class="error">', '</div>');
$this->form_validation->set_rules('username', 'lang:login_username', 'required|callback_login_check');
if($this->config->item('gcaptcha_enable'))
{
$this->form_validation->set_rules('g-recaptcha-response', 'lang:login_gcaptcha', 'required|callback_gcaptcha_check');
}
if($this->form_validation->run() == FALSE)
{
$this->load->view('login');
@@ -27,19 +28,21 @@ class Login extends CI_Controller
if($this->config->item('statistics'))
{
$this->load->library('tracking_lib');
$this->tracking_lib->track_page('login', 'login');
$this->tracking_lib->track_event('Stats', 'Theme', $this->config->item('theme'));
$this->tracking_lib->track_event('Stats', 'Language', $this->config->item('language'));
$this->tracking_lib->track_event('Stats', 'Timezone', $this->config->item('timezone'));
$this->tracking_lib->track_event('Stats', 'Currency', $this->config->item('currency_symbol'));
$this->tracking_lib->track_event('Stats', 'Customer Sales Tax Support', $this->config->item('customer_sales_tax_support'));
$this->tracking_lib->track_event('Stats', 'Tax Included', $this->config->item('tax_included'));
$this->tracking_lib->track_event('Stats', 'Thousands Separator', $this->config->item('thousands_separator'));
$this->tracking_lib->track_event('Stats', 'Currency Decimals', $this->config->item('currency_decimals'));
$this->tracking_lib->track_event('Stats', 'Tax Decimals', $this->config->item('tax_decimals'));
$this->tracking_lib->track_event('Stats', 'Quantity Decimals', $this->config->item('quantity_decimals'));
$this->tracking_lib->track_event('Stats', 'Invoice Enable', $this->config->item('invoice_enable'));
$this->tracking_lib->track_event('Stats', 'Date or Time Format', $this->config->item('date_or_time_format'));
}
redirect('home');
@@ -51,9 +54,9 @@ class Login extends CI_Controller
{
$password = $this->input->post('password');
if($this->_security_check($username, $password))
if(!$this->_installation_check())
{
$this->form_validation->set_message('login_check', 'Security check failure');
$this->form_validation->set_message('login_check', $this->lang->line('login_invalid_installation'));
return FALSE;
}
@@ -65,12 +68,57 @@ class Login extends CI_Controller
return FALSE;
}
return TRUE;
return TRUE;
}
private function _security_check($username, $password)
public function gcaptcha_check($recaptchaResponse)
{
return preg_match('~\b(Copyright|(c)|<7C>|All rights reserved|Developed|Crafted|Implemented|Made|Powered|Code|Design|unblockUI|blockUI|blockOverlay|hide|opacity)\b~i', file_get_contents(APPPATH . 'views/partial/footer.php'));
$url = 'https://www.google.com/recaptcha/api/siteverify?secret=' . $this->config->item('gcaptcha_secret_key') . '&response=' . $recaptchaResponse . '&remoteip=' . $this->input->ip_address();
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);
curl_close($ch);
$status = json_decode($result, TRUE);
if(empty($status['success']))
{
$this->form_validation->set_message('gcaptcha_check', $this->lang->line('login_invalid_gcaptcha'));
return FALSE;
}
return TRUE;
}
private function _installation_check()
{
// get PHP extensions and check that the required ones are installed
$extensions = implode(', ', get_loaded_extensions());
$keys = array('bcmath', 'intl', 'gd', 'sockets', 'mcrypt');
$pattern = '/';
foreach($keys as $key)
{
$pattern .= '(?=.*\b' . preg_quote($key, '/') . '\b)';
}
$pattern .= '/i';
$result = preg_match($pattern, $extensions);
if(!$result)
{
error_log('Check your php.ini');
error_log('PHP installed extensions: ' . $extensions);
error_log('PHP required extensions: ' . implode(', ', $keys));
}
else
{
$result = preg_match('~\b(Copyright|(c)|©|All rights reserved|Developed|Crafted|Implemented|Made|Powered|Code|Design|unblockUI|blockUI|blockOverlay|hide|opacity)\b~i', file_get_contents(APPPATH . 'views/partial/footer.php')) != TRUE;
}
return $result;
}
}
?>

View File

@@ -0,0 +1,31 @@
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
require_once("Secure_Controller.php");
class Migrate extends Secure_Controller
{
public function __construct()
{
parent::__construct('migrate');
$this->load->library('migration');
}
public function index()
{
$this->load->view('migrate/manage');
}
public function perform_migration()
{
if( ! $this->migration->latest())
{
echo json_encode(array('success' => FALSE, 'message' => $this->lang->line('migrate_failed - ' . $this->migration->error_string())));
}
else
{
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('migrate_success')));
}
}
}
?>

View File

@@ -2,11 +2,6 @@
class No_Access extends CI_Controller
{
public function __construct()
{
parent::__construct();
}
public function index($module_id = '', $permission_id = '')
{
$data['module_name'] = $this->Module->get_module_name($module_id);
@@ -17,4 +12,4 @@ class No_Access extends CI_Controller
$this->load->view('no_access', $data);
}
}
?>
?>

View File

@@ -6,9 +6,16 @@ abstract class Persons extends Secure_Controller
{
public function __construct($module_id = NULL)
{
parent::__construct($module_id);
parent::__construct($module_id);
}
public function index()
{
$data['table_headers'] = $this->xss_clean(get_people_manage_table_headers());
$this->load->view('people/manage', $data);
}
/*
Gives search suggestions based on what is being searched for
*/
@@ -18,7 +25,7 @@ abstract class Persons extends Secure_Controller
echo json_encode($suggestions);
}
/*
Gets one row for a person manage table. This is called using AJAX to update one row.
*/
@@ -28,5 +35,21 @@ abstract class Persons extends Secure_Controller
echo json_encode($data_row);
}
/*
Capitalize segments of a name, and put the rest into lower case.
You can pass the characters you want to use as delimiters as exceptions.
The function supports UTF-8 string.
Example:
i.e. <?php echo nameize("john o'grady-smith"); ?>
returns John O'Grady-Smith
*/
protected function nameize($string)
{
return str_name_case($string);
}
}
?>
?>

View File

@@ -27,6 +27,16 @@ class Receivings extends Secure_Controller
echo json_encode($suggestions);
}
public function stock_item_search()
{
$suggestions = $this->Item->get_stock_search_suggestions($this->input->get('term'), array('search_custom' => FALSE, 'is_deleted' => FALSE), TRUE);
$suggestions = array_merge($suggestions, $this->Item_kit->get_search_suggestions($this->input->get('term')));
$suggestions = $this->xss_clean($suggestions);
echo json_encode($suggestions);
}
public function select_supplier()
{
$supplier_id = $this->input->post('supplier');
@@ -80,7 +90,8 @@ class Receivings extends Secure_Controller
$mode = $this->receiving_lib->get_mode();
$item_id_or_number_or_item_kit_or_receipt = $this->input->post('item');
$quantity = ($mode == 'receive' || $mode == 'requisition') ? 1 : -1;
$this->barcode_lib->parse_barcode_fields($quantity, $item_id_or_number_or_item_kit_or_receipt);
$quantity = ($mode == 'receive' || $mode == 'requisition') ? $quantity : -$quantity;
$item_location = $this->receiving_lib->get_stock_source();
if($mode == 'return' && $this->Receiving->is_valid_receipt($item_id_or_number_or_item_kit_or_receipt))

View File

@@ -55,7 +55,7 @@ class Reports extends Secure_Controller
'sale_date' => $row['sale_date'],
'quantity' => to_quantity_decimals($row['quantity_purchased']),
'subtotal' => to_currency($row['subtotal']),
'tax' => to_currency($row['tax']),
'tax' => to_currency_tax($row['tax']),
'total' => to_currency($row['total']),
'cost' => to_currency($row['cost']),
'profit' => to_currency($row['profit'])
@@ -64,7 +64,7 @@ class Reports extends Secure_Controller
$data = array(
'title' => $this->lang->line('reports_sales_summary_report'),
'subtitle' => date($this->config->item('dateformat'), strtotime($start_date)) . '-' . date($this->config->item('dateformat'), strtotime($end_date)),
'subtitle' => $this->_get_subtitle_report(array('start_date' => $start_date, 'end_date' => $end_date)),
'headers' => $this->xss_clean($model->getDataColumns()),
'data' => $tabular_data,
'summary_data' => $summary
@@ -91,7 +91,7 @@ class Reports extends Secure_Controller
'category' => $row['category'],
'quantity' => to_quantity_decimals($row['quantity_purchased']),
'subtotal' => to_currency($row['subtotal']),
'tax' => to_currency($row['tax']),
'tax' => to_currency_tax($row['tax']),
'total' => to_currency($row['total']),
'cost' => to_currency($row['cost']),
'profit' => to_currency($row['profit'])
@@ -100,7 +100,7 @@ class Reports extends Secure_Controller
$data = array(
'title' => $this->lang->line('reports_categories_summary_report'),
'subtitle' => date($this->config->item('dateformat'), strtotime($start_date)) . '-' . date($this->config->item('dateformat'), strtotime($end_date)),
'subtitle' => $this->_get_subtitle_report(array('start_date' => $start_date, 'end_date' => $end_date)),
'headers' => $this->xss_clean($model->getDataColumns()),
'data' => $tabular_data,
'summary_data' => $summary
@@ -127,7 +127,7 @@ class Reports extends Secure_Controller
'customer_name' => $row['customer'],
'quantity' => to_quantity_decimals($row['quantity_purchased']),
'subtotal' => to_currency($row['subtotal']),
'tax' => to_currency($row['tax']),
'tax' => to_currency_tax($row['tax']),
'total' => to_currency($row['total']),
'cost' => to_currency($row['cost']),
'profit' => to_currency($row['profit'])
@@ -136,7 +136,7 @@ class Reports extends Secure_Controller
$data = array(
'title' => $this->lang->line('reports_customers_summary_report'),
'subtitle' => date($this->config->item('dateformat'), strtotime($start_date)) . '-' . date($this->config->item('dateformat'), strtotime($end_date)),
'subtitle' => $this->_get_subtitle_report(array('start_date' => $start_date, 'end_date' => $end_date)),
'headers' => $this->xss_clean($model->getDataColumns()),
'data' => $tabular_data,
'summary_data' => $summary
@@ -163,7 +163,7 @@ class Reports extends Secure_Controller
'supplier_name' => $row['supplier'],
'quantity' => to_quantity_decimals($row['quantity_purchased']),
'subtotal' => to_currency($row['subtotal']),
'tax' => to_currency($row['tax']),
'tax' => to_currency_tax($row['tax']),
'total' => to_currency($row['total']),
'cost' => to_currency($row['cost']),
'profit' => to_currency($row['profit'])
@@ -172,7 +172,7 @@ class Reports extends Secure_Controller
$data = array(
'title' => $this->lang->line('reports_suppliers_summary_report'),
'subtitle' => date($this->config->item('dateformat'), strtotime($start_date)) . '-' . date($this->config->item('dateformat'), strtotime($end_date)),
'subtitle' => $this->_get_subtitle_report(array('start_date' => $start_date, 'end_date' => $end_date)),
'headers' => $this->xss_clean($model->getDataColumns()),
'data' => $tabular_data,
'summary_data' => $summary
@@ -199,7 +199,7 @@ class Reports extends Secure_Controller
'item_name' => $row['name'],
'quantity' => to_quantity_decimals($row['quantity_purchased']),
'subtotal' => to_currency($row['subtotal']),
'tax' => to_currency($row['tax']),
'tax' => to_currency_tax($row['tax']),
'total' => to_currency($row['total']),
'cost' => to_currency($row['cost']),
'profit' => to_currency($row['profit'])
@@ -208,7 +208,7 @@ class Reports extends Secure_Controller
$data = array(
'title' => $this->lang->line('reports_items_summary_report'),
'subtitle' => date($this->config->item('dateformat'), strtotime($start_date)) . '-' . date($this->config->item('dateformat'), strtotime($end_date)),
'subtitle' => $this->_get_subtitle_report(array('start_date' => $start_date, 'end_date' => $end_date)),
'headers' => $this->xss_clean($model->getDataColumns()),
'data' => $tabular_data,
'summary_data' => $summary
@@ -235,7 +235,7 @@ class Reports extends Secure_Controller
'employee_name' => $row['employee'],
'quantity' => to_quantity_decimals($row['quantity_purchased']),
'subtotal' => to_currency($row['subtotal']),
'tax' => to_currency($row['tax']),
'tax' => to_currency_tax($row['tax']),
'total' => to_currency($row['total']),
'cost' => to_currency($row['cost']),
'profit' => to_currency($row['profit'])
@@ -244,7 +244,7 @@ class Reports extends Secure_Controller
$data = array(
'title' => $this->lang->line('reports_employees_summary_report'),
'subtitle' => date($this->config->item('dateformat'), strtotime($start_date)) . '-' . date($this->config->item('dateformat'), strtotime($end_date)),
'subtitle' => $this->_get_subtitle_report(array('start_date' => $start_date, 'end_date' => $end_date)),
'headers' => $this->xss_clean($model->getDataColumns()),
'data' => $tabular_data,
'summary_data' => $summary
@@ -271,14 +271,14 @@ class Reports extends Secure_Controller
'tax_percent' => $row['percent'],
'report_count' => $row['count'],
'subtotal' => to_currency($row['subtotal']),
'tax' => to_currency($row['tax']),
'tax' => to_currency_tax($row['tax']),
'total' => to_currency($row['total'])
));
}
$data = array(
'title' => $this->lang->line('reports_taxes_summary_report'),
'subtitle' => date($this->config->item('dateformat'), strtotime($start_date)) . '-' . date($this->config->item('dateformat'), strtotime($end_date)),
'subtitle' => $this->_get_subtitle_report(array('start_date' => $start_date, 'end_date' => $end_date)),
'headers' => $this->xss_clean($model->getDataColumns()),
'data' => $tabular_data,
'summary_data' => $summary
@@ -309,7 +309,7 @@ class Reports extends Secure_Controller
$data = array(
'title' => $this->lang->line('reports_discounts_summary_report'),
'subtitle' => date($this->config->item('dateformat'), strtotime($start_date)) . '-' . date($this->config->item('dateformat'), strtotime($end_date)),
'subtitle' => $this->_get_subtitle_report(array('start_date' => $start_date, 'end_date' => $end_date)),
'headers' => $this->xss_clean($model->getDataColumns()),
'data' => $tabular_data,
'summary_data' => $summary
@@ -341,7 +341,7 @@ class Reports extends Secure_Controller
$data = array(
'title' => $this->lang->line('reports_payments_summary_report'),
'subtitle' => date($this->config->item('dateformat'), strtotime($start_date)) . '-' . date($this->config->item('dateformat'), strtotime($end_date)),
'subtitle' => $this->_get_subtitle_report(array('start_date' => $start_date, 'end_date' => $end_date)),
'headers' => $this->xss_clean($model->getDataColumns()),
'data' => $tabular_data,
'summary_data' => $summary
@@ -369,21 +369,21 @@ class Reports extends Secure_Controller
$stock_locations = $data = $this->xss_clean($this->Stock_location->get_allowed_locations('sales'));
$stock_locations['all'] = $this->lang->line('reports_all');
$data['stock_locations'] = array_reverse($stock_locations, TRUE);
$data['mode'] = 'sale';
$data['mode'] = 'sale';
$this->load->view('reports/date_input', $data);
}
public function date_input_recv()
{
$data = array();
public function date_input_recv()
{
$data = array();
$stock_locations = $data = $this->xss_clean($this->Stock_location->get_allowed_locations('receivings'));
$stock_locations['all'] = $this->lang->line('reports_all');
$data['stock_locations'] = array_reverse($stock_locations, TRUE);
$data['mode'] = 'receiving';
$data['mode'] = 'receiving';
$this->load->view('reports/date_input', $data);
}
$this->load->view('reports/date_input', $data);
}
//Graphical summary sales report
public function graphical_summary_sales($start_date, $end_date, $sale_type, $location_id = 'all')
@@ -409,7 +409,7 @@ class Reports extends Secure_Controller
$data = array(
'title' => $this->lang->line('reports_sales_summary_report'),
'subtitle' => date($this->config->item('dateformat'), strtotime($start_date)) . '-' . date($this->config->item('dateformat'), strtotime($end_date)),
'subtitle' => $this->_get_subtitle_report(array('start_date' => $start_date, 'end_date' => $end_date)),
'chart_type' => 'reports/graphs/line',
'labels_1' => $labels,
'series_data_1' => $series,
@@ -445,7 +445,7 @@ class Reports extends Secure_Controller
$data = array(
'title' => $this->lang->line('reports_items_summary_report'),
'subtitle' => date($this->config->item('dateformat'), strtotime($start_date)) . '-' . date($this->config->item('dateformat'), strtotime($end_date)),
'subtitle' => $this->_get_subtitle_report(array('start_date' => $start_date, 'end_date' => $end_date)),
'chart_type' => 'reports/graphs/hbar',
'labels_1' => $labels,
'series_data_1' => $series,
@@ -481,7 +481,7 @@ class Reports extends Secure_Controller
$data = array(
'title' => $this->lang->line('reports_categories_summary_report'),
'subtitle' => date($this->config->item('dateformat'), strtotime($start_date)) . '-' . date($this->config->item('dateformat'), strtotime($end_date)),
'subtitle' => $this->_get_subtitle_report(array('start_date' => $start_date, 'end_date' => $end_date)),
'chart_type' => 'reports/graphs/pie',
'labels_1' => $labels,
'series_data_1' => $series,
@@ -515,7 +515,7 @@ class Reports extends Secure_Controller
$data = array(
'title' => $this->lang->line('reports_suppliers_summary_report'),
'subtitle' => date($this->config->item('dateformat'), strtotime($start_date)) . '-' . date($this->config->item('dateformat'), strtotime($end_date)),
'subtitle' => $this->_get_subtitle_report(array('start_date' => $start_date, 'end_date' => $end_date)),
'chart_type' => 'reports/graphs/pie',
'labels_1' => $labels,
'series_data_1' => $series,
@@ -549,7 +549,7 @@ class Reports extends Secure_Controller
$data = array(
'title' => $this->lang->line('reports_employees_summary_report'),
'subtitle' => date($this->config->item('dateformat'), strtotime($start_date)) . '-' . date($this->config->item('dateformat'), strtotime($end_date)),
'subtitle' => $this->_get_subtitle_report(array('start_date' => $start_date, 'end_date' => $end_date)),
'chart_type' => 'reports/graphs/pie',
'labels_1' => $labels,
'series_data_1' => $series,
@@ -583,7 +583,7 @@ class Reports extends Secure_Controller
$data = array(
'title' => $this->lang->line('reports_taxes_summary_report'),
'subtitle' => date($this->config->item('dateformat'), strtotime($start_date)) . '-' . date($this->config->item('dateformat'), strtotime($end_date)),
'subtitle' => $this->_get_subtitle_report(array('start_date' => $start_date, 'end_date' => $end_date)),
'chart_type' => 'reports/graphs/pie',
'labels_1' => $labels,
'series_data_1' => $series,
@@ -617,7 +617,7 @@ class Reports extends Secure_Controller
$data = array(
'title' => $this->lang->line('reports_customers_summary_report'),
'subtitle' => date($this->config->item('dateformat'), strtotime($start_date)) . '-' . date($this->config->item('dateformat'), strtotime($end_date)),
'subtitle' => $this->_get_subtitle_report(array('start_date' => $start_date, 'end_date' => $end_date)),
'chart_type' => 'reports/graphs/hbar',
'labels_1' => $labels,
'series_data_1' => $series,
@@ -653,7 +653,7 @@ class Reports extends Secure_Controller
$data = array(
'title' => $this->lang->line('reports_discounts_summary_report'),
'subtitle' => date($this->config->item('dateformat'), strtotime($start_date)) . '-' . date($this->config->item('dateformat'), strtotime($end_date)),
'subtitle' => $this->_get_subtitle_report(array('start_date' => $start_date, 'end_date' => $end_date)),
'chart_type' => 'reports/graphs/bar',
'labels_1' => $labels,
'series_data_1' => $series,
@@ -689,7 +689,7 @@ class Reports extends Secure_Controller
$data = array(
'title' => $this->lang->line('reports_payments_summary_report'),
'subtitle' => date($this->config->item('dateformat'), strtotime($start_date)) . '-' . date($this->config->item('dateformat'), strtotime($end_date)),
'subtitle' => $this->_get_subtitle_report(array('start_date' => $start_date, 'end_date' => $end_date)),
'chart_type' => 'reports/graphs/pie',
'labels_1' => $labels,
'series_data_1' => $series,
@@ -729,6 +729,7 @@ class Reports extends Secure_Controller
$summary_data = array();
$details_data = array();
$details_data_rewards = array();
foreach($report_data['summary'] as $key => $row)
{
@@ -738,7 +739,7 @@ class Reports extends Secure_Controller
'quantity' => to_quantity_decimals($row['items_purchased']),
'employee_name' => $row['employee_name'],
'subtotal' => to_currency($row['subtotal']),
'tax' => to_currency($row['tax']),
'tax' => to_currency_tax($row['tax']),
'total' => to_currency($row['total']),
'cost' => to_currency($row['cost']),
'profit' => to_currency($row['profit']),
@@ -747,17 +748,37 @@ class Reports extends Secure_Controller
foreach($report_data['details'][$key] as $drow)
{
$details_data[$row['sale_id']][] = $this->xss_clean(array($drow['name'], $drow['category'], $drow['serialnumber'], $drow['description'], to_quantity_decimals($drow['quantity_purchased']), to_currency($drow['subtotal']), to_currency($drow['tax']), to_currency($drow['total']), to_currency($drow['cost']), to_currency($drow['profit']), $drow['discount_percent'].'%'));
$details_data[$row['sale_id']][] = $this->xss_clean(array(
$drow['name'],
$drow['category'],
$drow['serialnumber'],
$drow['description'],
to_quantity_decimals($drow['quantity_purchased']),
to_currency($drow['subtotal']),
to_currency_tax($drow['tax']),
to_currency($drow['total']),
to_currency($drow['cost']),
to_currency($drow['profit']),
$drow['discount_percent'].'%'));
}
if(isset($report_data['rewards'][$key]))
{
foreach($report_data['rewards'][$key] as $drow)
{
$details_data_rewards[$row['sale_id']][] = $this->xss_clean(array($drow['used'], $drow['earned']));
}
}
}
$customer_info = $this->Customer->get_info($customer_id);
$data = array(
'title' => $this->xss_clean($customer_info->first_name . ' ' . $customer_info->last_name . ' ' . $this->lang->line('reports_report')),
'subtitle' => date($this->config->item('dateformat'), strtotime($start_date)) . '-' . date($this->config->item('dateformat'), strtotime($end_date)),
'subtitle' => $this->_get_subtitle_report(array('start_date' => $start_date, 'end_date' => $end_date)),
'headers' => $headers,
'summary_data' => $summary_data,
'details_data' => $details_data,
'details_data_rewards' => $details_data_rewards,
'overall_summary_data' => $this->xss_clean($model->getSummaryData($inputs))
);
@@ -793,6 +814,7 @@ class Reports extends Secure_Controller
$summary_data = array();
$details_data = array();
$details_data_rewards = array();
foreach($report_data['summary'] as $key => $row)
{
@@ -802,7 +824,7 @@ class Reports extends Secure_Controller
'quantity' => to_quantity_decimals($row['items_purchased']),
'customer_name' => $row['customer_name'],
'subtotal' => to_currency($row['subtotal']),
'tax' => to_currency($row['tax']),
'tax' => to_currency_tax($row['tax']),
'total' => to_currency($row['total']),
'cost' => to_currency($row['cost']),
'profit' => to_currency($row['profit']),
@@ -811,17 +833,37 @@ class Reports extends Secure_Controller
foreach($report_data['details'][$key] as $drow)
{
$details_data[$row['sale_id']][] = $this->xss_clean(array($drow['name'], $drow['category'], $drow['serialnumber'], $drow['description'], to_quantity_decimals($drow['quantity_purchased']), to_currency($drow['subtotal']), to_currency($drow['tax']), to_currency($drow['total']), to_currency($drow['cost']), to_currency($drow['profit']), $drow['discount_percent'].'%'));
$details_data[$row['sale_id']][] = $this->xss_clean(array(
$drow['name'],
$drow['category'],
$drow['serialnumber'],
$drow['description'],
to_quantity_decimals($drow['quantity_purchased']),
to_currency($drow['subtotal']),
to_currency_tax($drow['tax']),
to_currency($drow['total']),
to_currency($drow['cost']),
to_currency($drow['profit']),
$drow['discount_percent'].'%'));
}
if(isset($report_data['rewards'][$key]))
{
foreach($report_data['rewards'][$key] as $drow)
{
$details_data_rewards[$row['sale_id']][] = $this->xss_clean(array($drow['used'], $drow['earned']));
}
}
}
$employee_info = $this->Employee->get_info($employee_id);
$data = array(
'title' => $this->xss_clean($employee_info->first_name . ' ' . $employee_info->last_name . ' ' . $this->lang->line('reports_report')),
'subtitle' => date($this->config->item('dateformat'), strtotime($start_date)) . '-' . date($this->config->item('dateformat'), strtotime($end_date)),
'subtitle' => $this->_get_subtitle_report(array('start_date' => $start_date, 'end_date' => $end_date)),
'headers' => $headers,
'summary_data' => $summary_data,
'details_data' => $details_data,
'details_data_rewards' => $details_data_rewards,
'overall_summary_data' => $this->xss_clean($model->getSummaryData($inputs))
);
@@ -859,6 +901,7 @@ class Reports extends Secure_Controller
$summary_data = array();
$details_data = array();
$details_data_rewards = array();
foreach($report_data['summary'] as $key => $row)
{
@@ -868,7 +911,7 @@ class Reports extends Secure_Controller
'quantity' => to_quantity_decimals($row['items_purchased']),
'customer_name' => $row['customer_name'],
'subtotal' => to_currency($row['subtotal']),
'tax' => to_currency($row['tax']),
'tax' => to_currency_tax($row['tax']),
'total' => to_currency($row['total']),
'profit' => to_currency($row['profit']),
'payment_type' => $row['payment_type'],
@@ -877,23 +920,42 @@ class Reports extends Secure_Controller
foreach($report_data['details'][$key] as $drow)
{
$details_data[$row['sale_id']][] = $this->xss_clean(array($drow['name'], $drow['category'], $drow['serialnumber'], $drow['description'], to_quantity_decimals($drow['quantity_purchased']), to_currency($drow['subtotal']), to_currency($drow['tax']), to_currency($drow['total']), to_currency($drow['profit']), $drow['discount_percent'].'%'));
$details_data[$row['sale_id']][] = $this->xss_clean(array(
$drow['name'],
$drow['category'],
$drow['serialnumber'],
$drow['description'],
to_quantity_decimals($drow['quantity_purchased']),
to_currency($drow['subtotal']),
to_currency_tax($drow['tax']),
to_currency($drow['total']),
to_currency($drow['profit']),
$drow['discount_percent'].'%'));
}
if(isset($report_data['rewards'][$key]))
{
foreach($report_data['rewards'][$key] as $drow)
{
$details_data_rewards[$row['sale_id']][] = $this->xss_clean(array($drow['used'], $drow['earned']));
}
}
}
$data = array(
'title' => $discount . '% ' . $this->lang->line('reports_discount') . ' ' . $this->lang->line('reports_report'),
'subtitle' => date($this->config->item('dateformat'), strtotime($start_date)) . '-' . date($this->config->item('dateformat'), strtotime($end_date)),
'subtitle' => $this->_get_subtitle_report(array('start_date' => $start_date, 'end_date' => $end_date)),
'headers' => $headers,
'summary_data' => $summary_data,
'details_data' => $details_data,
'details_data_rewards' => $details_data_rewards,
'overall_summary_data' => $this->xss_clean($model->getSummaryData($inputs))
);
$this->load->view('reports/tabular_details', $data);
}
public function get_detailed_sales_row($sale_id)
public function get_detailed_sales_row($sale_id)
{
$inputs = array('sale_id' => $sale_id);
@@ -911,7 +973,7 @@ class Reports extends Secure_Controller
'employee_name' => $report_data['employee_name'],
'customer_name' => $report_data['customer_name'],
'subtotal' => to_currency($report_data['subtotal']),
'tax' => to_currency($report_data['tax']),
'tax' => to_currency_tax($report_data['tax']),
'total' => to_currency($report_data['total']),
'cost' => to_currency($report_data['cost']),
'profit' => to_currency($report_data['profit']),
@@ -931,14 +993,16 @@ class Reports extends Secure_Controller
$this->load->model('reports/Detailed_sales');
$model = $this->Detailed_sales;
$model->create($inputs);
$headers = $this->xss_clean($model->getDataColumns());
$report_data = $model->getData($inputs);
$summary_data = array();
$details_data = array();
$details_data_rewards = array();
$show_locations = $this->xss_clean($this->Stock_location->multiple_locations());
@@ -951,7 +1015,7 @@ class Reports extends Secure_Controller
'employee_name' => $row['employee_name'],
'customer_name' => $row['customer_name'],
'subtotal' => to_currency($row['subtotal']),
'tax' => to_currency($row['tax']),
'tax' => to_currency_tax($row['tax']),
'total' => to_currency($row['total']),
'cost' => to_currency($row['cost']),
'profit' => to_currency($row['profit']),
@@ -969,20 +1033,39 @@ class Reports extends Secure_Controller
{
$quantity_purchased .= ' [' . $this->Stock_location->get_location_name($drow['item_location']) . ']';
}
$details_data[$row['sale_id']][] = $this->xss_clean(array($drow['name'], $drow['category'], $drow['serialnumber'], $drow['description'], $quantity_purchased, to_currency($drow['subtotal']), to_currency($drow['tax']), to_currency($drow['total']), to_currency($drow['cost']), to_currency($drow['profit']), $drow['discount_percent'].'%'));
$details_data[$row['sale_id']][] = $this->xss_clean(array(
$drow['name'],
$drow['category'],
$drow['serialnumber'],
$drow['description'],
$quantity_purchased,
to_currency($drow['subtotal']),
to_currency_tax($drow['tax']),
to_currency($drow['total']),
to_currency($drow['cost']),
to_currency($drow['profit']),
$drow['discount_percent'].'%'));
}
if(isset($report_data['rewards'][$key]))
{
foreach($report_data['rewards'][$key] as $drow)
{
$details_data_rewards[$row['sale_id']][] = $this->xss_clean(array($drow['used'], $drow['earned']));
}
}
}
$data = array(
'title' => $this->lang->line('reports_detailed_sales_report'),
'subtitle' => date($this->config->item('dateformat'), strtotime($start_date)) . '-' . date($this->config->item('dateformat'), strtotime($end_date)),
'subtitle' => $this->_get_subtitle_report(array('start_date' => $start_date, 'end_date' => $end_date)),
'headers' => $headers,
'editable' => 'sales',
'summary_data' => $summary_data,
'details_data' => $details_data,
'details_data_rewards' => $details_data_rewards,
'overall_summary_data' => $this->xss_clean($model->getSummaryData($inputs))
);
$this->load->view('reports/tabular_details', $data);
}
@@ -1041,6 +1124,7 @@ class Reports extends Secure_Controller
'employee_name' => $row['employee_name'],
'supplier_name' => $row['supplier_name'],
'total' => to_currency($row['total']),
'profit' => to_currency($row['profit']),
'payment_type' => $row['payment_type'],
'reference' => $row['reference'],
'comment' => $row['comment'],
@@ -1062,7 +1146,7 @@ class Reports extends Secure_Controller
$data = array(
'title' => $this->lang->line('reports_detailed_receivings_report'),
'subtitle' => date($this->config->item('dateformat'), strtotime($start_date)) . '-' . date($this->config->item('dateformat'), strtotime($end_date)),
'subtitle' => $this->_get_subtitle_report(array('start_date' => $start_date, 'end_date' => $end_date)),
'headers' => $headers,
'editable' => 'receivings',
'summary_data' => $summary_data,
@@ -1154,5 +1238,22 @@ class Reports extends Secure_Controller
$this->load->view('reports/tabular', $data);
}
// Returns subtitle for the reports
private function _get_subtitle_report($inputs)
{
$subtitle = '';
if(empty($this->config->item('date_or_time_format')))
{
$subtitle .= date($this->config->item('dateformat'), strtotime($inputs['start_date'])) . ' - ' .date($this->config->item('dateformat'), strtotime($inputs['end_date']));
}
else
{
$subtitle .= date($this->config->item('dateformat').' '.$this->config->item('timeformat'), strtotime(rawurldecode($inputs['start_date']))) . ' - ' . date($this->config->item('dateformat').' '.$this->config->item('timeformat'), strtotime(rawurldecode($inputs['end_date'])));
}
return $subtitle;
}
}
?>
?>

View File

File diff suppressed because it is too large Load Diff

View File

@@ -8,14 +8,14 @@ class Suppliers extends Persons
{
parent::__construct('suppliers');
}
public function index()
{
$data['table_headers'] = $this->xss_clean(get_suppliers_manage_table_headers());
$this->load->view('people/manage', $data);
}
/*
Gets one row for a supplier manage table. This is called using AJAX to update one row.
*/
@@ -88,11 +88,19 @@ class Suppliers extends Persons
*/
public function save($supplier_id = -1)
{
$first_name = $this->xss_clean($this->input->post('first_name'));
$last_name = $this->xss_clean($this->input->post('last_name'));
$email = $this->xss_clean(strtolower($this->input->post('email')));
// format first and last name properly
$first_name = $this->nameize($first_name);
$last_name = $this->nameize($last_name);
$person_data = array(
'first_name' => $this->input->post('first_name'),
'last_name' => $this->input->post('last_name'),
'first_name' => $first_name,
'last_name' => $last_name,
'gender' => $this->input->post('gender'),
'email' => $this->input->post('email'),
'email' => $email,
'phone_number' => $this->input->post('phone_number'),
'address_1' => $this->input->post('address_1'),
'address_2' => $this->input->post('address_2'),
@@ -102,6 +110,7 @@ class Suppliers extends Persons
'country' => $this->input->post('country'),
'comments' => $this->input->post('comments')
);
$supplier_data = array(
'company_name' => $this->input->post('company_name'),
'agency_name' => $this->input->post('agency_name'),
@@ -115,21 +124,24 @@ class Suppliers extends Persons
//New supplier
if($supplier_id == -1)
{
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('suppliers_successful_adding').' '.
$supplier_data['company_name'], 'id' => $supplier_data['person_id']));
echo json_encode(array('success' => TRUE,
'message' => $this->lang->line('suppliers_successful_adding') . ' ' . $supplier_data['company_name'],
'id' => $supplier_data['person_id']));
}
else //Existing supplier
{
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('suppliers_successful_updating').' '.
$supplier_data['company_name'], 'id' => $supplier_id));
echo json_encode(array('success' => TRUE,
'message' => $this->lang->line('suppliers_successful_updating') . ' ' . $supplier_data['company_name'],
'id' => $supplier_id));
}
}
else//failure
{
$supplier_data = $this->xss_clean($supplier_data);
echo json_encode(array('success' => FALSE, 'message' => $this->lang->line('suppliers_error_adding_updating').' '.
$supplier_data['company_name'], 'id' => -1));
echo json_encode(array('success' => FALSE,
'message' => $this->lang->line('suppliers_error_adding_updating') . ' ' . $supplier_data['company_name'],
'id' => -1));
}
}
@@ -152,4 +164,4 @@ class Suppliers extends Persons
}
}
?>
?>

View File

@@ -0,0 +1,222 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
require_once("Secure_Controller.php");
class Taxes extends Secure_Controller
{
public function __construct()
{
parent::__construct('taxes');
$this->load->model('enums/Rounding_mode');
}
public function index()
{
$data['table_headers'] = $this->xss_clean(get_taxes_manage_table_headers());
$this->load->view('taxes/manage', $data);
}
/*
Returns tax_codes table data rows. This will be called with AJAX.
*/
public function search()
{
$search = $this->input->get('search');
$limit = $this->input->get('limit');
$offset = $this->input->get('offset');
$sort = $this->input->get('sort');
$order = $this->input->get('order');
$tax_codes = $this->Tax->search($search, $limit, $offset, $sort, $order);
$total_rows = $this->Tax->get_found_rows($search);
$data_rows = array();
foreach($tax_codes->result() as $tax_code_row)
{
$data_rows[] = get_tax_data_row($tax_code_row, $this);
}
$data_rows = $this->xss_clean($data_rows);
echo json_encode(array('total' => $total_rows, 'rows' => $data_rows));
}
/*
Gives search suggestions based on what is being searched for
*/
public function suggest_search()
{
$suggestions = $this->xss_clean($this->Tax->get_search_suggestions($this->input->post('term')));
echo json_encode($suggestions);
}
/*
Provides list of tax categories to select from
*/
public function suggest_tax_categories()
{
$suggestions = $this->xss_clean($this->Tax->get_tax_category_suggestions($this->input->post('term')));
echo json_encode($suggestions);
}
public function get_row($row_id)
{
$data_row = $this->xss_clean(get_tax_codes_data_row($this->Tax->get_info($row_id), $this));
echo json_encode($data_row);
}
public function view($tax_code = -1)
{
$tax_code_info = $this->Tax->get_info($tax_code);
$default_tax_category_id = 1; // Tax category id is always the default tax category
$default_tax_category = $this->Tax->get_tax_category($default_tax_category_id);
$tax_rate_info = $this->Tax->get_rate_info($tax_code, $default_tax_category_id);
$data['rounding_options'] = Rounding_mode::get_rounding_options();
$data['html_rounding_options'] = $this->get_html_rounding_options();
if ($tax_code == -1)
{
$data['tax_code'] = '';
$data['tax_code_name'] = '';
$data['tax_code_type'] = '0';
$data['city'] = '';
$data['state'] = '';
$data['tax_rate'] = '0.0000';
$data['rate_tax_code'] = '';
$data['rate_tax_category_id'] = 1;
$data['tax_category'] = '';
$data['add_tax_category'] = '';
$data['rounding_code'] = '0';
}
else
{
$data['tax_code'] = $tax_code;
$data['tax_code_name'] = $tax_code_info->tax_code_name;
$data['tax_code_type'] = $tax_code_info->tax_code_type;
$data['city'] = $tax_code_info->city;
$data['state'] = $tax_code_info->state;
$data['rate_tax_code'] = $tax_code_info->rate_tax_code;
$data['rate_tax_category_id'] = $tax_code_info->rate_tax_category_id;
$data['tax_category'] = $tax_code_info->tax_category;
$data['add_tax_category'] = '';
$data['tax_rate'] = $tax_rate_info->tax_rate;
$data['rounding_code'] = $tax_rate_info->rounding_code;
}
$data = $this->xss_clean($data);
$tax_code_rates = array();
foreach($this->Tax->get_tax_code_rate_exceptions($tax_code) as $tax_code_rate)
{
$tax_code_row = array();
$tax_code_row['rate_tax_category_id'] = $this->xss_clean($tax_code_rate['rate_tax_category_id']);
$tax_code_row['tax_category'] = $this->xss_clean($tax_code_rate['tax_category']);
$tax_code_row['tax_rate'] = $this->xss_clean($tax_code_rate['tax_rate']);
$tax_code_row['rounding_code'] = $this->xss_clean($tax_code_rate['rounding_code']);
$tax_code_rates[] = $tax_code_row;
}
$data['tax_code_rates'] = $tax_code_rates;
$this->load->view("taxes/form", $data);
}
public static function get_html_rounding_options()
{
return Rounding_mode::get_html_rounding_options();
}
public function save($tax_code = -1)
{
$entered_tax_code = $this->xss_clean($this->input->post('tax_code'));
$tax_code_data = array(
'tax_code' => strtoupper($this->input->post('tax_code')),
'tax_code_name' => $this->input->post('tax_code_name'),
'tax_code_type' => $this->input->post('tax_code_type'),
'city' => $this->input->post('city'),
'state' => $this->input->post('state'));
$tax_rate_data = array(
'rate_tax_code' => $this->input->post('tax_code'),
'rate_tax_category_id' => 1,
'tax_rate' => parse_decimals($this->input->post('tax_rate')),
'rounding_code' => $this->input->post('rounding_code')
);
if($this->Tax->save($tax_code_data, $tax_rate_data, $tax_code))
{
$tax_code_rate_exceptions = array();
if(!empty($this->input->post('exception_tax_rate')))
{
foreach($this->input->post('exception_tax_rate') as $tax_category_id => $exception_tax_rate)
{
$exception_rounding_code = $this->input->post('exception_rounding_code[' . $tax_category_id . ']');
$tax_code_rate_exceptions[] = array(
'rate_tax_code' => $entered_tax_code,
'rate_tax_category_id' => $tax_category_id,
'tax_rate' => $exception_tax_rate,
'rounding_code' => $exception_rounding_code
);
}
}
if (!empty($tax_code_rate_exceptions))
{
$success = $this->Tax->save_tax_rate_exceptions($tax_code_rate_exceptions, $entered_tax_code);
}
$tax_code_data = $this->xss_clean($tax_code_data);
//New tax_code record
if($tax_code == -1)
{
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('taxes_tax_code_successfully_added') . ' ' . $entered_tax_code));
}
else //Existing tax_code
{
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('taxes_tax_code_successful_updated') . ' ' . $entered_tax_code));
}
}
else //failure
{
$tax_code_data = $this->xss_clean($tax_code_data);
echo json_encode(array('success' => FALSE, 'message' => $this->lang->line('taxes_tax_code_error_adding_updating') . ' ' .
$entered_tax_code));
}
}
public function delete()
{
$tax_codes_to_delete = $this->xss_clean($this->input->post('ids'));
if($this->Tax->delete_list($tax_codes_to_delete))
{
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('taxes_tax_code_successful_deleted')));
} else
{
echo json_encode(array('success' => FALSE, 'message' => $this->lang->line('taxes_tax_code_cannot_be_deleted')));
}
}
public function suggest_sales_tax_codes()
{
$suggestions = $this->xss_clean($this->Tax->get_sales_tax_codes_search_suggestions($this->input->post_get('term')));
echo json_encode($suggestions);
}
}
?>

View File

@@ -1,19 +1,13 @@
<?php (defined('BASEPATH')) OR exit('No direct script access allowed');
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class MY_Lang extends CI_Lang
{
function __construct()
{
parent::__construct();
}
function switch_to( $idiom )
public function switch_to($idiom)
{
$CI =& get_instance();
if( is_string( $idiom ) )
if(is_string($idiom))
{
$CI->config->set_item( 'language', $idiom );
$CI->config->set_item('language', $idiom);
$loaded = $this->is_loaded;
$this->is_loaded = array();
@@ -32,7 +26,7 @@ class MY_Lang extends CI_Lang
* @access public
* @return mixed false if not found or the language string
*/
function line($line = '', $log_errors = true)
public function line($line = '', $log_errors = TRUE)
{
//get the arguments passed to the function
$args = func_get_args();
@@ -41,28 +35,28 @@ class MY_Lang extends CI_Lang
$c = count($args);
//if one or more arguments, perform the necessary processing
if ($c)
if($c)
{
//first argument should be the actual language line key
//so remove it from the array (pop from front)
$line = array_shift($args);
//check to make sure the key is valid and load the line
if ($line == '')
if($line == '')
{
$line = FALSE;
}
else
{
if (isset($this->language[$line]))
if(isset($this->language[$line]) && $this->language[$line] != '')
{
$line = $this->language[$line];
//if the line exists and more function arguments remain
//perform wildcard replacements
if ($args)
if($args)
{
$i = 1;
foreach ($args as $arg)
foreach($args as $arg)
{
$line = preg_replace('/\%'.$i.'/', $arg, $line);
++$i;
@@ -80,17 +74,16 @@ class MY_Lang extends CI_Lang
else
{
//if no arguments given, no language line available
$line = false;
$line = FALSE;
}
return $line;
}
function line_tbd($line='')
public function line_tbd($line = '')
{
return $line . ' (TBD)';
}
}
?>

View File

@@ -1,6 +1,6 @@
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
function pdf_create($html, $filename = '')
function pdf_create($html, $filename = '')
{
// need to enable magic quotes for the
$magic_quotes_enabled = get_magic_quotes_runtime();
@@ -28,4 +28,4 @@ function pdf_create($html, $filename = '')
return $dompdf->output();
}
}
?>
?>

View File

@@ -1,7 +1,7 @@
<?php
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/*
* Currency locale
/**
* Currency locale helper
*/
function current_language_code()
@@ -17,23 +17,41 @@ function current_language()
function currency_side()
{
$config = get_instance()->config;
$fmt = new \NumberFormatter($config->item('number_locale'), \NumberFormatter::CURRENCY);
$fmt->setSymbol(\NumberFormatter::CURRENCY_SYMBOL, $config->item('currency_symbol'));
return !preg_match('/^¤/', $fmt->getPattern());
}
function quantity_decimals()
{
$config = get_instance()->config;
return $config->item('quantity_decimals') ? $config->item('quantity_decimals') : 0;
}
function totals_decimals()
{
$config = get_instance()->config;
return $config->item('currency_decimals') ? $config->item('currency_decimals') : 0;
}
function cash_decimals()
{
$config = get_instance()->config;
return $config->item('cash_decimals') ? $config->item('cash_decimals') : 0;
}
function tax_decimals()
{
$config = get_instance()->config;
return $config->item('tax_decimals') ? $config->item('tax_decimals') : 0;
}
function to_currency($number)
{
return to_decimals($number, 'currency_decimals', \NumberFormatter::CURRENCY);
@@ -44,6 +62,20 @@ function to_currency_no_money($number)
return to_decimals($number, 'currency_decimals');
}
function to_currency_tax($number)
{
$config = get_instance()->config;
if($config->item('customer_sales_tax_support') == '1')
{
return to_decimals($number, 'currency_decimals', \NumberFormatter::CURRENCY);
}
else
{
return to_decimals($number, 'tax_decimals', \NumberFormatter::CURRENCY);
}
}
function to_tax_decimals($number)
{
// taxes that are NULL, '' or 0 don't need to be displayed
@@ -52,7 +84,7 @@ function to_tax_decimals($number)
{
return $number;
}
return to_decimals($number, 'tax_decimals');
}
@@ -69,16 +101,17 @@ function to_decimals($number, $decimals, $type=\NumberFormatter::DECIMAL)
{
return $number;
}
$config = get_instance()->config;
$fmt = new \NumberFormatter($config->item('number_locale'), $type);
$fmt->setAttribute(\NumberFormatter::MIN_FRACTION_DIGITS, $config->item($decimals));
$fmt->setAttribute(\NumberFormatter::MAX_FRACTION_DIGITS, $config->item($decimals));
if (empty($config->item('thousands_separator')))
if(empty($config->item('thousands_separator')))
{
$fmt->setAttribute(\NumberFormatter::GROUPING_SEPARATOR_SYMBOL, '');
}
$fmt->setSymbol(\NumberFormatter::CURRENCY_SYMBOL, $config->item('currency_symbol'));
return $fmt->format($number);
}
@@ -96,6 +129,7 @@ function parse_decimals($number)
{
$fmt->setAttribute(\NumberFormatter::GROUPING_SEPARATOR_SYMBOL, '');
}
return $fmt->parse($number);
}

View File

@@ -1,10 +1,10 @@
<?php
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
function show_report_if_allowed($report_prefix, $report_name, $person_id, $permission_id = '')
{
$CI =& get_instance();
$permission_id = empty($permission_id) ? 'reports_' . $report_name : $permission_id;
$permission_id = empty($permission_id) ? 'reports_' . $report_name : $permission_id;
if($CI->Employee->has_grant($permission_id, $person_id))
{
show_report($report_prefix, $report_name, $permission_id);
@@ -23,8 +23,7 @@ function show_report($report_prefix, $report_name, $lang_key='')
{
?>
<a class="list-group-item" href="<?php echo site_url('reports/' . $report_prefix . preg_replace('/reports_(.*)/', '$1', $report_name));?>"><?php echo $report_label; ?></a>
<?php
<?php
}
}
?>
?>

View File

@@ -1,4 +1,4 @@
<?php
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
function get_sales_manage_table_headers()
{
@@ -13,7 +13,7 @@ function get_sales_manage_table_headers()
array('change_due' => $CI->lang->line('sales_change_due')),
array('payment_type' => $CI->lang->line('sales_payment_type'))
);
if($CI->config->item('invoice_enable') == TRUE)
{
$headers[] = array('invoice_number' => $CI->lang->line('sales_invoice_number'));
@@ -103,7 +103,7 @@ function get_sales_manage_payments_summary($payments, $sales, $controller)
$amount -= $sale['change_due'];
}
}
$table .= '<div class="summary_row">' . $payment['payment_type'] . ': ' . to_currency( $amount ) . '</div>';
$table .= '<div class="summary_row">' . $payment['payment_type'] . ': ' . to_currency($amount) . '</div>';
}
$table .= '</div>';
@@ -137,6 +137,7 @@ function transform_headers($array, $readonly = FALSE, $editable = TRUE)
foreach($array as $element)
{
reset($element);
$result[] = array('field' => key($element),
'title' => current($element),
'switchable' => isset($element['switchable']) ?
@@ -169,14 +170,14 @@ function get_people_manage_table_headers()
{
$headers[] = array('messages' => '', 'sortable' => FALSE);
}
return transform_headers($headers);
}
function get_person_data_row($person, $controller)
{
$CI =& get_instance();
$controller_name=strtolower(get_class($CI));
$controller_name = strtolower(get_class($CI));
return array (
'people.person_id' => $person->person_id,
@@ -184,7 +185,47 @@ function get_person_data_row($person, $controller)
'first_name' => $person->first_name,
'email' => empty($person->email) ? '' : mailto($person->email, $person->email),
'phone_number' => $person->phone_number,
'messages' => empty($person->phone_number) ? '' : anchor("Messages/view/$person->person_id", '<span class="glyphicon glyphicon-phone"></span>',
'messages' => empty($person->phone_number) ? '' : anchor("Messages/view/$person->person_id", '<span class="glyphicon glyphicon-phone"></span>',
array('class'=>'modal-dlg', 'data-btn-submit' => $CI->lang->line('common_submit'), 'title'=>$CI->lang->line('messages_sms_send'))),
'edit' => anchor($controller_name."/view/$person->person_id", '<span class="glyphicon glyphicon-edit"></span>',
array('class'=>'modal-dlg', 'data-btn-submit' => $CI->lang->line('common_submit'), 'title'=>$CI->lang->line($controller_name.'_update'))
));
}
function get_customer_manage_table_headers()
{
$CI =& get_instance();
$headers = array(
array('people.person_id' => $CI->lang->line('common_id')),
array('last_name' => $CI->lang->line('common_last_name')),
array('first_name' => $CI->lang->line('common_first_name')),
array('email' => $CI->lang->line('common_email')),
array('phone_number' => $CI->lang->line('common_phone_number')),
array('total' => $CI->lang->line('common_total_spent'), 'sortable' => FALSE)
);
if($CI->Employee->has_grant('messages', $CI->session->userdata('person_id')))
{
$headers[] = array('messages' => '', 'sortable' => FALSE);
}
return transform_headers($headers);
}
function get_customer_data_row($person, $stats, $controller)
{
$CI =& get_instance();
$controller_name = strtolower(get_class($CI));
return array (
'people.person_id' => $person->person_id,
'last_name' => $person->last_name,
'first_name' => $person->first_name,
'email' => empty($person->email) ? '' : mailto($person->email, $person->email),
'phone_number' => $person->phone_number,
'total' => to_currency($stats->total),
'messages' => empty($person->phone_number) ? '' : anchor("Messages/view/$person->person_id", '<span class="glyphicon glyphicon-phone"></span>',
array('class'=>'modal-dlg', 'data-btn-submit' => $CI->lang->line('common_submit'), 'title'=>$CI->lang->line('messages_sms_send'))),
'edit' => anchor($controller_name."/view/$person->person_id", '<span class="glyphicon glyphicon-edit"></span>',
array('class'=>'modal-dlg', 'data-btn-submit' => $CI->lang->line('common_submit'), 'title'=>$CI->lang->line($controller_name.'_update'))
@@ -216,7 +257,7 @@ function get_suppliers_manage_table_headers()
function get_supplier_data_row($supplier, $controller)
{
$CI =& get_instance();
$controller_name=strtolower(get_class($CI));
$controller_name = strtolower(get_class($CI));
return array (
'people.person_id' => $supplier->person_id,
@@ -226,7 +267,7 @@ function get_supplier_data_row($supplier, $controller)
'first_name' => $supplier->first_name,
'email' => empty($supplier->email) ? '' : mailto($supplier->email, $supplier->email),
'phone_number' => $supplier->phone_number,
'messages' => empty($supplier->phone_number) ? '' : anchor("Messages/view/$supplier->person_id", '<span class="glyphicon glyphicon-phone"></span>',
'messages' => empty($supplier->phone_number) ? '' : anchor("Messages/view/$supplier->person_id", '<span class="glyphicon glyphicon-phone"></span>',
array('class'=>"modal-dlg", 'data-btn-submit' => $CI->lang->line('common_submit'), 'title'=>$CI->lang->line('messages_sms_send'))),
'edit' => anchor($controller_name."/view/$supplier->person_id", '<span class="glyphicon glyphicon-edit"></span>',
array('class'=>"modal-dlg", 'data-btn-submit' => $CI->lang->line('common_submit'), 'title'=>$CI->lang->line($controller_name.'_update')))
@@ -268,13 +309,24 @@ function get_item_data_row($item, $controller)
$tax_percents = substr($tax_percents, 0, -2);
$controller_name = strtolower(get_class($CI));
$image = '';
if ($item->pic_id != '')
$image = NULL;
if ($item->pic_filename != '')
{
$images = glob('./uploads/item_pics/' . $item->pic_id . '.*');
$ext = pathinfo($item->pic_filename, PATHINFO_EXTENSION);
if($ext == '')
{
// legacy
$images = glob('./uploads/item_pics/' . $item->pic_filename . '.*');
}
else
{
// preferred
$images = glob('./uploads/item_pics/' . $item->pic_filename);
}
if (sizeof($images) > 0)
{
$image .= '<a class="rollover" href="'. base_url($images[0]) .'"><img src="'.site_url('items/pic_thumb/'.$item->pic_id).'"></a>';
$image .= '<a class="rollover" href="'. base_url($images[0]) .'"><img src="'.site_url('items/pic_thumb/' . pathinfo($images[0], PATHINFO_BASENAME)) . '"></a>';
}
}
@@ -315,6 +367,23 @@ function get_giftcards_manage_table_headers()
return transform_headers($headers);
}
function get_taxes_manage_table_headers()
{
$CI =& get_instance();
$headers = array(
array('tax_code' => $CI->lang->line('taxes_tax_code')),
array('tax_code_name' => $CI->lang->line('taxes_tax_code_name')),
array('tax_code_type_name' => $CI->lang->line('taxes_tax_code_type')),
array('tax_rate' => $CI->lang->line('taxes_tax_rate')),
array('rounding_code_name' => $CI->lang->line('taxes_rounding_code')),
array('city' => $CI->lang->line('common_city')),
array('state' => $CI->lang->line('common_state'))
);
return transform_headers($headers);
}
function get_giftcard_data_row($giftcard, $controller)
{
$CI =& get_instance();
@@ -331,6 +400,26 @@ function get_giftcard_data_row($giftcard, $controller)
));
}
function get_tax_data_row($tax_code_row, $controller)
{
$CI =& get_instance();
$controller_name=strtolower(get_class($CI));
return array (
'tax_code' => $tax_code_row->tax_code,
'tax_code_name' => $tax_code_row->tax_code_name,
'tax_code_type' => $tax_code_row->tax_code_type,
'tax_rate' => $tax_code_row->tax_rate,
'rounding_code' =>$tax_code_row->rounding_code,
'tax_code_type_name' => $CI->Tax->get_tax_code_type_name($tax_code_row->tax_code_type),
'rounding_code_name' => Rounding_mode::get_rounding_code_name($tax_code_row->rounding_code),
'city' => $tax_code_row->city,
'state' => $tax_code_row->state,
'edit' => anchor($controller_name."/view/$tax_code_row->tax_code", '<span class="glyphicon glyphicon-edit"></span>',
array('class'=>'modal-dlg', 'data-btn-submit' => $CI->lang->line('common_submit'), 'title'=>$CI->lang->line($controller_name.'_update'))
));
}
function get_item_kits_manage_table_headers()
{
$CI =& get_instance();
@@ -349,7 +438,7 @@ function get_item_kits_manage_table_headers()
function get_item_kit_data_row($item_kit, $controller)
{
$CI =& get_instance();
$controller_name=strtolower(get_class($CI));
$controller_name = strtolower(get_class($CI));
return array (
'item_kit_id' => $item_kit->item_kit_id,
@@ -361,5 +450,4 @@ function get_item_kit_data_row($item_kit, $controller)
array('class'=>'modal-dlg', 'data-btn-submit' => $CI->lang->line('common_submit'), 'title'=>$CI->lang->line($controller_name.'_update'))
));
}
?>

View File

@@ -16,7 +16,7 @@ function load_config()
if (!file_exists('../application/language/' . current_language_code()))
{
$CI->config->set_item('language', 'english');
$CI->config->set_item('language_code', 'en');
$CI->config->set_item('language_code', 'en-US');
}
load_language_files('../vendor/codeigniter/framework/system/language', current_language());
@@ -33,7 +33,7 @@ function load_config()
date_default_timezone_set('America/New_York');
}
bcscale(max(2, $CI->config->item('currency_decimals') + $CI->config->item('tax_decimals')));
bcscale(max(2, totals_decimals() + tax_decimals()));
}
/**
@@ -55,4 +55,4 @@ function load_language_files($path, $language)
}
}
?>
?>

View File

@@ -1,10 +1,10 @@
<?php
$lang["tables_loading"] = "جارى التحميل، برجاء الإنتظار";
$lang["tables_rows_per_page"] = "{0} صف بالصفحة";
$lang["tables_page_from_to"] = "عرض {0} إلى {1} من {2} صفوف";
$lang["tables_hide_show_pagination"] = "عرض/إخفاء أرقام الصفحات";
$lang["tables_refresh"] = "إعادة تحميل";
$lang["tables_toggle"] = "تغيير";
$lang["tables_columns"] = "أعمدة";
$lang["tables_all"] = "الجميع";
$lang["tables_columns"] = "أعمدة";
$lang["tables_hide_show_pagination"] = "عرض/إخفاء أرقام الصفحات";
$lang["tables_loading"] = "جارى التحميل، برجاء الإنتظار";
$lang["tables_page_from_to"] = "عرض {0} إلى {1} من {2} صفوف";
$lang["tables_refresh"] = "إعادة تحميل";
$lang["tables_rows_per_page"] = "{0} صف بالصفحة";
$lang["tables_toggle"] = "تغيير";

View File

@@ -10,11 +10,14 @@ $lang["common_confirm_search"] = "لقد قمت اختيار أكتر من سج
$lang["common_country"] = "البلد";
$lang["common_date"] = "التاريخ";
$lang["common_delete"] = "حذف";
$lang["common_print"] = "طباعة";
$lang["common_det"] = "تفاصيل";
$lang["common_download_import_template"] = "تنزيل قالب الاستيراد من اكسل (CSV)";
$lang["common_edit"] = "تحرير";
$lang["common_email"] = "بريد إلكتروني";
$lang["common_email_invalid_format"] = "شكل البريد الإلكتروني غير صحيح";
$lang["common_export_excel"] = "تصدير إلى اكسل";
$lang["common_export_excel_no"] = "لا";
$lang["common_export_excel_yes"] = "نعم";
$lang["common_fields_required_message"] = "الحقول التي بالأحمر مطلوبة";
$lang["common_first_name"] = "الاسم الأول";
$lang["common_first_name_required"] = "الاسم الأول مطلوب";
@@ -22,6 +25,13 @@ $lang["common_first_page"] = "الأول";
$lang["common_gender"] = "النوع";
$lang["common_gender_female"] = "أنثى";
$lang["common_gender_male"] = "ذكر";
$lang["common_id"] = "كود";
$lang["common_import"] = "استيراد";
$lang["common_import_change_file"] = "تغيير";
$lang["common_import_excel"] = "استيراد من اكسل";
$lang["common_import_full_path"] = "المسار الكامل لملف اكسل مطلوب";
$lang["common_import_remove_file"] = "إزالة";
$lang["common_import_select_file"] = "اختار ملف";
$lang["common_inv"] = "المخزن";
$lang["common_last_name"] = "الاسم الأخير";
$lang["common_last_name_required"] = "الاسم الأخير مطلوب";
@@ -38,28 +48,20 @@ $lang["common_phone_number_required"] = "رقم التليفون مطلوب";
$lang["common_please_visit_my"] = "برجاء زيارة";
$lang["common_powered_by"] = "مدعوم بواسطة";
$lang["common_price"] = "السعر";
$lang["common_print"] = "طباعة";
$lang["common_remove"] = "إزالة";
$lang["common_required"] = "مطلوب";
$lang["common_return_policy"] = "سياسة الاسترجاع";
$lang["common_search"] = "بحث";
$lang["common_search_options"] = "خيارات البحث";
$lang["common_searched_for"] = "بحث عن";
$lang["common_state"] = "المحافظة";
$lang["common_submit"] = "حفظ";
$lang["common_total_spent"] = "";
$lang["common_unknown"] = "";
$lang["common_view_recent_sales"] = "عرض أحدث المبيعات";
$lang["common_website"] = "الموقع الإلكترونى";
$lang["common_welcome"] = "مرحباً";
$lang["common_welcome_message"] = "مرحباً فى OSPOS برجاء إختيار أى قسم للبدء";
$lang["common_you_are_using_ospos"] = "أنت تستخدم إصدار Open Source Point Of Sale ";
$lang["common_zip"] = "الرقم البريدى";
$lang["common_import"] = "استيراد";
$lang["common_download_import_template"] = "تنزيل قالب الاستيراد من اكسل (CSV)";
$lang["common_import_excel"] = "استيراد من اكسل";
$lang["common_import_full_path"] = "المسار الكامل لملف اكسل مطلوب";
$lang["common_import_select_file"] = "اختار ملف";
$lang["common_import_change_file"] = "تغيير";
$lang["common_import_remove_file"] = "إزالة";
$lang["common_export_excel"] = "تصدير إلى اكسل";
$lang["common_export_excel_yes"] = "نعم";
$lang["common_export_excel_no"] = "لا";
$lang["common_required"] = "مطلوب";
$lang["common_id"] = "كود";

View File

@@ -11,6 +11,8 @@ $lang["config_barcode_configuration"] = "اعدادات الباركود";
$lang["config_barcode_content"] = "محتويات الباركود";
$lang["config_barcode_first_row"] = "الصف 1";
$lang["config_barcode_font"] = "الخط";
$lang["config_barcode_formats"] = "";
$lang["config_barcode_generate_if_empty"] = "توليد اذا كان الباركود فارغ";
$lang["config_barcode_height"] = "الارتفاع (px)";
$lang["config_barcode_id"] = "كود/اسم الصنف";
$lang["config_barcode_info"] = "معلومات اعدادات الباركود";
@@ -26,22 +28,25 @@ $lang["config_barcode_second_row"] = "الصف 2";
$lang["config_barcode_third_row"] = "الصف 3";
$lang["config_barcode_type"] = "نوعية الباركود";
$lang["config_barcode_width"] = "العرض (px)";
$lang["config_barcode_generate_if_empty"] = "توليد اذا كان الباركود فارغ";
$lang["config_bottom"] = "الأسفل";
$lang["config_cash_decimals"] = "";
$lang["config_cash_decimals_tooltip"] = "";
$lang["config_cash_rounding"] = "";
$lang["config_center"] = "الوسط";
$lang["config_comma"] = "فاصلة";
$lang["config_company"] = "اسم الشركة";
$lang["config_company_logo"] = "شعار الشركة";
$lang["config_company_select_image"] = "اختار صورة";
$lang["config_company_change_image"] = "تغيير الصورة";
$lang["config_company_logo"] = "شعار الشركة";
$lang["config_company_remove_image"] = "إزالة الصورة";
$lang["config_company_required"] = "اسم الشركة مطلوب";
$lang["config_company_select_image"] = "اختار صورة";
$lang["config_company_website_url"] = "الموقع الإلكترونى للشركة غير صحيح";
$lang["config_comma"] = "فاصلة";
$lang["config_country_codes"] = "أكواد الدولة";
$lang["config_country_codes_tooltip"] = "قائمة مفصولة بفاصلة لاسماء الدول للبحث";
$lang["config_currency_symbol"] = "رمز العملة";
$lang["config_currency_decimals"] = "العلامة العشرية للعملة";
$lang["config_currency_symbol"] = "رمز العملة";
$lang["config_custom1"] = "حقل مخصص 1";
$lang["config_custom10"] = "حقل مخصص 10";
$lang["config_custom2"] = "حقل مخصص 2";
$lang["config_custom3"] = "حقل مخصص 3";
$lang["config_custom4"] = "حقل مخصص 4";
@@ -50,7 +55,13 @@ $lang["config_custom6"] = "حقل مخصص 6";
$lang["config_custom7"] = "حقل مخصص 7";
$lang["config_custom8"] = "حقل مخصص 8";
$lang["config_custom9"] = "حقل مخصص 9";
$lang["config_custom10"] = "حقل مخصص 10";
$lang["config_customer_reward"] = "";
$lang["config_customer_reward_duplicate"] = "";
$lang["config_customer_reward_enable"] = "";
$lang["config_customer_reward_invalid_chars"] = "";
$lang["config_customer_reward_required"] = "";
$lang["config_customer_sales_tax_support"] = "";
$lang["config_date_or_time_format"] = "";
$lang["config_datetimeformat"] = "شكل الوقت و التاريخ";
$lang["config_decimal_point"] = "العلامة العشرية";
$lang["config_default_barcode_font_size_number"] = "الحجم الافتراضي لخط الباركود لابد أن يكون رقم";
@@ -67,42 +78,74 @@ $lang["config_default_barcode_quality_number"] = "الجودة الافتراض
$lang["config_default_barcode_quality_required"] = "الجودة الافتراضية للباركود مطلوبة";
$lang["config_default_barcode_width_number"] = "العرض الافتراضي للباركود لابد ان يكون رقم";
$lang["config_default_barcode_width_required"] = "العرض الافتراضي للباركود مطلوب";
$lang["config_default_origin_tax_code"] = "";
$lang["config_default_sales_discount"] = "نسبة الخصم الافتراضية %";
$lang["config_default_sales_discount_number"] = "نسبة الخصم الافتراضية لابد ان تكون رقم";
$lang["config_default_sales_discount_required"] = "نسبة الخصم الافتراضية مطلوبة";
$lang["config_default_tax_name_number"] = "";
$lang["config_default_tax_name_required"] = "اسم الضريبة الافتراضية مطلوب";
$lang["config_default_tax_rate"] = "معدل الضريبة الافتراضي %";
$lang["config_default_tax_rate_1"] = "معدل الضريبة 1";
$lang["config_default_tax_rate_2"] = "معدل الضريبة 2";
$lang["config_default_tax_rate_number"] = "معدل الضريبة الافتراضي يجب أن يكون رقم";
$lang["config_default_tax_rate_required"] = "معدل الضريبة الافتراضي مطلوب";
$lang["config_default_tax_name_required"] = "اسم الضريبة الافتراضية مطلوب";
$lang["config_dinner_table"] = "";
$lang["config_dinner_table_duplicate"] = "";
$lang["config_dinner_table_enable"] = "";
$lang["config_dinner_table_invalid_chars"] = "";
$lang["config_dinner_table_required"] = "";
$lang["config_dot"] = "نقطة";
$lang["config_email"] = "البريد الإلكتروني";
$lang["config_email_configuration"] = "إعدادات البريد الإلكتروني";
$lang["config_email_protocol"] = "بروتوكول";
$lang["config_email_mailpath"] = "مسار ارسال البريد";
$lang["config_email_smtp_host"] = "خادم SMTP";
$lang["config_email_smtp_port"] = "رقم منفذ SMTP";
$lang["config_email_protocol"] = "بروتوكول";
$lang["config_email_smtp_crypto"] = "تشفير SMTP";
$lang["config_email_smtp_host"] = "خادم SMTP";
$lang["config_email_smtp_pass"] = "كلمة سر SMTP";
$lang["config_email_smtp_port"] = "رقم منفذ SMTP";
$lang["config_email_smtp_timeout"] = "وقت فشل المحاولة (ثوانى) لـ SMTP";
$lang["config_email_smtp_user"] = "اسم مستخدم SMTP";
$lang["config_email_smtp_pass"] = "كلمة سر SMTP";
$lang["config_fax"] = "الفاكس";
$lang["config_financial_year"] = "";
$lang["config_financial_year_apr"] = "";
$lang["config_financial_year_aug"] = "";
$lang["config_financial_year_dec"] = "";
$lang["config_financial_year_feb"] = "";
$lang["config_financial_year_jan"] = "";
$lang["config_financial_year_jul"] = "";
$lang["config_financial_year_jun"] = "";
$lang["config_financial_year_mar"] = "";
$lang["config_financial_year_may"] = "";
$lang["config_financial_year_nov"] = "";
$lang["config_financial_year_oct"] = "";
$lang["config_financial_year_sep"] = "";
$lang["config_gcaptcha_enable"] = "";
$lang["config_gcaptcha_secret_key"] = "";
$lang["config_gcaptcha_secret_key_required"] = "";
$lang["config_gcaptcha_site_key"] = "";
$lang["config_gcaptcha_site_key_required"] = "";
$lang["config_gcaptcha_tooltip"] = "";
$lang["config_general"] = "عام";
$lang["config_general_configuration"] = "إعدادات عامة";
$lang["config_giftcard_number"] = "";
$lang["config_giftcard_random"] = "";
$lang["config_giftcard_series"] = "";
$lang["config_info"] = "معلومات";
$lang["config_info_configuration"] = "معلومات الشركة";
$lang["config_invoice"] = "الفاتورة";
$lang["config_invoice_configuration"] = "إعدادات طباعة الفاتورة";
$lang["config_invoice_default_comments"] = "التعليق الافتراضي على الفاتورة";
$lang["config_invoice_enable"] = "تفعيل الفوترة";
$lang["config_invoice_email_message"] = "قالب البريد الإلكتروني للفاتورة";
$lang["config_invoice_enable"] = "تفعيل الفوترة";
$lang["config_invoice_printer"] = "طابعة الفواتير";
$lang["config_jsprintsetup_required"] = "تحذير! هذه الخاصية غير المفعلة سوف تعمل فقط مع وجود الاضافة jsPrintSetup على متصفح فايرفوكس. حفظ على أى حال؟";
$lang["config_language"] = "اللغة";
$lang["config_last_used_invoice_number"] = "اخر رقم مستخدم للفاتورة";
$lang["config_last_used_quote_number"] = "اخر رقم مستخدم لعرض الاسعار";
$lang["config_left"] = "يسار";
$lang["config_license"] = "الرخصة";
$lang["config_license_configuration"] = "نص الرخصة";
$lang["config_line_sequence"] = "تسلسل خطي";
$lang["config_lines_per_page"] = "عدد السطور فى الصفحة";
$lang["config_lines_per_page_number"] = "عدد السطور فى الصفحة يجب أن يكون رقم";
$lang["config_lines_per_page_required"] = "عدد السطور فى الصفحة مطلوب";
@@ -113,19 +156,30 @@ $lang["config_location"] = "المخزون";
$lang["config_location_configuration"] = "أماكن المخزون";
$lang["config_location_info"] = "معلومات تهيئة الأماكن";
$lang["config_logout"] = "هل تريد عمل نسخة إحتياطية قبل الخروج؟ اضغط [نعم] لعمل النسخة أو [الغاء] للخروج";
$lang["config_mailchimp"] = "mailchimp ميل تشامب";
$lang["config_mailchimp_api_key"] = "mailchimp مفتاح";
$lang["config_mailchimp_configuration"] = "إعدادات mailchimp";
$lang["config_mailchimp_key_successfully"] = "نجاح";
$lang["config_mailchimp_key_unsuccessfully"] = "فشل";
$lang["config_mailchimp_lists"] = "mailchimp قوائم";
$lang["config_mailchimp_tooltip"] = "";
$lang["config_message"] = "الرسائل";
$lang["config_message_configuration"] = "إعدادات الرسائل";
$lang["config_msg_msg"] = "الرسائل النصية المحفوظة";
$lang["config_msg_msg_placeholder"] = "إذا أردت إستخدام قالب للرسائل القصيرة احفظه هنا. عدا ذلك أترك هذا الحقل فارغ";
$lang["config_msg_uid"] = "SMS-API اسم المستخدم لـ";
$lang["config_msg_uid_required"] = "مطلوب SMS-API اسم المستخدم لـ";
$lang["config_msg_pwd"] = "SMS-API كلمة السر لـ";
$lang["config_msg_pwd_required"] = "مطلوب SMS-API كلمة السر لـ";
$lang["config_msg_src"] = "SMS-API كود المرسل لـ";
$lang["config_msg_src_required"] = "مطلوب SMS-API كود المرسل لـ";
$lang["config_msg_uid"] = "SMS-API اسم المستخدم لـ";
$lang["config_msg_uid_required"] = "مطلوب SMS-API اسم المستخدم لـ";
$lang["config_none"] = "لايوجد";
$lang["config_notify_alignment"] = "مكان عرض رسائل المعلومات";
$lang["config_number_format"] = "شكل الرقم";
$lang["config_number_locale"] = "التهيئة الاقليمية";
$lang["config_number_locale_invalid"] = "التهيئة الإقليمية المختارة غير صحية، راجع الرابط الموجود فى الملاحظة لاختيار تهيئة مناسبة";
$lang["config_number_locale_required"] = "رقم التهيئة الإقليمية مطلوب";
$lang["config_number_locale_tooltip"] = "إيجاد تهيئة إقليمية مناسبة عبر الرابط";
$lang["config_payment_options_order"] = "ترتيب خيارات الدفع";
$lang["config_phone"] = "هاتف الشركة";
$lang["config_phone_required"] = "هاتف الشركة مطلوب";
@@ -147,38 +201,47 @@ $lang["config_print_top_margin_required"] = "الهامش العلوى مطلو
$lang["config_quantity_decimals"] = "العلامة العشرية للكمية";
$lang["config_receipt"] = "الإيصال";
$lang["config_receipt_configuration"] = "إعدادات طباعة الايصالات";
$lang["config_receipt_default"] = "افتراضى";
$lang["config_receipt_font_size"] = "";
$lang["config_receipt_font_size_number"] = "";
$lang["config_receipt_font_size_required"] = "";
$lang["config_receipt_info"] = "معلومات تهيئة الإيصالات";
$lang["config_receipt_printer"] = "طابعة تذاكر";
$lang["config_receipt_show_taxes"] = "عرض الضرائب";
$lang["config_receipt_show_total_discount"] = "عرض إجمالى الخصم";
$lang["config_receipt_short"] = "مختصر";
$lang["config_receipt_show_company_name"] = "عرض اسم الشركة";
$lang["config_receipt_show_description"] = "عرض الوصف";
$lang["config_receipt_show_serialnumber"] = "عرض الرقم المسلسل";
$lang["config_receipt_show_taxes"] = "عرض الضرائب";
$lang["config_receipt_show_total_discount"] = "عرض إجمالى الخصم";
$lang["config_receipt_template"] = "قالب الايصال";
$lang["config_receipt_default"] = "افتراضى";
$lang["config_receipt_short"] = "مختصر";
$lang["config_receiving_calculate_average_price"] = "حساب متوسط سعر الأصناف المستلمة";
$lang["config_recv_invoice_format"] = "شكل فاتورة الإستلام";
$lang["config_register_mode_default"] = "نمط التسجيل الافتراضي";
$lang["config_return_policy_required"] = "سياسة الإسترجاع مطلوب";
$lang["config_reward"] = "المكافاة";
$lang["config_reward_configuration"] = "اعدادات المكافاة";
$lang["config_right"] = "يمين";
$lang["config_sales_invoice_format"] = "شكل فاتورة البيع";
$lang["config_sales_quote_format"] = "شكل فاتورة عرض الاسعار";
$lang["config_saved_successfully"] = "تم حفظ التهيئة بنجاح";
$lang["config_saved_unsuccessfully"] = "لم يتم حفظ التهيئة بنجاح";
$lang["config_statistics"] = "Send statistics";
$lang["config_statistics_tooltip"] = "Send statistics for development and feature improvement purposes";
$lang["config_statistics"] = "إرسال اﻹحصائيات";
$lang["config_statistics_tooltip"] = "إرسال اﻹحصائيات ﻷغراض التطوير و التحسين";
$lang["config_stock_location"] = "مكان المخزون";
$lang["config_stock_location_duplicate"] = "من فضلك إستخدم اسم مكان غير مكرر";
$lang["config_stock_location_invalid_chars"] = "مكان المخزون لايمكن أن يحتوى على '_'";
$lang["config_stock_location_required"] = "مكان المخزون مطلوب";
$lang["config_table"] = "جدول";
$lang["config_table_configuration"] = "اعدادات الجدول";
$lang["config_takings_printer"] = "طابعة الإيراد";
$lang["config_tax"] = "الضريبة";
$lang["config_tax_category"] = "تصنيف الضريبة";
$lang["config_tax_category_used"] = "";
$lang["config_tax_configuration"] = "إعدادات الضريبة";
$lang["config_tax_decimals"] = "العلامة العشرية للضريبة";
$lang["config_tax_included"] = "شامل الضريبة";
$lang["config_theme"] = "السمة";
$lang["config_thousands_separator"] = "فاصل الاف";
$lang["config_timezone"] = "المنطقة الزمنية";
$lang["config_top"] = "علوى";
$lang["config_website"] = "موقع الشركة";
$lang["config_number_locale"] = "التهيئة الاقليمية";
$lang["config_return_policy_required"] = "سياسة الإسترجاع مطلوب";
$lang["config_number_locale_required"] = "رقم التهيئة الإقليمية مطلوب";
$lang["config_number_locale_invalid"] = "التهيئة الإقليمية المختارة غير صحية، راجع الرابط الموجود فى الملاحظة لاختيار تهيئة مناسبة";
$lang["config_number_locale_tooltip"] = "إيجاد تهيئة إقليمية مناسبة عبر الرابط";
$lang["config_theme"] = "السمة";

View File

@@ -2,23 +2,44 @@
$lang["customers_account_number"] = "رقم الحساب";
$lang["customers_account_number_duplicate"] = "رقم الحساب هذا موجود فى قاعدة البيانات من قبل";
$lang["customers_available_points"] = "";
$lang["customers_average"] = "";
$lang["customers_avg_discount"] = "";
$lang["customers_basic_information"] = "";
$lang["customers_cannot_be_deleted"] = "لايمكن حذف هؤلاء العملاء، أحدهم/كلهم مرتبط/مرتبطين بمبيعات";
$lang["customers_company_name"] = "اسم الشركة";
$lang["customers_confirm_delete"] = "هل تريد حذف هؤلاء العملاء حقاً؟";
$lang["customers_customer"] = "العميل";
$lang["customers_discount"] = "نسبة الخصم";
$lang["customers_email_duplicate"] = "";
$lang["customers_error_adding_updating"] = "خطاء فى إضافة أو تحديث العميل";
$lang["customers_excel_import_failed"] = "فشل الإستيراد من اكسل";
$lang["customers_excel_import_nodata_wrongformat"] = "الملف الذى رفعته إما فارغ أو أنه مختلف البنية";
$lang["customers_excel_import_partially_failed"] = "تم استيراد معظم العملاء. البعض لم يتم استيرادهم ، وهذه هى القائمة";
$lang["customers_excel_import_success"] = "تم استيراد العملاء بنجاح";
$lang["customers_import_items_excel"] = "استيراد العملا ء من ورقة عمل اكسل";
$lang["customers_mailchimp_activity_click"] = "";
$lang["customers_mailchimp_activity_lastopen"] = "";
$lang["customers_mailchimp_activity_open"] = "";
$lang["customers_mailchimp_activity_total"] = "";
$lang["customers_mailchimp_activity_unopen"] = "";
$lang["customers_mailchimp_email_client"] = "";
$lang["customers_mailchimp_info"] = "";
$lang["customers_mailchimp_member_rating"] = "";
$lang["customers_mailchimp_status"] = "";
$lang["customers_mailchimp_vip"] = "";
$lang["customers_max"] = "";
$lang["customers_min"] = "";
$lang["customers_new"] = "عميل جديد";
$lang["customers_none_selected"] = "لم تختار عملاء للحذف";
$lang["customers_one_or_multiple"] = "عميل/عملاء";
$lang["customers_quantity"] = "";
$lang["customers_stats_info"] = "";
$lang["customers_successful_adding"] = "لقد أضفت عميل بنجاح";
$lang["customers_successful_deleted"] = "لقد قمت بالحذف بنجاح";
$lang["customers_successful_updating"] = "لقد قمت بتحديث بيانات العميل بنجاح";
$lang["customers_tax_code"] = "";
$lang["customers_taxable"] = "خاضع للضريبة";
$lang["customers_total"] = "المجموع";
$lang["customers_update"] = "تحديث بيانات عميل";
$lang["customers_import_items_excel"] = "استيراد العملا ء من ورقة عمل اكسل";
$lang["customers_excel_import_failed"] = "فشل الإستيراد من اكسل";
$lang["customers_excel_import_nodata_wrongformat"] = "الملف الذى رفعته إما فارغ أو أنه مختلف البنية";
$lang["customers_excel_import_success"] = "تم استيراد العملاء بنجاح";
$lang["customers_excel_import_partially_failed"] = "تم استيراد معظم العملاء. البعض لم يتم استيرادهم ، وهذه هى القائمة";
$lang["rewards_package"] = "";

View File

@@ -1,21 +1,22 @@
<?php
$lang["datepicker_today"] = "اليوم";
$lang["datepicker_weekstart"] = "0";
$lang["datepicker_all_time"] = "جميع الأوقات";
$lang["datepicker_last_7"] = "أخر سبعة أيام";
$lang["datepicker_last_30"] = "أخر 30 يوم";
$lang["datepicker_last_month"] = "أخر شهر";
$lang["datepicker_last_year"] = "السنة الماضية";
$lang["datepicker_this_month"] = "هذا الشهر";
$lang["datepicker_this_month_last_year"] = "نفس الشهر من العام الماضي";
$lang["datepicker_same_month_to_today"] = "هذا الشهر حتى اليوم";
$lang["datepicker_same_month_to_same_day_last_year"] = "نفس الشهر حتى اليوم من السنة الماضية";
$lang["datepicker_this_year"] = "السنة الحالية";
$lang["datepicker_today_last_year"] = "نفس اليوم من السنة الماضية";
$lang["datepicker_yesterday"] = "أمس";
$lang["datepicker_apply"] = "تطبيق";
$lang["datepicker_cancel"] = "إلغاء";
$lang["datepicker_from"] = "من";
$lang["datepicker_to"] = "إلى";
$lang["datepicker_custom"] = "مخصص";
$lang["datepicker_from"] = "من";
$lang["datepicker_last_30"] = "أخر 30 يوم";
$lang["datepicker_last_7"] = "أخر سبعة أيام";
$lang["datepicker_last_financial_year"] = "";
$lang["datepicker_last_month"] = "أخر شهر";
$lang["datepicker_last_year"] = "السنة الماضية";
$lang["datepicker_same_month_last_year"] = "نفس الشهر من العام الماضي";
$lang["datepicker_same_month_to_same_day_last_year"] = "نفس الشهر حتى اليوم من السنة الماضية";
$lang["datepicker_this_financial_year"] = "";
$lang["datepicker_this_month"] = "هذا الشهر";
$lang["datepicker_this_year"] = "السنة الحالية";
$lang["datepicker_to"] = "إلى";
$lang["datepicker_today"] = "اليوم";
$lang["datepicker_today_last_year"] = "نفس اليوم من السنة الماضية";
$lang["datepicker_weekstart"] = "0";
$lang["datepicker_yesterday"] = "أمس";

View File

@@ -2,7 +2,10 @@
$lang["employees_basic_information"] = "المعلومات الأساسية للموظف";
$lang["employees_cannot_be_deleted"] = "لايمكن حذف الموظفين ، واحد أو أكثر من المظفين قام بإجراء مبيعات :)";
$lang["employees_change_password"] = "";
$lang["employees_confirm_delete"] = "هل أنت متأكد أنك تريد حذف الموظفين المختارين؟";
$lang["employees_current_password"] = "";
$lang["employees_current_password_invalid"] = "";
$lang["employees_employee"] = "موظف";
$lang["employees_error_adding_updating"] = "خطاء فى إضافة/تعديل موظف";
$lang["employees_error_deleting_demo_admin"] = "لايمكن حذف المستخدم admin الخاص بنسخة العرض";
@@ -14,15 +17,18 @@ $lang["employees_one_or_multiple"] = "موظف/موظفين";
$lang["employees_password"] = "كلمة السر";
$lang["employees_password_minlength"] = "كلمة السر يجب أن تكون 8 حروف على الأقل";
$lang["employees_password_must_match"] = "كلمتى السر لا تتطابقان";
$lang["employees_password_not_must_match"] = "";
$lang["employees_password_required"] = "كلمة السر مطلوبة";
$lang["employees_permission_desc"] = "قم بإضافة الصلاحيات بلإختيار من الأسفل";
$lang["employees_permission_info"] = "اذونات المستخدمين";
$lang["employees_repeat_password"] = "كلمة السر مرة اخرى";
$lang["employees_subpermission_required"] = "يجب إختيار صلاحية واحدة على الأقل لكل قسم";
$lang["employees_successful_adding"] = "لقد تم إضافة الموظف بنجاح";
$lang["employees_successful_change_password"] = "";
$lang["employees_successful_deleted"] = "لقد تم حذف الموظف بنجاح";
$lang["employees_successful_updating"] = "لقد تم تحديث بيانات الموظف بنجاح";
$lang["employees_unsuccessful_change_password"] = "";
$lang["employees_update"] = "تحديث بيانات موظف";
$lang["employees_username"] = "اسم المستخدم";
$lang["employees_username_minlength"] = "اسم المستخدم يجب أن يكون 5 حروف على الأقل";
$lang["employees_username_required"] = "اسم المستخدم مطلوب";
$lang["employees_subpermission_required"] = "يجب إختيار صلاحية واحدة على الأقل لكل قسم";

View File

@@ -0,0 +1,9 @@
<?php
$lang["enum_half_down"] = "";
$lang["enum_half_even"] = "";
$lang["enum_half_five"] = "";
$lang["enum_half_odd"] = "";
$lang["enum_half_up"] = "";
$lang["enum_round_down"] = "";
$lang["enum_round_up"] = "";

View File

@@ -0,0 +1,18 @@
<?php
$lang["alpha_dash"] = "";
$lang["alpha_numeric"] = "";
$lang["exact_length"] = "";
$lang["greater_than"] = "";
$lang["is_natural"] = "";
$lang["is_natural_no_zero"] = "";
$lang["is_numeric"] = "";
$lang["is_unique"] = "";
$lang["less_than"] = "";
$lang["max_length"] = "";
$lang["min_length"] = "";
$lang["regex_match"] = "";
$lang["valid_email"] = "";
$lang["valid_emails"] = "";
$lang["valid_ip"] = "";
$lang["valid_url"] = "";

View File

@@ -3,10 +3,10 @@
$lang["giftcards_add_minus"] = "المخزن المضاف أو المطروح منه";
$lang["giftcards_allow_alt_description"] = "السماح بوصف بديل";
$lang["giftcards_amazon"] = "Amazon";
$lang["giftcards_remaining_balance"] = "كارت الهدية %1 القيمة المتبقية منه %2!";
$lang["giftcards_bulk_edit"] = "تحرير جماعى";
$lang["giftcards_cannot_be_deleted"] = "لايمكن حذف بطاقات الهدية المختارة، واحد أو أكثر منها لديه مبيعات";
$lang["giftcards_cannot_find_giftcard"] = "لايمكن إيجاد معلومات حول كارت الهدية";
$lang["giftcards_cannot_use"] = "Giftcard %1 cannot be used for this sale. Invalid Customer!";
$lang["giftcards_card_value"] = "القيمة";
$lang["giftcards_category"] = "الفئة";
$lang["giftcards_change_all_to_allow_alt_desc"] = "السماح بوصف بديل للكل";
@@ -47,6 +47,7 @@ $lang["giftcards_one_or_multiple"] = "بطاقة/بطاقات الهدية";
$lang["giftcards_person_id"] = "العميل";
$lang["giftcards_quantity"] = "الكمية";
$lang["giftcards_quantity_required"] = "الكمية مطلوبة";
$lang["giftcards_remaining_balance"] = "كارت الهدية %1 القيمة المتبقية منه %2!";
$lang["giftcards_reorder_level"] = "نقطة إعادة الطلب";
$lang["giftcards_retrive_giftcard_info"] = "إسترجاع بيانات بطاقة هدية";
$lang["giftcards_sales_tax_1"] = "ضريبة المبيعات";

View File

@@ -1,20 +1,30 @@
<?php
$lang["item_kits_add_item"] = "إضافة مجموعة";
$lang["item_kits_all"] = "";
$lang["item_kits_cannot_be_deleted"] = "لايمكن حذف مجموعة/مجموعات";
$lang["item_kits_confirm_delete"] = "هل أنت متأكد أنك تريد حذف المجموعة؟";
$lang["item_kits_description"] = "وصف المجموعة";
$lang["item_kits_discount_percent"] = "";
$lang["item_kits_error_adding_updating"] = "خطاء فى إضافة/تحديث المجموعة";
$lang["item_kits_find_kit_item"] = "";
$lang["item_kits_info"] = "معلومات المجموعة";
$lang["item_kits_item"] = "صنف";
$lang["item_kits_items"] = "أصناف";
$lang["item_kits_kit"] = "كود المجموعة";
$lang["item_kits_kit_and_components"] = "";
$lang["item_kits_kit_and_stock"] = "";
$lang["item_kits_kit_only"] = "";
$lang["item_kits_name"] = "اسم المجموعة";
$lang["item_kits_new"] = "مجموعة جديده";
$lang["item_kits_no_item_kits_to_display"] = "لاتوجد مجموعات لعرضها";
$lang["item_kits_none_selected"] = "لم تقم بإختيار مجموعات";
$lang["item_kits_one_or_multiple"] = "مجموعة/مجموعات";
$lang["item_kits_price_option"] = "";
$lang["item_kits_priced_only"] = "";
$lang["item_kits_print_option"] = "";
$lang["item_kits_quantity"] = "الكمية";
$lang["item_kits_sequence"] = "";
$lang["item_kits_successful_adding"] = "لقد تم إضافة المجموعة بنجاح";
$lang["item_kits_successful_deleted"] = "لقد تم حذف المجموعة بنجاح";
$lang["item_kits_successful_updating"] = "لقد تم تحديث بيانات المجموعة بنجاح";

View File

@@ -14,6 +14,7 @@ $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"] = "تغيير الصورة";
$lang["items_confirm_bulk_edit"] = "هل أنت متأكد انك تريد تحرير كل الأصناف المختارة؟";
$lang["items_confirm_bulk_edit_wipe_taxes"] = "سوف يتم مسح معلومات الضرائب لجميع الأصناف";
$lang["items_confirm_delete"] = "هل أنت متأكد انك تريد حذف كل الأصناف المختارة؟";
@@ -27,24 +28,31 @@ $lang["items_details_count"] = "حركة الصنف";
$lang["items_do_nothing"] = "لاتفعل شئ";
$lang["items_edit_fields_you_want_to_update"] = "قم بتحديث الحقول المراد تحديثها لكل الأصناف المختارة";
$lang["items_edit_multiple_items"] = "تحريد مجموعة اصناف";
$lang["items_empty_upc_items"] = "تفريغ اصناف UPC";
$lang["items_error_adding_updating"] = "خطاء فى إضافة/تحديث صنف";
$lang["items_error_updating_multiple"] = "خطاء فى تحديث بيانات أصناف";
$lang["items_excel_import_failed"] = "فشل الإستيراد من اكسل";
$lang["items_excel_import_nodata_wrongformat"] = "الملف الذى رفعته إما فارغ أو أنه مختلف البنية";
$lang["items_excel_import_success"] = "تم استيراد الأصناف بنجاح";
$lang["items_excel_import_partially_failed"] = "تم استيراد معظم الأصناف. البعض لم يتم استيرادهم ، وهذه هى القائمة";
$lang["items_excel_import_success"] = "تم استيراد الأصناف بنجاح";
$lang["items_generate_barcodes"] = "توليد أكواد الباركود";
$lang["items_image"] = "صورة";
$lang["items_import_items_excel"] = "استيراد من اكسل";
$lang["items_info_provided_by"] = "المعلومات مقدمة بواسطة";
$lang["items_inventory"] = "المخزن";
$lang["items_inventory_comments"] = "تعليقات";
$lang["items_inventory_data_tracking"] = "";
$lang["items_inventory_date"] = "";
$lang["items_inventory_employee"] = "";
$lang["items_inventory_in_out_quantity"] = "";
$lang["items_inventory_remarks"] = "";
$lang["items_is_deleted"] = "حذفت";
$lang["items_is_serialized"] = "الصنف له رقم مسلسل";
$lang["items_item"] = "صنف";
$lang["items_item_number"] = "الباركود UPC/EAN/ISBN";
$lang["items_item_number_duplicate"] = "رقم الصنف موجود فى قاعدة البيانات من قبل";
$lang["items_kit"] = "";
$lang["items_location"] = "مكان";
$lang["items_empty_upc_items"] = "تفريغ اصناف UPC";
$lang["items_low_inventory_items"] = "الأصناف التى لا يوجد لها مخزون";
$lang["items_manually_editing_of_quantity"] = "تحرير الكمية يدوياً";
$lang["items_name"] = "اسم الصنف";
@@ -54,6 +62,7 @@ $lang["items_no_description_items"] = "الأصناف التى بلا وصف";
$lang["items_no_items_to_display"] = "لايوجد أصناف لعرضها";
$lang["items_none"] = "لاشىء";
$lang["items_none_selected"] = "لم تختار أى أصناف لتحريرها";
$lang["items_nonstock"] = "";
$lang["items_number_information"] = "رقم الصنف";
$lang["items_number_required"] = "مطلوب UPC/EAN/ISBN رقم الباركود ";
$lang["items_one_or_multiple"] = "صنف/أصناف";
@@ -61,15 +70,21 @@ $lang["items_quantity"] = "الكمية";
$lang["items_quantity_number"] = "الكمية يجب أن تكون رقم";
$lang["items_quantity_required"] = "الكمية مطلوبة";
$lang["items_receiving_quantity"] = "الكمية المستلمة";
$lang["items_remove_image"] = "ازالة الصورة";
$lang["items_reorder_level"] = "نقطة إعادة الطلب";
$lang["items_reorder_level_number"] = "نقطة إعادة الطلب يجب أن تكون رقم";
$lang["items_reorder_level_required"] = "نقطة إعادة الطلب مطلوبة";
$lang["items_retrive_item_info"] = "استرجاع بيانات الصنف";
$lang["items_sales_tax_1"] = "ضريبة المبيعات";
$lang["items_sales_tax_2"] = "ضريبة المبيعات 2";
$lang["items_search_custom_items"] = "بحث الحقول المخصصة";
$lang["items_search_attributes"] = "بحث الحقول المخصصة";
$lang["items_search_custom_items"] = "";
$lang["items_select_image"] = "اختار صورة";
$lang["items_serialized_items"] = "أصناف مسلسلة";
$lang["items_standard"] = "";
$lang["items_stock"] = "";
$lang["items_stock_location"] = "مكان المخزون";
$lang["items_stock_type"] = "";
$lang["items_successful_adding"] = "لقد تم إضافة صنف بنجاح";
$lang["items_successful_bulk_edit"] = "لقد تم تحديث بيانات صنف/أصناف بنجاح";
$lang["items_successful_deleted"] = "لقد تم الحذف بنجاح";
@@ -80,13 +95,10 @@ $lang["items_tax_2"] = "الضريبة 2";
$lang["items_tax_percent"] = "نسبة الضريبة";
$lang["items_tax_percent_required"] = "نسبة الضريبة مطلوبة";
$lang["items_tax_percents"] = "نسبة/نسب الضريبة";
$lang["items_type"] = "";
$lang["items_unit_price"] = "السعر";
$lang["items_unit_price_number"] = "السعر يجب أن يكون رقم";
$lang["items_unit_price_required"] = "السعر مطلوب";
$lang["items_upc_database"] = "UPC قاعدة بيانات";
$lang["items_update"] = "تحديث بيانات صنف";
$lang["items_use_inventory_menu"] = "استخدام تحديث المخزن";
$lang["items_import_items_excel"] = "استيراد من اكسل";
$lang["items_select_image"] = "اختار صورة";
$lang["items_change_image"] = "تغيير الصورة";
$lang["items_remove_image"] = "ازالة الصورة";

View File

@@ -1,6 +1,9 @@
<?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_password"] = "كلمة السر";

View File

@@ -1,14 +1,14 @@
<?php
$lang["messages_sms_send"] = "إرسال SMS";
$lang["messages_first_name"] = "الإسم الأول";
$lang["messages_last_name"] = "الأسم الأخير";
$lang["messages_phone"] = "رقم المحمول";
$lang["messages_phone_placeholder"] = "رقم/أرقام المحمول هنا...";
$lang["messages_phone_number_required"] = "رقم المحمول مطلوب";
$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"] = "إرسال SMS";
$lang["messages_successfully_sent"] = "تم إرسال الرسالة بنجاح إلى: ";
$lang["messages_unsuccessfully_sent"] = "لم يتم إرسال الرسالة بنجاح إلى: ";

View File

@@ -0,0 +1,7 @@
<?php
$lang["migrate_backup"] = "";
$lang["migrate_failed"] = "";
$lang["migrate_info"] = "";
$lang["migrate_start"] = "";
$lang["migrate_success"] = "";

View File

@@ -13,6 +13,10 @@ $lang["module_item_kits"] = "مجموعات الأصناف";
$lang["module_item_kits_desc"] = "إضافة، تحديث ، بحث و حذف مجموعات الأصناف";
$lang["module_items"] = "الأصناف";
$lang["module_items_desc"] = "إضافة، تحديث ، بحث و حذف الأصناف";
$lang["module_messages"] = "الرسائل";
$lang["module_messages_desc"] = "إرسال رسائل للعملاء ، الموردين او الموظفين";
$lang["module_migrate"] = "";
$lang["module_migrate_desc"] = "";
$lang["module_receivings"] = "استلام الأصناف";
$lang["module_receivings_desc"] = "معالجة أوامر الشراء و استلام الأصناف";
$lang["module_reports"] = "التقارير";
@@ -21,5 +25,5 @@ $lang["module_sales"] = "المبيعات";
$lang["module_sales_desc"] = "معالجة المبيعات و المرتجعات";
$lang["module_suppliers"] = "الموردين";
$lang["module_suppliers_desc"] = "إضافة، تحديث ، بحث و حذف مجموعات الموردين";
$lang["module_messages"] = "الرسائل";
$lang["module_messages_desc"] = "إرسال رسائل للعملاء ، الموردين او الموظفين";
$lang["module_taxes"] = "";
$lang["module_taxes_desc"] = "";

View File

@@ -1,17 +1,16 @@
<?php
$lang["receivings_transaction_failed"] = "حركات الإستلام فشلت";
$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_confirm_delete"] = "هل أنت متاكد أنك تريد حذف هذا الإستلام؟ سيتم حذف كل الأصناف. لايمكن التراجع بعد الحذف";
$lang["receivings_delete_entire_sale"] = "حذف عملية البيع بالكامل";
$lang["receivings_discount"] = "نسبة الخصم";
$lang["receivings_edit"] = "تحرير";
@@ -22,7 +21,6 @@ $lang["receivings_error_requisition"] = "غير قادر على تحريك ال
$lang["receivings_find_or_scan_item"] = "بحث/مسح باركود صنف";
$lang["receivings_find_or_scan_item_or_receipt"] = "بحث/مسح باركود صنف أو إيصال";
$lang["receivings_id"] = "كود الإستلام";
$lang["receivings_reference"] = "رقم المرجع";
$lang["receivings_item_name"] = "اسم الصنف";
$lang["receivings_mode"] = "وضع الإستلام";
$lang["receivings_new_supplier"] = "مورد جديد";
@@ -32,6 +30,7 @@ $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"] = "إرتجاع لمورد";
@@ -43,10 +42,11 @@ $lang["receivings_stock_source"] = "مصدر المخزون";
$lang["receivings_successfully_deleted"] = "لقد تم الحذف";
$lang["receivings_successfully_updated"] = "لقد تم التحديث";
$lang["receivings_supplier"] = "المورد";
$lang["receivings_supplier_email"] = "البريد الإلكتروني";
$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"] = "تحديث";

View File

@@ -5,6 +5,8 @@ $lang["reports_categories"] = "التصنيفات";
$lang["reports_categories_summary_report"] = "تقرير ملخص التصنيفات";
$lang["reports_category"] = "تصنيف";
$lang["reports_comments"] = "التعليقات";
$lang["reports_cost"] = "التكلفة";
$lang["reports_cost_price"] = "سعر التكلفة";
$lang["reports_count"] = "عدد";
$lang["reports_customer"] = "عميل";
$lang["reports_customers"] = "عملاء";
@@ -20,6 +22,7 @@ $lang["reports_discount"] = "الخصم";
$lang["reports_discount_percent"] = "نسبة الخصم";
$lang["reports_discounts"] = "الخصومات";
$lang["reports_discounts_summary_report"] = "تقرير ملخص الخصومات";
$lang["reports_earned"] = "";
$lang["reports_employee"] = "موظف";
$lang["reports_employees"] = "الموظفين";
$lang["reports_employees_summary_report"] = "تقرير ملخص الموظفين";
@@ -31,6 +34,7 @@ $lang["reports_inventory_reports"] = "تقارير المخزن";
$lang["reports_inventory_summary"] = "ملخص المخزن";
$lang["reports_inventory_summary_report"] = "تقرير ملخص المخزن";
$lang["reports_item"] = "صنف";
$lang["reports_item_count"] = "تصفية عداد الصنف";
$lang["reports_item_name"] = "اسم الصنف";
$lang["reports_item_number"] = "رقم الصنف";
$lang["reports_items"] = "الأصناف";
@@ -39,14 +43,16 @@ $lang["reports_items_received"] = "الأصناف مستلمة";
$lang["reports_items_summary_report"] = "تقرير ملخص الأصناف";
$lang["reports_low_inventory"] = "النواقص";
$lang["reports_low_inventory_report"] = "تقرير نواقص المخزون";
$lang["reports_more_than_zero"] = "أكثر من صفر";
$lang["reports_name"] = "الاسم";
$lang["reports_no_reports_to_display"] = "لايوجد أصناف لعرضها";
$lang["reports_payment_type"] = "طريقة الدفع";
$lang["reports_payments"] = "المدفوعات";
$lang["reports_payments_summary_report"] = "ملخص المدفوعات";
$lang["reports_profit"] = "الربح";
$lang["reports_cost"] = "التكلفة";
$lang["reports_quantity"] = "الكمية المشتراه";
$lang["reports_quantity_purchased"] = "المستلم";
$lang["reports_quotes"] = "";
$lang["reports_received_by"] = "مستلمة بواسطة";
$lang["reports_receiving_id"] = "كود الاستلام";
$lang["reports_receiving_type"] = "نوع الاستلام";
@@ -75,6 +81,7 @@ $lang["reports_serial_number"] = "مسلسل";
$lang["reports_sold_by"] = "البائع";
$lang["reports_sold_to"] = "مباع الى";
$lang["reports_stock_location"] = "مكان المخزون";
$lang["reports_sub_total_value"] = "المجموع الفرعى";
$lang["reports_subtotal"] = "المجموع الفرعى";
$lang["reports_summary_reports"] = "تقارير ملخصة";
$lang["reports_supplied_by"] = "مورده بواسطة";
@@ -86,12 +93,8 @@ $lang["reports_tax_percent"] = "نسبة الضريبة";
$lang["reports_taxes"] = "الضرائب";
$lang["reports_taxes_summary_report"] = "تقرير ملخص الضرائب";
$lang["reports_total"] = "الإجمالى";
$lang["reports_type"] = "النوع";
$lang["reports_item_count"] = "تصفية عداد الصنف";
$lang["reports_cost_price"] = "سعر التكلفة";
$lang["reports_unit_price"] = "السعر";
$lang["reports_sub_total_value"] = "المجموع الفرعى";
$lang["reports_total_inventory_value"] = "إجمالى قيمة المخزن";
$lang["reports_type"] = "النوع";
$lang["reports_unit_price"] = "السعر";
$lang["reports_used"] = "";
$lang["reports_zero_and_less"] = "صفر و أقل";
$lang["reports_more_than_zero"] = "أكثر من صفر";
$lang["reports_no_reports_to_display"] = "لايوجد أصناف لعرضها";

View File

@@ -1,13 +1,18 @@
<?php
$lang["customers_available_points"] = "";
$lang["rewards_package"] = "";
$lang["rewards_remaining_balance"] = "";
$lang["sales_add_payment"] = "إضافة دفع";
$lang["sales_amount_due"] = "المبلغ المطلوب";
$lang["sales_amount_tendered"] = "المبلغ المدفوع";
$lang["sales_cancel_sale"] = "الغاء عملية البيع";
$lang["sales_cash"] = "نقدى";
$lang["sales_cash_filter"] = "نقدى";
$lang["sales_change_due"] = "الباقى";
$lang["sales_check"] = "شيك";
$lang["sales_check_balance"] = "تذكير بموعد الشيك";
$lang["sales_check_filter"] = "";
$lang["sales_comment"] = "تعليق";
$lang["sales_comments"] = "تعليقات";
$lang["sales_complete_sale"] = "إتمام البيع";
@@ -15,12 +20,14 @@ $lang["sales_confirm_cancel_sale"] = "هل أنت متأكد من الغاء ع
$lang["sales_confirm_delete"] = "هل تريد حذف عمليات البيع المختارة؟";
$lang["sales_credit"] = "بطاقة إئتمانية";
$lang["sales_customer"] = "العميل";
$lang["sales_customer_email"] = "البريد الإلكترونى";
$lang["sales_customer_address"] = "العنوان";
$lang["sales_customer_location"] = "المكان";
$lang["sales_customer_discount"] = "الخصم";
$lang["sales_customer_email"] = "البريد الإلكترونى";
$lang["sales_customer_location"] = "المكان";
$lang["sales_customer_mailchimp_status"] = "";
$lang["sales_customer_total"] = "المجموع";
$lang["sales_date"] = "تاريخ البيع";
$lang["sales_date_range"] = "الفترة الزمنية";
$lang["sales_date_required"] = "يجب إدخال تاريخ صحيح";
$lang["sales_date_type"] = "التاريخ مطلوب";
$lang["sales_debit"] = "بطاقة خصم";
@@ -29,27 +36,31 @@ $lang["sales_delete_entire_sale"] = "حذف عملية البيع بالكامل
$lang["sales_delete_successful"] = "لقد تم حذف عملية البيع بنجاح";
$lang["sales_delete_unsuccessful"] = "لقد فشل حذف عملية البيع";
$lang["sales_description_abbrv"] = "الوصف";
$lang["sales_discard_quote"] = "";
$lang["sales_discount"] = "خصم %";
$lang["sales_discount_included"] = "% خصم";
$lang["sales_discount"] = "الخصم";
$lang["sales_discount_short"] = "%";
$lang["sales_due"] = "";
$lang["sales_due_filter"] = "";
$lang["sales_edit"] = "تحرير";
$lang["sales_edit_item"] = "تحرير صنف";
$lang["sales_edit_sale"] = "تحرير عملية بيع";
$lang["sales_email_receipt"] = "إرسال الايصال بالبريد الالكترونى";
$lang["sales_employee"] = "الموظف";
$lang["sales_entry"] = "";
$lang["sales_error_editing_item"] = "خطاء فى تحرير الصنف";
$lang["sales_find_or_scan_item"] = "بحث/مسح باركود صنف";
$lang["sales_find_or_scan_item_or_receipt"] = "بحث/مسح باركود صنف أو ايصال";
$lang["sales_giftcard"] = "بطاقة هدية";
$lang["sales_giftcard_balance"] = "رصيد بطاقة الهدية";
$lang["sales_giftcard_number"] = "رقم بطاقة الهدية";
$lang["sales_group_by_category"] = "";
$lang["sales_group_by_type"] = "";
$lang["sales_id"] = "كود عملية البيع";
$lang["sales_invoice"] = "فاتورة";
$lang["sales_invoice_confirm"] = "هذه الفاتورة سوف ترسل إلى";
$lang["sales_invoice_enable"] = "إنشاء فاتورة";
$lang["sales_invoice_filter"] = "الفواتير";
$lang["sales_cash_filter"] = "نقدى";
$lang["sales_invoice_no_email"] = "هذا العميل ليس لدية بريد الكترونى صالح";
$lang["sales_invoice_number"] = "فاتورة رقم #";
$lang["sales_invoice_number_duplicate"] = "من فضلك أدخل رقم فاتورة غير مكرر";
@@ -69,8 +80,8 @@ $lang["sales_no_description"] = "لايوجد";
$lang["sales_no_filter"] = "الكل";
$lang["sales_no_items_in_cart"] = "لايوجد أصناف فى السلة";
$lang["sales_no_sales_to_display"] = "لاتوجد عمليات بيع لعرضها";
$lang["sales_none_selected"] = "لم تقم بإختيار أى عمليات بيع لحذفها";
$lang["sales_one_or_multiple"] = "عمليات بيع";
$lang["sales_takings"] = "الإيراد";
$lang["sales_payment"] = "طريقة الدفع";
$lang["sales_payment_amount"] = "المبلغ";
$lang["sales_payment_not_cover_total"] = "المبلغ المدفوع لايغطى المبلغ الإجمالى";
@@ -79,8 +90,12 @@ $lang["sales_payments_total"] = "إجمالى المدفوعات";
$lang["sales_price"] = "السعر";
$lang["sales_print_after_sale"] = "اطبع بعد عملية البيع";
$lang["sales_quantity"] = "الكمية";
$lang["sales_quantity_less_than_zero"] = "تحذير! الكمية المطلوبة غير كافية، بإمكانك إتمام عملية البيع ، لكن تحقق من مخزنك.";
$lang["sales_quantity_less_than_reorder_level"] = "إيصال البيع";
$lang["sales_quantity_less_than_zero"] = "تحذير! الكمية المطلوبة غير كافية، بإمكانك إتمام عملية البيع ، لكن تحقق من مخزنك.";
$lang["sales_quote"] = "";
$lang["sales_quote_number"] = "";
$lang["sales_quote_sent"] = "";
$lang["sales_quote_unsent"] = "";
$lang["sales_receipt"] = "عملية بيع #";
$lang["sales_receipt_number"] = "إيصال بيع";
$lang["sales_receipt_sent"] = "تم إرسال الإيصال إلى";
@@ -88,11 +103,16 @@ $lang["sales_receipt_unsent"] = "فشل إرسال الإيصال إلى";
$lang["sales_register"] = "مسجل المبيعات";
$lang["sales_remove_customer"] = "حذف عميل";
$lang["sales_return"] = "إرتجاع";
$lang["sales_rewards"] = "";
$lang["sales_rewards_balance"] = "";
$lang["sales_sale"] = "بيع";
$lang["sales_sale_by_invoice"] = "";
$lang["sales_sale_for_customer"] = "العميل: ";
$lang["sales_sale_time"] = "الوقت";
$lang["sales_sales_tax"] = "";
$lang["sales_select_customer"] = "اختيار عميل (اختيارى)";
$lang["sales_send_invoice"] = "إرسال الفاتورة";
$lang["sales_send_quote"] = "";
$lang["sales_send_receipt"] = "إرسال إيصال";
$lang["sales_serial"] = "مسلسل";
$lang["sales_show_invoice"] = "عرض الفاتورة";
@@ -107,6 +127,8 @@ $lang["sales_successfully_updated"] = "لقد تم تحديث بيانات عم
$lang["sales_suspend_sale"] = "تعليق عملية البيع";
$lang["sales_suspended_sale_id"] = "كود عملية البيع";
$lang["sales_suspended_sales"] = "المبيعات المعلقة";
$lang["sales_table"] = "";
$lang["sales_takings"] = "الإيراد";
$lang["sales_tax"] = "ضريبة";
$lang["sales_tax_percent"] = "ضريبة %";
$lang["sales_total"] = "المجموع";
@@ -119,5 +141,3 @@ $lang["sales_unsuccessfully_updated"] = "فشل عملية تحديث عملية
$lang["sales_unsuspend"] = "إلغاء تعليق";
$lang["sales_unsuspend_and_delete"] = "إلغاء تعليق وحذف";
$lang["sales_update"] = "تحديث";
$lang["sales_date_range"] = "الفترة الزمنية";
$lang["sales_none_selected"] = "لم تقم بإختيار أى عمليات بيع لحذفها";

View File

@@ -1,10 +1,10 @@
<?php
$lang["suppliers_account_number"] = "حساب رقم#";
$lang["suppliers_agency_name"] = "اسم الوكالة";
$lang["suppliers_cannot_be_deleted"] = "لايمكن حذف المورد/الموردين لوجود مبيعات مرتبطة بهم";
$lang["suppliers_company_name"] = "اسم الشركة";
$lang["suppliers_company_name_required"] = "اسم الشركة مطلوب";
$lang["suppliers_agency_name"] = "اسم الوكالة";
$lang["suppliers_confirm_delete"] = "هل تريد حقا حذف هؤلاء الموردين؟";
$lang["suppliers_error_adding_updating"] = "خطاء فى إضافة/تحديث المورد";
$lang["suppliers_new"] = "مورد جديد";

View File

@@ -0,0 +1,31 @@
<?php
$lang["taxes_add_exception"] = "";
$lang["taxes_confirm_delete"] = "";
$lang["taxes_default_tax_category"] = "";
$lang["taxes_error_adding_updating"] = "";
$lang["taxes_new"] = "";
$lang["taxes_no_taxes_to_display"] = "";
$lang["taxes_round_half_down"] = "";
$lang["taxes_round_half_even"] = "";
$lang["taxes_round_half_odd"] = "";
$lang["taxes_round_half_up"] = "";
$lang["taxes_rounding_code"] = "";
$lang["taxes_sales_tax"] = "";
$lang["taxes_sales_tax_by_invoice"] = "";
$lang["taxes_successful_deleted"] = "";
$lang["taxes_tax_category"] = "";
$lang["taxes_tax_code"] = "";
$lang["taxes_tax_code_cannot_be_deleted"] = "";
$lang["taxes_tax_code_name"] = "";
$lang["taxes_tax_code_required"] = "";
$lang["taxes_tax_code_successful_deleted"] = "";
$lang["taxes_tax_code_successful_updated"] = "";
$lang["taxes_tax_code_successful_updating"] = "";
$lang["taxes_tax_code_successfully_added"] = "";
$lang["taxes_tax_code_type"] = "";
$lang["taxes_tax_rate"] = "";
$lang["taxes_tax_rate_numeric"] = "";
$lang["taxes_tax_rate_required"] = "";
$lang["taxes_update"] = "";
$lang["taxes_vat_tax"] = "";

View File

@@ -1,10 +1,10 @@
<?php
$lang["tables_loading"] = "Loading, please wait...";
$lang["tables_rows_per_page"] = "{0} rows per page";
$lang["tables_page_from_to"] = "Showing {0} to {1} of {2} rows";
$lang["tables_hide_show_pagination"] = "Hide/Show pagination";
$lang["tables_refresh"] = "Refresh";
$lang["tables_toggle"] = "Toggle";
$lang["tables_columns"] = "Columns";
$lang["tables_all"] = "All";
$lang["tables_columns"] = "Columns";
$lang["tables_hide_show_pagination"] = "Hide/Show pagination";
$lang["tables_loading"] = "Loading, please wait...";
$lang["tables_page_from_to"] = "Showing {0} to {1} of {2} rows";
$lang["tables_refresh"] = "Refresh";
$lang["tables_rows_per_page"] = "{0} rows per page";
$lang["tables_toggle"] = "Toggle";

View File

@@ -10,11 +10,14 @@ $lang["common_confirm_search"] = "You have selected one or more rows, these will
$lang["common_country"] = "Country";
$lang["common_date"] = "Date";
$lang["common_delete"] = "Delete";
$lang["common_print"] = "Print";
$lang["common_det"] = "details";
$lang["common_download_import_template"] = "Download Import Excel Template (CSV)";
$lang["common_edit"] = "edit";
$lang["common_email"] = "Email";
$lang["common_email_invalid_format"] = "The email address is not in the proper format";
$lang["common_export_excel"] = "Excel Export";
$lang["common_export_excel_no"] = "No";
$lang["common_export_excel_yes"] = "Yes";
$lang["common_fields_required_message"] = "Fields in red are required";
$lang["common_first_name"] = "First Name";
$lang["common_first_name_required"] = "The first name is a required field.";
@@ -22,6 +25,13 @@ $lang["common_first_page"] = "First";
$lang["common_gender"] = "Gender";
$lang["common_gender_female"] = "F";
$lang["common_gender_male"] = "M";
$lang["common_id"] = "Id";
$lang["common_import"] = "Import";
$lang["common_import_change_file"] = "Change";
$lang["common_import_excel"] = "Excel Import";
$lang["common_import_full_path"] = "Full path to excel file required";
$lang["common_import_remove_file"] = "Remove";
$lang["common_import_select_file"] = "Select file";
$lang["common_inv"] = "inv";
$lang["common_last_name"] = "Last Name";
$lang["common_last_name_required"] = "The last name is a required field";
@@ -38,28 +48,20 @@ $lang["common_phone_number_required"] = "";
$lang["common_please_visit_my"] = "Please visit my";
$lang["common_powered_by"] = "Powered by";
$lang["common_price"] = "Price";
$lang["common_print"] = "Print";
$lang["common_remove"] = "Remove";
$lang["common_required"] = "Required";
$lang["common_return_policy"] = "Return Policy";
$lang["common_search"] = "Search";
$lang["common_search_options"] = "Search options";
$lang["common_searched_for"] = "Searched for";
$lang["common_state"] = "State";
$lang["common_submit"] = "Submit";
$lang["common_total_spent"] = "Total Spent";
$lang["common_unknown"] = "Unknown";
$lang["common_view_recent_sales"] = "View Recent Sales";
$lang["common_website"] = "website";
$lang["common_welcome"] = "Welcome";
$lang["common_welcome_message"] = "Welcome to OSPOS, click a module below to get started!";
$lang["common_you_are_using_ospos"] = "You are using Open Source Point Of Sale Version";
$lang["common_zip"] = "Zip";
$lang["common_import"] = "Import";
$lang["common_download_import_template"] = "Download Import Excel Template (CSV)";
$lang["common_import_excel"] = "Excel Import";
$lang["common_import_full_path"] = "Full path to excel file required";
$lang["common_import_select_file"] = "Select file";
$lang["common_import_change_file"] = "Change";
$lang["common_import_remove_file"] = "Remove";
$lang["common_export_excel"] = "Excel Export";
$lang["common_export_excel_yes"] = "Yes";
$lang["common_export_excel_no"] = "No";
$lang["common_required"] = "Required";
$lang["common_id"] = "Id";

View File

@@ -11,12 +11,14 @@ $lang["config_barcode_configuration"] = "Barcode Configuration";
$lang["config_barcode_content"] = "Barcode Content";
$lang["config_barcode_first_row"] = "Row 1";
$lang["config_barcode_font"] = "Font";
$lang["config_barcode_formats"] = "Input Formats";
$lang["config_barcode_generate_if_empty"] = "Generate if empty";
$lang["config_barcode_height"] = "Height (px)";
$lang["config_barcode_id"] = "Item Id/Name";
$lang["config_barcode_info"] = "Barcode Configuration Information";
$lang["config_barcode_layout"] = "Barcode Layout";
$lang["config_barcode_name"] = "Name";
$lang["config_barcode_number"] = "UPC/EAN/ISBN";
$lang["config_barcode_number"] = "Barcode";
$lang["config_barcode_number_in_row"] = "Number in row";
$lang["config_barcode_page_cellspacing"] = "Display page cellspacing";
$lang["config_barcode_page_width"] = "Display page width";
@@ -26,22 +28,25 @@ $lang["config_barcode_second_row"] = "Row 2";
$lang["config_barcode_third_row"] = "Row 3";
$lang["config_barcode_type"] = "Barcode Type";
$lang["config_barcode_width"] = "Width (px)";
$lang["config_barcode_generate_if_empty"] = "Generate if empty";
$lang["config_bottom"] = "Bottom";
$lang["config_cash_decimals"] = "Cash Decimals";
$lang["config_cash_decimals_tooltip"] = "If cash decimals and currency decimals are the same then no cash rounding will take place.";
$lang["config_cash_rounding"] = "Cash Rounding";
$lang["config_center"] = "Center";
$lang["config_comma"] = "comma";
$lang["config_company"] = "Company Name";
$lang["config_company_logo"] = "Company Logo";
$lang["config_company_select_image"] = "Select Image";
$lang["config_company_change_image"] = "Change Image";
$lang["config_company_logo"] = "Company Logo";
$lang["config_company_remove_image"] = "Remove Image";
$lang["config_company_required"] = "Company name is a required field";
$lang["config_company_select_image"] = "Select Image";
$lang["config_company_website_url"] = "Company website is not a valid URL (http://...)";
$lang["config_comma"] = "comma";
$lang["config_country_codes"] = "Country Codes";
$lang["config_country_codes_tooltip"] = "Comma separated list of country codes for nominatim address lookup.";
$lang["config_currency_symbol"] = "Currency Symbol";
$lang["config_currency_decimals"] = "Currency Decimals";
$lang["config_currency_symbol"] = "Currency Symbol";
$lang["config_custom1"] = "Custom Field 1";
$lang["config_custom10"] = "Custom Field 10";
$lang["config_custom2"] = "Custom Field 2";
$lang["config_custom3"] = "Custom Field 3";
$lang["config_custom4"] = "Custom Field 4";
@@ -50,14 +55,20 @@ $lang["config_custom6"] = "Custom Field 6";
$lang["config_custom7"] = "Custom Field 7";
$lang["config_custom8"] = "Custom Field 8";
$lang["config_custom9"] = "Custom Field 9";
$lang["config_custom10"] = "Custom Field 10";
$lang["config_datetimeformat"] = "Date and Time format";
$lang["config_customer_reward"] = "Reward";
$lang["config_customer_reward_duplicate"] = "Please use an unique reward name";
$lang["config_customer_reward_enable"] = "Enable Customer Rewards";
$lang["config_customer_reward_invalid_chars"] = "The reward name can not contain '_'";
$lang["config_customer_reward_required"] = "Reward is a required field";
$lang["config_customer_sales_tax_support"] = "Customer Sales Tax Support";
$lang["config_date_or_time_format"] = "Date and Time Filter";
$lang["config_datetimeformat"] = "Date and Time Format";
$lang["config_decimal_point"] = "Decimal Point";
$lang["config_default_barcode_font_size_number"] = "The default barcode font size must be a number";
$lang["config_default_barcode_font_size_required"] = "The default barcode font size is a required field";
$lang["config_default_barcode_height_number"] = "The default barcode height must be a number";
$lang["config_default_barcode_height_number"] = "The default barcode height must be a number";
$lang["config_default_barcode_height_required"] = "The default barcode height is a required field";
$lang["config_default_barcode_num_in_row_number"] = "The default barcode num in row must be a number";
$lang["config_default_barcode_num_in_row_number"] = "The default barcode number in row must be a number";
$lang["config_default_barcode_num_in_row_required"] = "The default barcode num in row is a required field";
$lang["config_default_barcode_page_cellspacing_number"] = "The default barcode page cellspacing must be a number";
$lang["config_default_barcode_page_cellspacing_required"] = "The default barcode page cellspacing is a required field";
@@ -67,42 +78,74 @@ $lang["config_default_barcode_quality_number"] = "The default barcode quality mu
$lang["config_default_barcode_quality_required"] = "The default barcode quality is a required field";
$lang["config_default_barcode_width_number"] = "The default barcode width must be a number";
$lang["config_default_barcode_width_required"] = "The default barcode width is a required field";
$lang["config_default_origin_tax_code"] = "Default Origin Tax Code";
$lang["config_default_sales_discount"] = "Default Sales Discount %";
$lang["config_default_sales_discount_number"] = "The default sales discount must be a number";
$lang["config_default_sales_discount_required"] = "The default sales discount is a required field";
$lang["config_default_tax_name_number"] = "The default tax name must be a string";
$lang["config_default_tax_name_required"] = "The default tax name is a required field";
$lang["config_default_tax_rate"] = "Default Tax Rate %";
$lang["config_default_tax_rate_1"] = "Tax 1 Rate";
$lang["config_default_tax_rate_2"] = "Tax 2 Rate";
$lang["config_default_tax_rate_number"] = "The default tax rate must be a number";
$lang["config_default_tax_rate_required"] = "The default tax rate is a required field";
$lang["config_default_tax_name_required"] = "The default tax name is a required field";
$lang["config_dinner_table"] = "Table";
$lang["config_dinner_table_duplicate"] = "Please use an unique table name";
$lang["config_dinner_table_enable"] = "Enable Dinner Tables";
$lang["config_dinner_table_invalid_chars"] = "The table name can not contain '_'";
$lang["config_dinner_table_required"] = "Table is a required field";
$lang["config_dot"] = "dot";
$lang["config_email"] = "Email";
$lang["config_email_configuration"] = "Email Configuration";
$lang["config_email_protocol"] = "Protocol";
$lang["config_email_mailpath"] = "Path to Sendmail";
$lang["config_email_smtp_host"] = "SMTP Server";
$lang["config_email_smtp_port"] = "SMTP Port";
$lang["config_email_protocol"] = "Protocol";
$lang["config_email_smtp_crypto"] = "SMTP Encryption";
$lang["config_email_smtp_host"] = "SMTP Server";
$lang["config_email_smtp_pass"] = "SMTP Password";
$lang["config_email_smtp_port"] = "SMTP Port";
$lang["config_email_smtp_timeout"] = "SMTP Timeout (s)";
$lang["config_email_smtp_user"] = "SMTP Username";
$lang["config_email_smtp_pass"] = "SMTP Password";
$lang["config_fax"] = "Fax";
$lang["config_financial_year"] = "Financial Year Start";
$lang["config_financial_year_apr"] = "1st of April";
$lang["config_financial_year_aug"] = "1st of August";
$lang["config_financial_year_dec"] = "1st of December";
$lang["config_financial_year_feb"] = "1st of February";
$lang["config_financial_year_jan"] = "1st of January";
$lang["config_financial_year_jul"] = "1st of July";
$lang["config_financial_year_jun"] = "1st of June";
$lang["config_financial_year_mar"] = "1st of March";
$lang["config_financial_year_may"] = "1st of May";
$lang["config_financial_year_nov"] = "1st of November";
$lang["config_financial_year_oct"] = "1st of October";
$lang["config_financial_year_sep"] = "1st of September";
$lang["config_gcaptcha_enable"] = "Login Page reCAPTCHA";
$lang["config_gcaptcha_secret_key"] = "reCAPTCHA Secret Key";
$lang["config_gcaptcha_secret_key_required"] = "reCAPTCHA Secret Key is a required field";
$lang["config_gcaptcha_site_key"] = "reCAPTCHA Site Key";
$lang["config_gcaptcha_site_key_required"] = "reCAPTCHA Site Key is a required field";
$lang["config_gcaptcha_tooltip"] = "Protect the Login page with Google reCAPTCHA, click the icon for an API key pair";
$lang["config_general"] = "General";
$lang["config_general_configuration"] = "General Configuration";
$lang["config_giftcard_number"] = "Gift Card Number";
$lang["config_giftcard_random"] = "Generate Random";
$lang["config_giftcard_series"] = "Generate in Series";
$lang["config_info"] = "Information";
$lang["config_info_configuration"] = "Store Information";
$lang["config_invoice"] = "Invoice";
$lang["config_invoice_configuration"] = "Invoice Print Settings";
$lang["config_invoice_default_comments"] = "Default Invoice Comments";
$lang["config_invoice_enable"] = "Enable Invoicing";
$lang["config_invoice_email_message"] = "Invoice Email Template";
$lang["config_invoice_enable"] = "Enable Invoicing";
$lang["config_invoice_printer"] = "Invoice Printer";
$lang["config_jsprintsetup_required"] = "Warning! This disabled functionality will only work if you have the FireFox jsPrintSetup addon installed. Save anyway?";
$lang["config_language"] = "Language";
$lang["config_last_used_invoice_number"] = "Last Used Invoice Number";
$lang["config_last_used_quote_number"] = "Last Used Quote Number";
$lang["config_left"] = "Left";
$lang["config_license"] = "License";
$lang["config_license_configuration"] = "License Statement";
$lang["config_line_sequence"] = "Line Sequence";
$lang["config_lines_per_page"] = "Lines Per Page";
$lang["config_lines_per_page_number"] = "";
$lang["config_lines_per_page_required"] = "The lines per page is a required field";
@@ -113,19 +156,30 @@ $lang["config_location"] = "Stock";
$lang["config_location_configuration"] = "Stock Locations";
$lang["config_location_info"] = "Location Configuration Information";
$lang["config_logout"] = "Don't you want to make a backup before logging out? Click [OK] to backup, [Cancel] to logout";
$lang["config_mailchimp"] = "Mailchimp";
$lang["config_mailchimp_api_key"] = "Mailchimp API Key";
$lang["config_mailchimp_configuration"] = "Mailchimp Configuration";
$lang["config_mailchimp_key_successfully"] = "Valid API Key";
$lang["config_mailchimp_key_unsuccessfully"] = "Invalid API Key";
$lang["config_mailchimp_lists"] = "Mailchimp List(s)";
$lang["config_mailchimp_tooltip"] = "Click the icon for an API key";
$lang["config_message"] = "Message";
$lang["config_message_configuration"] = "Message Configuration";
$lang["config_msg_msg"] = "Saved Text Message";
$lang["config_msg_msg_placeholder"] = "If you wish to use a SMS template save your message here. Otherwise leave the box blank.";
$lang["config_msg_uid"] = "SMS-API Username";
$lang["config_msg_uid_required"] = "SMS-API Username is a required field";
$lang["config_msg_pwd"] = "SMS-API Password";
$lang["config_msg_pwd_required"] = "SMS-API Password is a required field";
$lang["config_msg_src"] = "SMS-API Sender ID";
$lang["config_msg_src_required"] = "SMS-API Sender ID is a required field";
$lang["config_msg_uid"] = "SMS-API Username";
$lang["config_msg_uid_required"] = "SMS-API Username is a required field";
$lang["config_none"] = "none";
$lang["config_notify_alignment"] = "Notification Popup Position";
$lang["config_number_format"] = "Number Format";
$lang["config_number_locale"] = "Localisation";
$lang["config_number_locale_invalid"] = "The entered locale is invalid. Check the link in the tooltip to find a sensible value";
$lang["config_number_locale_required"] = "Number Locale is a required field";
$lang["config_number_locale_tooltip"] = "Find a suitable locale through this link";
$lang["config_payment_options_order"] = "Payment Options Order";
$lang["config_phone"] = "Company Phone";
$lang["config_phone_required"] = "Company phone is a required field";
@@ -147,38 +201,47 @@ $lang["config_print_top_margin_required"] = "The default top margin is a require
$lang["config_quantity_decimals"] = "Quantity Decimals";
$lang["config_receipt"] = "Receipt";
$lang["config_receipt_configuration"] = "Receipt Print Settings";
$lang["config_receipt_default"] = "Default";
$lang["config_receipt_font_size"] = "Font Size";
$lang["config_receipt_font_size_number"] = "The font size must be a number";
$lang["config_receipt_font_size_required"] = "The font size is a required field";
$lang["config_receipt_info"] = "Receipt Configuration Information";
$lang["config_receipt_printer"] = "Ticket Printer";
$lang["config_receipt_show_taxes"] = "Show Taxes";
$lang["config_receipt_show_total_discount"] = "Show Total Discount";
$lang["config_receipt_short"] = "Short";
$lang["config_receipt_show_company_name"] = "Show Company Name";
$lang["config_receipt_show_description"] = "Show Description";
$lang["config_receipt_show_serialnumber"] = "Show Serial Number";
$lang["config_receipt_show_taxes"] = "Show Taxes";
$lang["config_receipt_show_total_discount"] = "Show Total Discount";
$lang["config_receipt_template"] = "Receipt Template";
$lang["config_receipt_default"] = "Default";
$lang["config_receipt_short"] = "Short";
$lang["config_receiving_calculate_average_price"] = "Calc avg. Price (Receiving)";
$lang["config_recv_invoice_format"] = "Receivings Invoice Format";
$lang["config_register_mode_default"] = "Default Register Mode";
$lang["config_return_policy_required"] = "Return policy is a required field";
$lang["config_reward"] = "Reward";
$lang["config_reward_configuration"] = "Reward Configuration";
$lang["config_right"] = "Right";
$lang["config_sales_invoice_format"] = "Sales Invoice Format";
$lang["config_sales_quote_format"] = "Sales Quote Format";
$lang["config_saved_successfully"] = "Configuration saved successfully";
$lang["config_saved_unsuccessfully"] = "Configuration saved unsuccessfully";
$lang["config_statistics"] = "Send statistics";
$lang["config_statistics"] = "Send Statistics";
$lang["config_statistics_tooltip"] = "Send statistics for development and feature improvement purposes";
$lang["config_stock_location"] = "Stock location";
$lang["config_stock_location_duplicate"] = "Please use an unique location name";
$lang["config_stock_location_invalid_chars"] = "The stock location name can not contain '_'";
$lang["config_stock_location_required"] = "Stock location is a required field";
$lang["config_table"] = "Table";
$lang["config_table_configuration"] = "Table Configuration";
$lang["config_takings_printer"] = "Takings Printer";
$lang["config_tax"] = "Tax";
$lang["config_tax_category"] = "Tax Category";
$lang["config_tax_category_used"] = "Tax category cannot be deleted because it is being used.";
$lang["config_tax_configuration"] = "Tax Configuration";
$lang["config_tax_decimals"] = "Tax Decimals";
$lang["config_tax_included"] = "Tax Included";
$lang["config_theme"] = "Theme";
$lang["config_thousands_separator"] = "Thousands Separator";
$lang["config_timezone"] = "Timezone";
$lang["config_top"] = "Top";
$lang["config_website"] = "Website";
$lang["config_number_locale"] = "Localisation";
$lang["config_return_policy_required"] = "Return policy is a required field";
$lang["config_number_locale_required"] = "Number Locale is a required field";
$lang["config_number_locale_invalid"] = "The entered locale is invalid. Check the link in the tooltip to find a sensible value";
$lang["config_number_locale_tooltip"] = "Find a suitable locale through this link";
$lang["config_theme"] = "Theme";

View File

@@ -2,23 +2,44 @@
$lang["customers_account_number"] = "Account #";
$lang["customers_account_number_duplicate"] = "This account number is already present in the database";
$lang["customers_available_points"] = "Available Points";
$lang["customers_average"] = "Average spent";
$lang["customers_avg_discount"] = "Average discount";
$lang["customers_basic_information"] = "Information";
$lang["customers_cannot_be_deleted"] = "Could not deleted selected customers, one or more of the selected customers has sales.";
$lang["customers_company_name"] = "Company";
$lang["customers_confirm_delete"] = "Are you sure you want to delete the selected customers?";
$lang["customers_customer"] = "Customer";
$lang["customers_discount"] = "Discount";
$lang["customers_email_duplicate"] = "The email address is already present in the database";
$lang["customers_error_adding_updating"] = "Error adding/updating customer";
$lang["customers_excel_import_failed"] = "Excel import failed";
$lang["customers_excel_import_nodata_wrongformat"] = "Your uploaded file has no data or wrong format";
$lang["customers_excel_import_partially_failed"] = "Most Customers imported. But some were not, here is the list";
$lang["customers_excel_import_success"] = "Import of Customers successful";
$lang["customers_import_items_excel"] = "Import customers from Excel sheet";
$lang["customers_mailchimp_activity_click"] = "Email click";
$lang["customers_mailchimp_activity_lastopen"] = "Last open email";
$lang["customers_mailchimp_activity_open"] = "Email open";
$lang["customers_mailchimp_activity_total"] = "Email sent";
$lang["customers_mailchimp_activity_unopen"] = "Email unopen";
$lang["customers_mailchimp_email_client"] = "Email client";
$lang["customers_mailchimp_info"] = "Mailchimp";
$lang["customers_mailchimp_member_rating"] = "Rating";
$lang["customers_mailchimp_status"] = "Status";
$lang["customers_mailchimp_vip"] = "VIP";
$lang["customers_max"] = "Max spent";
$lang["customers_min"] = "Min spent";
$lang["customers_new"] = "New Customer";
$lang["customers_none_selected"] = "You have not selected any customers to delete";
$lang["customers_one_or_multiple"] = "customer(s)";
$lang["customers_quantity"] = "Quantity";
$lang["customers_stats_info"] = "Stats";
$lang["customers_successful_adding"] = "You have successfully added customer";
$lang["customers_successful_deleted"] = "You have successfully deleted";
$lang["customers_successful_updating"] = "You have successfully updated customer";
$lang["customers_tax_code"] = "Tax Code";
$lang["customers_taxable"] = "Taxable";
$lang["customers_total"] = "Total";
$lang["customers_total"] = "Total spent";
$lang["customers_update"] = "Update Customer";
$lang["customers_import_items_excel"] = "Import customers from Excel sheet";
$lang["customers_excel_import_failed"] = "Excel import failed";
$lang["customers_excel_import_nodata_wrongformat"] = "Your uploaded file has no data or wrong format";
$lang["customers_excel_import_success"] = "Import of Customers successful";
$lang["customers_excel_import_partially_failed"] = "Most Customers imported. But some were not, here is the list";
$lang["rewards_package"] = "Rewards Package";

View File

@@ -1,21 +1,22 @@
<?php
$lang["datepicker_today"] = "Today";
$lang["datepicker_weekstart"] = "0";
$lang["datepicker_all_time"] = "All Time";
$lang["datepicker_last_7"] = "Last 7 Days";
$lang["datepicker_last_30"] = "Last 30 Days";
$lang["datepicker_last_month"] = "Last Month";
$lang["datepicker_last_year"] = "Last Year";
$lang["datepicker_this_month"] = "This Month";
$lang["datepicker_this_month_last_year"] = "Same Month Last Year";
$lang["datepicker_same_month_to_today"] = "This Month To Today";
$lang["datepicker_same_month_to_same_day_last_year"] = "Same Month To Same Day Last Year";
$lang["datepicker_this_year"] = "This Year";
$lang["datepicker_today_last_year"] = "Today Last Year";
$lang["datepicker_yesterday"] = "Yesterday";
$lang["datepicker_apply"] = "Apply";
$lang["datepicker_cancel"] = "Cancel";
$lang["datepicker_from"] = "From";
$lang["datepicker_to"] = "To";
$lang["datepicker_custom"] = "Custom";
$lang["datepicker_from"] = "From";
$lang["datepicker_last_30"] = "Last 30 Days";
$lang["datepicker_last_7"] = "Last 7 Days";
$lang["datepicker_last_financial_year"] = "Last Financial Year";
$lang["datepicker_last_month"] = "Last Month";
$lang["datepicker_last_year"] = "Last Year";
$lang["datepicker_same_month_last_year"] = "Same Month Last Year";
$lang["datepicker_same_month_to_same_day_last_year"] = "Same Month To Same Day Last Year";
$lang["datepicker_this_financial_year"] = "This Financial Year";
$lang["datepicker_this_month"] = "This Month";
$lang["datepicker_this_year"] = "This Year";
$lang["datepicker_to"] = "To";
$lang["datepicker_today"] = "Today";
$lang["datepicker_today_last_year"] = "Today Last Year";
$lang["datepicker_weekstart"] = "0";
$lang["datepicker_yesterday"] = "Yesterday";

View File

@@ -2,7 +2,10 @@
$lang["employees_basic_information"] = "Information";
$lang["employees_cannot_be_deleted"] = "Could not deleted selected employees, one or more of the employees has processed sales or you are trying to delete yourself :)";
$lang["employees_change_password"] = "Change Password";
$lang["employees_confirm_delete"] = "Are you sure you want to delete the selected employees?";
$lang["employees_current_password"] = "Current Password";
$lang["employees_current_password_invalid"] = "Invalid Current Password";
$lang["employees_employee"] = "Employee";
$lang["employees_error_adding_updating"] = "Error adding/updating employee";
$lang["employees_error_deleting_demo_admin"] = "You can not delete the demo admin user";
@@ -14,15 +17,18 @@ $lang["employees_one_or_multiple"] = "employee(s)";
$lang["employees_password"] = "Password";
$lang["employees_password_minlength"] = "Passwords must be at least 8 characters";
$lang["employees_password_must_match"] = "Passwords do not match";
$lang["employees_password_not_must_match"] = "Current password and new password should not be the same";
$lang["employees_password_required"] = "Password is required";
$lang["employees_permission_desc"] = "Check the boxes below to grant access to modules";
$lang["employees_permission_info"] = "Permissions";
$lang["employees_repeat_password"] = "Password Again";
$lang["employees_subpermission_required"] = "Add at least one grant for each module";
$lang["employees_successful_adding"] = "You have successfully added employee";
$lang["employees_successful_change_password"] = "Password successfully changed";
$lang["employees_successful_deleted"] = "You have successfully deleted";
$lang["employees_successful_updating"] = "You have successfully updated employee";
$lang["employees_unsuccessful_change_password"] = "Password unsuccessfully changed";
$lang["employees_update"] = "Update Employee";
$lang["employees_username"] = "Username";
$lang["employees_username_minlength"] = "The username must be at least 5 characters";
$lang["employees_username_required"] = "Username is a required field";
$lang["employees_subpermission_required"] = "Add at least one grant for each module";

View File

@@ -0,0 +1,9 @@
<?php
$lang["enum_half_down"] = "Half Down";
$lang["enum_half_even"] = "Half Even";
$lang["enum_half_five"] = "Half Five";
$lang["enum_half_odd"] = "Half Odd";
$lang["enum_half_up"] = "Half Up";
$lang["enum_round_down"] = "Round Down";
$lang["enum_round_up"] = "Round Up";

View File

@@ -0,0 +1,18 @@
<?php
$lang["alpha_dash"] = "";
$lang["alpha_numeric"] = "";
$lang["exact_length"] = "";
$lang["greater_than"] = "";
$lang["is_natural"] = "";
$lang["is_natural_no_zero"] = "";
$lang["is_numeric"] = "";
$lang["is_unique"] = "";
$lang["less_than"] = "";
$lang["max_length"] = "";
$lang["min_length"] = "";
$lang["regex_match"] = "";
$lang["valid_email"] = "";
$lang["valid_emails"] = "";
$lang["valid_ip"] = "";
$lang["valid_url"] = "";

View File

@@ -3,10 +3,10 @@
$lang["giftcards_add_minus"] = "Inventory to add/subtract";
$lang["giftcards_allow_alt_description"] = "Allow Alt Description";
$lang["giftcards_amazon"] = "Amazon";
$lang["giftcards_remaining_balance"] = "Giftcard %1 remaining value is %2!";
$lang["giftcards_bulk_edit"] = "Bulk Edit";
$lang["giftcards_cannot_be_deleted"] = "Could not deleted selected giftcards, one or more of the selected giftcards has sales.";
$lang["giftcards_cannot_find_giftcard"] = "Cannot find any information about giftcard";
$lang["giftcards_cannot_use"] = "Giftcard %1 cannot be used for this sale. Invalid Customer!";
$lang["giftcards_card_value"] = "Value";
$lang["giftcards_category"] = "Category";
$lang["giftcards_change_all_to_allow_alt_desc"] = "Allow Alt Desc For All";
@@ -47,6 +47,7 @@ $lang["giftcards_one_or_multiple"] = "giftcard(s)";
$lang["giftcards_person_id"] = "Customer";
$lang["giftcards_quantity"] = "Quantity";
$lang["giftcards_quantity_required"] = "Quantity is a required field. Please Close ( X ) to cancel";
$lang["giftcards_remaining_balance"] = "Giftcard %1 remaining value is %2!";
$lang["giftcards_reorder_level"] = "Reorder Level";
$lang["giftcards_retrive_giftcard_info"] = "Retrieve Giftcard Info";
$lang["giftcards_sales_tax_1"] = "Sales Tax";
@@ -62,7 +63,7 @@ $lang["giftcards_tax_2"] = "Tax 2";
$lang["giftcards_tax_percent"] = "Tax Percent";
$lang["giftcards_tax_percents"] = "Tax Percent(s)";
$lang["giftcards_unit_price"] = "Unit Price";
$lang["giftcards_upc_database"] = "UPC Database";
$lang["giftcards_upc_database"] = "Barcode Database";
$lang["giftcards_update"] = "Update Giftcard";
$lang["giftcards_use_inventory_menu"] = "Use Inv. Menu";
$lang["giftcards_value"] = "Giftcard Value must be a number";

View File

@@ -1,20 +1,30 @@
<?php
$lang["item_kits_add_item"] = "Add Item";
$lang["item_kits_all"] = "All";
$lang["item_kits_cannot_be_deleted"] = "Could not delete item kit(s)";
$lang["item_kits_confirm_delete"] = "Are you sure you want to delete the selected item kits?";
$lang["item_kits_description"] = "Item Kit Description";
$lang["item_kits_discount_percent"] = "Discount Percent";
$lang["item_kits_error_adding_updating"] = "Error adding/updating Item Kit";
$lang["item_kits_find_kit_item"] = "Kit Item";
$lang["item_kits_info"] = "Item Kit Info";
$lang["item_kits_item"] = "Item";
$lang["item_kits_items"] = "Items";
$lang["item_kits_kit"] = "Kit Id";
$lang["item_kits_kit_and_components"] = "Kit and Components";
$lang["item_kits_kit_and_stock"] = "Kit and Stock";
$lang["item_kits_kit_only"] = "Kit Only";
$lang["item_kits_name"] = "Item Kit Name";
$lang["item_kits_new"] = "New Item Kit";
$lang["item_kits_no_item_kits_to_display"] = "No item kits to display";
$lang["item_kits_none_selected"] = "You have not selected any item kits";
$lang["item_kits_one_or_multiple"] = "Item Kit(s)";
$lang["item_kits_price_option"] = "Price Option";
$lang["item_kits_priced_only"] = "Priced Only";
$lang["item_kits_print_option"] = "Print Option";
$lang["item_kits_quantity"] = "Quantity";
$lang["item_kits_sequence"] = "Sequence";
$lang["item_kits_successful_adding"] = "You have successfully added Item Kit";
$lang["item_kits_successful_deleted"] = "You have successfully deleted";
$lang["item_kits_successful_updating"] = "You have successfully updated Item Kit";

View File

@@ -10,10 +10,11 @@ $lang["items_cannot_be_deleted"] = "Could not deleted selected items, one or mor
$lang["items_cannot_find_item"] = "Cannot find any information about item";
$lang["items_category"] = "Category";
$lang["items_category_required"] = "Category is a required field";
$lang["items_change_all_to_allow_alt_desc"] = " Allow Alt Desc For All";
$lang["items_change_all_to_allow_alt_desc"] = "Allow Alt Desc For All";
$lang["items_change_all_to_not_allow_allow_desc"] = "Not Allow Alt Desc For All";
$lang["items_change_all_to_serialized"] = "Change All To Serialized";
$lang["items_change_all_to_unserialized"] = "Change All To Unserialized";
$lang["items_change_image"] = "Change Image";
$lang["items_confirm_bulk_edit"] = "Are you sure you want to edit all the items selected?";
$lang["items_confirm_bulk_edit_wipe_taxes"] = "All item tax information will be replaced!";
$lang["items_confirm_delete"] = "Are you sure you want to delete the selected items?";
@@ -27,24 +28,31 @@ $lang["items_details_count"] = "Inventory Count Details";
$lang["items_do_nothing"] = "Do Nothing";
$lang["items_edit_fields_you_want_to_update"] = "Edit the fields you want to edit for ALL selected items";
$lang["items_edit_multiple_items"] = "Editing Multiple Items";
$lang["items_empty_upc_items"] = "Empty Barcode Items";
$lang["items_error_adding_updating"] = "Error adding/updating item";
$lang["items_error_updating_multiple"] = "Error updating items";
$lang["items_excel_import_failed"] = "Excel import failed";
$lang["items_excel_import_nodata_wrongformat"] = "Your uploaded file has no data or wrong format";
$lang["items_excel_import_success"] = "Import of Items successful";
$lang["items_excel_import_partially_failed"] = "Most Items imported. But some were not, here is the list";
$lang["items_excel_import_success"] = "Import of Items successful";
$lang["items_generate_barcodes"] = "Generate Barcodes";
$lang["items_image"] = "Avatar";
$lang["items_import_items_excel"] = "Import items from Excel sheet";
$lang["items_info_provided_by"] = "Info provided by";
$lang["items_inventory"] = "Inventory";
$lang["items_inventory_comments"] = "Comments";
$lang["items_inventory_data_tracking"] = "Inventory Data Tracking";
$lang["items_inventory_date"] = "Date";
$lang["items_inventory_employee"] = "Employee";
$lang["items_inventory_in_out_quantity"] = "In/Out Qty";
$lang["items_inventory_remarks"] = "Remarks";
$lang["items_is_deleted"] = "Deleted";
$lang["items_is_serialized"] = "Item has Serial Number";
$lang["items_item"] = "Item";
$lang["items_item_number"] = "UPC/EAN/ISBN";
$lang["items_item_number"] = "Barcode";
$lang["items_item_number_duplicate"] = "The item number is already present in the database";
$lang["items_kit"] = "Kit";
$lang["items_location"] = "Location";
$lang["items_empty_upc_items"] = "Empty UPC Items";
$lang["items_low_inventory_items"] = "Out Of Stock Items";
$lang["items_manually_editing_of_quantity"] = "Manual Edit of Quantity";
$lang["items_name"] = "Item Name";
@@ -54,22 +62,29 @@ $lang["items_no_description_items"] = "No Description Items";
$lang["items_no_items_to_display"] = "No Items to display";
$lang["items_none"] = "None";
$lang["items_none_selected"] = "You have not selected any items to edit";
$lang["items_nonstock"] = "Non stocked";
$lang["items_number_information"] = "Item Number";
$lang["items_number_required"] = "UPC/EAN/ISBN is a required field";
$lang["items_number_required"] = "Barcode is a required field";
$lang["items_one_or_multiple"] = "item(s)";
$lang["items_quantity"] = "Quantity";
$lang["items_quantity_number"] = "Quantity must be a number";
$lang["items_quantity_required"] = "Quantity is a required field";
$lang["items_receiving_quantity"] = "Receiving quantity";
$lang["items_remove_image"] = "Remove Image";
$lang["items_reorder_level"] = "Reorder Level";
$lang["items_reorder_level_number"] = "Reorder level must be a number";
$lang["items_reorder_level_required"] = "Reorder level is a required field";
$lang["items_retrive_item_info"] = "Retrive Item Info";
$lang["items_sales_tax_1"] = "Sales Tax";
$lang["items_sales_tax_2"] = "Sales Tax 2";
$lang["items_search_custom_items"] = "Search Custom Fields";
$lang["items_search_attributes"] = "Search Attributes";
$lang["items_search_custom_items"] = "Search Custom Items";
$lang["items_select_image"] = "Select Image";
$lang["items_serialized_items"] = "Serialized Items";
$lang["items_standard"] = "Standard";
$lang["items_stock"] = "Stock";
$lang["items_stock_location"] = "Stock location";
$lang["items_stock_type"] = "Stock Type";
$lang["items_successful_adding"] = "You have successfully added item";
$lang["items_successful_bulk_edit"] = "You have successfully updated the selected items";
$lang["items_successful_deleted"] = "You have successfully deleted";
@@ -80,13 +95,10 @@ $lang["items_tax_2"] = "Tax 2";
$lang["items_tax_percent"] = "Tax Percent";
$lang["items_tax_percent_required"] = "Tax Percent is a required field";
$lang["items_tax_percents"] = "Tax Percent(s)";
$lang["items_type"] = "Item Type";
$lang["items_unit_price"] = "Retail Price";
$lang["items_unit_price_number"] = "Unit price must be a number";
$lang["items_unit_price_required"] = "Retail Price is a required field";
$lang["items_upc_database"] = "UPC Database";
$lang["items_upc_database"] = "Barcode Database";
$lang["items_update"] = "Update Item";
$lang["items_use_inventory_menu"] = "Use Inv. Menu";
$lang["items_import_items_excel"] = "Import items from Excel sheet";
$lang["items_select_image"] = "Select Image";
$lang["items_change_image"] = "Change Image";
$lang["items_remove_image"] = "Remove Image";

View File

@@ -0,0 +1,10 @@
<?php
$lang["login_gcaptcha"] = "I'm not a robot";
$lang["login_go"] = "Go";
$lang["login_invalid_gcaptcha"] = "Invalid I'm not a robot";
$lang["login_invalid_installation"] = "The installation is not correct, check your php.ini";
$lang["login_invalid_username_and_password"] = "Invalid username or password";
$lang["login_login"] = "Login";
$lang["login_password"] = "Password";
$lang["login_username"] = "Username";

View File

@@ -1,14 +1,14 @@
<?php
$lang["messages_sms_send"] = "Send SMS";
$lang["messages_first_name"] = "First name";
$lang["messages_last_name"] = "Last name";
$lang["messages_phone"] = "Phone number";
$lang["messages_phone_placeholder"] = "Mobile Number(s) here...";
$lang["messages_phone_number_required"] = "Phone number required";
$lang["messages_message"] = "Message";
$lang["messages_message_placeholder"] = "Your Message here...";
$lang["messages_message_required"] = "Message required";
$lang["messages_multiple_phones"] = "(In case of multiple recipients, enter mobile numbers separated by commas)";
$lang["messages_phone"] = "Phone number";
$lang["messages_phone_number_required"] = "Phone number required";
$lang["messages_phone_placeholder"] = "Mobile Number(s) here...";
$lang["messages_sms_send"] = "Send SMS";
$lang["messages_successfully_sent"] = "Message successfully sent to: ";
$lang["messages_unsuccessfully_sent"] = "Message unsuccessfully sent to: ";

View File

@@ -0,0 +1,7 @@
<?php
$lang["migrate_backup"] = "Be sure to back up your database before applying any database upgrades.";
$lang["migrate_failed"] = "The migration did not complete.";
$lang["migrate_info"] = "Click on Start Migration only if you are ready to apply all database changes and data upgrades to your database";
$lang["migrate_start"] = "Start Migration ";
$lang["migrate_success"] = "Migration completed successfully";

View File

@@ -13,6 +13,10 @@ $lang["module_item_kits"] = "Item Kits";
$lang["module_item_kits_desc"] = "Add, Update, Delete and Search Item Kits";
$lang["module_items"] = "Items";
$lang["module_items_desc"] = "Add, Update, Delete, and Search items";
$lang["module_messages"] = "Messages";
$lang["module_messages_desc"] = "Send Messages to Customers, Suppliers, Employees et al.";
$lang["module_migrate"] = "Migrate";
$lang["module_migrate_desc"] = "Update the OSPOS Database";
$lang["module_receivings"] = "Receivings";
$lang["module_receivings_desc"] = "Process Purchase orders";
$lang["module_reports"] = "Reports";
@@ -21,5 +25,5 @@ $lang["module_sales"] = "Sales";
$lang["module_sales_desc"] = "Process sales and returns";
$lang["module_suppliers"] = "Suppliers";
$lang["module_suppliers_desc"] = "Add, Update, Delete, and Search suppliers";
$lang["module_messages"] = "Messages";
$lang["module_messages_desc"] = "Send Messages to Customers, Suppliers, Employees et al.";
$lang["module_taxes"] = "Taxes";
$lang["module_taxes_desc"] = "Configure sales taxes";

View File

@@ -1,17 +1,16 @@
<?php
$lang["receivings_transaction_failed"] = "Receivings Transactions Failed";
$lang["receivings_cancel_receiving"] = "Cancel";
$lang["receivings_cannot_be_deleted"] = "Receiving(s) could not be deleted";
$lang["receivings_comments"] = "Comments";
$lang["receivings_complete_receiving"] = "Finish";
$lang["receivings_confirm_cancel_receiving"] = "Are you sure you want to clear this receiving? All items will cleared.";
$lang["receivings_confirm_delete"] = "Are you sure you want to delete this receiving, this action cannot be undone";
$lang["receivings_confirm_finish_receiving"] = "Are you sure you want to submit this receiving? This cannot be undone.";
$lang["receivings_cost"] = "Cost";
$lang["receivings_date"] = "Receiving Date";
$lang["receivings_date_required"] = "A correct date needs to be filled in";
$lang["receivings_date_type"] = "Date field is required";
$lang["receivings_confirm_delete"] = "Are you sure you want to delete this receiving, this action cannot be undone";
$lang["receivings_delete_entire_sale"] = "Delete entire sale";
$lang["receivings_discount"] = "Disc %";
$lang["receivings_edit"] = "Edit";
@@ -22,7 +21,6 @@ $lang["receivings_error_requisition"] = "Unable to move inventory from and to th
$lang["receivings_find_or_scan_item"] = "Find/Scan Item";
$lang["receivings_find_or_scan_item_or_receipt"] = "Find/Scan Item OR Receipt";
$lang["receivings_id"] = "Receiving ID";
$lang["receivings_reference"] = "Reference";
$lang["receivings_item_name"] = "Item Name";
$lang["receivings_mode"] = "Receiving Mode";
$lang["receivings_new_supplier"] = "New Supplier";
@@ -32,6 +30,7 @@ $lang["receivings_quantity"] = "Qty.";
$lang["receivings_receipt"] = "Receivings Receipt";
$lang["receivings_receipt_number"] = "Receiving #";
$lang["receivings_receiving"] = "Receive";
$lang["receivings_reference"] = "Reference";
$lang["receivings_register"] = "Items Receiving";
$lang["receivings_requisition"] = "Requisition";
$lang["receivings_return"] = "Return";
@@ -43,10 +42,11 @@ $lang["receivings_stock_source"] = "Stock source";
$lang["receivings_successfully_deleted"] = "You have successfully deleted";
$lang["receivings_successfully_updated"] = "Receiving successfully updated";
$lang["receivings_supplier"] = "Supplier";
$lang["receivings_supplier_email"] = "Email";
$lang["receivings_supplier_address"] = "Address";
$lang["receivings_supplier_email"] = "Email";
$lang["receivings_supplier_location"] = "Location";
$lang["receivings_total"] = "Total";
$lang["receivings_transaction_failed"] = "Receivings Transactions Failed";
$lang["receivings_unable_to_add_item"] = "Unable to add item to receiving";
$lang["receivings_unsuccessfully_updated"] = "Receiving unsuccessfully updated";
$lang["receivings_update"] = "Update";

View File

@@ -5,6 +5,8 @@ $lang["reports_categories"] = "Categories";
$lang["reports_categories_summary_report"] = "Categories Summary Report";
$lang["reports_category"] = "Category";
$lang["reports_comments"] = "Comments";
$lang["reports_cost"] = "Cost";
$lang["reports_cost_price"] = "Cost Price";
$lang["reports_count"] = "Count";
$lang["reports_customer"] = "Customer";
$lang["reports_customers"] = "Customers";
@@ -20,6 +22,7 @@ $lang["reports_discount"] = "Discount";
$lang["reports_discount_percent"] = "Discount Percent";
$lang["reports_discounts"] = "Discounts";
$lang["reports_discounts_summary_report"] = "Discounts Summary Report";
$lang["reports_earned"] = "Points Earned";
$lang["reports_employee"] = "Employee";
$lang["reports_employees"] = "Employees";
$lang["reports_employees_summary_report"] = "Employees Summary Report";
@@ -31,6 +34,7 @@ $lang["reports_inventory_reports"] = "Inventory Reports";
$lang["reports_inventory_summary"] = "Inventory Summary";
$lang["reports_inventory_summary_report"] = "Inventory Summary Report";
$lang["reports_item"] = "Item";
$lang["reports_item_count"] = "Filter Item Count";
$lang["reports_item_name"] = "Item Name";
$lang["reports_item_number"] = "Item Number";
$lang["reports_items"] = "Items";
@@ -39,14 +43,16 @@ $lang["reports_items_received"] = "Items Received";
$lang["reports_items_summary_report"] = "Items Summary Report";
$lang["reports_low_inventory"] = "";
$lang["reports_low_inventory_report"] = "";
$lang["reports_more_than_zero"] = "More than zero";
$lang["reports_name"] = "Name";
$lang["reports_no_reports_to_display"] = "No Items to display";
$lang["reports_payment_type"] = "Payment Type";
$lang["reports_payments"] = "Payments";
$lang["reports_payments_summary_report"] = "Payments Summary Report";
$lang["reports_profit"] = "Profit";
$lang["reports_cost"] = "Cost";
$lang["reports_quantity"] = "Quantity";
$lang["reports_quantity_purchased"] = "Quantity Purchased";
$lang["reports_quotes"] = "Quotes";
$lang["reports_received_by"] = "Received By";
$lang["reports_receiving_id"] = "Receiving ID";
$lang["reports_receiving_type"] = "Receiving Type";
@@ -75,6 +81,7 @@ $lang["reports_serial_number"] = "Serial #";
$lang["reports_sold_by"] = "Sold By";
$lang["reports_sold_to"] = "Sold To";
$lang["reports_stock_location"] = "Stock Location";
$lang["reports_sub_total_value"] = "Sub Total";
$lang["reports_subtotal"] = "Subtotal";
$lang["reports_summary_reports"] = "Summary Reports";
$lang["reports_supplied_by"] = "Supplied by";
@@ -86,12 +93,8 @@ $lang["reports_tax_percent"] = "Tax Percent";
$lang["reports_taxes"] = "Taxes";
$lang["reports_taxes_summary_report"] = "Taxes Summary Report";
$lang["reports_total"] = "Total";
$lang["reports_type"] = "Type";
$lang["reports_item_count"] = "Filter Item Count";
$lang["reports_cost_price"] = "Cost Price";
$lang["reports_unit_price"] = "Retail Price";
$lang["reports_sub_total_value"] = "Sub Total";
$lang["reports_total_inventory_value"] = "Total Inventory Value";
$lang["reports_type"] = "Type";
$lang["reports_unit_price"] = "Retail Price";
$lang["reports_used"] = "Points Used";
$lang["reports_zero_and_less"] = "Zero and less";
$lang["reports_more_than_zero"] = "More than zero";
$lang["reports_no_reports_to_display"] = "No Items to display";

View File

@@ -1,13 +1,18 @@
<?php
$lang["customers_available_points"] = "Available Points";
$lang["rewards_package"] = "Rewards";
$lang["rewards_remaining_balance"] = "Reward Points remaining value is ";
$lang["sales_add_payment"] = "Add Payment";
$lang["sales_amount_due"] = "Amount Due";
$lang["sales_amount_tendered"] = "Amount Tendered";
$lang["sales_cancel_sale"] = "Cancel";
$lang["sales_cash"] = "Cash";
$lang["sales_cash_filter"] = "Cash";
$lang["sales_change_due"] = "Change Due";
$lang["sales_check"] = "Check";
$lang["sales_check_balance"] = "Check remainder";
$lang["sales_check_filter"] = "Check";
$lang["sales_comment"] = "Comment";
$lang["sales_comments"] = "Comments";
$lang["sales_complete_sale"] = "Complete";
@@ -15,12 +20,14 @@ $lang["sales_confirm_cancel_sale"] = "Are you sure you want to clear this sale?
$lang["sales_confirm_delete"] = "Are you sure you want to delete the selected sales?";
$lang["sales_credit"] = "Credit Card";
$lang["sales_customer"] = "Name";
$lang["sales_customer_email"] = "Email";
$lang["sales_customer_address"] = "Address";
$lang["sales_customer_location"] = "Location";
$lang["sales_customer_discount"] = "Discount";
$lang["sales_customer_email"] = "Email";
$lang["sales_customer_location"] = "Location";
$lang["sales_customer_mailchimp_status"] = "Mailchimp status";
$lang["sales_customer_total"] = "Total";
$lang["sales_date"] = "Sale Date";
$lang["sales_date_range"] = "Date Range";
$lang["sales_date_required"] = "A correct date needs to be filled in";
$lang["sales_date_type"] = "Date field is required";
$lang["sales_debit"] = "Debit Card";
@@ -29,27 +36,31 @@ $lang["sales_delete_entire_sale"] = "Delete entire sale";
$lang["sales_delete_successful"] = "You have successfully deleted a sale";
$lang["sales_delete_unsuccessful"] = "You have unsuccessfully deleted a sale";
$lang["sales_description_abbrv"] = "Desc";
$lang["sales_discard_quote"] = "Discard";
$lang["sales_discount"] = "Disc %";
$lang["sales_discount_included"] = "% Discount";
$lang["sales_discount"] = "Discount";
$lang["sales_discount_short"] = "%";
$lang["sales_due"] = "Due";
$lang["sales_due_filter"] = "Due";
$lang["sales_edit"] = "Edit";
$lang["sales_edit_item"] = "Edit Item";
$lang["sales_edit_sale"] = "Edit Sale";
$lang["sales_email_receipt"] = "Email Receipt";
$lang["sales_employee"] = "Employee";
$lang["sales_entry"] = "Entry";
$lang["sales_error_editing_item"] = "Error editing item";
$lang["sales_find_or_scan_item"] = "Find/Scan Item";
$lang["sales_find_or_scan_item_or_receipt"] = "Find/Scan Item OR Receipt";
$lang["sales_giftcard"] = "Gift Card";
$lang["sales_giftcard_balance"] = "Giftcard Balance";
$lang["sales_giftcard_number"] = "Gift Card Number";
$lang["sales_group_by_category"] = "Group by Category";
$lang["sales_group_by_type"] = "Group by Type";
$lang["sales_id"] = "Sale ID";
$lang["sales_invoice"] = "Invoice";
$lang["sales_invoice_confirm"] = "This invoice will be sent to";
$lang["sales_invoice_enable"] = "Create Invoice";
$lang["sales_invoice_filter"] = "Invoices";
$lang["sales_cash_filter"] = "Cash";
$lang["sales_invoice_no_email"] = "This customer does not have a valid email address";
$lang["sales_invoice_number"] = "Invoice #";
$lang["sales_invoice_number_duplicate"] = "Please enter an unique invoice number";
@@ -69,8 +80,8 @@ $lang["sales_no_description"] = "None";
$lang["sales_no_filter"] = "All";
$lang["sales_no_items_in_cart"] = "There are no items in the cart";
$lang["sales_no_sales_to_display"] = "No sales to display";
$lang["sales_none_selected"] = "You have not selected any sales to delete";
$lang["sales_one_or_multiple"] = "sale(s)";
$lang["sales_takings"] = "Takings";
$lang["sales_payment"] = "Payment Type";
$lang["sales_payment_amount"] = "Amount";
$lang["sales_payment_not_cover_total"] = "Payment Amount does not cover Total";
@@ -79,8 +90,12 @@ $lang["sales_payments_total"] = "Payments Total";
$lang["sales_price"] = "Price";
$lang["sales_print_after_sale"] = "Print after sale";
$lang["sales_quantity"] = "Qty.";
$lang["sales_quantity_less_than_zero"] = "Warning, Desired Quantity is Insufficient. You can still process the sale, but check your inventory";
$lang["sales_quantity_less_than_reorder_level"] = "Warning, Desired Quantity is below reorder level";
$lang["sales_quantity_less_than_zero"] = "Warning, Desired Quantity is Insufficient. You can still process the sale, but check your inventory";
$lang["sales_quote"] = "Quote";
$lang["sales_quote_number"] = "Quote Number";
$lang["sales_quote_sent"] = "Quote sent to";
$lang["sales_quote_unsent"] = "Quote failed to be sent to";
$lang["sales_receipt"] = "Sales Receipt";
$lang["sales_receipt_number"] = "Sale #";
$lang["sales_receipt_sent"] = "Receipt sent to";
@@ -88,17 +103,22 @@ $lang["sales_receipt_unsent"] = "Receipt failed to be sent to";
$lang["sales_register"] = "Sales Register";
$lang["sales_remove_customer"] = "Remove Customer";
$lang["sales_return"] = "Return";
$lang["sales_rewards"] = "Reward Points";
$lang["sales_rewards_balance"] = "Reward Points Balance";
$lang["sales_sale"] = "Sale";
$lang["sales_sale_by_invoice"] = "Sale by Invoice";
$lang["sales_sale_for_customer"] = "Customer:";
$lang["sales_sale_time"] = "Time";
$lang["sales_sales_tax"] = "Sales Tax";
$lang["sales_select_customer"] = "Select Customer (Optional)";
$lang["sales_send_invoice"] = "Send Invoice";
$lang["sales_send_quote"] = "Send Quote";
$lang["sales_send_receipt"] = "Send Receipt";
$lang["sales_serial"] = "Serial";
$lang["sales_show_invoice"] = "Show Invoice";
$lang["sales_show_receipt"] = "Show Receipt";
$lang["sales_start_typing_customer_name"] = "Start Typing customer's name...";
$lang["sales_start_typing_item_name"] = "Start Typing item's name or scan barcode...";
$lang["sales_start_typing_customer_name"] = "Start typing customer's details...";
$lang["sales_start_typing_item_name"] = "Start typing item's name or scan barcode...";
$lang["sales_stock_location"] = "Stock location";
$lang["sales_sub_total"] = "Sub Total";
$lang["sales_successfully_deleted"] = "You have successfully deleted";
@@ -107,6 +127,8 @@ $lang["sales_successfully_updated"] = "Sale successfully updated";
$lang["sales_suspend_sale"] = "Suspend";
$lang["sales_suspended_sale_id"] = "ID";
$lang["sales_suspended_sales"] = "Suspended";
$lang["sales_table"] = "Table";
$lang["sales_takings"] = "Takings";
$lang["sales_tax"] = "Tax";
$lang["sales_tax_percent"] = "Tax %";
$lang["sales_total"] = "Total";
@@ -117,7 +139,5 @@ $lang["sales_unsuccessfully_deleted"] = "Sale(s) could not be deleted";
$lang["sales_unsuccessfully_suspended_sale"] = "Your sale has been unsuccessfully suspended";
$lang["sales_unsuccessfully_updated"] = "Sale unsuccessfully updated";
$lang["sales_unsuspend"] = "Unsuspend";
$lang["sales_unsuspend_and_delete"] = "";
$lang["sales_unsuspend_and_delete"] = "Action";
$lang["sales_update"] = "Update";
$lang["sales_date_range"] = "Date Range";
$lang["sales_none_selected"] = "You have not selected any sales to delete";

View File

@@ -1,10 +1,10 @@
<?php
$lang["suppliers_account_number"] = "Account #";
$lang["suppliers_agency_name"] = "Agency Name";
$lang["suppliers_cannot_be_deleted"] = "Could not deleted selected suppliers, one or more of the selected suppliers has sales.";
$lang["suppliers_company_name"] = "Company Name";
$lang["suppliers_company_name_required"] = "Company Name is a required field";
$lang["suppliers_agency_name"] = "Agency Name";
$lang["suppliers_confirm_delete"] = "Are you sure you want to delete the selected suppliers?";
$lang["suppliers_error_adding_updating"] = "Error adding/updating supplier";
$lang["suppliers_new"] = "New Supplier";

View File

@@ -0,0 +1,31 @@
<?php
$lang["taxes_add_exception"] = "Add Exception";
$lang["taxes_confirm_delete"] = "Confirm deletion of tax code";
$lang["taxes_default_tax_category"] = "Default Tax Category";
$lang["taxes_error_adding_updating"] = "Error adding/updating tax code";
$lang["taxes_new"] = "New Tax Code";
$lang["taxes_no_taxes_to_display"] = "No taxes code available to display";
$lang["taxes_round_half_down"] = "Half Down";
$lang["taxes_round_half_even"] = "Half Even";
$lang["taxes_round_half_odd"] = "Half Odd";
$lang["taxes_round_half_up"] = "Half Up";
$lang["taxes_rounding_code"] = "Rounding Code";
$lang["taxes_sales_tax"] = "Sales Tax";
$lang["taxes_sales_tax_by_invoice"] = "Sales Tax by Invoice";
$lang["taxes_successful_deleted"] = "You have successfully deleted";
$lang["taxes_tax_category"] = "Tax Category";
$lang["taxes_tax_code"] = "Tax Code";
$lang["taxes_tax_code_cannot_be_deleted"] = "Could not delete selected tax code";
$lang["taxes_tax_code_name"] = "Tax Code Name";
$lang["taxes_tax_code_required"] = "Tax code is a required field";
$lang["taxes_tax_code_successful_deleted"] = "You have successfully deleted tax code";
$lang["taxes_tax_code_successful_updated"] = "You have successfully updated";
$lang["taxes_tax_code_successful_updating"] = "You have successfully updated tax code";
$lang["taxes_tax_code_successfully_added"] = "You have successfully added";
$lang["taxes_tax_code_type"] = "Tax Code Type";
$lang["taxes_tax_rate"] = "Tax Rate";
$lang["taxes_tax_rate_numeric"] = "Tax rate must be a number";
$lang["taxes_tax_rate_required"] = "Tax rate is a required field";
$lang["taxes_update"] = "Update Sales Category Tax";
$lang["taxes_vat_tax"] = "VAT Tax";

View File

@@ -1,10 +1,10 @@
<?php
$lang["tables_loading"] = "Lade, bitte warten...";
$lang["tables_rows_per_page"] = "{0} Einträge pro Seite";
$lang["tables_page_from_to"] = "Zeige {0} bis {1} von {2} Zeile(n)";
$lang["tables_hide_show_pagination"] = "Hide/Show pagination";
$lang["tables_refresh"] = "Refresh";
$lang["tables_toggle"] = "Umschalten";
$lang["tables_columns"] = "Spalten";
$lang["tables_all"] = "All";
$lang["tables_columns"] = "Spalten";
$lang["tables_hide_show_pagination"] = "Hide/Show pagination";
$lang["tables_loading"] = "Lade, bitte warten...";
$lang["tables_page_from_to"] = "Zeige {0} bis {1} von {2} Zeile(n)";
$lang["tables_refresh"] = "Refresh";
$lang["tables_rows_per_page"] = "{0} Einträge pro Seite";
$lang["tables_toggle"] = "Umschalten";

View File

@@ -10,11 +10,14 @@ $lang["common_confirm_search"] = "Sie haben einen oder mehrere Zeilen gewählt.
$lang["common_country"] = "Land";
$lang["common_date"] = "Datum";
$lang["common_delete"] = "Löschen";
$lang["common_print"] = "Drucken";
$lang["common_det"] = "Details";
$lang["common_download_import_template"] = "Download Import Excel Voralge (CSV)";
$lang["common_edit"] = "Ändern";
$lang["common_email"] = "Email";
$lang["common_email_invalid_format"] = "Das Email Format ist nicht korrekt";
$lang["common_export_excel"] = "Excel Export";
$lang["common_export_excel_no"] = "No";
$lang["common_export_excel_yes"] = "Yes";
$lang["common_fields_required_message"] = "Die Felder in rot sind erforderlich";
$lang["common_first_name"] = "Vorname";
$lang["common_first_name_required"] = "Vorname ist erforderlich";
@@ -22,6 +25,13 @@ $lang["common_first_page"] = "Erste";
$lang["common_gender"] = "Geschlecht";
$lang["common_gender_female"] = "F";
$lang["common_gender_male"] = "M";
$lang["common_id"] = "Id";
$lang["common_import"] = "Import";
$lang["common_import_change_file"] = "Change";
$lang["common_import_excel"] = "Excel Import";
$lang["common_import_full_path"] = "Voller Dateipfad zum Excel File notwendig";
$lang["common_import_remove_file"] = "Remove";
$lang["common_import_select_file"] = "Select file";
$lang["common_inv"] = "Lag";
$lang["common_last_name"] = "Nachname";
$lang["common_last_name_required"] = "Nachname ist erforderlich";
@@ -38,28 +48,20 @@ $lang["common_phone_number_required"] = "Telefon ist erforderlich";
$lang["common_please_visit_my"] = "Bitte beuschen Sie ";
$lang["common_powered_by"] = "Powered by";
$lang["common_price"] = "Preis";
$lang["common_print"] = "Drucken";
$lang["common_remove"] = "Annulieren";
$lang["common_required"] = "Erforderlich";
$lang["common_return_policy"] = "Rücknahmepolitik";
$lang["common_search"] = "Suche";
$lang["common_search_options"] = "Suchkriterien";
$lang["common_searched_for"] = "Gescuht nach";
$lang["common_state"] = "BL/Kanton";
$lang["common_submit"] = "Senden";
$lang["common_total_spent"] = "";
$lang["common_unknown"] = "";
$lang["common_view_recent_sales"] = "Letzte Verkäufe";
$lang["common_website"] = "Website";
$lang["common_welcome"] = "Willkommen";
$lang["common_welcome_message"] = "Willkommen bei OSPOS, zum Beginnen auf ein Modul klicken";
$lang["common_you_are_using_ospos"] = "Sie verwenden Open Source Point Of Sale Version";
$lang["common_zip"] = "PLZ";
$lang["common_import"] = "Import";
$lang["common_download_import_template"] = "Download Import Excel Voralge (CSV)";
$lang["common_import_excel"] = "Excel Import";
$lang["common_import_full_path"] = "Voller Dateipfad zum Excel File notwendig";
$lang["common_import_select_file"] = "Select file";
$lang["common_import_change_file"] = "Change";
$lang["common_import_remove_file"] = "Remove";
$lang["common_export_excel"] = "Excel Export";
$lang["common_export_excel_yes"] = "Yes";
$lang["common_export_excel_no"] = "No";
$lang["common_required"] = "Erforderlich";
$lang["common_id"] = "Id";

View File

@@ -11,6 +11,8 @@ $lang["config_barcode_configuration"] = "Barcodes";
$lang["config_barcode_content"] = "Barcode Inhalt";
$lang["config_barcode_first_row"] = "Erste Zeile";
$lang["config_barcode_font"] = "Schrift";
$lang["config_barcode_formats"] = "";
$lang["config_barcode_generate_if_empty"] = "Generiere Barcode wenn leer";
$lang["config_barcode_height"] = "Höhe";
$lang["config_barcode_id"] = "Artikel-Nr/Name";
$lang["config_barcode_info"] = "Barcode Einstellung";
@@ -26,22 +28,25 @@ $lang["config_barcode_second_row"] = "Zeile 2";
$lang["config_barcode_third_row"] = "Zeile 3";
$lang["config_barcode_type"] = "Barcode Typ";
$lang["config_barcode_width"] = "Breite (px)";
$lang["config_barcode_generate_if_empty"] = "Generiere Barcode wenn leer";
$lang["config_bottom"] = "Bottom";
$lang["config_cash_decimals"] = "";
$lang["config_cash_decimals_tooltip"] = "";
$lang["config_cash_rounding"] = "";
$lang["config_center"] = "Center";
$lang["config_comma"] = "comma";
$lang["config_company"] = "Firmenname";
$lang["config_company_logo"] = "Logo";
$lang["config_company_select_image"] = "Select Image";
$lang["config_company_change_image"] = "Change Image";
$lang["config_company_logo"] = "Logo";
$lang["config_company_remove_image"] = "Remove Image";
$lang["config_company_required"] = "Firmenname ist erforderlich";
$lang["config_company_select_image"] = "Select Image";
$lang["config_company_website_url"] = "Webseite ist nicht in korrektem Format";
$lang["config_comma"] = "comma";
$lang["config_country_codes"] = "Country Codes";
$lang["config_country_codes_tooltip"] = "Comma separated list of country codes for nominatim address lookup.";
$lang["config_currency_symbol"] = "Währungssymbol";
$lang["config_currency_decimals"] = "Currency Decimals";
$lang["config_currency_symbol"] = "Währungssymbol";
$lang["config_custom1"] = "Zusatzfeld 1";
$lang["config_custom10"] = "Zusatzfeld 10";
$lang["config_custom2"] = "Zusatzfeld 2";
$lang["config_custom3"] = "Zusatzfeld 3";
$lang["config_custom4"] = "Zusatzfeld 4";
@@ -50,7 +55,13 @@ $lang["config_custom6"] = "Zusatzfeld 6";
$lang["config_custom7"] = "Zusatzfeld 7";
$lang["config_custom8"] = "Zusatzfeld 8";
$lang["config_custom9"] = "Zusatzfeld 9";
$lang["config_custom10"] = "Zusatzfeld 10";
$lang["config_customer_reward"] = "";
$lang["config_customer_reward_duplicate"] = "";
$lang["config_customer_reward_enable"] = "";
$lang["config_customer_reward_invalid_chars"] = "";
$lang["config_customer_reward_required"] = "";
$lang["config_customer_sales_tax_support"] = "";
$lang["config_date_or_time_format"] = "";
$lang["config_datetimeformat"] = "Datum und Zeit";
$lang["config_decimal_point"] = "Dezimaltrennzeichen";
$lang["config_default_barcode_font_size_number"] = "Die Barcode Schriftgrösse muss eine Zahl sein";
@@ -67,42 +78,74 @@ $lang["config_default_barcode_quality_number"] = "Die Barcode Qualität muss ein
$lang["config_default_barcode_quality_required"] = "Die Barcode Qualität ist erforderlich";
$lang["config_default_barcode_width_number"] = "Die Barcode Breite muss eine Zahl sein";
$lang["config_default_barcode_width_required"] = "Die Barcode Breite ist erforderlich";
$lang["config_default_origin_tax_code"] = "";
$lang["config_default_sales_discount"] = "Standard Verkaufsrabatt";
$lang["config_default_sales_discount_number"] = "Der Standard Verkaufsrabatt muss eine Zahl sein";
$lang["config_default_sales_discount_required"] = "Der Standard Verkaufsrabatt ist erforderlich";
$lang["config_default_tax_name_number"] = "";
$lang["config_default_tax_name_required"] = "The default tax name is a required field";
$lang["config_default_tax_rate"] = "MWSt %";
$lang["config_default_tax_rate_1"] = "MWSt 1";
$lang["config_default_tax_rate_2"] = "MWSt 2";
$lang["config_default_tax_rate_number"] = "MWSt Rate";
$lang["config_default_tax_rate_required"] = "MWSt ist erforderlich";
$lang["config_default_tax_name_required"] = "The default tax name is a required field";
$lang["config_dinner_table"] = "";
$lang["config_dinner_table_duplicate"] = "";
$lang["config_dinner_table_enable"] = "";
$lang["config_dinner_table_invalid_chars"] = "";
$lang["config_dinner_table_required"] = "";
$lang["config_dot"] = "dot";
$lang["config_email"] = "Email";
$lang["config_email_configuration"] = "Email Configuration";
$lang["config_email_protocol"] = "Protocol";
$lang["config_email_mailpath"] = "Path to Sendmail";
$lang["config_email_smtp_host"] = "SMTP Server";
$lang["config_email_smtp_port"] = "SMTP Port";
$lang["config_email_protocol"] = "Protocol";
$lang["config_email_smtp_crypto"] = "SMTP Encryption";
$lang["config_email_smtp_host"] = "SMTP Server";
$lang["config_email_smtp_pass"] = "SMTP Password";
$lang["config_email_smtp_port"] = "SMTP Port";
$lang["config_email_smtp_timeout"] = "SMTP Timeout (s)";
$lang["config_email_smtp_user"] = "SMTP Username";
$lang["config_email_smtp_pass"] = "SMTP Password";
$lang["config_fax"] = "Fax";
$lang["config_financial_year"] = "";
$lang["config_financial_year_apr"] = "";
$lang["config_financial_year_aug"] = "";
$lang["config_financial_year_dec"] = "";
$lang["config_financial_year_feb"] = "";
$lang["config_financial_year_jan"] = "";
$lang["config_financial_year_jul"] = "";
$lang["config_financial_year_jun"] = "";
$lang["config_financial_year_mar"] = "";
$lang["config_financial_year_may"] = "";
$lang["config_financial_year_nov"] = "";
$lang["config_financial_year_oct"] = "";
$lang["config_financial_year_sep"] = "";
$lang["config_gcaptcha_enable"] = "";
$lang["config_gcaptcha_secret_key"] = "";
$lang["config_gcaptcha_secret_key_required"] = "";
$lang["config_gcaptcha_site_key"] = "";
$lang["config_gcaptcha_site_key_required"] = "";
$lang["config_gcaptcha_tooltip"] = "";
$lang["config_general"] = "Einstellungen";
$lang["config_general_configuration"] = "Einstellungen";
$lang["config_giftcard_number"] = "";
$lang["config_giftcard_random"] = "";
$lang["config_giftcard_series"] = "";
$lang["config_info"] = "Instellungen";
$lang["config_info_configuration"] = "Instellungen";
$lang["config_invoice"] = "Rechnungs";
$lang["config_invoice_configuration"] = "Druckereinstellungen";
$lang["config_invoice_default_comments"] = "Rechnungskommentar";
$lang["config_invoice_enable"] = "Enable Invoicing";
$lang["config_invoice_email_message"] = "Rechnungsvorlage (Email)";
$lang["config_invoice_enable"] = "Enable Invoicing";
$lang["config_invoice_printer"] = "Rechnungsdrucker";
$lang["config_jsprintsetup_required"] = "Warnung! Diese Funktion ist nur funktionsfähig";
$lang["config_language"] = "Sprache";
$lang["config_last_used_invoice_number"] = "";
$lang["config_last_used_quote_number"] = "";
$lang["config_left"] = "Left";
$lang["config_license"] = "License";
$lang["config_license_configuration"] = "License Statement";
$lang["config_line_sequence"] = "";
$lang["config_lines_per_page"] = "Zeilen pro Seite";
$lang["config_lines_per_page_number"] = "Zeilen pro Seite muss eine Zahl sein";
$lang["config_lines_per_page_required"] = "Zeilen pro Seite ist erforderlich";
@@ -113,19 +156,30 @@ $lang["config_location"] = "Lagerort";
$lang["config_location_configuration"] = "Lagerort";
$lang["config_location_info"] = "Lagerort-Information";
$lang["config_logout"] = "Wollen Sie eine Sicherung machen vor dem Beenden? Klicke [OK] für Sicherung";
$lang["config_mailchimp"] = "";
$lang["config_mailchimp_api_key"] = "";
$lang["config_mailchimp_configuration"] = "";
$lang["config_mailchimp_key_successfully"] = "";
$lang["config_mailchimp_key_unsuccessfully"] = "";
$lang["config_mailchimp_lists"] = "";
$lang["config_mailchimp_tooltip"] = "";
$lang["config_message"] = "Message";
$lang["config_message_configuration"] = "Message Configuration";
$lang["config_msg_msg"] = "Saved Text Message";
$lang["config_msg_msg_placeholder"] = "If you wish to use a SMS template save your message here. Otherwise leave the box blank.";
$lang["config_msg_uid"] = "SMS-API Username";
$lang["config_msg_uid_required"] = "SMS-API Username is a required field";
$lang["config_msg_pwd"] = "SMS-API Password";
$lang["config_msg_pwd_required"] = "SMS-API Password is a required field";
$lang["config_msg_src"] = "SMS-API Sender ID";
$lang["config_msg_src_required"] = "SMS-API Sender ID is a required field";
$lang["config_msg_uid"] = "SMS-API Username";
$lang["config_msg_uid_required"] = "SMS-API Username is a required field";
$lang["config_none"] = "none";
$lang["config_notify_alignment"] = "Notification Popup Position";
$lang["config_number_format"] = "Zahlenformat";
$lang["config_number_locale"] = "Länderkonfiguration";
$lang["config_number_locale_invalid"] = "Die eingegebene Lokale ist falsch. Bitte sehen Sie sich den Link tim Tooltip an um einen korrekten Wert zu finden";
$lang["config_number_locale_required"] = "Localennummer ist ein Pflichtfeld";
$lang["config_number_locale_tooltip"] = "Finden Sie eine korrekte Lokale über diesen Link";
$lang["config_payment_options_order"] = "Payment Options Order";
$lang["config_phone"] = "Telefon";
$lang["config_phone_required"] = "Telefon ist erforderlich";
@@ -147,20 +201,28 @@ $lang["config_print_top_margin_required"] = "Rand oben ist erforderlich";
$lang["config_quantity_decimals"] = "Quantity Decimals";
$lang["config_receipt"] = "Eingang";
$lang["config_receipt_configuration"] = "Druckereinstellungen";
$lang["config_receipt_default"] = "Default";
$lang["config_receipt_font_size"] = "";
$lang["config_receipt_font_size_number"] = "";
$lang["config_receipt_font_size_required"] = "";
$lang["config_receipt_info"] = "Quittungsinformation";
$lang["config_receipt_printer"] = "Quittungsdrucker";
$lang["config_receipt_show_taxes"] = "Zeige MWSt";
$lang["config_receipt_show_total_discount"] = "Zeige Gesamtrabatt";
$lang["config_receipt_short"] = "Short";
$lang["config_receipt_show_company_name"] = "";
$lang["config_receipt_show_description"] = "Show Description";
$lang["config_receipt_show_serialnumber"] = "Show Serial Number";
$lang["config_receipt_show_taxes"] = "Zeige MWSt";
$lang["config_receipt_show_total_discount"] = "Zeige Gesamtrabatt";
$lang["config_receipt_template"] = "Receipt Template";
$lang["config_receipt_default"] = "Default";
$lang["config_receipt_short"] = "Short";
$lang["config_receiving_calculate_average_price"] = "Berechne Durchschnittseinkaufspreis";
$lang["config_recv_invoice_format"] = "Format Eingangsrechnung";
$lang["config_register_mode_default"] = "";
$lang["config_return_policy_required"] = "Rücknahmepolitik erforderlich";
$lang["config_reward"] = "";
$lang["config_reward_configuration"] = "";
$lang["config_right"] = "Right";
$lang["config_sales_invoice_format"] = "Format Verkaufsrechnung";
$lang["config_sales_quote_format"] = "";
$lang["config_saved_successfully"] = "Einstellungen erfolgreich gesichert";
$lang["config_saved_unsuccessfully"] = "Einstellungen konnten nicht gesichert werden";
$lang["config_statistics"] = "Send statistics";
@@ -169,16 +231,17 @@ $lang["config_stock_location"] = "Lagerort";
$lang["config_stock_location_duplicate"] = "Bitte verwenden Sie einen eindeutigen Lagerort";
$lang["config_stock_location_invalid_chars"] = "Der Lagerort kann keine Unterstriche enthalten";
$lang["config_stock_location_required"] = "Lagerort Nummer ist erforderlich";
$lang["config_table"] = "";
$lang["config_table_configuration"] = "";
$lang["config_takings_printer"] = "Takings Printer";
$lang["config_tax"] = "";
$lang["config_tax_category"] = "";
$lang["config_tax_category_used"] = "";
$lang["config_tax_configuration"] = "";
$lang["config_tax_decimals"] = "Tax Decimals";
$lang["config_tax_included"] = "MWSt inbegriffen";
$lang["config_theme"] = "Design";
$lang["config_thousands_separator"] = "Tausendertrennzeichen";
$lang["config_timezone"] = "Zeitzone";
$lang["config_top"] = "Top";
$lang["config_website"] = "Website";
$lang["config_number_locale"] = "Länderkonfiguration";
$lang["config_return_policy_required"] = "Rücknahmepolitik erforderlich";
$lang["config_number_locale_required"] = "Localennummer ist ein Pflichtfeld";
$lang["config_number_locale_invalid"] = "Die eingegebene Lokale ist falsch. Bitte sehen Sie sich den Link tim Tooltip an um einen korrekten Wert zu finden";
$lang["config_number_locale_tooltip"] = "Finden Sie eine korrekte Lokale über diesen Link";
$lang["config_theme"] = "Design";

View File

@@ -2,23 +2,44 @@
$lang["customers_account_number"] = "Konto-Nr.";
$lang["customers_account_number_duplicate"] = "Diese Konto-Nr. existiert bereits";
$lang["customers_available_points"] = "";
$lang["customers_average"] = "";
$lang["customers_avg_discount"] = "";
$lang["customers_basic_information"] = "";
$lang["customers_cannot_be_deleted"] = "Kunde kann nicht gelöscht werden, ein oder mehrere Kunden weisen Verkäufe auf";
$lang["customers_company_name"] = "Firmenname";
$lang["customers_confirm_delete"] = "Wollen Sie die gewählten Kunden wirklich löschen?";
$lang["customers_customer"] = "Kunde";
$lang["customers_discount"] = "Discount";
$lang["customers_email_duplicate"] = "";
$lang["customers_error_adding_updating"] = "Fehler beim Hinzufügen/Ändern";
$lang["customers_excel_import_failed"] = "Excel Import fehlerhaft";
$lang["customers_excel_import_nodata_wrongformat"] = "Your uploaded file has no data or wrong format";
$lang["customers_excel_import_partially_failed"] = "Most Customers imported. But some were not, here is the list";
$lang["customers_excel_import_success"] = "Import of Customers successful";
$lang["customers_import_items_excel"] = "Importiere Kunden via Excel";
$lang["customers_mailchimp_activity_click"] = "";
$lang["customers_mailchimp_activity_lastopen"] = "";
$lang["customers_mailchimp_activity_open"] = "";
$lang["customers_mailchimp_activity_total"] = "";
$lang["customers_mailchimp_activity_unopen"] = "";
$lang["customers_mailchimp_email_client"] = "";
$lang["customers_mailchimp_info"] = "";
$lang["customers_mailchimp_member_rating"] = "";
$lang["customers_mailchimp_status"] = "";
$lang["customers_mailchimp_vip"] = "";
$lang["customers_max"] = "";
$lang["customers_min"] = "";
$lang["customers_new"] = "Neuer Kunde";
$lang["customers_none_selected"] = "Sie haben keinen Kunde zum Löschen gewählt";
$lang["customers_one_or_multiple"] = "Kunde(n)";
$lang["customers_quantity"] = "";
$lang["customers_stats_info"] = "";
$lang["customers_successful_adding"] = "Kunde erfolgreich hinzugefügt";
$lang["customers_successful_deleted"] = "Löschung erfolgreich";
$lang["customers_successful_updating"] = "Änderung erfolgreich";
$lang["customers_tax_code"] = "";
$lang["customers_taxable"] = "Steuerpflichtig";
$lang["customers_total"] = "Total";
$lang["customers_update"] = "Kunde ändern";
$lang["customers_import_items_excel"] = "Importiere Kunden via Excel";
$lang["customers_excel_import_failed"] = "Excel Import fehlerhaft";
$lang["customers_excel_import_nodata_wrongformat"] = "Your uploaded file has no data or wrong format";
$lang["customers_excel_import_success"] = "Import of Customers successful";
$lang["customers_excel_import_partially_failed"] = "Most Customers imported. But some were not, here is the list";
$lang["rewards_package"] = "";

View File

@@ -1,21 +1,22 @@
<?php
$lang["datepicker_today"] = "Heute";
$lang["datepicker_weekstart"] = "1";
$lang["datepicker_all_time"] = "Von Beginn weg";
$lang["datepicker_last_7"] = "Letzte 7 Tage";
$lang["datepicker_last_30"] = "Letzte 30 Tage";
$lang["datepicker_last_month"] = "Letzter Monat";
$lang["datepicker_last_year"] = "Letztes Jahr";
$lang["datepicker_this_month"] = "Dieser Monat";
$lang["datepicker_this_month_last_year"] = "Dieser Monat letzten Jahres";
$lang["datepicker_same_month_to_today"] = "Dieser Monat bis heute";
$lang["datepicker_same_month_to_same_day_last_year"] = "Dieser Monat bis Heute letzten Jahres";
$lang["datepicker_this_year"] = "Dieses Jahr";
$lang["datepicker_today_last_year"] = "Heute letzten Jahres";
$lang["datepicker_yesterday"] = "Gestern";
$lang["datepicker_apply"] = "Apply";
$lang["datepicker_cancel"] = "Cancel";
$lang["datepicker_from"] = "From";
$lang["datepicker_to"] = "To";
$lang["datepicker_custom"] = "Custom";
$lang["datepicker_from"] = "From";
$lang["datepicker_last_30"] = "Letzte 30 Tage";
$lang["datepicker_last_7"] = "Letzte 7 Tage";
$lang["datepicker_last_financial_year"] = "";
$lang["datepicker_last_month"] = "Letzter Monat";
$lang["datepicker_last_year"] = "Letztes Jahr";
$lang["datepicker_same_month_last_year"] = "Dieser Monat letzten Jahres";
$lang["datepicker_same_month_to_same_day_last_year"] = "Dieser Monat bis Heute letzten Jahres";
$lang["datepicker_this_financial_year"] = "";
$lang["datepicker_this_month"] = "Dieser Monat";
$lang["datepicker_this_year"] = "Dieses Jahr";
$lang["datepicker_to"] = "To";
$lang["datepicker_today"] = "Heute";
$lang["datepicker_today_last_year"] = "Heute letzten Jahres";
$lang["datepicker_weekstart"] = "1";
$lang["datepicker_yesterday"] = "Gestern";

View File

@@ -2,7 +2,10 @@
$lang["employees_basic_information"] = "Mitarbeiter-Information";
$lang["employees_cannot_be_deleted"] = "Konnte gewählten Mitarbeiter nicht löschen, einer oder mehrere weisen Verkäufe aus.";
$lang["employees_change_password"] = "";
$lang["employees_confirm_delete"] = "Wollen Sie diesen Mitarbeiter wirklich löschen?";
$lang["employees_current_password"] = "";
$lang["employees_current_password_invalid"] = "";
$lang["employees_employee"] = "Mitarbeiter";
$lang["employees_error_adding_updating"] = "Fehler beim Hinzufügen/Ändern";
$lang["employees_error_deleting_demo_admin"] = "Sie können den Admin nicht löschen";
@@ -14,15 +17,18 @@ $lang["employees_one_or_multiple"] = "Mitarbeiter";
$lang["employees_password"] = "Passwort";
$lang["employees_password_minlength"] = "Passwort muss mindestens 8 Zeichen lang sein";
$lang["employees_password_must_match"] = "Passwörter passen nicht überein";
$lang["employees_password_not_must_match"] = "";
$lang["employees_password_required"] = "Passwort ist erforderlich";
$lang["employees_permission_desc"] = "Klicken Sie unten, um die jeweiligen Zugangsrechte zu aktivieren";
$lang["employees_permission_info"] = "Mitarbeiter Zugangsrechte";
$lang["employees_repeat_password"] = "Wiederhole Passwort";
$lang["employees_subpermission_required"] = "Fügen Sie mindestens ein Zugangsrecht pro Modul hinzu";
$lang["employees_successful_adding"] = "Hinzufügen erfolgreich";
$lang["employees_successful_change_password"] = "";
$lang["employees_successful_deleted"] = "Löschung erfolgreich";
$lang["employees_successful_updating"] = "Änderung erfolgreich";
$lang["employees_unsuccessful_change_password"] = "";
$lang["employees_update"] = "Mitarbeiter ändern";
$lang["employees_username"] = "Benutzername";
$lang["employees_username_minlength"] = "Benutzername muss mindestens 5 Zeichen lang sein";
$lang["employees_username_required"] = "Benutzername ist erforderlich";
$lang["employees_subpermission_required"] = "Fügen Sie mindestens ein Zugangsrecht pro Modul hinzu";

View File

@@ -0,0 +1,9 @@
<?php
$lang["enum_half_down"] = "";
$lang["enum_half_even"] = "";
$lang["enum_half_five"] = "";
$lang["enum_half_odd"] = "";
$lang["enum_half_up"] = "";
$lang["enum_round_down"] = "";
$lang["enum_round_up"] = "";

View File

@@ -0,0 +1,18 @@
<?php
$lang["alpha_dash"] = "";
$lang["alpha_numeric"] = "";
$lang["exact_length"] = "";
$lang["greater_than"] = "";
$lang["is_natural"] = "";
$lang["is_natural_no_zero"] = "";
$lang["is_numeric"] = "";
$lang["is_unique"] = "";
$lang["less_than"] = "";
$lang["max_length"] = "";
$lang["min_length"] = "";
$lang["regex_match"] = "";
$lang["valid_email"] = "";
$lang["valid_emails"] = "";
$lang["valid_ip"] = "";
$lang["valid_url"] = "";

View File

@@ -3,10 +3,10 @@
$lang["giftcards_add_minus"] = "Bestandsänderung";
$lang["giftcards_allow_alt_description"] = "Erlaube Alternative Bezeichnung";
$lang["giftcards_amazon"] = "Amazon";
$lang["giftcards_remaining_balance"] = "Restwert von Gutschein %1 ist %2!";
$lang["giftcards_bulk_edit"] = "Sammeländerung";
$lang["giftcards_cannot_be_deleted"] = "Konnte gewählte Gutscheine nicht löschen, einer oder mehrere weisen Verkäufe auf";
$lang["giftcards_cannot_find_giftcard"] = "Konnte keinen Gutschein finden";
$lang["giftcards_cannot_use"] = "Giftcard %1 cannot be used for this sale. Invalid Customer!";
$lang["giftcards_card_value"] = "Wert";
$lang["giftcards_category"] = "Kategorie";
$lang["giftcards_change_all_to_allow_alt_desc"] = "Erlaube Alt. Bez. für ALLE";
@@ -47,6 +47,7 @@ $lang["giftcards_one_or_multiple"] = "Gutschein(e)";
$lang["giftcards_person_id"] = "Kunde";
$lang["giftcards_quantity"] = "Menge";
$lang["giftcards_quantity_required"] = "Menge ist erforderlich";
$lang["giftcards_remaining_balance"] = "Restwert von Gutschein %1 ist %2!";
$lang["giftcards_reorder_level"] = "Mindestbestand";
$lang["giftcards_retrive_giftcard_info"] = "Gutschein Information";
$lang["giftcards_sales_tax_1"] = "Umsatzsteuer 1";

View File

@@ -1,20 +1,30 @@
<?php
$lang["item_kits_add_item"] = "Neuer Artikel";
$lang["item_kits_all"] = "";
$lang["item_kits_cannot_be_deleted"] = "Konnte Artikel-Set(s) nicht löschen";
$lang["item_kits_confirm_delete"] = "Wollen Sie die gewählten Artikel-Sets wirklich löschen?";
$lang["item_kits_description"] = "Beschreibung Artikel-Set";
$lang["item_kits_discount_percent"] = "";
$lang["item_kits_error_adding_updating"] = "Fehler beim Hinzufügen/Ändern";
$lang["item_kits_find_kit_item"] = "";
$lang["item_kits_info"] = "Artikel-Set Information";
$lang["item_kits_item"] = "Artikel";
$lang["item_kits_items"] = "Artikel";
$lang["item_kits_kit"] = "Set-ID";
$lang["item_kits_kit_and_components"] = "";
$lang["item_kits_kit_and_stock"] = "";
$lang["item_kits_kit_only"] = "";
$lang["item_kits_name"] = "Name";
$lang["item_kits_new"] = "Neues Artikel-Set";
$lang["item_kits_no_item_kits_to_display"] = "Keine Artikel-Sets zum Anzeigen";
$lang["item_kits_none_selected"] = "Sie haben keine Artikel-Sets ausgewählt";
$lang["item_kits_one_or_multiple"] = "Artikel-Set(s)";
$lang["item_kits_price_option"] = "";
$lang["item_kits_priced_only"] = "";
$lang["item_kits_print_option"] = "";
$lang["item_kits_quantity"] = "Menge";
$lang["item_kits_sequence"] = "";
$lang["item_kits_successful_adding"] = "Artikel-Set erfolgreich hinzugefügt";
$lang["item_kits_successful_deleted"] = "Löschung erfolgreich";
$lang["item_kits_successful_updating"] = "Änderung erfolgreich";

View File

@@ -14,6 +14,7 @@ $lang["items_change_all_to_allow_alt_desc"] = "Ändere alle zu Erlaube Alt. Bez.
$lang["items_change_all_to_not_allow_allow_desc"] = "Ändere alle zu NICHT Erlaube Alt. Bez.";
$lang["items_change_all_to_serialized"] = "Ändere alle zu serialisiert";
$lang["items_change_all_to_unserialized"] = "Ändere alle zu nicht serialisiert";
$lang["items_change_image"] = "Change Image";
$lang["items_confirm_bulk_edit"] = "Wollen Sie alle gewählten Artikel ändern?";
$lang["items_confirm_bulk_edit_wipe_taxes"] = "All item tax information will be replaced!";
$lang["items_confirm_delete"] = "Wollen Sie alle gewählten Artikel löschen?";
@@ -27,24 +28,31 @@ $lang["items_details_count"] = "Lagerbestandsdetails";
$lang["items_do_nothing"] = "Tue nichts";
$lang["items_edit_fields_you_want_to_update"] = "Ändern Sie die Felder für ALLE gewählten Artikel?";
$lang["items_edit_multiple_items"] = "Sammeländerung";
$lang["items_empty_upc_items"] = "Leere UPC Artikel";
$lang["items_error_adding_updating"] = "Fehler beim Hinzufügen/Ändern";
$lang["items_error_updating_multiple"] = "Fehler beim Ändern";
$lang["items_excel_import_failed"] = "Excel Import fehlerhaft";
$lang["items_excel_import_nodata_wrongformat"] = "Your uploaded file has no data or wrong format";
$lang["items_excel_import_success"] = "Import of Items successful";
$lang["items_excel_import_partially_failed"] = "Most Items imported. But some were not, here is the list";
$lang["items_excel_import_success"] = "Import of Items successful";
$lang["items_generate_barcodes"] = "Generiere Barcodes";
$lang["items_image"] = "Bild";
$lang["items_import_items_excel"] = "Importiere Artikel mit Excel Datei";
$lang["items_info_provided_by"] = "Info provided by";
$lang["items_inventory"] = "Lagerbestand";
$lang["items_inventory_comments"] = "Bemerkungen";
$lang["items_inventory_data_tracking"] = "";
$lang["items_inventory_date"] = "";
$lang["items_inventory_employee"] = "";
$lang["items_inventory_in_out_quantity"] = "";
$lang["items_inventory_remarks"] = "";
$lang["items_is_deleted"] = "Gelöscht";
$lang["items_is_serialized"] = "Artikel hat Serien-Nr.";
$lang["items_item"] = "Artikel";
$lang["items_item_number"] = "UPC/EAN/ISBN";
$lang["items_item_number_duplicate"] = "Die Artikelnummer existiert bereits in der Datenbank";
$lang["items_kit"] = "";
$lang["items_location"] = "Ort";
$lang["items_empty_upc_items"] = "Leere UPC Artikel";
$lang["items_low_inventory_items"] = "nicht am Lager";
$lang["items_manually_editing_of_quantity"] = "Manuelle Bestandesänderung";
$lang["items_name"] = "Artikelname";
@@ -54,6 +62,7 @@ $lang["items_no_description_items"] = "Artikel ohne Bezeichnung";
$lang["items_no_items_to_display"] = "Keine Artikel zum Anzeigen";
$lang["items_none"] = "Nichts";
$lang["items_none_selected"] = "Sie haben keine Artikel zum Ändern gewählt";
$lang["items_nonstock"] = "";
$lang["items_number_information"] = "Artikelnummer";
$lang["items_number_required"] = "UPC/EAN/ISBN ist erforderlich";
$lang["items_one_or_multiple"] = "Artikel";
@@ -61,15 +70,21 @@ $lang["items_quantity"] = "Menge";
$lang["items_quantity_number"] = "Menge muss eine Zahl sein";
$lang["items_quantity_required"] = "Menge ist erforderlich";
$lang["items_receiving_quantity"] = "Eingangsmenge";
$lang["items_remove_image"] = "Remove Image";
$lang["items_reorder_level"] = "Mindestbestand";
$lang["items_reorder_level_number"] = "Mindestbestand muss eine Zahl sein";
$lang["items_reorder_level_required"] = "Mindestbestand ist erforderlich";
$lang["items_retrive_item_info"] = "Artikelinformation";
$lang["items_sales_tax_1"] = "Umsatzsteuer 1";
$lang["items_sales_tax_2"] = "Umsatzsteuer 2";
$lang["items_search_custom_items"] = "Suche in Zusatzfeldern";
$lang["items_search_attributes"] = "Suche in Zusatzfeldern";
$lang["items_search_custom_items"] = "";
$lang["items_select_image"] = "Select Image";
$lang["items_serialized_items"] = "Serialisierte Artikel";
$lang["items_standard"] = "";
$lang["items_stock"] = "";
$lang["items_stock_location"] = "Lagerort";
$lang["items_stock_type"] = "";
$lang["items_successful_adding"] = "Artikel erfolgreich hinzugefügt";
$lang["items_successful_bulk_edit"] = "Die gewählten Artikel wurden erforlgreich geändert";
$lang["items_successful_deleted"] = "Löschung erfolgreich";
@@ -80,13 +95,10 @@ $lang["items_tax_2"] = "MWSt 2";
$lang["items_tax_percent"] = "MWSt %";
$lang["items_tax_percent_required"] = "MWSt % ist erforderlich";
$lang["items_tax_percents"] = "Steuerprozent(e)";
$lang["items_type"] = "";
$lang["items_unit_price"] = "Preis";
$lang["items_unit_price_number"] = "Preis muss eine Zahl sein";
$lang["items_unit_price_required"] = "Preis ist erforderlich";
$lang["items_upc_database"] = "UPC Datenbank";
$lang["items_update"] = "Ändere Artikel";
$lang["items_use_inventory_menu"] = "Verwende Bestandesmenu";
$lang["items_import_items_excel"] = "Importiere Artikel mit Excel Datei";
$lang["items_select_image"] = "Select Image";
$lang["items_change_image"] = "Change Image";
$lang["items_remove_image"] = "Remove Image";

View File

@@ -1,6 +1,9 @@
<?php
$lang["login_gcaptcha"] = "";
$lang["login_go"] = "Start";
$lang["login_invalid_gcaptcha"] = "";
$lang["login_invalid_installation"] = "";
$lang["login_invalid_username_and_password"] = "Ungültiger Benutzername/Passwort";
$lang["login_login"] = "Login";
$lang["login_password"] = "Passwort";

View File

@@ -1,14 +1,14 @@
<?php
$lang["messages_sms_send"] = "Send SMS";
$lang["messages_first_name"] = "First name";
$lang["messages_last_name"] = "Last name";
$lang["messages_phone"] = "Phone number";
$lang["messages_phone_placeholder"] = "Mobile Number(s) here...";
$lang["messages_phone_number_required"] = "Phone number required";
$lang["messages_message"] = "Message";
$lang["messages_message_placeholder"] = "Your Message here...";
$lang["messages_message_required"] = "Message required";
$lang["messages_multiple_phones"] = "(In case of multiple recipients, enter mobile numbers separated by commas)";
$lang["messages_phone"] = "Phone number";
$lang["messages_phone_number_required"] = "Phone number required";
$lang["messages_phone_placeholder"] = "Mobile Number(s) here...";
$lang["messages_sms_send"] = "Send SMS";
$lang["messages_successfully_sent"] = "Message successfully sent to: ";
$lang["messages_unsuccessfully_sent"] = "Message unsuccessfully sent to: ";

View File

@@ -0,0 +1,7 @@
<?php
$lang["migrate_backup"] = "";
$lang["migrate_failed"] = "";
$lang["migrate_info"] = "";
$lang["migrate_start"] = "";
$lang["migrate_success"] = "";

View File

@@ -13,6 +13,10 @@ $lang["module_item_kits"] = "Artikel-Sets";
$lang["module_item_kits_desc"] = "Hinzufügen, Ändern, Löschen und Suchen";
$lang["module_items"] = "Artikel";
$lang["module_items_desc"] = "Hinzufügen, Ändern, Löschen und Suchen";
$lang["module_messages"] = "Messages";
$lang["module_messages_desc"] = "Send Messages to Customers, Suppliers, Employees et al.";
$lang["module_migrate"] = "";
$lang["module_migrate_desc"] = "";
$lang["module_receivings"] = "Eingänge";
$lang["module_receivings_desc"] = "Hinzufügen, Ändern, Löschen und Suchen";
$lang["module_reports"] = "Berichte";
@@ -21,5 +25,5 @@ $lang["module_sales"] = "Verkauf";
$lang["module_sales_desc"] = "Hinzufügen, Ändern, Löschen und Suchen";
$lang["module_suppliers"] = "Lieferanten";
$lang["module_suppliers_desc"] = "Hinzufügen, Ändern, Löschen und Suchen";
$lang["module_messages"] = "Messages";
$lang["module_messages_desc"] = "Send Messages to Customers, Suppliers, Employees et al.";
$lang["module_taxes"] = "";
$lang["module_taxes_desc"] = "";

View File

@@ -1,17 +1,16 @@
<?php
$lang["receivings_transaction_failed"] = "Eingangstransaktion fehlerhaft";
$lang["receivings_cancel_receiving"] = "Abbrechen";
$lang["receivings_cannot_be_deleted"] = "Eingangsbestellung(en) konnten nicht gelöscht werden";
$lang["receivings_comments"] = "Kommentare";
$lang["receivings_complete_receiving"] = "Abschliessen";
$lang["receivings_confirm_cancel_receiving"] = "Wollen Siesen Wareneingang annullieren? Alle Einträge werden gelöscht.";
$lang["receivings_confirm_delete"] = "Wollen Sie diesen Eingang wirklich löschen? Rückgängig nicht möglich";
$lang["receivings_confirm_finish_receiving"] = "Wollen Sie diesen Wareneingang verabeiten? Dieser Schritt kann nicht rückgängig gemacht werden.";
$lang["receivings_cost"] = "Kosten";
$lang["receivings_date"] = "Eingangsdatum";
$lang["receivings_date_required"] = "Ein korrektes Datum ist erforderlich";
$lang["receivings_date_type"] = "Datum ist erforderlich";
$lang["receivings_confirm_delete"] = "Wollen Sie diesen Eingang wirklich löschen? Rückgängig nicht möglich";
$lang["receivings_delete_entire_sale"] = "Wareneingang löschen";
$lang["receivings_discount"] = "Rabatt %";
$lang["receivings_edit"] = "Ändern";
@@ -22,7 +21,6 @@ $lang["receivings_error_requisition"] = "Kann Bestand nicht von oder zum gleiche
$lang["receivings_find_or_scan_item"] = "Finde/Scanne Artikel";
$lang["receivings_find_or_scan_item_or_receipt"] = "Finde/Scanne Artikel oder Quittung";
$lang["receivings_id"] = "Eingangs-Nr.";
$lang["receivings_reference"] = "Reference";
$lang["receivings_item_name"] = "Artikelname";
$lang["receivings_mode"] = "Eingangsmodus";
$lang["receivings_new_supplier"] = "Neuer Lieferant";
@@ -32,6 +30,7 @@ $lang["receivings_quantity"] = "Menge";
$lang["receivings_receipt"] = "Eingangsquittung";
$lang["receivings_receipt_number"] = "Eingangs-Nr.";
$lang["receivings_receiving"] = "Eingang";
$lang["receivings_reference"] = "Reference";
$lang["receivings_register"] = "Wareneingang";
$lang["receivings_requisition"] = "Bedarf";
$lang["receivings_return"] = "Retoure";
@@ -43,10 +42,11 @@ $lang["receivings_stock_source"] = "Lagerort (Quelle)";
$lang["receivings_successfully_deleted"] = "Löschung erfolgreich";
$lang["receivings_successfully_updated"] = "Änderung erfolgreich";
$lang["receivings_supplier"] = "Lieferant";
$lang["receivings_supplier_email"] = "Lieferant Email";
$lang["receivings_supplier_address"] = "Lieferant Address";
$lang["receivings_supplier_email"] = "Lieferant Email";
$lang["receivings_supplier_location"] = "Lieferant Location";
$lang["receivings_total"] = "Total";
$lang["receivings_transaction_failed"] = "Eingangstransaktion fehlerhaft";
$lang["receivings_unable_to_add_item"] = "Kann Artikel nicht zum Eingang hinzufügen";
$lang["receivings_unsuccessfully_updated"] = "Eingang nicht erfolgreich geändert";
$lang["receivings_update"] = "Ändern";

View File

@@ -5,6 +5,8 @@ $lang["reports_categories"] = "Kategorien";
$lang["reports_categories_summary_report"] = "Bericht: Kategorien (summarisch)";
$lang["reports_category"] = "Kategorie";
$lang["reports_comments"] = "Kommentare";
$lang["reports_cost"] = "Kosten";
$lang["reports_cost_price"] = "Einstandspreis";
$lang["reports_count"] = "Anzahl";
$lang["reports_customer"] = "Kunde";
$lang["reports_customers"] = "Kunden";
@@ -20,6 +22,7 @@ $lang["reports_discount"] = "Rabatt";
$lang["reports_discount_percent"] = "Rabatt %";
$lang["reports_discounts"] = "Rabatte";
$lang["reports_discounts_summary_report"] = "Bericht: Rabatte (summarisch)";
$lang["reports_earned"] = "";
$lang["reports_employee"] = "Mitarbeiter";
$lang["reports_employees"] = "Mitarbeiter";
$lang["reports_employees_summary_report"] = "Bericht: Mitarbeiter (summarisch)";
@@ -31,6 +34,7 @@ $lang["reports_inventory_reports"] = "Berichte: Lager";
$lang["reports_inventory_summary"] = "Lager (summarisch)";
$lang["reports_inventory_summary_report"] = "Bericht: Lager (summarisch)";
$lang["reports_item"] = "Artikel";
$lang["reports_item_count"] = "Filter nach Artikelzahl";
$lang["reports_item_name"] = "Artikelname";
$lang["reports_item_number"] = "Artikelnummer";
$lang["reports_items"] = "Artikel";
@@ -39,14 +43,16 @@ $lang["reports_items_received"] = "Erhaltene Artikel";
$lang["reports_items_summary_report"] = "Bericht: Artikel (summarisch)";
$lang["reports_low_inventory"] = "Lager mit Unterbestand";
$lang["reports_low_inventory_report"] = "Bericht: Inventar";
$lang["reports_more_than_zero"] = "Mehr als Null";
$lang["reports_name"] = "Name";
$lang["reports_no_reports_to_display"] = "Keine Artikel zum Anzeigen";
$lang["reports_payment_type"] = "Zahlungsart";
$lang["reports_payments"] = "Zahlungen";
$lang["reports_payments_summary_report"] = "Bericht: Zahlungen (summarisch)";
$lang["reports_profit"] = "Gewinn";
$lang["reports_cost"] = "Kosten";
$lang["reports_quantity"] = "Menge";
$lang["reports_quantity_purchased"] = "Menge gekauft";
$lang["reports_quotes"] = "";
$lang["reports_received_by"] = "Erhalten von";
$lang["reports_receiving_id"] = "Einangs-ID";
$lang["reports_receiving_type"] = "Eingangstyp";
@@ -75,6 +81,7 @@ $lang["reports_serial_number"] = "Seriennummer";
$lang["reports_sold_by"] = "Verkauft durch";
$lang["reports_sold_to"] = "Verkauft an";
$lang["reports_stock_location"] = "Lagerort";
$lang["reports_sub_total_value"] = "Zwischentotal";
$lang["reports_subtotal"] = "Zwischensumme";
$lang["reports_summary_reports"] = "Berichte (summarisch)";
$lang["reports_supplied_by"] = "Geliefert von";
@@ -86,12 +93,8 @@ $lang["reports_tax_percent"] = "MWSt %";
$lang["reports_taxes"] = "Steuern";
$lang["reports_taxes_summary_report"] = "Bericht: Steuern (summarisch)";
$lang["reports_total"] = "Total";
$lang["reports_type"] = "Typ";
$lang["reports_item_count"] = "Filter nach Artikelzahl";
$lang["reports_cost_price"] = "Einstandspreis";
$lang["reports_unit_price"] = "Verkaufspreis";
$lang["reports_sub_total_value"] = "Zwischentotal";
$lang["reports_total_inventory_value"] = "Total Inventarwert";
$lang["reports_type"] = "Typ";
$lang["reports_unit_price"] = "Verkaufspreis";
$lang["reports_used"] = "";
$lang["reports_zero_and_less"] = "Null und weniger";
$lang["reports_more_than_zero"] = "Mehr als Null";
$lang["reports_no_reports_to_display"] = "Keine Artikel zum Anzeigen";

View File

@@ -1,13 +1,18 @@
<?php
$lang["customers_available_points"] = "";
$lang["rewards_package"] = "";
$lang["rewards_remaining_balance"] = "";
$lang["sales_add_payment"] = "Zahlung";
$lang["sales_amount_due"] = "fälliger Betrag";
$lang["sales_amount_tendered"] = "Erhalten";
$lang["sales_cancel_sale"] = "Annullieren";
$lang["sales_cash"] = "Bar";
$lang["sales_cash_filter"] = "Bar";
$lang["sales_change_due"] = "Wechselgeld";
$lang["sales_check"] = "Scheck";
$lang["sales_check_balance"] = "Scheck-Differenz";
$lang["sales_check_filter"] = "";
$lang["sales_comment"] = "Bemerkung";
$lang["sales_comments"] = "Bemerkungen";
$lang["sales_complete_sale"] = "Abschliessen";
@@ -15,12 +20,14 @@ $lang["sales_confirm_cancel_sale"] = "Wollen Sie diesen Verkauf abschliessen? Al
$lang["sales_confirm_delete"] = "Wollen Sie die gewählten Aufträge löschen?";
$lang["sales_credit"] = "Kreditkarte";
$lang["sales_customer"] = "Kunde";
$lang["sales_customer_email"] = "Customer Email";
$lang["sales_customer_address"] = "Customer Address";
$lang["sales_customer_location"] = "Customer Location";
$lang["sales_customer_discount"] = "Discount";
$lang["sales_customer_email"] = "Customer Email";
$lang["sales_customer_location"] = "Customer Location";
$lang["sales_customer_mailchimp_status"] = "";
$lang["sales_customer_total"] = "Total";
$lang["sales_date"] = "Datum";
$lang["sales_date_range"] = "Zeitrahmen";
$lang["sales_date_required"] = "Ein korrektas Datum ist erforderlich";
$lang["sales_date_type"] = "Datum ist erforderlich";
$lang["sales_debit"] = "Debitkarte";
@@ -29,27 +36,31 @@ $lang["sales_delete_entire_sale"] = "Auftrag löschen";
$lang["sales_delete_successful"] = "Löschung erfolgreich";
$lang["sales_delete_unsuccessful"] = "Löschung nicht erfolgreich";
$lang["sales_description_abbrv"] = "Bez.";
$lang["sales_discard_quote"] = "";
$lang["sales_discount"] = "%";
$lang["sales_discount_included"] = "Rabatt %";
$lang["sales_discount"] = "Rabatt";
$lang["sales_discount_short"] = "%";
$lang["sales_due"] = "";
$lang["sales_due_filter"] = "";
$lang["sales_edit"] = "Ändern";
$lang["sales_edit_item"] = "Ändere Art.";
$lang["sales_edit_sale"] = "Auftrag ändern";
$lang["sales_email_receipt"] = "Quittung per Email";
$lang["sales_employee"] = "Mitarbeiter";
$lang["sales_entry"] = "";
$lang["sales_error_editing_item"] = "Fehler beim Ändern des Artikels";
$lang["sales_find_or_scan_item"] = "Finde/Scanne Artikel";
$lang["sales_find_or_scan_item_or_receipt"] = "Finde/Scanne Artikel oder Quittung";
$lang["sales_giftcard"] = "Gutschein";
$lang["sales_giftcard_balance"] = "Gutschein Restwert";
$lang["sales_giftcard_number"] = "Gutschein Nr.";
$lang["sales_group_by_category"] = "";
$lang["sales_group_by_type"] = "";
$lang["sales_id"] = "ID";
$lang["sales_invoice"] = "Rechnung";
$lang["sales_invoice_confirm"] = "Diese rechnung wird gesendet an";
$lang["sales_invoice_enable"] = "Erzeuge Rechnung";
$lang["sales_invoice_filter"] = "Rechnungen";
$lang["sales_cash_filter"] = "Bar";
$lang["sales_invoice_no_email"] = "Dieser Kunde hat keine gültige Email Adresse";
$lang["sales_invoice_number"] = "Rechnungs-Nr.";
$lang["sales_invoice_number_duplicate"] = "Bitte geben Sie eine eindeutige Rechnungsnummer ein";
@@ -69,8 +80,8 @@ $lang["sales_no_description"] = "nichts";
$lang["sales_no_filter"] = "Alle";
$lang["sales_no_items_in_cart"] = "Warenkorb ist leer";
$lang["sales_no_sales_to_display"] = "Keine Artikel zum Anzeigen";
$lang["sales_none_selected"] = "Sie haben keinen Auftrag zum Löschen ausgewählt";
$lang["sales_one_or_multiple"] = "Verkäufe";
$lang["sales_takings"] = "Einnahmen";
$lang["sales_payment"] = "Zahlungsart";
$lang["sales_payment_amount"] = "Betrag";
$lang["sales_payment_not_cover_total"] = "Betrag deckt Rechnungsbetrag nicht";
@@ -79,8 +90,12 @@ $lang["sales_payments_total"] = "Zahlung Total";
$lang["sales_price"] = "Preis";
$lang["sales_print_after_sale"] = "Drucke Bon nach Verkauf";
$lang["sales_quantity"] = "Menge";
$lang["sales_quantity_less_than_zero"] = "Warnung: Gewünschte Menge ist nicht verfügbar. Sie können den Verkauf fortsetzen, dennoch prüfen Sie bitte den Lagerbestand.";
$lang["sales_quantity_less_than_reorder_level"] = "Warnung: Gewünschte Menge ist nicht verfügbar.";
$lang["sales_quantity_less_than_zero"] = "Warnung: Gewünschte Menge ist nicht verfügbar. Sie können den Verkauf fortsetzen, dennoch prüfen Sie bitte den Lagerbestand.";
$lang["sales_quote"] = "";
$lang["sales_quote_number"] = "";
$lang["sales_quote_sent"] = "";
$lang["sales_quote_unsent"] = "";
$lang["sales_receipt"] = "Quittung";
$lang["sales_receipt_number"] = "Quittung Nr.";
$lang["sales_receipt_sent"] = "Quittung gesendet an";
@@ -88,11 +103,16 @@ $lang["sales_receipt_unsent"] = "Quittung nicht gesendet";
$lang["sales_register"] = "Kasse";
$lang["sales_remove_customer"] = "Entferne Kunde";
$lang["sales_return"] = "Retoure";
$lang["sales_rewards"] = "";
$lang["sales_rewards_balance"] = "";
$lang["sales_sale"] = "Verkauf";
$lang["sales_sale_by_invoice"] = "";
$lang["sales_sale_for_customer"] = "Kunde:";
$lang["sales_sale_time"] = "Zeit";
$lang["sales_sales_tax"] = "";
$lang["sales_select_customer"] = "Wähle Kunde (optional)";
$lang["sales_send_invoice"] = "Sende Rechnung";
$lang["sales_send_quote"] = "";
$lang["sales_send_receipt"] = "Sende Quittung";
$lang["sales_serial"] = "Seriennummer";
$lang["sales_show_invoice"] = "Rechnung";
@@ -107,6 +127,8 @@ $lang["sales_successfully_updated"] = "Änderung erfolgreich";
$lang["sales_suspend_sale"] = "->Pendent";
$lang["sales_suspended_sale_id"] = "ID";
$lang["sales_suspended_sales"] = "Pendente Aufträge";
$lang["sales_table"] = "";
$lang["sales_takings"] = "Einnahmen";
$lang["sales_tax"] = "MWSt";
$lang["sales_tax_percent"] = "MWSt %";
$lang["sales_total"] = "Total";
@@ -119,5 +141,3 @@ $lang["sales_unsuccessfully_updated"] = "Änderung nicht erfolgreich";
$lang["sales_unsuspend"] = "Aktivieren";
$lang["sales_unsuspend_and_delete"] = "Aktivieren und löschen";
$lang["sales_update"] = "Ändern";
$lang["sales_date_range"] = "Zeitrahmen";
$lang["sales_none_selected"] = "Sie haben keinen Auftrag zum Löschen ausgewählt";

Some files were not shown because too many files have changed in this diff Show More