This commit is contained in:
Dennis Eichhorn 2024-02-28 05:09:13 +00:00
parent c2ee6165ed
commit e6006238b4
25 changed files with 637 additions and 98 deletions

View File

@ -1,35 +0,0 @@
---
name: Dev Bug Report
about: Create a report to help us improve
title: ''
labels: stat_backlog, type_bug
assignees: ''
---
# Bug Description
A clear and concise description of what the bug is.
# How to Reproduce
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
## Minimal Code Example
```
// your code ...
```
# Expected Behavior
A clear and concise description of what you expected to happen.
# Screenshots
If applicable, add screenshots to help explain your problem.
# Additional Information
Add any other context about the problem here.

View File

@ -1,18 +0,0 @@
---
name: Dev Feature Request
about: Suggest an idea for this project
title: ''
labels: stat_backlog, type_feature
assignees: ''
---
# What is the feature you request
* A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
* A clear and concise description of what you want to happen.
# Alternatives
A clear and concise description of any alternative solutions or features you've considered.
# Additional Information
Add any other context or screenshots about the feature request here.

View File

@ -1,10 +0,0 @@
[
{
"description": "Default supplier segmentation (segment, section, sales group, product group)",
"type": "setting",
"name": "1003200001",
"content": "{\"segment\":1, \"section\":1, \"supplier_group\":1}",
"pattern": "",
"module": "SupplierManagement"
}
]

View File

@ -0,0 +1,27 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\SupplierManagement\Admin
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
use Modules\SupplierManagement\Controller\ApiController;
use Modules\SupplierManagement\Models\SettingsEnum;
return [
[
"description" => "Default item segmentation (segment, section, sales group, product group)",
'type' => 'setting',
'name' => SettingsEnum::DEFAULT_SEGMENTATION,
'content' => '{"segment":1, "section":1, "supplier_group":1}',
'pattern' => '',
'module' => ApiController::NAME,
],
];

View File

@ -38,6 +38,10 @@ class Admin
*/
public static function install(ApplicationAbstract $app, string $path) : void
{
// \Modules\Admin\Admin\Installer::installExternal($app, ['path' => __DIR__ . '/Admin.install.json']);
// We are creating default items in the SupplierManagement installer.
// This requires that these settings are already available
// However, this install script runs AFTER the primary installer runs.
// This causes problems for the item installation and is therefore moved to the "Installer".
// \Modules\Admin\Admin\Installer::installExternal($app, ['path' => __DIR__ . '/Admin.install.php']);
}
}

View File

@ -5,7 +5,7 @@
"type": 2,
"subtype": 1,
"name": "Suppliers",
"uri": "{/base}/purchase/supplier/list",
"uri": "{/base}/purchase/supplier/list?{?}",
"target": "self",
"icon": null,
"order": 1,
@ -19,7 +19,7 @@
"type": 3,
"subtype": 1,
"name": "List",
"uri": "{/base}/purchase/supplier/list",
"uri": "{/base}/purchase/supplier/list?{?}",
"target": "self",
"icon": null,
"order": 1,

View File

