From 57a7598261378002dfc8cfbb09ebbd91b657ecb7 Mon Sep 17 00:00:00 2001 From: solocla Date: Mon, 15 Jun 2026 16:10:44 +0200 Subject: [PATCH] dashboard and first pages --- ...03_create_user_dashboard_layouts_table.php | 39 + ...25715_create_sample_master_data_tables.php | 427 +++ public/userarea/brands.php | 1108 +++++++ public/userarea/business-partners.php | 1988 +++++++++++++ public/userarea/companies.php | 1223 ++++++++ public/userarea/company-users.php | 1651 +++++++++++ public/userarea/dashboard-admin.php | 1419 +++++++++ public/userarea/dashboard-customer.php | 2002 +++++++++++++ public/userarea/departments.php | 1230 ++++++++ public/userarea/sample-detail.php | 2560 +++++++++++++++++ public/userarea/samples.php | 1970 +++++++++++++ ...55635_EuropeRome_Invoice-B8DDF571-0034.pdf | Bin 0 -> 31843 bytes ...e_1e672dd9-5420-4432-b422-02d8d271c178.jpg | Bin 0 -> 219157 bytes 13 files changed, 15617 insertions(+) create mode 100644 db/migrations/20260615102103_create_user_dashboard_layouts_table.php create mode 100644 db/migrations/20260615125715_create_sample_master_data_tables.php create mode 100644 public/userarea/brands.php create mode 100644 public/userarea/business-partners.php create mode 100644 public/userarea/companies.php create mode 100644 public/userarea/company-users.php create mode 100644 public/userarea/dashboard-admin.php create mode 100644 public/userarea/dashboard-customer.php create mode 100644 public/userarea/departments.php create mode 100644 public/userarea/sample-detail.php create mode 100644 public/userarea/samples.php create mode 100644 public/userarea/uploads/trfgo/company_1/samples/1/documents/document_c1_s1_20260615_155635_EuropeRome_Invoice-B8DDF571-0034.pdf create mode 100644 public/userarea/uploads/trfgo/company_1/samples/1/photos/photo_c1_s1_20260615_153850_EuropeRome_1e672dd9-5420-4432-b422-02d8d271c178.jpg diff --git a/db/migrations/20260615102103_create_user_dashboard_layouts_table.php b/db/migrations/20260615102103_create_user_dashboard_layouts_table.php new file mode 100644 index 00000000..ff014312 --- /dev/null +++ b/db/migrations/20260615102103_create_user_dashboard_layouts_table.php @@ -0,0 +1,39 @@ +hasTable('user_dashboard_layouts')) { + $this->execute(" + CREATE TABLE `user_dashboard_layouts` ( + `idlayout` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `iduser` INT(10) UNSIGNED NOT NULL, + `page` VARCHAR(100) NOT NULL DEFAULT 'dashboard', + `layout_json` LONGTEXT NOT NULL, + `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`idlayout`), + UNIQUE KEY `uq_user_dashboard_page` (`iduser`, `page`), + KEY `idx_dashboard_page` (`page`), + CONSTRAINT `fk_dashboard_layout_user` + FOREIGN KEY (`iduser`) + REFERENCES `auth_users` (`id`) + ON DELETE CASCADE + ON UPDATE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + "); + } + } + + public function down(): void + { + if ($this->hasTable('user_dashboard_layouts')) { + $this->table('user_dashboard_layouts')->drop()->save(); + } + } +} diff --git a/db/migrations/20260615125715_create_sample_master_data_tables.php b/db/migrations/20260615125715_create_sample_master_data_tables.php new file mode 100644 index 00000000..c41ca4d7 --- /dev/null +++ b/db/migrations/20260615125715_create_sample_master_data_tables.php @@ -0,0 +1,427 @@ +hasTable('business_partners')) { + $this->execute(" + CREATE TABLE `business_partners` ( + `idpartner` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `idcompany` INT(10) UNSIGNED NOT NULL, + `partner_type` ENUM( + 'producer', + 'manufacturer', + 'supplier', + 'vendor', + 'factory', + 'agent', + 'invoice_to', + 'report_to', + 'laboratory', + 'other' + ) NOT NULL DEFAULT 'supplier', + `partner_name` VARCHAR(255) NOT NULL, + `legal_name` VARCHAR(255) DEFAULT NULL, + `external_code` VARCHAR(100) DEFAULT NULL, + `vat_number` VARCHAR(80) DEFAULT NULL, + `tax_code` VARCHAR(80) DEFAULT NULL, + `address` VARCHAR(255) DEFAULT NULL, + `city` VARCHAR(120) DEFAULT NULL, + `zip` VARCHAR(50) DEFAULT NULL, + `country_id` INT(10) UNSIGNED DEFAULT NULL, + `email` VARCHAR(191) DEFAULT NULL, + `phone` VARCHAR(80) DEFAULT NULL, + `website` VARCHAR(255) DEFAULT NULL, + `notes` TEXT DEFAULT NULL, + `status` ENUM('active','inactive','suspended') NOT NULL DEFAULT 'active', + `created_by` INT(10) UNSIGNED DEFAULT NULL, + `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`idpartner`), + KEY `idx_partner_company` (`idcompany`), + KEY `idx_partner_type` (`partner_type`), + KEY `idx_partner_name` (`partner_name`), + KEY `idx_partner_external_code` (`external_code`), + KEY `idx_partner_status` (`status`), + KEY `idx_partner_country` (`country_id`), + KEY `idx_partner_created_by` (`created_by`), + CONSTRAINT `fk_partner_company` + FOREIGN KEY (`idcompany`) REFERENCES `companies` (`idcompany`) + ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_partner_country` + FOREIGN KEY (`country_id`) REFERENCES `auth_countries` (`id`) + ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `fk_partner_created_by` + FOREIGN KEY (`created_by`) REFERENCES `auth_users` (`id`) + ON DELETE SET NULL ON UPDATE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + "); + } + + /* + * Contacts linked to business partners. + */ + if (!$this->hasTable('business_partner_contacts')) { + $this->execute(" + CREATE TABLE `business_partner_contacts` ( + `idcontact` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `idpartner` INT(10) UNSIGNED NOT NULL, + `contact_name` VARCHAR(255) NOT NULL, + `role` VARCHAR(120) DEFAULT NULL, + `email` VARCHAR(191) DEFAULT NULL, + `phone` VARCHAR(80) DEFAULT NULL, + `mobile` VARCHAR(80) DEFAULT NULL, + `is_primary` TINYINT(1) NOT NULL DEFAULT 0, + `notes` TEXT DEFAULT NULL, + `status` ENUM('active','inactive') NOT NULL DEFAULT 'active', + `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`idcontact`), + KEY `idx_contact_partner` (`idpartner`), + KEY `idx_contact_email` (`email`), + KEY `idx_contact_primary` (`is_primary`), + CONSTRAINT `fk_contact_partner` + FOREIGN KEY (`idpartner`) REFERENCES `business_partners` (`idpartner`) + ON DELETE CASCADE ON UPDATE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + "); + } + + /* + * Samples / products master data. + */ + if (!$this->hasTable('samples')) { + $this->execute(" + CREATE TABLE `samples` ( + `idsample` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `idcompany` INT(10) UNSIGNED NOT NULL, + `idbrand` INT(10) UNSIGNED DEFAULT NULL, + `iddepartment` INT(10) UNSIGNED DEFAULT NULL, + `idproducer` INT(10) UNSIGNED DEFAULT NULL, + `idsupplier` INT(10) UNSIGNED DEFAULT NULL, + `sample_code` VARCHAR(120) NOT NULL, + `external_sample_id` VARCHAR(120) DEFAULT NULL, + `article_no` VARCHAR(150) DEFAULT NULL, + `po_no` VARCHAR(255) DEFAULT NULL, + `season` VARCHAR(120) DEFAULT NULL, + `style_no` VARCHAR(150) DEFAULT NULL, + `style_name` VARCHAR(255) DEFAULT NULL, + `model` VARCHAR(255) DEFAULT NULL, + `sample_description` VARCHAR(255) NOT NULL, + `product_category` VARCHAR(150) DEFAULT NULL, + `product_type` VARCHAR(150) DEFAULT NULL, + `color` VARCHAR(120) DEFAULT NULL, + `size` VARCHAR(120) DEFAULT NULL, + `gender` VARCHAR(80) DEFAULT NULL, + `age_group` VARCHAR(80) DEFAULT NULL, + `fiber_content` TEXT DEFAULT NULL, + `material_description` TEXT DEFAULT NULL, + `claimed_weight` VARCHAR(120) DEFAULT NULL, + `product_standard` VARCHAR(255) DEFAULT NULL, + `production_stage` VARCHAR(120) DEFAULT NULL, + `country_of_origin` INT(10) UNSIGNED DEFAULT NULL, + `status` ENUM( + 'draft', + 'active', + 'archived', + 'submitted', + 'under_testing', + 'completed', + 'cancelled' + ) NOT NULL DEFAULT 'draft', + `source` ENUM('manual','xls_import','json_import','api','smarttrf') NOT NULL DEFAULT 'manual', + `raw_json` LONGTEXT DEFAULT NULL, + `created_by` INT(10) UNSIGNED DEFAULT NULL, + `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`idsample`), + UNIQUE KEY `uq_sample_company_code` (`idcompany`, `sample_code`), + KEY `idx_sample_company` (`idcompany`), + KEY `idx_sample_brand` (`idbrand`), + KEY `idx_sample_department` (`iddepartment`), + KEY `idx_sample_producer` (`idproducer`), + KEY `idx_sample_supplier` (`idsupplier`), + KEY `idx_sample_article` (`article_no`), + KEY `idx_sample_external` (`external_sample_id`), + KEY `idx_sample_status` (`status`), + KEY `idx_sample_created_by` (`created_by`), + CONSTRAINT `fk_sample_company` + FOREIGN KEY (`idcompany`) REFERENCES `companies` (`idcompany`) + ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_sample_brand` + FOREIGN KEY (`idbrand`) REFERENCES `brands` (`idbrand`) + ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `fk_sample_department` + FOREIGN KEY (`iddepartment`) REFERENCES `departments` (`iddepartment`) + ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `fk_sample_producer` + FOREIGN KEY (`idproducer`) REFERENCES `business_partners` (`idpartner`) + ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `fk_sample_supplier` + FOREIGN KEY (`idsupplier`) REFERENCES `business_partners` (`idpartner`) + ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `fk_sample_origin_country` + FOREIGN KEY (`country_of_origin`) REFERENCES `auth_countries` (`id`) + ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `fk_sample_created_by` + FOREIGN KEY (`created_by`) REFERENCES `auth_users` (`id`) + ON DELETE SET NULL ON UPDATE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + "); + } + + /* + * Sample status history. + */ + if (!$this->hasTable('sample_status_history')) { + $this->execute(" + CREATE TABLE `sample_status_history` ( + `idhistory` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `idsample` INT(10) UNSIGNED NOT NULL, + `old_status` VARCHAR(80) DEFAULT NULL, + `new_status` VARCHAR(80) NOT NULL, + `note` TEXT DEFAULT NULL, + `changed_by` INT(10) UNSIGNED DEFAULT NULL, + `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`idhistory`), + KEY `idx_history_sample` (`idsample`), + KEY `idx_history_changed_by` (`changed_by`), + CONSTRAINT `fk_sample_history_sample` + FOREIGN KEY (`idsample`) REFERENCES `samples` (`idsample`) + ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_sample_history_user` + FOREIGN KEY (`changed_by`) REFERENCES `auth_users` (`id`) + ON DELETE SET NULL ON UPDATE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + "); + } + + /* + * Sample photos. + */ + if (!$this->hasTable('sample_photos')) { + $this->execute(" + CREATE TABLE `sample_photos` ( + `idsamplephoto` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `idsample` INT(10) UNSIGNED NOT NULL, + `photo_type` ENUM('main','product','label','packaging','warning','detail','other') NOT NULL DEFAULT 'product', + `filename` VARCHAR(255) NOT NULL, + `original_filename` VARCHAR(255) DEFAULT NULL, + `description` TEXT DEFAULT NULL, + `is_main` TINYINT(1) NOT NULL DEFAULT 0, + `sort_order` INT(11) NOT NULL DEFAULT 0, + `uploaded_by` INT(10) UNSIGNED DEFAULT NULL, + `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`idsamplephoto`), + KEY `idx_sample_photo_sample` (`idsample`), + KEY `idx_sample_photo_type` (`photo_type`), + KEY `idx_sample_photo_uploaded_by` (`uploaded_by`), + CONSTRAINT `fk_sample_photo_sample` + FOREIGN KEY (`idsample`) REFERENCES `samples` (`idsample`) + ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_sample_photo_user` + FOREIGN KEY (`uploaded_by`) REFERENCES `auth_users` (`id`) + ON DELETE SET NULL ON UPDATE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + "); + } + + /* + * Sample parts / BOM. + */ + if (!$this->hasTable('sample_parts')) { + $this->execute(" + CREATE TABLE `sample_parts` ( + `idpart` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `idsample` INT(10) UNSIGNED NOT NULL, + `parent_idpart` INT(10) UNSIGNED DEFAULT NULL, + `part_code` VARCHAR(120) DEFAULT NULL, + `part_name` VARCHAR(255) NOT NULL, + `part_description` TEXT DEFAULT NULL, + `material` VARCHAR(255) DEFAULT NULL, + `color` VARCHAR(120) DEFAULT NULL, + `quantity` DECIMAL(12,4) DEFAULT NULL, + `unit` VARCHAR(50) DEFAULT NULL, + `supplier_id` INT(10) UNSIGNED DEFAULT NULL, + `producer_id` INT(10) UNSIGNED DEFAULT NULL, + `position` VARCHAR(120) DEFAULT NULL, + `risk_level` ENUM('low','medium','high','critical','unknown') NOT NULL DEFAULT 'unknown', + `notes` TEXT DEFAULT NULL, + `sort_order` INT(11) NOT NULL DEFAULT 0, + `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`idpart`), + KEY `idx_part_sample` (`idsample`), + KEY `idx_part_parent` (`parent_idpart`), + KEY `idx_part_supplier` (`supplier_id`), + KEY `idx_part_producer` (`producer_id`), + KEY `idx_part_risk` (`risk_level`), + CONSTRAINT `fk_part_sample` + FOREIGN KEY (`idsample`) REFERENCES `samples` (`idsample`) + ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_part_parent` + FOREIGN KEY (`parent_idpart`) REFERENCES `sample_parts` (`idpart`) + ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `fk_part_supplier` + FOREIGN KEY (`supplier_id`) REFERENCES `business_partners` (`idpartner`) + ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `fk_part_producer` + FOREIGN KEY (`producer_id`) REFERENCES `business_partners` (`idpartner`) + ON DELETE SET NULL ON UPDATE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + "); + } + + /* + * Sample part photos. + */ + if (!$this->hasTable('sample_part_photos')) { + $this->execute(" + CREATE TABLE `sample_part_photos` ( + `idpartphoto` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `idpart` INT(10) UNSIGNED NOT NULL, + `filename` VARCHAR(255) NOT NULL, + `original_filename` VARCHAR(255) DEFAULT NULL, + `description` TEXT DEFAULT NULL, + `is_main` TINYINT(1) NOT NULL DEFAULT 0, + `sort_order` INT(11) NOT NULL DEFAULT 0, + `uploaded_by` INT(10) UNSIGNED DEFAULT NULL, + `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`idpartphoto`), + KEY `idx_part_photo_part` (`idpart`), + KEY `idx_part_photo_uploaded_by` (`uploaded_by`), + CONSTRAINT `fk_part_photo_part` + FOREIGN KEY (`idpart`) REFERENCES `sample_parts` (`idpart`) + ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_part_photo_user` + FOREIGN KEY (`uploaded_by`) REFERENCES `auth_users` (`id`) + ON DELETE SET NULL ON UPDATE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + "); + } + + /* + * Generic documents. + */ + if (!$this->hasTable('documents')) { + $this->execute(" + CREATE TABLE `documents` ( + `iddocument` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `idcompany` INT(10) UNSIGNED NOT NULL, + `document_type` ENUM( + 'technical_sheet', + 'declaration', + 'bom', + 'photo', + 'certificate', + 'test_report', + 'supplier_document', + 'invoice', + 'manual', + 'other' + ) NOT NULL DEFAULT 'other', + `title` VARCHAR(255) NOT NULL, + `filename` VARCHAR(255) NOT NULL, + `original_filename` VARCHAR(255) DEFAULT NULL, + `mime_type` VARCHAR(120) DEFAULT NULL, + `file_size` BIGINT(20) UNSIGNED DEFAULT NULL, + `expiry_date` DATE DEFAULT NULL, + `status` ENUM('active','expired','archived') NOT NULL DEFAULT 'active', + `notes` TEXT DEFAULT NULL, + `uploaded_by` INT(10) UNSIGNED DEFAULT NULL, + `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`iddocument`), + KEY `idx_document_company` (`idcompany`), + KEY `idx_document_type` (`document_type`), + KEY `idx_document_status` (`status`), + KEY `idx_document_expiry` (`expiry_date`), + KEY `idx_document_uploaded_by` (`uploaded_by`), + CONSTRAINT `fk_document_company` + FOREIGN KEY (`idcompany`) REFERENCES `companies` (`idcompany`) + ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_document_uploaded_by` + FOREIGN KEY (`uploaded_by`) REFERENCES `auth_users` (`id`) + ON DELETE SET NULL ON UPDATE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + "); + } + + /* + * Documents linked to samples. + */ + if (!$this->hasTable('sample_documents')) { + $this->execute(" + CREATE TABLE `sample_documents` ( + `idsampledocument` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `idsample` INT(10) UNSIGNED NOT NULL, + `iddocument` INT(10) UNSIGNED NOT NULL, + `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`idsampledocument`), + UNIQUE KEY `uq_sample_document` (`idsample`, `iddocument`), + KEY `idx_sample_document_document` (`iddocument`), + CONSTRAINT `fk_sample_document_sample` + FOREIGN KEY (`idsample`) REFERENCES `samples` (`idsample`) + ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_sample_document_document` + FOREIGN KEY (`iddocument`) REFERENCES `documents` (`iddocument`) + ON DELETE CASCADE ON UPDATE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + "); + } + + /* + * Documents linked to sample parts. + */ + if (!$this->hasTable('sample_part_documents')) { + $this->execute(" + CREATE TABLE `sample_part_documents` ( + `idpartdocument` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `idpart` INT(10) UNSIGNED NOT NULL, + `iddocument` INT(10) UNSIGNED NOT NULL, + `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`idpartdocument`), + UNIQUE KEY `uq_part_document` (`idpart`, `iddocument`), + KEY `idx_part_document_document` (`iddocument`), + CONSTRAINT `fk_part_document_part` + FOREIGN KEY (`idpart`) REFERENCES `sample_parts` (`idpart`) + ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_part_document_document` + FOREIGN KEY (`iddocument`) REFERENCES `documents` (`iddocument`) + ON DELETE CASCADE ON UPDATE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + "); + } + } + + public function down(): void + { + $tables = [ + 'sample_part_documents', + 'sample_documents', + 'documents', + 'sample_part_photos', + 'sample_parts', + 'sample_photos', + 'sample_status_history', + 'samples', + 'business_partner_contacts', + 'business_partners', + ]; + + foreach ($tables as $table) { + if ($this->hasTable($table)) { + $this->table($table)->drop()->save(); + } + } + } +} diff --git a/public/userarea/brands.php b/public/userarea/brands.php new file mode 100644 index 00000000..304c1bbf --- /dev/null +++ b/public/userarea/brands.php @@ -0,0 +1,1108 @@ + + + false, + 'message' => 'Company is required.' + ]); + } + + if ($brandName === '') { + jsonResponse([ + 'success' => false, + 'message' => 'Brand name is required.' + ]); + } + + if (!in_array($status, $allowedStatuses, true)) { + $status = 'active'; + } + + /* + * Check company exists + */ + $stmt = $db->prepare("SELECT COUNT(*) FROM companies WHERE idcompany = :idcompany"); + $stmt->execute([':idcompany' => $idcompany]); + + if ((int) $stmt->fetchColumn() === 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Selected company does not exist.' + ]); + } + + if ($idbrand > 0) { + $sql = " + UPDATE brands + SET + idcompany = :idcompany, + brand_name = :brand_name, + external_brand_code = :external_brand_code, + status = :status, + updated_at = NOW() + WHERE idbrand = :idbrand + "; + + $stmt = $db->prepare($sql); + $stmt->execute([ + ':idcompany' => $idcompany, + ':brand_name' => $brandName, + ':external_brand_code' => $externalBrandCode !== '' ? $externalBrandCode : null, + ':status' => $status, + ':idbrand' => $idbrand, + ]); + + jsonResponse([ + 'success' => true, + 'message' => 'Brand updated successfully.' + ]); + } + + $sql = " + INSERT INTO brands ( + idcompany, + brand_name, + external_brand_code, + status, + created_at, + updated_at + ) VALUES ( + :idcompany, + :brand_name, + :external_brand_code, + :status, + NOW(), + NOW() + ) + "; + + $stmt = $db->prepare($sql); + $stmt->execute([ + ':idcompany' => $idcompany, + ':brand_name' => $brandName, + ':external_brand_code' => $externalBrandCode !== '' ? $externalBrandCode : null, + ':status' => $status, + ]); + + jsonResponse([ + 'success' => true, + 'message' => 'Brand created successfully.' + ]); + } + + if ($action === 'get_brand') { + $idbrand = isset($_POST['idbrand']) ? (int) $_POST['idbrand'] : 0; + + if ($idbrand <= 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Invalid brand id.' + ]); + } + + $stmt = $db->prepare(" + SELECT * + FROM brands + WHERE idbrand = :idbrand + LIMIT 1 + "); + $stmt->execute([':idbrand' => $idbrand]); + $brand = $stmt->fetch(PDO::FETCH_ASSOC); + + if (!$brand) { + jsonResponse([ + 'success' => false, + 'message' => 'Brand not found.' + ]); + } + + jsonResponse([ + 'success' => true, + 'brand' => $brand + ]); + } + + if ($action === 'change_status') { + $idbrand = isset($_POST['idbrand']) ? (int) $_POST['idbrand'] : 0; + $status = $_POST['status'] ?? 'inactive'; + + $allowedStatuses = ['active', 'inactive']; + + if ($idbrand <= 0 || !in_array($status, $allowedStatuses, true)) { + jsonResponse([ + 'success' => false, + 'message' => 'Invalid request.' + ]); + } + + $stmt = $db->prepare(" + UPDATE brands + SET status = :status, updated_at = NOW() + WHERE idbrand = :idbrand + "); + $stmt->execute([ + ':status' => $status, + ':idbrand' => $idbrand, + ]); + + jsonResponse([ + 'success' => true, + 'message' => 'Brand status updated successfully.' + ]); + } + + if ($action === 'delete_brand') { + $idbrand = isset($_POST['idbrand']) ? (int) $_POST['idbrand'] : 0; + + if ($idbrand <= 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Invalid brand id.' + ]); + } + + /* + * Safe delete rule: + * Do not delete a brand if it has linked departments or users. + */ + $stmt = $db->prepare(" + SELECT + (SELECT COUNT(*) FROM departments WHERE idbrand = :idbrand1) AS departments_count, + (SELECT COUNT(*) FROM company_users WHERE idbrand = :idbrand2) AS users_count + "); + $stmt->execute([ + ':idbrand1' => $idbrand, + ':idbrand2' => $idbrand, + ]); + + $usage = $stmt->fetch(PDO::FETCH_ASSOC); + + if (((int) $usage['departments_count'] > 0) || ((int) $usage['users_count'] > 0)) { + jsonResponse([ + 'success' => false, + 'message' => 'This brand has linked departments or users. Set it as inactive instead of deleting it.' + ]); + } + + $stmt = $db->prepare(" + DELETE FROM brands + WHERE idbrand = :idbrand + "); + $stmt->execute([':idbrand' => $idbrand]); + + jsonResponse([ + 'success' => true, + 'message' => 'Brand deleted successfully.' + ]); + } + + jsonResponse([ + 'success' => false, + 'message' => 'Unknown action.' + ]); + } catch (Throwable $e) { + jsonResponse([ + 'success' => false, + 'message' => $e->getMessage() + ]); + } +} + +/* + * Page data + */ +$companies = []; + +try { + $stmt = $db->query(" + SELECT idcompany, company_name, status + FROM companies + ORDER BY company_name ASC + "); + $companies = $stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (Throwable $e) { + $companies = []; +} + +$brands = []; + +try { + $stmt = $db->query(" + SELECT + b.idbrand, + b.idcompany, + b.brand_name, + b.external_brand_code, + b.status, + b.created_at, + c.company_name, + c.status AS company_status, + COUNT(DISTINCT d.iddepartment) AS department_count, + COUNT(DISTINCT cu.idcompanyuser) AS user_count + FROM brands b + INNER JOIN companies c ON c.idcompany = b.idcompany + LEFT JOIN departments d ON d.idbrand = b.idbrand + LEFT JOIN company_users cu ON cu.idbrand = b.idbrand + GROUP BY + b.idbrand, + b.idcompany, + b.brand_name, + b.external_brand_code, + b.status, + b.created_at, + c.company_name, + c.status + ORDER BY c.company_name ASC, b.brand_name ASC + "); + $brands = $stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (Throwable $e) { + $brands = []; +} + +$pageTitle = 'Brands'; +?> + + + + + + + + + + + + <?= e($pageTitle); ?> - <?= isset($titlewebsite) ? e($titlewebsite) : 'TRFgo'; ?> + + + + + +
+ + + +
+
+ +
+
+
+
+
+ + TRFgo Registry +
+

Brands

+

+ Manage brands and divisions linked to customer companies. + Brands help organize samples, TRF requests, departments and user access. +

+
+ +
+ +
+
+
+
+ + $row['status'] === 'active')); + $inactiveBrands = count(array_filter($brands, fn($row) => $row['status'] === 'inactive')); + ?> + +
+
+
+
+
+
+
Total Brands
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+
Active
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+
Inactive
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
Brand List
+

