general fixes and tpl additions

This commit is contained in:
Dennis Eichhorn 2021-05-28 20:28:40 +02:00
parent 5c52b12d44
commit 7ac1d67115
30 changed files with 269 additions and 13 deletions

View File

@ -19,7 +19,7 @@
"type": 2,
"subtype": 1,
"name": "OrderSuggestions",
"uri": "{/prefix}purchase/analysis?{?}",
"uri": "{/prefix}purchase/order/suggestion?{?}",
"target": "self",
"icon": null,
"order": 15,

View File

@ -39,17 +39,6 @@ return [
],
],
],
'^.*/purchase/article/recommend.*$' => [
[
'dest' => '\Modules\Purchase\Controller\BackendController:viewPurchaseOrderRecommendation',
'verb' => RouteVerb::GET,
'permission' => [
'module' => BackendController::MODULE_NAME,
'type' => PermissionType::READ,
'state' => PermissionState::ARTICLE,
],
],
],
'^.*/purchase/article/create.*$' => [
[
'dest' => '\Modules\Purchase\Controller\BackendController:viewPurchaseArticleCreate',
@ -72,4 +61,15 @@ return [
],
],
],
'^.*/purchase/order/suggestion.*$' => [
[
'dest' => '\Modules\Purchase\Controller\BackendController:viewPurchaseOrderSuggestion',
'verb' => RouteVerb::GET,
'permission' => [
'module' => BackendController::MODULE_NAME,
'type' => PermissionType::READ,
'state' => PermissionState::ARTICLE,
],
],
],
];

View File

