diff --git a/admin/forms/filter_manufacturers.xml b/admin/forms/filter_manufacturers.xml index c661ebf..a741942 100644 --- a/admin/forms/filter_manufacturers.xml +++ b/admin/forms/filter_manufacturers.xml @@ -5,8 +5,8 @@ name="search" type="text" inputmode="search" - label="COM_DEPOT_PARTS_FILTER_SEARCH_LABEL" - description="COM_DEPOT_PARTS_FILTER_SEARCH_DESC" + label="COM_DEPOT_FILTER_SEARCH_MANUFACTURERS_LABEL" + description="COM_DEPOT_FILTER_SEARCH_MANUFACTURERS_DESC" hint="JSEARCH_FILTER" /> +
+ + + + + + + + + + + + + + + + + + +
diff --git a/admin/forms/filter_parts.xml b/admin/forms/filter_parts.xml index 7a8b4bf..491a732 100644 --- a/admin/forms/filter_parts.xml +++ b/admin/forms/filter_parts.xml @@ -5,8 +5,8 @@ name="search" type="text" inputmode="search" - label="COM_DEPOT_PARTS_FILTER_SEARCH_LABEL" - description="COM_DEPOT_PARTS_FILTER_SEARCH_DESC" + label="COM_DEPOT_FILTER_SEARCH_PARTS_LABEL" + description="COM_DEPOT_FILTER_SEARCH_PARTS_DESC" hint="JSEARCH_FILTER" /> JSTATUS_DESC - - + + diff --git a/admin/forms/filter_stocks.xml b/admin/forms/filter_stocks.xml index 2af75ca..11bc860 100644 --- a/admin/forms/filter_stocks.xml +++ b/admin/forms/filter_stocks.xml @@ -5,8 +5,8 @@ name="search" type="text" inputmode="search" - label="COM_DEPOT_PARTS_FILTER_SEARCH_LABEL" - description="COM_DEPOT_PARTS_FILTER_SEARCH_DESC" + label="COM_DEPOT_FILTER_SEARCH_STOCKS_LABEL" + description="COM_DEPOT_FILTER_SEARCH_STOCKS_DESC" hint="JSEARCH_FILTER" /> JSTATUS_DESC - - + + diff --git a/admin/forms/manufacturer.xml b/admin/forms/manufacturer.xml index 95d6110..66aa10d 100644 --- a/admin/forms/manufacturer.xml +++ b/admin/forms/manufacturer.xml @@ -58,7 +58,7 @@ diff --git a/admin/forms/package.xml b/admin/forms/package.xml new file mode 100644 index 0000000..600de76 --- /dev/null +++ b/admin/forms/package.xml @@ -0,0 +1,82 @@ + +
+
+ + + + + + + + + + + + + + + + +
+
+ + + +
+
diff --git a/admin/forms/part.xml b/admin/forms/part.xml index b400dc0..5496fd8 100644 --- a/admin/forms/part.xml +++ b/admin/forms/part.xml @@ -36,11 +36,21 @@ hint="COM_DEPOT_FIELD_ALIAS_PART_PLACEHOLDER" size="40" /> + + + diff --git a/admin/forms/stock.xml b/admin/forms/stock.xml index c01b293..0c794a9 100644 --- a/admin/forms/stock.xml +++ b/admin/forms/stock.xml @@ -58,7 +58,7 @@ diff --git a/admin/language/de-DE/com_depot.ini b/admin/language/de-DE/com_depot.ini new file mode 100644 index 0000000..07b1c94 --- /dev/null +++ b/admin/language/de-DE/com_depot.ini @@ -0,0 +1,84 @@ +; @package Depot.Language +; @subpackage com_depot +; @author Thomas Kuschel +; @copyright (C) 2023 KW4NZ, +; @license GNU General Public License version 2 or later; see LICENSE.md +; @since 0.0.1 +; +COM_DEPOT_FIELD_ALIAS_PACKAGE_PLACEHOLDER="Automatisch aus dem Gehäusenamen erzeugen" +COM_DEPOT_FIELD_ALIAS_PART_PLACEHOLDER="Automatisch aus dem Bauteilnamen erzeugen" +COM_DEPOT_FIELD_ALIAS_STOCK_PLACEHOLDER="Automatisch aus dem Lagernamen erzeugen" +COM_DEPOT_FIELD_ALIAS_MANUFACTURER_PLACEHOLDER="Automatisch aus dem Herstellerkürzel generieren" +COM_DEPOT_FIELD_COMPONENT_NAME_DESC="Der Bauteilname ist eindeutig. Bitte geben Sie keine Sonderzeichen oder Umlaute ein." +COM_DEPOT_FIELD_COMPONENT_NAME_LABEL="Bauteilname" +;COM_DEPOT_FIELD_CREATED_LABEL="Erstellt" +;COM_DEPOT_FIELD_CREATED_BY_LABEL="Erstellt von" +COM_DEPOT_FIELD_MANUFACTURER_ACRONYM_DESC="Geben Sie hier das Herstellerkürzel oder einen kurzen Namen ein" +COM_DEPOT_FIELD_MANUFACTURER_ACRONYM_LABEL="Herstellerkürzel" +COM_DEPOT_FIELD_MANUFACTURER_LONG_NAME_DESC="Geben Sie hier die vollständige Herstellerbezeichnung ein" +COM_DEPOT_FIELD_MANUFACTURER_LONG_NAME_LABEL="Hersteller (vollständige Bezeichnung)" +;COM_DEPOT_FIELD_MODIFIED_LABEL="Modified" +;COM_DEPOT_FIELD_MODIFIED_BY_LABEL="Modified by" +COM_DEPOT_FIELD_PACKAGE_LABEL="Gehäuse" +COM_DEPOT_FIELD_PACKAGE_MOUNTING_STYLE_LABEL="Montageart" +COM_DEPOT_FIELD_PACKAGE_NAME_DESC="Geben Sie hier das Gehäuse des Bauteils ein" +COM_DEPOT_FIELD_PACKAGE_NAME_LABEL="Gehäusebezeichnung" +COM_DEPOT_FIELD_QUANTITY_LABEL="Menge" +COM_DEPOT_FIELD_QUANTITY_DESC="Geben Sie hier die tatsächliche Anzahl an Bauteilen ein" +COM_DEPOT_FIELD_QUANTITY_EXP_LABEL="Mengenquotient" +COM_DEPOT_FIELD_QUANTITY_EXP_DESC="Exponent (10^x der Anzahl, normalerweise 0, d.h. 10⁰)" +COM_DEPOT_FIELD_SELECT_MANUFACTURER="Hersteller" +COM_DEPOT_FIELD_SELECT_PACKAGE="Gehäuse" +COM_DEPOT_FIELD_SELECT_STOCK="Lagerort" +COM_DEPOT_FIELD_STOCK_NAME_DESC="Geben Sie hier den Lagerort (Kurzbezeichnung) ein" +COM_DEPOT_FIELD_STOCK_NAME_LABEL="Lagerort" +COM_DEPOT_FIELD_STOCK_DESCRIPTION_DESC="Geben Sie hier die exakte Position/Beschreibung ein" +COM_DEPOT_FIELD_STOCK_DESCRIPTION_LABEL="Beschreibung" +COM_DEPOT_FILTER_SEARCH_PARTS_DESC="Bauteilsuche" +COM_DEPOT_FILTER_SEARCH_PARTS_LABEL="Bauteilsuche" +COM_DEPOT_FILTER_SEARCH_STOCKS_LABEL="Lagerortsuche" +COM_DEPOT_FILTER_SEARCH_STOCKS_DESC="Suche des Lagerortes" +COM_DEPOT_LEGEND_MANUFACTURER_DETAILS="Herstellerdetails" +COM_DEPOT_LEGEND_PACKAGE_DETAILS="Gehäusedetails" +COM_DEPOT_LEGEND_PART_DETAILS="Bauteildetails" +COM_DEPOT_LEGEND_STOCK_DETAILS="Lagerort-Details" +COM_DEPOT_LEGEND_STATISTICS="Statistik" +COM_DEPOT_LIST_MOUNTING_STYLE_CHASSIS_MOUNT="Gehäuse-Montage" +COM_DEPOT_LIST_MOUNTING_STYLE_PRESS_FIT="Presspassung" +COM_DEPOT_LIST_MOUNTING_STYLE_SCREW_MOUNT="Schraubbefestigung" +COM_DEPOT_LIST_MOUNTING_STYLE_SMD="SMD (oberflächenmontiertes Bauteil)" +COM_DEPOT_LIST_MOUNTING_STYLE_THD="THD (bedrahtetes Bauteil)" +COM_DEPOT_LIST_MOUNTING_STYLE_UNKNOWN="Unbekannte Montageart" +COM_DEPOT_MANAGER_MANUFACTURERS="Verwaltung Hersteller" +COM_DEPOT_MANAGER_PACKAGES="Verwaltung Gehäuse" +COM_DEPOT_MANAGER_PARTS="Verwaltung Bauteile" +COM_DEPOT_MANAGER_STOCKS="Verwaltung Lagerorte" +COM_DEPOT_N_ITEMS_DELETED_1="Ein Bauteil entfernt" +COM_DEPOT_N_ITEMS_DELETED_MORE="%d Bauteile entfernt" +COM_DEPOT_N_ITEMS_PUBLISHED_1="Ein Bauteil veröffentlicht" +COM_DEPOT_N_ITEMS_PUBLISHED_MORE="%d Bauteile veröffentlicht" +COM_DEPOT_N_ITEMS_UNPUBLISHED_1="Ein Bauteil versteckt" +COM_DEPOT_N_ITEMS_UNPUBLISHED_MORE="%d Bauteile versteckt" +COM_DEPOT_SELECT_YOUR_OPTION="Wählen Sie Ihre Option" +COM_DEPOT_SORT_BY_DESCRIPTION_ASC="Beschreibung aufsteigend" +COM_DEPOT_SORT_BY_DESCRIPTION_DESC="Beschreibung absteigend" +COM_DEPOT_SORT_BY_QUANTITY_ASC="Menge aufsteigend" +COM_DEPOT_SORT_BY_QUANTITY_DESC="Menge absteigend" +COM_DEPOT_TAB_NEW_PART="Neues Bauteil" +COM_DEPOT_TAB_NEW_MANUFACTURER="Neuer Hersteller" +COM_DEPOT_TAB_EDIT_PART="Bauteildetails" +COM_DEPOT_TAB_EDIT_PACKAGE="Gehäusedetails" +COM_DEPOT_TAB_EDIT_MANUFACTURER="Herstellerdetails" +COM_DEPOT_TAB_EDIT_STOCK="Lagerdetails" +COM_DEPOT_TAB_STATISTICS="Statistik" +COM_DEPOT_TABLE_HEAD_ID="ID" +COM_DEPOT_TABLE_HEAD_NAME="Bauteilname" +COM_DEPOT_TABLE_HEAD_MANUFACTURER="Hersteller" +COM_DEPOT_TABLE_HEAD_MANUFACTURER_ACRONYM="Kürzel" +COM_DEPOT_TABLE_HEAD_MOUNTING_STYLE="Montageart" +COM_DEPOT_TABLE_HEAD_PACKAGE_NAME="Gehausename" +COM_DEPOT_TABLE_HEAD_STOCK="Lagerort" +COM_DEPOT_TABLE_HEAD_QUANTITY="Menge" +COM_DEPOT_TABLE_HEAD_QUANTITY_EXP="Exponent" +COM_DEPOT_TABLE_HEAD_DESCRIPTION="Beschreibung" +COM_DEPOT_XML_DESCRIPTION="Depot, das Bauteil-Warenhaus" diff --git a/admin/language/de-DE/com_depot.sys.ini b/admin/language/de-DE/com_depot.sys.ini new file mode 100644 index 0000000..b602636 --- /dev/null +++ b/admin/language/de-DE/com_depot.sys.ini @@ -0,0 +1,12 @@ +; @package Depot.Language +; @subpackage com_depot +; @author Thomas Kuschel +; @copyright (C) 2023 KW4NZ, +; @license GNU General Public License version 2 or later; see LICENSE.md +; @since 0.0.1 +; +COM_DEPOT_MENU="Depot" +COM_DEPOT_MENU_MANUFACTURERS="Hersteller" +COM_DEPOT_MENU_PACKAGES="Gehäuse" +COM_DEPOT_MENU_STOCKS="Lagerorte" +COM_DEPOT_XML_DESCRIPTION="Depot, das Bauteil-Warenhaus" diff --git a/admin/language/en-GB/com_depot.ini b/admin/language/en-GB/com_depot.ini index fa8a1d6..9d4ec66 100644 --- a/admin/language/en-GB/com_depot.ini +++ b/admin/language/en-GB/com_depot.ini @@ -5,34 +5,56 @@ ; @license GNU General Public License version 2 or later; see LICENSE.md ; @since 0.0.1 ; +COM_DEPOT_FIELD_ALIAS_PACKAGE_PLACEHOLDER="Auto-generate from package name" COM_DEPOT_FIELD_ALIAS_PART_PLACEHOLDER="Auto-generate from component name" COM_DEPOT_FIELD_ALIAS_STOCK_PLACEHOLDER="Auto-generate from stock name" COM_DEPOT_FIELD_ALIAS_MANUFACTURER_PLACEHOLDER="Auto-generate from manufacturer acronym" COM_DEPOT_FIELD_COMPONENT_NAME_DESC="The name of the component is unique. Please do not enter special characters or umlauts." COM_DEPOT_FIELD_COMPONENT_NAME_LABEL="Component Name" -COM_DEPOT_FIELD_CREATED_LABEL="Created" -COM_DEPOT_FIELD_CREATED_BY_LABEL="Created by" +;JGLOBAL_CREATED (should be replaced) +;COM_DEPOT_FIELD_CREATED_LABEL="Created" +;JGRID_FIELD_CREATED_BY (should be replaced) +;COM_DEPOT_FIELD_CREATED_BY_LABEL="Created by" COM_DEPOT_FIELD_MANUFACTURER_ACRONYM_DESC="Enter here the acronym of the manufacturer or short name" COM_DEPOT_FIELD_MANUFACTURER_ACRONYM_LABEL="Manufacturer Acronym" COM_DEPOT_FIELD_MANUFACTURER_LONG_NAME_DESC="Enter here the long name of the manufacturer" COM_DEPOT_FIELD_MANUFACTURER_LONG_NAME_LABEL="Manufacturer (long name)" -COM_DEPOT_FIELD_MODIFIED_LABEL="Modified" -COM_DEPOT_FIELD_MODIFIED_BY_LABEL="Modified by" +;JGLOBAL_FIELD_MODIFIED_LABEL +;COM_DEPOT_FIELD_MODIFIED_LABEL="Modified" +;JGLOBAL_FIELD_MODIFIED_BY_LABEL (should be replaced) +;COM_DEPOT_FIELD_MODIFIED_BY_LABEL="Modified by" +COM_DEPOT_FIELD_PACKAGE_LABEL="Package" +COM_DEPOT_FIELD_PACKAGE_MOUNTING_STYLE_LABEL="Mounting Style" +COM_DEPOT_FIELD_PACKAGE_NAME_DESC="Enter here the package name of the component" +COM_DEPOT_FIELD_PACKAGE_NAME_LABEL="Package Name" COM_DEPOT_FIELD_QUANTITY_LABEL="Quantity" COM_DEPOT_FIELD_QUANTITY_DESC="Enter here the current number of components" COM_DEPOT_FIELD_QUANTITY_EXP_LABEL="Quantity Exponent" COM_DEPOT_FIELD_QUANTITY_EXP_DESC="Exponent (10^x of the number, usually 0, i.e. 10⁰)" COM_DEPOT_FIELD_SELECT_MANUFACTURER="Manufacturer" +COM_DEPOT_FIELD_SELECT_PACKAGE="Package" COM_DEPOT_FIELD_SELECT_STOCK="Stock Location" COM_DEPOT_FIELD_STOCK_NAME_DESC="Enter here the short stock location" COM_DEPOT_FIELD_STOCK_NAME_LABEL="Stock Location" COM_DEPOT_FIELD_STOCK_DESCRIPTION_DESC="Enter here the exact location/description" COM_DEPOT_FIELD_STOCK_DESCRIPTION_LABEL="Description" +COM_DEPOT_FILTER_SEARCH_PARTS_DESC="Search a Component" +COM_DEPOT_FILTER_SEARCH_PARTS_LABEL="Search a component" +COM_DEPOT_FILTER_SEARCH_STOCKS_LABEL="Search Stock Location" +COM_DEPOT_FILTER_SEARCH_STOCKS_DESC="Search in Stock Location" COM_DEPOT_LEGEND_MANUFACTURER_DETAILS="Manufacturer Details" +COM_DEPOT_LEGEND_PACKAGE_DETAILS="Package Details" COM_DEPOT_LEGEND_PART_DETAILS="Component Details" COM_DEPOT_LEGEND_STOCK_DETAILS="Stock Location Details" COM_DEPOT_LEGEND_STATISTICS="Statistics" +COM_DEPOT_LIST_MOUNTING_STYLE_CHASSIS_MOUNT="Chassis Mount" +COM_DEPOT_LIST_MOUNTING_STYLE_PRESS_FIT="Press Fit" +COM_DEPOT_LIST_MOUNTING_STYLE_SCREW_MOUNT="Screw Mount" +COM_DEPOT_LIST_MOUNTING_STYLE_SMD="SMD/SMT (surface-mounted device)" +COM_DEPOT_LIST_MOUNTING_STYLE_THD="THD (through hole device)" +COM_DEPOT_LIST_MOUNTING_STYLE_UNKNOWN="Unknown mounting style" COM_DEPOT_MANAGER_MANUFACTURERS="Manager Manufacturers" +COM_DEPOT_MANAGER_PACKAGES="Manager Packages" COM_DEPOT_MANAGER_PARTS="Manager Components" COM_DEPOT_MANAGER_STOCKS="Manager Stock Locations" COM_DEPOT_N_ITEMS_DELETED_1="One component deleted" @@ -42,9 +64,14 @@ COM_DEPOT_N_ITEMS_PUBLISHED_MORE="%d components published" COM_DEPOT_N_ITEMS_UNPUBLISHED_1="One component unpublished" COM_DEPOT_N_ITEMS_UNPUBLISHED_MORE="%d components unpublished" COM_DEPOT_SELECT_YOUR_OPTION="Select your option" +COM_DEPOT_SORT_BY_DESCRIPTION_ASC="Description ascending" +COM_DEPOT_SORT_BY_DESCRIPTION_DESC="Description descending" +COM_DEPOT_SORT_BY_QUANTITY_ASC="Quantity ascending" +COM_DEPOT_SORT_BY_QUANTITY_DESC="Quantity descending" COM_DEPOT_TAB_NEW_PART="New Component" COM_DEPOT_TAB_NEW_MANUFACTURER="New Manufacturer" COM_DEPOT_TAB_EDIT_PART="Component Details" +COM_DEPOT_TAB_EDIT_PACKAGE="Package Details" COM_DEPOT_TAB_EDIT_MANUFACTURER="Manufacturer Details" COM_DEPOT_TAB_EDIT_STOCK="Stock Details" COM_DEPOT_TAB_STATISTICS="Statistics" @@ -52,6 +79,8 @@ COM_DEPOT_TABLE_HEAD_ID="ID" COM_DEPOT_TABLE_HEAD_NAME="Component Name" COM_DEPOT_TABLE_HEAD_MANUFACTURER="Manufacturer" COM_DEPOT_TABLE_HEAD_MANUFACTURER_ACRONYM="Acronym" +COM_DEPOT_TABLE_HEAD_MOUNTING_STYLE="Mounting Style" +COM_DEPOT_TABLE_HEAD_PACKAGE_NAME="Package Name" COM_DEPOT_TABLE_HEAD_STOCK="Stock Location" COM_DEPOT_TABLE_HEAD_QUANTITY="Quantity" COM_DEPOT_TABLE_HEAD_QUANTITY_EXP="Exponent" diff --git a/admin/language/en-GB/com_depot.sys.ini b/admin/language/en-GB/com_depot.sys.ini index 8ba79ec..56bbbd3 100644 --- a/admin/language/en-GB/com_depot.sys.ini +++ b/admin/language/en-GB/com_depot.sys.ini @@ -7,5 +7,6 @@ ; COM_DEPOT_MENU="Depot" COM_DEPOT_MENU_MANUFACTURERS="Manufacturers" +COM_DEPOT_MENU_PACKAGES="Packages" COM_DEPOT_MENU_STOCKS="Stock locations" COM_DEPOT_XML_DESCRIPTION="Depot, the component warehouse" diff --git a/admin/sql/install.mysql.utf8.sql b/admin/sql/install.mysql.utf8.sql index 409cac6..c6e48da 100644 --- a/admin/sql/install.mysql.utf8.sql +++ b/admin/sql/install.mysql.utf8.sql @@ -35,6 +35,7 @@ CREATE TABLE `#__depot` ( `datasheet_id` INT(11) NOT NULL DEFAULT 0, `datasheet_alt` VARCHAR(1024) NOT NULL DEFAULT '', `manufacturer_id` INT(11) NOT NULL DEFAULT 0, + `package_id` INT(11) NOT NULL DEFAULT 0, `stock_id` INT(11) NOT NULL DEFAULT 0, PRIMARY KEY (`id`), KEY `idx_state` (`state`), @@ -46,9 +47,9 @@ CREATE TABLE `#__depot` ( DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; INSERT INTO `#__depot` (`component_name`,`alias`,`description`,`quantity`,`created`, - `ordering`,`state`,`manufacturer_id`,`stock_id`) VALUES - ('1N5404','1n5404','diode, rectifier 3A',9,'2023-09-25 15:00:00',1,1,1,1), - ('1N4148','1n4148','diode, general purpose',1234,'2023-09-25 15:15:15',2,1,2,1); + `ordering`,`state`,`manufacturer_id`,`stock_id`,`package_id`) VALUES + ('1N5404','1n5404','diode, rectifier 3A',9,'2023-09-25 15:00:00',1,1,1,1,9), + ('1N4148','1n4148','diode, general purpose',1234,'2023-09-25 15:15:15',2,1,2,1,8); DROP TABLE IF EXISTS `#__depot_manufacturer`; CREATE TABLE `#__depot_manufacturer` ( @@ -123,28 +124,53 @@ DROP TABLE IF EXISTS `#__depot_package`; CREATE TABLE `#__depot_package` ( `id` SERIAL, `name` VARCHAR(400) NOT NULL DEFAULT '', + `description` VARCHAR(4000) NOT NULL DEFAULT '', `alias` VARCHAR(400) NOT NULL DEFAULT '', `image` VARCHAR(1024) NOT NULL DEFAULT '', `state` TINYINT(4) NOT NULL DEFAULT 0 COMMENT 'Published=1,Unpublished=0,Archived=2,Trashed=-2', - `mounting_style` TINYINT(4) NOT NULL DEFAULT 0 + `mounting_style_id` TINYINT(4) NOT NULL DEFAULT 0 COMMENT 'Unknown=0,Through_Hole=1,SMD/SMT=2', + `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `created_by` INT(10) UNSIGNED NOT NULL DEFAULT 0, + `checked_out` INT(11) NOT NULL DEFAULT 0, + `checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (`id`) ) ENGINE = InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -INSERT INTO `#__depot_package` (`name`,`state`,`mounting_style`) VALUES - ('R_0603_1608Metric',1,2), - ('R_0805_2012Metric',1,2), - ('DIL8',1,1), - ('DIL14',1,1), - ('DIL16',1,1), - ('DIL20',1,1), - ('DIL28_SMALL',1,1), - ('UFQFPN48',1,2), - ('R_TH_0207_6xø2.3mm_0.25W',1,1), - ('R_TH_0104_3.3xø1.8mm_0.125W',1,1), - ('R_TH_0309_9xø3.2mm_0.5W',1,1), - ('R_TH_0412_11.5xø4.5mm_1W',1,1), - ('R_TH_0516_15.5xø5mm_2W',1,1); +INSERT INTO `#__depot_package` (`name`,`description`,`state`,`mounting_style_id`) VALUES + ('R_0603_1608Metric','1.6 x 0.8 mm',1,1), + ('R_0805_2012Metric','2.0 x 1.2 mm',1,1), + ('DIP8','dual inline package 8 pins',1,2), + ('DIP14','dual inline package 14 pins',1,2), + ('DIP16','dual inline package 16 pins',1,2), + ('DIP20','dual inline package 20 pins',1,2), + ('DIP28_SMALL','dual inline package 28 pins, small',1,2), + ('DO-35','DO-204-AH, SOD27, 3.05-5.08 x ø1.53-ø2.28 mm diode axial package',1,2), + ('DO-201AD','DO-27, 7.2-9.5 x ø4.8-ø5.3 mm diode axial package',1,2), + ('QFN-48-1EP_7x7mm_P0.5mm_EP5.6x5.6mm','Ultra thin Fine pitch Quad Flat Package No-leads, 7 x 7 mm, 0.5 mm pitch, 48 pins',1,1), + ('R_TH_0207','axial 6xø2.3mm typ. 0.25W',1,2), + ('R_TH_0104','axial 3.3xø1.8mm typ 0.125W',1,2), + ('R_TH_0309','axial 9xø3.2mm typ. 0.5W',1,2), + ('R_TH_0412','axial 11.5xø4.5mm typ. 1W',1,2), + ('R_TH_0516','axial 15.5xø5mm typ. 2W',1,2); + +DROP TABLE IF EXISTS `#__depot_mounting_style`; +CREATE TABLE `#__depot_mounting_style` ( + `id` SERIAL, + `title` VARCHAR(100) NOT NULL DEFAULT '', + `ordering` INT(11) NOT NULL DEFAULT 0, + PRIMARY KEY (`id`) +) ENGINE = InnoDB + AUTO_INCREMENT=0 + DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +INSERT INTO `#__depot_mounting_style` (`id`,`title`,`ordering`) VALUES + -- (0,'UNKNOWN',0), + (1,'SMD',1), + (2,'THD',2), + (3,'CHASSIS_MOUNT',3), + (4,'PRESS_FIT',4), + (5,'SCREW_MOUNT',5); diff --git a/admin/sql/uninstall.mysql.utf8.sql b/admin/sql/uninstall.mysql.utf8.sql index b170e5e..2185389 100644 --- a/admin/sql/uninstall.mysql.utf8.sql +++ b/admin/sql/uninstall.mysql.utf8.sql @@ -9,3 +9,4 @@ DROP TABLE IF EXISTS `#__depot`; DROP TABLE IF EXISTS `#__depot_manufacturer`; DROP TABLE IF EXISTS `#__depot_stock`; DROP TABLE IF EXISTS `#__depot_package`; +DROP TABLE IF EXISTS `#__depot_mounting_style`; diff --git a/admin/src/Controller/PackageController.php b/admin/src/Controller/PackageController.php new file mode 100644 index 0000000..e06a324 --- /dev/null +++ b/admin/src/Controller/PackageController.php @@ -0,0 +1,19 @@ + + * @copyright (C) 2023 KW4NZ, + * @license GNU General Public License version 2 or later; see LICENSE.md + * @since 0.9.7 + */ + +namespace KW4NZ\Component\Depot\Administrator\Controller; + +use Joomla\CMS\MVC\Controller\FormController; + +defined('_JEXEC') or die; + +class PackageController extends FormController +{ +} \ No newline at end of file diff --git a/admin/src/Model/PackageModel.php b/admin/src/Model/PackageModel.php new file mode 100644 index 0000000..f97f00d --- /dev/null +++ b/admin/src/Model/PackageModel.php @@ -0,0 +1,64 @@ + + * @copyright (C) 2023 KW4NZ, + * @license GNU General Public License version 2 or later; see LICENSE.md + * @since 0.9.7 + */ + +namespace KW4NZ\Component\Depot\Administrator\Model; + +use Joomla\CMS\Application\ApplicationHelper; +use Joomla\CMS\Factory; +use Joomla\CMS\MVC\Model\AdminModel; + +\defined('_JEXEC') or die; + +class PackageModel extends AdminModel +{ + public function getForm($data = [], $loadData = true) + { + $form = $this->loadForm('com_depot.package', 'package', ['control' => 'jform', 'load_data' => $loadData]); + + if (empty($form)) { + return false; + } + + return $form; + } + + protected function loadFormData() + { + $app = Factory::getApplication(); + $data = $app->getUserState('com_depot.edit.package.data', []); + + if (empty($data)) { + $data = $this->getItem(); + } + + return $data; + } + + public function save($data) + { + /* Add code to modify data before saving */ + + // if (Factory::getConfig()->get('unicodeslugs') == 1) { + // $data['alias'] = OutputFilter::stringURLUnicodeSlug($data['component_name']); + // } else { + // $data['alias'] = OutputFilter::stringURLSafe($data['component_name']); + // } + + /* replaced by: */ + if (empty($data['alias'])) { + $data['alias'] = ApplicationHelper::stringURLSafe($data['name']); + } + $result = parent::save($data); + // if ($result) { + // $this->getTable('', 'Administrator')->rebuild(1); + // } + return $result; + } +} \ No newline at end of file diff --git a/admin/src/Model/PackagesModel.php b/admin/src/Model/PackagesModel.php new file mode 100644 index 0000000..4907669 --- /dev/null +++ b/admin/src/Model/PackagesModel.php @@ -0,0 +1,86 @@ + + * @copyright (C) 2023 KW4NZ, + * @license GNU General Public License version 2 or later; see LICENSE.md + * @since 0.9.7 + */ + +namespace KW4NZ\Component\Depot\Administrator\Model; + +use Joomla\CMS\MVC\Model\ListModel; +// use Joomla\CMS\Table\Table; +use Joomla\Database\ParameterType; + +\defined('_JEXEC') or die; + +class PackagesModel extends ListModel +{ + /** + * Build an SQL query to load the list data. + * + * @return \Joomla\Database\DatabaseQuery + * + * @since 1.6 + */ + protected function getListQuery() + { + $db = $this->getDatabase(); + $query = $db->getQuery(true); + + + // $query->select('*') +// ->from($db->quoteName('#__depot', 'd')); + + // order by +// $query->order('d.id ASC'); +// if (true) { +// return $query; +// } + + // select the required fields from the table + $query->select( + $this->getState( + 'list.select', + [ + $db->quoteName('p.id'), + $db->quoteName('p.name'), + $db->quoteName('p.alias'), + $db->quoteName('p.description'), + $db->quoteName('p.image'), + $db->quoteName('p.state'), + ] + ) + ) + ->select( + [ + $db->quoteName('u.name', 'creator'), + $db->quoteName('ms.title', 'mounting_style'), + ] + ) + ->from($db->quoteName('#__depot_package', 'p')) + ->join('LEFT', $db->quoteName('#__users', 'u'), $db->quoteName('u.id') . ' = ' . $db->quoteName('p.checked_out')) + ->join('LEFT', $db->quoteName('#__depot_mounting_style', 'ms'), $db->quoteName('ms.id') . ' = ' . $db->quoteName('p.mounting_style_id')); + + // filter: like / search + $search = $this->getState('filter.search'); + if (!empty($search)) { + $like = $db->quote('%' . $search . '%'); + $query->where($db->quoteName('p.name') . ' LIKE ' . $like); + } + + // Filter by published state + $published = (string) $this->getState('filter.published'); + if (is_numeric($published)) { + $published = (int) $published; + $query->where($db->quoteName('p.state') . ' = :published') + ->bind(':published', $published, ParameterType::INTEGER); + } elseif ($published === '') { + $query->where($db->quoteName('p.state') . ' IN (0, 1)'); + } + + return $query; + } +} \ No newline at end of file diff --git a/admin/src/Model/PartsModel.php b/admin/src/Model/PartsModel.php index 2368fba..6aa5e93 100644 --- a/admin/src/Model/PartsModel.php +++ b/admin/src/Model/PartsModel.php @@ -52,6 +52,7 @@ class PartsModel extends ListModel $db->quoteName('d.quantity'), $db->quoteName('d.quantity_exp'), $db->quoteName('d.ordering'), + $db->quoteName('d.package_id'), ] ) ) @@ -61,13 +62,17 @@ class PartsModel extends ListModel $db->quoteName('m.name_short', 'manufacturer'), $db->quoteName('m.name_long', 'manufacturer_long'), $db->quoteName('s.name', 'stock_name'), + $db->quoteName('p.name', 'package_name'), + $db->quoteName('p.description', 'package_description'), + $db->quoteName('ms.title', 'mounting_style'), ] ) ->from($db->quoteName('#__depot', 'd')) ->join('LEFT', $db->quoteName('#__depot_manufacturer', 'm'), $db->quoteName('m.id') . ' = ' . $db->quoteName('d.manufacturer_id')) ->join('LEFT', $db->quoteName('#__depot_stock', 's'), $db->quoteName('s.id') . ' = ' . $db->quoteName('d.stock_id')) - ->join('LEFT', $db->quoteName('#__users', 'u'), $db->quoteName('u.id') . ' = ' . $db->quoteName('d.checked_out')); - + ->join('LEFT', $db->quoteName('#__depot_package', 'p'), $db->quoteName('p.id') . ' = ' . $db->quoteName('d.package_id')) + ->join('LEFT', $db->quoteName('#__users', 'u'), $db->quoteName('u.id') . ' = ' . $db->quoteName('d.checked_out')) + ->join('LEFT', $db->quoteName('#__depot_mounting_style', 'ms'), $db->quoteName('ms.id') . ' = ' . $db->quoteName('p.mounting_style_id')); // filter: like / search $search = $this->getState('filter.search'); if (!empty($search)) { diff --git a/admin/src/Table/ManufacturerTable.php b/admin/src/Table/ManufacturerTable.php index c9598fc..7b18e51 100644 --- a/admin/src/Table/ManufacturerTable.php +++ b/admin/src/Table/ManufacturerTable.php @@ -70,5 +70,4 @@ class ManufacturerTable extends Table return parent::store($updateNulls); } - } \ No newline at end of file diff --git a/admin/src/Table/PackageTable.php b/admin/src/Table/PackageTable.php new file mode 100644 index 0000000..6b91bdc --- /dev/null +++ b/admin/src/Table/PackageTable.php @@ -0,0 +1,73 @@ + + * @copyright (C) 2023 KW4NZ, + * @license GNU General Public License version 2 or later; see LICENSE.md + * @since 0.9.7 + */ + +namespace KW4NZ\Component\Depot\Administrator\Table; + +use Joomla\CMS\Factory; +use Joomla\CMS\Table\Table; +use Joomla\Database\DatabaseDriver; + +\defined('_JEXEC') or die; + +class PackageTable extends Table +{ + function __construct(DatabaseDriver $db) + { + parent::__construct('#__depot_package', 'id', $db); + + // add an alias for published: + $this->setColumnAlias('published', 'state'); + } + + public function store($updateNulls = true) + { + $app = Factory::getApplication(); + $date = Factory::getDate()->toSql(); + // $user = Factory::getUser(); + // $user = $this->getCurrentUser(); + $user = $app->getIdentity(); + + if (!$this->created) { + $this->created = $date; + } + + if (!$this->created_by) { + $this->created_by = $user->get('id'); + } + + if ($this->id) { + // existing item + $this->modified_by = $user->get('id'); + $this->modified = $date; + } else { + // set modified to created date if not set + if (!$this->modified) { + $this->modified = $this->created; + } + if (empty($this->modified_by)) { + $this->modified_by = $this->created_by; + } + } + + // Verify that the alias is unique + $table = $app->bootComponent('com_depot')->getMVCFactory()->createTable('Package', 'Administrator'); + if ($table->load(['alias' => $this->alias]) && ($table->id != $this->id || $this->id == 0)) { + $this->setError('Alias is not unique.'); + + if ($table->state == -2) { + $this->setError('Alias is not unique. The item is in Trash.'); + } + + return false; + } + + return parent::store($updateNulls); + } +} \ No newline at end of file diff --git a/admin/src/View/Package/HtmlView.php b/admin/src/View/Package/HtmlView.php new file mode 100644 index 0000000..6322bc6 --- /dev/null +++ b/admin/src/View/Package/HtmlView.php @@ -0,0 +1,75 @@ + + * @copyright (C) 2023 KW4NZ, + * @license GNU General Public License version 2 or later; see LICENSE.md + * @since 0.9.7 + */ + +namespace KW4NZ\Component\Depot\Administrator\View\Package; + +use Joomla\CMS\Factory; +// use Joomla\CMS\MVC\View\GenericDataException; +use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView; +use Joomla\CMS\Toolbar\Toolbar; +use Joomla\CMS\Toolbar\ToolbarHelper; + +\defined('_JEXEC') or die; + +/** + * View to edit an article. + * + * @since 1.6 + */ +class HtmlView extends BaseHtmlView +{ + /** + * The \JForm object + * + * @var \JForm + */ + protected $form; + + /** + * The active item + * + * @var object + */ + protected $item; + + /** + * Execute and display a template script. + * + * @param string $tpl The name of the template file to parse; automatically searches through the template paths. + * + * @return mixed A string if successful, otherwise an Error object. + * + * @throws \Exception + * @since 1.6 + */ + public function display($tpl = null) + { + $this->form = $this->get('Form'); + $this->item = $this->get('Item'); + + // if (count($errors = $this->get('Errors'))) { + // throw new GenericDataException(implode("\n", $errors), 500); + // } + $this->addToolbar(); + + return parent::display($tpl); + } + + protected function addToolbar() + { + Factory::getApplication()->getInput()->set('hidemainmenu', true); + + ToolbarHelper::title('Package: Add'); + + ToolbarHelper::apply('package.apply'); + ToolbarHelper::save('package.save'); + ToolbarHelper::cancel('package.cancel', 'JTOOLBAR_CLOSE'); + } +} \ No newline at end of file diff --git a/admin/src/View/Packages/HtmlView.php b/admin/src/View/Packages/HtmlView.php new file mode 100644 index 0000000..1459912 --- /dev/null +++ b/admin/src/View/Packages/HtmlView.php @@ -0,0 +1,51 @@ + + * @copyright (C) 2023 KW4NZ, + * @license GNU General Public License version 2 or later; see LICENSE.md + * @since 0.9.7 + */ + +namespace KW4NZ\Component\Depot\Administrator\View\Packages; + +defined('_JEXEC') or die; + +use Joomla\CMS\Factory; +use Joomla\CMS\Language\Text; +use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView; +// use Joomla\CMS\Toolbar; +use Joomla\CMS\Toolbar\ToolbarHelper; + +// use Joomla\CMS\Language\Text; + + +class HtmlView extends BaseHtmlView +{ + public function display($tpl = null) + { + // Get application + $app = Factory::getApplication(); + + $this->items = $this->get('Items'); + + // adding filters + $this->filterForm = $this->get('FilterForm'); + $this->activeFilters = $this->get('ActiveFilters'); + + // set the toolbar + $this->addToolbar(); + + parent::display($tpl); + } + + protected function addToolbar() + { + ToolbarHelper::title(Text::_('COM_DEPOT_MANAGER_PACKAGES')); + ToolbarHelper::addNew('package.add'); + ToolbarHelper::deleteList('JGLOBAL_CONFIRM_DELETE', 'packages.delete'); + ToolbarHelper::publish('packages.publish', 'JTOOLBAR_PUBLISH', true); + ToolbarHelper::unpublish('packages.unpublish', 'JTOOLBAR_UNPUBLISH', true); + } +} \ No newline at end of file diff --git a/admin/tmpl/package/edit.php b/admin/tmpl/package/edit.php new file mode 100644 index 0000000..c13cb99 --- /dev/null +++ b/admin/tmpl/package/edit.php @@ -0,0 +1,62 @@ + + * @copyright (C) 2023 KW4NZ, + * @license GNU General Public License version 2 or later; see LICENSE.md + * @since 0.9.7 + */ +use Joomla\CMS\HTML\HTMLHelper; +use Joomla\CMS\Language\Text; +use Joomla\CMS\Router\Route; + +/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */ +$wa = $this->document->getWebAssetManager(); +$wa->useScript('form.validate') + ->useScript('keepalive'); + +?> +
+ 'details']); ?> + item->id) ? Text::_('COM_DEPOT_TAB_NEW_PACKAGE') : + Text::_('COM_DEPOT_TAB_EDIT_PACKAGE') + ); ?> +
+ + + +
+
+ form->renderFieldset('details'); ?> +
+
+ form->getInput('description'); ?> +
+
+
+ + + +
+ + + +
+
+ form->renderFieldset('statistics'); ?> +
+
+
+ + + + + + +
\ No newline at end of file diff --git a/admin/tmpl/packages/default.php b/admin/tmpl/packages/default.php new file mode 100644 index 0000000..f392661 --- /dev/null +++ b/admin/tmpl/packages/default.php @@ -0,0 +1,81 @@ + + * @copyright (C) 2023 KW4NZ, + * @license GNU General Public License version 2 or later; see LICENSE.md + * @since 0.9.7 + */ + +use Joomla\CMS\HTML\HTMLHelper; +use Joomla\CMS\Language\Text; +use Joomla\CMS\Router\Route; +use Joomla\CMS\Layout\LayoutHelper; + +?> +
+ + $this]); ?> + + items)): ?> +
+ + +
+ + + + + + + + + + + + + + items as $i => $item): ?> + + + + + + + + + +
+ + + + + + + + + +
+ id); ?> + + id ?> + + + escape($item->name); ?> + + + escape($item->description); ?> + + escape($item->mounting_style); ?> +
+ + + + + + +
\ No newline at end of file diff --git a/admin/tmpl/parts/default.php b/admin/tmpl/parts/default.php index b26f825..e57a69b 100644 --- a/admin/tmpl/parts/default.php +++ b/admin/tmpl/parts/default.php @@ -62,10 +62,24 @@ use Joomla\CMS\Layout\LayoutHelper; id ?> - - escape($item->component_name); ?> - + +
+ package_name; ?> + mounting_style)): ?> +
+ + mounting_style, + Text::_('COM_DEPOT_LIST_MOUNTING_STYLE_UNKNOWN') + ); ?> +
+ +
escape($item->quantity); ?> diff --git a/depot.xml b/depot.xml index 63393c4..fac6938 100644 --- a/depot.xml +++ b/depot.xml @@ -7,7 +7,7 @@ GPL v2 +; see LICENSE.md thomas@kuschel.at https://kuschel.at - 0.9.6 + 0.9.7 COM_DEPOT_XML_DESCRIPTION KW4NZ\Component\Depot @@ -61,6 +61,14 @@ > COM_DEPOT_MENU_STOCKS + + COM_DEPOT_MENU_PACKAGES + forms @@ -72,6 +80,8 @@ en-GB/com_depot.ini en-GB/com_depot.sys.ini + de-DE/com_depot.ini + de-DE/com_depot.sys.ini