Brands and divisions configured for customer companies

+
+ + +
+
+ +
+ +
+ No companies available. + Create at least one company before adding brands. +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BrandCompanyExternal CodeDepartmentsUsersStatusCreatedActions
+
+
ID:
+
+
+ +
Company status:
+ +
+ -'; ?> + + + + + + + + + + + + + Active + + Inactive + + + + + + + + + + + + + +
+
+
+
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + \ No newline at end of file diff --git a/public/userarea/business-partners.php b/public/userarea/business-partners.php new file mode 100644 index 00000000..abb14f76 --- /dev/null +++ b/public/userarea/business-partners.php @@ -0,0 +1,1988 @@ + + + 'Producer', + 'manufacturer' => 'Manufacturer', + 'supplier' => 'Supplier', + 'vendor' => 'Vendor', + 'factory' => 'Factory', + 'agent' => 'Agent', + 'invoice_to' => 'Invoice To', + 'report_to' => 'Report To', + 'laboratory' => 'Laboratory', + 'other' => 'Other', +]; + +$partnerStatuses = [ + 'active' => 'Active', + 'inactive' => 'Inactive', + 'suspended' => 'Suspended', +]; + +$contactStatuses = [ + 'active' => 'Active', + 'inactive' => 'Inactive', +]; + +/* + * AJAX actions + */ +if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action'])) { + $action = $_POST['action']; + + try { + if ($action === 'save_partner') { + $idpartner = isset($_POST['idpartner']) ? (int) $_POST['idpartner'] : 0; + $idcompany = isset($_POST['idcompany']) ? (int) $_POST['idcompany'] : 0; + + $partnerType = $_POST['partner_type'] ?? 'supplier'; + $partnerName = trim($_POST['partner_name'] ?? ''); + $legalName = trim($_POST['legal_name'] ?? ''); + $externalCode = trim($_POST['external_code'] ?? ''); + $vatNumber = trim($_POST['vat_number'] ?? ''); + $taxCode = trim($_POST['tax_code'] ?? ''); + $address = trim($_POST['address'] ?? ''); + $city = trim($_POST['city'] ?? ''); + $zip = trim($_POST['zip'] ?? ''); + $countryId = !empty($_POST['country_id']) ? (int) $_POST['country_id'] : null; + $email = trim($_POST['email'] ?? ''); + $phone = trim($_POST['phone'] ?? ''); + $website = trim($_POST['website'] ?? ''); + $notes = trim($_POST['notes'] ?? ''); + $status = $_POST['status'] ?? 'active'; + + if ($idcompany <= 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Company is required.' + ]); + } + + if ($partnerName === '') { + jsonResponse([ + 'success' => false, + 'message' => 'Partner name is required.' + ]); + } + + if (!array_key_exists($partnerType, $partnerTypes)) { + $partnerType = 'supplier'; + } + + if (!array_key_exists($status, $partnerStatuses)) { + $status = 'active'; + } + + /* + * Check company exists. + */ + $stmt = $db->prepare(" + SELECT COUNT(*) + FROM companies + WHERE idcompany = :idcompany + "); + $stmt->execute([':idcompany' => $idcompany]); + + if ((int) $stmt->fetchColumn() === 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Selected company does not exist.' + ]); + } + + if ($idpartner > 0) { + $sql = " + UPDATE business_partners + SET + idcompany = :idcompany, + partner_type = :partner_type, + partner_name = :partner_name, + legal_name = :legal_name, + external_code = :external_code, + vat_number = :vat_number, + tax_code = :tax_code, + address = :address, + city = :city, + zip = :zip, + country_id = :country_id, + email = :email, + phone = :phone, + website = :website, + notes = :notes, + status = :status, + updated_at = NOW() + WHERE idpartner = :idpartner + "; + + $stmt = $db->prepare($sql); + $stmt->execute([ + ':idcompany' => $idcompany, + ':partner_type' => $partnerType, + ':partner_name' => $partnerName, + ':legal_name' => $legalName !== '' ? $legalName : null, + ':external_code' => $externalCode !== '' ? $externalCode : null, + ':vat_number' => $vatNumber !== '' ? $vatNumber : null, + ':tax_code' => $taxCode !== '' ? $taxCode : null, + ':address' => $address !== '' ? $address : null, + ':city' => $city !== '' ? $city : null, + ':zip' => $zip !== '' ? $zip : null, + ':country_id' => $countryId, + ':email' => $email !== '' ? $email : null, + ':phone' => $phone !== '' ? $phone : null, + ':website' => $website !== '' ? $website : null, + ':notes' => $notes !== '' ? $notes : null, + ':status' => $status, + ':idpartner' => $idpartner, + ]); + + jsonResponse([ + 'success' => true, + 'message' => 'Business partner updated successfully.' + ]); + } + + $sql = " + INSERT INTO business_partners ( + idcompany, + partner_type, + partner_name, + legal_name, + external_code, + vat_number, + tax_code, + address, + city, + zip, + country_id, + email, + phone, + website, + notes, + status, + created_by, + created_at, + updated_at + ) VALUES ( + :idcompany, + :partner_type, + :partner_name, + :legal_name, + :external_code, + :vat_number, + :tax_code, + :address, + :city, + :zip, + :country_id, + :email, + :phone, + :website, + :notes, + :status, + :created_by, + NOW(), + NOW() + ) + "; + + $stmt = $db->prepare($sql); + $stmt->execute([ + ':idcompany' => $idcompany, + ':partner_type' => $partnerType, + ':partner_name' => $partnerName, + ':legal_name' => $legalName !== '' ? $legalName : null, + ':external_code' => $externalCode !== '' ? $externalCode : null, + ':vat_number' => $vatNumber !== '' ? $vatNumber : null, + ':tax_code' => $taxCode !== '' ? $taxCode : null, + ':address' => $address !== '' ? $address : null, + ':city' => $city !== '' ? $city : null, + ':zip' => $zip !== '' ? $zip : null, + ':country_id' => $countryId, + ':email' => $email !== '' ? $email : null, + ':phone' => $phone !== '' ? $phone : null, + ':website' => $website !== '' ? $website : null, + ':notes' => $notes !== '' ? $notes : null, + ':status' => $status, + ':created_by' => $iduserlogin, + ]); + + jsonResponse([ + 'success' => true, + 'message' => 'Business partner created successfully.' + ]); + } + + if ($action === 'get_partner') { + $idpartner = isset($_POST['idpartner']) ? (int) $_POST['idpartner'] : 0; + + if ($idpartner <= 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Invalid partner id.' + ]); + } + + $stmt = $db->prepare(" + SELECT * + FROM business_partners + WHERE idpartner = :idpartner + LIMIT 1 + "); + $stmt->execute([':idpartner' => $idpartner]); + $partner = $stmt->fetch(PDO::FETCH_ASSOC); + + if (!$partner) { + jsonResponse([ + 'success' => false, + 'message' => 'Business partner not found.' + ]); + } + + jsonResponse([ + 'success' => true, + 'partner' => $partner + ]); + } + + if ($action === 'change_partner_status') { + $idpartner = isset($_POST['idpartner']) ? (int) $_POST['idpartner'] : 0; + $status = $_POST['status'] ?? 'inactive'; + + if ($idpartner <= 0 || !array_key_exists($status, $partnerStatuses)) { + jsonResponse([ + 'success' => false, + 'message' => 'Invalid request.' + ]); + } + + $stmt = $db->prepare(" + UPDATE business_partners + SET status = :status, updated_at = NOW() + WHERE idpartner = :idpartner + "); + $stmt->execute([ + ':status' => $status, + ':idpartner' => $idpartner, + ]); + + jsonResponse([ + 'success' => true, + 'message' => 'Business partner status updated successfully.' + ]); + } + + if ($action === 'delete_partner') { + $idpartner = isset($_POST['idpartner']) ? (int) $_POST['idpartner'] : 0; + + if ($idpartner <= 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Invalid partner id.' + ]); + } + + /* + * Safe delete: + * Do not delete a partner if already used by samples or parts. + */ + $stmt = $db->prepare(" + SELECT + (SELECT COUNT(*) FROM samples WHERE idproducer = :idpartner1 OR idsupplier = :idpartner2) AS samples_count, + (SELECT COUNT(*) FROM sample_parts WHERE supplier_id = :idpartner3 OR producer_id = :idpartner4) AS parts_count + "); + $stmt->execute([ + ':idpartner1' => $idpartner, + ':idpartner2' => $idpartner, + ':idpartner3' => $idpartner, + ':idpartner4' => $idpartner, + ]); + + $usage = $stmt->fetch(PDO::FETCH_ASSOC); + + if (((int) $usage['samples_count'] > 0) || ((int) $usage['parts_count'] > 0)) { + jsonResponse([ + 'success' => false, + 'message' => 'This partner is linked to samples or BOM parts. Set it as inactive instead of deleting it.' + ]); + } + + $stmt = $db->prepare(" + DELETE FROM business_partners + WHERE idpartner = :idpartner + "); + $stmt->execute([':idpartner' => $idpartner]); + + jsonResponse([ + 'success' => true, + 'message' => 'Business partner deleted successfully.' + ]); + } + + if ($action === 'get_partner_contacts') { + $idpartner = isset($_POST['idpartner']) ? (int) $_POST['idpartner'] : 0; + + if ($idpartner <= 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Invalid partner id.' + ]); + } + + $stmt = $db->prepare(" + SELECT * + FROM business_partner_contacts + WHERE idpartner = :idpartner + ORDER BY is_primary DESC, contact_name ASC + "); + $stmt->execute([':idpartner' => $idpartner]); + + jsonResponse([ + 'success' => true, + 'contacts' => $stmt->fetchAll(PDO::FETCH_ASSOC) + ]); + } + + if ($action === 'save_contact') { + $idcontact = isset($_POST['idcontact']) ? (int) $_POST['idcontact'] : 0; + $idpartner = isset($_POST['idpartner']) ? (int) $_POST['idpartner'] : 0; + $contactName = trim($_POST['contact_name'] ?? ''); + $role = trim($_POST['role'] ?? ''); + $email = trim($_POST['email'] ?? ''); + $phone = trim($_POST['phone'] ?? ''); + $mobile = trim($_POST['mobile'] ?? ''); + $isPrimary = isset($_POST['is_primary']) ? (int) $_POST['is_primary'] : 0; + $notes = trim($_POST['notes'] ?? ''); + $status = $_POST['status'] ?? 'active'; + + if ($idpartner <= 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Partner is required.' + ]); + } + + if ($contactName === '') { + jsonResponse([ + 'success' => false, + 'message' => 'Contact name is required.' + ]); + } + + if (!array_key_exists($status, $contactStatuses)) { + $status = 'active'; + } + + /* + * If this contact is primary, unset other primary contacts for the same partner. + */ + if ($isPrimary === 1) { + $stmt = $db->prepare(" + UPDATE business_partner_contacts + SET is_primary = 0 + WHERE idpartner = :idpartner + "); + $stmt->execute([':idpartner' => $idpartner]); + } + + if ($idcontact > 0) { + $stmt = $db->prepare(" + UPDATE business_partner_contacts + SET + contact_name = :contact_name, + role = :role, + email = :email, + phone = :phone, + mobile = :mobile, + is_primary = :is_primary, + notes = :notes, + status = :status, + updated_at = NOW() + WHERE idcontact = :idcontact + AND idpartner = :idpartner + "); + + $stmt->execute([ + ':contact_name' => $contactName, + ':role' => $role !== '' ? $role : null, + ':email' => $email !== '' ? $email : null, + ':phone' => $phone !== '' ? $phone : null, + ':mobile' => $mobile !== '' ? $mobile : null, + ':is_primary' => $isPrimary === 1 ? 1 : 0, + ':notes' => $notes !== '' ? $notes : null, + ':status' => $status, + ':idcontact' => $idcontact, + ':idpartner' => $idpartner, + ]); + + jsonResponse([ + 'success' => true, + 'message' => 'Contact updated successfully.' + ]); + } + + $stmt = $db->prepare(" + INSERT INTO business_partner_contacts ( + idpartner, + contact_name, + role, + email, + phone, + mobile, + is_primary, + notes, + status, + created_at, + updated_at + ) VALUES ( + :idpartner, + :contact_name, + :role, + :email, + :phone, + :mobile, + :is_primary, + :notes, + :status, + NOW(), + NOW() + ) + "); + + $stmt->execute([ + ':idpartner' => $idpartner, + ':contact_name' => $contactName, + ':role' => $role !== '' ? $role : null, + ':email' => $email !== '' ? $email : null, + ':phone' => $phone !== '' ? $phone : null, + ':mobile' => $mobile !== '' ? $mobile : null, + ':is_primary' => $isPrimary === 1 ? 1 : 0, + ':notes' => $notes !== '' ? $notes : null, + ':status' => $status, + ]); + + jsonResponse([ + 'success' => true, + 'message' => 'Contact created successfully.' + ]); + } + + if ($action === 'get_contact') { + $idcontact = isset($_POST['idcontact']) ? (int) $_POST['idcontact'] : 0; + + if ($idcontact <= 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Invalid contact id.' + ]); + } + + $stmt = $db->prepare(" + SELECT * + FROM business_partner_contacts + WHERE idcontact = :idcontact + LIMIT 1 + "); + $stmt->execute([':idcontact' => $idcontact]); + $contact = $stmt->fetch(PDO::FETCH_ASSOC); + + if (!$contact) { + jsonResponse([ + 'success' => false, + 'message' => 'Contact not found.' + ]); + } + + jsonResponse([ + 'success' => true, + 'contact' => $contact + ]); + } + + if ($action === 'delete_contact') { + $idcontact = isset($_POST['idcontact']) ? (int) $_POST['idcontact'] : 0; + + if ($idcontact <= 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Invalid contact id.' + ]); + } + + $stmt = $db->prepare(" + DELETE FROM business_partner_contacts + WHERE idcontact = :idcontact + "); + $stmt->execute([':idcontact' => $idcontact]); + + jsonResponse([ + 'success' => true, + 'message' => 'Contact deleted successfully.' + ]); + } + + jsonResponse([ + 'success' => false, + 'message' => 'Unknown action.' + ]); + } catch (Throwable $e) { + jsonResponse([ + 'success' => false, + 'message' => $e->getMessage() + ]); + } +} + +/* + * Page data. + */ +$companies = []; +$countries = []; +$partners = []; + +try { + $stmt = $db->query(" + SELECT idcompany, company_name, status + FROM companies + ORDER BY company_name ASC + "); + $companies = $stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (Throwable $e) { + $companies = []; +} + +try { + $stmt = $db->query(" + SELECT id, name, iso_3166_2 + FROM auth_countries + ORDER BY name ASC + "); + $countries = $stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (Throwable $e) { + $countries = []; +} + +try { + $stmt = $db->query(" + SELECT + bp.idpartner, + bp.idcompany, + bp.partner_type, + bp.partner_name, + bp.legal_name, + bp.external_code, + bp.vat_number, + bp.city, + bp.email, + bp.phone, + bp.status, + bp.created_at, + c.company_name, + ac.name AS country_name, + COUNT(DISTINCT bpc.idcontact) AS contacts_count, + SUM(CASE WHEN bpc.is_primary = 1 THEN 1 ELSE 0 END) AS primary_contacts_count, + COUNT(DISTINCT s1.idsample) AS producer_samples_count, + COUNT(DISTINCT s2.idsample) AS supplier_samples_count, + COUNT(DISTINCT sp1.idpart) AS producer_parts_count, + COUNT(DISTINCT sp2.idpart) AS supplier_parts_count + FROM business_partners bp + INNER JOIN companies c ON c.idcompany = bp.idcompany + LEFT JOIN auth_countries ac ON ac.id = bp.country_id + LEFT JOIN business_partner_contacts bpc ON bpc.idpartner = bp.idpartner + LEFT JOIN samples s1 ON s1.idproducer = bp.idpartner + LEFT JOIN samples s2 ON s2.idsupplier = bp.idpartner + LEFT JOIN sample_parts sp1 ON sp1.producer_id = bp.idpartner + LEFT JOIN sample_parts sp2 ON sp2.supplier_id = bp.idpartner + GROUP BY + bp.idpartner, + bp.idcompany, + bp.partner_type, + bp.partner_name, + bp.legal_name, + bp.external_code, + bp.vat_number, + bp.city, + bp.email, + bp.phone, + bp.status, + bp.created_at, + c.company_name, + ac.name + ORDER BY c.company_name ASC, bp.partner_name ASC + "); + $partners = $stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (Throwable $e) { + $partners = []; +} + +$pageTitle = 'Business Partners'; +$totalPartners = count($partners); +$activePartners = count(array_filter($partners, fn($row) => $row['status'] === 'active')); +$totalContacts = array_sum(array_map(fn($row) => (int) $row['contacts_count'], $partners)); +?> + + + + + + + + + + + + <?= e($pageTitle); ?> - <?= isset($titlewebsite) ? e($titlewebsite) : 'TRFgo'; ?> + + + + + +
+ + + +
+
+ +
+
+
+
+
+ + TRFgo Master Data +
+

Business Partners

+

+ Manage producers, suppliers, manufacturers, vendors, factories, laboratories and contacts. + These records will be used in sample identity cards, BOM parts, TRF requests and document flows. +

+
+ +
+ +
+
+
+
+ +
+
+
+
+
+
+
Total Partners
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+
Active Partners
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+
Contacts
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
Partner List
+

Suppliers, producers, vendors, laboratories and related entities

+
+ + +
+
+ +
+ +
+ No companies available. + Create at least one company before adding business partners. +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PartnerCompanyTypeExternal CodeCountry / CityEmailContactsUsageStatusActions
+
+ +
+ + +
VAT:
+ +
+
+
+ + + -'; ?> + +
-'; ?>
+ +
+ +
+ + + + - + + + +
+ +
+ + + + + + + + + + + + Active + + Suspended + + Inactive + + + + + + + + + + + + + +
+
+ +
+
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/userarea/companies.php b/public/userarea/companies.php new file mode 100644 index 00000000..5c2823dd --- /dev/null +++ b/public/userarea/companies.php @@ -0,0 +1,1223 @@ + + + false, + 'message' => 'Company name is required.' + ]); + } + + if (!in_array($status, $allowedStatuses, true)) { + $status = 'active'; + } + + if ($idcompany > 0) { + $sql = " + UPDATE companies + SET + company_name = :company_name, + legal_name = :legal_name, + vat_number = :vat_number, + external_code = :external_code, + address = :address, + city = :city, + zip = :zip, + country_id = :country_id, + email = :email, + phone = :phone, + status = :status, + updated_at = NOW() + WHERE idcompany = :idcompany + "; + + $stmt = $db->prepare($sql); + $stmt->execute([ + ':company_name' => $companyName, + ':legal_name' => $legalName !== '' ? $legalName : null, + ':vat_number' => $vatNumber !== '' ? $vatNumber : null, + ':external_code' => $externalCode !== '' ? $externalCode : null, + ':address' => $address !== '' ? $address : null, + ':city' => $city !== '' ? $city : null, + ':zip' => $zip !== '' ? $zip : null, + ':country_id' => $countryId, + ':email' => $email !== '' ? $email : null, + ':phone' => $phone !== '' ? $phone : null, + ':status' => $status, + ':idcompany' => $idcompany, + ]); + + jsonResponse([ + 'success' => true, + 'message' => 'Company updated successfully.' + ]); + } + + $sql = " + INSERT INTO companies ( + company_name, + legal_name, + vat_number, + external_code, + address, + city, + zip, + country_id, + email, + phone, + status, + created_at, + updated_at + ) VALUES ( + :company_name, + :legal_name, + :vat_number, + :external_code, + :address, + :city, + :zip, + :country_id, + :email, + :phone, + :status, + NOW(), + NOW() + ) + "; + + $stmt = $db->prepare($sql); + $stmt->execute([ + ':company_name' => $companyName, + ':legal_name' => $legalName !== '' ? $legalName : null, + ':vat_number' => $vatNumber !== '' ? $vatNumber : null, + ':external_code' => $externalCode !== '' ? $externalCode : null, + ':address' => $address !== '' ? $address : null, + ':city' => $city !== '' ? $city : null, + ':zip' => $zip !== '' ? $zip : null, + ':country_id' => $countryId, + ':email' => $email !== '' ? $email : null, + ':phone' => $phone !== '' ? $phone : null, + ':status' => $status, + ]); + + jsonResponse([ + 'success' => true, + 'message' => 'Company created successfully.' + ]); + } + + if ($action === 'get_company') { + $idcompany = isset($_POST['idcompany']) ? (int) $_POST['idcompany'] : 0; + + if ($idcompany <= 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Invalid company id.' + ]); + } + + $stmt = $db->prepare(" + SELECT * + FROM companies + WHERE idcompany = :idcompany + LIMIT 1 + "); + $stmt->execute([':idcompany' => $idcompany]); + $company = $stmt->fetch(PDO::FETCH_ASSOC); + + if (!$company) { + jsonResponse([ + 'success' => false, + 'message' => 'Company not found.' + ]); + } + + jsonResponse([ + 'success' => true, + 'company' => $company + ]); + } + + if ($action === 'change_status') { + $idcompany = isset($_POST['idcompany']) ? (int) $_POST['idcompany'] : 0; + $status = $_POST['status'] ?? 'inactive'; + + $allowedStatuses = ['active', 'inactive', 'suspended']; + + if ($idcompany <= 0 || !in_array($status, $allowedStatuses, true)) { + jsonResponse([ + 'success' => false, + 'message' => 'Invalid request.' + ]); + } + + $stmt = $db->prepare(" + UPDATE companies + SET status = :status, updated_at = NOW() + WHERE idcompany = :idcompany + "); + $stmt->execute([ + ':status' => $status, + ':idcompany' => $idcompany, + ]); + + jsonResponse([ + 'success' => true, + 'message' => 'Company status updated successfully.' + ]); + } + + if ($action === 'delete_company') { + $idcompany = isset($_POST['idcompany']) ? (int) $_POST['idcompany'] : 0; + + if ($idcompany <= 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Invalid company id.' + ]); + } + + /* + * Safe delete rule: + * Do not delete a company if it already has linked brands, departments or users. + */ + $stmt = $db->prepare(" + SELECT + (SELECT COUNT(*) FROM brands WHERE idcompany = :idcompany1) AS brands_count, + (SELECT COUNT(*) FROM departments WHERE idcompany = :idcompany2) AS departments_count, + (SELECT COUNT(*) FROM company_users WHERE idcompany = :idcompany3) AS users_count + "); + $stmt->execute([ + ':idcompany1' => $idcompany, + ':idcompany2' => $idcompany, + ':idcompany3' => $idcompany, + ]); + + $usage = $stmt->fetch(PDO::FETCH_ASSOC); + + if ( + ((int) $usage['brands_count'] > 0) || + ((int) $usage['departments_count'] > 0) || + ((int) $usage['users_count'] > 0) + ) { + jsonResponse([ + 'success' => false, + 'message' => 'This company has linked brands, departments or users. Set it as inactive instead of deleting it.' + ]); + } + + $stmt = $db->prepare(" + DELETE FROM companies + WHERE idcompany = :idcompany + "); + $stmt->execute([':idcompany' => $idcompany]); + + jsonResponse([ + 'success' => true, + 'message' => 'Company deleted successfully.' + ]); + } + + jsonResponse([ + 'success' => false, + 'message' => 'Unknown action.' + ]); + } catch (Throwable $e) { + jsonResponse([ + 'success' => false, + 'message' => $e->getMessage() + ]); + } +} + +/* + * Page data + */ +$countries = []; + +try { + $stmt = $db->query(" + SELECT id, name, iso_3166_2 + FROM auth_countries + ORDER BY name ASC + "); + $countries = $stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (Throwable $e) { + $countries = []; +} + +$companies = []; + +try { + $stmt = $db->query(" + SELECT + c.idcompany, + c.company_name, + c.legal_name, + c.vat_number, + c.external_code, + c.city, + c.email, + c.phone, + c.status, + c.created_at, + ac.name AS country_name, + COUNT(DISTINCT b.idbrand) AS brand_count, + COUNT(DISTINCT d.iddepartment) AS department_count, + COUNT(DISTINCT cu.idcompanyuser) AS user_count + FROM companies c + LEFT JOIN auth_countries ac ON ac.id = c.country_id + LEFT JOIN brands b ON b.idcompany = c.idcompany + LEFT JOIN departments d ON d.idcompany = c.idcompany + LEFT JOIN company_users cu ON cu.idcompany = c.idcompany + GROUP BY + c.idcompany, + c.company_name, + c.legal_name, + c.vat_number, + c.external_code, + c.city, + c.email, + c.phone, + c.status, + c.created_at, + ac.name + ORDER BY c.company_name ASC + "); + $companies = $stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (Throwable $e) { + $companies = []; +} + +$pageTitle = 'Companies'; +?> + + + + + + + + + + + + <?= e($pageTitle); ?> - <?= isset($titlewebsite) ? e($titlewebsite) : 'TRFgo'; ?> + + + + + +
+ + + +
+
+ +
+
+
+
+
+ + TRFgo Registry +
+

Companies

+

+ Manage customer companies, laboratories and organizations connected to TRFgo. + Companies are the base layer for brands, departments, users and future TRF requests. +

+
+ +
+ +
+
+
+
+ + $row['status'] === 'active')); + $suspendedCompanies = count(array_filter($companies, fn($row) => $row['status'] === 'suspended')); + ?> + +
+
+
+
+
+
+
Total Companies
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+
Active
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+
Suspended
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
Company List
+