@ -331,19 +331,6 @@
{ "value": "EU" }
]
},
{
"name": "order_limit",
"l11n": {
"en": "Order limit",
"de": "Bestelllimit"
},
"value_type": 1,
"is_custom_allowed": true,
"validation_pattern": "",
"is_required": false,
"default_value": "",
"values": []
},
{
"name": "minimum_order",
"l11n": {
@ -382,5 +369,321 @@
"is_required": false,
"default_value": "",
"values": []
},
{
"name": "bill_language",
"l11n": {
"en": "Bill language",
"de": "Belegsprache"
},
"value_type": 2,
"is_custom_allowed": false,
"validation_pattern": "",
"is_required": false,
"default_value": "",
"values": [
{ "value": "aa" },
{ "value": "ab" },
{ "value": "af" },
{ "value": "ak" },
{ "value": "sq" },
{ "value": "am" },
{ "value": "ar" },
{ "value": "an" },
{ "value": "hy" },
{ "value": "as" },
{ "value": "av" },
{ "value": "ae" },
{ "value": "ay" },
{ "value": "az" },
{ "value": "bm" },
{ "value": "ba" },
{ "value": "eu" },
{ "value": "be" },
{ "value": "bn" },
{ "value": "bh" },
{ "value": "bi" },
{ "value": "bs" },
{ "value": "br" },
{ "value": "bg" },
{ "value": "my" },
{ "value": "ca" },
{ "value": "ch" },
{ "value": "ce" },
{ "value": "ny" },
{ "value": "cv" },
{ "value": "kw" },
{ "value": "ko" },
{ "value": "co" },
{ "value": "cr" },
{ "value": "hr" },
{ "value": "cs" },
{ "value": "da" },
{ "value": "dv" },
{ "value": "nl" },
{ "value": "dz" },
{ "value": "en" },
{ "value": "eo" },
{ "value": "et" },
{ "value": "ee" },
{ "value": "fo" },
{ "value": "fj" },
{ "value": "fi" },
{ "value": "fr" },
{ "value": "ff" },
{ "value": "gl" },
{ "value": "ka" },
{ "value": "de" },
{ "value": "el" },
{ "value": "gn" },
{ "value": "gu" },
{ "value": "ht" },
{ "value": "ha" },
{ "value": "he" },
{ "value": "hz" },
{ "value": "hi" },
{ "value": "ho" },
{ "value": "hu" },
{ "value": "ia" },
{ "value": "id" },
{ "value": "ie" },
{ "value": "ga" },
{ "value": "ig" },
{ "value": "ik" },
{ "value": "io" },
{ "value": "is" },
{ "value": "it" },
{ "value": "iu" },
{ "value": "ja" },
{ "value": "jv" },
{ "value": "kl" },
{ "value": "kn" },
{ "value": "kr" },
{ "value": "kk" },
{ "value": "km" },
{ "value": "ki" },
{ "value": "rw" },
{ "value": "ky" },
{ "value": "kv" },
{ "value": "kg" },
{ "value": "kj" },
{ "value": "la" },
{ "value": "lb" },
{ "value": "lg" },
{ "value": "li" },
{ "value": "ln" },
{ "value": "lo" },
{ "value": "lt" },
{ "value": "lv" },
{ "value": "gv" },
{ "value": "mk" },
{ "value": "mg" },
{ "value": "ml" },
{ "value": "mt" },
{ "value": "mi" },
{ "value": "mr" },
{ "value": "mh" },
{ "value": "mn" },
{ "value": "na" },
{ "value": "nv" },
{ "value": "nd" },
{ "value": "ne" },
{ "value": "ng" },
{ "value": "nb" },
{ "value": "nn" },
{ "value": "no" },
{ "value": "ii" },
{ "value": "nr" },
{ "value": "oc" },
{ "value": "oj" },
{ "value": "cu" },
{ "value": "om" },
{ "value": "or" },
{ "value": "os" },
{ "value": "pi" },
{ "value": "fa" },
{ "value": "pl" },
{ "value": "ps" },
{ "value": "pt" },
{ "value": "qu" },
{ "value": "rm" },
{ "value": "rn" },
{ "value": "ro" },
{ "value": "ru" },
{ "value": "sa" },
{ "value": "sc" },
{ "value": "se" },
{ "value": "sm" },
{ "value": "sg" },
{ "value": "sr" },
{ "value": "gd" },
{ "value": "sn" },
{ "value": "si" },
{ "value": "sk" },
{ "value": "sl" },
{ "value": "so" },
{ "value": "st" },
{ "value": "es" },
{ "value": "su" },
{ "value": "sw" },
{ "value": "ss" },
{ "value": "sv" },
{ "value": "ta" },
{ "value": "te" },
{ "value": "th" },
{ "value": "ti" },
{ "value": "bo" },
{ "value": "tk" },
{ "value": "tl" },
{ "value": "tn" },
{ "value": "to" },
{ "value": "tr" },
{ "value": "ts" },
{ "value": "tw" },
{ "value": "ty" },
{ "value": "uk" },
{ "value": "ur" },
{ "value": "ve" },
{ "value": "vi" },
{ "value": "vo" },
{ "value": "wa" },
{ "value": "cy" },
{ "value": "wo" },
{ "value": "fy" },
{ "value": "xh" },
{ "value": "yi" },
{ "value": "yo" },
{ "value": "za" },
{ "value": "zu" },
{ "value": "zh" }
]
},
{
"name": "bill_currency",
"l11n": {
"en": "Bill currency",
"de": "Belegwährung"
},
"value_type": 2,
"is_custom_allowed": false,
"validation_pattern": "",
"is_required": false,
"default_value": "",
"values": [
{ "value": "ALL" },
{ "value": "AFN" },
{ "value": "ARS" },
{ "value": "AWG" },
{ "value": "AUD" },
{ "value": "AZN" },
{ "value": "BSD" },
{ "value": "BBD" },
{ "value": "BYR" },
{ "value": "BZD" },
{ "value": "BMD" },
{ "value": "BOB" },
{ "value": "BAM" },
{ "value": "BWP" },
{ "value": "BGN" },
{ "value": "BRL" },
{ "value": "BND" },
{ "value": "KHR" },
{ "value": "CAD" },
{ "value": "KYD" },
{ "value": "CLP" },
{ "value": "CNY" },
{ "value": "COP" },
{ "value": "CRC" },
{ "value": "HRK" },
{ "value": "CUP" },
{ "value": "CZK" },
{ "value": "DKK" },
{ "value": "DOP" },
{ "value": "XCD" },
{ "value": "EGP" },
{ "value": "SVC" },
{ "value": "EEK" },
{ "value": "EUR" },
{ "value": "FKP" },
{ "value": "FJD" },
{ "value": "GHC" },
{ "value": "GIP" },
{ "value": "GTQ" },
{ "value": "GGP" },
{ "value": "GYD" },
{ "value": "HNL" },
{ "value": "HKD" },
{ "value": "HUF" },
{ "value": "ISK" },
{ "value": "INR" },
{ "value": "IDR" },
{ "value": "IRR" },
{ "value": "IMP" },
{ "value": "ILS" },
{ "value": "JMD" },
{ "value": "JPY" },
{ "value": "JEP" },
{ "value": "KZT" },
{ "value": "KES" },
{ "value": "KGS" },
{ "value": "LAK" },
{ "value": "LVL" },
{ "value": "LBP" },
{ "value": "LRD" },
{ "value": "LTL" },
{ "value": "MKD" },
{ "value": "MYR" },
{ "value": "MUR" },
{ "value": "MXN" },
{ "value": "MNT" },
{ "value": "MZN" },
{ "value": "NAD" },
{ "value": "NPR" },
{ "value": "ANG" },
{ "value": "NZD" },
{ "value": "NIO" },
{ "value": "NGN" },
{ "value": "KPW" },
{ "value": "NOK" },
{ "value": "OMR" },
{ "value": "PKR" },
{ "value": "PAB" },
{ "value": "PYG" },
{ "value": "PEN" },
{ "value": "PHP" },
{ "value": "PLN" },
{ "value": "QAR" },
{ "value": "RON" },
{ "value": "RUB" },
{ "value": "SHP" },
{ "value": "SAR" },
{ "value": "RSD" },
{ "value": "SCR" },
{ "value": "SGD" },
{ "value": "SBD" },
{ "value": "SOS" },
{ "value": "ZAR" },
{ "value": "KRW" },
{ "value": "LKR" },
{ "value": "SEK" },
{ "value": "CHF" },
{ "value": "SRD" },
{ "value": "SYP" },
{ "value": "TWD" },
{ "value": "THB" },
{ "value": "TTD" },
{ "value": "TRY" },
{ "value": "TRL" },
{ "value": "TVD" },
{ "value": "UAH" },
{ "value": "GBP" },
{ "value": "USD" },
{ "value": "UYU" },
{ "value": "UZS" },
{ "value": "VEF" },
{ "value": "VND" },
{ "value": "YER" },
{ "value": "ZWD" }
]
}
]

