mirror of
https://github.com/Karaka-Management/oms-ItemManagement.git
synced 2026-01-11 11:48:41 +00:00
too many changes
This commit is contained in:
parent
f892ebcb7a
commit
72b3c3c2f1
|
|
@ -1,6 +1,6 @@
|
|||
[
|
||||
{
|
||||
"name": "shop",
|
||||
"name": "shop_item",
|
||||
"l11n": {
|
||||
"en": "Shop item",
|
||||
"de": "Shop Artikel"
|
||||
|
|
@ -59,6 +59,19 @@
|
|||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "shop_external_link",
|
||||
"l11n": {
|
||||
"en": "External shop link",
|
||||
"de": "Externer Shop Link"
|
||||
},
|
||||
"value_type": 2,
|
||||
"is_custom_allowed": true,
|
||||
"validation_pattern": "",
|
||||
"is_required": false,
|
||||
"default_value": "",
|
||||
"values": []
|
||||
},
|
||||
{
|
||||
"name": "segment",
|
||||
"l11n": {
|
||||
|
|
@ -150,7 +163,7 @@
|
|||
"en": "Bill fees",
|
||||
"de": "Sonderkosten"
|
||||
},
|
||||
"value_type": 2,
|
||||
"value_type": 1,
|
||||
"is_custom_allowed": true,
|
||||
"validation_pattern": "",
|
||||
"is_required": false,
|
||||
|
|
@ -164,6 +177,38 @@
|
|||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "sales_tax_code",
|
||||
"l11n": {
|
||||
"en": "Sales tax code",
|
||||
"de": "USt. code"
|
||||
},
|
||||
"value_type": 2,
|
||||
"is_custom_allowed": false,
|
||||
"validation_pattern": "",
|
||||
"is_required": true,
|
||||
"default_value": "",
|
||||
"values": [
|
||||
{ "value": "SOFTWARE" },
|
||||
{ "value": "SERVICE" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "purchase_tax_code",
|
||||
"l11n": {
|
||||
"en": "Purchse tax code",
|
||||
"de": "VSt. code"
|
||||
},
|
||||
"value_type": 2,
|
||||
"is_custom_allowed": false,
|
||||
"validation_pattern": "",
|
||||
"is_required": true,
|
||||
"default_value": "",
|
||||
"values": [
|
||||
{ "value": "SOFTWARE" },
|
||||
{ "value": "SERVICE" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "upc",
|
||||
"l11n": {
|
||||
|
|
@ -427,5 +472,70 @@
|
|||
"is_required": false,
|
||||
"default_value": "",
|
||||
"values": []
|
||||
},
|
||||
{
|
||||
"name": "download_link",
|
||||
"l11n": {
|
||||
"en": "Download link",
|
||||
"de": "Download Link"
|
||||
},
|
||||
"value_type": 2,
|
||||
"is_custom_allowed": true,
|
||||
"validation_pattern": "",
|
||||
"is_required": false,
|
||||
"default_value": "",
|
||||
"values": []
|
||||
},
|
||||
{
|
||||
"name": "demo_link",
|
||||
"l11n": {
|
||||
"en": "Demo link",
|
||||
"de": "Demo Link"
|
||||
},
|
||||
"value_type": 2,
|
||||
"is_custom_allowed": true,
|
||||
"validation_pattern": "",
|
||||
"is_required": false,
|
||||
"default_value": "",
|
||||
"values": []
|
||||
},
|
||||
{
|
||||
"name": "one_click_pay_cc",
|
||||
"l11n": {
|
||||
"en": "One Click CC payment link",
|
||||
"de": "One Click CC Beyahllink"
|
||||
},
|
||||
"value_type": 2,
|
||||
"is_custom_allowed": true,
|
||||
"validation_pattern": "",
|
||||
"is_required": false,
|
||||
"default_value": "",
|
||||
"values": []
|
||||
},
|
||||
{
|
||||
"name": "one_click_pay_cc_id",
|
||||
"l11n": {
|
||||
"en": "One Click CC payment ID",
|
||||
"de": "One Click CC Beyahl ID"
|
||||
},
|
||||
"value_type": 2,
|
||||
"is_custom_allowed": true,
|
||||
"validation_pattern": "",
|
||||
"is_required": false,
|
||||
"default_value": "",
|
||||
"values": []
|
||||
},
|
||||
{
|
||||
"name": "one_click_pay_paypal",
|
||||
"l11n": {
|
||||
"en": "One Click Paypal payment link",
|
||||
"de": "One Click Paypal Beyahllink"
|
||||
},
|
||||
"value_type": 2,
|
||||
"is_custom_allowed": true,
|
||||
"validation_pattern": "",
|
||||
"is_required": false,
|
||||
"default_value": "",
|
||||
"values": []
|
||||
}
|
||||
]
|
||||
|
|
@ -398,181 +398,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"itemmgmt_item_sales_price": {
|
||||
"name": "itemmgmt_item_sales_price",
|
||||
"fields": {
|
||||
"itemmgmt_item_sales_price_id": {
|
||||
"name": "itemmgmt_item_sales_price_id",
|
||||
"type": "INT",
|
||||
"null": false,
|
||||
"primary": true,
|
||||
"autoincrement": true
|
||||
},
|
||||
"itemmgmt_item_sales_price_name": {
|
||||
"name": "itemmgmt_item_sales_price_name",
|
||||
"type": "VARCHAR(255)",
|
||||
"null": false
|
||||
},
|
||||
"itemmgmt_item_sales_price_currency": {
|
||||
"name": "itemmgmt_item_sales_price_currency",
|
||||
"type": "VARCHAR(3)",
|
||||
"null": false,
|
||||
"foreignTable": "currency",
|
||||
"foreignKey": "currency_code"
|
||||
},
|
||||
"itemmgmt_item_sales_price_price": {
|
||||
"name": "itemmgmt_item_sales_price_price",
|
||||
"type": "INT(11)",
|
||||
"null": false
|
||||
},
|
||||
"itemmgmt_item_sales_price_status": {
|
||||
"name": "itemmgmt_item_sales_price_status",
|
||||
"type": "TINYINT(1)",
|
||||
"null": false
|
||||
},
|
||||
"itemmgmt_item_sales_price_minquantity": {
|
||||
"name": "itemmgmt_item_sales_price_minquantity",
|
||||
"type": "INT(11)",
|
||||
"null": false
|
||||
},
|
||||
"itemmgmt_item_sales_price_relativediscount": {
|
||||
"name": "itemmgmt_item_sales_price_relativediscount",
|
||||
"type": "INT(11)",
|
||||
"null": false
|
||||
},
|
||||
"itemmgmt_item_sales_price_absolutediscount": {
|
||||
"name": "itemmgmt_item_sales_price_absolutediscount",
|
||||
"type": "INT(11)",
|
||||
"null": false
|
||||
},
|
||||
"itemmgmt_item_sales_price_relativeunitdiscount": {
|
||||
"name": "itemmgmt_item_sales_price_relativeunitdiscount",
|
||||
"type": "INT(11)",
|
||||
"null": false
|
||||
},
|
||||
"itemmgmt_item_sales_price_absoluteunitdiscount": {
|
||||
"name": "itemmgmt_item_sales_price_absoluteunitdiscount",
|
||||
"type": "INT(11)",
|
||||
"null": false
|
||||
},
|
||||
"itemmgmt_item_sales_price_start": {
|
||||
"name": "itemmgmt_item_sales_price_start",
|
||||
"type": "INT(11)",
|
||||
"null": false
|
||||
},
|
||||
"itemmgmt_item_sales_price_end": {
|
||||
"name": "itemmgmt_item_sales_price_end",
|
||||
"type": "INT(11)",
|
||||
"null": false
|
||||
},
|
||||
"itemmgmt_item_sales_price_promocode": {
|
||||
"name": "itemmgmt_item_sales_price_promocode",
|
||||
"type": "INT(11)",
|
||||
"null": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"itemmgmt_item_sales_price_relation": {
|
||||
"name": "itemmgmt_item_sales_price_relation",
|
||||
"fields": {
|
||||
"itemmgmt_item_sales_price_relation_id": {
|
||||
"name": "itemmgmt_item_sales_price_relation_id",
|
||||
"type": "INT",
|
||||
"null": false,
|
||||
"primary": true,
|
||||
"autoincrement": true
|
||||
},
|
||||
"itemmgmt_item_sales_price_relation_item": {
|
||||
"name": "itemmgmt_item_sales_price_relation_item",
|
||||
"type": "INT",
|
||||
"null": true,
|
||||
"default": null,
|
||||
"foreignTable": "itemmgmt_item",
|
||||
"foreignKey": "itemmgmt_item_id"
|
||||
},
|
||||
"itemmgmt_item_sales_price_relation_attr": {
|
||||
"name": "itemmgmt_item_sales_price_relation_attr",
|
||||
"type": "INT",
|
||||
"null": true,
|
||||
"default": null,
|
||||
"foreignTable": "itemmgmt_attr_value",
|
||||
"foreignKey": "itemmgmt_attr_value_id"
|
||||
},
|
||||
"itemmgmt_item_sales_price_relation_client": {
|
||||
"name": "itemmgmt_item_sales_price_relation_client",
|
||||
"type": "INT",
|
||||
"null": true,
|
||||
"default": null,
|
||||
"foreignTable": "account",
|
||||
"foreignKey": "account_id"
|
||||
},
|
||||
"itemmgmt_item_sales_price_relation_clientgroup": {
|
||||
"name": "itemmgmt_item_sales_price_relation_clientgroup",
|
||||
"type": "INT",
|
||||
"null": true,
|
||||
"default": null,
|
||||
"foreignTable": "account",
|
||||
"foreignKey": "account_id"
|
||||
},
|
||||
"itemmgmt_item_sales_price_relation_price": {
|
||||
"name": "itemmgmt_item_sales_price_relation_price",
|
||||
"type": "INT",
|
||||
"null": true,
|
||||
"default": null,
|
||||
"foreignTable": "itemmgmt_item_sales_price",
|
||||
"foreignKey": "itemmgmt_item_sales_price_id"
|
||||
},
|
||||
"itemmgmt_item_sales_price_relation_region": {
|
||||
"name": "itemmgmt_item_sales_price_relation_region",
|
||||
"type": "INT(11)",
|
||||
"null": false
|
||||
},
|
||||
"itemmgmt_item_sales_price_relation_country": {
|
||||
"name": "itemmgmt_item_sales_price_relation_country",
|
||||
"type": "VARCHAR(2)",
|
||||
"null": true,
|
||||
"default": null,
|
||||
"foreignTable": "country",
|
||||
"foreignKey": "country_code2"
|
||||
}
|
||||
}
|
||||
},
|
||||
"itemmgmt_item_sales_price_history": {
|
||||
"name": "itemmgmt_item_sales_price_history",
|
||||
"fields": {
|
||||
"itemmgmt_item_sales_price_history_id": {
|
||||
"name": "itemmgmt_item_sales_price_history_id",
|
||||
"type": "INT",
|
||||
"null": false,
|
||||
"primary": true,
|
||||
"autoincrement": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"itemmgmt_item_purchase_price": {
|
||||
"name": "itemmgmt_item_purchase_price",
|
||||
"fields": {
|
||||
"itemmgmt_item_purchase_price_id": {
|
||||
"name": "itemmgmt_item_purchase_price_id",
|
||||
"type": "INT",
|
||||
"null": false,
|
||||
"primary": true,
|
||||
"autoincrement": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"itemmgmt_item_purchase_price_history": {
|
||||
"name": "itemmgmt_item_purchase_price_history",
|
||||
"fields": {
|
||||
"itemmgmt_item_purchase_price_history_id": {
|
||||
"name": "itemmgmt_item_purchase_price_history_id",
|
||||
"type": "INT",
|
||||
"null": false,
|
||||
"primary": true,
|
||||
"autoincrement": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"itemmgmt_item_media": {
|
||||
"name": "itemmgmt_item_media",
|
||||
"fields": {
|
||||
|
|
|
|||
|
|
@ -380,8 +380,8 @@ final class Installer extends InstallerAbstract
|
|||
$request->header->account = 1;
|
||||
$request->setData('value', $value['value'] ?? '');
|
||||
$request->setData('unit', $value['unit'] ?? '');
|
||||
$request->setData('default', isset($attribute['values']) && !empty($attribute['values']));
|
||||
$request->setData('attributetype', $itemAttrType[$attribute['name']]['id']);
|
||||
$request->setData('default', true); // always true since all defined values are possible default values
|
||||
$request->setData('type', $itemAttrType[$attribute['name']]['id']);
|
||||
|
||||
if (isset($value['l11n']) && !empty($value['l11n'])) {
|
||||
$request->setData('title', \reset($value['l11n']));
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ use Modules\ItemManagement\Models\ItemPrice;
|
|||
use Modules\ItemManagement\Models\ItemPriceStatus;
|
||||
use Modules\ItemManagement\Models\ItemRelationType;
|
||||
use Modules\ItemManagement\Models\ItemRelationTypeMapper;
|
||||
use Modules\ItemManagement\Models\ItemStatus;
|
||||
use Modules\ItemManagement\Models\NullItemAttributeType;
|
||||
use Modules\ItemManagement\Models\NullItemAttributeValue;
|
||||
use Modules\ItemManagement\Models\NullItemL11nType;
|
||||
|
|
@ -46,12 +47,16 @@ use phpOMS\Localization\BaseStringL11n;
|
|||
use phpOMS\Localization\ISO4217CharEnum;
|
||||
use phpOMS\Localization\ISO639x1Enum;
|
||||
use phpOMS\Localization\Money;
|
||||
use phpOMS\Message\Http\HttpRequest;
|
||||
use phpOMS\Message\Http\HttpResponse;
|
||||
use phpOMS\Message\Http\RequestStatusCode;
|
||||
use phpOMS\Message\NotificationLevel;
|
||||
use phpOMS\Message\RequestAbstract;
|
||||
use phpOMS\Message\ResponseAbstract;
|
||||
use phpOMS\Model\Message\FormValidation;
|
||||
use phpOMS\Module\NullModule;
|
||||
use phpOMS\System\MimeType;
|
||||
use phpOMS\Uri\HttpUri;
|
||||
|
||||
/**
|
||||
* ItemManagement class.
|
||||
|
|
@ -121,6 +126,21 @@ final class ApiController extends Controller
|
|||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* Create media directory path
|
||||
*
|
||||
* @param Item $item Item
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
private function createItemDir(Item $item) : string
|
||||
{
|
||||
return '/Modules/ItemManagement/Item/'
|
||||
. $item->getId();
|
||||
}
|
||||
|
||||
/**
|
||||
* Api method to create item
|
||||
*
|
||||
|
|
@ -149,8 +169,24 @@ final class ApiController extends Controller
|
|||
$this->createModel($request->header->account, $item, ItemMapper::class, 'item', $request->getOrigin());
|
||||
$this->app->dbPool->get()->con->commit();
|
||||
|
||||
if ($this->app->moduleManager->isActive('Billing')) {
|
||||
$billing = $this->app->moduleManager->get('Billing');
|
||||
|
||||
$internalRequest = new HttpRequest(new HttpUri(''));
|
||||
$internalResponse = new HttpResponse();
|
||||
|
||||
$internalRequest->header->account = $request->header->account;
|
||||
$internalRequest->setData('name', 'base_price');
|
||||
$internalRequest->setData('item', $item->getId());
|
||||
$internalRequest->setData('price', $request->getData('salesprice', 'int') ?? 0);
|
||||
|
||||
$billing->apiPriceCreate($internalRequest, $internalResponse);
|
||||
}
|
||||
|
||||
$this->createMediaDirForItem($item->number, $request->header->account);
|
||||
|
||||
$path = $this->createItemDir($item);
|
||||
|
||||
$uploadedFiles = $request->getFile('item_profile_image');
|
||||
if (!empty($uploadedFiles)) {
|
||||
// upload image
|
||||
|
|
@ -159,8 +195,8 @@ final class ApiController extends Controller
|
|||
fileNames: [],
|
||||
files: $uploadedFiles,
|
||||
account: $request->header->account,
|
||||
basePath: __DIR__ . '/../../../Modules/Media/Files/Modules/ItemManagement/Items/' . $item->number,
|
||||
virtualPath: '/Modules/ItemManagement/Items/' . $item->number,
|
||||
basePath: __DIR__ . '/../../../Modules/Media/Files' . $path,
|
||||
virtualPath: $path,
|
||||
pathSettings: PathSettings::FILE_PATH
|
||||
);
|
||||
|
||||
|
|
@ -235,6 +271,7 @@ final class ApiController extends Controller
|
|||
$item->info = (string) ($request->getData('info') ?? '');
|
||||
$item->parent = $request->getData('parent', 'int');
|
||||
$item->unit = $request->getData('unit', 'int');
|
||||
$item->setStatus((int) ($request->getData('status') ?? ItemStatus::ACTIVE));
|
||||
|
||||
return $item;
|
||||
}
|
||||
|
|
@ -364,6 +401,7 @@ final class ApiController extends Controller
|
|||
|
||||
$attribute = $this->createItemAttributeFromRequest($request);
|
||||
$this->createModel($request->header->account, $attribute, ItemAttributeMapper::class, 'attribute', $request->getOrigin());
|
||||
|
||||
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute', 'Attribute successfully created', $attribute);
|
||||
}
|
||||
|
||||
|
|
@ -388,7 +426,7 @@ final class ApiController extends Controller
|
|||
$newRequest = clone $request;
|
||||
$newRequest->setData('value', $request->getData('custom'), true);
|
||||
|
||||
$value = $this->createItemAttributeValueFromRequest($request);
|
||||
$value = $this->createItemAttributeValueFromRequest($newRequest);
|
||||
|
||||
$attribute->value = $value;
|
||||
}
|
||||
|
|
@ -442,7 +480,7 @@ final class ApiController extends Controller
|
|||
|
||||
$attrL11n = $this->createItemAttributeTypeL11nFromRequest($request);
|
||||
$this->createModel($request->header->account, $attrL11n, ItemAttributeTypeL11nMapper::class, 'attr_type_l11n', $request->getOrigin());
|
||||
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute type localization', 'Attribute type localization successfully created', $attrL11n);
|
||||
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Localization', 'Localization successfully created', $attrL11n);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -667,7 +705,7 @@ final class ApiController extends Controller
|
|||
|
||||
$attrL11n = $this->createItemAttributeValueL11nFromRequest($request);
|
||||
$this->createModel($request->header->account, $attrL11n, ItemAttributeValueL11nMapper::class, 'attr_value_l11n', $request->getOrigin());
|
||||
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute type localization', 'Attribute type localization successfully created', $attrL11n);
|
||||
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Localization', 'Localization successfully created', $attrL11n);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -736,7 +774,7 @@ final class ApiController extends Controller
|
|||
|
||||
$itemL11nType = $this->createItemL11nTypeFromRequest($request);
|
||||
$this->createModel($request->header->account, $itemL11nType, ItemL11nTypeMapper::class, 'item_l11n_type', $request->getOrigin());
|
||||
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Item localization type', 'Item localization type successfully created', $itemL11nType);
|
||||
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Localization type', 'Localization type successfully created', $itemL11nType);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -863,7 +901,7 @@ final class ApiController extends Controller
|
|||
|
||||
$itemL11n = $this->createItemL11nFromRequest($request);
|
||||
$this->createModel($request->header->account, $itemL11n, ItemL11nMapper::class, 'item_l11n', $request->getOrigin());
|
||||
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Item localization', 'Item localization successfully created', $itemL11n);
|
||||
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Localization', 'Localization successfully created', $itemL11n);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -941,13 +979,19 @@ final class ApiController extends Controller
|
|||
return;
|
||||
}
|
||||
|
||||
$item = ItemMapper::get()
|
||||
->where('id', (int) $request->getData('item'))
|
||||
->execute();
|
||||
|
||||
$path = $this->createItemDir($item);
|
||||
|
||||
$uploaded = $this->app->moduleManager->get('Media')->uploadFiles(
|
||||
names: $request->getDataList('names'),
|
||||
fileNames: $request->getDataList('filenames'),
|
||||
files: $uploadedFiles,
|
||||
account: $request->header->account,
|
||||
basePath: __DIR__ . '/../../../Modules/Media/Files/Modules/ItemManagement/Items/' . ($request->getData('item') ?? '0'),
|
||||
virtualPath: '/Modules/ItemManagement/Items/' . ($request->getData('item') ?? '0'),
|
||||
basePath: __DIR__ . '/../../../Modules/Media/Files' . $path,
|
||||
virtualPath: $path,
|
||||
pathSettings: PathSettings::FILE_PATH
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -210,22 +210,7 @@ final class BackendController extends Controller
|
|||
*/
|
||||
public function viewItemManagementSalesList(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : RenderableInterface
|
||||
{
|
||||
$view = new View($this->app->l11nManager, $request, $response);
|
||||
$view->setTemplate('/Modules/ItemManagement/Theme/Backend/sales-item-list');
|
||||
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1004805001, $request, $response));
|
||||
|
||||
/** @var \Modules\ItemManagement\Models\Item[] $items */
|
||||
$items = ItemMapper::getAll()
|
||||
->with('l11n')
|
||||
->with('l11n/type')
|
||||
->where('l11n/language', $response->getLanguage())
|
||||
->where('l11n/type/title', ['name1', 'name2', 'name3'], 'IN')
|
||||
->limit(25)
|
||||
->execute();
|
||||
|
||||
$view->addData('items', $items);
|
||||
|
||||
return $view;
|
||||
return $this->viewItemManagementItemList($request, $response, $data);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -242,21 +227,7 @@ final class BackendController extends Controller
|
|||
*/
|
||||
public function viewItemManagementPurchaseList(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : RenderableInterface
|
||||
{
|
||||
$view = new View($this->app->l11nManager, $request, $response);
|
||||
$view->setTemplate('/Modules/ItemManagement/Theme/Backend/purchase-item-list');
|
||||
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1004806001, $request, $response));
|
||||
|
||||
$items = ItemMapper::getAll()
|
||||
->with('l11n')
|
||||
->with('l11n/type')
|
||||
->where('l11n/language', $response->getLanguage())
|
||||
->where('l11n/type/title', ['name1', 'name2', 'name3'], 'IN')
|
||||
->limit(25)
|
||||
->execute();
|
||||
|
||||
$view->addData('items', $items);
|
||||
|
||||
return $view;
|
||||
return $this->viewItemManagementItemList($request, $response, $data);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -273,14 +244,7 @@ final class BackendController extends Controller
|
|||
*/
|
||||
public function viewItemManagementWarehousingList(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : RenderableInterface
|
||||
{
|
||||
$view = new View($this->app->l11nManager, $request, $response);
|
||||
$view->setTemplate('/Modules/ItemManagement/Theme/Backend/stock-item-list');
|
||||
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1004807001, $request, $response));
|
||||
|
||||
$items = ItemMapper::getAll()->execute();
|
||||
$view->addData('items', $items);
|
||||
|
||||
return $view;
|
||||
return $this->viewItemManagementItemList($request, $response, $data);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -453,82 +417,7 @@ final class BackendController extends Controller
|
|||
*/
|
||||
public function viewItemManagementSalesItem(RequestAbstract $request, ResponseAbstract $response, $data = null) : View
|
||||
{
|
||||
$head = $response->get('Content')->getData('head');
|
||||
$head->addAsset(AssetType::CSS, 'Resources/chartjs/Chartjs/chart.css');
|
||||
$head->addAsset(AssetType::JSLATE, 'Resources/chartjs/Chartjs/chart.js');
|
||||
$head->addAsset(AssetType::JSLATE, 'Modules/ItemManagement/Controller.js', ['type' => 'module']);
|
||||
|
||||
$view = new View($this->app->l11nManager, $request, $response);
|
||||
$view->setTemplate('/Modules/ItemManagement/Theme/Backend/sales-item-profile');
|
||||
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1004805001, $request, $response));
|
||||
|
||||
/** @var \Modules\ItemManagement\Models\Item $item */
|
||||
$item = ItemMapper::get()
|
||||
->with('l11n')
|
||||
->with('l11n/type')
|
||||
->with('files')
|
||||
->with('notes')
|
||||
->where('id', (int) $request->getData('id'))
|
||||
->where('l11n/language', $response->getLanguage())
|
||||
->where('l11n/type/title', ['name1', 'name2', 'name3'], 'IN')
|
||||
->limit(5, 'files')->sort('files/id', OrderType::DESC) // @todo: limit not working!!!
|
||||
->limit(5, 'notes')->sort('notes/id', OrderType::DESC)
|
||||
->execute();
|
||||
|
||||
$view->addData('item', $item);
|
||||
|
||||
/** @var \Model\Setting $settings */
|
||||
$settings = $this->app->appSettings->get(null, [
|
||||
SettingsEnum::DEFAULT_LOCALIZATION,
|
||||
]);
|
||||
|
||||
$view->setData('defaultlocalization', LocalizationMapper::get()->where('id', (int) $settings->getId())->execute());
|
||||
|
||||
// stats
|
||||
if ($this->app->moduleManager->isActive('Billing')) {
|
||||
$ytd = SalesBillMapper::getSalesByItemId($item->getId(), new SmartDateTime('Y-01-01'), new SmartDateTime('now'));
|
||||
$mtd = SalesBillMapper::getSalesByItemId($item->getId(), new SmartDateTime('Y-m-01'), new SmartDateTime('now'));
|
||||
$avg = SalesBillMapper::getAvgSalesPriceByItemId($item->getId(), (new SmartDateTime('now'))->smartModify(-1), new SmartDateTime('now'));
|
||||
|
||||
$lastOrder = SalesBillMapper::getLastOrderDateByItemId($item->getId());
|
||||
|
||||
$newestInvoices = SalesBillMapper::getAll()
|
||||
->with('type')
|
||||
->where('type/transferType', BillTransferType::SALES)
|
||||
->sort('id', OrderType::DESC)
|
||||
->limit(5)
|
||||
->execute();
|
||||
|
||||
$topCustomers = [];
|
||||
$allInvoices = SalesBillMapper::getItemBills($item->getId(), new SmartDateTime('Y-01-01'), new SmartDateTime('now'));
|
||||
$regionSales = SalesBillMapper::getItemRegionSales($item->getId(), new SmartDateTime('Y-01-01'), new SmartDateTime('now'));
|
||||
$countrySales = SalesBillMapper::getItemCountrySales($item->getId(), new SmartDateTime('Y-01-01'), new SmartDateTime('now'), 5);
|
||||
$monthlySalesCosts = SalesBillMapper::getItemMonthlySalesCosts($item->getId(), (new SmartDateTime('now'))->createModify(-1), new SmartDateTime('now'));
|
||||
} else {
|
||||
$ytd = new Money();
|
||||
$mtd = new Money();
|
||||
$avg = new Money();
|
||||
$lastOrder = null;
|
||||
$newestInvoices = [];
|
||||
$allInvoices = [];
|
||||
$topCustomers = [];
|
||||
$regionSales = [];
|
||||
$countrySales = [];
|
||||
$monthlySalesCosts = [];
|
||||
}
|
||||
|
||||
$view->addData('ytd', $ytd);
|
||||
$view->addData('mtd', $mtd);
|
||||
$view->addData('avg', $avg);
|
||||
$view->addData('lastOrder', $lastOrder);
|
||||
$view->addData('newestInvoices', $newestInvoices);
|
||||
$view->addData('allInvoices', $allInvoices);
|
||||
$view->addData('topCustomers', $topCustomers);
|
||||
$view->addData('regionSales', $regionSales);
|
||||
$view->addData('countrySales', $countrySales);
|
||||
$view->addData('monthlySalesCosts', $monthlySalesCosts);
|
||||
|
||||
return $view;
|
||||
return $this->viewItemManagementItemItem($request, $response, $data);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -545,11 +434,7 @@ final class BackendController extends Controller
|
|||
*/
|
||||
public function viewItemManagementPurchaseItem(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : RenderableInterface
|
||||
{
|
||||
$view = $this->viewItemManagementSalesItem($request, $response, $data);
|
||||
$view->setTemplate('/Modules/ItemManagement/Theme/Backend/sales-item-profile');
|
||||
$view->setData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1004806001, $request, $response));
|
||||
|
||||
return $view;
|
||||
return $this->viewItemManagementItemItem($request, $response, $data);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -566,11 +451,7 @@ final class BackendController extends Controller
|
|||
*/
|
||||
public function viewItemManagementWarehouseItem(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : RenderableInterface
|
||||
{
|
||||
$view = $this->viewItemManagementSalesItem($request, $response, $data);
|
||||
$view->setTemplate('/Modules/ItemManagement/Theme/Backend/sales-item-profile');
|
||||
$view->setData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1004806001, $request, $response));
|
||||
|
||||
return $view;
|
||||
return $this->viewItemManagementItemItem($request, $response, $data);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -364,6 +364,27 @@ class Item implements \JsonSerializable
|
|||
return new NullMedia();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all media files by type name
|
||||
*
|
||||
* @param string $type Media type
|
||||
*
|
||||
* @return Media[]
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public function getFilesByTypeName(string $type) : array
|
||||
{
|
||||
$files = [];
|
||||
foreach ($this->files as $file) {
|
||||
if ($file->hasMediaTypeName($type)) {
|
||||
$files[] = $file;
|
||||
}
|
||||
}
|
||||
|
||||
return $files;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -70,5 +70,5 @@ final class ItemAttributeMapper extends DataMapperFactory
|
|||
* @var string
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public const PRIMARYFIELD ='itemmgmt_item_attr_id';
|
||||
public const PRIMARYFIELD = 'itemmgmt_item_attr_id';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -117,6 +117,17 @@ class ItemAttributeType implements \JsonSerializable
|
|||
return $this->id;
|
||||
}
|
||||
|
||||
public function getDefaultByValue(mixed $value) : ItemAttributeValue
|
||||
{
|
||||
foreach ($this->defaults as $default) {
|
||||
if ($default->getValue() === $value) {
|
||||
return $default;
|
||||
}
|
||||
}
|
||||
|
||||
return new NullItemAttributeValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set l11n
|
||||
*
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ final class ItemAttributeTypeL11nMapper extends DataMapperFactory
|
|||
* @var string
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public const PRIMARYFIELD ='itemmgmt_attr_type_l11n_id';
|
||||
public const PRIMARYFIELD = 'itemmgmt_attr_type_l11n_id';
|
||||
|
||||
/**
|
||||
* Model to use by the mapper.
|
||||
|
|
|
|||
|
|
@ -78,5 +78,5 @@ final class ItemAttributeTypeMapper extends DataMapperFactory
|
|||
* @var string
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public const PRIMARYFIELD ='itemmgmt_attr_type_id';
|
||||
public const PRIMARYFIELD = 'itemmgmt_attr_type_id';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ final class ItemAttributeValueL11nMapper extends DataMapperFactory
|
|||
* @var string
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public const PRIMARYFIELD ='itemmgmt_attr_value_l11n_id';
|
||||
public const PRIMARYFIELD = 'itemmgmt_attr_value_l11n_id';
|
||||
|
||||
/**
|
||||
* Model to use by the mapper.
|
||||
|
|
|
|||
|
|
@ -73,5 +73,5 @@ final class ItemAttributeValueMapper extends DataMapperFactory
|
|||
* @var string
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public const PRIMARYFIELD ='itemmgmt_attr_value_id';
|
||||
public const PRIMARYFIELD = 'itemmgmt_attr_value_id';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -67,5 +67,5 @@ final class ItemL11nMapper extends DataMapperFactory
|
|||
* @var string
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public const PRIMARYFIELD ='itemmgmt_item_l11n_id';
|
||||
public const PRIMARYFIELD = 'itemmgmt_item_l11n_id';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,5 +52,5 @@ final class ItemL11nTypeMapper extends DataMapperFactory
|
|||
* @var string
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public const PRIMARYFIELD ='itemmgmt_item_l11n_type_id';
|
||||
public const PRIMARYFIELD = 'itemmgmt_item_l11n_type_id';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ final class ItemMapper extends DataMapperFactory
|
|||
* @var string
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public const PRIMARYFIELD ='itemmgmt_item_id';
|
||||
public const PRIMARYFIELD = 'itemmgmt_item_id';
|
||||
|
||||
/**
|
||||
* Has many relation.
|
||||
|
|
|
|||
|
|
@ -66,5 +66,5 @@ final class ItemRelationMapper extends DataMapperFactory
|
|||
* @var string
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public const PRIMARYFIELD ='itemmgmt_item_relation_id';
|
||||
public const PRIMARYFIELD = 'itemmgmt_item_relation_id';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,5 +51,5 @@ final class ItemRelationTypeMapper extends DataMapperFactory
|
|||
* @var string
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public const PRIMARYFIELD ='itemmgmt_item_relation_type_id';
|
||||
public const PRIMARYFIELD = 'itemmgmt_item_relation_type_id';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,4 +29,6 @@ abstract class ItemStatus extends Enum
|
|||
public const ACTIVE = 1;
|
||||
|
||||
public const INACTIVE = 2;
|
||||
|
||||
public const PREVIEW = 3;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -186,7 +186,7 @@ echo $this->getData('nav')->render();
|
|||
|
||||
<div class="col-xs-12 col-md-6">
|
||||
<section class="portlet">
|
||||
<div class="portlet-head"><?= $this->getHtml('Documents'); ?></div>
|
||||
<div class="portlet-head"><?= $this->getHtml('Files'); ?></div>
|
||||
<div class="slider">
|
||||
<table id="iFilesItemList" class="default">
|
||||
<thead>
|
||||
|
|
|
|||
|
|
@ -148,7 +148,9 @@ echo $this->getData('nav')->render();
|
|||
<tr><td><?= $this->getHtml('PurchasePrice'); ?>:
|
||||
<td><?= $item->purchasePrice->getCurrency(); ?>
|
||||
<tr><td><?= $this->getHtml('Margin'); ?>:
|
||||
<td><?= \round(($item->salesPrice->getInt() - $item->purchasePrice->getInt()) / $item->salesPrice->getInt() * 100, 2); ?> %
|
||||
<td><?= $item->salesPrice->getInt() === 0
|
||||
? '0.00'
|
||||
: \round(($item->salesPrice->getInt() - $item->purchasePrice->getInt()) / $item->salesPrice->getInt() * 100, 2); ?> %
|
||||
<tr><td><?= $this->getHtml('AvgPrice'); ?>:
|
||||
<td><?= $this->getData('avg')->getCurrency(); ?>
|
||||
</table>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "karaka/karaka",
|
||||
"description": "PHP Framework for Karaka.",
|
||||
"description": "PHP Framework for Jingga.",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Dennis Eichhorn",
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user