Customer and laboratory organizations configured in TRFgo

+
+ + +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CompanyExternal CodeCountry / CityEmailBrandsDepartmentsUsersStatusCreatedActions
+
+ +
+ + +
VAT:
+ +
+ -'; ?> + +
-'; ?>
+ +
+ +
+ + + + - + + + +
+ +
+ + + + + + + + + + + + + + + + + Active + + Suspended + + Inactive + + + + + + + + + + + + + +
+
+
+
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + \ No newline at end of file diff --git a/public/userarea/company-users.php b/public/userarea/company-users.php new file mode 100644 index 00000000..30e1da08 --- /dev/null +++ b/public/userarea/company-users.php @@ -0,0 +1,1651 @@ + + + true, + 'brands' => [] + ]); + } + + $stmt = $db->prepare(" + SELECT idbrand, brand_name, status + FROM brands + WHERE idcompany = :idcompany + ORDER BY brand_name ASC + "); + $stmt->execute([':idcompany' => $idcompany]); + + jsonResponse([ + 'success' => true, + 'brands' => $stmt->fetchAll(PDO::FETCH_ASSOC) + ]); + } + + if ($action === 'get_departments_by_company_brand') { + $idcompany = isset($_POST['idcompany']) ? (int) $_POST['idcompany'] : 0; + $idbrand = !empty($_POST['idbrand']) ? (int) $_POST['idbrand'] : null; + + if ($idcompany <= 0) { + jsonResponse([ + 'success' => true, + 'departments' => [] + ]); + } + + if ($idbrand !== null) { + $stmt = $db->prepare(" + SELECT iddepartment, department_name, status + FROM departments + WHERE idcompany = :idcompany + AND (idbrand = :idbrand OR idbrand IS NULL) + ORDER BY department_name ASC + "); + $stmt->execute([ + ':idcompany' => $idcompany, + ':idbrand' => $idbrand, + ]); + } else { + $stmt = $db->prepare(" + SELECT iddepartment, department_name, status + FROM departments + WHERE idcompany = :idcompany + ORDER BY department_name ASC + "); + $stmt->execute([':idcompany' => $idcompany]); + } + + jsonResponse([ + 'success' => true, + 'departments' => $stmt->fetchAll(PDO::FETCH_ASSOC) + ]); + } + + if ($action === 'save_company_user') { + $idcompanyuser = isset($_POST['idcompanyuser']) ? (int) $_POST['idcompanyuser'] : 0; + $iduser = isset($_POST['iduser']) ? (int) $_POST['iduser'] : 0; + $idcompany = isset($_POST['idcompany']) ? (int) $_POST['idcompany'] : 0; + $idbrand = !empty($_POST['idbrand']) ? (int) $_POST['idbrand'] : null; + $iddepartment = !empty($_POST['iddepartment']) ? (int) $_POST['iddepartment'] : null; + $userScope = $_POST['user_scope'] ?? 'company'; + $companyRole = $_POST['company_role'] ?? 'viewer'; + $status = $_POST['status'] ?? 'active'; + + $allowedScopes = ['company', 'brand', 'department']; + $allowedRoles = ['owner', 'admin', 'manager', 'operator', 'viewer', 'api_user', 'lab_user']; + $allowedStatuses = ['active', 'inactive']; + + if ($iduser <= 0) { + jsonResponse([ + 'success' => false, + 'message' => 'User is required.' + ]); + } + + if ($idcompany <= 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Company is required.' + ]); + } + + if (!in_array($userScope, $allowedScopes, true)) { + $userScope = 'company'; + } + + if (!in_array($companyRole, $allowedRoles, true)) { + $companyRole = 'viewer'; + } + + if (!in_array($status, $allowedStatuses, true)) { + $status = 'active'; + } + + /* + * Scope consistency. + */ + if ($userScope === 'company') { + $idbrand = null; + $iddepartment = null; + } + + if ($userScope === 'brand') { + if ($idbrand === null) { + jsonResponse([ + 'success' => false, + 'message' => 'Brand is required for brand scope.' + ]); + } + + $iddepartment = null; + } + + if ($userScope === 'department') { + if ($iddepartment === null) { + jsonResponse([ + 'success' => false, + 'message' => 'Department is required for department scope.' + ]); + } + } + + /* + * Check Vanguard user exists. + */ + $stmt = $db->prepare(" + SELECT COUNT(*) + FROM auth_users + WHERE id = :iduser + "); + $stmt->execute([':iduser' => $iduser]); + + if ((int) $stmt->fetchColumn() === 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Selected Vanguard user does not exist.' + ]); + } + + /* + * Check company exists. + */ + $stmt = $db->prepare(" + SELECT COUNT(*) + FROM companies + WHERE idcompany = :idcompany + "); + $stmt->execute([':idcompany' => $idcompany]); + + if ((int) $stmt->fetchColumn() === 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Selected company does not exist.' + ]); + } + + /* + * Check brand belongs to company. + */ + if ($idbrand !== null) { + $stmt = $db->prepare(" + SELECT COUNT(*) + FROM brands + WHERE idbrand = :idbrand + AND idcompany = :idcompany + "); + $stmt->execute([ + ':idbrand' => $idbrand, + ':idcompany' => $idcompany, + ]); + + if ((int) $stmt->fetchColumn() === 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Selected brand does not belong to the selected company.' + ]); + } + } + + /* + * Check department belongs to company and, if brand is selected, is compatible. + */ + if ($iddepartment !== null) { + if ($idbrand !== null) { + $stmt = $db->prepare(" + SELECT COUNT(*) + FROM departments + WHERE iddepartment = :iddepartment + AND idcompany = :idcompany + AND (idbrand = :idbrand OR idbrand IS NULL) + "); + $stmt->execute([ + ':iddepartment' => $iddepartment, + ':idcompany' => $idcompany, + ':idbrand' => $idbrand, + ]); + } else { + $stmt = $db->prepare(" + SELECT COUNT(*) + FROM departments + WHERE iddepartment = :iddepartment + AND idcompany = :idcompany + "); + $stmt->execute([ + ':iddepartment' => $iddepartment, + ':idcompany' => $idcompany, + ]); + } + + if ((int) $stmt->fetchColumn() === 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Selected department is not compatible with the selected company/brand.' + ]); + } + } + + /* + * Check duplicate assignment. + */ + if ($idcompanyuser > 0) { + $stmt = $db->prepare(" + SELECT COUNT(*) + FROM company_users + WHERE iduser = :iduser + AND idcompany = :idcompany + AND ( + (idbrand IS NULL AND :idbrand_null = 1) + OR idbrand = :idbrand + ) + AND ( + (iddepartment IS NULL AND :iddepartment_null = 1) + OR iddepartment = :iddepartment + ) + AND idcompanyuser <> :idcompanyuser + "); + $stmt->execute([ + ':iduser' => $iduser, + ':idcompany' => $idcompany, + ':idbrand' => $idbrand, + ':idbrand_null' => $idbrand === null ? 1 : 0, + ':iddepartment' => $iddepartment, + ':iddepartment_null' => $iddepartment === null ? 1 : 0, + ':idcompanyuser' => $idcompanyuser, + ]); + } else { + $stmt = $db->prepare(" + SELECT COUNT(*) + FROM company_users + WHERE iduser = :iduser + AND idcompany = :idcompany + AND ( + (idbrand IS NULL AND :idbrand_null = 1) + OR idbrand = :idbrand + ) + AND ( + (iddepartment IS NULL AND :iddepartment_null = 1) + OR iddepartment = :iddepartment + ) + "); + $stmt->execute([ + ':iduser' => $iduser, + ':idcompany' => $idcompany, + ':idbrand' => $idbrand, + ':idbrand_null' => $idbrand === null ? 1 : 0, + ':iddepartment' => $iddepartment, + ':iddepartment_null' => $iddepartment === null ? 1 : 0, + ]); + } + + if ((int) $stmt->fetchColumn() > 0) { + jsonResponse([ + 'success' => false, + 'message' => 'This user already has the same assignment.' + ]); + } + + if ($idcompanyuser > 0) { + $sql = " + UPDATE company_users + SET + iduser = :iduser, + idcompany = :idcompany, + idbrand = :idbrand, + iddepartment = :iddepartment, + user_scope = :user_scope, + company_role = :company_role, + status = :status, + updated_at = NOW() + WHERE idcompanyuser = :idcompanyuser + "; + + $stmt = $db->prepare($sql); + $stmt->execute([ + ':iduser' => $iduser, + ':idcompany' => $idcompany, + ':idbrand' => $idbrand, + ':iddepartment' => $iddepartment, + ':user_scope' => $userScope, + ':company_role' => $companyRole, + ':status' => $status, + ':idcompanyuser' => $idcompanyuser, + ]); + + jsonResponse([ + 'success' => true, + 'message' => 'User assignment updated successfully.' + ]); + } + + $sql = " + INSERT INTO company_users ( + iduser, + idcompany, + idbrand, + iddepartment, + user_scope, + company_role, + status, + created_at, + updated_at + ) VALUES ( + :iduser, + :idcompany, + :idbrand, + :iddepartment, + :user_scope, + :company_role, + :status, + NOW(), + NOW() + ) + "; + + $stmt = $db->prepare($sql); + $stmt->execute([ + ':iduser' => $iduser, + ':idcompany' => $idcompany, + ':idbrand' => $idbrand, + ':iddepartment' => $iddepartment, + ':user_scope' => $userScope, + ':company_role' => $companyRole, + ':status' => $status, + ]); + + jsonResponse([ + 'success' => true, + 'message' => 'User assigned successfully.' + ]); + } + + if ($action === 'get_company_user') { + $idcompanyuser = isset($_POST['idcompanyuser']) ? (int) $_POST['idcompanyuser'] : 0; + + if ($idcompanyuser <= 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Invalid assignment id.' + ]); + } + + $stmt = $db->prepare(" + SELECT * + FROM company_users + WHERE idcompanyuser = :idcompanyuser + LIMIT 1 + "); + $stmt->execute([':idcompanyuser' => $idcompanyuser]); + $companyUser = $stmt->fetch(PDO::FETCH_ASSOC); + + if (!$companyUser) { + jsonResponse([ + 'success' => false, + 'message' => 'Assignment not found.' + ]); + } + + jsonResponse([ + 'success' => true, + 'company_user' => $companyUser + ]); + } + + if ($action === 'change_status') { + $idcompanyuser = isset($_POST['idcompanyuser']) ? (int) $_POST['idcompanyuser'] : 0; + $status = $_POST['status'] ?? 'inactive'; + + $allowedStatuses = ['active', 'inactive']; + + if ($idcompanyuser <= 0 || !in_array($status, $allowedStatuses, true)) { + jsonResponse([ + 'success' => false, + 'message' => 'Invalid request.' + ]); + } + + $stmt = $db->prepare(" + UPDATE company_users + SET status = :status, updated_at = NOW() + WHERE idcompanyuser = :idcompanyuser + "); + $stmt->execute([ + ':status' => $status, + ':idcompanyuser' => $idcompanyuser, + ]); + + jsonResponse([ + 'success' => true, + 'message' => 'Assignment status updated successfully.' + ]); + } + + if ($action === 'delete_company_user') { + $idcompanyuser = isset($_POST['idcompanyuser']) ? (int) $_POST['idcompanyuser'] : 0; + + if ($idcompanyuser <= 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Invalid assignment id.' + ]); + } + + $stmt = $db->prepare(" + DELETE FROM company_users + WHERE idcompanyuser = :idcompanyuser + "); + $stmt->execute([':idcompanyuser' => $idcompanyuser]); + + jsonResponse([ + 'success' => true, + 'message' => 'User assignment deleted successfully.' + ]); + } + + jsonResponse([ + 'success' => false, + 'message' => 'Unknown action.' + ]); + } catch (Throwable $e) { + jsonResponse([ + 'success' => false, + 'message' => $e->getMessage() + ]); + } +} + +/* + * Page data + */ +$users = []; + +try { + $stmt = $db->query(" + SELECT + u.id, + u.email, + u.first_name, + u.last_name, + u.username, + u.status, + r.display_name AS role_display_name, + r.name AS role_name + FROM auth_users u + LEFT JOIN auth_roles r ON r.id = u.role_id + ORDER BY u.first_name ASC, u.last_name ASC, u.email ASC + "); + $users = $stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (Throwable $e) { + $users = []; +} + +$companies = []; + +try { + $stmt = $db->query(" + SELECT idcompany, company_name, status + FROM companies + ORDER BY company_name ASC + "); + $companies = $stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (Throwable $e) { + $companies = []; +} + +$brands = []; + +try { + $stmt = $db->query(" + SELECT idbrand, idcompany, brand_name, status + FROM brands + ORDER BY brand_name ASC + "); + $brands = $stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (Throwable $e) { + $brands = []; +} + +$departments = []; + +try { + $stmt = $db->query(" + SELECT iddepartment, idcompany, idbrand, department_name, status + FROM departments + ORDER BY department_name ASC + "); + $departments = $stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (Throwable $e) { + $departments = []; +} + +$assignments = []; + +try { + $stmt = $db->query(" + SELECT + cu.idcompanyuser, + cu.iduser, + cu.idcompany, + cu.idbrand, + cu.iddepartment, + cu.user_scope, + cu.company_role, + cu.status, + cu.created_at, + u.email, + u.first_name, + u.last_name, + u.username, + u.status AS user_status, + r.display_name AS vanguard_role, + c.company_name, + c.status AS company_status, + b.brand_name, + b.status AS brand_status, + d.department_name, + d.status AS department_status + FROM company_users cu + INNER JOIN auth_users u ON u.id = cu.iduser + LEFT JOIN auth_roles r ON r.id = u.role_id + INNER JOIN companies c ON c.idcompany = cu.idcompany + LEFT JOIN brands b ON b.idbrand = cu.idbrand + LEFT JOIN departments d ON d.iddepartment = cu.iddepartment + ORDER BY c.company_name ASC, u.first_name ASC, u.last_name ASC, u.email ASC + "); + $assignments = $stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (Throwable $e) { + $assignments = []; +} + +$pageTitle = 'Company Users'; +?> + + + + + + + + + + + + <?= e($pageTitle); ?> - <?= isset($titlewebsite) ? e($titlewebsite) : 'TRFgo'; ?> + + + + + +
+ + + +
+
+ +
+
+
+
+
+ + TRFgo Access Control +
+

Company Users

+

+ Link Vanguard users to TRFgo companies, brands and departments. + Vanguard remains responsible for authentication; this page defines operational access and data visibility. +

+
+ +
+ +
+
+
+
+ + $row['status'] === 'active')); + $companyScopeCount = count(array_filter($assignments, fn($row) => $row['user_scope'] === 'company')); + $departmentScopeCount = count(array_filter($assignments, fn($row) => $row['user_scope'] === 'department')); + ?> + +
+
+
+
+
+
+
Assignments
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+
Active
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+
Company Scope
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+
Department Scope
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
User Assignments
+