View File

@ -1,3 +1,6 @@
[
{
"name": "internal_matchcodes",
"is_required": false
}
]

View File

@ -60,7 +60,7 @@ final class Installer extends InstallerAbstract
$attrTypes = self::createSupplierAttributeTypes($app, $attributes);
$attrValues = self::createSupplierAttributeValues($app, $attrTypes, $attributes);
$data = \json_decode(\file_get_contents(__DIR__ . '/Install/Admin.install.json'), true);
$data = include __DIR__ . '/Install/Admin.install.php';
$content = \json_decode($data[0]['content'], true);
foreach ($content as $type => $_) {
@ -100,7 +100,7 @@ final class Installer extends InstallerAbstract
$l11nTypes = [];
/** @var \Modules\SupplierManagement\Controller\ApiController $module */
$module = $app->moduleManager->getModuleInstance('SupplierManagement');
$module = $app->moduleManager->get('SupplierManagement');
foreach ($l11ns as $l11n) {
$response = new HttpResponse();
@ -141,7 +141,7 @@ final class Installer extends InstallerAbstract
$supplierAttrType = [];
/** @var \Modules\SupplierManagement\Controller\ApiAttributeController $module */
$module = $app->moduleManager->getModuleInstance('SupplierManagement', 'ApiAttribute');
$module = $app->moduleManager->get('SupplierManagement', 'ApiAttribute');
/** @var array $attribute */
foreach ($attributes as $attribute) {
@ -209,7 +209,7 @@ final class Installer extends InstallerAbstract
$supplierAttrValue = [];
/** @var \Modules\SupplierManagement\Controller\ApiAttributeController $module */
$module = $app->moduleManager->getModuleInstance('SupplierManagement', 'ApiAttribute');
$module = $app->moduleManager->get('SupplierManagement', 'ApiAttribute');
foreach ($attributes as $attribute) {
$supplierAttrValue[$attribute['name']] = [];

View File

@ -110,7 +110,7 @@ final class ApiController extends Controller
$supplier = new Supplier();
$supplier->number = $request->getDataString('number') ?? '';
$supplier->account = $account;
$supplier->unit = $request->getDataInt('unit') ?? 1;
$supplier->unit = $request->getDataInt('unit') ?? $this->app->unitId;
$request->setData('name', null, true);
$supplier->mainAddress = $this->app->moduleManager->get('Admin', 'Api')->createAddressFromRequest($request);

View File

@ -156,6 +156,7 @@ final class BackendController extends Controller
$supplier = SupplierMapper::getAll()
->with('account')
->with('mainAddress')
->where('unit', $this->app->unitId)
->limit(25)
->execute();
@ -202,10 +203,10 @@ final class BackendController extends Controller
$head = $response->data['Content']->head;
$nonce = $this->app->appSettings->getOption('script-nonce');
$head->addAsset(AssetType::CSS, 'Resources/chartjs/chart.css');
$head->addAsset(AssetType::JSLATE, 'Resources/chartjs/chart.js', ['nonce' => $nonce]);
$head->addAsset(AssetType::JSLATE, 'Resources/OpenLayers/OpenLayers.js', ['nonce' => $nonce]);
$head->addAsset(AssetType::JSLATE, 'Modules/ClientManagement/Controller.js', ['nonce' => $nonce, 'type' => 'module']);
$head->addAsset(AssetType::CSS, 'Resources/chartjs/chart.css?v=' . $this->app->version);
$head->addAsset(AssetType::JSLATE, 'Resources/chartjs/chart.js?v=' . $this->app->version, ['nonce' => $nonce]);
$head->addAsset(AssetType::JSLATE, 'Resources/OpenLayers/OpenLayers.js?v=' . $this->app->version, ['nonce' => $nonce]);
$head->addAsset(AssetType::JSLATE, 'Modules/ClientManagement/Controller.js?v=' . self::VERSION, ['nonce' => $nonce, 'type' => 'module']);
$view = new View($this->app->l11nManager, $request, $response);
$view->setTemplate('/Modules/SupplierManagement/Theme/Backend/supplier-view');

3
Docs/Help/de/SUMMARY.md Normal file
View File

@ -0,0 +1,3 @@
# User Content
* [Attributes]({%}&page=Help/attributes)

View File

View File

@ -0,0 +1,61 @@
# Attributes
## Default
The module automatically installs the following default attributes which can be set in the attribute tab in the respective supplier.
### General
| Attribute | Description | Internal default value |
| --------- | ----------- | ---------------------- |
| abc_class | Custom supplier rating | |
| support_emails | Send email for support ticket changes | yes |
| support_email_address | Email address for support tickets | Account email |
| legal_form | Supplier legal form | |
### Categories
Suppliers can be put in categories for horizontal and vertical grouping. By default the system uses segment->section->supplier_group as categories as well as supplier_type. These categories also get used by other modules. Additional groups can be defined but are not used by other modules by default.
| Attribute | Description | Internal default value |
| --------- | ----------- | ---------------------- |
| segment | Level 1 | 1 |
| section | Level 2 | 1 |
| supplier_group | Level 3 | 1 |
| supplier_type | **NOT** hierarchically. | 1 |
| supplier_area | **NOT** hierarchically. Area a supplier belongs to. Useful for grouping suppliers based on location or procurement clerk. | 1 |
| Level | > | > | > | > | > | > | Sample |
| :---: | :-------------------: | :-------------------: | :-------------------: | :-------------------: | :-------------------: | :-------------------: | :-------------------: |
| 1 | > | > | > | > | Segment 1 | > | Segment 2 |
| 2 | > | > | Section 1.1 | > | Section 1.2 | > | Section 2.1 |
| 3 | Supplier Group 1.1.1 | > | Supplier Group 1.1.2 | > | Supplier Group 1.2.1 | Supplier Group 2.1.1 | Supplier Group 2.1.2 |
> You could consider the supplier (number) itself `Level 4`.
### Billing
| Attribute | Description | Internal default value |
| --------- | ----------- | ---------------------- |
| bill_emails | Should bills get emailed to the customer | yes |
| bill_email_address | Email address used for sending bill via email | account email |
| bill_language | Language of the bill | Account language -> default bill language |
| bill_currency | Currency of the bill. Coming soon. | |
| bill_match_pattern | Regex pattern for matching a supplier against their bill. Usually a tax id, bank account or otherwise unique string used in the bills from the supplier. | |
| bill_date_format | Date format used by the supplier | |
### Purchase & Stock
| Attribute | Description | Internal default value |
| --------- | ----------- | ---------------------- |
| minimum_order | Minimum order amount required | |
### Accounting
| Attribute | Description | Internal default value |
| --------- | ----------- | ---------------------- |
| purchase_tax_code | Tax code for purchase | |
| vat_id | VAT id for european customers | |
| tax_id | Tax id for local tax id | |
| line_of_credit | Maximum amount allowed to be purchased taking unpaid invoices into account | |
| credit_rating | Credit rating | |

View File

@ -0,0 +1,54 @@
# Introduction
The **Item Management** module is an essential module for any ERP application. This module handles basic item management and is deeply integrated into **Billing** and **Warehouse Management**.
## Target Group
The target group for this module is anyone who wants to manage their tangible and non-tangible products.
# Setup
This module doesn't have any additional setup requirements and can be simply installed through the module interface.
# Features
## Item master file
The module provides basic item data management
* Attach documents to items
* Write notes for items
* Overview of most recent notes, documents, invoices and sales statistics (requires **Billing**)
## Localization
Localizations allow you to define item names and descriptions in multiple languages. You can also define custom text elements for external use (e.g. descriptions to be exported to other systems such as your own shop system).
## Attributes
Attributes allow you to define various item characteristics such as color, medical device class, segmentation, hazardous good, brand, model and many more.
## Pricing
By installing the **Billing** module you are can define multiple purchase and sales prices. Prices and discounts can be defined for individual items, customers and suppliers and for customer groups. You may also define quantity based prices.
## Procurement
Together with the **Purchase** module you can define stock levels, order conditions and delivery times for automated order suggestion calculations making it a breeze to ensure sufficient stocks.
## Accounting
Together with the **Accounting** module you can define cost center, cost object and taxes for every item.
## Stock
Together with the **Warehouse Management** module you can also track your stocks and
# Recommendation
Other modules that work great with this one together are:
* [Warehouse Management](WarehouseManagement)
* [Supplier Management](SupplierManagement)
* [Purchase](Purchase)
* [Accounting](Accounting)

View File

@ -0,0 +1,14 @@
# Localization
## Default
The module automatically installs the following default localizations which can be set in the localization tab in the respective item.
* name1 - Primary item name
* name2 - Secondary item name
* info - Internal item info
* internal_matchcodes - Match code for finding item based on a specific name or short description
* description_short - Short item description
* description_long - Long item description
* shop_name1 - Primary item name for a shop system
* shop_name2 - Secondary item name for a shop system

0
Docs/Help/de/pricing.md Normal file
View File

3
Docs/Help/en/SUMMARY.md Normal file
View File

@ -0,0 +1,3 @@
# User Content
* [Attributes]({%}&page=Help/attributes)

View File

View File

@ -0,0 +1,61 @@
# Attributes
## Default
The module automatically installs the following default attributes which can be set in the attribute tab in the respective supplier.
### General
| Attribute | Description | Internal default value |
| --------- | ----------- | ---------------------- |
| abc_class | Custom supplier rating | |
| support_emails | Send email for support ticket changes | yes |
| support_email_address | Email address for support tickets | Account email |
| legal_form | Supplier legal form | |
### Categories
Suppliers can be put in categories for horizontal and vertical grouping. By default the system uses segment->section->supplier_group as categories as well as supplier_type. These categories also get used by other modules. Additional groups can be defined but are not used by other modules by default.
| Attribute | Description | Internal default value |
| --------- | ----------- | ---------------------- |
| segment | Level 1 | 1 |
| section | Level 2 | 1 |
| supplier_group | Level 3 | 1 |
| supplier_type | **NOT** hierarchically. | 1 |
| supplier_area | **NOT** hierarchically. Area a supplier belongs to. Useful for grouping suppliers based on location or procurement clerk. | 1 |
| Level | > | > | > | > | > | > | Sample |
| :---: | :-------------------: | :-------------------: | :-------------------: | :-------------------: | :-------------------: | :-------------------: | :-------------------: |
| 1 | > | > | > | > | Segment 1 | > | Segment 2 |
| 2 | > | > | Section 1.1 | > | Section 1.2 | > | Section 2.1 |
| 3 | Supplier Group 1.1.1 | > | Supplier Group 1.1.2 | > | Supplier Group 1.2.1 | Supplier Group 2.1.1 | Supplier Group 2.1.2 |
> You could consider the supplier (number) itself `Level 4`.
### Billing
| Attribute | Description | Internal default value |
| --------- | ----------- | ---------------------- |
| bill_emails | Should bills get emailed to the customer | yes |
| bill_email_address | Email address used for sending bill via email | account email |
| bill_language | Language of the bill | Account language -> default bill language |
| bill_currency | Currency of the bill. Coming soon. | |
| bill_match_pattern | Regex pattern for matching a supplier against their bill. Usually a tax id, bank account or otherwise unique string used in the bills from the supplier. | |
| bill_date_format | Date format used by the supplier | |
### Purchase & Stock
| Attribute | Description | Internal default value |
| --------- | ----------- | ---------------------- |
| minimum_order | Minimum order amount required | |
### Accounting
| Attribute | Description | Internal default value |
| --------- | ----------- | ---------------------- |
| purchase_tax_code | Tax code for purchase | |
| vat_id | VAT id for european customers | |
| tax_id | Tax id for local tax id | |
| line_of_credit | Maximum amount allowed to be purchased taking unpaid invoices into account | |
| credit_rating | Credit rating | |

View File

@ -0,0 +1,54 @@
# Introduction
The **Item Management** module is an essential module for any ERP application. This module handles basic item management and is deeply integrated into **Billing** and **Warehouse Management**.
## Target Group
The target group for this module is anyone who wants to manage their tangible and non-tangible products.
# Setup
This module doesn't have any additional setup requirements and can be simply installed through the module interface.
# Features
## Item master file
The module provides basic item data management
* Attach documents to items
* Write notes for items
* Overview of most recent notes, documents, invoices and sales statistics (requires **Billing**)
## Localization
Localizations allow you to define item names and descriptions in multiple languages. You can also define custom text elements for external use (e.g. descriptions to be exported to other systems such as your own shop system).
## Attributes
Attributes allow you to define various item characteristics such as color, medical device class, segmentation, hazardous good, brand, model and many more.
## Pricing
By installing the **Billing** module you are can define multiple purchase and sales prices. Prices and discounts can be defined for individual items, customers and suppliers and for customer groups. You may also define quantity based prices.
## Procurement
Together with the **Purchase** module you can define stock levels, order conditions and delivery times for automated order suggestion calculations making it a breeze to ensure sufficient stocks.
## Accounting
Together with the **Accounting** module you can define cost center, cost object and taxes for every item.
## Stock
Together with the **Warehouse Management** module you can also track your stocks and
# Recommendation
Other modules that work great with this one together are:
* [Warehouse Management](WarehouseManagement)
* [Supplier Management](SupplierManagement)
* [Purchase](Purchase)
* [Accounting](Accounting)

View File

@ -0,0 +1,14 @@
# Localization
## Default
The module automatically installs the following default localizations which can be set in the localization tab in the respective item.
* name1 - Primary item name
* name2 - Secondary item name
* info - Internal item info
* internal_matchcodes - Match code for finding item based on a specific name or short description
* description_short - Short item description
* description_long - Long item description
* shop_name1 - Primary item name for a shop system
* shop_name2 - Secondary item name for a shop system

0
Docs/Help/en/pricing.md Normal file
View File

View File

@ -32,7 +32,7 @@ echo $this->data['nav']->render(); ?>
<div class="tab-content">
<input type="radio" id="c-tab-1" name="tabular-2"<?= $this->request->uri->fragment === 'c-tab-1' ? ' checked' : ''; ?>>
<div class="tab">
<section class="box w-33 floatLeft">
<section class="box w-33 lf">
<header><h1><?= $this->getHtml('Supplier'); ?></h1></header>
<div class="inner">
<form>
@ -53,7 +53,7 @@ echo $this->data['nav']->render(); ?>
</div>
<input type="radio" id="c-tab-2" name="tabular-2"<?= $this->request->uri->fragment === 'c-tab-2' ? ' checked' : ''; ?>>
<div class="tab">
<section class="box w-33 floatLeft">
<section class="box w-33 lf">
<header><h1><?= $this->getHtml('Contact'); ?></h1></header>
<div class="inner">
<form>
@ -84,7 +84,7 @@ echo $this->data['nav']->render(); ?>
</div>
<input type="radio" id="c-tab-3" name="tabular-2"<?= $this->request->uri->fragment === 'c-tab-3' ? ' checked' : ''; ?>>
<div class="tab">
<section class="box w-33 floatLeft">
<section class="box w-33 lf">
<header><h1><?= $this->getHtml('Address'); ?></h1></header>
<div class="inner">
<form>
@ -112,7 +112,7 @@ echo $this->data['nav']->render(); ?>
</div>
<input type="radio" id="c-tab-4" name="tabular-2"<?= $this->request->uri->fragment === 'c-tab-4' ? ' checked' : ''; ?>>
<div class="tab">
<section class="box w-33 floatLeft">
<section class="box w-33 lf">
<header><h1><?= $this->getHtml('PaymentTerm'); ?></h1></header>
<div class="inner">
<form>
@ -140,7 +140,7 @@ echo $this->data['nav']->render(); ?>
</div>
<input type="radio" id="c-tab-5" name="tabular-2"<?= $this->request->uri->fragment === 'c-tab-5' ? ' checked' : ''; ?>>
<div class="tab">
<section class="box w-33 floatLeft">
<section class="box w-33 lf">
<header><h1><?= $this->getHtml('Payment'); ?></h1></header>
<div class="inner">
<form>

View File

@ -164,7 +164,7 @@ echo $this->data['nav']->render();
</div>
</section>
<section class="portlet highlight-4">
<section class="portlet hl-4">
<div class="portlet-body">
<textarea class="undecorated"><?= $this->printHtml($supplier->info); ?></textarea>
</div>
@ -173,7 +173,7 @@ echo $this->data['nav']->render();
<div class="col-xs-12 col-lg-9 plain-grid">
<div class="row">
<div class="col-xs-12 col-lg-4">
<section class="portlet highlight-7">
<section class="portlet hl-7">
<div class="portlet-body">
<table class="wf-100">
<tr><td><?= $this->getHtml('YTDSales'); ?>:
@ -190,7 +190,7 @@ echo $this->data['nav']->render();
</div>
<div class="col-xs-12 col-lg-4">
<section class="portlet highlight-2">
<section class="portlet hl-2">
<div class="portlet-body">
<table class="wf-100">
<tr><td><?= $this->getHtml('LastContact'); ?>:
@ -207,7 +207,7 @@ echo $this->data['nav']->render();
</div>
<div class="col-xs-12 col-lg-4">
<section class="portlet highlight-3">
<section class="portlet hl-3">
<div class="portlet-body">
<table class="wf-100">
<tr><td><?= $this->getHtml('DSO'); ?>: