mirror of
https://github.com/opensourcepos/opensourcepos.git
synced 2026-05-25 08:44:42 -04:00
Compare commits
110 Commits
WebShells-
...
plugin-sys
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
93713f8e4b | ||
|
|
b7384296c1 | ||
|
|
ad901f9c2d | ||
|
|
388c8ad631 | ||
|
|
705c61b48c | ||
|
|
d39067e2e1 | ||
|
|
50eead4da4 | ||
|
|
4c7ac7b5d0 | ||
|
|
bed8a1c34d | ||
|
|
10588867c4 | ||
|
|
139f754a07 | ||
|
|
c08872f83e | ||
|
|
01172fc522 | ||
|
|
f8fd12c5de | ||
|
|
a15a6516a6 | ||
|
|
84a10ec218 | ||
|
|
f650f17181 | ||
|
|
d699d82388 | ||
|
|
7afaeef6a3 | ||
|
|
df24ef5193 | ||
|
|
1c2112a78b | ||
|
|
ad097adccd | ||
|
|
796657118a | ||
|
|
445a506ea8 | ||
|
|
5d608ec873 | ||
|
|
e5fdea85f3 | ||
|
|
ca07aac9a0 | ||
|
|
cd91ac3ff3 | ||
|
|
478934321d | ||
|
|
4d266c9b5e | ||
|
|
43bee7bfe4 | ||
|
|
f71af765f8 | ||
|
|
4246a915c4 | ||
|
|
939012dc1b | ||
|
|
d2d0c8bf37 | ||
|
|
6c55526479 | ||
|
|
fe331c34dd | ||
|
|
6630fb56f6 | ||
|
|
2f48e0499f | ||
|
|
cbabe1d56c | ||
|
|
8c1c9d85dc | ||
|
|
97adee0c28 | ||
|
|
32997d48c0 | ||
|
|
1a9e84bd37 | ||
|
|
9d0b14a8ce | ||
|
|
c796b52c22 | ||
|
|
f863be68f9 | ||
|
|
54c476a498 | ||
|
|
ec139c477a | ||
|
|
bae361c637 | ||
|
|
dcfdc212da | ||
|
|
c217fd770c | ||
|
|
6ef6f49693 | ||
|
|
eae6417f97 | ||
|
|
4cfff5388c | ||
|
|
a77b95f0cc | ||
|
|
506cded6e9 | ||
|
|
2639a8b212 | ||
|
|
f6106e7ead | ||
|
|
202c016dd8 | ||
|
|
d47ead8747 | ||
|
|
0e5ba88f6c | ||
|
|
d88cf54f99 | ||
|
|
2f200b47c6 | ||
|
|
f819bc92f8 | ||
|
|
db180d134e | ||
|
|
edd97a3c78 | ||
|
|
d73bfd39f6 | ||
|
|
d9d93e0d9d | ||
|
|
bfb4ad4617 | ||
|
|
00cd13f735 | ||
|
|
43972b8f0e | ||
|
|
ff3c7d1b14 | ||
|
|
9fc918b53d | ||
|
|
56f68f7577 | ||
|
|
65fb6339d7 | ||
|
|
57a19bb35f | ||
|
|
c81cf4a5cc | ||
|
|
1918f3e6e2 | ||
|
|
196e87fa49 | ||
|
|
ebd1c8fa0e | ||
|
|
f842be50b3 | ||
|
|
e94e5e634c | ||
|
|
bcff389b34 | ||
|
|
deb122246c | ||
|
|
e1b76d2e0d | ||
|
|
84ea65b1bd | ||
|
|
a19fe03ecf | ||
|
|
15227523d9 | ||
|
|
1587d4276d | ||
|
|
d6967704e6 | ||
|
|
80dc62948d | ||
|
|
acb3b18584 | ||
|
|
19cdb76bb3 | ||
|
|
07f1a35e9d | ||
|
|
3b0476f2b3 | ||
|
|
2fa324ba4e | ||
|
|
8b14ed81e0 | ||
|
|
0ea3ced674 | ||
|
|
896ed87797 | ||
|
|
eb264ad76d | ||
|
|
10a64e7af9 | ||
|
|
6e99f05d63 | ||
|
|
c430c7afb5 | ||
|
|
519347f4f5 | ||
|
|
62d84411b2 | ||
|
|
6bd4bb545d | ||
|
|
66f7d70749 | ||
|
|
bd8b4fa6c1 | ||
|
|
a9669ddf19 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -87,3 +87,5 @@ auth.json
|
||||
/app/Database/database.sql
|
||||
/writable/cache/settings
|
||||
/.env.bak
|
||||
/.php-cs-fixer.cache
|
||||
/build
|
||||
|
||||
127
AGENTS.md
127
AGENTS.md
@@ -1,40 +1,125 @@
|
||||
# Agent Instructions
|
||||
|
||||
This document provides guidance for AI agents working on the Open Source Point of Sale (OSPOS) codebase.
|
||||
This document is the single source of truth for all AI agents working on the Open Source Point of Sale (OSPOS) codebase. Read it fully before making any changes.
|
||||
|
||||
## Project Overview
|
||||
|
||||
OpenSourcePOS is a web-based Point of Sale system built on **CodeIgniter 4** (PHP 8.2+) with MySQL/MariaDB. Frontend uses Bootstrap 3 (Bootstrap 5 migration in progress) and jQuery, with assets built via Gulp.
|
||||
|
||||
## Common Commands
|
||||
|
||||
```bash
|
||||
# PHP dependencies
|
||||
composer install
|
||||
|
||||
# Frontend dependencies and asset build
|
||||
npm install
|
||||
npm run build # Runs Gulp: compiles and copies all CSS/JS to public/resources/
|
||||
|
||||
# Run full test suite
|
||||
composer test
|
||||
|
||||
# Run a single test file
|
||||
vendor/bin/phpunit tests/unit/AppTest.php
|
||||
|
||||
# Lint / code style check
|
||||
vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.no-header.php --dry-run
|
||||
|
||||
# Apply code style fixes
|
||||
vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.no-header.php
|
||||
```
|
||||
|
||||
Tests require a MariaDB/MySQL database (see CI config in `.github/workflows/phpunit.yml`).
|
||||
|
||||
## Architecture
|
||||
|
||||
### Framework & Entry Point
|
||||
|
||||
- **Framework**: CodeIgniter 4 — MVC with QueryBuilder ORM, no Eloquent
|
||||
- **Web root**: `public/` — `public/index.php` is the only entry point
|
||||
- **Routes**: `app/Config/Routes.php`
|
||||
- **App config**: `app/Config/App.php` (version, session, security settings)
|
||||
- **Environment**: `.env` file (copy from `.env.example`); `CI_ENVIRONMENT` controls dev/prod/test mode
|
||||
|
||||
### Directory Layout
|
||||
|
||||
```text
|
||||
app/
|
||||
├── Config/ # CI4 config classes
|
||||
├── Controllers/ # ~27 controllers (Sales, Items, Reports, Customers, etc.)
|
||||
├── Models/ # ~28 models (Sale, Item, Customer, Supplier, etc.)
|
||||
├── Views/ # PHP view templates
|
||||
├── Libraries/ # Business logic (Sale_lib, Tax_lib, Receiving_lib, etc.)
|
||||
├── Plugins/ # Plugin system — each plugin is a subdirectory here
|
||||
├── Database/ # Migrations (ospos_ prefix) and seeds
|
||||
├── Language/ # i18n files (IETF BCP 47 locale names)
|
||||
├── Filters/ # Request/response filters (auth, HTTPS, etc.)
|
||||
└── Events/ # CI4 event subscribers
|
||||
public/
|
||||
└── resources/ # Built CSS/JS (do not edit directly — generated by npm run build)
|
||||
tests/ # PHPUnit test suite
|
||||
```
|
||||
|
||||
### Key Libraries
|
||||
|
||||
`app/Libraries/` holds core business logic:
|
||||
- `Sale_lib.php` — sale cart state, pricing, discounts, tax calculation
|
||||
- `Tax_lib.php` — multi-tier tax engine
|
||||
- `Receiving_lib.php` — purchase orders / receivings
|
||||
- `Barcode_lib.php` — barcode generation
|
||||
- `Email_lib.php` — email delivery
|
||||
- `Token_lib.php` — CSRF/session token management
|
||||
|
||||
### Database
|
||||
|
||||
- Table prefix: `ospos_` (defined in `app/Config/Database.php`)
|
||||
- Migrations live in `app/Database/Migrations/` and run automatically on first access
|
||||
- CodeIgniter QueryBuilder throughout — no raw SQL unless necessary
|
||||
|
||||
### Plugin System
|
||||
|
||||
Plugins live in `app/Plugins/<PluginName>/` and are auto-discovered by `PluginManager`. Each plugin:
|
||||
- Extends `BasePlugin` or implements `PluginInterface`
|
||||
- Registers event hooks (e.g., `item_sale`, `customer_saved`, view hooks like `customer_tabs`)
|
||||
- Can include its own `Views/`, `Models/`, `Controllers/`, and `Language/` subdirectories
|
||||
- Configuration stored in `ospos_plugin_config` table
|
||||
- See `app/Plugins/README.md` for plugin structure, event hooks, and LICENSE requirements
|
||||
|
||||
### Frontend Build
|
||||
|
||||
`gulpfile.js` (Gulp 5) copies vendor CSS/JS from `node_modules/` into `public/resources/`. Run `npm run build` after installing npm packages or changing gulp tasks. Do not manually edit files under `public/resources/`.
|
||||
|
||||
## Code Style
|
||||
|
||||
- Follow PHP CodeIgniter 4 coding standards
|
||||
- Run PHP-CS-Fixer before committing: `vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.no-header.php`
|
||||
- Write PHP 8.1+ compatible code with proper type declarations
|
||||
- Use PSR-12 naming conventions: `camelCase` for variables and functions, `PascalCase` for classes, `UPPER_CASE` for constants
|
||||
- **PSR-12** enforced via PHP-CS-Fixer (config: `.php-cs-fixer.no-header.php`)
|
||||
- `camelCase` for variables and methods; `PascalCase` for classes; `UPPER_CASE` for constants
|
||||
- PHP 8.2+ features acceptable (named arguments, enums, readonly properties)
|
||||
- Views in `app/Views/errors/html/` are excluded from the fixer
|
||||
- Run fixer before committing: `vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.no-header.php`
|
||||
|
||||
## Development
|
||||
## Development Workflow
|
||||
|
||||
- Create a new git worktree for each issue, based on the latest state of `origin/master`
|
||||
- Commit fixes to the worktree and push to the remote
|
||||
|
||||
## Testing
|
||||
|
||||
- Run PHPUnit tests: `composer test`
|
||||
- Tests must pass before submitting changes
|
||||
|
||||
## Build
|
||||
|
||||
- Install dependencies: `composer install && npm install`
|
||||
- Build assets: `npm run build` or `gulp`
|
||||
- Tests must pass before submitting changes (`composer test`)
|
||||
- Minimum PHPUnit version: 10.5.16+. Default config: `phpunit.xml.dist`
|
||||
|
||||
## Conventions
|
||||
|
||||
- Controllers go in `app/Controllers/`
|
||||
- Models go in `app/Models/`
|
||||
- Views go in `app/Views/`
|
||||
- Database migrations in `app/Database/Migrations/`
|
||||
- Controllers → `app/Controllers/`
|
||||
- Models → `app/Models/`
|
||||
- Views → `app/Views/`
|
||||
- Migrations → `app/Database/Migrations/`
|
||||
- Plugins → `app/Plugins/` (see `app/Plugins/README.md` for plugin structure, event hooks, and LICENSE requirements)
|
||||
- Use CodeIgniter 4 framework patterns and helpers
|
||||
- Sanitize user input; escape output using `esc()` helper
|
||||
|
||||
## Security
|
||||
|
||||
- `app.allowedHostnames` **must** be set in production (host header injection protection)
|
||||
- HTMLPurifier for HTML sanitization; Laminas Escaper for output escaping
|
||||
- CSRF tokens managed via `Token_lib` — do not bypass CI4's CSRF filter
|
||||
- Session storage is database-backed (`ospos_sessions` table) for multi-instance support
|
||||
- Never commit secrets, credentials, or `.env` files
|
||||
- Use parameterized queries to prevent SQL injection
|
||||
- Validate and sanitize all user input
|
||||
- Validate and sanitize all user input
|
||||
|
||||
3
CLAUDE.md
Normal file
3
CLAUDE.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# CLAUDE.md
|
||||
|
||||
> **MANDATORY INSTRUCTION**: You MUST read `AGENTS.md` in this directory before doing anything else. `AGENTS.md` is the single source of truth for this project — architecture, commands, conventions, security rules, and workflow are all defined there. Do not proceed with any task until you have read and internalized its contents.
|
||||
@@ -78,6 +78,7 @@ class Autoload extends AutoloadConfig
|
||||
'No_access' => '/App/Controllers/No_access.php',
|
||||
'Office' => '/App/Controllers/Office.php',
|
||||
'Persons' => '/App/Controllers/Persons.php',
|
||||
'Plugins' => '/App/Controllers/Plugins.php',
|
||||
'Receivings' => '/App/Controllers/Receivings.php',
|
||||
'Reports' => '/App/Controllers/Reports.php',
|
||||
'Sales' => '/App/Controllers/Sales.php',
|
||||
@@ -157,9 +158,9 @@ class Autoload extends AutoloadConfig
|
||||
'Barcode_lib' => '/App/Libraries/Barcode_lib.php',
|
||||
'Email_lib' => '/App/Libraries/Email_lib.php',
|
||||
'Item_lib' => '/App/Libraries/Item_lib.php',
|
||||
'Mailchimp_lib' => '/App/Libraries/Mailchimp_lib.php',
|
||||
'MY_Email' => '/App/Libraries/MY_Email.php',
|
||||
'MY_Migration' => '/App/Libraries/MY_Migration.php',
|
||||
'PluginManager' => '/App/Libraries/Plugins/PluginManager.php',
|
||||
'Receving_lib' => '/App/Libraries/Receiving_lib.php',
|
||||
'Sale_lib' => '/App/Libraries/Sale_lib.php',
|
||||
'Sms_lib' => '/App/Libraries/Sms_lib.php',
|
||||
@@ -203,6 +204,7 @@ class Autoload extends AutoloadConfig
|
||||
'cookie',
|
||||
'tabular',
|
||||
'locale',
|
||||
'security'
|
||||
'security',
|
||||
'plugin'
|
||||
];
|
||||
}
|
||||
|
||||
@@ -173,4 +173,4 @@ const DEFAULT_LANGUAGE_CODE = 'en';
|
||||
/**
|
||||
* Admin modules - list of modules required for admin privileges
|
||||
*/
|
||||
const ADMIN_MODULES = ['customers', 'employees', 'giftcards', 'items', 'item_kits', 'messages', 'receivings', 'reports', 'sales', 'config', 'suppliers'];
|
||||
const ADMIN_MODULES = ['customers', 'employees', 'giftcards', 'items', 'item_kits', 'messages', 'plugins', 'receivings', 'reports', 'sales', 'config', 'suppliers'];
|
||||
|
||||
@@ -8,6 +8,7 @@ use CodeIgniter\HotReloader\HotReloader;
|
||||
use App\Events\Db_log;
|
||||
use App\Events\Load_config;
|
||||
use App\Events\Method;
|
||||
use App\Libraries\Plugins\PluginManager;
|
||||
|
||||
/*
|
||||
* --------------------------------------------------------------------
|
||||
@@ -25,6 +26,9 @@ use App\Events\Method;
|
||||
* Example:
|
||||
* Events::on('create', [$myInstance, 'myMethod']);
|
||||
*/
|
||||
Events::on('pre_system', static function (): void {
|
||||
PluginManager::registerAllNamespaces();
|
||||
});
|
||||
|
||||
Events::on('pre_system', static function (): void {
|
||||
if (ENVIRONMENT !== 'testing') {
|
||||
@@ -48,7 +52,6 @@ Events::on('pre_system', static function (): void {
|
||||
if (CI_DEBUG && ! is_cli()) {
|
||||
Events::on('DBQuery', 'CodeIgniter\Debug\Toolbar\Collectors\Database::collect');
|
||||
service('toolbar')->respond();
|
||||
// Hot Reload route - for framework use on the hot reloader.
|
||||
if (ENVIRONMENT === 'development') {
|
||||
service('routes')->get('__hot-reload', static function (): void {
|
||||
(new HotReloader())->run();
|
||||
@@ -57,8 +60,12 @@ Events::on('pre_system', static function (): void {
|
||||
}
|
||||
});
|
||||
|
||||
Events::on('post_controller_constructor', static function (): void {
|
||||
service('pluginManager');
|
||||
}, 10);
|
||||
|
||||
$config = new Load_config();
|
||||
Events::on('post_controller_constructor', [$config, 'load_config']);
|
||||
Events::on('post_controller_constructor', [$config, 'load_config'], 1);
|
||||
|
||||
$db_log = new Db_log();
|
||||
Events::on('DBQuery', [$db_log, 'db_log_queries']);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<?php
|
||||
<?php
|
||||
|
||||
use CodeIgniter\Router\RouteCollection;
|
||||
|
||||
@@ -12,40 +12,6 @@ $routes->get('login', 'Login::index');
|
||||
$routes->post('login', 'Login::index');
|
||||
$routes->post('migrate', 'Login::migrate');
|
||||
|
||||
$routes->get('sales', 'Sales::getIndex');
|
||||
$routes->get('sales/customerDisplay', 'Sales::getCustomerDisplay');
|
||||
$routes->get('sales/itemSearch', 'Sales::getItemSearch');
|
||||
$routes->post('sales/selectCustomer', 'Sales::postSelectCustomer');
|
||||
$routes->post('sales/changeMode', 'Sales::postChangeMode');
|
||||
$routes->post('sales/setComment', 'Sales::postSetComment');
|
||||
$routes->post('sales/setInvoiceNumber', 'Sales::postSetInvoiceNumber');
|
||||
$routes->post('sales/setPaymentType', 'Sales::postSetPaymentType');
|
||||
$routes->post('sales/setPrintAfterSale', 'Sales::postSetPrintAfterSale');
|
||||
$routes->post('sales/setPriceWorkOrders', 'Sales::postSetPriceWorkOrders');
|
||||
$routes->post('sales/setEmailReceipt', 'Sales::postSetEmailReceipt');
|
||||
$routes->post('sales/addPayment', 'Sales::postAddPayment');
|
||||
$routes->post('sales/add', 'Sales::postAdd');
|
||||
$routes->post('sales/editItem/(:segment)', 'Sales::postEditItem/$1');
|
||||
$routes->post('sales/deleteItem/(:segment)', 'Sales::getDeleteItem/$1');
|
||||
$routes->post('sales/deletePayment/(:segment)', 'Sales::getDeletePayment/$1');
|
||||
$routes->post('sales/removeCustomer', 'Sales::getRemoveCustomer');
|
||||
$routes->post('sales/complete', 'Sales::postComplete');
|
||||
$routes->post('sales/cancel', 'Sales::postCancel');
|
||||
$routes->post('sales/suspend', 'Sales::postSuspend');
|
||||
$routes->post('sales/unsuspend', 'Sales::postUnsuspend');
|
||||
$routes->post('sales/checkInvoiceNumber', 'Sales::postCheckInvoiceNumber');
|
||||
$routes->post('sales/changeItemNumber', 'Sales::postChangeItemNumber');
|
||||
$routes->post('sales/changeItemName', 'Sales::postChangeItemName');
|
||||
$routes->post('sales/changeItemDescription', 'Sales::postChangeItemDescription');
|
||||
$routes->get('sales/suspended', 'Sales::getSuspended');
|
||||
$routes->get('sales/discardSuspendedSale', 'Sales::getDiscardSuspendedSale');
|
||||
$routes->get('sales/sales_keyboard_help', 'Sales::getSalesKeyboardHelp');
|
||||
$routes->get('sales/receipt/(:num)', 'Sales::getReceipt/$1');
|
||||
$routes->get('sales/invoice/(:num)', 'Sales::getInvoice/$1');
|
||||
$routes->get('sales/edit/(:num)', 'Sales::getEdit/$1');
|
||||
$routes->post('sales/delete/(:num)', 'Sales::postDelete/$1');
|
||||
$routes->post('sales/save/(:num)', 'Sales::postSave/$1');
|
||||
|
||||
$routes->add('no_access/index/(:segment)', 'No_access::index/$1');
|
||||
$routes->add('no_access/index/(:segment)/(:segment)', 'No_access::index/$1/$2');
|
||||
|
||||
@@ -73,4 +39,4 @@ $routes->add('reports/specific_(:any)/(:any)/(:any)/(:any)', 'Reports::Specific_
|
||||
$routes->add('reports/specific_customers', 'Reports::specific_customer_input');
|
||||
$routes->add('reports/specific_employees', 'Reports::specific_employee_input');
|
||||
$routes->add('reports/specific_discounts', 'Reports::specific_discount_input');
|
||||
$routes->add('reports/specific_suppliers', 'Reports::specific_supplier_input');
|
||||
$routes->add('reports/specific_suppliers', 'Reports::specific_supplier_input');
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace Config;
|
||||
|
||||
use App\Libraries\MY_Language;
|
||||
use App\Libraries\Plugins\PluginManager;
|
||||
use Locale;
|
||||
use HTMLPurifier;
|
||||
use HTMLPurifier_Config;
|
||||
@@ -61,6 +62,24 @@ class Services extends BaseService
|
||||
return new MY_Language($locale);
|
||||
}
|
||||
|
||||
public static function pluginManager(bool $getShared = true): PluginManager
|
||||
{
|
||||
if ($getShared) {
|
||||
return static::getSharedInstance('pluginManager');
|
||||
}
|
||||
|
||||
$manager = new PluginManager();
|
||||
|
||||
if ($manager->canLoadPlugins()) {
|
||||
$manager->discoverPlugins();
|
||||
$manager->registerPluginEvents();
|
||||
} else {
|
||||
log_message('debug', 'PluginManager: skipping init, plugin_config table not found.');
|
||||
}
|
||||
|
||||
return $manager;
|
||||
}
|
||||
|
||||
private static HTMLPurifier $htmlPurifier;
|
||||
|
||||
public static function htmlPurifier($getShared = true): object
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2,11 +2,10 @@
|
||||
|
||||
namespace App\Controllers;
|
||||
|
||||
use App\Libraries\Mailchimp_lib;
|
||||
|
||||
use App\Models\Customer;
|
||||
use App\Models\Customer_rewards;
|
||||
use App\Models\Tax_code;
|
||||
use CodeIgniter\Events\Events;
|
||||
use CodeIgniter\HTTP\DownloadResponse;
|
||||
use CodeIgniter\HTTP\ResponseInterface;
|
||||
use Config\OSPOS;
|
||||
@@ -15,8 +14,6 @@ use stdClass;
|
||||
|
||||
class Customers extends Persons
|
||||
{
|
||||
private string $_list_id;
|
||||
private Mailchimp_lib $mailchimp_lib;
|
||||
private Customer_rewards $customer_rewards;
|
||||
private Customer $customer;
|
||||
private Tax_code $tax_code;
|
||||
@@ -25,19 +22,11 @@ class Customers extends Persons
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct('customers');
|
||||
$this->mailchimp_lib = new Mailchimp_lib();
|
||||
|
||||
$this->customer_rewards = model(Customer_rewards::class);
|
||||
$this->customer = model(Customer::class);
|
||||
$this->tax_code = model(Tax_code::class);
|
||||
$this->config = config(OSPOS::class)->settings;
|
||||
|
||||
$encrypter = Services::encrypter();
|
||||
|
||||
if (!empty($this->config['mailchimp_list_id'])) {
|
||||
$this->_list_id = $encrypter->decrypt($this->config['mailchimp_list_id']);
|
||||
} else {
|
||||
$this->_list_id = '';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -52,11 +41,12 @@ class Customers extends Persons
|
||||
|
||||
/**
|
||||
* Gets one row for a customer manage table. This is called using AJAX to update one row.
|
||||
* @param int $row_id
|
||||
* @return ResponseInterface
|
||||
*/
|
||||
public function getRow(int $row_id): ResponseInterface
|
||||
{
|
||||
$person = $this->customer->get_info($row_id);
|
||||
$person = $this->customer->getInfo($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); // TODO: This and the next 11 lines are duplicated in search(). Extract a method.
|
||||
@@ -141,14 +131,16 @@ class Customers extends Persons
|
||||
|
||||
/**
|
||||
* Loads the customer edit form
|
||||
* @param int $customerId
|
||||
* @return string
|
||||
*/
|
||||
public function getView(int $customer_id = NEW_ENTRY): string
|
||||
public function getView(int $customerId = NEW_ENTRY): string
|
||||
{
|
||||
// Set default values
|
||||
if ($customer_id == null) $customer_id = NEW_ENTRY;
|
||||
if ($customerId == null) {
|
||||
$customerId = NEW_ENTRY;
|
||||
}
|
||||
|
||||
$info = $this->customer->get_info($customer_id);
|
||||
$info = $this->customer->getInfo($customerId);
|
||||
foreach (get_object_vars($info) as $property => $value) {
|
||||
$info->$property = $value;
|
||||
}
|
||||
@@ -159,7 +151,7 @@ class Customers extends Persons
|
||||
$data['person_info']->employee_id = $this->employee->get_logged_in_employee_info()->person_id;
|
||||
}
|
||||
|
||||
$employee_info = $this->employee->get_info($info->employee_id);
|
||||
$employee_info = $this->employee->getInfo($info->employee_id);
|
||||
$data['employee'] = $employee_info->first_name . ' ' . $employee_info->last_name;
|
||||
|
||||
$tax_code_info = $this->tax_code->get_info($info->sales_tax_code_id);
|
||||
@@ -180,7 +172,7 @@ class Customers extends Persons
|
||||
$data['use_destination_based_tax'] = $this->config['use_destination_based_tax'];
|
||||
|
||||
// Retrieve the total amount the customer spent so far together with min, max and average values
|
||||
$stats = $this->customer->get_stats($customer_id);
|
||||
$stats = $this->customer->get_stats($customerId);
|
||||
if (!empty($stats)) {
|
||||
foreach (get_object_vars($stats) as $property => $value) {
|
||||
$info->$property = $value;
|
||||
@@ -188,69 +180,29 @@ class Customers extends Persons
|
||||
$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'] = $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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Events::trigger('customer_loaded', $customerId);
|
||||
|
||||
return view("customers/form", $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Inserts/updates a customer
|
||||
* @param int $customerId
|
||||
* @return ResponseInterface
|
||||
*/
|
||||
public function postSave(int $customer_id = NEW_ENTRY): ResponseInterface
|
||||
public function postSave(int $customerId = NEW_ENTRY): ResponseInterface
|
||||
{
|
||||
$first_name = $this->request->getPost('first_name');
|
||||
$last_name = $this->request->getPost('last_name');
|
||||
$firstName = $this->request->getPost('first_name');
|
||||
$lastName = $this->request->getPost('last_name');
|
||||
$email = strtolower($this->request->getPost('email', FILTER_SANITIZE_EMAIL));
|
||||
|
||||
// Format first and last name properly
|
||||
$first_name = $this->nameize($first_name);
|
||||
$last_name = $this->nameize($last_name);
|
||||
$firstName = $this->nameize($firstName);
|
||||
$lastName = $this->nameize($lastName);
|
||||
|
||||
$person_data = [
|
||||
'first_name' => $first_name,
|
||||
'last_name' => $last_name,
|
||||
$personData = [
|
||||
'first_name' => $firstName,
|
||||
'last_name' => $lastName,
|
||||
'gender' => $this->request->getPost('gender', FILTER_SANITIZE_NUMBER_INT),
|
||||
'email' => $email,
|
||||
'phone_number' => $this->request->getPost('phone_number'),
|
||||
@@ -263,9 +215,9 @@ class Customers extends Persons
|
||||
'comments' => $this->request->getPost('comments')
|
||||
];
|
||||
|
||||
$date_formatter = date_create_from_format($this->config['dateformat'] . ' ' . $this->config['timeformat'], $this->request->getPost('date'));
|
||||
$dateFormatter = date_create_from_format($this->config['dateformat'] . ' ' . $this->config['timeformat'], $this->request->getPost('date'));
|
||||
|
||||
$customer_data = [
|
||||
$customerData = [
|
||||
'consent' => $this->request->getPost('consent') != null,
|
||||
'account_number' => $this->request->getPost('account_number') == '' ? null : $this->request->getPost('account_number'),
|
||||
'tax_id' => $this->request->getPost('tax_id'),
|
||||
@@ -274,41 +226,32 @@ class Customers extends Persons
|
||||
'discount_type' => $this->request->getPost('discount_type') == null ? PERCENT : $this->request->getPost('discount_type', FILTER_SANITIZE_NUMBER_INT),
|
||||
'package_id' => $this->request->getPost('package_id') == '' ? null : $this->request->getPost('package_id'),
|
||||
'taxable' => $this->request->getPost('taxable') != null,
|
||||
'date' => $date_formatter->format('Y-m-d H:i:s'),
|
||||
'date' => $dateFormatter->format('Y-m-d H:i:s'),
|
||||
'employee_id' => $this->request->getPost('employee_id', FILTER_SANITIZE_NUMBER_INT),
|
||||
'sales_tax_code_id' => $this->request->getPost('sales_tax_code_id') == '' ? null : $this->request->getPost('sales_tax_code_id', FILTER_SANITIZE_NUMBER_INT)
|
||||
];
|
||||
|
||||
if ($this->customer->save_customer($person_data, $customer_data, $customer_id)) {
|
||||
// Save customer to Mailchimp selected list // TODO: addOrUpdateMember should be refactored. Potentially pass an array or object instead of 6 parameters.
|
||||
$mailchimp_status = $this->request->getPost('mailchimp_status');
|
||||
$this->mailchimp_lib->addOrUpdateMember(
|
||||
$this->_list_id,
|
||||
$email,
|
||||
$first_name,
|
||||
$last_name,
|
||||
$mailchimp_status == null ? "" : $mailchimp_status,
|
||||
['vip' => $this->request->getPost('mailchimp_vip') != null]
|
||||
);
|
||||
if ($this->customer->saveCustomer($personData, $customerData, $customerId)) {
|
||||
Events::trigger('customer_saved', [$customerData['person_id']]);
|
||||
|
||||
// New customer
|
||||
if ($customer_id == NEW_ENTRY) {
|
||||
if ($customerId == NEW_ENTRY) {
|
||||
return $this->response->setJSON([
|
||||
'success' => true,
|
||||
'message' => lang('Customers.successful_adding') . ' ' . $first_name . ' ' . $last_name,
|
||||
'id' => $customer_data['person_id']
|
||||
'message' => lang('Customers.successful_adding') . " $firstName $lastName",
|
||||
'id' => $customerData['person_id']
|
||||
]);
|
||||
} else { // Existing customer
|
||||
return $this->response->setJSON([
|
||||
'success' => true,
|
||||
'message' => lang('Customers.successful_updating') . ' ' . $first_name . ' ' . $last_name,
|
||||
'id' => $customer_id
|
||||
'message' => lang('Customers.successful_updating') . " $firstName $lastName",
|
||||
'id' => $customerId
|
||||
]);
|
||||
}
|
||||
} else { // Failure
|
||||
return $this->response->setJSON([
|
||||
'success' => false,
|
||||
'message' => lang('Customers.error_adding_updating') . ' ' . $first_name . ' ' . $last_name,
|
||||
'message' => lang('Customers.error_adding_updating') . " $firstName $lastName",
|
||||
'id' => NEW_ENTRY
|
||||
]);
|
||||
}
|
||||
@@ -344,26 +287,23 @@ class Customers extends Persons
|
||||
}
|
||||
|
||||
/**
|
||||
* This deletes customers from the customers table
|
||||
* This deletes customers from the customer's table
|
||||
* @return ResponseInterface
|
||||
*/
|
||||
public function postDelete(): ResponseInterface
|
||||
{
|
||||
$customers_to_delete = $this->request->getPost('ids');
|
||||
$customers_info = $this->customer->get_multiple_info($customers_to_delete);
|
||||
$customersToDelete = $this->request->getPost('ids');
|
||||
$customers = $this->customer->get_multiple_info($customersToDelete);
|
||||
|
||||
$count = 0;
|
||||
|
||||
foreach ($customers_info->getResult() as $info) {
|
||||
if ($this->customer->delete($info->person_id)) {
|
||||
// remove customer from Mailchimp selected list
|
||||
$this->mailchimp_lib->removeMember($this->_list_id, $info->email);
|
||||
|
||||
foreach ($customers->getResult() as $customer) {
|
||||
if ($this->customer->delete($customer->person_id)) {
|
||||
Events::trigger('customer_deleted', (int)$customer->person_id, (string)$customer->email);
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
|
||||
if ($count == count($customers_to_delete)) {
|
||||
if ($count === count($customersToDelete)) {
|
||||
return $this->response->setJSON([
|
||||
'success' => true,
|
||||
'message' => lang('Customers.successful_deleted') . ' ' . $count . ' ' . lang('Customers.one_or_multiple')
|
||||
@@ -411,16 +351,17 @@ class Customers extends Persons
|
||||
if (($handle = fopen($_FILES['file_path']['tmp_name'], 'r')) !== false) {
|
||||
// Skip the first row as it's the table description
|
||||
fgetcsv($handle);
|
||||
$i = 1;
|
||||
$rowNumber = 1;
|
||||
|
||||
$failCodes = [];
|
||||
$customerIds = [];
|
||||
|
||||
while (($data = fgetcsv($handle)) !== false) {
|
||||
$consent = $data[3] == '' ? 0 : 1;
|
||||
|
||||
if (sizeof($data) >= 16 && $consent) {
|
||||
$email = strtolower($data[4]);
|
||||
$person_data = [
|
||||
$personData = [
|
||||
'first_name' => $data[0],
|
||||
'last_name' => $data[1],
|
||||
'gender' => $data[2],
|
||||
@@ -435,7 +376,7 @@ class Customers extends Persons
|
||||
'comments' => $data[12]
|
||||
];
|
||||
|
||||
$customer_data = [
|
||||
$customerData = [
|
||||
'consent' => $consent,
|
||||
'company_name' => $data[13],
|
||||
'discount' => $data[15],
|
||||
@@ -450,7 +391,7 @@ class Customers extends Persons
|
||||
$invalidated = $this->customer->check_email_exists($email);
|
||||
|
||||
if ($account_number != '') {
|
||||
$customer_data['account_number'] = $account_number;
|
||||
$customerData['account_number'] = $account_number;
|
||||
$invalidated &= $this->customer->check_account_number_exists($account_number);
|
||||
}
|
||||
} else {
|
||||
@@ -458,16 +399,15 @@ class Customers extends Persons
|
||||
}
|
||||
|
||||
if ($invalidated) {
|
||||
$failCodes[] = $i;
|
||||
log_message('error', "Row $i was not imported: Either email or account number already exist or data was invalid.");
|
||||
} 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']);
|
||||
$failCodes[] = $rowNumber;
|
||||
log_message('error', "Row $rowNumber was not imported: Either email or account number already exist or data was invalid.");
|
||||
} elseif ($this->customer->saveCustomer($personData, $customerData)) {
|
||||
$customerIds[] = $customerData['person_id'];
|
||||
} else {
|
||||
$failCodes[] = $i;
|
||||
$failCodes[] = $rowNumber;
|
||||
}
|
||||
|
||||
++$i;
|
||||
++$rowNumber;
|
||||
}
|
||||
|
||||
if (count($failCodes) > 0) {
|
||||
@@ -475,6 +415,8 @@ class Customers extends Persons
|
||||
|
||||
return $this->response->setJSON(['success' => false, 'message' => $message]);
|
||||
} else {
|
||||
Events::trigger('customer_saved', $customerIds);
|
||||
|
||||
return $this->response->setJSON(['success' => true, 'message' => lang('Customers.csv_import_success')]);
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -75,7 +75,7 @@ class Employees extends Persons
|
||||
*/
|
||||
public function getView(int $employee_id = NEW_ENTRY): string
|
||||
{
|
||||
$person_info = $this->employee->get_info($employee_id);
|
||||
$person_info = $this->employee->getInfo($employee_id);
|
||||
$current_user = $this->employee->get_logged_in_employee_info();
|
||||
|
||||
if ($employee_id != NEW_ENTRY && !$this->employee->canModifyEmployee($person_info->person_id, $current_user->person_id)) {
|
||||
@@ -119,7 +119,7 @@ class Employees extends Persons
|
||||
$current_user = $this->employee->get_logged_in_employee_info();
|
||||
|
||||
if ($employee_id != NEW_ENTRY) {
|
||||
$target_employee = $this->employee->get_info($employee_id);
|
||||
$target_employee = $this->employee->getInfo($employee_id);
|
||||
if (!$this->employee->canModifyEmployee($target_employee->person_id, $current_user->person_id)) {
|
||||
return $this->response->setJSON([
|
||||
'success' => false,
|
||||
|
||||
@@ -106,7 +106,7 @@ class Expenses extends Secure_Controller
|
||||
}
|
||||
} else {
|
||||
$stored_employee_id = $expense_id == NEW_ENTRY ? $current_employee_id : $data['expenses_info']->employee_id;
|
||||
$stored_employee = $this->employee->get_info($stored_employee_id);
|
||||
$stored_employee = $this->employee->getInfo($stored_employee_id);
|
||||
$data['employees'][$stored_employee_id] = $stored_employee->first_name . ' ' . $stored_employee->last_name;
|
||||
}
|
||||
$data['can_assign_employee'] = $can_assign_employee;
|
||||
|
||||
@@ -51,7 +51,7 @@ class Home extends Secure_Controller
|
||||
return $this->response->setStatusCode(403)->setBody(lang('Employees.unauthorized_modify'));
|
||||
}
|
||||
|
||||
$person_info = $this->employee->get_info($employeeId);
|
||||
$person_info = $this->employee->getInfo($employeeId);
|
||||
foreach (get_object_vars($person_info) as $property => $value) {
|
||||
$person_info->$property = $value;
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ use App\Models\Item_taxes;
|
||||
use App\Models\Stock_location;
|
||||
use App\Models\Supplier;
|
||||
use App\Models\Tax_category;
|
||||
use CodeIgniter\Events\Events;
|
||||
use CodeIgniter\HTTP\ResponseInterface;
|
||||
use CodeIgniter\Images\Handlers\BaseHandler;
|
||||
use CodeIgniter\HTTP\DownloadResponse;
|
||||
@@ -275,7 +276,7 @@ class Items extends Secure_Controller
|
||||
*/
|
||||
public function getRow(string $item_ids): ResponseInterface // TODO: An array would be better for parameter.
|
||||
{
|
||||
$item_infos = $this->item->get_multiple_info(explode(':', $item_ids), $this->item_lib->get_item_location());
|
||||
$item_infos = $this->item->getMultipleInfo(explode(':', $item_ids), $this->item_lib->get_item_location());
|
||||
|
||||
$result = [];
|
||||
|
||||
@@ -491,7 +492,7 @@ class Items extends Secure_Controller
|
||||
public function getGenerateBarcodes(string $item_ids): string // TODO: Passing these through as a string instead of an array limits the contents of the item_ids. Perhaps a better approach would to serialize as JSON in an array and pass through post variables?
|
||||
{
|
||||
$item_ids = explode(':', $item_ids);
|
||||
$result = $this->item->get_multiple_info($item_ids, $this->item_lib->get_item_location())->getResultArray();
|
||||
$result = $this->item->getMultipleInfo($item_ids, $this->item_lib->get_item_location())->getResultArray();
|
||||
$data['barcode_config'] = $this->barcode_lib->get_barcode_config();
|
||||
|
||||
foreach ($result as &$item) {
|
||||
@@ -611,148 +612,149 @@ class Items extends Secure_Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $item_id
|
||||
* @param int $itemId
|
||||
* @return ResponseInterface
|
||||
* @throws ReflectionException
|
||||
*/
|
||||
public function postSave(int $item_id = NEW_ENTRY): ResponseInterface
|
||||
public function postSave(int $itemId = NEW_ENTRY): ResponseInterface
|
||||
{
|
||||
$upload_data = $this->upload_image();
|
||||
$upload_success = empty($upload_data['error']);
|
||||
$uploadData = $this->upload_image();
|
||||
$uploadSuccess = empty($uploadData['error']);
|
||||
|
||||
$raw_receiving_quantity = $this->request->getPost('receiving_quantity');
|
||||
$rawReceivingQuantity = $this->request->getPost('receiving_quantity');
|
||||
|
||||
$receiving_quantity = parse_quantity($raw_receiving_quantity);
|
||||
$item_type = $this->request->getPost('item_type') === null ? ITEM : intval($this->request->getPost('item_type'));
|
||||
$receivingQuantity = parse_quantity($rawReceivingQuantity);
|
||||
$itemType = $this->request->getPost('item_type') === null ? ITEM : intval($this->request->getPost('item_type'));
|
||||
|
||||
if ($receiving_quantity === 0.0 && $item_type !== ITEM_TEMP) {
|
||||
$receiving_quantity = 1;
|
||||
if ($receivingQuantity === 0.0 && $itemType !== ITEM_TEMP) {
|
||||
$receivingQuantity = 1;
|
||||
}
|
||||
|
||||
$default_pack_name = lang('Items.default_pack_name');
|
||||
$defaultPackName = lang('Items.default_pack_name');
|
||||
|
||||
$cost_price = parse_decimals($this->request->getPost('cost_price'));
|
||||
$unit_price = parse_decimals($this->request->getPost('unit_price'));
|
||||
$reorder_level = parse_quantity($this->request->getPost('reorder_level'));
|
||||
$qty_per_pack = parse_quantity($this->request->getPost('qty_per_pack') ?? '');
|
||||
$costPrice = parse_decimals($this->request->getPost('cost_price'));
|
||||
$unitPrice = parse_decimals($this->request->getPost('unit_price'));
|
||||
$reorderLevel = parse_quantity($this->request->getPost('reorder_level'));
|
||||
$quantityPerPack = parse_quantity($this->request->getPost('qty_per_pack') ?? '');
|
||||
|
||||
// Save item data
|
||||
$item_data = [
|
||||
$itemData = [
|
||||
'name' => $this->request->getPost('name'),
|
||||
'description' => $this->request->getPost('description', FILTER_SANITIZE_FULL_SPECIAL_CHARS),
|
||||
'category' => $this->request->getPost('category'),
|
||||
'item_type' => $item_type,
|
||||
'item_type' => $itemType,
|
||||
'stock_type' => $this->request->getPost('stock_type') === null ? HAS_STOCK : intval($this->request->getPost('stock_type')),
|
||||
'supplier_id' => empty($this->request->getPost('supplier_id')) ? null : intval($this->request->getPost('supplier_id')),
|
||||
'item_number' => empty($this->request->getPost('item_number')) ? null : $this->request->getPost('item_number'),
|
||||
'cost_price' => $cost_price,
|
||||
'unit_price' => $unit_price,
|
||||
'reorder_level' => $reorder_level,
|
||||
'receiving_quantity' => $receiving_quantity,
|
||||
'cost_price' => $costPrice,
|
||||
'unit_price' => $unitPrice,
|
||||
'reorder_level' => $reorderLevel,
|
||||
'receiving_quantity' => $receivingQuantity,
|
||||
'allow_alt_description' => $this->request->getPost('allow_alt_description') != null,
|
||||
'is_serialized' => $this->request->getPost('is_serialized') != null,
|
||||
'qty_per_pack' => $this->request->getPost('qty_per_pack') == null ? 1 : parse_quantity($qty_per_pack),
|
||||
'pack_name' => $this->request->getPost('pack_name') == null ? $default_pack_name : $this->request->getPost('pack_name'),
|
||||
'low_sell_item_id' => $this->request->getPost('low_sell_item_id') === null ? $item_id : intval($this->request->getPost('low_sell_item_id')),
|
||||
'qty_per_pack' => $this->request->getPost('qty_per_pack') == null ? 1 : parse_quantity($quantityPerPack),
|
||||
'pack_name' => $this->request->getPost('pack_name') == null ? $defaultPackName : $this->request->getPost('pack_name'),
|
||||
'low_sell_item_id' => $this->request->getPost('low_sell_item_id') === null ? $itemId : intval($this->request->getPost('low_sell_item_id')),
|
||||
'deleted' => $this->request->getPost('is_deleted') != null,
|
||||
'hsn_code' => $this->request->getPost('hsn_code') === null ? '' : $this->request->getPost('hsn_code')
|
||||
];
|
||||
|
||||
if ($item_data['item_type'] == ITEM_TEMP) {
|
||||
$item_data['stock_type'] = HAS_NO_STOCK;
|
||||
$item_data['receiving_quantity'] = 0;
|
||||
$item_data['reorder_level'] = 0;
|
||||
if ($itemData['item_type'] == ITEM_TEMP) {
|
||||
$itemData['stock_type'] = HAS_NO_STOCK;
|
||||
$itemData['receiving_quantity'] = 0;
|
||||
$itemData['reorder_level'] = 0;
|
||||
}
|
||||
|
||||
$tax_category_id = $this->request->getPost('tax_category_id');
|
||||
$taxCategoryId = $this->request->getPost('tax_category_id');
|
||||
|
||||
if (!isset($tax_category_id)) {
|
||||
$item_data['tax_category_id'] = null;
|
||||
if (!isset($taxCategoryId)) {
|
||||
$itemData['tax_category_id'] = null;
|
||||
} else {
|
||||
$item_data['tax_category_id'] = empty($this->request->getPost('tax_category_id')) ? null : intval($this->request->getPost('tax_category_id'));
|
||||
$itemData['tax_category_id'] = empty($this->request->getPost('tax_category_id')) ? null : intval($this->request->getPost('tax_category_id'));
|
||||
}
|
||||
|
||||
if (!empty($upload_data['orig_name']) && $upload_data['raw_name']) {
|
||||
$item_data['pic_filename'] = $upload_data['raw_name'] . '.' . $upload_data['file_ext'];
|
||||
if (!empty($uploadData['orig_name']) && $uploadData['raw_name']) {
|
||||
$itemData['pic_filename'] = $uploadData['raw_name'] . '.' . $uploadData['file_ext'];
|
||||
}
|
||||
|
||||
$employee_id = $this->employee->get_logged_in_employee_info()->person_id;
|
||||
$employeeId = $this->employee->get_logged_in_employee_info()->person_id;
|
||||
|
||||
if ($this->item->save_value($item_data, $item_id)) {
|
||||
if ($this->item->save_value($itemData, $itemId)) {
|
||||
$success = true;
|
||||
$new_item = false;
|
||||
$newItem = false;
|
||||
|
||||
if ($item_id === NEW_ENTRY) {
|
||||
$item_id = $item_data['item_id'];
|
||||
$new_item = true;
|
||||
if ($itemId === NEW_ENTRY) {
|
||||
$itemId = $itemData['item_id'];
|
||||
$newItem = true;
|
||||
}
|
||||
|
||||
$use_destination_based_tax = (bool)$this->config['use_destination_based_tax'];
|
||||
$useDestinationBasedTax = (bool)$this->config['use_destination_based_tax'];
|
||||
|
||||
if (!$use_destination_based_tax) {
|
||||
$items_taxes_data = [];
|
||||
$tax_names = $this->request->getPost('tax_names');
|
||||
$tax_percents = $this->request->getPost('tax_percents');
|
||||
if (!$useDestinationBasedTax) {
|
||||
$itemsTaxesData = [];
|
||||
$taxNames = $this->request->getPost('tax_names');
|
||||
$taxPercents = $this->request->getPost('tax_percents');
|
||||
|
||||
$tax_name_index = 0;
|
||||
$taxNameIndex = 0;
|
||||
|
||||
foreach ($tax_percents as $tax_percent) {
|
||||
$tax_percentage = parse_tax($tax_percent);
|
||||
foreach ($taxPercents as $taxPercent) {
|
||||
$taxpercentage = parse_tax($taxPercent);
|
||||
|
||||
if (is_numeric($tax_percentage)) {
|
||||
$items_taxes_data[] = ['name' => $tax_names[$tax_name_index], 'percent' => $tax_percentage];
|
||||
if (is_numeric($taxpercentage)) {
|
||||
$itemsTaxesData[] = ['name' => $taxNames[$taxNameIndex], 'percent' => $taxpercentage];
|
||||
}
|
||||
|
||||
$tax_name_index++;
|
||||
$taxNameIndex++;
|
||||
}
|
||||
$success &= $this->item_taxes->save_value($items_taxes_data, $item_id);
|
||||
$success &= $this->item_taxes->save_value($itemsTaxesData, $itemId);
|
||||
}
|
||||
|
||||
// Save item quantity
|
||||
$stock_locations = $this->stock_location->get_undeleted_all()->getResultArray();
|
||||
foreach ($stock_locations as $location) {
|
||||
$updated_quantity = parse_quantity($this->request->getPost('quantity_' . $location['location_id']));
|
||||
$stockLocations = $this->stock_location->get_undeleted_all()->getResultArray();
|
||||
foreach ($stockLocations as $location) {
|
||||
$updatedQuantity = parse_quantity($this->request->getPost('quantity_' . $location['location_id']));
|
||||
|
||||
if ($item_data['item_type'] == ITEM_TEMP) {
|
||||
$updated_quantity = 0;
|
||||
if ($itemData['item_type'] == ITEM_TEMP) {
|
||||
$updatedQuantity = 0;
|
||||
}
|
||||
|
||||
$location_detail = [
|
||||
'item_id' => $item_id,
|
||||
$locationDetail = [
|
||||
'item_id' => $itemId,
|
||||
'location_id' => $location['location_id'],
|
||||
'quantity' => $updated_quantity
|
||||
'quantity' => $updatedQuantity
|
||||
];
|
||||
|
||||
$item_quantity = $this->item_quantity->get_item_quantity($item_id, $location['location_id']);
|
||||
$itemQuantity = $this->item_quantity->get_item_quantity($itemId, $location['location_id']);
|
||||
|
||||
if ($item_quantity->quantity != $updated_quantity || $new_item) {
|
||||
$success = $success && $this->item_quantity->save_value($location_detail, $item_id, $location['location_id']);
|
||||
if ($itemQuantity->quantity != $updatedQuantity || $newItem) {
|
||||
$success = $success && $this->item_quantity->save_value($locationDetail, $itemId, $location['location_id']);
|
||||
|
||||
$inv_data = [
|
||||
'trans_date' => date('Y-m-d H:i:s'),
|
||||
'trans_items' => $item_id,
|
||||
'trans_user' => $employee_id,
|
||||
'trans_items' => $itemId,
|
||||
'trans_user' => $employeeId,
|
||||
'trans_location' => $location['location_id'],
|
||||
'trans_comment' => lang('Items.manually_editing_of_quantity'),
|
||||
'trans_inventory' => $updated_quantity - $item_quantity->quantity
|
||||
'trans_inventory' => $updatedQuantity - $itemQuantity->quantity
|
||||
];
|
||||
|
||||
$success = $success && $this->inventory->insert($inv_data, false);
|
||||
}
|
||||
}
|
||||
$success = $success && $this->saveItemAttributes($item_id);
|
||||
$success = $success && $this->saveItemAttributes($itemId);
|
||||
|
||||
if ($success && $upload_success) {
|
||||
$message = lang('Items.successful_' . ($new_item ? 'adding' : 'updating')) . ' ' . $item_data['name'];
|
||||
if ($success && $uploadSuccess) {
|
||||
Events::trigger('item_saved', [$itemId]);
|
||||
|
||||
return $this->response->setJSON(['success' => true, 'message' => $message, 'id' => $item_id]);
|
||||
$message = lang('Items.successful_' . ($newItem ? 'adding' : 'updating')) . ' ' . $itemData['name'];
|
||||
return $this->response->setJSON(['success' => true, 'message' => $message, 'id' => $itemId]);
|
||||
} else {
|
||||
$message = $upload_success ? lang('Items.error_adding_updating') . ' ' . $item_data['name'] : strip_tags($upload_data['error']);
|
||||
$message = $uploadSuccess ? lang('Items.error_adding_updating') . ' ' . $itemData['name'] : strip_tags($uploadData['error']);
|
||||
|
||||
return $this->response->setJSON(['success' => false, 'message' => $message, 'id' => $item_id]);
|
||||
return $this->response->setJSON(['success' => false, 'message' => $message, 'id' => $itemId]);
|
||||
}
|
||||
} else {
|
||||
$message = lang('Items.error_adding_updating') . ' ' . $item_data['name'];
|
||||
$message = lang('Items.error_adding_updating') . ' ' . $itemData['name'];
|
||||
|
||||
return $this->response->setJSON(['success' => false, 'message' => $message, 'id' => NEW_ENTRY]);
|
||||
}
|
||||
@@ -972,7 +974,7 @@ class Items extends Secure_Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* Imports items from a CSV formatted file.
|
||||
* Imports items from a CSV-formatted file.
|
||||
* @return ResponseInterface
|
||||
* @noinspection PhpUnused
|
||||
*/
|
||||
@@ -997,7 +999,7 @@ class Items extends Secure_Controller
|
||||
$attributeData = [];
|
||||
|
||||
foreach ($attributeDefinitionNames as $definitionName) {
|
||||
$attributeData[$definitionName] = $this->attribute->get_definition_by_name($definitionName)[0];
|
||||
$attributeData[$definitionName] = $this->attribute->getDefinitionByName($definitionName)[0];
|
||||
|
||||
if ($attributeData[$definitionName]['definition_type'] === DROPDOWN) {
|
||||
$attributeData[$definitionName]['dropdown_values'] = $this->attribute->get_definition_values($attributeData[$definitionName]['definition_id']);
|
||||
@@ -1006,6 +1008,7 @@ class Items extends Secure_Controller
|
||||
$db = db_connect();
|
||||
$db->transBegin(); // TODO: This section needs to be reworked so that the data array is being created then passed to the Item model because $db doesn't exist in the controller without being instantiated, but database operations should be restricted to the model
|
||||
|
||||
$itemIds = [];
|
||||
foreach ($csvRows as $key => $row) {
|
||||
$isFailedRow = false;
|
||||
$itemId = (int)$row['Id'];
|
||||
@@ -1075,6 +1078,8 @@ class Items extends Secure_Controller
|
||||
if ($isUpdate) {
|
||||
$itemData = array_merge($itemData, get_object_vars($this->item->get_info_by_id_or_number($itemId)));
|
||||
}
|
||||
|
||||
$itemIds[] = $itemData['item_id'];
|
||||
} else {
|
||||
$failedRow = $key + 2;
|
||||
$failCodes[] = $failedRow;
|
||||
@@ -1094,6 +1099,8 @@ class Items extends Secure_Controller
|
||||
$db->transCommit();
|
||||
$this->attribute->deleteOrphanedValues();
|
||||
|
||||
Events::trigger('item_saved', [$itemIds]);
|
||||
|
||||
return $this->response->setJSON(['success' => true, 'message' => lang('Items.csv_import_success')]);
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -33,7 +33,7 @@ class Messages extends Secure_Controller
|
||||
public function getView(int $person_id = NEW_ENTRY): string
|
||||
{
|
||||
$person = model(Person::class);
|
||||
$info = $person->get_info($person_id);
|
||||
$info = $person->getInfo($person_id);
|
||||
|
||||
foreach (get_object_vars($info) as $property => $value) {
|
||||
$info->$property = $value;
|
||||
|
||||
@@ -49,7 +49,7 @@ abstract class Persons extends Secure_Controller
|
||||
*/
|
||||
public function getRow(int $row_id): ResponseInterface
|
||||
{
|
||||
$data_row = get_person_data_row($this->person->get_info($row_id));
|
||||
$data_row = get_person_data_row($this->person->getInfo($row_id));
|
||||
|
||||
return $this->response->setJSON($data_row);
|
||||
}
|
||||
|
||||
169
app/Controllers/Plugins.php
Normal file
169
app/Controllers/Plugins.php
Normal file
@@ -0,0 +1,169 @@
|
||||
<?php
|
||||
|
||||
namespace App\Controllers;
|
||||
|
||||
use App\Libraries\Plugins\PluginManager;
|
||||
use CodeIgniter\HTTP\ResponseInterface;
|
||||
|
||||
class Plugins extends Secure_Controller
|
||||
{
|
||||
private PluginManager $pluginManager;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct('plugins');
|
||||
$this->pluginManager = service('pluginManager');
|
||||
}
|
||||
|
||||
public function getIndex(): string
|
||||
{
|
||||
$data['table_headers'] = get_plugin_manage_table_headers();
|
||||
return view('plugins/manage', $data);
|
||||
}
|
||||
|
||||
public function getSearch(): ResponseInterface
|
||||
{
|
||||
$search = strtolower($this->request->getGet('search') ?? '');
|
||||
$limit = (int)($this->request->getGet('limit') ?? 0);
|
||||
$offset = (int)($this->request->getGet('offset') ?? 0);
|
||||
$sort = $this->sanitizeSortColumn(plugin_headers(), $this->request->getGet('sort', FILTER_SANITIZE_FULL_SPECIAL_CHARS), 'name');
|
||||
$order = strtolower($this->request->getGet('order', FILTER_SANITIZE_FULL_SPECIAL_CHARS) ?? 'asc');
|
||||
|
||||
$pluginData = $this->buildPluginDataArray();
|
||||
|
||||
if ($search !== '') {
|
||||
$pluginData = array_values(array_filter($pluginData, static function (array $p) use ($search): bool {
|
||||
return str_contains(strtolower($p['name']), $search)
|
||||
|| str_contains(strtolower($p['description']), $search)
|
||||
|| str_contains(strtolower($p['id']), $search);
|
||||
}));
|
||||
}
|
||||
|
||||
$total = count($pluginData);
|
||||
|
||||
usort($pluginData, static function (array $a, array $b) use ($sort, $order): int {
|
||||
$valA = strtolower($a[$sort] ?? $a['name']);
|
||||
$valB = strtolower($b[$sort] ?? $b['name']);
|
||||
return $order === 'asc' ? strcmp($valA, $valB) : strcmp($valB, $valA);
|
||||
});
|
||||
|
||||
$pluginData = $limit > 0 ? array_slice($pluginData, $offset, $limit) : array_slice($pluginData, $offset);
|
||||
|
||||
return $this->response->setJSON(['total' => $total, 'rows' => array_map('get_plugin_data_row', $pluginData)]);
|
||||
}
|
||||
|
||||
public function getRow(string $pluginId): ResponseInterface
|
||||
{
|
||||
$plugin = $this->pluginManager->getPlugin($pluginId);
|
||||
if (!$plugin) {
|
||||
return $this->response->setJSON(['success' => false, 'message' => lang('Plugins.not_found')]);
|
||||
}
|
||||
|
||||
$enabled = $this->pluginManager->getEnabledPlugins();
|
||||
$pluginData = [
|
||||
'id' => $plugin->getPluginId(),
|
||||
'name' => $plugin->getPluginName(),
|
||||
'description' => $plugin->getPluginDescription(),
|
||||
'version' => $plugin->getVersion(),
|
||||
'enabled' => isset($enabled[$pluginId]),
|
||||
'has_config' => $plugin->getConfigView() !== null,
|
||||
];
|
||||
|
||||
return $this->response->setJSON(get_plugin_data_row($pluginData));
|
||||
}
|
||||
|
||||
private function buildPluginDataArray(): array
|
||||
{
|
||||
$plugins = $this->pluginManager->getAllPlugins();
|
||||
$enabled = $this->pluginManager->getEnabledPlugins();
|
||||
$result = [];
|
||||
|
||||
foreach ($plugins as $pluginId => $plugin) {
|
||||
$result[] = [
|
||||
'id' => $plugin->getPluginId(),
|
||||
'name' => $plugin->getPluginName(),
|
||||
'description' => $plugin->getPluginDescription(),
|
||||
'version' => $plugin->getVersion(),
|
||||
'enabled' => isset($enabled[$pluginId]),
|
||||
'has_config' => $plugin->getConfigView() !== null,
|
||||
];
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function postEnable(string $pluginId): ResponseInterface
|
||||
{
|
||||
if ($this->pluginManager->enablePlugin($pluginId)) {
|
||||
return $this->response->setJSON(['success' => true, 'message' => lang('Plugins.enabled')]);
|
||||
}
|
||||
return $this->response->setJSON(['success' => false, 'message' => lang('Plugins.enable_failed')]);
|
||||
}
|
||||
|
||||
public function postDisable(string $pluginId): ResponseInterface
|
||||
{
|
||||
if ($this->pluginManager->disablePlugin($pluginId)) {
|
||||
return $this->response->setJSON(['success' => true, 'message' => lang('Plugins.disabled')]);
|
||||
}
|
||||
return $this->response->setJSON(['success' => false, 'message' => lang('Plugins.disable_failed')]);
|
||||
}
|
||||
|
||||
public function postUninstall(string $pluginId): ResponseInterface
|
||||
{
|
||||
if ($this->pluginManager->uninstallPlugin($pluginId)) {
|
||||
return $this->response->setJSON(['success' => true, 'message' => lang('Plugins.uninstalled')]);
|
||||
}
|
||||
return $this->response->setJSON(['success' => false, 'message' => lang('Plugins.uninstall_failed')]);
|
||||
}
|
||||
|
||||
public function getConfig(string $pluginId): ResponseInterface
|
||||
{
|
||||
$plugin = $this->pluginManager->getPlugin($pluginId);
|
||||
|
||||
if (!$plugin) {
|
||||
return $this->response->setJSON(['success' => false, 'message' => lang('Plugins.not_found')]);
|
||||
}
|
||||
|
||||
$configView = $plugin->getConfigView();
|
||||
if (!$configView) {
|
||||
return $this->response->setJSON(['success' => false, 'message' => lang('Plugins.no_config')]);
|
||||
}
|
||||
|
||||
$settings = $plugin->getSettings();
|
||||
$data = array_merge(['settings' => $settings, 'plugin' => $plugin], $plugin->getConfigViewData());
|
||||
|
||||
// Plugin views may live outside app/Views/ (absolute path from plugin's __DIR__)
|
||||
if (is_file($configView . '.php')) {
|
||||
$renderer = \Config\Services::renderer(dirname($configView) . DIRECTORY_SEPARATOR, null, false);
|
||||
echo $renderer->setData($data)->render(basename($configView));
|
||||
} else {
|
||||
echo view($configView, $data);
|
||||
}
|
||||
|
||||
return $this->response;
|
||||
}
|
||||
|
||||
/**
|
||||
* Save plugin settings by calling the plugin's saveSettings method.
|
||||
*
|
||||
* @param string $pluginId The plugin ID for the current plugin
|
||||
* @return ResponseInterface The JSON response
|
||||
* @noinspection PhpUnused Called via AJAX
|
||||
*/
|
||||
public function postSaveConfig(string $pluginId): ResponseInterface
|
||||
{
|
||||
$plugin = $this->pluginManager->getPlugin($pluginId);
|
||||
|
||||
if (!$plugin) {
|
||||
return $this->response->setJSON(['success' => false, 'message' => lang('Plugins.not_found')]);
|
||||
}
|
||||
|
||||
$settings = $this->request->getPost();
|
||||
unset($settings['_method'], $settings[csrf_token()]);
|
||||
|
||||
if ($plugin->saveSettings($settings)) {
|
||||
return $this->response->setJSON(['success' => true, 'message' => lang('Plugins.settings_saved')]);
|
||||
}
|
||||
return $this->response->setJSON(['success' => false, 'message' => lang('Plugins.settings_save_failed')]);
|
||||
}
|
||||
}
|
||||
@@ -11,6 +11,7 @@ use App\Models\Item_kit;
|
||||
use App\Models\Receiving;
|
||||
use App\Models\Stock_location;
|
||||
use App\Models\Supplier;
|
||||
use CodeIgniter\Events\Events;
|
||||
use CodeIgniter\HTTP\ResponseInterface;
|
||||
use Config\OSPOS;
|
||||
use Config\Services;
|
||||
@@ -253,7 +254,7 @@ class Receivings extends Secure_Controller
|
||||
}
|
||||
} else {
|
||||
$stored_employee_id = $receiving_info['employee_id'];
|
||||
$stored_employee = $this->employee->get_info($stored_employee_id);
|
||||
$stored_employee = $this->employee->getInfo($stored_employee_id);
|
||||
$data['employees'][$stored_employee_id] = $stored_employee->first_name . ' ' . $stored_employee->last_name;
|
||||
}
|
||||
|
||||
@@ -342,12 +343,12 @@ class Receivings extends Secure_Controller
|
||||
}
|
||||
|
||||
$employee_id = $this->employee->get_logged_in_employee_info()->person_id;
|
||||
$employee_info = $this->employee->get_info($employee_id);
|
||||
$employee_info = $this->employee->getInfo($employee_id);
|
||||
$data['employee'] = $employee_info->first_name . ' ' . $employee_info->last_name;
|
||||
|
||||
$supplier_id = $this->receiving_lib->get_supplier();
|
||||
if ($supplier_id != -1) {
|
||||
$supplier_info = $this->supplier->get_info($supplier_id);
|
||||
$supplier_info = $this->supplier->getInfo($supplier_id);
|
||||
$data['supplier'] = $supplier_info->company_name; // TODO: duplicated code
|
||||
$data['first_name'] = $supplier_info->first_name;
|
||||
$data['last_name'] = $supplier_info->last_name;
|
||||
@@ -367,6 +368,7 @@ class Receivings extends Secure_Controller
|
||||
$data['error_message'] = lang('Receivings.transaction_failed');
|
||||
} else {
|
||||
$data['barcode'] = $this->barcode_lib->generate_receipt_barcode($data['receiving_id']);
|
||||
Events::trigger('receiving_complete', (int) substr($data['receiving_id'], 5), $data['mode']);
|
||||
}
|
||||
|
||||
$data['print_after_sale'] = $this->receiving_lib->is_print_after_sale();
|
||||
@@ -422,12 +424,12 @@ class Receivings extends Secure_Controller
|
||||
$data['reference'] = $this->receiving_lib->get_reference();
|
||||
$data['receiving_id'] = 'RECV ' . $receiving_id;
|
||||
$data['barcode'] = $this->barcode_lib->generate_receipt_barcode($data['receiving_id']);
|
||||
$employee_info = $this->employee->get_info($receiving_info['employee_id']);
|
||||
$employee_info = $this->employee->getInfo($receiving_info['employee_id']);
|
||||
$data['employee'] = $employee_info->first_name . ' ' . $employee_info->last_name;
|
||||
|
||||
$supplier_id = $this->receiving_lib->get_supplier(); // TODO: Duplicated code
|
||||
if ($supplier_id != -1) {
|
||||
$supplier_info = $this->supplier->get_info($supplier_id);
|
||||
$supplier_info = $this->supplier->getInfo($supplier_id);
|
||||
$data['supplier'] = $supplier_info->company_name;
|
||||
$data['first_name'] = $supplier_info->first_name;
|
||||
$data['last_name'] = $supplier_info->last_name;
|
||||
@@ -475,7 +477,7 @@ class Receivings extends Secure_Controller
|
||||
$supplier_id = $this->receiving_lib->get_supplier();
|
||||
|
||||
if ($supplier_id != -1) { // TODO: Duplicated Code... replace -1 with a constant
|
||||
$supplier_info = $this->supplier->get_info($supplier_id);
|
||||
$supplier_info = $this->supplier->getInfo($supplier_id);
|
||||
$data['supplier'] = $supplier_info->company_name;
|
||||
$data['first_name'] = $supplier_info->first_name;
|
||||
$data['last_name'] = $supplier_info->last_name;
|
||||
|
||||
@@ -1343,7 +1343,7 @@ class Reports extends Secure_Controller
|
||||
}
|
||||
}
|
||||
|
||||
$customer_info = $this->customer->get_info($customer_id);
|
||||
$customer_info = $this->customer->getInfo($customer_id);
|
||||
$customer_name = !empty($customer_info->company_name) // TODO: This variable is not used anywhere in the code. Should it be or can it be deleted?
|
||||
? "[ $customer_info->company_name ]"
|
||||
: $customer_info->company_name;
|
||||
@@ -1470,7 +1470,7 @@ class Reports extends Secure_Controller
|
||||
}
|
||||
}
|
||||
|
||||
$employee_info = $this->employee->get_info($employee_id);
|
||||
$employee_info = $this->employee->getInfo($employee_id);
|
||||
// TODO: Duplicated Code
|
||||
$data = [
|
||||
'title' => $employee_info->first_name . ' ' . $employee_info->last_name . ' ' . lang('Reports.report'),
|
||||
@@ -1736,7 +1736,7 @@ class Reports extends Secure_Controller
|
||||
];
|
||||
}
|
||||
|
||||
$supplier_info = $this->supplier->get_info((int) $supplier_id);
|
||||
$supplier_info = $this->supplier->getInfo((int) $supplier_id);
|
||||
$data = [
|
||||
'title' => $supplier_info->company_name . ' (' . $supplier_info->first_name . ' ' . $supplier_info->last_name . ') ' . lang('Reports.report'),
|
||||
'subtitle' => $this->_get_subtitle_report(['start_date' => $start_date, 'end_date' => $end_date]),
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -99,10 +99,10 @@ class Secure_Controller extends BaseController
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $key
|
||||
* @param string $key
|
||||
* @return mixed|void
|
||||
*/
|
||||
public function getConfig($key)
|
||||
public function getConfig(string $key)
|
||||
{
|
||||
if (isset($config[$key])) {
|
||||
return $config[$key];
|
||||
|
||||
@@ -34,7 +34,7 @@ class Suppliers extends Persons
|
||||
*/
|
||||
public function getRow($row_id): ResponseInterface
|
||||
{
|
||||
$data_row = get_supplier_data_row($this->supplier->get_info($row_id));
|
||||
$data_row = get_supplier_data_row($this->supplier->getInfo($row_id));
|
||||
$data_row['category'] = $this->supplier->get_category_name($data_row['category']);
|
||||
|
||||
return $this->response->setJSON($data_row);
|
||||
@@ -97,7 +97,7 @@ class Suppliers extends Persons
|
||||
*/
|
||||
public function getView(int $supplier_id = NEW_ENTRY): string
|
||||
{
|
||||
$info = $this->supplier->get_info($supplier_id);
|
||||
$info = $this->supplier->getInfo($supplier_id);
|
||||
foreach (get_object_vars($info) as $property => $value) {
|
||||
$info->$property = $value;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Database\Migrations;
|
||||
|
||||
use CodeIgniter\Database\Migration;
|
||||
|
||||
class PluginConfigTableCreate extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
log_message('info', 'Migrating plugin_config table started');
|
||||
|
||||
execute_script(APPPATH . 'Database/Migrations/sqlscripts/3.5.0_PluginConfigTableCreate.sql');
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
$this->forge->dropTable('plugin_config', true);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
CREATE TABLE IF NOT EXISTS `ospos_plugin_config` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`plugin_id` varchar(100) NOT NULL,
|
||||
`key` varchar(100) NOT NULL,
|
||||
`value` text NOT NULL,
|
||||
`is_control` tinyint(1) NOT NULL DEFAULT 0,
|
||||
`created_at` timestamp NOT NULL DEFAULT current_timestamp(),
|
||||
`updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uq_plugin_key` (`plugin_id`, `key`),
|
||||
KEY `idx_plugin_id` (`plugin_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
INSERT IGNORE INTO `ospos_modules` (`name_lang_key`, `desc_lang_key`, `sort`, `module_id`) VALUES
|
||||
('module_plugins', 'module_plugins_desc', 111, 'plugins');
|
||||
|
||||
INSERT IGNORE INTO `ospos_permissions` (`permission_id`, `module_id`) VALUES
|
||||
('plugins', 'plugins');
|
||||
|
||||
INSERT IGNORE INTO `ospos_grants` (`permission_id`, `person_id`, `menu_group`)
|
||||
SELECT 'plugins', `person_id`, 'office' FROM `ospos_grants` WHERE `permission_id` = 'config';
|
||||
@@ -272,6 +272,9 @@ function get_payment_options(): array
|
||||
$payments[lang('Sales.upi')] = lang('Sales.upi');
|
||||
}
|
||||
|
||||
$payments[lang('Sales.bank_transfer')] = lang('Sales.bank_transfer');
|
||||
$payments[lang('Sales.wallet')] = lang('Sales.wallet');
|
||||
|
||||
return $payments;
|
||||
}
|
||||
|
||||
@@ -365,74 +368,6 @@ function to_currency_no_money(?string $number): string
|
||||
return to_decimals($number, 'currency_decimals');
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the secondary currency rendering context from app config values.
|
||||
*
|
||||
* @param array $config
|
||||
* @return array{show:bool,rate:float,symbol:string,code:string,decimals:int}
|
||||
*/
|
||||
function secondary_currency_context(array $config): array
|
||||
{
|
||||
$rate = (float) ($config['secondary_currency_rate'] ?? 0);
|
||||
$symbol = trim((string) ($config['secondary_currency_symbol'] ?? ''));
|
||||
$code = trim((string) ($config['secondary_currency_code'] ?? ''));
|
||||
$decimals = (int) ($config['secondary_currency_decimals'] ?? ($config['currency_decimals'] ?? DEFAULT_PRECISION));
|
||||
|
||||
return [
|
||||
'show' => (($config['secondary_currency_enabled'] ?? false) == 1) && $rate > 0,
|
||||
'rate' => $rate,
|
||||
'symbol' => $symbol,
|
||||
'code' => $code,
|
||||
'decimals' => $decimals,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Render a value in the secondary currency.
|
||||
*
|
||||
* @param float|int|string|null $number
|
||||
* @param array{show:bool,rate:float,symbol:string,code:string,decimals:int} $secondaryCurrency
|
||||
* @return string
|
||||
*/
|
||||
function to_secondary_currency(float|int|string|null $number, array $secondaryCurrency): string
|
||||
{
|
||||
if (!isset($number) || !$secondaryCurrency['show']) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$config = config(OSPOS::class)->settings;
|
||||
$amount = (float) $number * (float) $secondaryCurrency['rate'];
|
||||
$fmt = new NumberFormatter($config['number_locale'], NumberFormatter::CURRENCY);
|
||||
$fmt->setAttribute(NumberFormatter::MIN_FRACTION_DIGITS, $secondaryCurrency['decimals']);
|
||||
$fmt->setAttribute(NumberFormatter::MAX_FRACTION_DIGITS, $secondaryCurrency['decimals']);
|
||||
|
||||
if (empty($config['thousands_separator'])) {
|
||||
$fmt->setTextAttribute(NumberFormatter::GROUPING_SEPARATOR_SYMBOL, '');
|
||||
}
|
||||
|
||||
$fmt->setSymbol(NumberFormatter::CURRENCY_SYMBOL, $secondaryCurrency['symbol'] !== '' ? $secondaryCurrency['symbol'] : ($secondaryCurrency['code'] !== '' ? $secondaryCurrency['code'] : ''));
|
||||
|
||||
return $fmt->format($amount);
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the secondary and primary currency amounts together.
|
||||
*
|
||||
* @param float|int|string|null $number
|
||||
* @param array{show:bool,rate:float,symbol:string,code:string,decimals:int} $secondaryCurrency
|
||||
* @return string
|
||||
*/
|
||||
function to_secondary_currency_dual(float|int|string|null $number, array $secondaryCurrency): string
|
||||
{
|
||||
$secondary = to_secondary_currency($number, $secondaryCurrency);
|
||||
|
||||
if ($secondary === '') {
|
||||
return to_currency((string) $number);
|
||||
}
|
||||
|
||||
return $secondary . '<br>' . to_currency((string) $number);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string|null $number
|
||||
* @return string
|
||||
|
||||
19
app/Helpers/plugin_helper.php
Normal file
19
app/Helpers/plugin_helper.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
use CodeIgniter\Events\Events;
|
||||
|
||||
if (!function_exists('pluginContent')) {
|
||||
function pluginContent(string $section, array $data = []): string
|
||||
{
|
||||
ob_start();
|
||||
Events::trigger("view:{$section}", $data);
|
||||
return ob_get_clean() ?: '';
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('pluginContentExists')) {
|
||||
function pluginContentExists(string $section): bool
|
||||
{
|
||||
return !empty(Events::listeners("view:{$section}"));
|
||||
}
|
||||
}
|
||||
@@ -933,6 +933,50 @@ function get_controller(): string
|
||||
return end($controller_name_parts);
|
||||
}
|
||||
|
||||
function plugin_headers(): array
|
||||
{
|
||||
return [
|
||||
['name' => lang('Plugins.name'), 'escape' => false],
|
||||
['description' => lang('Plugins.description')],
|
||||
['version' => lang('Plugins.version'), 'escape' => false],
|
||||
['status' => lang('Plugins.status'), 'escape' => false],
|
||||
];
|
||||
}
|
||||
|
||||
function get_plugin_manage_table_headers(): string
|
||||
{
|
||||
return transform_headers(plugin_headers(), false, true);
|
||||
}
|
||||
|
||||
function get_plugin_data_row(array $plugin): array
|
||||
{
|
||||
$pluginId = $plugin['id'];
|
||||
|
||||
$statusHtml = $plugin['enabled']
|
||||
? '<span class="label label-success">' . lang('Plugins.active') . '</span>'
|
||||
: '<span class="label label-default">' . lang('Plugins.inactive') . '</span>';
|
||||
|
||||
$editHtml = $plugin['enabled']
|
||||
? '<button class="btn btn-warning btn-xs plugin-action" data-action="disable" data-plugin-id="' . esc($pluginId) . '">'
|
||||
. '<span class="glyphicon glyphicon-pause"></span> ' . lang('Plugins.disable') . '</button>'
|
||||
: '<button class="btn btn-success btn-xs plugin-action" data-action="enable" data-plugin-id="' . esc($pluginId) . '">'
|
||||
. '<span class="glyphicon glyphicon-play"></span> ' . lang('Plugins.enable') . '</button>';
|
||||
|
||||
if ($plugin['has_config'] && $plugin['enabled']) {
|
||||
$editHtml .= ' <button class="btn btn-primary btn-xs plugin-config" data-plugin-id="' . esc($pluginId) . '">'
|
||||
. '<span class="glyphicon glyphicon-cog"></span> ' . lang('Plugins.configure') . '</button>';
|
||||
}
|
||||
|
||||
return [
|
||||
'plugin_id' => $pluginId,
|
||||
'name' => '<strong>' . esc($plugin['name']) . '</strong><br><small class="text-muted">' . esc($pluginId) . '</small>',
|
||||
'description' => esc($plugin['description']),
|
||||
'version' => '<span class="label label-default">' . esc($plugin['version']) . '</span>',
|
||||
'status' => $statusHtml,
|
||||
'edit' => $editHtml,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Restores filter values from the URL query string.
|
||||
*
|
||||
|
||||
@@ -166,8 +166,6 @@ return [
|
||||
"info" => "معلومات",
|
||||
"info_configuration" => "معلومات الشركة",
|
||||
"input_groups" => "مجموعات الإدخال",
|
||||
"integrations" => "التكامل",
|
||||
"integrations_configuration" => "تكامل",
|
||||
"invoice" => "الفاتورة",
|
||||
"invoice_configuration" => "إعدادات طباعة الفاتورة",
|
||||
"invoice_default_comments" => "التعليق الافتراضي على الفاتورة",
|
||||
@@ -198,13 +196,6 @@ return [
|
||||
"location_info" => "معلومات تهيئة الأماكن",
|
||||
"login_form" => "نمط نموذج تسجيل الدخول",
|
||||
"logout" => "هل تريد عمل نسخة إحتياطية قبل الخروج؟ اضغط [نعم] لعمل النسخة أو [الغاء] للخروج.",
|
||||
"mailchimp" => "ميل تشامب",
|
||||
"mailchimp_api_key" => "مفتاح ميل شيمب",
|
||||
"mailchimp_configuration" => "إعدادات ميل شيمب",
|
||||
"mailchimp_key_successfully" => "نجاح.",
|
||||
"mailchimp_key_unsuccessfully" => "فشل.",
|
||||
"mailchimp_lists" => "إعدادات ميل شيمب",
|
||||
"mailchimp_tooltip" => "انقر على رمز مفتاح API.",
|
||||
"message" => "الرسائل",
|
||||
"message_configuration" => "إعدادات الرسائل",
|
||||
"msg_msg" => "الرسائل النصية المحفوظة",
|
||||
|
||||
@@ -28,16 +28,6 @@ return [
|
||||
"employee" => "الموظف",
|
||||
"error_adding_updating" => "خطاء فى إضافة أو تحديث العميل.",
|
||||
"import_items_csv" => "استيراد العملا ء من ورقة عمل اكسل",
|
||||
"mailchimp_activity_click" => "النقر على البريد الإلكتروني",
|
||||
"mailchimp_activity_lastopen" => "آخر رسالة إلكترونية مفتوحة",
|
||||
"mailchimp_activity_open" => "رسالة إلكترونية مفتوحة",
|
||||
"mailchimp_activity_total" => "تم ارسال الرسالة الإلكترونية بنجاح",
|
||||
"mailchimp_activity_unopen" => "رسالة إلكترونية غير مفتوحة",
|
||||
"mailchimp_email_client" => "بريد الكتروني",
|
||||
"mailchimp_info" => "ميل تشيمب",
|
||||
"mailchimp_member_rating" => "التقييم",
|
||||
"mailchimp_status" => "الحالة",
|
||||
"mailchimp_vip" => "مهم",
|
||||
"max" => "الحد الأقصى",
|
||||
"min" => "الحد الأدنى",
|
||||
"new" => "عميل جديد",
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
"migrate_desc" => "تحديث قاعدة البيانات.",
|
||||
"office" => "المكتب",
|
||||
"office_desc" => "اظهار الائحة المكتبية.",
|
||||
'plugins' => 'الإضافات',
|
||||
"receivings" => "استلام الأصناف",
|
||||
"receivings_desc" => "معالجة أوامر الشراء و استلام الأصناف.",
|
||||
"reports" => "التقارير",
|
||||
|
||||
27
app/Language/ar-EG/Plugins.php
Normal file
27
app/Language/ar-EG/Plugins.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
return [
|
||||
'actions' => 'إجراءات',
|
||||
'active' => 'نشط',
|
||||
'configure' => 'تكوين',
|
||||
'description' => 'الوصف',
|
||||
'disable' => 'تعطيل',
|
||||
'disable_failed' => 'فشل تعطيل الإضافة',
|
||||
'disabled' => 'تم تعطيل الإضافة بنجاح',
|
||||
'enable' => 'تفعيل',
|
||||
'enable_failed' => 'فشل تفعيل الإضافة',
|
||||
'enabled' => 'تم تفعيل الإضافة بنجاح',
|
||||
'inactive' => 'غير نشط',
|
||||
'management' => 'إدارة الإضافات',
|
||||
'name' => 'اسم الإضافة',
|
||||
'no_config' => 'هذه الإضافة لا تحتوي على خيارات تكوين',
|
||||
'no_plugins_to_display' => 'لا توجد إضافات للعرض',
|
||||
'not_found' => 'الإضافة غير موجودة',
|
||||
'plugins' => 'الإضافات',
|
||||
'settings_save_failed' => 'فشل حفظ إعدادات الإضافة',
|
||||
'settings_saved' => 'تم حفظ إعدادات الإضافة بنجاح',
|
||||
'status' => 'الحالة',
|
||||
'uninstall' => 'إلغاء التثبيت',
|
||||
'uninstall_failed' => 'فشل إلغاء تثبيت الإضافة',
|
||||
'uninstalled' => 'تم إلغاء تثبيت الإضافة بنجاح',
|
||||
'version' => 'الإصدار',
|
||||
];
|
||||
@@ -41,7 +41,6 @@ return [
|
||||
"customer_discount" => "الخصم",
|
||||
"customer_email" => "البريد الإلكترونى",
|
||||
"customer_location" => "المكان",
|
||||
"customer_mailchimp_status" => "حالة بريد ميل تشيمب",
|
||||
"customer_optional" => "(مطلوب للدفعات المستحقة)",
|
||||
"customer_required" => "(اجباري)",
|
||||
"customer_total" => "المجموع",
|
||||
|
||||
@@ -166,8 +166,6 @@ return [
|
||||
"info" => "معلومات",
|
||||
"info_configuration" => "معلومات الشركة",
|
||||
"input_groups" => "مجموعات الإدخال",
|
||||
"integrations" => "التكامل",
|
||||
"integrations_configuration" => "تكامل",
|
||||
"invoice" => "الفاتورة",
|
||||
"invoice_configuration" => "إعدادات طباعة الفاتورة",
|
||||
"invoice_default_comments" => "التعليق الافتراضي على الفاتورة",
|
||||
@@ -198,13 +196,6 @@ return [
|
||||
"location_info" => "معلومات تهيئة الأماكن",
|
||||
"login_form" => "نمط نموذج تسجيل الدخول",
|
||||
"logout" => "هل تريد عمل نسخة إحتياطية قبل الخروج؟ اضغط [نعم] لعمل النسخة أو [الغاء] للخروج.",
|
||||
"mailchimp" => "ميل تشامب",
|
||||
"mailchimp_api_key" => "مفتاح ميل شيمب",
|
||||
"mailchimp_configuration" => "إعدادات ميل شيمب",
|
||||
"mailchimp_key_successfully" => "نجاح.",
|
||||
"mailchimp_key_unsuccessfully" => "فشل.",
|
||||
"mailchimp_lists" => "قوائم ميل شيمب",
|
||||
"mailchimp_tooltip" => "انقر على رمز مفتاح API.",
|
||||
"message" => "الرسائل",
|
||||
"message_configuration" => "إعدادات الرسائل",
|
||||
"msg_msg" => "الرسائل النصية المحفوظة",
|
||||
|
||||
@@ -28,16 +28,6 @@ return [
|
||||
"employee" => "الموظف",
|
||||
"error_adding_updating" => "خطاء فى إضافة أو تحديث العميل.",
|
||||
"import_items_csv" => "استيراد العملا ء من ورقة عمل اكسل",
|
||||
"mailchimp_activity_click" => "النقر على البريد الإلكتروني",
|
||||
"mailchimp_activity_lastopen" => "آخر رسالة إلكترونية مفتوحة",
|
||||
"mailchimp_activity_open" => "رسالة إلكترونية مفتوحة",
|
||||
"mailchimp_activity_total" => "تم ارسال الرسالة الإلكترونية بنجاح",
|
||||
"mailchimp_activity_unopen" => "رسالة إلكترونية غير مفتوحة",
|
||||
"mailchimp_email_client" => "بريد الكتروني",
|
||||
"mailchimp_info" => "ميل تشيمب",
|
||||
"mailchimp_member_rating" => "التقييم",
|
||||
"mailchimp_status" => "الحالة",
|
||||
"mailchimp_vip" => "مهم",
|
||||
"max" => "الحد الأقصى",
|
||||
"min" => "الحد الأدنى",
|
||||
"new" => "عميل جديد",
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
"migrate_desc" => "تحديث قاعدة البيانات.",
|
||||
"office" => "المكتب",
|
||||
"office_desc" => "اظهار الائحة المكتبية.",
|
||||
'plugins' => 'الإضافات',
|
||||
"receivings" => "استلام الأصناف",
|
||||
"receivings_desc" => "معالجة أوامر الشراء و استلام الأصناف.",
|
||||
"reports" => "التقارير",
|
||||
|
||||
27
app/Language/ar-LB/Plugins.php
Normal file
27
app/Language/ar-LB/Plugins.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
return [
|
||||
'actions' => 'إجراءات',
|
||||
'active' => 'نشط',
|
||||
'configure' => 'تكوين',
|
||||
'description' => 'الوصف',
|
||||
'disable' => 'تعطيل',
|
||||
'disable_failed' => 'فشل تعطيل الإضافة',
|
||||
'disabled' => 'تم تعطيل الإضافة بنجاح',
|
||||
'enable' => 'تفعيل',
|
||||
'enable_failed' => 'فشل تفعيل الإضافة',
|
||||
'enabled' => 'تم تفعيل الإضافة بنجاح',
|
||||
'inactive' => 'غير نشط',
|
||||
'management' => 'إدارة الإضافات',
|
||||
'name' => 'اسم الإضافة',
|
||||
'no_config' => 'هذه الإضافة لا تحتوي على خيارات تكوين',
|
||||
'no_plugins_to_display' => 'لا توجد إضافات للعرض',
|
||||
'not_found' => 'الإضافة غير موجودة',
|
||||
'plugins' => 'الإضافات',
|
||||
'settings_save_failed' => 'فشل حفظ إعدادات الإضافة',
|
||||
'settings_saved' => 'تم حفظ إعدادات الإضافة بنجاح',
|
||||
'status' => 'الحالة',
|
||||
'uninstall' => 'إلغاء التثبيت',
|
||||
'uninstall_failed' => 'فشل إلغاء تثبيت الإضافة',
|
||||
'uninstalled' => 'تم إلغاء تثبيت الإضافة بنجاح',
|
||||
'version' => 'الإصدار',
|
||||
];
|
||||
@@ -41,7 +41,6 @@ return [
|
||||
"customer_discount" => "الخصم",
|
||||
"customer_email" => "البريد الإلكترونى",
|
||||
"customer_location" => "المكان",
|
||||
"customer_mailchimp_status" => "حالة بريد ميل تشيمب",
|
||||
"customer_optional" => "(مطلوب للدفعات المستحقة)",
|
||||
"customer_required" => "(اجباري)",
|
||||
"customer_total" => "المجموع",
|
||||
|
||||
@@ -166,8 +166,6 @@ return [
|
||||
"info" => "Məlumat",
|
||||
"info_configuration" => "Dükan İnformasiyası",
|
||||
"input_groups" => "",
|
||||
"integrations" => "İnteqrasiya",
|
||||
"integrations_configuration" => "Üçüncü tərəf inteqrasiya",
|
||||
"invoice" => "Faktura",
|
||||
"invoice_configuration" => "Faktura Çap Parametrləri",
|
||||
"invoice_default_comments" => "Standart Faktura Şərhləri",
|
||||
@@ -198,13 +196,6 @@ return [
|
||||
"location_info" => "Yer Konfiqurasiya Məlumatı",
|
||||
"login_form" => "",
|
||||
"logout" => "Çıxışdan əvvəl məlumatlari ehtiyat bazasına köçürmək istəyirsinizmi? Çıxış üçün Bekap və ya [Ləğv] üçün [OK]' düyməsinə basın.",
|
||||
"mailchimp" => "Mailçimp",
|
||||
"mailchimp_api_key" => "Mailchimp API Açarı",
|
||||
"mailchimp_configuration" => "Mailchimp Konfiqurasiyası",
|
||||
"mailchimp_key_successfully" => "API Açarı etibarlıdır.",
|
||||
"mailchimp_key_unsuccessfully" => "API Açarı etibarsızdır.",
|
||||
"mailchimp_lists" => "Mailchimp siyahısı (lar)",
|
||||
"mailchimp_tooltip" => "API Açarının İşarəsinə basın.",
|
||||
"message" => "Mesaj",
|
||||
"message_configuration" => "Mesaj Konfiqurasiyası",
|
||||
"msg_msg" => "Saxlanılan Mətn Mesajı",
|
||||
|
||||
@@ -28,16 +28,6 @@ return [
|
||||
"employee" => "Əməkdaş",
|
||||
"error_adding_updating" => "Müştəri əlavəsində ya da yenilənməsində XƏTA.",
|
||||
"import_items_csv" => "CSVdən müştəri əlavə et",
|
||||
"mailchimp_activity_click" => "Elektron poçt düyməsi",
|
||||
"mailchimp_activity_lastopen" => "Son açılan məktub",
|
||||
"mailchimp_activity_open" => "Açıq məktub",
|
||||
"mailchimp_activity_total" => "Məktub göndərildi",
|
||||
"mailchimp_activity_unopen" => "Açılmamış məktub",
|
||||
"mailchimp_email_client" => "Müştəriyə Məktub Göndər",
|
||||
"mailchimp_info" => "Mailchimp-də",
|
||||
"mailchimp_member_rating" => "Reytinq",
|
||||
"mailchimp_status" => "Status",
|
||||
"mailchimp_vip" => "siz silmək üçün heç bir müştəri seçməmisiniz",
|
||||
"max" => "Ən çox xərclənən",
|
||||
"min" => "Ən az xərclənən",
|
||||
"new" => "Yeni Müştəri",
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
"migrate_desc" => "ALSAN Məlumat Bazasıni Yenilə.",
|
||||
"office" => "Ofis",
|
||||
"office_desc" => "Ofis menyusu siyahısı modulları.",
|
||||
'plugins' => 'Plaginlər',
|
||||
"receivings" => "Qəbul Edilənlər",
|
||||
"receivings_desc" => "Satınalma sifarişləri işləyin.",
|
||||
"reports" => "Hesabatlar",
|
||||
|
||||
27
app/Language/az/Plugins.php
Normal file
27
app/Language/az/Plugins.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
return [
|
||||
'actions' => 'Əməliyyatlar',
|
||||
'active' => 'Aktiv',
|
||||
'configure' => 'Konfiqurasiya',
|
||||
'description' => 'Təsvir',
|
||||
'disable' => 'Deaktiv et',
|
||||
'disable_failed' => 'Plagini deaktiv etmək alınmadı',
|
||||
'disabled' => 'Plagin uğurla deaktiv edildi',
|
||||
'enable' => 'Aktiv et',
|
||||
'enable_failed' => 'Plagini aktiv etmək alınmadı',
|
||||
'enabled' => 'Plagin uğurla aktiv edildi',
|
||||
'inactive' => 'Deaktiv',
|
||||
'management' => 'Plagin idarəetməsi',
|
||||
'name' => 'Plagin adı',
|
||||
'no_config' => 'Bu plaginin konfiqurasiya seçimləri yoxdur',
|
||||
'no_plugins_to_display' => 'Göstəriləcək plagin yoxdur',
|
||||
'not_found' => 'Plagin tapılmadı',
|
||||
'plugins' => 'Plaginlər',
|
||||
'settings_save_failed' => 'Plagin parametrlərini saxlamaq alınmadı',
|
||||
'settings_saved' => 'Plagin parametrləri uğurla saxlandı',
|
||||
'status' => 'Status',
|
||||
'uninstall' => 'Sil',
|
||||
'uninstall_failed' => 'Plagini silmək alınmadı',
|
||||
'uninstalled' => 'Plagin uğurla silindi',
|
||||
'version' => 'Versiya',
|
||||
];
|
||||
@@ -41,7 +41,6 @@ return [
|
||||
"customer_discount" => "Endirim",
|
||||
"customer_email" => "E-poçt",
|
||||
"customer_location" => "Yer",
|
||||
"customer_mailchimp_status" => "Mailchimp Statusu",
|
||||
"customer_optional" => "(Ödənişlərdə tələb olunur)",
|
||||
"customer_required" => "(Vacib)",
|
||||
"customer_total" => "Cəmi",
|
||||
|
||||
@@ -166,8 +166,6 @@ return [
|
||||
"info" => "Information",
|
||||
"info_configuration" => "Store Information",
|
||||
"input_groups" => "",
|
||||
"integrations" => "",
|
||||
"integrations_configuration" => "",
|
||||
"invoice" => "Invoice",
|
||||
"invoice_configuration" => "Invoice Print Settings",
|
||||
"invoice_default_comments" => "Default Invoice Comments",
|
||||
@@ -198,13 +196,6 @@ return [
|
||||
"location_info" => "Location Configuration Information",
|
||||
"login_form" => "",
|
||||
"logout" => "Do you want to make a backup before logging out? Click [OK] to backup or [Cancel] to logout.",
|
||||
"mailchimp" => "Mailchimp",
|
||||
"mailchimp_api_key" => "Mailchimp API Key",
|
||||
"mailchimp_configuration" => "Mailchimp Configuration",
|
||||
"mailchimp_key_successfully" => "API Key is valid.",
|
||||
"mailchimp_key_unsuccessfully" => "API Key is invalid.",
|
||||
"mailchimp_lists" => "Mailchimp List(s)",
|
||||
"mailchimp_tooltip" => "Click the icon for an API Key.",
|
||||
"message" => "Message",
|
||||
"message_configuration" => "Message Configuration",
|
||||
"msg_msg" => "Saved Text Message",
|
||||
|
||||
@@ -28,16 +28,6 @@ return [
|
||||
"employee" => "Служител",
|
||||
"error_adding_updating" => "Добавянето или актуализирането на клиента е неуспешно.",
|
||||
"import_items_csv" => "Импортиране на клиент от CSV",
|
||||
"mailchimp_activity_click" => "Email click",
|
||||
"mailchimp_activity_lastopen" => "Последно отворен Имейл",
|
||||
"mailchimp_activity_open" => "Имейлът е отворен",
|
||||
"mailchimp_activity_total" => "Имейлът е изпратен",
|
||||
"mailchimp_activity_unopen" => "Имейлът е неотворен",
|
||||
"mailchimp_email_client" => "Имейл клиент",
|
||||
"mailchimp_info" => "Mailchimp (Услуга)",
|
||||
"mailchimp_member_rating" => "Оценка",
|
||||
"mailchimp_status" => "Статус",
|
||||
"mailchimp_vip" => "VIP",
|
||||
"max" => "Максимално похарчени",
|
||||
"min" => "Минимално похарчено",
|
||||
"new" => "Нов клиент",
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
"migrate_desc" => "Update the OSPOS Database.",
|
||||
"office" => "Office",
|
||||
"office_desc" => "List office menu modules.",
|
||||
'plugins' => 'Плъгини',
|
||||
"receivings" => "Receivings",
|
||||
"receivings_desc" => "Process Purchase Orders.",
|
||||
"reports" => "Reports",
|
||||
|
||||
27
app/Language/bg/Plugins.php
Normal file
27
app/Language/bg/Plugins.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
return [
|
||||
'actions' => 'Действия',
|
||||
'active' => 'Активен',
|
||||
'configure' => 'Конфигуриране',
|
||||
'description' => 'Описание',
|
||||
'disable' => 'Деактивиране',
|
||||
'disable_failed' => 'Неуспешно деактивиране на приставката',
|
||||
'disabled' => 'Приставката е деактивирана успешно',
|
||||
'enable' => 'Активиране',
|
||||
'enable_failed' => 'Неуспешно активиране на приставката',
|
||||
'enabled' => 'Приставката е активирана успешно',
|
||||
'inactive' => 'Неактивен',
|
||||
'management' => 'Управление на приставки',
|
||||
'name' => 'Име на приставката',
|
||||
'no_config' => 'Тази приставка няма опции за конфигурация',
|
||||
'no_plugins_to_display' => 'Няма приставки за показване',
|
||||
'not_found' => 'Приставката не е намерена',
|
||||
'plugins' => 'Приставки',
|
||||
'settings_save_failed' => 'Неуспешно запазване на настройките на приставката',
|
||||
'settings_saved' => 'Настройките на приставката са запазени успешно',
|
||||
'status' => 'Статус',
|
||||
'uninstall' => 'Деинсталиране',
|
||||
'uninstall_failed' => 'Неуспешно деинсталиране на приставката',
|
||||
'uninstalled' => 'Приставката е деинсталирана успешно',
|
||||
'version' => 'Версия',
|
||||
];
|
||||
@@ -41,7 +41,7 @@ return [
|
||||
"customer_discount" => "Намаление",
|
||||
"customer_email" => "Електронна поща",
|
||||
"customer_location" => "Местоположение",
|
||||
"customer_mailchimp_status" => "Състояние на Mailchimp",
|
||||
"mailchimp_customer_status" => "Състояние на Mailchimp",
|
||||
"customer_optional" => "(Незадължително)",
|
||||
"customer_required" => "(Задължително)",
|
||||
"customer_total" => "Обща сума",
|
||||
|
||||
@@ -166,8 +166,6 @@ return [
|
||||
"info" => "Informacije",
|
||||
"info_configuration" => "Info o web trgovini",
|
||||
"input_groups" => "Grupe unosa",
|
||||
"integrations" => "Integracije",
|
||||
"integrations_configuration" => "Integracije trećih strana",
|
||||
"invoice" => "Faktura",
|
||||
"invoice_configuration" => "Podešavanja štamapnja",
|
||||
"invoice_default_comments" => "Komentar na fakturi",
|
||||
@@ -198,13 +196,6 @@ return [
|
||||
"location_info" => "Informacije o konfiguraciji lokacije",
|
||||
"login_form" => "Stil formulara za prijavu",
|
||||
"logout" => "Zar ne želite da napravite rezervnu kopiju prije odjave? Kliknite [OK] za sigurnosnu kopiju, [Cancel] da biste se odjavili.",
|
||||
"mailchimp" => "MeilChimp",
|
||||
"mailchimp_api_key" => "MailChimp API ključ",
|
||||
"mailchimp_configuration" => "MailChimp konfiguracija",
|
||||
"mailchimp_key_successfully" => "API ključ je važeći.",
|
||||
"mailchimp_key_unsuccessfully" => "API ključ je nevažeći.",
|
||||
"mailchimp_lists" => "MailChimp lista(e)",
|
||||
"mailchimp_tooltip" => "Kliknite na ikonu za API ključ.",
|
||||
"message" => "Poruke",
|
||||
"message_configuration" => "Konfigurisanje poruke",
|
||||
"msg_msg" => "Snimljena tekst poruka",
|
||||
|
||||
@@ -28,16 +28,6 @@ return [
|
||||
"employee" => "Zaposlenik",
|
||||
"error_adding_updating" => "Dodavanje ili ažuriranje kupca nije uspjelo.",
|
||||
"import_items_csv" => "Uvezi kupce iz CSV datoteke",
|
||||
"mailchimp_activity_click" => "Klik na e-mail",
|
||||
"mailchimp_activity_lastopen" => "Zadnji otvoreni e-mail",
|
||||
"mailchimp_activity_open" => "E-mail otvoren",
|
||||
"mailchimp_activity_total" => "E-mail poslat",
|
||||
"mailchimp_activity_unopen" => "E-mail nije otvoren",
|
||||
"mailchimp_email_client" => "E-mail klijenta",
|
||||
"mailchimp_info" => "MeilChimp",
|
||||
"mailchimp_member_rating" => "Ocjena",
|
||||
"mailchimp_status" => "Status",
|
||||
"mailchimp_vip" => "VIP",
|
||||
"max" => "Maks. potrošeno",
|
||||
"min" => "Min. potrošeno",
|
||||
"new" => "Novi kupac",
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
"migrate_desc" => "Ažurirajte OSPOS bazu podataka.",
|
||||
"office" => "Administracija",
|
||||
"office_desc" => "Lista modula kancelarijskog menija.",
|
||||
'plugins' => 'Dodaci',
|
||||
"receivings" => "Ulazi",
|
||||
"receivings_desc" => "Obrada narudžbenica.",
|
||||
"reports" => "Izvještaji",
|
||||
|
||||
27
app/Language/bs/Plugins.php
Normal file
27
app/Language/bs/Plugins.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
return [
|
||||
'actions' => 'Akcije',
|
||||
'active' => 'Aktivno',
|
||||
'configure' => 'Konfiguracija',
|
||||
'description' => 'Opis',
|
||||
'disable' => 'Onemogući',
|
||||
'disable_failed' => 'Nije uspjelo onemogućavanje dodatka',
|
||||
'disabled' => 'Dodatak je uspješno onemogućen',
|
||||
'enable' => 'Omogući',
|
||||
'enable_failed' => 'Nije uspjelo omogućavanje dodatka',
|
||||
'enabled' => 'Dodatak je uspješno omogućen',
|
||||
'inactive' => 'Neaktivno',
|
||||
'management' => 'Upravljanje dodacima',
|
||||
'name' => 'Naziv dodatka',
|
||||
'no_config' => 'Ovaj dodatak nema opcija konfiguracije',
|
||||
'no_plugins_to_display' => 'Nema dodataka za prikaz',
|
||||
'not_found' => 'Dodatak nije pronađen',
|
||||
'plugins' => 'Dodaci',
|
||||
'settings_save_failed' => 'Nije uspjelo spremanje postavki dodatka',
|
||||
'settings_saved' => 'Postavke dodatka su uspješno sačuvane',
|
||||
'status' => 'Status',
|
||||
'uninstall' => 'Deinstaliraj',
|
||||
'uninstall_failed' => 'Nije uspjelo deinstaliranje dodatka',
|
||||
'uninstalled' => 'Dodatak je uspješno deinstaliran',
|
||||
'version' => 'Verzija',
|
||||
];
|
||||
@@ -41,7 +41,6 @@ return [
|
||||
"customer_discount" => "Popust",
|
||||
"customer_email" => "E-mail kupca",
|
||||
"customer_location" => "Mjesto kupca",
|
||||
"customer_mailchimp_status" => "Status MailChimp-a",
|
||||
"customer_optional" => "(Potrebno za odloženo plaćanje)",
|
||||
"customer_required" => "Obavezno",
|
||||
"customer_total" => "Ukupno",
|
||||
|
||||
@@ -166,8 +166,8 @@ return [
|
||||
'info' => "زانیاری",
|
||||
'info_configuration' => "زانیاری فڕۆشتگا",
|
||||
'input_groups' => "گروپەکانی زانیارییە پێدراوەکان",
|
||||
'integrations' => "یەکگرتنەکان",
|
||||
'integrations_configuration' => "یەکگرتنەکانی لایەنی سێیەم",
|
||||
'plugins' => "یەکگرتنەکان",
|
||||
'plugins_configuration' => "یەکگرتنەکانی لایەنی سێیەم",
|
||||
'invoice' => "فاکتۆرە",
|
||||
'invoice_configuration' => "ڕێکخستنەکانی چاپی فاکتورە",
|
||||
'invoice_default_comments' => "سەرنجەکانی فاکتۆرەی بنەڕەتیی",
|
||||
@@ -198,13 +198,6 @@ return [
|
||||
'location_info' => "زانیاری ڕێکخستنی شوێن",
|
||||
'login_form' => "ستایلی فۆڕمی چوونەژوورەوە",
|
||||
'logout' => "دەتەوێت پاڵپشت دروست بکەیت پێش چوونە دەرەوە؟ کرتە بکە لەسەر [باشە] بۆ پاڵپشت دروستکردن یان [هەڵوەشاندنەوە] بۆ چوونە دەرەوە.",
|
||||
'mailchimp' => "مەیڵچیمپ",
|
||||
'mailchimp_api_key' => "کلیلی (ئەی پی ئای)ی مەیڵچیمپ",
|
||||
'mailchimp_configuration' => "ڕێکخستنی مەیڵچیمپ",
|
||||
'mailchimp_key_successfully' => "کلیلی (ئەی پی ئای) دروستە.",
|
||||
'mailchimp_key_unsuccessfully' => "کلیلی (ئەی پی ئای) نادروستە.",
|
||||
'mailchimp_lists' => "لیست(ەکان)ی مەیڵچیمپ",
|
||||
'mailchimp_tooltip' => "کرتە لەسەر ئایکۆنی کلیلی (ئەی پی ئای) بکە.",
|
||||
'message' => "نامە",
|
||||
'message_configuration' => "ڕێکخستنی نامە",
|
||||
'msg_msg' => "دەقی نامەی پاشەکەوتکراو",
|
||||
|
||||
@@ -28,16 +28,6 @@ return [
|
||||
'employee' => "فەرمانبەر",
|
||||
'error_adding_updating' => "زیادکردن یان نوێکردنەوەی کڕیار سەرکەوتوو نەبوو.",
|
||||
'import_items_csv' => "هاوردەکردنی کڕیار لەڕێگایCSV",
|
||||
'mailchimp_activity_click' => "کرتەی ئیمەیل",
|
||||
'mailchimp_activity_lastopen' => "دوایین ئیمەیڵی کراوە",
|
||||
'mailchimp_activity_open' => "ئیمەیڵ کرایەوە",
|
||||
'mailchimp_activity_total' => "ئیمەیڵ نێردرا",
|
||||
'mailchimp_activity_unopen' => "ئیمەیڵ نەکراوە",
|
||||
'mailchimp_email_client' => "کڕیاری ئیمەیل",
|
||||
'mailchimp_info' => "مەیڵچیمپ",
|
||||
'mailchimp_member_rating' => "پلەپێدان",
|
||||
'mailchimp_status' => "دۆخ",
|
||||
'mailchimp_vip' => "ڤی ئای پی",
|
||||
'max' => "زۆرترین. خەرجکراو",
|
||||
'min' => "کەمترین. خەرجکراو",
|
||||
'new' => "کڕیاری نوێ",
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
'migrate_desc' => "داتابەیسی OSPOS نوێ بکەرەوە.",
|
||||
'office' => "ئۆفیس",
|
||||
'office_desc' => "لیستی مۆدۆلی پێڕستی ئۆفیس نیشان بدە.",
|
||||
'plugins' => 'پڵەگینەکان',
|
||||
'receivings' => "وەرگرتنەکان",
|
||||
'receivings_desc' => "پرۆسەی داواکاری کڕین.",
|
||||
'reports' => "ڕاپۆرتەکان",
|
||||
|
||||
27
app/Language/ckb/Plugins.php
Normal file
27
app/Language/ckb/Plugins.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
return [
|
||||
'actions' => 'کردارەکان',
|
||||
'active' => 'چالاک',
|
||||
'configure' => 'ڕێکخستن',
|
||||
'description' => 'وەسف',
|
||||
'disable' => 'ناچالاک کردن',
|
||||
'disable_failed' => 'ناکامی لە ناچالاک کردنی پڵەگین',
|
||||
'disabled' => 'پڵەگین بە سەرکەوتوویی ناچالاک کرا',
|
||||
'enable' => 'چالاک کردن',
|
||||
'enable_failed' => 'ناکامی لە چالاک کردنی پڵەگین',
|
||||
'enabled' => 'پڵەگین بە سەرکەوتوویی چالاک کرا',
|
||||
'inactive' => 'ناچالاک',
|
||||
'management' => 'بەڕێوەبردنی پڵەگین',
|
||||
'name' => 'ناوی پڵەگین',
|
||||
'no_config' => 'ئەم پڵەگینە هیچ بژاردەیەکی ڕێکخستن نییە',
|
||||
'no_plugins_to_display' => 'هیچ پڵەگینێک بۆ نیشاندان نییە',
|
||||
'not_found' => 'پڵەگین نەدۆزرایەوە',
|
||||
'plugins' => 'پڵەگینەکان',
|
||||
'settings_save_failed' => 'ناکامی لە پاشەکەوت کردنی ڕێکخستنەکانی پڵەگین',
|
||||
'settings_saved' => 'ڕێکخستنەکانی پڵەگین بە سەرکەوتوویی پاشەکەوت کران',
|
||||
'status' => 'باری',
|
||||
'uninstall' => 'لادانی دامەزراندن',
|
||||
'uninstall_failed' => 'ناکامی لە لادانی دامەزراندنی پڵەگین',
|
||||
'uninstalled' => 'پڵەگین بە سەرکەوتوویی لادرا',
|
||||
'version' => 'وەشان',
|
||||
];
|
||||
@@ -41,7 +41,6 @@ return [
|
||||
'customer_discount' => "داشکاندن",
|
||||
'customer_email' => "ئیمەیڵ",
|
||||
'customer_location' => "ناونیشان",
|
||||
'customer_mailchimp_status' => "دۆخی بەکارهێنان مایلچیمپ",
|
||||
'customer_optional' => "(پێویستە بۆئەو پارانەی دەبێت بدرێت)",
|
||||
'customer_required' => "(پێویستە)",
|
||||
'customer_total' => "کۆی گشتی",
|
||||
|
||||
@@ -166,8 +166,6 @@ return [
|
||||
"info" => "",
|
||||
"info_configuration" => "",
|
||||
"input_groups" => "",
|
||||
"integrations" => "",
|
||||
"integrations_configuration" => "",
|
||||
"invoice" => "",
|
||||
"invoice_configuration" => "",
|
||||
"invoice_default_comments" => "",
|
||||
@@ -198,13 +196,6 @@ return [
|
||||
"location_info" => "",
|
||||
"login_form" => "",
|
||||
"logout" => "",
|
||||
"mailchimp" => "",
|
||||
"mailchimp_api_key" => "",
|
||||
"mailchimp_configuration" => "",
|
||||
"mailchimp_key_successfully" => "",
|
||||
"mailchimp_key_unsuccessfully" => "",
|
||||
"mailchimp_lists" => "",
|
||||
"mailchimp_tooltip" => "",
|
||||
"message" => "",
|
||||
"message_configuration" => "",
|
||||
"msg_msg" => "",
|
||||
|
||||
@@ -28,16 +28,6 @@ return [
|
||||
"employee" => "Zaměstnanec",
|
||||
"error_adding_updating" => "Chyba při vytváření nebo aktualizaci zákazníka.",
|
||||
"import_items_csv" => "Import zákazníků z CSV",
|
||||
"mailchimp_activity_click" => "",
|
||||
"mailchimp_activity_lastopen" => "Poslední otevřený email",
|
||||
"mailchimp_activity_open" => "",
|
||||
"mailchimp_activity_total" => "",
|
||||
"mailchimp_activity_unopen" => "",
|
||||
"mailchimp_email_client" => "",
|
||||
"mailchimp_info" => "",
|
||||
"mailchimp_member_rating" => "Hodnocení",
|
||||
"mailchimp_status" => "",
|
||||
"mailchimp_vip" => "VIP",
|
||||
"max" => "",
|
||||
"min" => "",
|
||||
"new" => "",
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
"migrate_desc" => "Aktualizovat databázi OSPOS.",
|
||||
"office" => "Správa",
|
||||
"office_desc" => "Seznam modulů pro správu.",
|
||||
'plugins' => 'Doplňky',
|
||||
"receivings" => "Příjem zboží",
|
||||
"receivings_desc" => "",
|
||||
"reports" => "Sestavy",
|
||||
|
||||
27
app/Language/cs/Plugins.php
Normal file
27
app/Language/cs/Plugins.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
return [
|
||||
'actions' => 'Akce',
|
||||
'active' => 'Aktivní',
|
||||
'configure' => 'Konfigurovat',
|
||||
'description' => 'Popis',
|
||||
'disable' => 'Deaktivovat',
|
||||
'disable_failed' => 'Deaktivace pluginu se nezdařila',
|
||||
'disabled' => 'Plugin byl úspěšně deaktivován',
|
||||
'enable' => 'Aktivovat',
|
||||
'enable_failed' => 'Aktivace pluginu se nezdařila',
|
||||
'enabled' => 'Plugin byl úspěšně aktivován',
|
||||
'inactive' => 'Neaktivní',
|
||||
'management' => 'Správa pluginů',
|
||||
'name' => 'Název pluginu',
|
||||
'no_config' => 'Tento plugin nemá žádné možnosti konfigurace',
|
||||
'no_plugins_to_display' => 'Žádné pluginy k zobrazení',
|
||||
'not_found' => 'Plugin nebyl nalezen',
|
||||
'plugins' => 'Pluginy',
|
||||
'settings_save_failed' => 'Uložení nastavení pluginu se nezdařilo',
|
||||
'settings_saved' => 'Nastavení pluginu bylo úspěšně uloženo',
|
||||
'status' => 'Stav',
|
||||
'uninstall' => 'Odinstalovat',
|
||||
'uninstall_failed' => 'Odinstalace pluginu se nezdařila',
|
||||
'uninstalled' => 'Plugin byl úspěšně odinstalován',
|
||||
'version' => 'Verze',
|
||||
];
|
||||
@@ -41,7 +41,6 @@ return [
|
||||
"customer_discount" => "Sleva",
|
||||
"customer_email" => "Email",
|
||||
"customer_location" => "Místo",
|
||||
"customer_mailchimp_status" => "Stav mailchimp",
|
||||
"customer_optional" => "(Volitelné)",
|
||||
"customer_required" => "(Vyžadováno)",
|
||||
"customer_total" => "Celkem",
|
||||
|
||||
@@ -166,8 +166,6 @@ return [
|
||||
"info" => "Information",
|
||||
"info_configuration" => "Store Information",
|
||||
"input_groups" => "",
|
||||
"integrations" => "Integrations",
|
||||
"integrations_configuration" => "Third Party Integrations",
|
||||
"invoice" => "Invoice",
|
||||
"invoice_configuration" => "Invoice Print Settings",
|
||||
"invoice_default_comments" => "Default Invoice Comments",
|
||||
@@ -198,13 +196,6 @@ return [
|
||||
"location_info" => "Location Configuration Information",
|
||||
"login_form" => "",
|
||||
"logout" => "Do you want to make a backup before logging out? Click [OK] to backup or [Cancel] to logout.",
|
||||
"mailchimp" => "Mailchimp",
|
||||
"mailchimp_api_key" => "Mailchimp API Key",
|
||||
"mailchimp_configuration" => "Mailchimp Configuration",
|
||||
"mailchimp_key_successfully" => "API Key is valid.",
|
||||
"mailchimp_key_unsuccessfully" => "API Key is invalid.",
|
||||
"mailchimp_lists" => "Mailchimp List(s)",
|
||||
"mailchimp_tooltip" => "Click the icon for an API Key.",
|
||||
"message" => "Message",
|
||||
"message_configuration" => "Message Configuration",
|
||||
"msg_msg" => "Saved Text Message",
|
||||
|
||||
@@ -28,16 +28,6 @@ return [
|
||||
"employee" => "Employee",
|
||||
"error_adding_updating" => "Customer add or update failed.",
|
||||
"import_items_csv" => "Customer Import from CSV",
|
||||
"mailchimp_activity_click" => "Email click",
|
||||
"mailchimp_activity_lastopen" => "Last open email",
|
||||
"mailchimp_activity_open" => "Email open",
|
||||
"mailchimp_activity_total" => "Email sent",
|
||||
"mailchimp_activity_unopen" => "Email unopen",
|
||||
"mailchimp_email_client" => "Email client",
|
||||
"mailchimp_info" => "Mailchimp",
|
||||
"mailchimp_member_rating" => "Rating",
|
||||
"mailchimp_status" => "Status",
|
||||
"mailchimp_vip" => "VIP",
|
||||
"max" => "Max. spent",
|
||||
"min" => "Min. spent",
|
||||
"new" => "New Customer",
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
"migrate_desc" => "",
|
||||
"office" => "",
|
||||
"office_desc" => "",
|
||||
'plugins' => 'Plugins',
|
||||
"receivings" => "",
|
||||
"receivings_desc" => "",
|
||||
"reports" => "",
|
||||
|
||||
27
app/Language/da/Plugins.php
Normal file
27
app/Language/da/Plugins.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
return [
|
||||
'actions' => 'Handlinger',
|
||||
'active' => 'Aktiv',
|
||||
'configure' => 'Konfigurer',
|
||||
'description' => 'Beskrivelse',
|
||||
'disable' => 'Deaktiver',
|
||||
'disable_failed' => 'Deaktivering af plugin mislykkedes',
|
||||
'disabled' => 'Plugin blev deaktiveret',
|
||||
'enable' => 'Aktiver',
|
||||
'enable_failed' => 'Aktivering af plugin mislykkedes',
|
||||
'enabled' => 'Plugin blev aktiveret',
|
||||
'inactive' => 'Inaktiv',
|
||||
'management' => 'Plugin-administration',
|
||||
'name' => 'Plugin-navn',
|
||||
'no_config' => 'Dette plugin har ingen konfigurationsmuligheder',
|
||||
'no_plugins_to_display' => 'Ingen plugins at vise',
|
||||
'not_found' => 'Plugin ikke fundet',
|
||||
'plugins' => 'Plugins',
|
||||
'settings_save_failed' => 'Gemning af plugin-indstillinger mislykkedes',
|
||||
'settings_saved' => 'Plugin-indstillinger blev gemt',
|
||||
'status' => 'Status',
|
||||
'uninstall' => 'Afinstaller',
|
||||
'uninstall_failed' => 'Afinstallation af plugin mislykkedes',
|
||||
'uninstalled' => 'Plugin blev afinstalleret',
|
||||
'version' => 'Version',
|
||||
];
|
||||
@@ -41,7 +41,6 @@ return [
|
||||
"customer_discount" => "Rabat",
|
||||
"customer_email" => "",
|
||||
"customer_location" => "",
|
||||
"customer_mailchimp_status" => "",
|
||||
"customer_optional" => "",
|
||||
"customer_required" => "",
|
||||
"customer_total" => "",
|
||||
|
||||
@@ -166,8 +166,6 @@ return [
|
||||
"info" => "Instellungen",
|
||||
"info_configuration" => "Instellungen",
|
||||
"input_groups" => "",
|
||||
"integrations" => "",
|
||||
"integrations_configuration" => "",
|
||||
"invoice" => "Rechnungs",
|
||||
"invoice_configuration" => "Druckereinstellungen",
|
||||
"invoice_default_comments" => "Rechnungskommentar",
|
||||
@@ -198,13 +196,6 @@ return [
|
||||
"location_info" => "Lagerort-Information",
|
||||
"login_form" => "",
|
||||
"logout" => "Wollen Sie eine Sicherung machen vor dem Beenden? Klicke [OK] für Sicherung",
|
||||
"mailchimp" => "",
|
||||
"mailchimp_api_key" => "",
|
||||
"mailchimp_configuration" => "",
|
||||
"mailchimp_key_successfully" => "",
|
||||
"mailchimp_key_unsuccessfully" => "",
|
||||
"mailchimp_lists" => "",
|
||||
"mailchimp_tooltip" => "",
|
||||
"message" => "Message",
|
||||
"message_configuration" => "Message Configuration",
|
||||
"msg_msg" => "Saved Text Message",
|
||||
|
||||
@@ -28,16 +28,6 @@ return [
|
||||
"employee" => "",
|
||||
"error_adding_updating" => "Fehler beim Hinzufügen/Ändern",
|
||||
"import_items_csv" => "Importiere Kunden via CSV",
|
||||
"mailchimp_activity_click" => "",
|
||||
"mailchimp_activity_lastopen" => "",
|
||||
"mailchimp_activity_open" => "",
|
||||
"mailchimp_activity_total" => "",
|
||||
"mailchimp_activity_unopen" => "",
|
||||
"mailchimp_email_client" => "",
|
||||
"mailchimp_info" => "",
|
||||
"mailchimp_member_rating" => "",
|
||||
"mailchimp_status" => "",
|
||||
"mailchimp_vip" => "",
|
||||
"max" => "",
|
||||
"min" => "",
|
||||
"new" => "Neuer Kunde",
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
"migrate_desc" => "",
|
||||
"office" => "",
|
||||
"office_desc" => "",
|
||||
'plugins' => 'Plugins',
|
||||
"receivings" => "Eingänge",
|
||||
"receivings_desc" => "Hinzufügen, Ändern, Löschen und Suchen",
|
||||
"reports" => "Berichte",
|
||||
|
||||
27
app/Language/de-CH/Plugins.php
Normal file
27
app/Language/de-CH/Plugins.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
return [
|
||||
'actions' => 'Aktionen',
|
||||
'active' => 'Aktiv',
|
||||
'configure' => 'Konfigurieren',
|
||||
'description' => 'Beschreibung',
|
||||
'disable' => 'Deaktivieren',
|
||||
'disable_failed' => 'Plugin konnte nicht deaktiviert werden',
|
||||
'disabled' => 'Plugin erfolgreich deaktiviert',
|
||||
'enable' => 'Aktivieren',
|
||||
'enable_failed' => 'Plugin konnte nicht aktiviert werden',
|
||||
'enabled' => 'Plugin erfolgreich aktiviert',
|
||||
'inactive' => 'Inaktiv',
|
||||
'management' => 'Plugin-Verwaltung',
|
||||
'name' => 'Plugin-Name',
|
||||
'no_config' => 'Dieses Plugin hat keine Konfigurationsoptionen',
|
||||
'no_plugins_to_display' => 'Keine Plugins anzuzeigen',
|
||||
'not_found' => 'Plugin nicht gefunden',
|
||||
'plugins' => 'Plugins',
|
||||
'settings_save_failed' => 'Plugin-Einstellungen konnten nicht gespeichert werden',
|
||||
'settings_saved' => 'Plugin-Einstellungen erfolgreich gespeichert',
|
||||
'status' => 'Status',
|
||||
'uninstall' => 'Deinstallieren',
|
||||
'uninstall_failed' => 'Plugin konnte nicht deinstalliert werden',
|
||||
'uninstalled' => 'Plugin erfolgreich deinstalliert',
|
||||
'version' => 'Version',
|
||||
];
|
||||
@@ -41,7 +41,6 @@ return [
|
||||
"customer_discount" => "Discount",
|
||||
"customer_email" => "Customer Email",
|
||||
"customer_location" => "Customer Location",
|
||||
"customer_mailchimp_status" => "",
|
||||
"customer_optional" => "",
|
||||
"customer_required" => "",
|
||||
"customer_total" => "Total",
|
||||
|
||||
@@ -166,8 +166,6 @@ return [
|
||||
"info" => "Informationen",
|
||||
"info_configuration" => "Generelle Einstellungen",
|
||||
"input_groups" => "",
|
||||
"integrations" => "Integrationen",
|
||||
"integrations_configuration" => "Drittanbieter Integrationen",
|
||||
"invoice" => "Rechnungs",
|
||||
"invoice_configuration" => "Druckereinstellungen",
|
||||
"invoice_default_comments" => "Rechnungskommentar",
|
||||
@@ -198,14 +196,7 @@ return [
|
||||
"location_info" => "Lagerort-Information",
|
||||
"login_form" => "",
|
||||
"logout" => "Wollen Sie vor dem Beenden eine Sicherung erstellen? Klicke [OK] für Sicherung.",
|
||||
"mailchimp" => "Mailchimp",
|
||||
"mailchimp_api_key" => "Mailchimp API Schlüssel",
|
||||
"mailchimp_configuration" => "Mailchimp Konfiguration",
|
||||
"mailchimp_key_successfully" => "API Key ist gültig.",
|
||||
"mailchimp_key_unsuccessfully" => "API Key ist ungültig.",
|
||||
"mailchimp_lists" => "Mailchimp Liste(n)",
|
||||
"mailchimp_tooltip" => "Icon anklicken um API Key zu erhalten.",
|
||||
"message" => "Nachricht",
|
||||
"message" => "Nachricht",
|
||||
"message_configuration" => "Nachrichtenkonfiguration",
|
||||
"msg_msg" => "Gespeicherte Nachricht",
|
||||
"msg_msg_placeholder" => "Wenn Sie eine SMS Vorlage benutzen wollen, geben Sie diese hier ein, ansonsten lassen Sie dieses Feld frei.",
|
||||
|
||||
@@ -28,16 +28,6 @@ return [
|
||||
"employee" => "Mitarbeiter",
|
||||
"error_adding_updating" => "Fehler beim Hinzufügen/Ändern.",
|
||||
"import_items_csv" => "Importiere Kunden via CSV",
|
||||
"mailchimp_activity_click" => "E-Mail klick",
|
||||
"mailchimp_activity_lastopen" => "Letzte geöffnet E-Mail",
|
||||
"mailchimp_activity_open" => "E-Mail geöffnet",
|
||||
"mailchimp_activity_total" => "E-Mail gesendet",
|
||||
"mailchimp_activity_unopen" => "E-Mail ungeöffnet",
|
||||
"mailchimp_email_client" => "E-Mail Client",
|
||||
"mailchimp_info" => "Mailchimp",
|
||||
"mailchimp_member_rating" => "Bewertung",
|
||||
"mailchimp_status" => "Status",
|
||||
"mailchimp_vip" => "VIP",
|
||||
"max" => "Maximal Ausgegeben",
|
||||
"min" => "Minimal Ausgegeben",
|
||||
"new" => "Neuer Kunde",
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
"migrate_desc" => "Aktualisiere die OSPOS-Datenbank.",
|
||||
"office" => "Verwaltung",
|
||||
"office_desc" => "Auflistung der Module für das Verwaltungs-Menü.",
|
||||
'plugins' => 'Plugins',
|
||||
"receivings" => "Eingänge",
|
||||
"receivings_desc" => "Hinzufügen, Ändern, Löschen und Suchen von Bestellungen.",
|
||||
"reports" => "Berichte",
|
||||
|
||||
27
app/Language/de-DE/Plugins.php
Normal file
27
app/Language/de-DE/Plugins.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
return [
|
||||
'actions' => 'Aktionen',
|
||||
'active' => 'Aktiv',
|
||||
'configure' => 'Konfigurieren',
|
||||
'description' => 'Beschreibung',
|
||||
'disable' => 'Deaktivieren',
|
||||
'disable_failed' => 'Plugin konnte nicht deaktiviert werden',
|
||||
'disabled' => 'Plugin erfolgreich deaktiviert',
|
||||
'enable' => 'Aktivieren',
|
||||
'enable_failed' => 'Plugin konnte nicht aktiviert werden',
|
||||
'enabled' => 'Plugin erfolgreich aktiviert',
|
||||
'inactive' => 'Inaktiv',
|
||||
'management' => 'Plugin-Verwaltung',
|
||||
'name' => 'Plugin-Name',
|
||||
'no_config' => 'Dieses Plugin hat keine Konfigurationsoptionen',
|
||||
'no_plugins_to_display' => 'Keine Plugins anzuzeigen',
|
||||
'not_found' => 'Plugin nicht gefunden',
|
||||
'plugins' => 'Plugins',
|
||||
'settings_save_failed' => 'Plugin-Einstellungen konnten nicht gespeichert werden',
|
||||
'settings_saved' => 'Plugin-Einstellungen erfolgreich gespeichert',
|
||||
'status' => 'Status',
|
||||
'uninstall' => 'Deinstallieren',
|
||||
'uninstall_failed' => 'Plugin konnte nicht deinstalliert werden',
|
||||
'uninstalled' => 'Plugin erfolgreich deinstalliert',
|
||||
'version' => 'Version',
|
||||
];
|
||||
@@ -41,7 +41,6 @@ return [
|
||||
"customer_discount" => "Rabatt",
|
||||
"customer_email" => "Kunden eMail",
|
||||
"customer_location" => "Kunden Stadt",
|
||||
"customer_mailchimp_status" => "Mailchim Status",
|
||||
"customer_optional" => "(Benötigt für fällige Zahlungen)",
|
||||
"customer_required" => "(Benötigt)",
|
||||
"customer_total" => "Gesamtbetrag",
|
||||
|
||||
@@ -166,8 +166,6 @@ return [
|
||||
"info" => "",
|
||||
"info_configuration" => "",
|
||||
"input_groups" => "",
|
||||
"integrations" => "",
|
||||
"integrations_configuration" => "",
|
||||
"invoice" => "",
|
||||
"invoice_configuration" => "",
|
||||
"invoice_default_comments" => "",
|
||||
@@ -198,13 +196,6 @@ return [
|
||||
"location_info" => "",
|
||||
"login_form" => "",
|
||||
"logout" => "",
|
||||
"mailchimp" => "",
|
||||
"mailchimp_api_key" => "",
|
||||
"mailchimp_configuration" => "",
|
||||
"mailchimp_key_successfully" => "",
|
||||
"mailchimp_key_unsuccessfully" => "",
|
||||
"mailchimp_lists" => "",
|
||||
"mailchimp_tooltip" => "",
|
||||
"message" => "",
|
||||
"message_configuration" => "",
|
||||
"msg_msg" => "",
|
||||
|
||||
@@ -28,16 +28,6 @@ return [
|
||||
"employee" => "",
|
||||
"error_adding_updating" => "",
|
||||
"import_items_csv" => "",
|
||||
"mailchimp_activity_click" => "",
|
||||
"mailchimp_activity_lastopen" => "",
|
||||
"mailchimp_activity_open" => "",
|
||||
"mailchimp_activity_total" => "",
|
||||
"mailchimp_activity_unopen" => "",
|
||||
"mailchimp_email_client" => "",
|
||||
"mailchimp_info" => "",
|
||||
"mailchimp_member_rating" => "",
|
||||
"mailchimp_status" => "",
|
||||
"mailchimp_vip" => "",
|
||||
"max" => "",
|
||||
"min" => "",
|
||||
"new" => "",
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
"migrate_desc" => "",
|
||||
"office" => "",
|
||||
"office_desc" => "",
|
||||
'plugins' => 'Πρόσθετα',
|
||||
"receivings" => "",
|
||||
"receivings_desc" => "",
|
||||
"reports" => "",
|
||||
|
||||
27
app/Language/el/Plugins.php
Normal file
27
app/Language/el/Plugins.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
return [
|
||||
'actions' => 'Ενέργειες',
|
||||
'active' => 'Ενεργό',
|
||||
'configure' => 'Διαμόρφωση',
|
||||
'description' => 'Περιγραφή',
|
||||
'disable' => 'Απενεργοποίηση',
|
||||
'disable_failed' => 'Η απενεργοποίηση της προσθήκης απέτυχε',
|
||||
'disabled' => 'Η προσθήκη απενεργοποιήθηκε επιτυχώς',
|
||||
'enable' => 'Ενεργοποίηση',
|
||||
'enable_failed' => 'Η ενεργοποίηση της προσθήκης απέτυχε',
|
||||
'enabled' => 'Η προσθήκη ενεργοποιήθηκε επιτυχώς',
|
||||
'inactive' => 'Ανενεργό',
|
||||
'management' => 'Διαχείριση Προσθηκών',
|
||||
'name' => 'Όνομα Προσθήκης',
|
||||
'no_config' => 'Αυτή η προσθήκη δεν έχει επιλογές διαμόρφωσης',
|
||||
'no_plugins_to_display' => 'Δεν υπάρχουν προσθήκες για εμφάνιση',
|
||||
'not_found' => 'Η προσθήκη δεν βρέθηκε',
|
||||
'plugins' => 'Προσθήκες',
|
||||
'settings_save_failed' => 'Η αποθήκευση των ρυθμίσεων της προσθήκης απέτυχε',
|
||||
'settings_saved' => 'Οι ρυθμίσεις της προσθήκης αποθηκεύτηκαν επιτυχώς',
|
||||
'status' => 'Κατάσταση',
|
||||
'uninstall' => 'Απεγκατάσταση',
|
||||
'uninstall_failed' => 'Η απεγκατάσταση της προσθήκης απέτυχε',
|
||||
'uninstalled' => 'Η προσθήκη απεγκαταστάθηκε επιτυχώς',
|
||||
'version' => 'Έκδοση',
|
||||
];
|
||||
@@ -41,7 +41,6 @@ return [
|
||||
"customer_discount" => "Έκπτωση",
|
||||
"customer_email" => "Διεύθυνση ηλεκτρονικού ταχυδρομείου",
|
||||
"customer_location" => "Τοποθεσία",
|
||||
"customer_mailchimp_status" => "Κατάσταση Mailchimp",
|
||||
"customer_optional" => "(Απαραίτητο για πληρωμές επί Πιστώσει)",
|
||||
"customer_required" => "(Απαραίτητο)",
|
||||
"customer_total" => "Σύνολο",
|
||||
|
||||
@@ -166,8 +166,6 @@ return [
|
||||
"info" => "Information",
|
||||
"info_configuration" => "Shop Information",
|
||||
"input_groups" => "Input Groups",
|
||||
"integrations" => "Integrations",
|
||||
"integrations_configuration" => "Third Party Integrations",
|
||||
"invoice" => "Invoice",
|
||||
"invoice_configuration" => "Invoice Print Settings",
|
||||
"invoice_default_comments" => "Default Invoice Comments",
|
||||
@@ -198,13 +196,6 @@ return [
|
||||
"location_info" => "Location Configuration Information",
|
||||
"login_form" => "Login Form Style",
|
||||
"logout" => "Don't you want to make a backup before logging out? Click [OK] to backup, [Cancel] to logout.",
|
||||
"mailchimp" => "MailChimp",
|
||||
"mailchimp_api_key" => "MailChimp API Key",
|
||||
"mailchimp_configuration" => "MailChimp Configuration",
|
||||
"mailchimp_key_successfully" => "Valid API Key.",
|
||||
"mailchimp_key_unsuccessfully" => "Invalid API Key.",
|
||||
"mailchimp_lists" => "MailChimp List(s)",
|
||||
"mailchimp_tooltip" => "Click the icon for an API key.",
|
||||
"message" => "Message",
|
||||
"message_configuration" => "Message Configuration",
|
||||
"msg_msg" => "Saved Text Message",
|
||||
|
||||
@@ -28,16 +28,6 @@ return [
|
||||
"employee" => "Employee",
|
||||
"error_adding_updating" => "Error adding/updating Customer.",
|
||||
"import_items_csv" => "Customer Import from CSV",
|
||||
"mailchimp_activity_click" => "Email click",
|
||||
"mailchimp_activity_lastopen" => "Last open email",
|
||||
"mailchimp_activity_open" => "Email open",
|
||||
"mailchimp_activity_total" => "Email sent",
|
||||
"mailchimp_activity_unopen" => "Email unopen",
|
||||
"mailchimp_email_client" => "Email client",
|
||||
"mailchimp_info" => "MailChimp",
|
||||
"mailchimp_member_rating" => "Rating",
|
||||
"mailchimp_status" => "Status",
|
||||
"mailchimp_vip" => "VIP",
|
||||
"max" => "Max spent",
|
||||
"min" => "Min spent",
|
||||
"new" => "New Customer",
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
"migrate_desc" => "Update the OSPOS Database.",
|
||||
"office" => "Office",
|
||||
"office_desc" => "List office menu modules.",
|
||||
'plugins' => 'Plugins',
|
||||
"receivings" => "Receivings",
|
||||
"receivings_desc" => "Process Purchase Orders.",
|
||||
"reports" => "Reports",
|
||||
|
||||
27
app/Language/en-GB/Plugins.php
Normal file
27
app/Language/en-GB/Plugins.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
return [
|
||||
'actions' => 'Actions',
|
||||
'active' => 'Active',
|
||||
'configure' => 'Configure',
|
||||
'description' => 'Description',
|
||||
'disable' => 'Disable',
|
||||
'disable_failed' => 'Failed to disable plugin',
|
||||
'disabled' => 'Plugin disabled successfully',
|
||||
'enable' => 'Enable',
|
||||
'enable_failed' => 'Failed to enable plugin',
|
||||
'enabled' => 'Plugin enabled successfully',
|
||||
'inactive' => 'Inactive',
|
||||
'management' => 'Plugin Management',
|
||||
'name' => 'Plugin Name',
|
||||
'no_config' => 'This plugin has no configuration options',
|
||||
'no_plugins_to_display' => 'No Plugins to display',
|
||||
'not_found' => 'Plugin not found',
|
||||
'plugins' => 'Plugins',
|
||||
'settings_save_failed' => 'Failed to save plugin settings',
|
||||
'settings_saved' => 'Plugin settings saved successfully',
|
||||
'status' => 'Status',
|
||||
'uninstall' => 'Uninstall',
|
||||
'uninstall_failed' => 'Failed to uninstall plugin',
|
||||
'uninstalled' => 'Plugin uninstalled successfully',
|
||||
'version' => 'Version',
|
||||
];
|
||||
@@ -42,7 +42,6 @@ return [
|
||||
"customer_discount" => "Discount",
|
||||
"customer_email" => "Email",
|
||||
"customer_location" => "Location",
|
||||
"customer_mailchimp_status" => "MailChimp Status",
|
||||
"customer_optional" => "(Required for Due Payments)",
|
||||
"customer_required" => "(Required)",
|
||||
"customer_total" => "Total",
|
||||
|
||||
@@ -1,344 +1,327 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
"address" => "Company Address",
|
||||
"address_required" => "Company address is a required field.",
|
||||
"all_set" => "All file permissions are set correctly!",
|
||||
"allow_duplicate_barcodes" => "Allow Duplicate Barcodes",
|
||||
"apostrophe" => "apostrophe",
|
||||
"backup_button" => "Backup",
|
||||
"backup_database" => "Backup Database",
|
||||
"barcode" => "Barcode",
|
||||
"barcode_company" => "Company Name",
|
||||
"barcode_configuration" => "Barcode Configuration",
|
||||
"barcode_content" => "Barcode Content",
|
||||
"barcode_first_row" => "Row 1",
|
||||
"barcode_font" => "Font",
|
||||
"barcode_formats" => "Input Formats",
|
||||
"barcode_generate_if_empty" => "Generate if empty.",
|
||||
"barcode_height" => "Height (px)",
|
||||
"barcode_id" => "Item Id/Name",
|
||||
"barcode_info" => "Barcode Configuration Information",
|
||||
"barcode_layout" => "Barcode Layout",
|
||||
"barcode_name" => "Name",
|
||||
"barcode_number" => "Barcode",
|
||||
"barcode_number_in_row" => "Number in row",
|
||||
"barcode_page_cellspacing" => "Display page cellspacing.",
|
||||
"barcode_page_width" => "Display page width",
|
||||
"barcode_price" => "Price",
|
||||
"barcode_second_row" => "Row 2",
|
||||
"barcode_third_row" => "Row 3",
|
||||
"barcode_tooltip" => "Warning: This feature can cause duplicate items to be imported or created. Do not use if you do not want duplicate barcodes.",
|
||||
"barcode_type" => "Barcode Type",
|
||||
"barcode_width" => "Width (px)",
|
||||
"bottom" => "Bottom",
|
||||
"cash_button" => "",
|
||||
"cash_button_1" => "",
|
||||
"cash_button_2" => "",
|
||||
"cash_button_3" => "",
|
||||
"cash_button_4" => "",
|
||||
"cash_button_5" => "",
|
||||
"cash_button_6" => "",
|
||||
"cash_decimals" => "Cash Decimals",
|
||||
"cash_decimals_tooltip" => "If Cash Decimals and Currency Decimals are the same then no cash triggered rounding will take place, unless Cash Rounding is set to Half Five.",
|
||||
"cash_rounding" => "Cash Rounding",
|
||||
"category_dropdown" => "Show Category as a dropdown",
|
||||
"center" => "Center",
|
||||
"change_apperance_tooltip" => "",
|
||||
"comma" => "comma",
|
||||
"company" => "Company Name",
|
||||
"company_avatar" => "",
|
||||
"company_change_image" => "Change Image",
|
||||
"company_logo" => "Company Logo",
|
||||
"company_remove_image" => "Remove Image",
|
||||
"company_required" => "Company name is a required field",
|
||||
"company_select_image" => "Select Image",
|
||||
"company_website_url" => "Company website is not a valid URL (http://...).",
|
||||
"country_codes" => "Country Codes",
|
||||
"country_codes_tooltip" => "Comma separated list of country codes for nominatim address lookup.",
|
||||
"currency_code" => "Currency Code",
|
||||
"currency_decimals" => "Currency Decimals",
|
||||
"currency_symbol" => "Currency Symbol",
|
||||
"current_employee_only" => "",
|
||||
"customer_reward" => "Reward",
|
||||
"customer_reward_duplicate" => "Reward must be unique.",
|
||||
"customer_reward_enable" => "Enable Customer Rewards",
|
||||
"customer_reward_invalid_chars" => "Reward can not contain '_'",
|
||||
"customer_reward_required" => "Reward is a required field",
|
||||
"customer_sales_tax_support" => "",
|
||||
"date_or_time_format" => "Date and Time Filter",
|
||||
"datetimeformat" => "Date and Time Format",
|
||||
"decimal_point" => "Decimal Point",
|
||||
"default_barcode_font_size_number" => "Default Barcode Font Size must be a number.",
|
||||
"default_barcode_font_size_required" => "Default Barcode Font Size is a required field.",
|
||||
"default_barcode_height_number" => "Default Barcode Height must be a number.",
|
||||
"default_barcode_height_required" => "Default Barcode Height is a required field.",
|
||||
"default_barcode_num_in_row_number" => "Default Barcode Number in Row must be a number.",
|
||||
"default_barcode_num_in_row_required" => "Default Barcode Number in Row is a required field.",
|
||||
"default_barcode_page_cellspacing_number" => "Default Barcode Page Cellspacing must be a number.",
|
||||
"default_barcode_page_cellspacing_required" => "Default Barcode Page Cellspacing is a required field.",
|
||||
"default_barcode_page_width_number" => "Default Barcode Page Width must be a number.",
|
||||
"default_barcode_page_width_required" => "Default Barcode Page Width is a required field.",
|
||||
"default_barcode_width_number" => "Default Barcode Width must be a number.",
|
||||
"default_barcode_width_required" => "Default Barcode Width is a required field.",
|
||||
"default_item_columns" => "Default Visible Item Columns",
|
||||
"default_origin_tax_code" => "Default Origin Tax Code",
|
||||
"default_receivings_discount" => "Default Receivings Discount",
|
||||
"default_receivings_discount_number" => "Default Receivings Discount must be a number.",
|
||||
"default_receivings_discount_required" => "Default Receivings Discount is a required field.",
|
||||
"default_sales_discount" => "Default Sales Discount",
|
||||
"default_sales_discount_number" => "Default Sales Discount must be a number.",
|
||||
"default_sales_discount_required" => "Default Sales Discount is a required field.",
|
||||
"default_tax_category" => "Default Tax Category",
|
||||
"default_tax_code" => "Default Tax Code",
|
||||
"default_tax_jurisdiction" => "Default Tax Jurisdiction",
|
||||
"default_tax_name_number" => "Default Tax Name must be a string.",
|
||||
"default_tax_name_required" => "Default Tax Name is a required field.",
|
||||
"default_tax_rate" => "Default Tax Rate %",
|
||||
"default_tax_rate_1" => "Tax 1 Rate",
|
||||
"default_tax_rate_2" => "Tax 2 Rate",
|
||||
"default_tax_rate_3" => "",
|
||||
"default_tax_rate_number" => "Default Tax Rate must be a number.",
|
||||
"default_tax_rate_required" => "Default Tax Rate is a required field.",
|
||||
"derive_sale_quantity" => "Allow Derived Sale Quantity",
|
||||
"derive_sale_quantity_tooltip" => "If checked then a new item type will be provided for items ordered by extended amount",
|
||||
"dinner_table" => "Table",
|
||||
"dinner_table_duplicate" => "Table must be unique.",
|
||||
"dinner_table_enable" => "Enable Dinner Tables",
|
||||
"dinner_table_invalid_chars" => "Table Name can not contain '_'.",
|
||||
"dinner_table_required" => "Table is a required field.",
|
||||
"dot" => "dot",
|
||||
"email" => "Email",
|
||||
"email_configuration" => "Email Configuration",
|
||||
"email_mailpath" => "Path to Sendmail",
|
||||
"email_protocol" => "Protocol",
|
||||
"email_receipt_check_behaviour" => "Email Receipt checkbox",
|
||||
"email_receipt_check_behaviour_always" => "Always checked",
|
||||
"email_receipt_check_behaviour_last" => "Remember last selection",
|
||||
"email_receipt_check_behaviour_never" => "Always unchecked",
|
||||
"email_smtp_crypto" => "SMTP Encryption",
|
||||
"email_smtp_host" => "SMTP Server",
|
||||
"email_smtp_pass" => "SMTP Password",
|
||||
"email_smtp_port" => "SMTP Port",
|
||||
"email_smtp_timeout" => "SMTP Timeout (s)",
|
||||
"email_smtp_user" => "SMTP Username",
|
||||
"enable_avatar" => "",
|
||||
"enable_avatar_tooltip" => "",
|
||||
"enable_dropdown_tooltip" => "",
|
||||
"enable_new_look" => "",
|
||||
"enable_right_bar" => "",
|
||||
"enable_right_bar_tooltip" => "",
|
||||
"enforce_privacy" => "Enforce privacy",
|
||||
"enforce_privacy_tooltip" => "Protect Customers privacy enforcing data scrambling in case of their data being deleted",
|
||||
"fax" => "Fax",
|
||||
"file_perm" => "There are problems with file permissions. Please fix and reload this page.",
|
||||
"financial_year" => "Fiscal Year Start",
|
||||
"financial_year_apr" => "1st of April",
|
||||
"financial_year_aug" => "1st of August",
|
||||
"financial_year_dec" => "1st of December",
|
||||
"financial_year_feb" => "1st of February",
|
||||
"financial_year_jan" => "1st of January",
|
||||
"financial_year_jul" => "1st of July",
|
||||
"financial_year_jun" => "1st of June",
|
||||
"financial_year_mar" => "1st of March",
|
||||
"financial_year_may" => "1st of May",
|
||||
"financial_year_nov" => "1st of November",
|
||||
"financial_year_oct" => "1st of October",
|
||||
"financial_year_sep" => "1st of September",
|
||||
"floating_labels" => "Floating Labels",
|
||||
"gcaptcha_enable" => "Login Page reCAPTCHA",
|
||||
"gcaptcha_secret_key" => "reCAPTCHA Secret Key",
|
||||
"gcaptcha_secret_key_required" => "reCAPTCHA Secret Key is a required field",
|
||||
"gcaptcha_site_key" => "reCAPTCHA Site Key",
|
||||
"gcaptcha_site_key_required" => "reCAPTCHA Site Key is a required field",
|
||||
"gcaptcha_tooltip" => "Protect the Login page with Google reCAPTCHA, click the icon for an API key pair.",
|
||||
"general" => "General",
|
||||
"general_configuration" => "General Configuration",
|
||||
"giftcard_number" => "Gift Card Number",
|
||||
"giftcard_random" => "Generate Random",
|
||||
"giftcard_series" => "Generate in Series",
|
||||
"image_allowed_file_types" => "Allowed file types",
|
||||
"image_max_height_tooltip" => "Maximum allowed height of image uploads in pixels (px).",
|
||||
"image_max_size_tooltip" => "Maximum allowed file size of image uploads in kilobytes (kb).",
|
||||
"image_max_width_tooltip" => "Maximum allowed width of image uploads in pixels (px).",
|
||||
"image_restrictions" => "Image Upload Restrictions",
|
||||
"include_hsn" => "Include Support for HSN Codes",
|
||||
"info" => "Information",
|
||||
"info_configuration" => "Store Information",
|
||||
"input_groups" => "Input Groups",
|
||||
"integrations" => "Integrations",
|
||||
"integrations_configuration" => "Third Party Integrations",
|
||||
"invoice" => "Invoice",
|
||||
"invoice_configuration" => "Invoice Print Settings",
|
||||
"invoice_default_comments" => "Default Invoice Comments",
|
||||
"invoice_email_message" => "Invoice Email Template",
|
||||
"invoice_enable" => "Enable Invoicing",
|
||||
"invoice_printer" => "Invoice Printer",
|
||||
"invoice_type" => "Invoice Type",
|
||||
"is_readable" => "is readable, but the permissions are incorrectly set. Please set it to 640 or 660 and refresh.",
|
||||
"is_writable" => "is writable, but the permissions are incorrectly set. Please set it to 750 and refresh.",
|
||||
"item_markup" => "",
|
||||
"jsprintsetup_required" => "Warning: This functionality will only work if you have the FireFox jsPrintSetup addon installed. Save anyway?",
|
||||
"language" => "Language",
|
||||
"last_used_invoice_number" => "Last used Invoice Number",
|
||||
"last_used_quote_number" => "Last used Quote Number",
|
||||
"last_used_work_order_number" => "Last used W/O Number",
|
||||
"left" => "Left",
|
||||
"license" => "License",
|
||||
"license_configuration" => "License Statement",
|
||||
"line_sequence" => "Line Sequence",
|
||||
"lines_per_page" => "Lines per Page",
|
||||
"lines_per_page_number" => "Lines per Page must be a number.",
|
||||
"lines_per_page_required" => "Lines per Page is a required field.",
|
||||
"locale" => "Localization",
|
||||
"locale_configuration" => "Localization Configuration",
|
||||
"locale_info" => "Localization Configuration Information",
|
||||
"location" => "Stock",
|
||||
"location_configuration" => "Stock Locations",
|
||||
"location_info" => "Location Configuration Information",
|
||||
"login_form" => "Login Form Style",
|
||||
"logout" => "Do you want to make a backup before logging out? Click [OK] to backup or [Cancel] to logout.",
|
||||
"mailchimp" => "MailChimp",
|
||||
"mailchimp_api_key" => "MailChimp API Key",
|
||||
"mailchimp_configuration" => "MailChimp Configuration",
|
||||
"mailchimp_key_successfully" => "API Key is valid.",
|
||||
"mailchimp_key_unsuccessfully" => "API Key is invalid.",
|
||||
"mailchimp_lists" => "MailChimp List(s)",
|
||||
"mailchimp_tooltip" => "Click the icon for an API Key.",
|
||||
"message" => "Message",
|
||||
"message_configuration" => "Message Configuration",
|
||||
"msg_msg" => "Saved Text Message",
|
||||
"msg_msg_placeholder" => "If you wish to use a SMS template save your message here, otherwise leave the box blank.",
|
||||
"msg_pwd" => "SMS-API Password",
|
||||
"msg_pwd_required" => "SMS-API Password is a required field",
|
||||
"msg_src" => "SMS-API Sender ID",
|
||||
"msg_src_required" => "SMS-API Sender ID is a required field",
|
||||
"msg_uid" => "SMS-API Username",
|
||||
"msg_uid_required" => "SMS-API Username is a required field",
|
||||
"multi_pack_enabled" => "Multiple Packages per Item",
|
||||
"no_risk" => "No security/vulnerability risks.",
|
||||
"none" => "none",
|
||||
"notify_alignment" => "Notification Popup Position",
|
||||
"number_format" => "Number Format",
|
||||
"number_locale" => "Localization",
|
||||
"number_locale_invalid" => "The entered locale is invalid. Check the link in the tooltip to find a valid locale.",
|
||||
"number_locale_required" => "Number Locale is a required field.",
|
||||
"number_locale_tooltip" => "Find a suitable locale through this link.",
|
||||
"os_timezone" => "OSPOS Timezone:",
|
||||
"ospos_info" => "OSPOS Installation Info",
|
||||
"payment_options_order" => "Payment Options Order",
|
||||
"perm_risk" => "Incorrect permissions leaves this software at risk.",
|
||||
"phone" => "Company Phone",
|
||||
"phone_required" => "Company Phone is a required field.",
|
||||
"print_bottom_margin" => "Margin Bottom",
|
||||
"print_bottom_margin_number" => "Margin Bottom must be a number.",
|
||||
"print_bottom_margin_required" => "Margin Bottom is a required field.",
|
||||
"print_delay_autoreturn" => "Autoreturn to Sale delay",
|
||||
"print_delay_autoreturn_number" => "Autoreturn to Sale delay is a required field.",
|
||||
"print_delay_autoreturn_required" => "Autoreturn to Sale delay must be a number.",
|
||||
"print_footer" => "Print Browser Footer",
|
||||
"print_header" => "Print Browser Header",
|
||||
"print_left_margin" => "Margin Left",
|
||||
"print_left_margin_number" => "Margin Left must be a number.",
|
||||
"print_left_margin_required" => "Margin Left is a required field.",
|
||||
"print_receipt_check_behaviour" => "Print Receipt checkbox",
|
||||
"print_receipt_check_behaviour_always" => "Always checked",
|
||||
"print_receipt_check_behaviour_last" => "Remember last selection",
|
||||
"print_receipt_check_behaviour_never" => "Always unchecked",
|
||||
"print_right_margin" => "Margin Right",
|
||||
"print_right_margin_number" => "Margin Right must be a number.",
|
||||
"print_right_margin_required" => "Margin Right is a required field.",
|
||||
"print_silently" => "Show Print Dialog",
|
||||
"print_top_margin" => "Margin Top",
|
||||
"print_top_margin_number" => "Margin Top must be a number.",
|
||||
"print_top_margin_required" => "Margin Top is a required field.",
|
||||
"quantity_decimals" => "Quantity Decimals",
|
||||
"quick_cash_enable" => "",
|
||||
"quote_default_comments" => "Default Quote Comments",
|
||||
"receipt" => "Receipt",
|
||||
"receipt_category" => "",
|
||||
"receipt_configuration" => "Receipt Print Settings",
|
||||
"receipt_default" => "Default",
|
||||
"receipt_font_size" => "Font Size",
|
||||
"receipt_font_size_number" => "Font Size must be a number.",
|
||||
"receipt_font_size_required" => "Font Size is a required field.",
|
||||
"receipt_info" => "Receipt Configuration Information",
|
||||
"receipt_printer" => "Ticket Printer",
|
||||
"receipt_short" => "Short",
|
||||
<?php
|
||||
|
||||
return [
|
||||
"address" => "Company Address",
|
||||
"address_required" => "Company address is a required field.",
|
||||
"all_set" => "All file permissions are set correctly!",
|
||||
"allow_duplicate_barcodes" => "Allow Duplicate Barcodes",
|
||||
"apostrophe" => "apostrophe",
|
||||
"backup_button" => "Backup",
|
||||
"backup_database" => "Backup Database",
|
||||
"barcode" => "Barcode",
|
||||
"barcode_company" => "Company Name",
|
||||
"barcode_configuration" => "Barcode Configuration",
|
||||
"barcode_content" => "Barcode Content",
|
||||
"barcode_first_row" => "Row 1",
|
||||
"barcode_font" => "Font",
|
||||
"barcode_formats" => "Input Formats",
|
||||
"barcode_generate_if_empty" => "Generate if empty.",
|
||||
"barcode_height" => "Height (px)",
|
||||
"barcode_id" => "Item Id/Name",
|
||||
"barcode_info" => "Barcode Configuration Information",
|
||||
"barcode_layout" => "Barcode Layout",
|
||||
"barcode_name" => "Name",
|
||||
"barcode_number" => "Barcode",
|
||||
"barcode_number_in_row" => "Number in row",
|
||||
"barcode_page_cellspacing" => "Display page cellspacing.",
|
||||
"barcode_page_width" => "Display page width",
|
||||
"barcode_price" => "Price",
|
||||
"barcode_second_row" => "Row 2",
|
||||
"barcode_third_row" => "Row 3",
|
||||
"barcode_tooltip" => "Warning: This feature can cause duplicate items to be imported or created. Do not use if you do not want duplicate barcodes.",
|
||||
"barcode_type" => "Barcode Type",
|
||||
"barcode_width" => "Width (px)",
|
||||
"bottom" => "Bottom",
|
||||
"cash_button" => "",
|
||||
"cash_button_1" => "",
|
||||
"cash_button_2" => "",
|
||||
"cash_button_3" => "",
|
||||
"cash_button_4" => "",
|
||||
"cash_button_5" => "",
|
||||
"cash_button_6" => "",
|
||||
"cash_decimals" => "Cash Decimals",
|
||||
"cash_decimals_tooltip" => "If Cash Decimals and Currency Decimals are the same then no cash triggered rounding will take place, unless Cash Rounding is set to Half Five.",
|
||||
"cash_rounding" => "Cash Rounding",
|
||||
"category_dropdown" => "Show Category as a dropdown",
|
||||
"center" => "Center",
|
||||
"change_apperance_tooltip" => "",
|
||||
"comma" => "comma",
|
||||
"company" => "Company Name",
|
||||
"company_avatar" => "",
|
||||
"company_change_image" => "Change Image",
|
||||
"company_logo" => "Company Logo",
|
||||
"company_remove_image" => "Remove Image",
|
||||
"company_required" => "Company name is a required field",
|
||||
"company_select_image" => "Select Image",
|
||||
"company_website_url" => "Company website is not a valid URL (http://...).",
|
||||
"country_codes" => "Country Codes",
|
||||
"country_codes_tooltip" => "Comma separated list of country codes for nominatim address lookup.",
|
||||
"currency_code" => "Currency Code",
|
||||
"currency_decimals" => "Currency Decimals",
|
||||
"currency_symbol" => "Currency Symbol",
|
||||
"current_employee_only" => "",
|
||||
"customer_reward" => "Reward",
|
||||
"customer_reward_duplicate" => "Reward must be unique.",
|
||||
"customer_reward_enable" => "Enable Customer Rewards",
|
||||
"customer_reward_invalid_chars" => "Reward can not contain '_'",
|
||||
"customer_reward_required" => "Reward is a required field",
|
||||
"customer_sales_tax_support" => "",
|
||||
"date_or_time_format" => "Date and Time Filter",
|
||||
"datetimeformat" => "Date and Time Format",
|
||||
"decimal_point" => "Decimal Point",
|
||||
"default_barcode_font_size_number" => "Default Barcode Font Size must be a number.",
|
||||
"default_barcode_font_size_required" => "Default Barcode Font Size is a required field.",
|
||||
"default_barcode_height_number" => "Default Barcode Height must be a number.",
|
||||
"default_barcode_height_required" => "Default Barcode Height is a required field.",
|
||||
"default_barcode_num_in_row_number" => "Default Barcode Number in Row must be a number.",
|
||||
"default_barcode_num_in_row_required" => "Default Barcode Number in Row is a required field.",
|
||||
"default_barcode_page_cellspacing_number" => "Default Barcode Page Cellspacing must be a number.",
|
||||
"default_barcode_page_cellspacing_required" => "Default Barcode Page Cellspacing is a required field.",
|
||||
"default_barcode_page_width_number" => "Default Barcode Page Width must be a number.",
|
||||
"default_barcode_page_width_required" => "Default Barcode Page Width is a required field.",
|
||||
"default_barcode_width_number" => "Default Barcode Width must be a number.",
|
||||
"default_barcode_width_required" => "Default Barcode Width is a required field.",
|
||||
"default_item_columns" => "Default Visible Item Columns",
|
||||
"default_origin_tax_code" => "Default Origin Tax Code",
|
||||
"default_receivings_discount" => "Default Receivings Discount",
|
||||
"default_receivings_discount_number" => "Default Receivings Discount must be a number.",
|
||||
"default_receivings_discount_required" => "Default Receivings Discount is a required field.",
|
||||
"default_sales_discount" => "Default Sales Discount",
|
||||
"default_sales_discount_number" => "Default Sales Discount must be a number.",
|
||||
"default_sales_discount_required" => "Default Sales Discount is a required field.",
|
||||
"default_tax_category" => "Default Tax Category",
|
||||
"default_tax_code" => "Default Tax Code",
|
||||
"default_tax_jurisdiction" => "Default Tax Jurisdiction",
|
||||
"default_tax_name_number" => "Default Tax Name must be a string.",
|
||||
"default_tax_name_required" => "Default Tax Name is a required field.",
|
||||
"default_tax_rate" => "Default Tax Rate %",
|
||||
"default_tax_rate_1" => "Tax 1 Rate",
|
||||
"default_tax_rate_2" => "Tax 2 Rate",
|
||||
"default_tax_rate_3" => "",
|
||||
"default_tax_rate_number" => "Default Tax Rate must be a number.",
|
||||
"default_tax_rate_required" => "Default Tax Rate is a required field.",
|
||||
"derive_sale_quantity" => "Allow Derived Sale Quantity",
|
||||
"derive_sale_quantity_tooltip" => "If checked then a new item type will be provided for items ordered by extended amount",
|
||||
"dinner_table" => "Table",
|
||||
"dinner_table_duplicate" => "Table must be unique.",
|
||||
"dinner_table_enable" => "Enable Dinner Tables",
|
||||
"dinner_table_invalid_chars" => "Table Name can not contain '_'.",
|
||||
"dinner_table_required" => "Table is a required field.",
|
||||
"dot" => "dot",
|
||||
"email" => "Email",
|
||||
"email_configuration" => "Email Configuration",
|
||||
"email_mailpath" => "Path to Sendmail",
|
||||
"email_protocol" => "Protocol",
|
||||
"email_receipt_check_behaviour" => "Email Receipt checkbox",
|
||||
"email_receipt_check_behaviour_always" => "Always checked",
|
||||
"email_receipt_check_behaviour_last" => "Remember last selection",
|
||||
"email_receipt_check_behaviour_never" => "Always unchecked",
|
||||
"email_smtp_crypto" => "SMTP Encryption",
|
||||
"email_smtp_host" => "SMTP Server",
|
||||
"email_smtp_pass" => "SMTP Password",
|
||||
"email_smtp_port" => "SMTP Port",
|
||||
"email_smtp_timeout" => "SMTP Timeout (s)",
|
||||
"email_smtp_user" => "SMTP Username",
|
||||
"enable_avatar" => "",
|
||||
"enable_avatar_tooltip" => "",
|
||||
"enable_dropdown_tooltip" => "",
|
||||
"enable_new_look" => "",
|
||||
"enable_right_bar" => "",
|
||||
"enable_right_bar_tooltip" => "",
|
||||
"enforce_privacy" => "Enforce privacy",
|
||||
"enforce_privacy_tooltip" => "Protect Customers privacy enforcing data scrambling in case of their data being deleted",
|
||||
"fax" => "Fax",
|
||||
"file_perm" => "There are problems with file permissions. Please fix and reload this page.",
|
||||
"financial_year" => "Fiscal Year Start",
|
||||
"financial_year_apr" => "1st of April",
|
||||
"financial_year_aug" => "1st of August",
|
||||
"financial_year_dec" => "1st of December",
|
||||
"financial_year_feb" => "1st of February",
|
||||
"financial_year_jan" => "1st of January",
|
||||
"financial_year_jul" => "1st of July",
|
||||
"financial_year_jun" => "1st of June",
|
||||
"financial_year_mar" => "1st of March",
|
||||
"financial_year_may" => "1st of May",
|
||||
"financial_year_nov" => "1st of November",
|
||||
"financial_year_oct" => "1st of October",
|
||||
"financial_year_sep" => "1st of September",
|
||||
"floating_labels" => "Floating Labels",
|
||||
"gcaptcha_enable" => "Login Page reCAPTCHA",
|
||||
"gcaptcha_secret_key" => "reCAPTCHA Secret Key",
|
||||
"gcaptcha_secret_key_required" => "reCAPTCHA Secret Key is a required field",
|
||||
"gcaptcha_site_key" => "reCAPTCHA Site Key",
|
||||
"gcaptcha_site_key_required" => "reCAPTCHA Site Key is a required field",
|
||||
"gcaptcha_tooltip" => "Protect the Login page with Google reCAPTCHA, click the icon for an API key pair.",
|
||||
"general" => "General",
|
||||
"general_configuration" => "General Configuration",
|
||||
"giftcard_number" => "Gift Card Number",
|
||||
"giftcard_random" => "Generate Random",
|
||||
"giftcard_series" => "Generate in Series",
|
||||
"image_allowed_file_types" => "Allowed file types",
|
||||
"image_max_height_tooltip" => "Maximum allowed height of image uploads in pixels (px).",
|
||||
"image_max_size_tooltip" => "Maximum allowed file size of image uploads in kilobytes (kb).",
|
||||
"image_max_width_tooltip" => "Maximum allowed width of image uploads in pixels (px).",
|
||||
"image_restrictions" => "Image Upload Restrictions",
|
||||
"include_hsn" => "Include Support for HSN Codes",
|
||||
"info" => "Information",
|
||||
"info_configuration" => "Store Information",
|
||||
"input_groups" => "Input Groups",
|
||||
"invoice" => "Invoice",
|
||||
"invoice_configuration" => "Invoice Print Settings",
|
||||
"invoice_default_comments" => "Default Invoice Comments",
|
||||
"invoice_email_message" => "Invoice Email Template",
|
||||
"invoice_enable" => "Enable Invoicing",
|
||||
"invoice_printer" => "Invoice Printer",
|
||||
"invoice_type" => "Invoice Type",
|
||||
"is_readable" => "is readable, but the permissions are incorrectly set. Please set it to 640 or 660 and refresh.",
|
||||
"is_writable" => "is writable, but the permissions are incorrectly set. Please set it to 750 and refresh.",
|
||||
"item_markup" => "",
|
||||
"jsprintsetup_required" => "Warning: This functionality will only work if you have the FireFox jsPrintSetup addon installed. Save anyway?",
|
||||
"language" => "Language",
|
||||
"last_used_invoice_number" => "Last used Invoice Number",
|
||||
"last_used_quote_number" => "Last used Quote Number",
|
||||
"last_used_work_order_number" => "Last used W/O Number",
|
||||
"left" => "Left",
|
||||
"license" => "License",
|
||||
"license_configuration" => "License Statement",
|
||||
"line_sequence" => "Line Sequence",
|
||||
"lines_per_page" => "Lines per Page",
|
||||
"lines_per_page_number" => "Lines per Page must be a number.",
|
||||
"lines_per_page_required" => "Lines per Page is a required field.",
|
||||
"locale" => "Localization",
|
||||
"locale_configuration" => "Localization Configuration",
|
||||
"locale_info" => "Localization Configuration Information",
|
||||
"location" => "Stock",
|
||||
"location_configuration" => "Stock Locations",
|
||||
"location_info" => "Location Configuration Information",
|
||||
"login_form" => "Login Form Style",
|
||||
"logout" => "Do you want to make a backup before logging out? Click [OK] to backup or [Cancel] to logout.",
|
||||
"message" => "Message",
|
||||
"message_configuration" => "Message Configuration",
|
||||
"msg_msg" => "Saved Text Message",
|
||||
"msg_msg_placeholder" => "If you wish to use a SMS template save your message here, otherwise leave the box blank.",
|
||||
"msg_pwd" => "SMS-API Password",
|
||||
"msg_pwd_required" => "SMS-API Password is a required field",
|
||||
"msg_src" => "SMS-API Sender ID",
|
||||
"msg_src_required" => "SMS-API Sender ID is a required field",
|
||||
"msg_uid" => "SMS-API Username",
|
||||
"msg_uid_required" => "SMS-API Username is a required field",
|
||||
"multi_pack_enabled" => "Multiple Packages per Item",
|
||||
"no_risk" => "No security/vulnerability risks.",
|
||||
"none" => "none",
|
||||
"notify_alignment" => "Notification Popup Position",
|
||||
"number_format" => "Number Format",
|
||||
"number_locale" => "Localization",
|
||||
"number_locale_invalid" => "The entered locale is invalid. Check the link in the tooltip to find a valid locale.",
|
||||
"number_locale_required" => "Number Locale is a required field.",
|
||||
"number_locale_tooltip" => "Find a suitable locale through this link.",
|
||||
"os_timezone" => "OSPOS Timezone:",
|
||||
"ospos_info" => "OSPOS Installation Info",
|
||||
"payment_options_order" => "Payment Options Order",
|
||||
"perm_risk" => "Incorrect permissions leaves this software at risk.",
|
||||
"phone" => "Company Phone",
|
||||
"phone_required" => "Company Phone is a required field.",
|
||||
"print_bottom_margin" => "Margin Bottom",
|
||||
"print_bottom_margin_number" => "Margin Bottom must be a number.",
|
||||
"print_bottom_margin_required" => "Margin Bottom is a required field.",
|
||||
"print_delay_autoreturn" => "Autoreturn to Sale delay",
|
||||
"print_delay_autoreturn_number" => "Autoreturn to Sale delay is a required field.",
|
||||
"print_delay_autoreturn_required" => "Autoreturn to Sale delay must be a number.",
|
||||
"print_footer" => "Print Browser Footer",
|
||||
"print_header" => "Print Browser Header",
|
||||
"print_left_margin" => "Margin Left",
|
||||
"print_left_margin_number" => "Margin Left must be a number.",
|
||||
"print_left_margin_required" => "Margin Left is a required field.",
|
||||
"print_receipt_check_behaviour" => "Print Receipt checkbox",
|
||||
"print_receipt_check_behaviour_always" => "Always checked",
|
||||
"print_receipt_check_behaviour_last" => "Remember last selection",
|
||||
"print_receipt_check_behaviour_never" => "Always unchecked",
|
||||
"print_right_margin" => "Margin Right",
|
||||
"print_right_margin_number" => "Margin Right must be a number.",
|
||||
"print_right_margin_required" => "Margin Right is a required field.",
|
||||
"print_silently" => "Show Print Dialog",
|
||||
"print_top_margin" => "Margin Top",
|
||||
"print_top_margin_number" => "Margin Top must be a number.",
|
||||
"print_top_margin_required" => "Margin Top is a required field.",
|
||||
"quantity_decimals" => "Quantity Decimals",
|
||||
"quick_cash_enable" => "",
|
||||
"quote_default_comments" => "Default Quote Comments",
|
||||
"receipt" => "Receipt",
|
||||
"receipt_category" => "",
|
||||
"receipt_configuration" => "Receipt Print Settings",
|
||||
"receipt_default" => "Default",
|
||||
"receipt_font_size" => "Font Size",
|
||||
"receipt_font_size_number" => "Font Size must be a number.",
|
||||
"receipt_font_size_required" => "Font Size is a required field.",
|
||||
"receipt_info" => "Receipt Configuration Information",
|
||||
"receipt_printer" => "Ticket Printer",
|
||||
"receipt_short" => "Short",
|
||||
"receipt_show_company_name" => "Show Company Name",
|
||||
"receipt_show_description" => "Show Description",
|
||||
"receipt_show_serialnumber" => "Show Serial Number",
|
||||
"receipt_show_secondary_currency" => "Show Secondary Currency",
|
||||
"receipt_show_tax_ind" => "Show Tax Indicator",
|
||||
"receipt_show_taxes" => "Show Taxes",
|
||||
"receipt_show_total_discount" => "Show Total Discount",
|
||||
"receipt_template" => "Receipt Template",
|
||||
"secondary_currency" => "Secondary Currency",
|
||||
"secondary_currency_decimals" => "Secondary Currency Decimals",
|
||||
"secondary_currency_code" => "Secondary Currency Code",
|
||||
"secondary_currency_enable" => "Enable Secondary Currency",
|
||||
"secondary_currency_enable_tooltip" => "Show secondary currency fields and print/display values across the app.",
|
||||
"secondary_currency_rate" => "Secondary Currency Rate",
|
||||
"secondary_currency_settings" => "Secondary Currency Settings",
|
||||
"secondary_currency_symbol" => "Secondary Currency Symbol",
|
||||
"receiving_calculate_average_price" => "Calc avg. Price (Receiving)",
|
||||
"recv_invoice_format" => "Receivings Invoice Format",
|
||||
"register_mode_default" => "Default Register Mode",
|
||||
"report_an_issue" => "Report an issue",
|
||||
"return_policy_required" => "Return policy is a required field.",
|
||||
"reward" => "Reward",
|
||||
"reward_configuration" => "Reward Configuration",
|
||||
"right" => "Right",
|
||||
"sales_invoice_format" => "Sales Invoice Format",
|
||||
"sales_quote_format" => "Sales Quote Format",
|
||||
"mailpath_invalid" => "Invalid sendmail path. Only letters, numbers, dashes, underscores, slashes and dots are allowed.",
|
||||
"saved_successfully" => "Configuration save successful.",
|
||||
"saved_unsuccessfully" => "Configuration save failed.",
|
||||
"security_issue" => "Security Vulnerability Warning",
|
||||
"recv_invoice_format" => "Receivings Invoice Format",
|
||||
"register_mode_default" => "Default Register Mode",
|
||||
"report_an_issue" => "Report an issue",
|
||||
"return_policy_required" => "Return policy is a required field.",
|
||||
"reward" => "Reward",
|
||||
"reward_configuration" => "Reward Configuration",
|
||||
"right" => "Right",
|
||||
"sales_invoice_format" => "Sales Invoice Format",
|
||||
"sales_quote_format" => "Sales Quote Format",
|
||||
"mailpath_invalid" => "Invalid sendmail path. Only letters, numbers, dashes, underscores, slashes and dots are allowed.",
|
||||
"saved_successfully" => "Configuration save successful.",
|
||||
"saved_unsuccessfully" => "Configuration save failed.",
|
||||
"security_issue" => "Security Vulnerability Warning",
|
||||
"server_notice" => "Please use the below info for issue reporting.",
|
||||
"service_charge" => "",
|
||||
"customer_display" => "Customer Display",
|
||||
"show_due_enable" => "",
|
||||
"show_office_group" => "Show office icon",
|
||||
"statistics" => "Send Statistics",
|
||||
"statistics_tooltip" => "Send statistics for development and feature improvement purposes.",
|
||||
"stock_location" => "Stock location",
|
||||
"stock_location_duplicate" => "Stock Location must be unique.",
|
||||
"stock_location_invalid_chars" => "Stock Location can not contain '_'.",
|
||||
"stock_location_required" => "Stock location is a required field.",
|
||||
"suggestions_fifth_column" => "",
|
||||
"suggestions_first_column" => "Column 1",
|
||||
"suggestions_fourth_column" => "",
|
||||
"suggestions_layout" => "Search Suggestions Layout",
|
||||
"suggestions_second_column" => "Column 2",
|
||||
"suggestions_third_column" => "Column 3",
|
||||
"system_conf" => "Setup & Conf",
|
||||
"system_info" => "System Info",
|
||||
"table" => "Table",
|
||||
"table_configuration" => "Table Configuration",
|
||||
"takings_printer" => "Receipt Printer",
|
||||
"tax" => "Tax",
|
||||
"tax_category" => "Tax Category",
|
||||
"tax_category_duplicate" => "The entered tax category already exists.",
|
||||
"tax_category_invalid_chars" => "The entered tax category is invalid.",
|
||||
"tax_category_required" => "The tax category is required.",
|
||||
"tax_category_used" => "Tax category cannot be deleted because it is being used.",
|
||||
"tax_configuration" => "Tax Configuration",
|
||||
"tax_decimals" => "Tax Decimals",
|
||||
"tax_id" => "Tax Id",
|
||||
"tax_included" => "Tax Included",
|
||||
"theme" => "Theme",
|
||||
"theme_preview" => "Preview Theme:",
|
||||
"thousands_separator" => "Thousands Separator",
|
||||
"timezone" => "Timezone",
|
||||
"timezone_error" => "OSPOS Timezone is Different from your Local Timezone.",
|
||||
"top" => "Top",
|
||||
"use_destination_based_tax" => "Use Destination Based Tax",
|
||||
"user_timezone" => "Local Timezone:",
|
||||
"website" => "Website",
|
||||
"wholesale_markup" => "",
|
||||
"work_order_enable" => "Work Order Support",
|
||||
"work_order_format" => "Work Order Format",
|
||||
];
|
||||
|
||||
|
||||
"show_office_group" => "Show office icon",
|
||||
"statistics" => "Send Statistics",
|
||||
"statistics_tooltip" => "Send statistics for development and feature improvement purposes.",
|
||||
"stock_location" => "Stock location",
|
||||
"stock_location_duplicate" => "Stock Location must be unique.",
|
||||
"stock_location_invalid_chars" => "Stock Location can not contain '_'.",
|
||||
"stock_location_required" => "Stock location is a required field.",
|
||||
"suggestions_fifth_column" => "",
|
||||
"suggestions_first_column" => "Column 1",
|
||||
"suggestions_fourth_column" => "",
|
||||
"suggestions_layout" => "Search Suggestions Layout",
|
||||
"suggestions_second_column" => "Column 2",
|
||||
"suggestions_third_column" => "Column 3",
|
||||
"shortcuts" => "Shortcuts",
|
||||
"shortcuts_configuration" => "Sales Keyboard Shortcut Configuration",
|
||||
"shortcuts_duplicate_bindings" => "Shortcut bindings must be unique.",
|
||||
"shortcuts_save_error" => "Unable to save shortcut settings.",
|
||||
"system_conf" => "Setup & Conf",
|
||||
"system_info" => "System Info",
|
||||
"table" => "Table",
|
||||
"table_configuration" => "Table Configuration",
|
||||
"takings_printer" => "Receipt Printer",
|
||||
"tax" => "Tax",
|
||||
"tax_category" => "Tax Category",
|
||||
"tax_category_duplicate" => "The entered tax category already exists.",
|
||||
"tax_category_invalid_chars" => "The entered tax category is invalid.",
|
||||
"tax_category_required" => "The tax category is required.",
|
||||
"tax_category_used" => "Tax category cannot be deleted because it is being used.",
|
||||
"tax_configuration" => "Tax Configuration",
|
||||
"tax_decimals" => "Tax Decimals",
|
||||
"tax_id" => "Tax Id",
|
||||
"tax_included" => "Tax Included",
|
||||
"theme" => "Theme",
|
||||
"theme_preview" => "Preview Theme:",
|
||||
"thousands_separator" => "Thousands Separator",
|
||||
"timezone" => "Timezone",
|
||||
"timezone_error" => "OSPOS Timezone is Different from your Local Timezone.",
|
||||
"top" => "Top",
|
||||
"use_destination_based_tax" => "Use Destination Based Tax",
|
||||
"user_timezone" => "Local Timezone:",
|
||||
"website" => "Website",
|
||||
"wholesale_markup" => "",
|
||||
"work_order_enable" => "Work Order Support",
|
||||
"work_order_format" => "Work Order Format",
|
||||
];
|
||||
|
||||
@@ -28,16 +28,6 @@ return [
|
||||
"employee" => "Employee",
|
||||
"error_adding_updating" => "Customer add or update failed.",
|
||||
"import_items_csv" => "Customer Import from CSV",
|
||||
"mailchimp_activity_click" => "Email click",
|
||||
"mailchimp_activity_lastopen" => "Last open email",
|
||||
"mailchimp_activity_open" => "Email open",
|
||||
"mailchimp_activity_total" => "Email sent",
|
||||
"mailchimp_activity_unopen" => "Email unopen",
|
||||
"mailchimp_email_client" => "Email client",
|
||||
"mailchimp_info" => "MailChimp",
|
||||
"mailchimp_member_rating" => "Rating",
|
||||
"mailchimp_status" => "Status",
|
||||
"mailchimp_vip" => "VIP",
|
||||
"max" => "Max. spent",
|
||||
"min" => "Min. spent",
|
||||
"new" => "New Customer",
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
"migrate_desc" => "Update the OSPOS Database.",
|
||||
"office" => "Office",
|
||||
"office_desc" => "List office menu modules.",
|
||||
'plugins' => 'Plugins',
|
||||
"receivings" => "Receivings",
|
||||
"receivings_desc" => "Process Purchase Orders.",
|
||||
"reports" => "Reports",
|
||||
|
||||
27
app/Language/en/Plugins.php
Normal file
27
app/Language/en/Plugins.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
return [
|
||||
'actions' => 'Actions',
|
||||
'active' => 'Active',
|
||||
'configure' => 'Configure',
|
||||
'description' => 'Description',
|
||||
'disable' => 'Disable',
|
||||
'disable_failed' => 'Failed to disable plugin',
|
||||
'disabled' => 'Plugin disabled successfully',
|
||||
'enable' => 'Enable',
|
||||
'enable_failed' => 'Failed to enable plugin',
|
||||
'enabled' => 'Plugin enabled successfully',
|
||||
'inactive' => 'Inactive',
|
||||
'management' => 'Plugin Management',
|
||||
'name' => 'Plugin Name',
|
||||
'no_config' => 'This plugin has no configuration options',
|
||||
'no_plugins_to_display' => 'No Plugins to display',
|
||||
'not_found' => 'Plugin not found',
|
||||
'plugins' => 'Plugins',
|
||||
'settings_save_failed' => 'Failed to save plugin settings',
|
||||
'settings_saved' => 'Plugin settings saved successfully',
|
||||
'status' => 'Status',
|
||||
'uninstall' => 'Uninstall',
|
||||
'uninstall_failed' => 'Failed to uninstall plugin',
|
||||
'uninstalled' => 'Plugin uninstalled successfully',
|
||||
'version' => 'Version',
|
||||
];
|
||||
@@ -7,9 +7,9 @@ return [
|
||||
"account_number" => "Account #",
|
||||
"add_payment" => "Add Payment",
|
||||
"amount_due" => "Amount Due",
|
||||
"amount_due_lbp" => "Amount Due LBP",
|
||||
"amount_tendered" => "Amount Tendered",
|
||||
"authorized_signature" => "Authorized Signature",
|
||||
"bank_transfer" => "Bank Transfer",
|
||||
"cancel_sale" => "Cancel",
|
||||
"cash" => "Cash",
|
||||
"cash_1" => "",
|
||||
@@ -20,8 +20,6 @@ return [
|
||||
"cash_deposit" => "Cash Deposit",
|
||||
"cash_filter" => "Cash",
|
||||
"change_due" => "Change Due",
|
||||
"change" => "Change",
|
||||
"currency_rate" => "Currency Rate",
|
||||
"change_price" => "Change Selling Price",
|
||||
"check" => "Check",
|
||||
"check_balance" => "Check remainder",
|
||||
@@ -43,9 +41,7 @@ return [
|
||||
"customer_address" => "Address",
|
||||
"customer_discount" => "Discount",
|
||||
"customer_email" => "Email",
|
||||
"customer_name" => "Customer Name",
|
||||
"customer_location" => "Location",
|
||||
"customer_mailchimp_status" => "MailChimp Status",
|
||||
"customer_optional" => "(Required for Due Payments)",
|
||||
"customer_required" => "(Required)",
|
||||
"customer_total" => "Total",
|
||||
@@ -77,6 +73,12 @@ return [
|
||||
"employee" => "Employee",
|
||||
"entry" => "Entry",
|
||||
"error_editing_item" => "Error editing item",
|
||||
"negative_price_invalid" => "Price cannot be negative.",
|
||||
"negative_quantity_invalid" => "Quantity cannot be negative.",
|
||||
"negative_discount_invalid" => "Discount cannot be negative.",
|
||||
"discount_percent_exceeds_100" => "Percentage discount cannot exceed 100%.",
|
||||
"discount_exceeds_item_total" => "Discount cannot exceed the item total.",
|
||||
"negative_total_invalid" => "Sale total cannot be negative. Check item discounts and quantities.",
|
||||
"find_or_scan_item" => "Find or Scan Item",
|
||||
"find_or_scan_item_or_receipt" => "Find or Scan Item or Receipt",
|
||||
"giftcard" => "Gift Card",
|
||||
@@ -107,7 +109,6 @@ return [
|
||||
"item_name" => "Item Name",
|
||||
"item_number" => "Item #",
|
||||
"item_out_of_stock" => "Item is out of stock.",
|
||||
"items" => "Items",
|
||||
"key_browser" => "Helpful Shortcuts",
|
||||
"key_cancel" => "Cancels Current Quote/Invoice/Sale",
|
||||
"key_customer_search" => "Customer Search",
|
||||
@@ -149,9 +150,7 @@ return [
|
||||
"payment_type" => "Type",
|
||||
"payments" => "",
|
||||
"payments_total" => "Payments Total",
|
||||
"loyalty_reward_points" => "Loyalty Reward Points",
|
||||
"price" => "Price",
|
||||
"price_with_currency" => "Price (%s)",
|
||||
"print_after_sale" => "Print after Sale",
|
||||
"quantity" => "Quantity",
|
||||
"quantity_less_than_reorder_level" => "Warning: Desired Quantity is below Reorder Level for that Item.",
|
||||
@@ -167,13 +166,10 @@ return [
|
||||
"receipt_number" => "Sale #",
|
||||
"receipt_sent" => "Receipt sent to",
|
||||
"receipt_unsent" => "Receipt failed to be sent to",
|
||||
"rate" => "Rate",
|
||||
"refund" => "Refund Type",
|
||||
"register" => "Sales Register",
|
||||
"remove_customer" => "Remove Customer",
|
||||
"remove_discount" => "",
|
||||
"customer_display" => "Customer Display",
|
||||
"summary" => "Summary",
|
||||
"return" => "Return",
|
||||
"rewards" => "Reward Points",
|
||||
"rewards_balance" => "Reward Points Balance",
|
||||
@@ -185,7 +181,6 @@ return [
|
||||
"sales_total" => "",
|
||||
"select_customer" => "Select Customer",
|
||||
"selected_customer" => "Selected Customer",
|
||||
"walk_in_customer" => "Walk-in Customer",
|
||||
"send_invoice" => "Send Invoice",
|
||||
"send_quote" => "Send Quote",
|
||||
"send_receipt" => "Send Receipt",
|
||||
@@ -216,7 +211,6 @@ return [
|
||||
"tax_percent" => "Tax %",
|
||||
"taxed_ind" => "T",
|
||||
"total" => "Total",
|
||||
"total_lbp" => "Total LBP",
|
||||
"total_tax_exclusive" => "Tax excluded",
|
||||
"transaction_failed" => "Sales Transaction failed.",
|
||||
"unable_to_add_item" => "Item add to Sale failed",
|
||||
@@ -229,6 +223,7 @@ return [
|
||||
"update" => "Update",
|
||||
"upi" => "UPI",
|
||||
"visa" => "",
|
||||
"wallet" => "Wallet",
|
||||
"wholesale" => "",
|
||||
"work_order" => "Work Order",
|
||||
"work_order_number" => "Work Order Number",
|
||||
@@ -236,5 +231,3 @@ return [
|
||||
"work_order_sent" => "Work Order sent to",
|
||||
"work_order_unsent" => "Work Order failed to be sent to",
|
||||
];
|
||||
|
||||
|
||||
|
||||
@@ -166,8 +166,6 @@ return [
|
||||
"info" => "Información",
|
||||
"info_configuration" => "Información del Comercio",
|
||||
"input_groups" => "Introducir Grupos",
|
||||
"integrations" => "Componentes Integrados",
|
||||
"integrations_configuration" => "Componentes de Terceros Integrados",
|
||||
"invoice" => "Factura",
|
||||
"invoice_configuration" => "Parámetros de Impresión",
|
||||
"invoice_default_comments" => "Comentarios predeterminados en la factura",
|
||||
@@ -198,13 +196,6 @@ return [
|
||||
"location_info" => "Información de Configuración de Ubicación",
|
||||
"login_form" => "Estilo del formulario de inicio de sesión",
|
||||
"logout" => "Desea hacer un respaldo antes de salir? Pulsa [OK] para respaldar o [Cancelar] para salir.",
|
||||
"mailchimp" => "Correo MailChimp",
|
||||
"mailchimp_api_key" => "Clave API de Mailchimp",
|
||||
"mailchimp_configuration" => "Configuración de Mailchimp",
|
||||
"mailchimp_key_successfully" => "Clave API correcta.",
|
||||
"mailchimp_key_unsuccessfully" => "Clave API incorrecta.",
|
||||
"mailchimp_lists" => "Lista(s) de Mailchimp",
|
||||
"mailchimp_tooltip" => "Haga clic en el icono de una clave de API.",
|
||||
"message" => "Mensajes SMS",
|
||||
"message_configuration" => "Configuracion del mensaje",
|
||||
"msg_msg" => "Texto del mensaje guardado",
|
||||
|
||||
@@ -28,16 +28,6 @@ return [
|
||||
"employee" => "Empleado",
|
||||
"error_adding_updating" => "Error agregando/actualizando cliente.",
|
||||
"import_items_csv" => "Importar Clientes desde CSV",
|
||||
"mailchimp_activity_click" => "Email click",
|
||||
"mailchimp_activity_lastopen" => "Último correo abierto",
|
||||
"mailchimp_activity_open" => "Correo abierto",
|
||||
"mailchimp_activity_total" => "Correo enviado",
|
||||
"mailchimp_activity_unopen" => "Correo sin abrir",
|
||||
"mailchimp_email_client" => "Correo del cliente",
|
||||
"mailchimp_info" => "Correo Mailchimp",
|
||||
"mailchimp_member_rating" => "Porcentaje",
|
||||
"mailchimp_status" => "Estado",
|
||||
"mailchimp_vip" => "VIP",
|
||||
"max" => "Máx. gastado",
|
||||
"min" => "Mín. gastado",
|
||||
"new" => "Nuevo Cliente",
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
"migrate_desc" => "Actualizar la base de datos OSPOS.",
|
||||
"office" => "Oficina",
|
||||
"office_desc" => "Lista modulo de menu oficina.",
|
||||
'plugins' => 'Complementos',
|
||||
"receivings" => "Recepción",
|
||||
"receivings_desc" => "Procesar Ordenes de Compra.",
|
||||
"reports" => "Reportes",
|
||||
|
||||
27
app/Language/es-ES/Plugins.php
Normal file
27
app/Language/es-ES/Plugins.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
return [
|
||||
'actions' => 'Acciones',
|
||||
'active' => 'Activo',
|
||||
'configure' => 'Configurar',
|
||||
'description' => 'Descripción',
|
||||
'disable' => 'Deshabilitar',
|
||||
'disable_failed' => 'Error al deshabilitar el plugin',
|
||||
'disabled' => 'Plugin deshabilitado correctamente',
|
||||
'enable' => 'Habilitar',
|
||||
'enable_failed' => 'Error al habilitar el plugin',
|
||||
'enabled' => 'Plugin habilitado correctamente',
|
||||
'inactive' => 'Inactivo',
|
||||
'management' => 'Gestión de plugins',
|
||||
'name' => 'Nombre del plugin',
|
||||
'no_config' => 'Este plugin no tiene opciones de configuración',
|
||||
'no_plugins_to_display' => 'No hay plugins para mostrar',
|
||||
'not_found' => 'Plugin no encontrado',
|
||||
'plugins' => 'Plugins',
|
||||
'settings_save_failed' => 'Error al guardar la configuración del plugin',
|
||||
'settings_saved' => 'Configuración del plugin guardada correctamente',
|
||||
'status' => 'Estado',
|
||||
'uninstall' => 'Desinstalar',
|
||||
'uninstall_failed' => 'Error al desinstalar el plugin',
|
||||
'uninstalled' => 'Plugin desinstalado correctamente',
|
||||
'version' => 'Versión',
|
||||
];
|
||||
@@ -42,7 +42,6 @@ return [
|
||||
"customer_discount" => "Descuento",
|
||||
"customer_email" => "Email",
|
||||
"customer_location" => "Ubicacion",
|
||||
"customer_mailchimp_status" => "Estado de Mailchimp",
|
||||
"customer_optional" => "(Obligatorio para Pagos Vencidos)",
|
||||
"customer_required" => "(Requerido)",
|
||||
"customer_total" => "Total",
|
||||
|
||||
@@ -166,8 +166,6 @@ return [
|
||||
"info" => "Information",
|
||||
"info_configuration" => "Store Information",
|
||||
"input_groups" => "Grupos de Entrada",
|
||||
"integrations" => "Integraciones",
|
||||
"integrations_configuration" => "Integraciones Externas",
|
||||
"invoice" => "Invoice",
|
||||
"invoice_configuration" => "Invoice Print Settings",
|
||||
"invoice_default_comments" => "Default Invoice Comments",
|
||||
@@ -198,13 +196,6 @@ return [
|
||||
"location_info" => "Location Configuration Information",
|
||||
"login_form" => "Estilo de formulario de inicio de sesión",
|
||||
"logout" => "Do you want to make a backup before logging out? Click [OK] to backup or [Cancel] to logout.",
|
||||
"mailchimp" => "Mailchimp",
|
||||
"mailchimp_api_key" => "Mailchimp Clave API",
|
||||
"mailchimp_configuration" => "Configuración de MailChimp",
|
||||
"mailchimp_key_successfully" => "API Key is valid.",
|
||||
"mailchimp_key_unsuccessfully" => "API Key is invalid.",
|
||||
"mailchimp_lists" => "Lista (s) de MailChimp",
|
||||
"mailchimp_tooltip" => "Click the icon for an API Key.",
|
||||
"message" => "Message",
|
||||
"message_configuration" => "Message Configuration",
|
||||
"msg_msg" => "Saved Text Message",
|
||||
|
||||
@@ -28,16 +28,6 @@ return [
|
||||
"employee" => "Empleado",
|
||||
"error_adding_updating" => "Fallo al agregar o actualizar el Cliente.",
|
||||
"import_items_csv" => "Importar Cliente desde CSV",
|
||||
"mailchimp_activity_click" => "Click Correo Electrónico",
|
||||
"mailchimp_activity_lastopen" => "Último correo electrónico abierto",
|
||||
"mailchimp_activity_open" => "Correo electrónico abierto",
|
||||
"mailchimp_activity_total" => "Correo electrónico enviado",
|
||||
"mailchimp_activity_unopen" => "Correo electrónico sin abrir",
|
||||
"mailchimp_email_client" => "cliente de correo electrónico",
|
||||
"mailchimp_info" => "Mailchimp",
|
||||
"mailchimp_member_rating" => "Puntaje",
|
||||
"mailchimp_status" => "Estado",
|
||||
"mailchimp_vip" => "VIP",
|
||||
"max" => "Gasto Máximo",
|
||||
"min" => "Gasto Mínimo",
|
||||
"new" => "Nuevo Cliente",
|
||||
|
||||
@@ -32,6 +32,7 @@ return [
|
||||
"migrate_desc" => "Actualizar la Base de Datos de OSPOS.",
|
||||
"office" => "Oficina",
|
||||
"office_desc" => "Listar los módulos del menú de la oficina.",
|
||||
'plugins' => 'Complementos',
|
||||
"receivings" => "Recepciones",
|
||||
"receivings_desc" => "Procesar Órdenes de Compra.",
|
||||
"reports" => "Reportes",
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user