Vanguard users linked to TRFgo operating scopes

+
+ + +
+
+ +
+ +
+ No companies available. + Create at least one company before assigning users. +
+ + + +
+ No Vanguard users available. + Create users in Vanguard before assigning TRFgo access. +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UserCompanyScopeRoleVanguard RoleStatusCreatedActions
+
+
+
+
+ +
Company status:
+ +
+
+ + Company +
Full company visibility
+ + Brand +
+ + Department +
+ + + / + +
+ +
+
+ + + -'; ?> + + + Active + + Inactive + + + + + + + + + + + + + +
+
+ +
+
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + \ No newline at end of file diff --git a/public/userarea/dashboard-admin.php b/public/userarea/dashboard-admin.php new file mode 100644 index 00000000..c056130d --- /dev/null +++ b/public/userarea/dashboard-admin.php @@ -0,0 +1,1419 @@ + + +prepare($sql); + $stmt->execute($params); + return $stmt->fetchColumn(); + } catch (Throwable $e) { + return 0; + } +} + +function getRows(PDO $db, string $sql, array $params = []) +{ + try { + $stmt = $db->prepare($sql); + $stmt->execute($params); + return $stmt->fetchAll(PDO::FETCH_ASSOC); + } catch (Throwable $e) { + return []; + } +} + +$dashboardPage = 'dashboard'; + +$availableWidgets = [ + 'kpi_companies', + 'kpi_brands', + 'kpi_departments', + 'kpi_users', + 'chart_structure', + 'setup_progress', + 'quick_actions', + 'recent_companies', +]; + +$defaultLayout = [ + 'kpi_companies', + 'kpi_brands', + 'kpi_departments', + 'kpi_users', + 'chart_structure', + 'setup_progress', + 'quick_actions', + 'recent_companies', +]; + +/* + * AJAX: save/reset dashboard layout. + */ +if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action'])) { + try { + if ($_POST['action'] === 'save_dashboard_layout') { + $layoutRaw = $_POST['layout'] ?? '[]'; + $layout = json_decode($layoutRaw, true); + + if (!is_array($layout)) { + jsonResponse([ + 'success' => false, + 'message' => 'Invalid dashboard layout.' + ]); + } + + $cleanLayout = []; + + foreach ($layout as $widgetKey) { + if (in_array($widgetKey, $availableWidgets, true) && !in_array($widgetKey, $cleanLayout, true)) { + $cleanLayout[] = $widgetKey; + } + } + + foreach ($defaultLayout as $widgetKey) { + if (!in_array($widgetKey, $cleanLayout, true)) { + $cleanLayout[] = $widgetKey; + } + } + + $layoutJson = json_encode($cleanLayout); + + $stmt = $db->prepare(" + INSERT INTO user_dashboard_layouts ( + iduser, + page, + layout_json, + created_at, + updated_at + ) VALUES ( + :iduser, + :page, + :layout_json, + NOW(), + NOW() + ) + ON DUPLICATE KEY UPDATE + layout_json = VALUES(layout_json), + updated_at = NOW() + "); + + $stmt->execute([ + ':iduser' => $iduserlogin, + ':page' => $dashboardPage, + ':layout_json' => $layoutJson, + ]); + + jsonResponse([ + 'success' => true, + 'message' => 'Dashboard layout saved.' + ]); + } + + if ($_POST['action'] === 'reset_dashboard_layout') { + $stmt = $db->prepare(" + DELETE FROM user_dashboard_layouts + WHERE iduser = :iduser + AND page = :page + "); + + $stmt->execute([ + ':iduser' => $iduserlogin, + ':page' => $dashboardPage, + ]); + + jsonResponse([ + 'success' => true, + 'message' => 'Dashboard layout reset.' + ]); + } + + jsonResponse([ + 'success' => false, + 'message' => 'Unknown action.' + ]); + } catch (Throwable $e) { + jsonResponse([ + 'success' => false, + 'message' => $e->getMessage() + ]); + } +} + +/* + * Dashboard counters. + */ +$totalCompanies = (int) getScalar($db, "SELECT COUNT(*) FROM companies"); +$activeCompanies = (int) getScalar($db, "SELECT COUNT(*) FROM companies WHERE status = 'active'"); +$totalBrands = (int) getScalar($db, "SELECT COUNT(*) FROM brands"); +$activeBrands = (int) getScalar($db, "SELECT COUNT(*) FROM brands WHERE status = 'active'"); +$totalDepartments = (int) getScalar($db, "SELECT COUNT(*) FROM departments"); +$activeDepartments = (int) getScalar($db, "SELECT COUNT(*) FROM departments WHERE status = 'active'"); +$totalCompanyUsers = (int) getScalar($db, "SELECT COUNT(*) FROM company_users"); +$activeCompanyUsers = (int) getScalar($db, "SELECT COUNT(*) FROM company_users WHERE status = 'active'"); + +/* + * Recent companies. + */ +$recentCompanies = getRows($db, " + SELECT + c.idcompany, + c.company_name, + c.legal_name, + c.status, + c.created_at, + COUNT(DISTINCT b.idbrand) AS brand_count, + COUNT(DISTINCT d.iddepartment) AS department_count, + COUNT(DISTINCT cu.idcompanyuser) AS user_count + FROM companies c + LEFT JOIN brands b ON b.idcompany = c.idcompany + LEFT JOIN departments d ON d.idcompany = c.idcompany + LEFT JOIN company_users cu ON cu.idcompany = c.idcompany + GROUP BY c.idcompany, c.company_name, c.legal_name, c.status, c.created_at + ORDER BY c.created_at DESC, c.idcompany DESC + LIMIT 8 +"); + +/* + * Chart data. + */ +$companyDistribution = getRows($db, " + SELECT + c.company_name, + COUNT(DISTINCT b.idbrand) AS brands, + COUNT(DISTINCT d.iddepartment) AS departments, + COUNT(DISTINCT cu.idcompanyuser) AS users + FROM companies c + LEFT JOIN brands b ON b.idcompany = c.idcompany + LEFT JOIN departments d ON d.idcompany = c.idcompany + LEFT JOIN company_users cu ON cu.idcompany = c.idcompany + GROUP BY c.idcompany, c.company_name + ORDER BY c.company_name ASC + LIMIT 10 +"); + +$chartCompanyLabels = []; +$chartBrands = []; +$chartDepartments = []; +$chartUsers = []; + +foreach ($companyDistribution as $row) { + $chartCompanyLabels[] = $row['company_name']; + $chartBrands[] = (int) $row['brands']; + $chartDepartments[] = (int) $row['departments']; + $chartUsers[] = (int) $row['users']; +} + +/* + * Setup progress. + */ +$setupItems = [ + [ + 'label' => 'Companies', + 'completed' => $totalCompanies > 0, + 'icon' => 'bx bx-buildings', + ], + [ + 'label' => 'Brands', + 'completed' => $totalBrands > 0, + 'icon' => 'bx bx-purchase-tag-alt', + ], + [ + 'label' => 'Departments', + 'completed' => $totalDepartments > 0, + 'icon' => 'bx bx-sitemap', + ], + [ + 'label' => 'User access', + 'completed' => $totalCompanyUsers > 0, + 'icon' => 'bx bx-user-check', + ], +]; + +$completedSetupItems = count(array_filter($setupItems, function ($item) { + return $item['completed']; +})); + +$setupProgress = count($setupItems) > 0 + ? round(($completedSetupItems / count($setupItems)) * 100) + : 0; + +/* + * Load user dashboard layout. + */ +$userLayout = $defaultLayout; + +try { + $stmt = $db->prepare(" + SELECT layout_json + FROM user_dashboard_layouts + WHERE iduser = :iduser + AND page = :page + LIMIT 1 + "); + $stmt->execute([ + ':iduser' => $iduserlogin, + ':page' => $dashboardPage, + ]); + + $savedLayoutJson = $stmt->fetchColumn(); + + if ($savedLayoutJson) { + $savedLayout = json_decode($savedLayoutJson, true); + + if (is_array($savedLayout)) { + $cleanLayout = []; + + foreach ($savedLayout as $widgetKey) { + if (in_array($widgetKey, $availableWidgets, true) && !in_array($widgetKey, $cleanLayout, true)) { + $cleanLayout[] = $widgetKey; + } + } + + foreach ($defaultLayout as $widgetKey) { + if (!in_array($widgetKey, $cleanLayout, true)) { + $cleanLayout[] = $widgetKey; + } + } + + $userLayout = $cleanLayout; + } + } +} catch (Throwable $e) { + $userLayout = $defaultLayout; +} + +$pageTitle = 'TRFgo Dashboard'; +?> + + + + + + + + + + + + <?= e($pageTitle); ?> - <?= isset($titlewebsite) ? e($titlewebsite) : 'TRFgo'; ?> + + + + + +
+ + + +
+
+ +
+
+
+ + TRFgo Platform +
+ +

+ Welcome, +

+ +

+ Manage companies, brands, departments and user access from one central workspace. + TRFgo is the customer-side platform for digital test request forms, sample tracking + and laboratory result exchange. +

+ + +
+
+ +
+
+
Your Dashboard
+

+ Drag widgets using the handle. The layout is saved for your user account. +

+
+ +
+ + + +
+
+ +
+ + + + +
+
+
+
+
+
+ +
+
+
Companies
+
+
active companies
+
+
+ +
+
+
+
+
+ + + +
+
+
+
+
+
+ +
+
+
Brands
+
+
active brands
+
+
+ +
+
+
+
+
+ + + +
+
+
+
+
+
+ +
+
+
Departments
+
+
active departments
+
+
+ +
+
+
+
+
+ + + +
+
+
+
+
+
+ +
+
+
Company Users
+
+
active assignments
+
+
+ +
+
+
+
+
+ + + +
+
+
+
+
+
Company Structure Overview
+

Brands, departments and user assignments by company

+
+
+
+
+ +
+ 0): ?> +
+ +
+ +
No chart data available
+

Create your first company, brand or department to populate this chart.

+
+ +
+
+
+ + + +
+
+
+
+
+
TRFgo Setup
+

Initial configuration progress

+
+
+
+
+ +
+
+ % completed + / +
+ +
+
+
+ + +
+
+
+ +
+
+
+ + + Ready + + Missing + +
+ +
+
+
+ + + + + + + +
+
+
+
+
+
Recent Companies
+

Latest configured organizations in TRFgo

+
+ +
+
+ +
+ 0): ?> +
+ + + + + + + + + + + + + + + + + + + + + + + +
CompanyStatusBrandsDepartmentsUsersCreated
+
+ + + +
+ + Active + + Suspended + + Inactive + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
No companies configured yet
+

Create your first company to start using TRFgo.

+ + + Add first company + +
+ +
+
+
+ + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/public/userarea/dashboard-customer.php b/public/userarea/dashboard-customer.php new file mode 100644 index 00000000..5f5ad6e2 --- /dev/null +++ b/public/userarea/dashboard-customer.php @@ -0,0 +1,2002 @@ + + +prepare(" + SELECT COUNT(*) + FROM information_schema.tables + WHERE table_schema = DATABASE() + AND table_name = :table_name + "); + $stmt->execute([':table_name' => $tableName]); + + return (int) $stmt->fetchColumn() > 0; + } catch (Throwable $e) { + return false; + } +} + +function getScalar(PDO $db, string $sql, array $params = []) +{ + try { + $stmt = $db->prepare($sql); + $stmt->execute($params); + + return $stmt->fetchColumn(); + } catch (Throwable $e) { + return 0; + } +} + +function getRows(PDO $db, string $sql, array $params = []) +{ + try { + $stmt = $db->prepare($sql); + $stmt->execute($params); + + return $stmt->fetchAll(PDO::FETCH_ASSOC); + } catch (Throwable $e) { + return []; + } +} + +$dashboardPage = 'dashboard_customer'; + +/* + * Widget registry. + */ +$availableWidgets = [ + 'customer_company_profile', + 'kpi_business_partners', + 'kpi_samples', + 'kpi_sample_parts', + 'kpi_documents', + 'kpi_trf_requests', + 'kpi_pending_requests', + 'kpi_reports_received', + 'master_data_readiness', + 'chart_trf_status', + 'recent_samples', + 'recent_trf_requests', + 'document_repository', + 'quick_actions', +]; + +$defaultLayout = [ + 'customer_company_profile', + 'kpi_business_partners', + 'kpi_samples', + 'kpi_sample_parts', + 'kpi_documents', + 'master_data_readiness', + 'recent_samples', + 'quick_actions', + 'kpi_trf_requests', + 'kpi_pending_requests', + 'kpi_reports_received', + 'chart_trf_status', + 'recent_trf_requests', + 'document_repository', +]; + +/* + * Find customer company scope for current user. + * + * SaaS: + * - user can be linked to one or more companies through company_users. + * + * On-premise: + * - if no assignment exists, fallback to TRFGO_DEFAULT_COMPANY_ID or first company. + */ +$userCompanies = getRows($db, " + SELECT DISTINCT + c.idcompany, + c.company_name, + c.legal_name, + c.status, + c.email, + c.phone, + c.city, + c.external_code, + cu.company_role, + cu.user_scope + FROM company_users cu + INNER JOIN companies c ON c.idcompany = cu.idcompany + WHERE cu.iduser = :iduser + AND cu.status = 'active' + ORDER BY c.company_name ASC +", [ + ':iduser' => $iduserlogin, +]); + +$selectedCompanyId = 0; + +if (!empty($_GET['idcompany'])) { + $selectedCompanyId = (int) $_GET['idcompany']; +} + +if ($selectedCompanyId <= 0 && count($userCompanies) > 0) { + $selectedCompanyId = (int) $userCompanies[0]['idcompany']; +} + +/* + * On-premise fallback. + */ +if ($selectedCompanyId <= 0) { + $defaultCompanyId = isset($_ENV['TRFGO_DEFAULT_COMPANY_ID']) ? (int) $_ENV['TRFGO_DEFAULT_COMPANY_ID'] : 0; + + if ($defaultCompanyId > 0) { + $selectedCompanyId = $defaultCompanyId; + } else { + $selectedCompanyId = (int) getScalar($db, " + SELECT idcompany + FROM companies + ORDER BY idcompany ASC + LIMIT 1 + "); + } +} + +$selectedCompany = null; + +if ($selectedCompanyId > 0) { + $rows = getRows($db, " + SELECT * + FROM companies + WHERE idcompany = :idcompany + LIMIT 1 + ", [ + ':idcompany' => $selectedCompanyId, + ]); + + $selectedCompany = $rows[0] ?? null; +} + +$companyParams = [ + ':idcompany' => $selectedCompanyId, +]; + +/* + * Existing setup data. + */ +$totalBrands = $selectedCompanyId > 0 + ? (int) getScalar($db, "SELECT COUNT(*) FROM brands WHERE idcompany = :idcompany", $companyParams) + : 0; + +$totalDepartments = $selectedCompanyId > 0 + ? (int) getScalar($db, "SELECT COUNT(*) FROM departments WHERE idcompany = :idcompany", $companyParams) + : 0; + +$totalCompanyUsers = $selectedCompanyId > 0 + ? (int) getScalar($db, "SELECT COUNT(*) FROM company_users WHERE idcompany = :idcompany AND status = 'active'", $companyParams) + : 0; + +/* + * Future operational tables. + * These names are provisional and will be created later with Phinx. + */ +$hasSamplesTable = tableExists($db, 'samples'); +$hasTrfRequestsTable = tableExists($db, 'trf_requests'); +$hasLabReportsTable = tableExists($db, 'lab_reports'); +$hasDocumentsTable = tableExists($db, 'documents') || tableExists($db, 'trf_documents'); +$hasBusinessPartnersTable = tableExists($db, 'business_partners'); +$hasSamplePartsTable = tableExists($db, 'sample_parts'); +$hasSamplePhotosTable = tableExists($db, 'sample_photos'); +/* + * KPI counters. + */ +$totalSamples = 0; +$totalTrfRequests = 0; +$pendingTrfRequests = 0; +$reportsReceived = 0; +$totalDocuments = 0; +$totalBusinessPartners = 0; +$activeBusinessPartners = 0; +$totalSampleParts = 0; +$totalSamplePhotos = 0; +$recentSamples = []; + +if ($selectedCompanyId > 0 && $hasSamplesTable) { + $totalSamples = (int) getScalar($db, " + SELECT COUNT(*) + FROM samples + WHERE idcompany = :idcompany + ", $companyParams); +} +if ($selectedCompanyId > 0 && $hasBusinessPartnersTable) { + $totalBusinessPartners = (int) getScalar($db, " + SELECT COUNT(*) + FROM business_partners + WHERE idcompany = :idcompany + ", $companyParams); + + $activeBusinessPartners = (int) getScalar($db, " + SELECT COUNT(*) + FROM business_partners + WHERE idcompany = :idcompany + AND status = 'active' + ", $companyParams); +} + +if ($selectedCompanyId > 0 && $hasSamplePartsTable && $hasSamplesTable) { + $totalSampleParts = (int) getScalar($db, " + SELECT COUNT(sp.idpart) + FROM sample_parts sp + INNER JOIN samples s ON s.idsample = sp.idsample + WHERE s.idcompany = :idcompany + ", $companyParams); +} + +if ($selectedCompanyId > 0 && $hasSamplePhotosTable && $hasSamplesTable) { + $totalSamplePhotos = (int) getScalar($db, " + SELECT COUNT(sph.idsamplephoto) + FROM sample_photos sph + INNER JOIN samples s ON s.idsample = sph.idsample + WHERE s.idcompany = :idcompany + ", $companyParams); +} + +if ($selectedCompanyId > 0 && $hasSamplesTable) { + $recentSamples = getRows($db, " + SELECT + s.idsample, + s.sample_code, + s.external_sample_id, + s.article_no, + s.po_no, + s.season, + s.sample_description, + s.color, + s.production_stage, + s.status, + s.created_at, + b.brand_name, + d.department_name, + bp1.partner_name AS producer_name, + bp2.partner_name AS supplier_name, + COUNT(DISTINCT sp.idpart) AS parts_count, + COUNT(DISTINCT sph.idsamplephoto) AS photos_count, + COUNT(DISTINCT sd.idsampledocument) AS documents_count + FROM samples s + LEFT JOIN brands b ON b.idbrand = s.idbrand + LEFT JOIN departments d ON d.iddepartment = s.iddepartment + LEFT JOIN business_partners bp1 ON bp1.idpartner = s.idproducer + LEFT JOIN business_partners bp2 ON bp2.idpartner = s.idsupplier + LEFT JOIN sample_parts sp ON sp.idsample = s.idsample + LEFT JOIN sample_photos sph ON sph.idsample = s.idsample + LEFT JOIN sample_documents sd ON sd.idsample = s.idsample + WHERE s.idcompany = :idcompany + GROUP BY + s.idsample, + s.sample_code, + s.external_sample_id, + s.article_no, + s.po_no, + s.season, + s.sample_description, + s.color, + s.production_stage, + s.status, + s.created_at, + b.brand_name, + d.department_name, + bp1.partner_name, + bp2.partner_name + ORDER BY s.created_at DESC, s.idsample DESC + LIMIT 8 + ", $companyParams); +} + +if ($selectedCompanyId > 0 && $hasTrfRequestsTable) { + $totalTrfRequests = (int) getScalar($db, " + SELECT COUNT(*) + FROM trf_requests + WHERE idcompany = :idcompany + ", $companyParams); + + $pendingTrfRequests = (int) getScalar($db, " + SELECT COUNT(*) + FROM trf_requests + WHERE idcompany = :idcompany + AND status IN ('draft', 'submitted', 'available_for_lab', 'pulled_by_lab', 'in_lims', 'testing') + ", $companyParams); +} + +if ($selectedCompanyId > 0 && $hasLabReportsTable) { + $reportsReceived = (int) getScalar($db, " + SELECT COUNT(lr.idlabreport) + FROM lab_reports lr + INNER JOIN trf_requests trf ON trf.idtrf = lr.idtrf + WHERE trf.idcompany = :idcompany + ", $companyParams); +} + +if ($selectedCompanyId > 0 && tableExists($db, 'documents')) { + $totalDocuments = (int) getScalar($db, " + SELECT COUNT(*) + FROM documents + WHERE idcompany = :idcompany + ", $companyParams); +} + +if ($selectedCompanyId > 0 && !$totalDocuments && tableExists($db, 'trf_documents')) { + $totalDocuments = (int) getScalar($db, " + SELECT COUNT(td.iddocument) + FROM trf_documents td + INNER JOIN trf_requests trf ON trf.idtrf = td.idtrf + WHERE trf.idcompany = :idcompany + ", $companyParams); +} + +/* + * TRF status chart data. + */ +$trfStatusRows = []; + +if ($selectedCompanyId > 0 && $hasTrfRequestsTable) { + $trfStatusRows = getRows($db, " + SELECT status, COUNT(*) AS total + FROM trf_requests + WHERE idcompany = :idcompany + GROUP BY status + ORDER BY status ASC + ", $companyParams); +} + +$trfStatusLabels = []; +$trfStatusValues = []; + +foreach ($trfStatusRows as $row) { + $trfStatusLabels[] = ucfirst(str_replace('_', ' ', $row['status'])); + $trfStatusValues[] = (int) $row['total']; +} + +/* + * Recent TRF requests. + */ +$recentTrfRequests = []; + +if ($selectedCompanyId > 0 && $hasTrfRequestsTable) { + $recentTrfRequests = getRows($db, " + SELECT + idtrf, + trf_code, + external_trf_id, + trf_type, + service_required, + status, + created_at + FROM trf_requests + WHERE idcompany = :idcompany + ORDER BY created_at DESC, idtrf DESC + LIMIT 8 + ", $companyParams); +} + +/* + * Pending actions. + */ +$pendingActions = [ + [ + 'title' => 'Create business partners', + 'text' => $hasBusinessPartnersTable ? 'Add producers, suppliers, vendors and factories.' : 'Business partner module is not active yet.', + 'icon' => 'bx bx-network-chart', + 'completed' => $hasBusinessPartnersTable && $totalBusinessPartners > 0, + 'link' => $hasBusinessPartnersTable ? 'business-partners.php' : '#', + ], + [ + 'title' => 'Create or import samples', + 'text' => $hasSamplesTable ? 'Start building product identity cards.' : 'Sample module is not active yet.', + 'icon' => 'bx bx-package', + 'completed' => $hasSamplesTable && $totalSamples > 0, + 'link' => $hasSamplesTable ? 'samples.php' : '#', + ], + [ + 'title' => 'Add BOM / parts', + 'text' => $hasSamplePartsTable ? 'Complete sample identity with materials and components.' : 'BOM module is not active yet.', + 'icon' => 'bx bx-git-branch', + 'completed' => $hasSamplePartsTable && $totalSampleParts > 0, + 'link' => $hasSamplesTable ? 'samples.php' : '#', + ], + [ + 'title' => 'Attach documents', + 'text' => $hasDocumentsTable ? 'Attach technical sheets, certificates and declarations.' : 'Document repository is not active yet.', + 'icon' => 'bx bx-folder', + 'completed' => $hasDocumentsTable && $totalDocuments > 0, + 'link' => $hasDocumentsTable ? 'documents.php' : '#', + ], + [ + 'title' => 'Prepare TRF requests', + 'text' => $hasTrfRequestsTable ? 'Create test requests from one or more samples.' : 'TRF request module is not active yet.', + 'icon' => 'bx bx-file', + 'completed' => $hasTrfRequestsTable && $totalTrfRequests > 0, + 'link' => $hasTrfRequestsTable ? 'trf-requests.php' : '#', + ], +]; + +$completedPendingActions = count(array_filter($pendingActions, function ($item) { + return $item['completed']; +})); + +$operationalProgress = count($pendingActions) > 0 + ? round(($completedPendingActions / count($pendingActions)) * 100) + : 0; + +/* + * AJAX: save/reset dashboard layout. + */ +if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action'])) { + try { + if ($_POST['action'] === 'save_dashboard_layout') { + $layoutRaw = $_POST['layout'] ?? '[]'; + $layout = json_decode($layoutRaw, true); + + if (!is_array($layout)) { + jsonResponse([ + 'success' => false, + 'message' => 'Invalid dashboard layout.' + ]); + } + + $cleanLayout = []; + + foreach ($layout as $widgetKey) { + if (in_array($widgetKey, $availableWidgets, true) && !in_array($widgetKey, $cleanLayout, true)) { + $cleanLayout[] = $widgetKey; + } + } + + foreach ($defaultLayout as $widgetKey) { + if (!in_array($widgetKey, $cleanLayout, true)) { + $cleanLayout[] = $widgetKey; + } + } + + $layoutJson = json_encode($cleanLayout); + + $stmt = $db->prepare(" + INSERT INTO user_dashboard_layouts ( + iduser, + page, + layout_json, + created_at, + updated_at + ) VALUES ( + :iduser, + :page, + :layout_json, + NOW(), + NOW() + ) + ON DUPLICATE KEY UPDATE + layout_json = VALUES(layout_json), + updated_at = NOW() + "); + + $stmt->execute([ + ':iduser' => $iduserlogin, + ':page' => $dashboardPage, + ':layout_json' => $layoutJson, + ]); + + jsonResponse([ + 'success' => true, + 'message' => 'Dashboard layout saved.' + ]); + } + + if ($_POST['action'] === 'reset_dashboard_layout') { + $stmt = $db->prepare(" + DELETE FROM user_dashboard_layouts + WHERE iduser = :iduser + AND page = :page + "); + + $stmt->execute([ + ':iduser' => $iduserlogin, + ':page' => $dashboardPage, + ]); + + jsonResponse([ + 'success' => true, + 'message' => 'Dashboard layout reset.' + ]); + } + + jsonResponse([ + 'success' => false, + 'message' => 'Unknown action.' + ]); + } catch (Throwable $e) { + jsonResponse([ + 'success' => false, + 'message' => $e->getMessage() + ]); + } +} + +/* + * Load user layout. + */ +$userLayout = $defaultLayout; + +try { + $stmt = $db->prepare(" + SELECT layout_json + FROM user_dashboard_layouts + WHERE iduser = :iduser + AND page = :page + LIMIT 1 + "); + + $stmt->execute([ + ':iduser' => $iduserlogin, + ':page' => $dashboardPage, + ]); + + $savedLayoutJson = $stmt->fetchColumn(); + + if ($savedLayoutJson) { + $savedLayout = json_decode($savedLayoutJson, true); + + if (is_array($savedLayout)) { + $cleanLayout = []; + + foreach ($savedLayout as $widgetKey) { + if (in_array($widgetKey, $availableWidgets, true) && !in_array($widgetKey, $cleanLayout, true)) { + $cleanLayout[] = $widgetKey; + } + } + + foreach ($defaultLayout as $widgetKey) { + if (!in_array($widgetKey, $cleanLayout, true)) { + $cleanLayout[] = $widgetKey; + } + } + + $userLayout = $cleanLayout; + } + } +} catch (Throwable $e) { + $userLayout = $defaultLayout; +} + +$pageTitle = 'Customer Dashboard'; +$companyName = $selectedCompany['company_name'] ?? 'Your Company'; +$companyLegalName = $selectedCompany['legal_name'] ?? ''; +?> + + + + + + + + + + + + <?= e($pageTitle); ?> - <?= isset($titlewebsite) ? e($titlewebsite) : 'TRFgo'; ?> + + + + + +
+ + + +
+
+ +
+
+
+
+
+ + Customer Workspace +
+ +