@ -146,7 +146,7 @@ final class BackendController extends Controller
* @since 1.0.0
* @codeCoverageIgnore
*/
public function viewPurchaseOrderRecommendation(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface
public function viewPurchaseOrderSuggestion(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface
{
$view = new View($this->app->l11nManager, $request, $response);
$view->setTemplate('/Modules/Purchase/Theme/Backend/article-order-recommendation');

View File

@ -0,0 +1,120 @@
<?php
/**
* Orange Management
*
* PHP Version 8.0
*
* @package OrderSuggestion
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Purchase\OrderSuggestion;
/**
* OMS order suggestion class
*
* @package Modules\Purchase\Models\OrderSuggestion
* @license OMS License 1.0
* @link https://orange-management.org
* @since 1.0.0
*/
final class DefaultOrderSuggestion implements OrderSuggestionInterface
{
/**
* Which data should be used to create the order suggestion?
*
* @var int
* @since 1.0.0
*/
public int $suggestionType = OrderSuggestionType::HISTORIC;
/**
* Comparison duration type.
*
* @var int
* @since 1.0.0
*/
public int $historicComparisonDurationType = OrderSuggestionComparisonDurationType::ANNUAL;
/**
* How many years should used for the analysis.
*
* @var int
* @since 1.0.0
*/
public int $historicComparisonDuration = 1;
/**
* Which averaging method should be used?
*
* @var int
* @since 1.0.0
*/
public int $historicAveragingMethod = OrderSuggestionAveragingMethod::MEAN;
/**
* What should the focus of the order suggestion be?
*
* @var int
* @since 1.0.0
*/
public int $optimizationType = OrderSuggestionOptimizationType::PRICE;
/**
* How greedy should the algorithm be?
*
* The number represents how many items in % can be bought in additon to the optimal stock quantity.
*
* Higher means more room for adjustments.
*
* @var int
* @since 1.0.0
*/
public int $optimizationGreediness = 10;
/**
* For how many days would you like to have stock?
*
* Or in other words, higher means you need to order less often per year.
*
* Only relevant if OptimizationType::AVAILABILITY
*
* @var int
* @since 1.0.0
*/
public int $optimizationDays = 0;
/**
* Maximum available budget.
*
* 0 = infinite budget
*
* If a budget is defined and the optimal order is > than the available budget,
* the algorithm will try to order as many different items as possible.
*
* If not all items can be ordered will try to order the items with the highest profit.
*
* @var int
* @since 1.0.0
*/
public int $maxAvailableBudget = 0;
/**
* item data for algorithm:
* number
* name
* purchase price per volume
* minimum quantity per volume
* delivery time / lead time
* in-house processing time (e.g. qs time, labelling, packaging)
* ordered (order confirmations)
* stock available
* offers
* avg. profit
* demand in period N
*/
}

View File

@ -0,0 +1,34 @@
<?php
/**
* Orange Management
*
* PHP Version 8.0
*
* @package Modules\Purchase\Models\OrderSuggestion
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Purchase\OrderSuggestion;
use phpOMS\Stdlib\Base\Enum;
/**
* Suggestion type enum.
*
* @package Modules\Purchase\Models\OrderSuggestion
* @license OMS License 1.0
* @link https://orange-management.org
* @since 1.0.0
*/
abstract class OrderSuggestionAveragingMethod extends Enum
{
public const MEAN = 1;
public const MEDIAN = 2;
public const MEAN_WEIGHTED = 3;
}

View File

@ -0,0 +1,34 @@
<?php
/**
* Orange Management
*
* PHP Version 8.0
*
* @package Modules\Purchase\Models\OrderSuggestion
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Purchase\OrderSuggestion;
use phpOMS\Stdlib\Base\Enum;
/**
* Suggestion type enum.
*
* @package Modules\Purchase\Models\OrderSuggestion
* @license OMS License 1.0
* @link https://orange-management.org
* @since 1.0.0
*/
abstract class OrderSuggestionComparisonDurationType extends Enum
{
public const ANNUALY = 1;
public const MONTHLY = 2; // The basis is every month, the different months are considered the same
public const MONTHLY_ANNUAL = 3; // The basis is the same month, e.g. helpful for seasonal data
}

View File

@ -0,0 +1,34 @@
<?php
/**
* Orange Management
*
* PHP Version 8.0
*
* @package Modules\Purchase\Models\OrderSuggestion
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Purchase\OrderSuggestion;
use phpOMS\Stdlib\Base\Enum;
/**
* Suggestion type enum.
*
* @package Modules\Purchase\Models\OrderSuggestion
* @license OMS License 1.0
* @link https://orange-management.org
* @since 1.0.0
*/
abstract class OrderSuggestionOptimizationType extends Enum
{
public const PRICE = 1; // Suggestion focuses on creating better prices if volume discounts exist.
public const JUST_IN_TIME = 2; // Suggestion focuses on calculating minimum stock quantities.
public const AVAILABILITY = 3; // Suggestion focuses on an availability for X days, days need to be specified in the algorithm.
}

View File

@ -0,0 +1,34 @@
<?php
/**
* Orange Management
*
* PHP Version 8.0
*
* @package Modules\Purchase\Models\OrderSuggestion
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Purchase\OrderSuggestion;
use phpOMS\Stdlib\Base\Enum;
/**
* Suggestion type enum.
*
* @package Modules\Purchase\Models\OrderSuggestion
* @license OMS License 1.0
* @link https://orange-management.org
* @since 1.0.0
*/
abstract class OrderSuggestionType extends Enum
{
public const AVAILABLE = 1; // Suggestion based on: available stock + current orders
public const HISTORIC = 2; // Suggestion based on: available stock + current orders + historic demand
public const TREND = 3; // Suggestion based on: available stock + current orders + trend
}

0
Theme/Backend/Lang/ar.lang.php Normal file → Executable file
View File

0
Theme/Backend/Lang/cs.lang.php Normal file → Executable file
View File

0
Theme/Backend/Lang/da.lang.php Normal file → Executable file
View File

0
Theme/Backend/Lang/de.lang.php Normal file → Executable file
View File

0
Theme/Backend/Lang/el.lang.php Normal file → Executable file
View File

0
Theme/Backend/Lang/en.lang.php Normal file → Executable file
View File

0
Theme/Backend/Lang/es.lang.php Normal file → Executable file
View File

0
Theme/Backend/Lang/fi.lang.php Normal file → Executable file
View File

0
Theme/Backend/Lang/fr.lang.php Normal file → Executable file
View File

0
Theme/Backend/Lang/hu.lang.php Normal file → Executable file
View File

0
Theme/Backend/Lang/it.lang.php Normal file → Executable file
View File

0
Theme/Backend/Lang/ja.lang.php Normal file → Executable file
View File

0
Theme/Backend/Lang/ko.lang.php Normal file → Executable file
View File

0
Theme/Backend/Lang/no.lang.php Normal file → Executable file
View File

0
Theme/Backend/Lang/pl.lang.php Normal file → Executable file
View File

0
Theme/Backend/Lang/pt.lang.php Normal file → Executable file
View File

0
Theme/Backend/Lang/ru.lang.php Normal file → Executable file
View File

0
Theme/Backend/Lang/sv.lang.php Normal file → Executable file
View File

0
Theme/Backend/Lang/th.lang.php Normal file → Executable file
View File

0
Theme/Backend/Lang/tr.lang.php Normal file → Executable file
View File

0
Theme/Backend/Lang/uk.lang.php Normal file → Executable file
View File

0
Theme/Backend/Lang/zh.lang.php Normal file → Executable file
View File