+ +

+ +

+ Manage your samples, digital test request forms, laboratory reports and technical documents from one operational dashboard. + This workspace is designed for customer users and on-premise installations. +

+ + +
+ + 1): ?> +
+ +
+ +
+
+
+ + +
+ No company available. + This user is not linked to any TRFgo company yet. +
+ + +
+
+
Operational Dashboard
+

+ Drag widgets using the handle. The layout is saved for your user account. +

+
+ +
+ + + +
+
+ +
+ + + + +
+
+
+
+
+
Company Profile
+

Current customer workspace

+
+
+
+
+ +
+
+
Company
+
+
+ +
+
Legal Name
+
+
+ +
+
Brands
+
+
+ +
+
Departments
+
+
+ +
+
Active Users
+
+
+
+
+
+ + + +
+
+
+
+
+ + Coming soon + +
+ +
+
+
Business Partners
+
+
active partners
+
+
+ +
+
+
+
+
+ + + +
+
+
+
+
+ + Coming soon + +
+ +
+
+
Samples
+
+
Products or samples in archive
+
+
+ +
+
+
+
+
+ + + +
+
+
+
+
+ + Coming soon + +
+ +
+
+
BOM / Parts
+
+
sample photos uploaded
+
+
+ +
+
+
+
+
+ + + +
+
+
+
+
+ + Coming soon + +
+ +
+
+
TRF Requests
+
+
Digital test request forms
+
+
+ +
+
+
+
+
+ + + +
+
+
+
+
+ + Coming soon + +
+ +
+
+
Documents
+
+
Technical files and certificates
+
+
+ +
+
+
+
+
+ + + +
+
+
+
+
+ + Coming soon + +
+ +
+
+
Pending
+
+
Requests not completed yet
+
+
+ +
+
+
+
+
+ + + +
+
+
+
+
+ + Coming soon + +
+ +
+
+
Reports
+
+
Laboratory reports received
+
+
+ +
+
+
+
+
+ + + +
+
+
+
+
+
TRF Status Overview
+

Distribution of digital test request forms by status

+
+
+
+
+ +
+ 0): ?> +
+ +
+ +
TRF chart not available yet
+

The chart will be populated when TRF requests are created.

+
+ +
+
+
+ + + +
+
+
+
+
+
Master Data Readiness
+

Product identity card setup progress

+
+
+
+
+ +
+
+ % ready + / +
+ +
+
+
+ + +
+
+
+ +
+
+
+
+
+
+ + + Ready + + Todo + +
+ +
+
+
+ + + +
+
+
+
+
+
Recent Samples
+

Latest product identity cards created by the customer

+
+ +
+
+ +
+ 0): ?> +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SampleBrand / Dept.Producer / SupplierBOMFilesStatus
+
+
+ + + | Article: + +
+
+
+
+
+
+
+
+ parts + + + files + + + + + +
+
+ +
+ +
No samples yet
+

The latest product identity cards will appear here.

+ + + Add sample + +
+ +
+
+
+ + + +
+
+
+
+
+
Recent TRF Requests
+

Latest customer test request forms

+
+ +
+
+ +
+ 0): ?> +
+ + + + + + + + + + + + + + + + + + + + + +
TRF CodeTypeServiceStatusCreated
+
+ +
+ +
+ + + + + +
+
+ +
+ +
No TRF requests yet
+

The latest digital test request forms will appear here.

+ + + New TRF request + +
+ +
+
+
+ + + +
+
+
+
+
+
Document Repository
+

Technical files and report archive

+
+
+
+
+ +
+
+
+
Documents
+
+
Linked technical and laboratory files
+
+
+ +
+
+ + +
+ Coming soon.
+ The document repository will be activated with the sample/TRF modules. +
+ + + + Open Repository + + +
+
+
+ + + + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/public/userarea/departments.php b/public/userarea/departments.php new file mode 100644 index 00000000..303465cf --- /dev/null +++ b/public/userarea/departments.php @@ -0,0 +1,1230 @@ + + + true, + 'brands' => [] + ]); + } + + $stmt = $db->prepare(" + SELECT idbrand, brand_name, status + FROM brands + WHERE idcompany = :idcompany + ORDER BY brand_name ASC + "); + $stmt->execute([':idcompany' => $idcompany]); + + jsonResponse([ + 'success' => true, + 'brands' => $stmt->fetchAll(PDO::FETCH_ASSOC) + ]); + } + + if ($action === 'save_department') { + $iddepartment = isset($_POST['iddepartment']) ? (int) $_POST['iddepartment'] : 0; + $idcompany = isset($_POST['idcompany']) ? (int) $_POST['idcompany'] : 0; + $idbrand = !empty($_POST['idbrand']) ? (int) $_POST['idbrand'] : null; + $departmentName = trim($_POST['department_name'] ?? ''); + $externalDepartmentCode = trim($_POST['external_department_code'] ?? ''); + $status = $_POST['status'] ?? 'active'; + + $allowedStatuses = ['active', 'inactive']; + + if ($idcompany <= 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Company is required.' + ]); + } + + if ($departmentName === '') { + jsonResponse([ + 'success' => false, + 'message' => 'Department name is required.' + ]); + } + + if (!in_array($status, $allowedStatuses, true)) { + $status = 'active'; + } + + /* + * Check company exists. + */ + $stmt = $db->prepare("SELECT COUNT(*) FROM companies WHERE idcompany = :idcompany"); + $stmt->execute([':idcompany' => $idcompany]); + + if ((int) $stmt->fetchColumn() === 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Selected company does not exist.' + ]); + } + + /* + * If a brand is selected, check that it belongs to the selected company. + */ + if ($idbrand !== null) { + $stmt = $db->prepare(" + SELECT COUNT(*) + FROM brands + WHERE idbrand = :idbrand + AND idcompany = :idcompany + "); + $stmt->execute([ + ':idbrand' => $idbrand, + ':idcompany' => $idcompany, + ]); + + if ((int) $stmt->fetchColumn() === 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Selected brand does not belong to the selected company.' + ]); + } + } + + if ($iddepartment > 0) { + $sql = " + UPDATE departments + SET + idcompany = :idcompany, + idbrand = :idbrand, + department_name = :department_name, + external_department_code = :external_department_code, + status = :status, + updated_at = NOW() + WHERE iddepartment = :iddepartment + "; + + $stmt = $db->prepare($sql); + $stmt->execute([ + ':idcompany' => $idcompany, + ':idbrand' => $idbrand, + ':department_name' => $departmentName, + ':external_department_code' => $externalDepartmentCode !== '' ? $externalDepartmentCode : null, + ':status' => $status, + ':iddepartment' => $iddepartment, + ]); + + jsonResponse([ + 'success' => true, + 'message' => 'Department updated successfully.' + ]); + } + + $sql = " + INSERT INTO departments ( + idcompany, + idbrand, + department_name, + external_department_code, + status, + created_at, + updated_at + ) VALUES ( + :idcompany, + :idbrand, + :department_name, + :external_department_code, + :status, + NOW(), + NOW() + ) + "; + + $stmt = $db->prepare($sql); + $stmt->execute([ + ':idcompany' => $idcompany, + ':idbrand' => $idbrand, + ':department_name' => $departmentName, + ':external_department_code' => $externalDepartmentCode !== '' ? $externalDepartmentCode : null, + ':status' => $status, + ]); + + jsonResponse([ + 'success' => true, + 'message' => 'Department created successfully.' + ]); + } + + if ($action === 'get_department') { + $iddepartment = isset($_POST['iddepartment']) ? (int) $_POST['iddepartment'] : 0; + + if ($iddepartment <= 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Invalid department id.' + ]); + } + + $stmt = $db->prepare(" + SELECT * + FROM departments + WHERE iddepartment = :iddepartment + LIMIT 1 + "); + $stmt->execute([':iddepartment' => $iddepartment]); + $department = $stmt->fetch(PDO::FETCH_ASSOC); + + if (!$department) { + jsonResponse([ + 'success' => false, + 'message' => 'Department not found.' + ]); + } + + jsonResponse([ + 'success' => true, + 'department' => $department + ]); + } + + if ($action === 'change_status') { + $iddepartment = isset($_POST['iddepartment']) ? (int) $_POST['iddepartment'] : 0; + $status = $_POST['status'] ?? 'inactive'; + + $allowedStatuses = ['active', 'inactive']; + + if ($iddepartment <= 0 || !in_array($status, $allowedStatuses, true)) { + jsonResponse([ + 'success' => false, + 'message' => 'Invalid request.' + ]); + } + + $stmt = $db->prepare(" + UPDATE departments + SET status = :status, updated_at = NOW() + WHERE iddepartment = :iddepartment + "); + $stmt->execute([ + ':status' => $status, + ':iddepartment' => $iddepartment, + ]); + + jsonResponse([ + 'success' => true, + 'message' => 'Department status updated successfully.' + ]); + } + + if ($action === 'delete_department') { + $iddepartment = isset($_POST['iddepartment']) ? (int) $_POST['iddepartment'] : 0; + + if ($iddepartment <= 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Invalid department id.' + ]); + } + + /* + * Safe delete rule: + * Do not delete a department if it has linked users. + */ + $stmt = $db->prepare(" + SELECT COUNT(*) + FROM company_users + WHERE iddepartment = :iddepartment + "); + $stmt->execute([':iddepartment' => $iddepartment]); + + if ((int) $stmt->fetchColumn() > 0) { + jsonResponse([ + 'success' => false, + 'message' => 'This department has linked users. Set it as inactive instead of deleting it.' + ]); + } + + $stmt = $db->prepare(" + DELETE FROM departments + WHERE iddepartment = :iddepartment + "); + $stmt->execute([':iddepartment' => $iddepartment]); + + jsonResponse([ + 'success' => true, + 'message' => 'Department deleted successfully.' + ]); + } + + jsonResponse([ + 'success' => false, + 'message' => 'Unknown action.' + ]); + } catch (Throwable $e) { + jsonResponse([ + 'success' => false, + 'message' => $e->getMessage() + ]); + } +} + +/* + * Page data + */ +$companies = []; + +try { + $stmt = $db->query(" + SELECT idcompany, company_name, status + FROM companies + ORDER BY company_name ASC + "); + $companies = $stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (Throwable $e) { + $companies = []; +} + +$brands = []; + +try { + $stmt = $db->query(" + SELECT idbrand, idcompany, brand_name, status + FROM brands + ORDER BY brand_name ASC + "); + $brands = $stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (Throwable $e) { + $brands = []; +} + +$departments = []; + +try { + $stmt = $db->query(" + SELECT + d.iddepartment, + d.idcompany, + d.idbrand, + d.department_name, + d.external_department_code, + d.status, + d.created_at, + c.company_name, + c.status AS company_status, + b.brand_name, + b.status AS brand_status, + COUNT(DISTINCT cu.idcompanyuser) AS user_count + FROM departments d + INNER JOIN companies c ON c.idcompany = d.idcompany + LEFT JOIN brands b ON b.idbrand = d.idbrand + LEFT JOIN company_users cu ON cu.iddepartment = d.iddepartment + GROUP BY + d.iddepartment, + d.idcompany, + d.idbrand, + d.department_name, + d.external_department_code, + d.status, + d.created_at, + c.company_name, + c.status, + b.brand_name, + b.status + ORDER BY c.company_name ASC, b.brand_name ASC, d.department_name ASC + "); + $departments = $stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (Throwable $e) { + $departments = []; +} + +$pageTitle = 'Departments'; +?> + + + + + + + + + + + + <?= e($pageTitle); ?> - <?= isset($titlewebsite) ? e($titlewebsite) : 'TRFgo'; ?> + + + + + +
+ + + +
+
+ +
+
+
+
+
+ + TRFgo Registry +
+

Departments

+

+ Manage departments and operational business units for each company. + Departments can optionally be linked to a brand and will later drive TRF visibility and user permissions. +

+
+ +
+ +
+
+
+
+ + $row['status'] === 'active')); + $inactiveDepartments = count(array_filter($departments, fn($row) => $row['status'] === 'inactive')); + ?> + +
+
+
+
+
+
+
Total Departments
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+
Active
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+
Inactive
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
Department List
+

Departments configured by company and brand

+
+ + +
+
+ +
+ +
+ No companies available. + Create at least one company before adding departments. +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DepartmentCompanyBrandExternal CodeUsersStatusCreatedActions
+
+
ID:
+
+
+ +
Company status:
+ +
+ +
+ +
Brand status:
+ + + Not linked + +
+ -'; ?> + + + + + + + + Active + + Inactive + + + + + + + + + + + + + +
+
+
+
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + \ No newline at end of file diff --git a/public/userarea/sample-detail.php b/public/userarea/sample-detail.php new file mode 100644 index 00000000..a191254c --- /dev/null +++ b/public/userarea/sample-detail.php @@ -0,0 +1,2560 @@ + + +format('Ymd_His') + . '_EuropeRome_' + . $cleanOriginalName + . '.' . $extension; +} + +function resizeAndConvertImageToJpeg(string $sourcePath, string $targetPath, int $maxSize = 1600, int $quality = 82): bool +{ + $imageInfo = getimagesize($sourcePath); + + if ($imageInfo === false) { + return false; + } + + $mimeType = $imageInfo['mime']; + $sourceImage = null; + + switch ($mimeType) { + case 'image/jpeg': + $sourceImage = imagecreatefromjpeg($sourcePath); + break; + + case 'image/png': + $sourceImage = imagecreatefrompng($sourcePath); + break; + + case 'image/webp': + if (!function_exists('imagecreatefromwebp')) { + return false; + } + $sourceImage = imagecreatefromwebp($sourcePath); + break; + + default: + return false; + } + + if (!$sourceImage) { + return false; + } + + $originalWidth = imagesx($sourceImage); + $originalHeight = imagesy($sourceImage); + + if ($originalWidth <= 0 || $originalHeight <= 0) { + imagedestroy($sourceImage); + return false; + } + + $ratio = min($maxSize / $originalWidth, $maxSize / $originalHeight, 1); + + $newWidth = (int) round($originalWidth * $ratio); + $newHeight = (int) round($originalHeight * $ratio); + + $targetImage = imagecreatetruecolor($newWidth, $newHeight); + + // White background avoids black areas when converting transparent PNG/WEBP to JPG. + $white = imagecolorallocate($targetImage, 255, 255, 255); + imagefill($targetImage, 0, 0, $white); + + imagecopyresampled( + $targetImage, + $sourceImage, + 0, + 0, + 0, + 0, + $newWidth, + $newHeight, + $originalWidth, + $originalHeight + ); + + $result = imagejpeg($targetImage, $targetPath, $quality); + + imagedestroy($sourceImage); + imagedestroy($targetImage); + + return $result; +} + +$idsample = isset($_GET['idsample']) ? (int) $_GET['idsample'] : 0; + +if ($idsample <= 0) { + die('Invalid sample id.'); +} + + +$partRiskLevels = [ + 'unknown' => 'Unknown', + 'low' => 'Low', + 'medium' => 'Medium', + 'high' => 'High', + 'critical' => 'Critical', +]; + +$photoTypes = [ + 'main' => 'Main', + 'product' => 'Product', + 'label' => 'Label', + 'packaging' => 'Packaging', + 'warning' => 'Warning', + 'detail' => 'Detail', + 'other' => 'Other', +]; + +$documentTypes = [ + 'technical_sheet' => 'Technical Sheet', + 'declaration' => 'Declaration', + 'bom' => 'BOM', + 'photo' => 'Photo', + 'certificate' => 'Certificate', + 'test_report' => 'Test Report', + 'supplier_document' => 'Supplier Document', + 'invoice' => 'Invoice', + 'manual' => 'Manual', + 'other' => 'Other', +]; + +/* + * Load sample. + */ +$stmt = $db->prepare(" + SELECT + s.*, + c.company_name, + c.legal_name AS company_legal_name, + b.brand_name, + d.department_name, + bp1.partner_name AS producer_name, + bp2.partner_name AS supplier_name, + ac.name AS country_of_origin_name, + u.email AS created_by_email, + u.first_name AS created_by_first_name, + u.last_name AS created_by_last_name + FROM samples s + INNER JOIN companies c ON c.idcompany = s.idcompany + LEFT JOIN brands b ON b.idbrand = s.idbrand + LEFT JOIN departments d ON d.iddepartment = s.iddepartment + LEFT JOIN business_partners bp1 ON bp1.idpartner = s.idproducer + LEFT JOIN business_partners bp2 ON bp2.idpartner = s.idsupplier + LEFT JOIN auth_countries ac ON ac.id = s.country_of_origin + LEFT JOIN auth_users u ON u.id = s.created_by + WHERE s.idsample = :idsample + LIMIT 1 +"); +$stmt->execute([':idsample' => $idsample]); +$sample = $stmt->fetch(PDO::FETCH_ASSOC); + +if (!$sample) { + die('Sample not found.'); +} + +$idcompany = (int) $sample['idcompany']; + +/* + * Upload folders. + * Current file is inside public/userarea. + * Files will be stored inside public/userarea/uploads/trfgo. + */ +$uploadBaseDir = __DIR__ . '/uploads/trfgo'; +$uploadBaseWebPath = 'uploads/trfgo/'; + +$samplePhotoRelativeDir = 'company_' . $idcompany . '/samples/' . $idsample . '/photos'; +$documentRelativeDir = 'company_' . $idcompany . '/samples/' . $idsample . '/documents'; + +$samplePhotoDir = $uploadBaseDir . '/' . $samplePhotoRelativeDir; +$documentDir = $uploadBaseDir . '/' . $documentRelativeDir; + +ensureDirectory($samplePhotoDir); +ensureDirectory($documentDir); + +$photoWebPath = $uploadBaseWebPath; +$documentWebPath = $uploadBaseWebPath; + +/* + * AJAX actions. + */ +if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action'])) { + $action = $_POST['action']; + + try { + if ($action === 'save_part') { + $idpart = isset($_POST['idpart']) ? (int) $_POST['idpart'] : 0; + $parentIdpart = !empty($_POST['parent_idpart']) ? (int) $_POST['parent_idpart'] : null; + $partCode = trim($_POST['part_code'] ?? ''); + $partName = trim($_POST['part_name'] ?? ''); + $partDescription = trim($_POST['part_description'] ?? ''); + $material = trim($_POST['material'] ?? ''); + $color = trim($_POST['color'] ?? ''); + $quantity = trim($_POST['quantity'] ?? ''); + $unit = trim($_POST['unit'] ?? ''); + $supplierId = !empty($_POST['supplier_id']) ? (int) $_POST['supplier_id'] : null; + $producerId = !empty($_POST['producer_id']) ? (int) $_POST['producer_id'] : null; + $position = trim($_POST['position'] ?? ''); + $riskLevel = $_POST['risk_level'] ?? 'unknown'; + $notes = trim($_POST['notes'] ?? ''); + $sortOrder = isset($_POST['sort_order']) ? (int) $_POST['sort_order'] : 0; + + if ($partName === '') { + jsonResponse([ + 'success' => false, + 'message' => 'Part name is required.' + ]); + } + + if (!array_key_exists($riskLevel, $partRiskLevels)) { + $riskLevel = 'unknown'; + } + + /* + * Validate parent part belongs to the same sample. + */ + if ($parentIdpart !== null) { + $stmt = $db->prepare(" + SELECT COUNT(*) + FROM sample_parts + WHERE idpart = :idpart + AND idsample = :idsample + "); + $stmt->execute([ + ':idpart' => $parentIdpart, + ':idsample' => $idsample, + ]); + + if ((int) $stmt->fetchColumn() === 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Selected parent part does not belong to this sample.' + ]); + } + } + + /* + * Validate supplier/producer belong to the sample company. + */ + foreach ( + [ + 'supplier' => $supplierId, + 'producer' => $producerId, + ] as $label => $partnerId + ) { + if ($partnerId !== null) { + $stmt = $db->prepare(" + SELECT COUNT(*) + FROM business_partners + WHERE idpartner = :idpartner + AND idcompany = :idcompany + "); + $stmt->execute([ + ':idpartner' => $partnerId, + ':idcompany' => $idcompany, + ]); + + if ((int) $stmt->fetchColumn() === 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Selected ' . $label . ' does not belong to the sample company.' + ]); + } + } + } + + if ($idpart > 0) { + $stmt = $db->prepare(" + UPDATE sample_parts + SET + parent_idpart = :parent_idpart, + part_code = :part_code, + part_name = :part_name, + part_description = :part_description, + material = :material, + color = :color, + quantity = :quantity, + unit = :unit, + supplier_id = :supplier_id, + producer_id = :producer_id, + position = :position, + risk_level = :risk_level, + notes = :notes, + sort_order = :sort_order, + updated_at = NOW() + WHERE idpart = :idpart + AND idsample = :idsample + "); + + $stmt->execute([ + ':parent_idpart' => $parentIdpart, + ':part_code' => $partCode !== '' ? $partCode : null, + ':part_name' => $partName, + ':part_description' => $partDescription !== '' ? $partDescription : null, + ':material' => $material !== '' ? $material : null, + ':color' => $color !== '' ? $color : null, + ':quantity' => $quantity !== '' ? $quantity : null, + ':unit' => $unit !== '' ? $unit : null, + ':supplier_id' => $supplierId, + ':producer_id' => $producerId, + ':position' => $position !== '' ? $position : null, + ':risk_level' => $riskLevel, + ':notes' => $notes !== '' ? $notes : null, + ':sort_order' => $sortOrder, + ':idpart' => $idpart, + ':idsample' => $idsample, + ]); + + jsonResponse([ + 'success' => true, + 'message' => 'BOM part updated successfully.' + ]); + } + + $stmt = $db->prepare(" + INSERT INTO sample_parts ( + idsample, + parent_idpart, + part_code, + part_name, + part_description, + material, + color, + quantity, + unit, + supplier_id, + producer_id, + position, + risk_level, + notes, + sort_order, + created_at, + updated_at + ) VALUES ( + :idsample, + :parent_idpart, + :part_code, + :part_name, + :part_description, + :material, + :color, + :quantity, + :unit, + :supplier_id, + :producer_id, + :position, + :risk_level, + :notes, + :sort_order, + NOW(), + NOW() + ) + "); + + $stmt->execute([ + ':idsample' => $idsample, + ':parent_idpart' => $parentIdpart, + ':part_code' => $partCode !== '' ? $partCode : null, + ':part_name' => $partName, + ':part_description' => $partDescription !== '' ? $partDescription : null, + ':material' => $material !== '' ? $material : null, + ':color' => $color !== '' ? $color : null, + ':quantity' => $quantity !== '' ? $quantity : null, + ':unit' => $unit !== '' ? $unit : null, + ':supplier_id' => $supplierId, + ':producer_id' => $producerId, + ':position' => $position !== '' ? $position : null, + ':risk_level' => $riskLevel, + ':notes' => $notes !== '' ? $notes : null, + ':sort_order' => $sortOrder, + ]); + + jsonResponse([ + 'success' => true, + 'message' => 'BOM part created successfully.' + ]); + } + + if ($action === 'get_part') { + $idpart = isset($_POST['idpart']) ? (int) $_POST['idpart'] : 0; + + if ($idpart <= 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Invalid part id.' + ]); + } + + $stmt = $db->prepare(" + SELECT * + FROM sample_parts + WHERE idpart = :idpart + AND idsample = :idsample + LIMIT 1 + "); + $stmt->execute([ + ':idpart' => $idpart, + ':idsample' => $idsample, + ]); + + $part = $stmt->fetch(PDO::FETCH_ASSOC); + + if (!$part) { + jsonResponse([ + 'success' => false, + 'message' => 'Part not found.' + ]); + } + + jsonResponse([ + 'success' => true, + 'part' => $part + ]); + } + + if ($action === 'delete_part') { + $idpart = isset($_POST['idpart']) ? (int) $_POST['idpart'] : 0; + + if ($idpart <= 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Invalid part id.' + ]); + } + + /* + * Prevent delete if child parts or documents/photos exist. + */ + $stmt = $db->prepare(" + SELECT + (SELECT COUNT(*) FROM sample_parts WHERE parent_idpart = :idpart1) AS child_count, + (SELECT COUNT(*) FROM sample_part_photos WHERE idpart = :idpart2) AS photos_count, + (SELECT COUNT(*) FROM sample_part_documents WHERE idpart = :idpart3) AS documents_count + "); + $stmt->execute([ + ':idpart1' => $idpart, + ':idpart2' => $idpart, + ':idpart3' => $idpart, + ]); + + $usage = $stmt->fetch(PDO::FETCH_ASSOC); + + if ( + (int) $usage['child_count'] > 0 || + (int) $usage['photos_count'] > 0 || + (int) $usage['documents_count'] > 0 + ) { + jsonResponse([ + 'success' => false, + 'message' => 'This part has child parts, photos or documents. Remove them before deleting the part.' + ]); + } + + $stmt = $db->prepare(" + DELETE FROM sample_parts + WHERE idpart = :idpart + AND idsample = :idsample + "); + $stmt->execute([ + ':idpart' => $idpart, + ':idsample' => $idsample, + ]); + + jsonResponse([ + 'success' => true, + 'message' => 'BOM part deleted successfully.' + ]); + } + + if ($action === 'upload_sample_photo') { + if (empty($_FILES['photo_file']['name'])) { + jsonResponse([ + 'success' => false, + 'message' => 'No photo uploaded.' + ]); + } + + if (!extension_loaded('gd')) { + jsonResponse([ + 'success' => false, + 'message' => 'PHP GD extension is required to resize and convert images.' + ]); + } + + $photoType = $_POST['photo_type'] ?? 'product'; + $description = trim($_POST['description'] ?? ''); + $isMain = isset($_POST['is_main']) ? (int) $_POST['is_main'] : 0; + + if (!array_key_exists($photoType, $photoTypes)) { + $photoType = 'product'; + } + + $originalFilename = $_FILES['photo_file']['name']; + $tmpFile = $_FILES['photo_file']['tmp_name']; + + $imageInfo = getimagesize($tmpFile); + + if ($imageInfo === false) { + jsonResponse([ + 'success' => false, + 'message' => 'Uploaded file is not a valid image.' + ]); + } + + $allowedMimeTypes = [ + 'image/jpeg', + 'image/png', + 'image/webp', + ]; + + if (!in_array($imageInfo['mime'], $allowedMimeTypes, true)) { + jsonResponse([ + 'success' => false, + 'message' => 'Invalid photo format. Allowed: JPG, PNG, WEBP.' + ]); + } + + // All photos are converted to JPG for web consistency. + $newFilename = buildDatedFilename('photo', $idcompany, $idsample, $originalFilename, 'jpg'); + $relativeFilename = $samplePhotoRelativeDir . '/' . $newFilename; + $targetPath = $samplePhotoDir . '/' . $newFilename; + + $converted = resizeAndConvertImageToJpeg($tmpFile, $targetPath, 1600, 82); + + if (!$converted) { + jsonResponse([ + 'success' => false, + 'message' => 'Unable to resize and convert photo.' + ]); + } + + if ($isMain === 1) { + $stmt = $db->prepare(" + UPDATE sample_photos + SET is_main = 0 + WHERE idsample = :idsample + "); + $stmt->execute([':idsample' => $idsample]); + } + + $stmt = $db->prepare(" + INSERT INTO sample_photos ( + idsample, + photo_type, + filename, + original_filename, + description, + is_main, + sort_order, + uploaded_by, + created_at + ) VALUES ( + :idsample, + :photo_type, + :filename, + :original_filename, + :description, + :is_main, + 0, + :uploaded_by, + NOW() + ) + "); + + $stmt->execute([ + ':idsample' => $idsample, + ':photo_type' => $photoType, + ':filename' => $relativeFilename, + ':original_filename' => $originalFilename, + ':description' => $description !== '' ? $description : null, + ':is_main' => $isMain === 1 ? 1 : 0, + ':uploaded_by' => $iduserlogin, + ]); + + jsonResponse([ + 'success' => true, + 'message' => 'Photo uploaded, resized and converted successfully.' + ]); + } + + if ($action === 'delete_sample_photo') { + $idsamplephoto = isset($_POST['idsamplephoto']) ? (int) $_POST['idsamplephoto'] : 0; + + if ($idsamplephoto <= 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Invalid photo id.' + ]); + } + + $stmt = $db->prepare(" + SELECT filename + FROM sample_photos + WHERE idsamplephoto = :idsamplephoto + AND idsample = :idsample + LIMIT 1 + "); + $stmt->execute([ + ':idsamplephoto' => $idsamplephoto, + ':idsample' => $idsample, + ]); + + $photo = $stmt->fetch(PDO::FETCH_ASSOC); + + if (!$photo) { + jsonResponse([ + 'success' => false, + 'message' => 'Photo not found.' + ]); + } + + $filePath = $uploadBaseDir . '/' . $photo['filename']; + + if (is_file($filePath)) { + unlink($filePath); + } + + $stmt = $db->prepare(" + DELETE FROM sample_photos + WHERE idsamplephoto = :idsamplephoto + AND idsample = :idsample + "); + $stmt->execute([ + ':idsamplephoto' => $idsamplephoto, + ':idsample' => $idsample, + ]); + + jsonResponse([ + 'success' => true, + 'message' => 'Photo deleted successfully.' + ]); + } + + if ($action === 'upload_document') { + if (empty($_FILES['document_file']['name'])) { + jsonResponse([ + 'success' => false, + 'message' => 'No document uploaded.' + ]); + } + + $documentType = $_POST['document_type'] ?? 'other'; + $title = trim($_POST['title'] ?? ''); + $expiryDate = !empty($_POST['expiry_date']) ? $_POST['expiry_date'] : null; + $notes = trim($_POST['notes'] ?? ''); + + if (!array_key_exists($documentType, $documentTypes)) { + $documentType = 'other'; + } + + $originalFilename = $_FILES['document_file']['name']; + $extension = strtolower(pathinfo($originalFilename, PATHINFO_EXTENSION)); + + $allowedExtensions = ['pdf', 'doc', 'docx', 'xls', 'xlsx', 'csv', 'jpg', 'jpeg', 'png', 'webp', 'txt']; + + if (!in_array($extension, $allowedExtensions, true)) { + jsonResponse([ + 'success' => false, + 'message' => 'Invalid document format.' + ]); + } + + if ($title === '') { + $title = pathinfo($originalFilename, PATHINFO_FILENAME); + } + + $newFilename = buildDatedFilename('document', $idcompany, $idsample, $originalFilename, $extension); + $relativeFilename = $documentRelativeDir . '/' . $newFilename; + $targetPath = $documentDir . '/' . $newFilename; + + if (!move_uploaded_file($_FILES['document_file']['tmp_name'], $targetPath)) { + jsonResponse([ + 'success' => false, + 'message' => 'Unable to upload document.' + ]); + } + + $stmt = $db->prepare(" + INSERT INTO documents ( + idcompany, + document_type, + title, + filename, + original_filename, + mime_type, + file_size, + expiry_date, + status, + notes, + uploaded_by, + created_at, + updated_at + ) VALUES ( + :idcompany, + :document_type, + :title, + :filename, + :original_filename, + :mime_type, + :file_size, + :expiry_date, + 'active', + :notes, + :uploaded_by, + NOW(), + NOW() + ) + "); + $stmt->execute([ + ':idcompany' => $idcompany, + ':document_type' => $documentType, + ':title' => $title, + ':filename' => $relativeFilename, + ':original_filename' => $originalFilename, + ':mime_type' => $_FILES['document_file']['type'] ?? null, + ':file_size' => $_FILES['document_file']['size'] ?? null, + ':expiry_date' => $expiryDate, + ':notes' => $notes !== '' ? $notes : null, + ':uploaded_by' => $iduserlogin, + ]); + + $iddocument = (int) $db->lastInsertId(); + + $stmt = $db->prepare(" + INSERT INTO sample_documents ( + idsample, + iddocument, + created_at + ) VALUES ( + :idsample, + :iddocument, + NOW() + ) + "); + $stmt->execute([ + ':idsample' => $idsample, + ':iddocument' => $iddocument, + ]); + + jsonResponse([ + 'success' => true, + 'message' => 'Document uploaded successfully.' + ]); + } + + if ($action === 'delete_document') { + $iddocument = isset($_POST['iddocument']) ? (int) $_POST['iddocument'] : 0; + + if ($iddocument <= 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Invalid document id.' + ]); + } + + $stmt = $db->prepare(" + SELECT d.filename + FROM documents d + INNER JOIN sample_documents sd ON sd.iddocument = d.iddocument + WHERE d.iddocument = :iddocument + AND sd.idsample = :idsample + LIMIT 1 + "); + $stmt->execute([ + ':iddocument' => $iddocument, + ':idsample' => $idsample, + ]); + + $document = $stmt->fetch(PDO::FETCH_ASSOC); + + if (!$document) { + jsonResponse([ + 'success' => false, + 'message' => 'Document not found.' + ]); + } + + $filePath = $uploadBaseDir . '/' . $document['filename']; + + if (is_file($filePath)) { + unlink($filePath); + } + + $stmt = $db->prepare(" + DELETE FROM documents + WHERE iddocument = :iddocument + "); + $stmt->execute([':iddocument' => $iddocument]); + + jsonResponse([ + 'success' => true, + 'message' => 'Document deleted successfully.' + ]); + } + + jsonResponse([ + 'success' => false, + 'message' => 'Unknown action.' + ]); + } catch (Throwable $e) { + jsonResponse([ + 'success' => false, + 'message' => $e->getMessage() + ]); + } +} + +/* + * Page data. + */ +$parts = []; +$photos = []; +$documents = []; +$history = []; +$partners = []; + +try { + $stmt = $db->prepare(" + SELECT + sp.*, + parent.part_name AS parent_part_name, + bp1.partner_name AS supplier_name, + bp2.partner_name AS producer_name + FROM sample_parts sp + LEFT JOIN sample_parts parent ON parent.idpart = sp.parent_idpart + LEFT JOIN business_partners bp1 ON bp1.idpartner = sp.supplier_id + LEFT JOIN business_partners bp2 ON bp2.idpartner = sp.producer_id + WHERE sp.idsample = :idsample + ORDER BY sp.sort_order ASC, sp.idpart ASC + "); + $stmt->execute([':idsample' => $idsample]); + $parts = $stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (Throwable $e) { + $parts = []; +} + +try { + $stmt = $db->prepare(" + SELECT * + FROM sample_photos + WHERE idsample = :idsample + ORDER BY is_main DESC, sort_order ASC, idsamplephoto DESC + "); + $stmt->execute([':idsample' => $idsample]); + $photos = $stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (Throwable $e) { + $photos = []; +} + +try { + $stmt = $db->prepare(" + SELECT + d.*, + sd.idsampledocument, + u.email AS uploaded_by_email + FROM sample_documents sd + INNER JOIN documents d ON d.iddocument = sd.iddocument + LEFT JOIN auth_users u ON u.id = d.uploaded_by + WHERE sd.idsample = :idsample + ORDER BY d.created_at DESC, d.iddocument DESC + "); + $stmt->execute([':idsample' => $idsample]); + $documents = $stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (Throwable $e) { + $documents = []; +} + +try { + $stmt = $db->prepare(" + SELECT + h.*, + u.email, + u.first_name, + u.last_name + FROM sample_status_history h + LEFT JOIN auth_users u ON u.id = h.changed_by + WHERE h.idsample = :idsample + ORDER BY h.created_at DESC + "); + $stmt->execute([':idsample' => $idsample]); + $history = $stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (Throwable $e) { + $history = []; +} + +try { + $stmt = $db->prepare(" + SELECT idpartner, partner_type, partner_name, status + FROM business_partners + WHERE idcompany = :idcompany + ORDER BY partner_name ASC + "); + $stmt->execute([':idcompany' => $idcompany]); + $partners = $stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (Throwable $e) { + $partners = []; +} + +$pageTitle = 'Sample Detail'; +$statusLabel = ucfirst(str_replace('_', ' ', $sample['status'])); +$createdBy = trim(($sample['created_by_first_name'] ?? '') . ' ' . ($sample['created_by_last_name'] ?? '')); +if ($createdBy === '') { + $createdBy = $sample['created_by_email'] ?? '-'; +} +?> + + + + + + + + + + + + <?= e($pageTitle); ?> - <?= isset($titlewebsite) ? e($titlewebsite) : 'TRFgo'; ?> + + + + + +
+ + + +
+
+ +
+
+
+
+
+ + Sample Identity Card +
+ +

+ — +

+ +

+ Product/sample master record with overview, photos, BOM parts, documents and lifecycle history. +

+
+ + +
+
+
+ +
+
+
+
+
+
+
Status
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+
BOM Parts
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+
Photos
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+
Documents
+
+
+
+ +
+
+
+
+
+
+ +
+
+ + +
+ + +
+
+
+
Product Information
+

Main product/sample identity data

+ +
+
Company
+
+
+ +
+
Brand
+
+
+ +
+
Department
+
+
+ +
+
Article No.
+
+
+ +
+
PO No.
+
+
+ +
+
Season
+
+
+ +
+
Color
+
+
+ +
+
Production Stage
+
+
+
+ +
+
Technical Information
+

Materials, partners and source data

+ +
+
Producer
+
+
+ +
+
Supplier
+
+
+ +
+
Product Category
+
+
+ +
+
Product Type
+
+
+ +
+
Product Standard
+
+
+ +
+
Country of Origin
+
+
+ +
+
Created By
+
+
+ +
+
Created At
+
+
+
+ +
+
Material Details
+ +
+
+
+
Fiber Content
+
+
+
+ +
+
+
Material Description
+
+
+
+
+
+
+
+ + +
+
+
+
Sample Photos
+

Product, label, packaging and detail images

+
+ + +
+ + 0): ?> +
+ +
+
+ <?= e($photo['original_filename']); ?> + +
+
+
+
+
+
+ + + Main + +
+ + +
+ + +
+ +
+
+
+
+ +
+ +
+ +
No photos uploaded yet
+

Upload product, label, packaging or detail photos.

+
+ +
+ + +
+
+
+
Parts / BOM
+

Bill of materials and product components

+
+ + +
+ + 0): ?> +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PartParentMaterial / ColorProducer / SupplierQtyRiskActions
+
+ +
Code:
+ + +
Position:
+ +
+
+
+
+
+
+
+ + + + + + + + + + +
+
+ +
+ +
No BOM parts yet
+

Add parts such as upper, lining, sole, zip, label, packaging or other components.

+
+ +
+ + +
+
+
+
Documents
+

Technical sheets, certificates, declarations and related files

+
+ + +
+ + 0): ?> +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
DocumentTypeExpiryUploadedActions
+
+
+
+ + + + + + +
+
+
+ + + + + +
+
+ +
+ +
No documents uploaded yet
+

Upload technical sheets, certificates, declarations or product documentation.

+
+ +
+ + +
+
Status History
+

Sample lifecycle changes

+ + 0): ?> +
+ + +
+
+ +
+
+ + | + +
+ + +
+ + + + → + + + +
+ + + +
+ +
+ +
+ +
+ +
No history yet
+

Status changes will appear here.

+
+ +
+ +
+
+
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/userarea/samples.php b/public/userarea/samples.php new file mode 100644 index 00000000..b4f083a4 --- /dev/null +++ b/public/userarea/samples.php @@ -0,0 +1,1970 @@ + + +prepare(" + SELECT COUNT(*) + FROM samples + WHERE idcompany = :idcompany + AND YEAR(created_at) = :year + "); + $stmt->execute([ + ':idcompany' => $idcompany, + ':year' => $year, + ]); + + $nextNumber = ((int) $stmt->fetchColumn()) + 1; + + return 'SMP-' . $year . '-' . str_pad((string) $nextNumber, 5, '0', STR_PAD_LEFT); +} + +$sampleStatuses = [ + 'draft' => 'Draft', + 'active' => 'Active', + 'archived' => 'Archived', + 'submitted' => 'Submitted', + 'under_testing' => 'Under Testing', + 'completed' => 'Completed', + 'cancelled' => 'Cancelled', +]; + +$sampleSources = [ + 'manual' => 'Manual', + 'xls_import' => 'XLS Import', + 'json_import' => 'JSON Import', + 'api' => 'API', + 'smarttrf' => 'SmartTRF', +]; + +/* + * AJAX actions. + */ +if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action'])) { + $action = $_POST['action']; + + try { + if ($action === 'save_sample') { + $idsample = isset($_POST['idsample']) ? (int) $_POST['idsample'] : 0; + $idcompany = isset($_POST['idcompany']) ? (int) $_POST['idcompany'] : 0; + $idbrand = !empty($_POST['idbrand']) ? (int) $_POST['idbrand'] : null; + $iddepartment = !empty($_POST['iddepartment']) ? (int) $_POST['iddepartment'] : null; + $idproducer = !empty($_POST['idproducer']) ? (int) $_POST['idproducer'] : null; + $idsupplier = !empty($_POST['idsupplier']) ? (int) $_POST['idsupplier'] : null; + + $sampleCode = trim($_POST['sample_code'] ?? ''); + $externalSampleId = trim($_POST['external_sample_id'] ?? ''); + $articleNo = trim($_POST['article_no'] ?? ''); + $poNo = trim($_POST['po_no'] ?? ''); + $season = trim($_POST['season'] ?? ''); + $styleNo = trim($_POST['style_no'] ?? ''); + $styleName = trim($_POST['style_name'] ?? ''); + $model = trim($_POST['model'] ?? ''); + $sampleDescription = trim($_POST['sample_description'] ?? ''); + $productCategory = trim($_POST['product_category'] ?? ''); + $productType = trim($_POST['product_type'] ?? ''); + $color = trim($_POST['color'] ?? ''); + $size = trim($_POST['size'] ?? ''); + $gender = trim($_POST['gender'] ?? ''); + $ageGroup = trim($_POST['age_group'] ?? ''); + $fiberContent = trim($_POST['fiber_content'] ?? ''); + $materialDescription = trim($_POST['material_description'] ?? ''); + $claimedWeight = trim($_POST['claimed_weight'] ?? ''); + $productStandard = trim($_POST['product_standard'] ?? ''); + $productionStage = trim($_POST['production_stage'] ?? ''); + $countryOfOrigin = !empty($_POST['country_of_origin']) ? (int) $_POST['country_of_origin'] : null; + $status = $_POST['status'] ?? 'draft'; + + if ($idcompany <= 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Company is required.' + ]); + } + + if ($sampleDescription === '') { + jsonResponse([ + 'success' => false, + 'message' => 'Sample description is required.' + ]); + } + + if (!array_key_exists($status, $sampleStatuses)) { + $status = 'draft'; + } + + /* + * Check company exists. + */ + $stmt = $db->prepare(" + SELECT COUNT(*) + FROM companies + WHERE idcompany = :idcompany + "); + $stmt->execute([':idcompany' => $idcompany]); + + if ((int) $stmt->fetchColumn() === 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Selected company does not exist.' + ]); + } + + /* + * Generate sample code if empty. + */ + if ($sampleCode === '') { + $sampleCode = generateSampleCode($db, $idcompany); + } + + /* + * Check brand belongs to company. + */ + if ($idbrand !== null) { + $stmt = $db->prepare(" + SELECT COUNT(*) + FROM brands + WHERE idbrand = :idbrand + AND idcompany = :idcompany + "); + $stmt->execute([ + ':idbrand' => $idbrand, + ':idcompany' => $idcompany, + ]); + + if ((int) $stmt->fetchColumn() === 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Selected brand does not belong to the selected company.' + ]); + } + } + + /* + * Check department belongs to company and is compatible with selected brand. + */ + if ($iddepartment !== null) { + if ($idbrand !== null) { + $stmt = $db->prepare(" + SELECT COUNT(*) + FROM departments + WHERE iddepartment = :iddepartment + AND idcompany = :idcompany + AND (idbrand = :idbrand OR idbrand IS NULL) + "); + $stmt->execute([ + ':iddepartment' => $iddepartment, + ':idcompany' => $idcompany, + ':idbrand' => $idbrand, + ]); + } else { + $stmt = $db->prepare(" + SELECT COUNT(*) + FROM departments + WHERE iddepartment = :iddepartment + AND idcompany = :idcompany + "); + $stmt->execute([ + ':iddepartment' => $iddepartment, + ':idcompany' => $idcompany, + ]); + } + + if ((int) $stmt->fetchColumn() === 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Selected department is not compatible with the selected company/brand.' + ]); + } + } + + /* + * Check producer/supplier belong to the same company. + */ + foreach ( + [ + 'producer' => $idproducer, + 'supplier' => $idsupplier, + ] as $partnerLabel => $partnerId + ) { + if ($partnerId !== null) { + $stmt = $db->prepare(" + SELECT COUNT(*) + FROM business_partners + WHERE idpartner = :idpartner + AND idcompany = :idcompany + "); + $stmt->execute([ + ':idpartner' => $partnerId, + ':idcompany' => $idcompany, + ]); + + if ((int) $stmt->fetchColumn() === 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Selected ' . $partnerLabel . ' does not belong to the selected company.' + ]); + } + } + } + + /* + * Check duplicate sample code inside the same company. + */ + if ($idsample > 0) { + $stmt = $db->prepare(" + SELECT COUNT(*) + FROM samples + WHERE idcompany = :idcompany + AND sample_code = :sample_code + AND idsample <> :idsample + "); + $stmt->execute([ + ':idcompany' => $idcompany, + ':sample_code' => $sampleCode, + ':idsample' => $idsample, + ]); + } else { + $stmt = $db->prepare(" + SELECT COUNT(*) + FROM samples + WHERE idcompany = :idcompany + AND sample_code = :sample_code + "); + $stmt->execute([ + ':idcompany' => $idcompany, + ':sample_code' => $sampleCode, + ]); + } + + if ((int) $stmt->fetchColumn() > 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Sample code already exists for this company.' + ]); + } + + $oldStatus = null; + + if ($idsample > 0) { + $stmt = $db->prepare(" + SELECT status + FROM samples + WHERE idsample = :idsample + LIMIT 1 + "); + $stmt->execute([':idsample' => $idsample]); + $oldStatus = $stmt->fetchColumn(); + + $sql = " + UPDATE samples + SET + idcompany = :idcompany, + idbrand = :idbrand, + iddepartment = :iddepartment, + idproducer = :idproducer, + idsupplier = :idsupplier, + sample_code = :sample_code, + external_sample_id = :external_sample_id, + article_no = :article_no, + po_no = :po_no, + season = :season, + style_no = :style_no, + style_name = :style_name, + model = :model, + sample_description = :sample_description, + product_category = :product_category, + product_type = :product_type, + color = :color, + size = :size, + gender = :gender, + age_group = :age_group, + fiber_content = :fiber_content, + material_description = :material_description, + claimed_weight = :claimed_weight, + product_standard = :product_standard, + production_stage = :production_stage, + country_of_origin = :country_of_origin, + status = :status, + updated_at = NOW() + WHERE idsample = :idsample + "; + + $stmt = $db->prepare($sql); + $stmt->execute([ + ':idcompany' => $idcompany, + ':idbrand' => $idbrand, + ':iddepartment' => $iddepartment, + ':idproducer' => $idproducer, + ':idsupplier' => $idsupplier, + ':sample_code' => $sampleCode, + ':external_sample_id' => $externalSampleId !== '' ? $externalSampleId : null, + ':article_no' => $articleNo !== '' ? $articleNo : null, + ':po_no' => $poNo !== '' ? $poNo : null, + ':season' => $season !== '' ? $season : null, + ':style_no' => $styleNo !== '' ? $styleNo : null, + ':style_name' => $styleName !== '' ? $styleName : null, + ':model' => $model !== '' ? $model : null, + ':sample_description' => $sampleDescription, + ':product_category' => $productCategory !== '' ? $productCategory : null, + ':product_type' => $productType !== '' ? $productType : null, + ':color' => $color !== '' ? $color : null, + ':size' => $size !== '' ? $size : null, + ':gender' => $gender !== '' ? $gender : null, + ':age_group' => $ageGroup !== '' ? $ageGroup : null, + ':fiber_content' => $fiberContent !== '' ? $fiberContent : null, + ':material_description' => $materialDescription !== '' ? $materialDescription : null, + ':claimed_weight' => $claimedWeight !== '' ? $claimedWeight : null, + ':product_standard' => $productStandard !== '' ? $productStandard : null, + ':production_stage' => $productionStage !== '' ? $productionStage : null, + ':country_of_origin' => $countryOfOrigin, + ':status' => $status, + ':idsample' => $idsample, + ]); + + if ($oldStatus !== $status) { + $stmt = $db->prepare(" + INSERT INTO sample_status_history ( + idsample, + old_status, + new_status, + note, + changed_by, + created_at + ) VALUES ( + :idsample, + :old_status, + :new_status, + :note, + :changed_by, + NOW() + ) + "); + $stmt->execute([ + ':idsample' => $idsample, + ':old_status' => $oldStatus, + ':new_status' => $status, + ':note' => 'Status changed from sample form.', + ':changed_by' => $iduserlogin, + ]); + } + + jsonResponse([ + 'success' => true, + 'message' => 'Sample updated successfully.' + ]); + } + + $sql = " + INSERT INTO samples ( + idcompany, + idbrand, + iddepartment, + idproducer, + idsupplier, + sample_code, + external_sample_id, + article_no, + po_no, + season, + style_no, + style_name, + model, + sample_description, + product_category, + product_type, + color, + size, + gender, + age_group, + fiber_content, + material_description, + claimed_weight, + product_standard, + production_stage, + country_of_origin, + status, + source, + created_by, + created_at, + updated_at + ) VALUES ( + :idcompany, + :idbrand, + :iddepartment, + :idproducer, + :idsupplier, + :sample_code, + :external_sample_id, + :article_no, + :po_no, + :season, + :style_no, + :style_name, + :model, + :sample_description, + :product_category, + :product_type, + :color, + :size, + :gender, + :age_group, + :fiber_content, + :material_description, + :claimed_weight, + :product_standard, + :production_stage, + :country_of_origin, + :status, + 'manual', + :created_by, + NOW(), + NOW() + ) + "; + + $stmt = $db->prepare($sql); + $stmt->execute([ + ':idcompany' => $idcompany, + ':idbrand' => $idbrand, + ':iddepartment' => $iddepartment, + ':idproducer' => $idproducer, + ':idsupplier' => $idsupplier, + ':sample_code' => $sampleCode, + ':external_sample_id' => $externalSampleId !== '' ? $externalSampleId : null, + ':article_no' => $articleNo !== '' ? $articleNo : null, + ':po_no' => $poNo !== '' ? $poNo : null, + ':season' => $season !== '' ? $season : null, + ':style_no' => $styleNo !== '' ? $styleNo : null, + ':style_name' => $styleName !== '' ? $styleName : null, + ':model' => $model !== '' ? $model : null, + ':sample_description' => $sampleDescription, + ':product_category' => $productCategory !== '' ? $productCategory : null, + ':product_type' => $productType !== '' ? $productType : null, + ':color' => $color !== '' ? $color : null, + ':size' => $size !== '' ? $size : null, + ':gender' => $gender !== '' ? $gender : null, + ':age_group' => $ageGroup !== '' ? $ageGroup : null, + ':fiber_content' => $fiberContent !== '' ? $fiberContent : null, + ':material_description' => $materialDescription !== '' ? $materialDescription : null, + ':claimed_weight' => $claimedWeight !== '' ? $claimedWeight : null, + ':product_standard' => $productStandard !== '' ? $productStandard : null, + ':production_stage' => $productionStage !== '' ? $productionStage : null, + ':country_of_origin' => $countryOfOrigin, + ':status' => $status, + ':created_by' => $iduserlogin, + ]); + + $newSampleId = (int) $db->lastInsertId(); + + $stmt = $db->prepare(" + INSERT INTO sample_status_history ( + idsample, + old_status, + new_status, + note, + changed_by, + created_at + ) VALUES ( + :idsample, + NULL, + :new_status, + :note, + :changed_by, + NOW() + ) + "); + $stmt->execute([ + ':idsample' => $newSampleId, + ':new_status' => $status, + ':note' => 'Sample created.', + ':changed_by' => $iduserlogin, + ]); + + jsonResponse([ + 'success' => true, + 'message' => 'Sample created successfully.' + ]); + } + + if ($action === 'get_sample') { + $idsample = isset($_POST['idsample']) ? (int) $_POST['idsample'] : 0; + + if ($idsample <= 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Invalid sample id.' + ]); + } + + $stmt = $db->prepare(" + SELECT * + FROM samples + WHERE idsample = :idsample + LIMIT 1 + "); + $stmt->execute([':idsample' => $idsample]); + $sample = $stmt->fetch(PDO::FETCH_ASSOC); + + if (!$sample) { + jsonResponse([ + 'success' => false, + 'message' => 'Sample not found.' + ]); + } + + jsonResponse([ + 'success' => true, + 'sample' => $sample + ]); + } + + if ($action === 'change_sample_status') { + $idsample = isset($_POST['idsample']) ? (int) $_POST['idsample'] : 0; + $status = $_POST['status'] ?? 'archived'; + + if ($idsample <= 0 || !array_key_exists($status, $sampleStatuses)) { + jsonResponse([ + 'success' => false, + 'message' => 'Invalid request.' + ]); + } + + $stmt = $db->prepare(" + SELECT status + FROM samples + WHERE idsample = :idsample + LIMIT 1 + "); + $stmt->execute([':idsample' => $idsample]); + $oldStatus = $stmt->fetchColumn(); + + if (!$oldStatus) { + jsonResponse([ + 'success' => false, + 'message' => 'Sample not found.' + ]); + } + + $stmt = $db->prepare(" + UPDATE samples + SET status = :status, updated_at = NOW() + WHERE idsample = :idsample + "); + $stmt->execute([ + ':status' => $status, + ':idsample' => $idsample, + ]); + + if ($oldStatus !== $status) { + $stmt = $db->prepare(" + INSERT INTO sample_status_history ( + idsample, + old_status, + new_status, + note, + changed_by, + created_at + ) VALUES ( + :idsample, + :old_status, + :new_status, + :note, + :changed_by, + NOW() + ) + "); + $stmt->execute([ + ':idsample' => $idsample, + ':old_status' => $oldStatus, + ':new_status' => $status, + ':note' => 'Status changed from sample list.', + ':changed_by' => $iduserlogin, + ]); + } + + jsonResponse([ + 'success' => true, + 'message' => 'Sample status updated successfully.' + ]); + } + + if ($action === 'delete_sample') { + $idsample = isset($_POST['idsample']) ? (int) $_POST['idsample'] : 0; + + if ($idsample <= 0) { + jsonResponse([ + 'success' => false, + 'message' => 'Invalid sample id.' + ]); + } + + /* + * Safe delete: + * Do not delete samples with BOM parts, photos or documents. + */ + $stmt = $db->prepare(" + SELECT + (SELECT COUNT(*) FROM sample_parts WHERE idsample = :idsample1) AS parts_count, + (SELECT COUNT(*) FROM sample_photos WHERE idsample = :idsample2) AS photos_count, + (SELECT COUNT(*) FROM sample_documents WHERE idsample = :idsample3) AS documents_count + "); + $stmt->execute([ + ':idsample1' => $idsample, + ':idsample2' => $idsample, + ':idsample3' => $idsample, + ]); + + $usage = $stmt->fetch(PDO::FETCH_ASSOC); + + if ( + (int) $usage['parts_count'] > 0 || + (int) $usage['photos_count'] > 0 || + (int) $usage['documents_count'] > 0 + ) { + jsonResponse([ + 'success' => false, + 'message' => 'This sample has BOM parts, photos or documents. Set it as archived instead of deleting it.' + ]); + } + + $stmt = $db->prepare(" + DELETE FROM samples + WHERE idsample = :idsample + "); + $stmt->execute([':idsample' => $idsample]); + + jsonResponse([ + 'success' => true, + 'message' => 'Sample deleted successfully.' + ]); + } + + jsonResponse([ + 'success' => false, + 'message' => 'Unknown action.' + ]); + } catch (Throwable $e) { + jsonResponse([ + 'success' => false, + 'message' => $e->getMessage() + ]); + } +} + +/* + * Page data. + */ +$companies = []; +$brands = []; +$departments = []; +$partners = []; +$countries = []; +$samples = []; + +try { + $stmt = $db->query(" + SELECT idcompany, company_name, status + FROM companies + ORDER BY company_name ASC + "); + $companies = $stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (Throwable $e) { + $companies = []; +} + +try { + $stmt = $db->query(" + SELECT idbrand, idcompany, brand_name, status + FROM brands + ORDER BY brand_name ASC + "); + $brands = $stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (Throwable $e) { + $brands = []; +} + +try { + $stmt = $db->query(" + SELECT iddepartment, idcompany, idbrand, department_name, status + FROM departments + ORDER BY department_name ASC + "); + $departments = $stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (Throwable $e) { + $departments = []; +} + +try { + $stmt = $db->query(" + SELECT idpartner, idcompany, partner_type, partner_name, status + FROM business_partners + ORDER BY partner_name ASC + "); + $partners = $stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (Throwable $e) { + $partners = []; +} + +try { + $stmt = $db->query(" + SELECT id, name, iso_3166_2 + FROM auth_countries + ORDER BY name ASC + "); + $countries = $stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (Throwable $e) { + $countries = []; +} + +try { + $stmt = $db->query(" + SELECT + s.idsample, + s.idcompany, + s.idbrand, + s.iddepartment, + s.sample_code, + s.external_sample_id, + s.article_no, + s.po_no, + s.season, + s.sample_description, + s.product_category, + s.product_type, + s.color, + s.production_stage, + s.status, + s.source, + s.created_at, + c.company_name, + b.brand_name, + d.department_name, + bp1.partner_name AS producer_name, + bp2.partner_name AS supplier_name, + COUNT(DISTINCT sp.idpart) AS parts_count, + COUNT(DISTINCT sph.idsamplephoto) AS photos_count, + COUNT(DISTINCT sd.idsampledocument) AS documents_count + FROM samples s + INNER JOIN companies c ON c.idcompany = s.idcompany + LEFT JOIN brands b ON b.idbrand = s.idbrand + LEFT JOIN departments d ON d.iddepartment = s.iddepartment + LEFT JOIN business_partners bp1 ON bp1.idpartner = s.idproducer + LEFT JOIN business_partners bp2 ON bp2.idpartner = s.idsupplier + LEFT JOIN sample_parts sp ON sp.idsample = s.idsample + LEFT JOIN sample_photos sph ON sph.idsample = s.idsample + LEFT JOIN sample_documents sd ON sd.idsample = s.idsample + GROUP BY + s.idsample, + s.idcompany, + s.idbrand, + s.iddepartment, + s.sample_code, + s.external_sample_id, + s.article_no, + s.po_no, + s.season, + s.sample_description, + s.product_category, + s.product_type, + s.color, + s.production_stage, + s.status, + s.source, + s.created_at, + c.company_name, + b.brand_name, + d.department_name, + bp1.partner_name, + bp2.partner_name + ORDER BY s.created_at DESC, s.idsample DESC + "); + $samples = $stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (Throwable $e) { + $samples = []; +} + +$pageTitle = 'Samples'; + +$totalSamples = count($samples); +$activeSamples = count(array_filter($samples, fn($row) => in_array($row['status'], ['active', 'submitted', 'under_testing'], true))); +$totalParts = array_sum(array_map(fn($row) => (int) $row['parts_count'], $samples)); +$totalFiles = array_sum(array_map(fn($row) => (int) $row['photos_count'] + (int) $row['documents_count'], $samples)); +?> + + + + + + + + + + + + <?= e($pageTitle); ?> - <?= isset($titlewebsite) ? e($titlewebsite) : 'TRFgo'; ?> + + + + + +
+ + + +
+
+ +
+
+
+
+
+ + TRFgo Product Identity +
+

Samples

+

+ Create and manage product/sample identity cards with company, brand, department, + producer, supplier, article data, material information and testing lifecycle status. +

+
+ +
+ +
+
+
+
+ +
+
+
+
+
+
+
Total Samples
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+
Active / Testing
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+
BOM Parts
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+
Files
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
Sample List
+

Product identity cards ready for BOM, documents and TRF requests

+
+ + +
+
+ +
+ +
+ No companies available. + Create at least one company before adding samples. +
+ + + +
+ No business partners yet. + You can create samples without partners, but producer and supplier dropdowns will be empty. +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SampleCompanyBrand / DepartmentProducer / SupplierArticle / POBOMFilesStatusActions
+
+
+ +
External ID:
+ + +
Color:
+ +
+
+
+
+
-'; ?>
+
+
+
-'; ?>
+
+
+
-'; ?>
+
+ +
Season:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/public/userarea/uploads/trfgo/company_1/samples/1/documents/document_c1_s1_20260615_155635_EuropeRome_Invoice-B8DDF571-0034.pdf b/public/userarea/uploads/trfgo/company_1/samples/1/documents/document_c1_s1_20260615_155635_EuropeRome_Invoice-B8DDF571-0034.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e1cba08fb52ea6e3381b6a2b70ff75a208c5c822 GIT binary patch literal 31843 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 LWMrc9Vle*)RaChB literal 0 HcmV?d00001 diff --git a/public/userarea/uploads/trfgo/company_1/samples/1/photos/photo_c1_s1_20260615_153850_EuropeRome_1e672dd9-5420-4432-b422-02d8d271c178.jpg b/public/userarea/uploads/trfgo/company_1/samples/1/photos/photo_c1_s1_20260615_153850_EuropeRome_1e672dd9-5420-4432-b422-02d8d271c178.jpg new file mode 100644 index 0000000000000000000000000000000000000000..767b4b258f47ce00e1eec2caeec1ce88e4bf8995 GIT binary patch literal 219157 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 z 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

souNd4pnKV#ukWzdRjg7G82k!M9|x z3_^Q$?kDQKhg-4%9#2D75JvKSLEilc4&(^b#=Fm>{r{44$YOe2@aByLH)K_^>bX7K zRb%N%gx`Ja6gfphj+Svl1ZcJ&nd3rs8ACS0Am@4MK}{<`5vmIYN@VFWF*Sz}+s^`A zX6x&Um$#{f7hukxuN+bZAGXU07$E+Y6cxWd`>MbeW^Oq2yuEg+AK*q`P3+m5swvH7 z^4tzV){n{K?6PxazJy9hUdtTm=;ds0HNbD-b=N_<`af%5(|`Qb`h>EhuQ?WE`jPpA zPCI=()v^fQh02{XWM9Tt*`g0Vn-{xoZ+rKp>vuR0fkASG7}=;lQ(9o2RUl;zY)ffM&Vm`9QWln1!6Kh!iT;-w$CYBZU2 zY~N0_C3J3Ek)(AB5aCvo*We;7^5J^sn9 z=eF-(?h=x}TpZzN(_YoT?-D1Wefj$PBb%4kP9B=GC$?rdaDO}U^nP6S<)OB~RVOQ4 z(-uv{0dJCyF|(6GHy(aBrAX1YsiL9X6Jx#Am$Qbg0Wh|Pxlpi`)4DT8IQdqfa6T(T zhMFW8(Vxv4V952A|KH2_(Xe_1719sSHnpkWN<+iA>f0sF6y=lmqDc{Z}&buiRHxj&J6%f=qZ@~tDQ2}=q1hy8zHxN@< zUr+heSbppwLi;q7a&wIBq5e*`Vq$XmO@QANs|G6(Y>mTn6Z?^$Wt3#`evu25%O(T( zQTdQ&s6+HQ41=Dl0>>_>lWU#lv}_gpzG34Z(MrSh*^@4C&O%5^Q(+GoDWxNs~I*E98iXZ!5lv{ zR^{E%k@c7*0fEZz-ObOXG0$<>dXwP}^RGMwWaCrmUxH(H?mM?A9uI!pIowJ3cI|7- z-Tqsz2czeb#d`oMvUzz6eKAnGiehp*hAz5#n~lWDKPXaPH}rTP$aKdoZ(~kEuhg|^ zdWhuqg+qVjVqG4=RF8=fLguZgn?-XiGqL_*uT?!5^StHlLgX}K7Ha7^-pEs4IvHKm z5}I1}M?xGg`f5|M>OS|F0(MuW7o9(4>{bE0|i*^ zIBHkyWPoknm-GA(m4Z`nQF7OgXne>5sL|BhS}&a?vr5(UGThbJ0U>F4$*7i|{uQ`9 zSz^B)j-LNkr@I8iklYIu1UT*6^g=Nz}l^#xjQ;ad77=Q3ap<>H*6~e;E8{6A6E2En(Bogw>m*z3Wh8}W{O7H}|NAm$e5iuQ8wFh-y&Iy<~9a45YP+VVDX z-*5)(E@0r`1ffP@8Z5nkP`+2;~cMUOBY1f_BX*hZjS+&b_sEHV#OWEl<2U%sIbKuHvoq0ErKx}Y!4_| ztoBhv)!3Ocl54C9Pu3Ughhd`zF_fuww~U8+b>$d;LG$VW?39j~^tjX~WUFch{0=LEQ( zIhoH?0LQ!MRUFmqYQ$a`@B(xZw~SV2YREAur!~&HZZ$@$K^kYv?mic4bsnby?-2#o zf8`O1@er_3nHcc}0WcePk`WP+zlza0H?e`C%s(E2F(f2$Etim1 z*@iF5D|sbvCrB}mJXt*YAOz8nudpelhq9qe9+yw-(HyXjc12uO@jF3p>mE@OCn5r;^LhzwI*!fB8iHh#72AX ztHre4UC7R+tDzk9sgkzo{oH|+RGZcO5H2>J?f9x%w!EeZ8O9Es`;?D!fRv_ zGPEwot~0sl%a8g~A0-=YMq@;Ar~ZfR;bwch&)Ih(UemT_F6+MF%}8$r*WkxJ78U)w zw2kGkHtk;7jDlqxzq~)-#Prk$e^9Cus3Kl(&Xasna@ZCva~8OT{H)>KoE?@K zaw8qA_{Rp-9#xUJ^2f9{YY#{MtGr?1KJn_=s%TNqD39eL@6A=cFK93wnhZZJTyMU=b=U>E9p#pcuYa)IYXGPEtZFA@fZdptKxbI?zrrfe%bd#`cchb4{h|3b)ST%UA z1HfgE%02C129We~o?**Lp=pp+grO<+;Y0v{fzqh!_Jf*+`m-L1A1*4qw<#B(PKp|$ z@n{o_+!LaTW49|%4GUG?kz&BCyMld)s+sc>EE}>d_DAmrPam<>HhS8buh-(svGnM| zgDkb~<`+Fc4XVTzg6`L!=keK@aw=lRw`5+0Y=2vvi2n&oyF~7Q>n*FMxN>z0{?^>dH3smK-`#_XU>M4rvlFD){%r8?`+0>#uaZkd+a zZ{X|Hpxq}t*?=12FK^s4SNS0gCdl;eY^e73=2a+j)Zn9BxN`#v|H;(gHm7u0;Q7Ia zx-s?t4@wkNYN0(+iI10(S9$)EBot*uK%SZ5S4I@Vz8XtM#JNS+Q=g532+0a)yH`-w zbCdNgA+fjgzBdRVYp(b&wyLF*TQecNV5kzT5ee1|QhrdaRA8&u`t6^KCqMjzLjj$9 zdqDqzjiInXr>kLk+q6un@~f`|_vEwXxvuKk2_k$}*%z$meSiV?s<-&3(Xvu`Z_a7A|F(|IS=e zh${x_(bDWAVXzd`_Wd?;x8l(ZnbK|ADV5VxJ#MOMaCOQ@dLCINTE8t^M>_yRvx?qug& ztk32|TJV$Q32ydJXio*E!S9~&BooHXDFe{d)U^_07-}%S-?1E2| zzRj}`!Ml2CNi7__4bce_zv1aPZdKlZXcXdcEX-0@OKzdAb)@4@O6$no;pLx3I0*Vu zqeYvw5eF(WZEhLBN_u596IV9%S7{RTBWzPr0m5YXJ+tsUm=l%?!K{RIOnVU``QB4K z)BNRa!EuRiOd-4sizyi{){$Gy^4&xf#voia|2mkX$Xw^|Jeh=Pu8p^^L2P#zz&^zS zz!Av{i<&8akYXQ^b#8DgCRTg!ZBg?wlv7JYV4HqA>u;s)9+~BLF3pgR)wjY~ z!y9cg6g#{UZy&Cn?(tURP^WE*%qoA6E+NI%duDv6WUUo#lBwOuKXhMDnp`BT_l%u~ z)yf7#)V)5KyH`)7P8@)W5t1VO3r=SqJ&q#xJrvqm!JbEpk5Y)%3E zNu77k-2aeknDA{IS>`_`Kh8O;hCG({W!PNqeY3Nh-> zyyj!m+%@DhC}SPB=_;Bq-o-hZi^Qz(hbzacP^ac9Z<~+8Y~`sacLI8qk#Q>+Q^%G0 z`s@IIw@eflU5>He>+kTJU?tcC?cQ>Y^0xNa$DaCRz!O8X-9ggG)ix5|W^RCxOu#L0 zDbC#EF#~J#aSs7P5P(m_Jsuh^ooRrov0*Bo`%4qp;Omg@7JMw|7kPJ~09k{W?GCPI zmVI#$%sCRbcQtl6PsRq0WEG5-#fm)YHha>7{j`9tc@w<|f|q;1df4mN`APwmhj9qES&Q-8Zz<;D#0qBIOFW=s){>>W$g z-LAlm(RoEeP$;o_X&u-&N5thEOp)z=y)5G(+Tf9}0hgd+kz@Le_nJ$H*!UG&KoHyYDKtV?AZgeF0TeI^eYKPfJChjT3|pXKO$UP(I6dWg6aw9xT~4d^qqZ_n$^;^7k{Y*c`MK8j z_d}eH%oZUKr53{IDM`VN4d4yCNZQ*rK;a5__8&4}0nz^CCVcbuo$z3bb#TYMImsI? zfg9RI&)%G9LTgg$!UeA0{ed>j4`YP4sb(KNsmMCuvYF2kUY&Z#y8~L&>#`Y9vF!JN z{-Ysrus-DIj|YQe3#EotV;~hnD*)x53K?XFx{Dw77s*Y}a#vYh(LxdJl1P8Zik*}5 zKjfco$vYd?&n#Z6Pp1A7dP!bcA^-b+#8;b48Ghpdx|_F+rA`o^YVpCDzrTj^kbLHC@-AcL z3%W=`9yG|wXpM{A1PAZj4#>ak43BhlTNavEc80eh?&N#u^HzU+eiF5)%!#Q*%|xzz z`QtA2VZ}IPAqp#mc4=T!yUq_yNAJ!x4Bf3V8w~zF1{up z@ARV-5Z}Mgf*R1nlWr?OI^!Q3c}e~LZMTqCI}qKF1>UMzcU*FgRcnMP_RpkGZ-Os; z6UM?kcq!?@eAILXE*acv{-sm#5ii;8I@twbTpuf#qsw;KrPuG%5~}CwRUb%wM~i4E ztjykm7CN`^8(%&>Gfz3qcmnKd)YefR`fjv;zh`P3S(U!|gMwvVeplc;@gX4GGIh(P zKC4uyq1w+x_y70VAIH=UZPxp=6Ox@fmdByb$>?aXE=y9moPI*zu|H;rw01ePxHuPS z{uI(+o-FnclX$i*^;C12pa!XmDQG!$8(RoX&r z03-c|7^;faSKLc%uVDH)HFDL4a^vJr?opcS`Du)tacL6fx z+Zw0G5sA7x#}1-Ds~Jfut4r0sJALAjIL!J-Cd06w1Fcl@_0Jxmto!aP9=kvptAtG0 zvzb?HqId$met9GFQ}uE;7gZqm?s0#>g#~&b5T1_R+89+@9*^>VJI8#9e3Jn1jsmtn zKRaOA=DP7=_O7u-*{j(3V8D^SSm7gQ$JFd|7y>P#8JQ*M})u-r04)*c~DapTeOW@B`;2{SO(jv+slOxcMUq?wSXR=y)*PMe@XFV&>`i!dJ(HU{iFgDK)|Rwb~&Nnjn*^(YEDUZjtIe+Gkvq#h_1hR+p7%Gp2c zHy#t~rj2A=krwi&G)m5+?xxw&+J_{r;U$SuSv0MI40_xS?Sx18i9Q&k)_ppnZ4PcU zUsAXQpFM0n`mi+Z<(DpBofneP5kjN+Sos|7ZS=hK8|SkP)KxCHLH$agg3tXbmtK#Q z7m1=fjPj$@N*2;~aiHF!5^GdzX#<(#>-QM$_i$cTjO8oYpoglUa&UQJdHrNSxcu4K z*JXdEuuQhHOk=9Fg?ASTl|!4vbmu$e@~DV)XB%gMkNfsk%0N!QtXon<*8Hy)fE}QG zs-DrlhUsz9yC6r_)jXXPwAAgrrd83e{|RW-3eMuK^z(2-!M47h@R`y{nnj>TH7Fn7 zX1dg+Yvp805M03l(9kg1gLdXl>li0aE~#^TdM0v$gG8LR$z$9p#4;0`q}7`=SK(>! z^6Jm6q^R#R;euY3F3l0H_Yfjd39Rl+z|1}#;@mDCWh&DP6QM5g{CVs=rm%qOzPzar(*IWX3=yi=A|%@0 z5{)M$in9CL26VK%8th+hm^|xn2#B0?Hl*NB{*!EERT*le&{Pu*HmF8x{o2geqvDNW ziv(iCKGxj8g-l4cxB|u0N<7a|*2@d+tWGiT$s4bmi^or}evs3z7(7lpIh|mD9L>no zw3I)%P}=a1ZB8lBkI5Yg4>Cwht8$L}^Uv=^3K&d%WqEl!<^)(5A|5&r1Y^jjl$}vW#7R z5Bv5sr72;sW7iX+F?xw}WbdCma=Qmrl`eU{a6G$&UK(;V!<<=2?&pU*O1|(C&dY+R zIeK$#aDye40geew#MJ!W0$?+VY9~mCW76wM_>C-65EBIx%iTQ8OGtxPB7;ABUl3Sh zYNn@vHGSHg?K0p`jsDIHG2`>8OdQgIy-JFT-#|vs%cnte^894O_y{c)p+eZu-w39a zsO3!XK%q3!taL^TV*j^Mq&U(6X)Say{FlEAq8Vi=qgD>*pbl?Wu zA2dhD9pa)>fr$aa3oJy|@F9So1M)NKLYcDyqiWzU+vsiAwVt9Vvq9#U7La5ouNzUB z3Jri2(erd#8PqLhVX45$9$3M9pTyyy$$H*-sfr4o<>cFn8Q4FDuB@I6ki$jC=r#Cd zR3v4^lmgD{OsGF354M?PWJ81wN z7A>i9VQHCqnLFI+t%0GO>;F3SY7r`uyDQvUBHaIn7#wSAr6T*%mvr^9J{=v-sT2GE zACW$_ZwK|n$OggFU#d`k@~p=|^*ib*-V>FNo`L{im4oltHj{`Q)cmvZ6c{v4x8KDk z>Tdo!>0m(?L-?)4(_!~PmU1^M>C^<&9E{sL-RPCmXG8vcT-drTGf>L1X!tYVHpPGW z>%jOO7Wc4mkp8UQhciUDs3)qqO1*$Ye6Z2=cugt$O$ABMO!tB27%AlO$9Th@!wZx% zdV6Wc$3v^enCkeR;$T@&yU`T}-gM19W7)dsH|fEaZrAH4-^{XBN&s~iZ%p%l zKJ;-GgJj{u`tSn}?s^Cn&PzkLdJ41D;2l1>^zC%IhG%iM)oyEdO28Qo;&IeyRdGy* zYX9Hinlgr`Q{4KkEThFw%qe!vgO8RX-yixU?Icm`oaiKLZGOU%B3^oZL-Y{TZdbqg zT)MNfW0Lp{!!5drGdMEODvvU^d{NNO_y>8ljeY#vZ0Cz09*mUtV z7e(xMm5{2L+#sCmVe&LZo_OPD!RWw2(1aDW;L%4@Mm}vIbTZysiguH z2tT6u)Jb0>uRUD?0fvAPw9$xuL=&32moA1Bz43d%}{UpC3L%(xsDZjxRP-^dzX2^S0HLr(Z- z`dd=Tutl#ckyc8Douq(BkI#a&b7ei1LWH;V20N6pA(t`(t$bHb4ug(EQQ;%`h^S;4 jN~Mt&bQ%s<)>BK=wF-me2(AMb&%?j?vjVQk|6czeCeos; literal 0 HcmV?d00001

p^HR#r^lI^;{MfIs~1k+G)>jeEXS3Q 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%0AXHUU1Q7m9AD!MKUcY3PKjfbuZ>CH`) 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