From c3cfd41bf77024b6bd6721e2bcc303003895ac0d Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Tue, 31 Mar 2026 11:57:19 +0000 Subject: [PATCH] Initial version --- .cursorrules | 305 + .dockerignore | 3 + .gitignore | 3 + .perm_test_apache | 0 .perm_test_exec | 0 502.html | 187 + Dockerfile | 21 + Dockerfile.dev | 85 + LICENSE | 1 + README.md | 244 + backend/.env | 14 + backend/.eslintignore | 4 + backend/.eslintrc.cjs | 15 + backend/.prettierrc | 11 + backend/.sequelizerc | 7 + backend/Dockerfile | 23 + backend/README.md | 56 + backend/package.json | 56 + backend/src/ai/LocalAIApi.js | 484 + backend/src/auth/auth.js | 68 + backend/src/config.js | 80 + backend/src/db/api/activity_logs.js | 571 + backend/src/db/api/approval_steps.js | 620 + backend/src/db/api/approval_workflows.js | 520 + backend/src/db/api/approvals.js | 695 + backend/src/db/api/companies.js | 793 + backend/src/db/api/departments.js | 533 + backend/src/db/api/document_links.js | 490 + backend/src/db/api/document_types.js | 503 + backend/src/db/api/documents.js | 752 + backend/src/db/api/file.js | 87 + backend/src/db/api/goods_receipt_lines.js | 631 + backend/src/db/api/goods_receipts.js | 743 + backend/src/db/api/invoice_lines.js | 631 + backend/src/db/api/organizations.js | 476 + backend/src/db/api/payments.js | 718 + backend/src/db/api/permissions.js | 362 + backend/src/db/api/product_categories.js | 498 + backend/src/db/api/products.js | 790 + backend/src/db/api/purchase_order_lines.js | 709 + backend/src/db/api/purchase_orders.js | 897 + .../src/db/api/purchase_requisition_lines.js | 631 + backend/src/db/api/purchase_requisitions.js | 725 + .../src/db/api/role_permission_mappings.js | 481 + backend/src/db/api/roles.js | 472 + backend/src/db/api/ui_announcements.js | 604 + backend/src/db/api/user_role_assignments.js | 610 + backend/src/db/api/users.js | 1048 + backend/src/db/api/vendor_invoices.js | 856 + backend/src/db/api/vendors.js | 622 + backend/src/db/api/warehouses.js | 550 + backend/src/db/db.config.js | 33 + backend/src/db/migrations/1774958148418.js | 7181 +++++++ .../migrations/20260316000000-create-files.js | 124 + ...ate-users-custom-permissions-join-table.js | 77 + backend/src/db/models/activity_logs.js | 211 + backend/src/db/models/approval_steps.js | 157 + backend/src/db/models/approval_workflows.js | 165 + backend/src/db/models/approvals.js | 199 + backend/src/db/models/companies.js | 311 + backend/src/db/models/departments.js | 143 + backend/src/db/models/document_links.js | 142 + backend/src/db/models/document_types.js | 156 + backend/src/db/models/documents.js | 226 + backend/src/db/models/file.js | 53 + backend/src/db/models/goods_receipt_lines.js | 147 + backend/src/db/models/goods_receipts.js | 200 + backend/src/db/models/index.js | 38 + backend/src/db/models/invoice_lines.js | 146 + backend/src/db/models/organizations.js | 302 + backend/src/db/models/payments.js | 207 + backend/src/db/models/permissions.js | 102 + backend/src/db/models/product_categories.js | 132 + backend/src/db/models/products.js | 238 + backend/src/db/models/purchase_order_lines.js | 169 + backend/src/db/models/purchase_orders.js | 276 + .../db/models/purchase_requisition_lines.js | 147 + .../src/db/models/purchase_requisitions.js | 208 + .../src/db/models/role_permission_mappings.js | 121 + backend/src/db/models/roles.js | 161 + backend/src/db/models/ui_announcements.js | 166 + .../src/db/models/user_role_assignments.js | 143 + backend/src/db/models/users.js | 332 + backend/src/db/models/vendor_invoices.js | 258 + backend/src/db/models/vendors.js | 195 + backend/src/db/models/warehouses.js | 168 + backend/src/db/reset.js | 16 + .../db/seeders/20200430130759-admin-user.js | 77 + .../db/seeders/20200430130760-user-roles.js | 699 + .../db/seeders/20231127130745-sample-data.js | 16311 ++++++++++++++++ backend/src/db/utils.js | 27 + backend/src/helpers.js | 23 + backend/src/index.js | 247 + backend/src/middlewares/check-permissions.js | 149 + backend/src/middlewares/upload.js | 11 + backend/src/routes/activity_logs.js | 448 + backend/src/routes/approval_steps.js | 449 + backend/src/routes/approval_workflows.js | 444 + backend/src/routes/approvals.js | 445 + backend/src/routes/auth.js | 209 + backend/src/routes/companies.js | 473 + backend/src/routes/contactForm.js | 0 backend/src/routes/departments.js | 443 + backend/src/routes/document_links.js | 444 + backend/src/routes/document_types.js | 447 + backend/src/routes/documents.js | 451 + backend/src/routes/file.js | 32 + backend/src/routes/goods_receipt_lines.js | 449 + backend/src/routes/goods_receipts.js | 444 + backend/src/routes/invoice_lines.js | 452 + backend/src/routes/openai.js | 328 + backend/src/routes/organizationLogin.js | 55 + backend/src/routes/organizations.js | 440 + backend/src/routes/payments.js | 448 + backend/src/routes/permissions.js | 429 + backend/src/routes/pexels.js | 104 + backend/src/routes/product_categories.js | 446 + backend/src/routes/products.js | 462 + backend/src/routes/purchase_order_lines.js | 455 + backend/src/routes/purchase_orders.js | 457 + .../src/routes/purchase_requisition_lines.js | 449 + backend/src/routes/purchase_requisitions.js | 447 + .../src/routes/role_permission_mappings.js | 437 + backend/src/routes/roles.js | 438 + backend/src/routes/search.js | 56 + backend/src/routes/sql.js | 61 + backend/src/routes/ui_announcements.js | 444 + backend/src/routes/user_role_assignments.js | 437 + backend/src/routes/users.js | 451 + backend/src/routes/vendor_invoices.js | 454 + backend/src/routes/vendors.js | 459 + backend/src/routes/warehouses.js | 446 + backend/src/services/activity_logs.js | 138 + backend/src/services/approval_steps.js | 138 + backend/src/services/approval_workflows.js | 138 + backend/src/services/approvals.js | 138 + backend/src/services/auth.js | 314 + backend/src/services/companies.js | 138 + backend/src/services/departments.js | 138 + backend/src/services/document_links.js | 138 + backend/src/services/document_types.js | 138 + backend/src/services/documents.js | 138 + .../emailAddressVerification.html | 52 + .../invitation/invitationTemplate.html | 55 + .../passwordReset/passwordResetEmail.html | 52 + backend/src/services/email/index.js | 44 + .../email/list/addressVerification.js | 38 + backend/src/services/email/list/invitation.js | 37 + .../src/services/email/list/passwordReset.js | 38 + backend/src/services/file.js | 213 + backend/src/services/goods_receipt_lines.js | 138 + backend/src/services/goods_receipts.js | 138 + backend/src/services/invoice_lines.js | 138 + .../notifications/errors/forbidden.js | 17 + .../notifications/errors/validation.js | 18 + backend/src/services/notifications/helpers.js | 35 + backend/src/services/notifications/list.js | 104 + backend/src/services/openai.js | 80 + backend/src/services/organizations.js | 138 + backend/src/services/payments.js | 138 + backend/src/services/permissions.js | 138 + backend/src/services/product_categories.js | 138 + backend/src/services/products.js | 138 + backend/src/services/purchase_order_lines.js | 138 + backend/src/services/purchase_orders.js | 138 + .../services/purchase_requisition_lines.js | 138 + backend/src/services/purchase_requisitions.js | 138 + .../src/services/role_permission_mappings.js | 138 + backend/src/services/roles.js | 399 + backend/src/services/search.js | 708 + backend/src/services/ui_announcements.js | 138 + backend/src/services/user_role_assignments.js | 138 + backend/src/services/users.js | 179 + backend/src/services/vendor_invoices.js | 138 + backend/src/services/vendors.js | 138 + backend/src/services/warehouses.js | 138 + backend/watcher.js | 49 + backend/yarn.lock | 4470 +++++ docker/.gitignore | 1 + docker/README.md | 46 + docker/docker-compose.yml | 58 + docker/start-backend.sh | 2 + docker/wait-for-it.sh | 182 + frontend/.eslintignore | 3 + frontend/.eslintrc.cjs | 25 + frontend/.gitignore | 33 + frontend/.prettierrc | 10 + frontend/Dockerfile | 19 + frontend/LICENSE-justboil | 21 + frontend/README.md | 92 + frontend/next-env.d.ts | 6 + frontend/next.config.mjs | 32 + frontend/package.json | 79 + frontend/postcss.config.js | 9 + frontend/prettier.config.js | 13 + frontend/public/data-sources/clients.json | 1 + frontend/public/data-sources/history.json | 1 + frontend/public/favicon.svg | 27 + frontend/public/locales/de/common.json | 55 + frontend/public/locales/en/common.json | 52 + frontend/public/locales/es/common.json | 55 + frontend/public/locales/fr/common.json | 55 + frontend/src/colors.ts | 138 + .../Activity_logs/CardActivity_logs.tsx | 183 + .../Activity_logs/ListActivity_logs.tsx | 136 + .../Activity_logs/TableActivity_logs.tsx | 463 + .../configureActivity_logsCols.tsx | 183 + .../Approval_steps/CardApproval_steps.tsx | 183 + .../Approval_steps/ListApproval_steps.tsx | 136 + .../Approval_steps/TableApproval_steps.tsx | 463 + .../configureApproval_stepsCols.tsx | 191 + .../CardApproval_workflows.tsx | 159 + .../ListApproval_workflows.tsx | 120 + .../TableApproval_workflows.tsx | 476 + .../configureApproval_workflowsCols.tsx | 151 + .../components/Approvals/CardApprovals.tsx | 219 + .../components/Approvals/ListApprovals.tsx | 160 + .../components/Approvals/TableApprovals.tsx | 507 + .../Approvals/configureApprovalsCols.tsx | 252 + frontend/src/components/AsideMenu.tsx | 30 + frontend/src/components/AsideMenuItem.tsx | 102 + frontend/src/components/AsideMenuLayer.tsx | 94 + frontend/src/components/AsideMenuList.tsx | 35 + frontend/src/components/BaseButton.tsx | 96 + frontend/src/components/BaseButtons.tsx | 38 + frontend/src/components/BaseDivider.tsx | 14 + frontend/src/components/BaseIcon.tsx | 32 + frontend/src/components/BigCalendar.tsx | 175 + frontend/src/components/CardBox.tsx | 64 + .../src/components/CardBoxComponentBody.tsx | 12 + .../src/components/CardBoxComponentEmpty.tsx | 11 + .../src/components/CardBoxComponentFooter.tsx | 10 + .../src/components/CardBoxComponentTitle.tsx | 17 + frontend/src/components/CardBoxModal.tsx | 59 + .../src/components/ChartLineSample/config.ts | 54 + .../src/components/ChartLineSample/index.tsx | 37 + frontend/src/components/ClickOutside.tsx | 35 + .../components/Companies/CardCompanies.tsx | 280 + .../components/Companies/ListCompanies.tsx | 203 + .../components/Companies/TableCompanies.tsx | 476 + .../Companies/configureCompaniesCols.tsx | 285 + .../src/components/DataGridMultiSelect.tsx | 55 + .../Departments/CardDepartments.tsx | 159 + .../Departments/ListDepartments.tsx | 120 + .../Departments/TableDepartments.tsx | 476 + .../Departments/configureDepartmentsCols.tsx | 158 + frontend/src/components/DevModeBadge.tsx | 150 + .../Document_links/CardDocument_links.tsx | 147 + .../Document_links/ListDocument_links.tsx | 112 + .../Document_links/TableDocument_links.tsx | 463 + .../configureDocument_linksCols.tsx | 135 + .../Document_types/CardDocument_types.tsx | 159 + .../Document_types/ListDocument_types.tsx | 120 + .../Document_types/TableDocument_types.tsx | 463 + .../configureDocument_typesCols.tsx | 144 + .../components/Documents/CardDocuments.tsx | 250 + .../components/Documents/ListDocuments.tsx | 183 + .../components/Documents/TableDocuments.tsx | 509 + .../Documents/configureDocumentsCols.tsx | 286 + .../src/components/DragDropFilePicker.tsx | 124 + frontend/src/components/ErrorBoundary.tsx | 218 + frontend/src/components/FooterBar.tsx | 35 + frontend/src/components/FormCheckRadio.tsx | 20 + .../src/components/FormCheckRadioGroup.tsx | 20 + frontend/src/components/FormField.tsx | 80 + frontend/src/components/FormFilePicker.tsx | 92 + frontend/src/components/FormImagePicker.tsx | 90 + .../CardGoods_receipt_lines.tsx | 183 + .../ListGoods_receipt_lines.tsx | 136 + .../TableGoods_receipt_lines.tsx | 463 + .../configureGoods_receipt_linesCols.tsx | 197 + .../Goods_receipts/CardGoods_receipts.tsx | 226 + .../Goods_receipts/ListGoods_receipts.tsx | 167 + .../Goods_receipts/TableGoods_receipts.tsx | 489 + .../configureGoods_receiptsCols.tsx | 263 + frontend/src/components/IconRounded.tsx | 34 + frontend/src/components/ImageField.tsx | 51 + frontend/src/components/IntroGuide.tsx | 55 + .../Invoice_lines/CardInvoice_lines.tsx | 183 + .../Invoice_lines/ListInvoice_lines.tsx | 136 + .../Invoice_lines/TableInvoice_lines.tsx | 463 + .../configureInvoice_linesCols.tsx | 191 + .../components/KanbanBoard/KanbanBoard.tsx | 51 + .../src/components/KanbanBoard/KanbanCard.tsx | 64 + .../components/KanbanBoard/KanbanColumn.tsx | 209 + frontend/src/components/LanguageSwitcher.tsx | 96 + .../src/components/ListActionsPopover.tsx | 115 + frontend/src/components/LoadingSpinner.tsx | 18 + frontend/src/components/Logo/index.tsx | 15 + frontend/src/components/NavBar.tsx | 57 + frontend/src/components/NavBarItem.tsx | 132 + frontend/src/components/NavBarItemPlain.tsx | 30 + frontend/src/components/NavBarMenuList.tsx | 19 + frontend/src/components/NotificationBar.tsx | 57 + .../Organizations/CardOrganizations.tsx | 111 + .../Organizations/ListOrganizations.tsx | 88 + .../Organizations/TableOrganizations.tsx | 463 + .../configureOrganizationsCols.tsx | 83 + frontend/src/components/OverlayLayer.tsx | 41 + frontend/src/components/Pagination.tsx | 85 + .../src/components/PasswordSetOrReset.tsx | 113 + .../src/components/Payments/CardPayments.tsx | 226 + .../src/components/Payments/ListPayments.tsx | 167 + .../src/components/Payments/TablePayments.tsx | 468 + .../Payments/configurePaymentsCols.tsx | 254 + .../Permissions/CardPermissions.tsx | 111 + .../Permissions/ListPermissions.tsx | 88 + .../Permissions/TablePermissions.tsx | 463 + .../Permissions/configurePermissionsCols.tsx | 83 + .../CardProduct_categories.tsx | 147 + .../ListProduct_categories.tsx | 112 + .../TableProduct_categories.tsx | 476 + .../configureProduct_categoriesCols.tsx | 135 + .../src/components/Products/CardProducts.tsx | 268 + .../src/components/Products/ListProducts.tsx | 195 + .../src/components/Products/TableProducts.tsx | 463 + .../Products/configureProductsCols.tsx | 287 + .../CardPurchase_order_lines.tsx | 207 + .../ListPurchase_order_lines.tsx | 152 + .../TablePurchase_order_lines.tsx | 463 + .../configurePurchase_order_linesCols.tsx | 229 + .../Purchase_orders/CardPurchase_orders.tsx | 286 + .../Purchase_orders/ListPurchase_orders.tsx | 207 + .../Purchase_orders/TablePurchase_orders.tsx | 513 + .../configurePurchase_ordersCols.tsx | 342 + .../CardPurchase_requisition_lines.tsx | 183 + .../ListPurchase_requisition_lines.tsx | 136 + .../TablePurchase_requisition_lines.tsx | 463 + ...onfigurePurchase_requisition_linesCols.tsx | 197 + .../CardPurchase_requisitions.tsx | 226 + .../ListPurchase_requisitions.tsx | 167 + .../TablePurchase_requisitions.tsx | 511 + .../configurePurchase_requisitionsCols.tsx | 257 + frontend/src/components/RichTextField.tsx | 44 + .../CardRole_permission_mappings.tsx | 135 + .../ListRole_permission_mappings.tsx | 104 + .../TableRole_permission_mappings.tsx | 463 + .../configureRole_permission_mappingsCols.tsx | 128 + frontend/src/components/Roles/CardRoles.tsx | 135 + frontend/src/components/Roles/ListRoles.tsx | 104 + frontend/src/components/Roles/TableRoles.tsx | 463 + .../components/Roles/configureRolesCols.tsx | 119 + frontend/src/components/Search.tsx | 50 + frontend/src/components/SearchResults.tsx | 83 + frontend/src/components/SectionFullScreen.tsx | 27 + frontend/src/components/SectionMain.tsx | 10 + frontend/src/components/SectionTitle.tsx | 27 + .../components/SectionTitleLineWithButton.tsx | 29 + frontend/src/components/SelectField.tsx | 53 + frontend/src/components/SelectFieldMany.tsx | 67 + .../components/SmartWidget/SmartWidget.tsx | 99 + .../SmartWidget/components/AreaChart.tsx | 18 + .../components/AreaChart/ApexAreaChart.tsx | 135 + .../components/AreaChart/ChartJSAreaChart.tsx | 96 + .../SmartWidget/components/BarChart.tsx | 18 + .../components/BarChart/ApexBarChart.tsx | 131 + .../components/BarChart/ChartJSBarChart.tsx | 92 + .../SmartWidget/components/FunnelChart.tsx | 134 + .../SmartWidget/components/LineChart.tsx | 18 + .../components/LineChart/ApexLineChart.tsx | 135 + .../components/LineChart/ChartJSLineChart.tsx | 97 + .../SmartWidget/components/PieChart.tsx | 18 + .../components/PieChart/ApexPieChart.tsx | 106 + .../components/PieChart/ChartJSPieChart.tsx | 81 + .../SmartWidget/models/widget.model.ts | 35 + .../components/SmartWidget/widgetHelpers.tsx | 36 + frontend/src/components/SwitchField.tsx | 22 + .../src/components/TableSampleClients.tsx | 141 + .../Ui_announcements/CardUi_announcements.tsx | 183 + .../Ui_announcements/ListUi_announcements.tsx | 136 + .../TableUi_announcements.tsx | 489 + .../configureUi_announcementsCols.tsx | 187 + .../src/components/Uploaders/FilesUploader.js | 150 + .../components/Uploaders/ImagesUploader.js | 237 + .../src/components/Uploaders/UploadService.js | 79 + frontend/src/components/UserAvatar.tsx | 46 + .../src/components/UserAvatarCurrentUser.tsx | 43 + frontend/src/components/UserCard.tsx | 49 + .../CardUser_role_assignments.tsx | 171 + .../ListUser_role_assignments.tsx | 128 + .../TableUser_role_assignments.tsx | 489 + .../configureUser_role_assignmentsCols.tsx | 186 + frontend/src/components/Users/CardUsers.tsx | 220 + frontend/src/components/Users/ListUsers.tsx | 163 + frontend/src/components/Users/TableUsers.tsx | 463 + .../components/Users/configureUsersCols.tsx | 229 + .../Vendor_invoices/CardVendor_invoices.tsx | 274 + .../Vendor_invoices/ListVendor_invoices.tsx | 199 + .../Vendor_invoices/TableVendor_invoices.tsx | 511 + .../configureVendor_invoicesCols.tsx | 326 + .../src/components/Vendors/CardVendors.tsx | 207 + .../src/components/Vendors/ListVendors.tsx | 152 + .../src/components/Vendors/TableVendors.tsx | 463 + .../Vendors/configureVendorsCols.tsx | 210 + .../components/Warehouses/CardWarehouses.tsx | 171 + .../components/Warehouses/ListWarehouses.tsx | 128 + .../components/Warehouses/TableWarehouses.tsx | 476 + .../Warehouses/configureWarehousesCols.tsx | 167 + .../components/WidgetCreator/RoleSelect.tsx | 53 + .../WidgetCreator/WidgetCreator.tsx | 140 + frontend/src/config.ts | 15 + frontend/src/css/_app.css | 32 + frontend/src/css/_calendar.css | 39 + frontend/src/css/_checkbox-radio-switch.css | 59 + frontend/src/css/_helper.css | 23 + frontend/src/css/_progress.css | 21 + frontend/src/css/_rich-text.css | 1 + frontend/src/css/_scrollbars.css | 41 + frontend/src/css/_select-dropdown.css | 31 + frontend/src/css/_table.css | 117 + frontend/src/css/_theme.css | 103 + frontend/src/css/main.css | 35 + frontend/src/css/tailwind/_base.css | 1 + frontend/src/css/tailwind/_components.css | 1 + frontend/src/css/tailwind/_utilities.css | 1 + frontend/src/helpers/dataFormatter.js | 461 + frontend/src/helpers/fileSaver.ts | 6 + frontend/src/helpers/humanize.ts | 11 + frontend/src/helpers/notifyStateHandler.ts | 31 + frontend/src/helpers/pexels.ts | 76 + frontend/src/helpers/userPermissions.ts | 18 + frontend/src/hooks/sampleData.ts | 22 + frontend/src/hooks/useDevCompilationStatus.ts | 44 + frontend/src/i18n.ts | 21 + frontend/src/interfaces/index.ts | 109 + frontend/src/layouts/Authenticated.tsx | 129 + frontend/src/layouts/Guest.tsx | 17 + frontend/src/menuAside.ts | 259 + frontend/src/menuNavBar.ts | 53 + frontend/src/pages/_app.tsx | 201 + .../pages/activity_logs/[activity_logsId].tsx | 811 + .../activity_logs/activity_logs-edit.tsx | 808 + .../activity_logs/activity_logs-list.tsx | 166 + .../pages/activity_logs/activity_logs-new.tsx | 522 + .../activity_logs/activity_logs-table.tsx | 168 + .../activity_logs/activity_logs-view.tsx | 505 + frontend/src/pages/api/hello.js | 5 + frontend/src/pages/api/logError.ts | 83 + .../approval_steps/[approval_stepsId].tsx | 843 + .../approval_steps/approval_steps-edit.tsx | 840 + .../approval_steps/approval_steps-list.tsx | 170 + .../approval_steps/approval_steps-new.tsx | 487 + .../approval_steps/approval_steps-table.tsx | 172 + .../approval_steps/approval_steps-view.tsx | 666 + .../[approval_workflowsId].tsx | 645 + .../approval_workflows-edit.tsx | 642 + .../approval_workflows-list.tsx | 170 + .../approval_workflows-new.tsx | 388 + .../approval_workflows-table.tsx | 168 + .../approval_workflows-view.tsx | 624 + .../src/pages/approvals/[approvalsId].tsx | 1183 ++ .../src/pages/approvals/approvals-edit.tsx | 1180 ++ .../src/pages/approvals/approvals-list.tsx | 180 + .../src/pages/approvals/approvals-new.tsx | 637 + .../src/pages/approvals/approvals-table.tsx | 180 + .../src/pages/approvals/approvals-view.tsx | 795 + .../src/pages/companies/[companiesId].tsx | 1172 ++ .../src/pages/companies/companies-edit.tsx | 1169 ++ .../src/pages/companies/companies-list.tsx | 166 + .../src/pages/companies/companies-new.tsx | 858 + .../src/pages/companies/companies-table.tsx | 164 + .../src/pages/companies/companies-view.tsx | 2045 ++ frontend/src/pages/dashboard.tsx | 992 + .../src/pages/departments/[departmentsId].tsx | 710 + .../pages/departments/departments-edit.tsx | 707 + .../pages/departments/departments-list.tsx | 174 + .../src/pages/departments/departments-new.tsx | 382 + .../pages/departments/departments-table.tsx | 172 + .../pages/departments/departments-view.tsx | 602 + .../document_links/[document_linksId].tsx | 583 + .../document_links/document_links-edit.tsx | 580 + .../document_links/document_links-list.tsx | 166 + .../document_links/document_links-new.tsx | 340 + .../document_links/document_links-table.tsx | 168 + .../document_links/document_links-view.tsx | 401 + .../document_types/[document_typesId].tsx | 580 + .../document_types/document_types-edit.tsx | 577 + .../document_types/document_types-list.tsx | 162 + .../document_types/document_types-new.tsx | 393 + .../document_types/document_types-table.tsx | 164 + .../document_types/document_types-view.tsx | 497 + .../src/pages/documents/[documentsId].tsx | 1257 ++ .../src/pages/documents/documents-edit.tsx | 1254 ++ .../src/pages/documents/documents-list.tsx | 176 + .../src/pages/documents/documents-new.tsx | 753 + .../src/pages/documents/documents-table.tsx | 176 + .../src/pages/documents/documents-view.tsx | 867 + frontend/src/pages/error.tsx | 35 + frontend/src/pages/forgot.tsx | 82 + frontend/src/pages/forms.tsx | 142 + .../[goods_receipt_linesId].tsx | 904 + .../goods_receipt_lines-edit.tsx | 901 + .../goods_receipt_lines-list.tsx | 174 + .../goods_receipt_lines-new.tsx | 478 + .../goods_receipt_lines-table.tsx | 176 + .../goods_receipt_lines-view.tsx | 621 + .../goods_receipts/[goods_receiptsId].tsx | 1183 ++ .../goods_receipts/goods_receipts-edit.tsx | 1180 ++ .../goods_receipts/goods_receipts-list.tsx | 182 + .../goods_receipts/goods_receipts-new.tsx | 646 + .../goods_receipts/goods_receipts-table.tsx | 180 + .../goods_receipts/goods_receipts-view.tsx | 1014 + frontend/src/pages/index.tsx | 166 + .../pages/invoice_lines/[invoice_linesId].tsx | 840 + .../invoice_lines/invoice_lines-edit.tsx | 837 + .../invoice_lines/invoice_lines-list.tsx | 170 + .../pages/invoice_lines/invoice_lines-new.tsx | 484 + .../invoice_lines/invoice_lines-table.tsx | 172 + .../invoice_lines/invoice_lines-view.tsx | 559 + frontend/src/pages/login.tsx | 283 + .../pages/organizations/[organizationsId].tsx | 191 + .../organizations/organizations-edit.tsx | 188 + .../organizations/organizations-list.tsx | 162 + .../pages/organizations/organizations-new.tsx | 143 + .../organizations/organizations-table.tsx | 160 + .../organizations/organizations-view.tsx | 2582 +++ frontend/src/pages/password-reset.tsx | 12 + frontend/src/pages/payments/[paymentsId].tsx | 1124 ++ frontend/src/pages/payments/payments-edit.tsx | 1121 ++ frontend/src/pages/payments/payments-list.tsx | 178 + frontend/src/pages/payments/payments-new.tsx | 653 + .../src/pages/payments/payments-table.tsx | 176 + frontend/src/pages/payments/payments-view.tsx | 734 + .../src/pages/permissions/[permissionsId].tsx | 191 + .../pages/permissions/permissions-edit.tsx | 188 + .../pages/permissions/permissions-list.tsx | 162 + .../src/pages/permissions/permissions-new.tsx | 143 + .../pages/permissions/permissions-table.tsx | 160 + .../pages/permissions/permissions-view.tsx | 195 + frontend/src/pages/privacy-policy.tsx | 292 + .../[product_categoriesId].tsx | 576 + .../product_categories-edit.tsx | 573 + .../product_categories-list.tsx | 170 + .../product_categories-new.tsx | 332 + .../product_categories-table.tsx | 168 + .../product_categories-view.tsx | 534 + frontend/src/pages/products/[productsId].tsx | 1242 ++ frontend/src/pages/products/products-edit.tsx | 1239 ++ frontend/src/pages/products/products-list.tsx | 170 + frontend/src/pages/products/products-new.tsx | 803 + .../src/pages/products/products-table.tsx | 172 + frontend/src/pages/products/products-view.tsx | 1108 ++ frontend/src/pages/profile.tsx | 180 + .../[purchase_order_linesId].tsx | 1036 + .../purchase_order_lines-edit.tsx | 1033 + .../purchase_order_lines-list.tsx | 174 + .../purchase_order_lines-new.tsx | 582 + .../purchase_order_lines-table.tsx | 176 + .../purchase_order_lines-view.tsx | 764 + .../purchase_orders/[purchase_ordersId].tsx | 1533 ++ .../purchase_orders/purchase_orders-edit.tsx | 1530 ++ .../purchase_orders/purchase_orders-list.tsx | 180 + .../purchase_orders/purchase_orders-new.tsx | 917 + .../purchase_orders/purchase_orders-table.tsx | 180 + .../purchase_orders/purchase_orders-view.tsx | 1295 ++ .../[purchase_requisition_linesId].tsx | 904 + .../purchase_requisition_lines-edit.tsx | 901 + .../purchase_requisition_lines-list.tsx | 174 + .../purchase_requisition_lines-new.tsx | 478 + .../purchase_requisition_lines-table.tsx | 176 + .../purchase_requisition_lines-view.tsx | 621 + .../[purchase_requisitionsId].tsx | 1125 ++ .../purchase_requisitions-edit.tsx | 1122 ++ .../purchase_requisitions-list.tsx | 176 + .../purchase_requisitions-new.tsx | 648 + .../purchase_requisitions-table.tsx | 176 + .../purchase_requisitions-view.tsx | 962 + frontend/src/pages/register.tsx | 134 + .../[role_permission_mappingsId].tsx | 580 + .../role_permission_mappings-edit.tsx | 577 + .../role_permission_mappings-list.tsx | 170 + .../role_permission_mappings-new.tsx | 280 + .../role_permission_mappings-table.tsx | 172 + .../role_permission_mappings-view.tsx | 435 + frontend/src/pages/roles/[rolesId].tsx | 382 + frontend/src/pages/roles/roles-edit.tsx | 379 + frontend/src/pages/roles/roles-list.tsx | 162 + frontend/src/pages/roles/roles-new.tsx | 245 + frontend/src/pages/roles/roles-table.tsx | 160 + frontend/src/pages/roles/roles-view.tsx | 603 + frontend/src/pages/search.tsx | 96 + frontend/src/pages/tables.tsx | 33 + frontend/src/pages/terms-of-use.tsx | 206 + .../ui_announcements/[ui_announcementsId].tsx | 793 + .../ui_announcements-edit.tsx | 790 + .../ui_announcements-list.tsx | 170 + .../ui_announcements/ui_announcements-new.tsx | 508 + .../ui_announcements-table.tsx | 168 + .../ui_announcements-view.tsx | 520 + .../[user_role_assignmentsId].tsx | 852 + .../user_role_assignments-edit.tsx | 849 + .../user_role_assignments-list.tsx | 178 + .../user_role_assignments-new.tsx | 440 + .../user_role_assignments-table.tsx | 176 + .../user_role_assignments-view.tsx | 609 + frontend/src/pages/users/[usersId].tsx | 920 + frontend/src/pages/users/users-edit.tsx | 917 + frontend/src/pages/users/users-list.tsx | 168 + frontend/src/pages/users/users-new.tsx | 548 + frontend/src/pages/users/users-table.tsx | 166 + frontend/src/pages/users/users-view.tsx | 1530 ++ .../vendor_invoices/[vendor_invoicesId].tsx | 1465 ++ .../vendor_invoices/vendor_invoices-edit.tsx | 1462 ++ .../vendor_invoices/vendor_invoices-list.tsx | 180 + .../vendor_invoices/vendor_invoices-new.tsx | 863 + .../vendor_invoices/vendor_invoices-table.tsx | 180 + .../vendor_invoices/vendor_invoices-view.tsx | 1124 ++ frontend/src/pages/vendors/[vendorsId].tsx | 904 + frontend/src/pages/vendors/vendors-edit.tsx | 901 + frontend/src/pages/vendors/vendors-list.tsx | 166 + frontend/src/pages/vendors/vendors-new.tsx | 591 + frontend/src/pages/vendors/vendors-table.tsx | 168 + frontend/src/pages/vendors/vendors-view.tsx | 936 + frontend/src/pages/verify-email.tsx | 62 + .../src/pages/warehouses/[warehousesId].tsx | 704 + .../src/pages/warehouses/warehouses-edit.tsx | 701 + .../src/pages/warehouses/warehouses-list.tsx | 170 + .../src/pages/warehouses/warehouses-new.tsx | 432 + .../src/pages/warehouses/warehouses-table.tsx | 168 + .../src/pages/warehouses/warehouses-view.tsx | 746 + .../activity_logs/activity_logsSlice.ts | 231 + .../approval_steps/approval_stepsSlice.ts | 231 + .../approval_workflowsSlice.ts | 231 + .../src/stores/approvals/approvalsSlice.ts | 231 + frontend/src/stores/authSlice.ts | 124 + .../src/stores/companies/companiesSlice.ts | 231 + .../stores/departments/departmentsSlice.ts | 231 + .../document_links/document_linksSlice.ts | 231 + .../document_types/document_typesSlice.ts | 231 + .../src/stores/documents/documentsSlice.ts | 231 + .../goods_receipt_linesSlice.ts | 231 + .../goods_receipts/goods_receiptsSlice.ts | 231 + frontend/src/stores/hooks.ts | 6 + frontend/src/stores/introSteps.ts | 139 + .../invoice_lines/invoice_linesSlice.ts | 231 + frontend/src/stores/mainSlice.ts | 36 + frontend/src/stores/openAiSlice.ts | 151 + .../organizations/organizationsSlice.ts | 231 + frontend/src/stores/payments/paymentsSlice.ts | 231 + .../stores/permissions/permissionsSlice.ts | 231 + .../product_categoriesSlice.ts | 231 + frontend/src/stores/products/productsSlice.ts | 231 + .../purchase_order_linesSlice.ts | 231 + .../purchase_orders/purchase_ordersSlice.ts | 231 + .../purchase_requisition_linesSlice.ts | 231 + .../purchase_requisitionsSlice.ts | 231 + .../role_permission_mappingsSlice.ts | 231 + frontend/src/stores/roles/rolesSlice.ts | 280 + frontend/src/stores/store.ts | 79 + frontend/src/stores/styleSlice.ts | 103 + .../ui_announcements/ui_announcementsSlice.ts | 231 + .../user_role_assignmentsSlice.ts | 231 + frontend/src/stores/users/usersSlice.ts | 231 + frontend/src/stores/usersSlice.ts | 117 + .../vendor_invoices/vendor_invoicesSlice.ts | 231 + frontend/src/stores/vendors/vendorsSlice.ts | 231 + .../src/stores/warehouses/warehousesSlice.ts | 231 + frontend/src/styles.ts | 107 + frontend/tailwind.config.js | 110 + frontend/tsconfig.json | 30 + frontend/yarn.lock | 3608 ++++ nginx.conf | 96 + package.json | 8 + 663 files changed, 227426 insertions(+) create mode 100644 .cursorrules create mode 100644 .dockerignore create mode 100644 .gitignore create mode 100644 .perm_test_apache create mode 100644 .perm_test_exec create mode 100644 502.html create mode 100644 Dockerfile create mode 100644 Dockerfile.dev create mode 100644 LICENSE create mode 100644 README.md create mode 100644 backend/.env create mode 100644 backend/.eslintignore create mode 100644 backend/.eslintrc.cjs create mode 100644 backend/.prettierrc create mode 100644 backend/.sequelizerc create mode 100644 backend/Dockerfile create mode 100644 backend/README.md create mode 100644 backend/package.json create mode 100644 backend/src/ai/LocalAIApi.js create mode 100644 backend/src/auth/auth.js create mode 100644 backend/src/config.js create mode 100644 backend/src/db/api/activity_logs.js create mode 100644 backend/src/db/api/approval_steps.js create mode 100644 backend/src/db/api/approval_workflows.js create mode 100644 backend/src/db/api/approvals.js create mode 100644 backend/src/db/api/companies.js create mode 100644 backend/src/db/api/departments.js create mode 100644 backend/src/db/api/document_links.js create mode 100644 backend/src/db/api/document_types.js create mode 100644 backend/src/db/api/documents.js create mode 100644 backend/src/db/api/file.js create mode 100644 backend/src/db/api/goods_receipt_lines.js create mode 100644 backend/src/db/api/goods_receipts.js create mode 100644 backend/src/db/api/invoice_lines.js create mode 100644 backend/src/db/api/organizations.js create mode 100644 backend/src/db/api/payments.js create mode 100644 backend/src/db/api/permissions.js create mode 100644 backend/src/db/api/product_categories.js create mode 100644 backend/src/db/api/products.js create mode 100644 backend/src/db/api/purchase_order_lines.js create mode 100644 backend/src/db/api/purchase_orders.js create mode 100644 backend/src/db/api/purchase_requisition_lines.js create mode 100644 backend/src/db/api/purchase_requisitions.js create mode 100644 backend/src/db/api/role_permission_mappings.js create mode 100644 backend/src/db/api/roles.js create mode 100644 backend/src/db/api/ui_announcements.js create mode 100644 backend/src/db/api/user_role_assignments.js create mode 100644 backend/src/db/api/users.js create mode 100644 backend/src/db/api/vendor_invoices.js create mode 100644 backend/src/db/api/vendors.js create mode 100644 backend/src/db/api/warehouses.js create mode 100644 backend/src/db/db.config.js create mode 100644 backend/src/db/migrations/1774958148418.js create mode 100644 backend/src/db/migrations/20260316000000-create-files.js create mode 100644 backend/src/db/migrations/20260316001000-create-users-custom-permissions-join-table.js create mode 100644 backend/src/db/models/activity_logs.js create mode 100644 backend/src/db/models/approval_steps.js create mode 100644 backend/src/db/models/approval_workflows.js create mode 100644 backend/src/db/models/approvals.js create mode 100644 backend/src/db/models/companies.js create mode 100644 backend/src/db/models/departments.js create mode 100644 backend/src/db/models/document_links.js create mode 100644 backend/src/db/models/document_types.js create mode 100644 backend/src/db/models/documents.js create mode 100644 backend/src/db/models/file.js create mode 100644 backend/src/db/models/goods_receipt_lines.js create mode 100644 backend/src/db/models/goods_receipts.js create mode 100644 backend/src/db/models/index.js create mode 100644 backend/src/db/models/invoice_lines.js create mode 100644 backend/src/db/models/organizations.js create mode 100644 backend/src/db/models/payments.js create mode 100644 backend/src/db/models/permissions.js create mode 100644 backend/src/db/models/product_categories.js create mode 100644 backend/src/db/models/products.js create mode 100644 backend/src/db/models/purchase_order_lines.js create mode 100644 backend/src/db/models/purchase_orders.js create mode 100644 backend/src/db/models/purchase_requisition_lines.js create mode 100644 backend/src/db/models/purchase_requisitions.js create mode 100644 backend/src/db/models/role_permission_mappings.js create mode 100644 backend/src/db/models/roles.js create mode 100644 backend/src/db/models/ui_announcements.js create mode 100644 backend/src/db/models/user_role_assignments.js create mode 100644 backend/src/db/models/users.js create mode 100644 backend/src/db/models/vendor_invoices.js create mode 100644 backend/src/db/models/vendors.js create mode 100644 backend/src/db/models/warehouses.js create mode 100644 backend/src/db/reset.js create mode 100644 backend/src/db/seeders/20200430130759-admin-user.js create mode 100644 backend/src/db/seeders/20200430130760-user-roles.js create mode 100644 backend/src/db/seeders/20231127130745-sample-data.js create mode 100644 backend/src/db/utils.js create mode 100644 backend/src/helpers.js create mode 100644 backend/src/index.js create mode 100644 backend/src/middlewares/check-permissions.js create mode 100644 backend/src/middlewares/upload.js create mode 100644 backend/src/routes/activity_logs.js create mode 100644 backend/src/routes/approval_steps.js create mode 100644 backend/src/routes/approval_workflows.js create mode 100644 backend/src/routes/approvals.js create mode 100644 backend/src/routes/auth.js create mode 100644 backend/src/routes/companies.js create mode 100644 backend/src/routes/contactForm.js create mode 100644 backend/src/routes/departments.js create mode 100644 backend/src/routes/document_links.js create mode 100644 backend/src/routes/document_types.js create mode 100644 backend/src/routes/documents.js create mode 100644 backend/src/routes/file.js create mode 100644 backend/src/routes/goods_receipt_lines.js create mode 100644 backend/src/routes/goods_receipts.js create mode 100644 backend/src/routes/invoice_lines.js create mode 100644 backend/src/routes/openai.js create mode 100644 backend/src/routes/organizationLogin.js create mode 100644 backend/src/routes/organizations.js create mode 100644 backend/src/routes/payments.js create mode 100644 backend/src/routes/permissions.js create mode 100644 backend/src/routes/pexels.js create mode 100644 backend/src/routes/product_categories.js create mode 100644 backend/src/routes/products.js create mode 100644 backend/src/routes/purchase_order_lines.js create mode 100644 backend/src/routes/purchase_orders.js create mode 100644 backend/src/routes/purchase_requisition_lines.js create mode 100644 backend/src/routes/purchase_requisitions.js create mode 100644 backend/src/routes/role_permission_mappings.js create mode 100644 backend/src/routes/roles.js create mode 100644 backend/src/routes/search.js create mode 100644 backend/src/routes/sql.js create mode 100644 backend/src/routes/ui_announcements.js create mode 100644 backend/src/routes/user_role_assignments.js create mode 100644 backend/src/routes/users.js create mode 100644 backend/src/routes/vendor_invoices.js create mode 100644 backend/src/routes/vendors.js create mode 100644 backend/src/routes/warehouses.js create mode 100644 backend/src/services/activity_logs.js create mode 100644 backend/src/services/approval_steps.js create mode 100644 backend/src/services/approval_workflows.js create mode 100644 backend/src/services/approvals.js create mode 100644 backend/src/services/auth.js create mode 100644 backend/src/services/companies.js create mode 100644 backend/src/services/departments.js create mode 100644 backend/src/services/document_links.js create mode 100644 backend/src/services/document_types.js create mode 100644 backend/src/services/documents.js create mode 100644 backend/src/services/email/htmlTemplates/addressVerification/emailAddressVerification.html create mode 100644 backend/src/services/email/htmlTemplates/invitation/invitationTemplate.html create mode 100644 backend/src/services/email/htmlTemplates/passwordReset/passwordResetEmail.html create mode 100644 backend/src/services/email/index.js create mode 100644 backend/src/services/email/list/addressVerification.js create mode 100644 backend/src/services/email/list/invitation.js create mode 100644 backend/src/services/email/list/passwordReset.js create mode 100644 backend/src/services/file.js create mode 100644 backend/src/services/goods_receipt_lines.js create mode 100644 backend/src/services/goods_receipts.js create mode 100644 backend/src/services/invoice_lines.js create mode 100644 backend/src/services/notifications/errors/forbidden.js create mode 100644 backend/src/services/notifications/errors/validation.js create mode 100644 backend/src/services/notifications/helpers.js create mode 100644 backend/src/services/notifications/list.js create mode 100644 backend/src/services/openai.js create mode 100644 backend/src/services/organizations.js create mode 100644 backend/src/services/payments.js create mode 100644 backend/src/services/permissions.js create mode 100644 backend/src/services/product_categories.js create mode 100644 backend/src/services/products.js create mode 100644 backend/src/services/purchase_order_lines.js create mode 100644 backend/src/services/purchase_orders.js create mode 100644 backend/src/services/purchase_requisition_lines.js create mode 100644 backend/src/services/purchase_requisitions.js create mode 100644 backend/src/services/role_permission_mappings.js create mode 100644 backend/src/services/roles.js create mode 100644 backend/src/services/search.js create mode 100644 backend/src/services/ui_announcements.js create mode 100644 backend/src/services/user_role_assignments.js create mode 100644 backend/src/services/users.js create mode 100644 backend/src/services/vendor_invoices.js create mode 100644 backend/src/services/vendors.js create mode 100644 backend/src/services/warehouses.js create mode 100644 backend/watcher.js create mode 100644 backend/yarn.lock create mode 100644 docker/.gitignore create mode 100644 docker/README.md create mode 100644 docker/docker-compose.yml create mode 100644 docker/start-backend.sh create mode 100644 docker/wait-for-it.sh create mode 100644 frontend/.eslintignore create mode 100644 frontend/.eslintrc.cjs create mode 100644 frontend/.gitignore create mode 100644 frontend/.prettierrc create mode 100644 frontend/Dockerfile create mode 100644 frontend/LICENSE-justboil create mode 100644 frontend/README.md create mode 100644 frontend/next-env.d.ts create mode 100644 frontend/next.config.mjs create mode 100644 frontend/package.json create mode 100644 frontend/postcss.config.js create mode 100644 frontend/prettier.config.js create mode 100644 frontend/public/data-sources/clients.json create mode 100644 frontend/public/data-sources/history.json create mode 100644 frontend/public/favicon.svg create mode 100644 frontend/public/locales/de/common.json create mode 100644 frontend/public/locales/en/common.json create mode 100644 frontend/public/locales/es/common.json create mode 100644 frontend/public/locales/fr/common.json create mode 100644 frontend/src/colors.ts create mode 100644 frontend/src/components/Activity_logs/CardActivity_logs.tsx create mode 100644 frontend/src/components/Activity_logs/ListActivity_logs.tsx create mode 100644 frontend/src/components/Activity_logs/TableActivity_logs.tsx create mode 100644 frontend/src/components/Activity_logs/configureActivity_logsCols.tsx create mode 100644 frontend/src/components/Approval_steps/CardApproval_steps.tsx create mode 100644 frontend/src/components/Approval_steps/ListApproval_steps.tsx create mode 100644 frontend/src/components/Approval_steps/TableApproval_steps.tsx create mode 100644 frontend/src/components/Approval_steps/configureApproval_stepsCols.tsx create mode 100644 frontend/src/components/Approval_workflows/CardApproval_workflows.tsx create mode 100644 frontend/src/components/Approval_workflows/ListApproval_workflows.tsx create mode 100644 frontend/src/components/Approval_workflows/TableApproval_workflows.tsx create mode 100644 frontend/src/components/Approval_workflows/configureApproval_workflowsCols.tsx create mode 100644 frontend/src/components/Approvals/CardApprovals.tsx create mode 100644 frontend/src/components/Approvals/ListApprovals.tsx create mode 100644 frontend/src/components/Approvals/TableApprovals.tsx create mode 100644 frontend/src/components/Approvals/configureApprovalsCols.tsx create mode 100644 frontend/src/components/AsideMenu.tsx create mode 100644 frontend/src/components/AsideMenuItem.tsx create mode 100644 frontend/src/components/AsideMenuLayer.tsx create mode 100644 frontend/src/components/AsideMenuList.tsx create mode 100644 frontend/src/components/BaseButton.tsx create mode 100644 frontend/src/components/BaseButtons.tsx create mode 100644 frontend/src/components/BaseDivider.tsx create mode 100644 frontend/src/components/BaseIcon.tsx create mode 100644 frontend/src/components/BigCalendar.tsx create mode 100644 frontend/src/components/CardBox.tsx create mode 100644 frontend/src/components/CardBoxComponentBody.tsx create mode 100644 frontend/src/components/CardBoxComponentEmpty.tsx create mode 100644 frontend/src/components/CardBoxComponentFooter.tsx create mode 100644 frontend/src/components/CardBoxComponentTitle.tsx create mode 100644 frontend/src/components/CardBoxModal.tsx create mode 100644 frontend/src/components/ChartLineSample/config.ts create mode 100644 frontend/src/components/ChartLineSample/index.tsx create mode 100644 frontend/src/components/ClickOutside.tsx create mode 100644 frontend/src/components/Companies/CardCompanies.tsx create mode 100644 frontend/src/components/Companies/ListCompanies.tsx create mode 100644 frontend/src/components/Companies/TableCompanies.tsx create mode 100644 frontend/src/components/Companies/configureCompaniesCols.tsx create mode 100644 frontend/src/components/DataGridMultiSelect.tsx create mode 100644 frontend/src/components/Departments/CardDepartments.tsx create mode 100644 frontend/src/components/Departments/ListDepartments.tsx create mode 100644 frontend/src/components/Departments/TableDepartments.tsx create mode 100644 frontend/src/components/Departments/configureDepartmentsCols.tsx create mode 100644 frontend/src/components/DevModeBadge.tsx create mode 100644 frontend/src/components/Document_links/CardDocument_links.tsx create mode 100644 frontend/src/components/Document_links/ListDocument_links.tsx create mode 100644 frontend/src/components/Document_links/TableDocument_links.tsx create mode 100644 frontend/src/components/Document_links/configureDocument_linksCols.tsx create mode 100644 frontend/src/components/Document_types/CardDocument_types.tsx create mode 100644 frontend/src/components/Document_types/ListDocument_types.tsx create mode 100644 frontend/src/components/Document_types/TableDocument_types.tsx create mode 100644 frontend/src/components/Document_types/configureDocument_typesCols.tsx create mode 100644 frontend/src/components/Documents/CardDocuments.tsx create mode 100644 frontend/src/components/Documents/ListDocuments.tsx create mode 100644 frontend/src/components/Documents/TableDocuments.tsx create mode 100644 frontend/src/components/Documents/configureDocumentsCols.tsx create mode 100644 frontend/src/components/DragDropFilePicker.tsx create mode 100644 frontend/src/components/ErrorBoundary.tsx create mode 100644 frontend/src/components/FooterBar.tsx create mode 100644 frontend/src/components/FormCheckRadio.tsx create mode 100644 frontend/src/components/FormCheckRadioGroup.tsx create mode 100644 frontend/src/components/FormField.tsx create mode 100644 frontend/src/components/FormFilePicker.tsx create mode 100644 frontend/src/components/FormImagePicker.tsx create mode 100644 frontend/src/components/Goods_receipt_lines/CardGoods_receipt_lines.tsx create mode 100644 frontend/src/components/Goods_receipt_lines/ListGoods_receipt_lines.tsx create mode 100644 frontend/src/components/Goods_receipt_lines/TableGoods_receipt_lines.tsx create mode 100644 frontend/src/components/Goods_receipt_lines/configureGoods_receipt_linesCols.tsx create mode 100644 frontend/src/components/Goods_receipts/CardGoods_receipts.tsx create mode 100644 frontend/src/components/Goods_receipts/ListGoods_receipts.tsx create mode 100644 frontend/src/components/Goods_receipts/TableGoods_receipts.tsx create mode 100644 frontend/src/components/Goods_receipts/configureGoods_receiptsCols.tsx create mode 100644 frontend/src/components/IconRounded.tsx create mode 100644 frontend/src/components/ImageField.tsx create mode 100644 frontend/src/components/IntroGuide.tsx create mode 100644 frontend/src/components/Invoice_lines/CardInvoice_lines.tsx create mode 100644 frontend/src/components/Invoice_lines/ListInvoice_lines.tsx create mode 100644 frontend/src/components/Invoice_lines/TableInvoice_lines.tsx create mode 100644 frontend/src/components/Invoice_lines/configureInvoice_linesCols.tsx create mode 100644 frontend/src/components/KanbanBoard/KanbanBoard.tsx create mode 100644 frontend/src/components/KanbanBoard/KanbanCard.tsx create mode 100644 frontend/src/components/KanbanBoard/KanbanColumn.tsx create mode 100644 frontend/src/components/LanguageSwitcher.tsx create mode 100644 frontend/src/components/ListActionsPopover.tsx create mode 100644 frontend/src/components/LoadingSpinner.tsx create mode 100644 frontend/src/components/Logo/index.tsx create mode 100644 frontend/src/components/NavBar.tsx create mode 100644 frontend/src/components/NavBarItem.tsx create mode 100644 frontend/src/components/NavBarItemPlain.tsx create mode 100644 frontend/src/components/NavBarMenuList.tsx create mode 100644 frontend/src/components/NotificationBar.tsx create mode 100644 frontend/src/components/Organizations/CardOrganizations.tsx create mode 100644 frontend/src/components/Organizations/ListOrganizations.tsx create mode 100644 frontend/src/components/Organizations/TableOrganizations.tsx create mode 100644 frontend/src/components/Organizations/configureOrganizationsCols.tsx create mode 100644 frontend/src/components/OverlayLayer.tsx create mode 100644 frontend/src/components/Pagination.tsx create mode 100644 frontend/src/components/PasswordSetOrReset.tsx create mode 100644 frontend/src/components/Payments/CardPayments.tsx create mode 100644 frontend/src/components/Payments/ListPayments.tsx create mode 100644 frontend/src/components/Payments/TablePayments.tsx create mode 100644 frontend/src/components/Payments/configurePaymentsCols.tsx create mode 100644 frontend/src/components/Permissions/CardPermissions.tsx create mode 100644 frontend/src/components/Permissions/ListPermissions.tsx create mode 100644 frontend/src/components/Permissions/TablePermissions.tsx create mode 100644 frontend/src/components/Permissions/configurePermissionsCols.tsx create mode 100644 frontend/src/components/Product_categories/CardProduct_categories.tsx create mode 100644 frontend/src/components/Product_categories/ListProduct_categories.tsx create mode 100644 frontend/src/components/Product_categories/TableProduct_categories.tsx create mode 100644 frontend/src/components/Product_categories/configureProduct_categoriesCols.tsx create mode 100644 frontend/src/components/Products/CardProducts.tsx create mode 100644 frontend/src/components/Products/ListProducts.tsx create mode 100644 frontend/src/components/Products/TableProducts.tsx create mode 100644 frontend/src/components/Products/configureProductsCols.tsx create mode 100644 frontend/src/components/Purchase_order_lines/CardPurchase_order_lines.tsx create mode 100644 frontend/src/components/Purchase_order_lines/ListPurchase_order_lines.tsx create mode 100644 frontend/src/components/Purchase_order_lines/TablePurchase_order_lines.tsx create mode 100644 frontend/src/components/Purchase_order_lines/configurePurchase_order_linesCols.tsx create mode 100644 frontend/src/components/Purchase_orders/CardPurchase_orders.tsx create mode 100644 frontend/src/components/Purchase_orders/ListPurchase_orders.tsx create mode 100644 frontend/src/components/Purchase_orders/TablePurchase_orders.tsx create mode 100644 frontend/src/components/Purchase_orders/configurePurchase_ordersCols.tsx create mode 100644 frontend/src/components/Purchase_requisition_lines/CardPurchase_requisition_lines.tsx create mode 100644 frontend/src/components/Purchase_requisition_lines/ListPurchase_requisition_lines.tsx create mode 100644 frontend/src/components/Purchase_requisition_lines/TablePurchase_requisition_lines.tsx create mode 100644 frontend/src/components/Purchase_requisition_lines/configurePurchase_requisition_linesCols.tsx create mode 100644 frontend/src/components/Purchase_requisitions/CardPurchase_requisitions.tsx create mode 100644 frontend/src/components/Purchase_requisitions/ListPurchase_requisitions.tsx create mode 100644 frontend/src/components/Purchase_requisitions/TablePurchase_requisitions.tsx create mode 100644 frontend/src/components/Purchase_requisitions/configurePurchase_requisitionsCols.tsx create mode 100644 frontend/src/components/RichTextField.tsx create mode 100644 frontend/src/components/Role_permission_mappings/CardRole_permission_mappings.tsx create mode 100644 frontend/src/components/Role_permission_mappings/ListRole_permission_mappings.tsx create mode 100644 frontend/src/components/Role_permission_mappings/TableRole_permission_mappings.tsx create mode 100644 frontend/src/components/Role_permission_mappings/configureRole_permission_mappingsCols.tsx create mode 100644 frontend/src/components/Roles/CardRoles.tsx create mode 100644 frontend/src/components/Roles/ListRoles.tsx create mode 100644 frontend/src/components/Roles/TableRoles.tsx create mode 100644 frontend/src/components/Roles/configureRolesCols.tsx create mode 100644 frontend/src/components/Search.tsx create mode 100644 frontend/src/components/SearchResults.tsx create mode 100644 frontend/src/components/SectionFullScreen.tsx create mode 100644 frontend/src/components/SectionMain.tsx create mode 100644 frontend/src/components/SectionTitle.tsx create mode 100644 frontend/src/components/SectionTitleLineWithButton.tsx create mode 100644 frontend/src/components/SelectField.tsx create mode 100644 frontend/src/components/SelectFieldMany.tsx create mode 100644 frontend/src/components/SmartWidget/SmartWidget.tsx create mode 100644 frontend/src/components/SmartWidget/components/AreaChart.tsx create mode 100644 frontend/src/components/SmartWidget/components/AreaChart/ApexAreaChart.tsx create mode 100644 frontend/src/components/SmartWidget/components/AreaChart/ChartJSAreaChart.tsx create mode 100644 frontend/src/components/SmartWidget/components/BarChart.tsx create mode 100644 frontend/src/components/SmartWidget/components/BarChart/ApexBarChart.tsx create mode 100644 frontend/src/components/SmartWidget/components/BarChart/ChartJSBarChart.tsx create mode 100644 frontend/src/components/SmartWidget/components/FunnelChart.tsx create mode 100644 frontend/src/components/SmartWidget/components/LineChart.tsx create mode 100644 frontend/src/components/SmartWidget/components/LineChart/ApexLineChart.tsx create mode 100644 frontend/src/components/SmartWidget/components/LineChart/ChartJSLineChart.tsx create mode 100644 frontend/src/components/SmartWidget/components/PieChart.tsx create mode 100644 frontend/src/components/SmartWidget/components/PieChart/ApexPieChart.tsx create mode 100644 frontend/src/components/SmartWidget/components/PieChart/ChartJSPieChart.tsx create mode 100644 frontend/src/components/SmartWidget/models/widget.model.ts create mode 100644 frontend/src/components/SmartWidget/widgetHelpers.tsx create mode 100644 frontend/src/components/SwitchField.tsx create mode 100644 frontend/src/components/TableSampleClients.tsx create mode 100644 frontend/src/components/Ui_announcements/CardUi_announcements.tsx create mode 100644 frontend/src/components/Ui_announcements/ListUi_announcements.tsx create mode 100644 frontend/src/components/Ui_announcements/TableUi_announcements.tsx create mode 100644 frontend/src/components/Ui_announcements/configureUi_announcementsCols.tsx create mode 100644 frontend/src/components/Uploaders/FilesUploader.js create mode 100644 frontend/src/components/Uploaders/ImagesUploader.js create mode 100644 frontend/src/components/Uploaders/UploadService.js create mode 100644 frontend/src/components/UserAvatar.tsx create mode 100644 frontend/src/components/UserAvatarCurrentUser.tsx create mode 100644 frontend/src/components/UserCard.tsx create mode 100644 frontend/src/components/User_role_assignments/CardUser_role_assignments.tsx create mode 100644 frontend/src/components/User_role_assignments/ListUser_role_assignments.tsx create mode 100644 frontend/src/components/User_role_assignments/TableUser_role_assignments.tsx create mode 100644 frontend/src/components/User_role_assignments/configureUser_role_assignmentsCols.tsx create mode 100644 frontend/src/components/Users/CardUsers.tsx create mode 100644 frontend/src/components/Users/ListUsers.tsx create mode 100644 frontend/src/components/Users/TableUsers.tsx create mode 100644 frontend/src/components/Users/configureUsersCols.tsx create mode 100644 frontend/src/components/Vendor_invoices/CardVendor_invoices.tsx create mode 100644 frontend/src/components/Vendor_invoices/ListVendor_invoices.tsx create mode 100644 frontend/src/components/Vendor_invoices/TableVendor_invoices.tsx create mode 100644 frontend/src/components/Vendor_invoices/configureVendor_invoicesCols.tsx create mode 100644 frontend/src/components/Vendors/CardVendors.tsx create mode 100644 frontend/src/components/Vendors/ListVendors.tsx create mode 100644 frontend/src/components/Vendors/TableVendors.tsx create mode 100644 frontend/src/components/Vendors/configureVendorsCols.tsx create mode 100644 frontend/src/components/Warehouses/CardWarehouses.tsx create mode 100644 frontend/src/components/Warehouses/ListWarehouses.tsx create mode 100644 frontend/src/components/Warehouses/TableWarehouses.tsx create mode 100644 frontend/src/components/Warehouses/configureWarehousesCols.tsx create mode 100644 frontend/src/components/WidgetCreator/RoleSelect.tsx create mode 100644 frontend/src/components/WidgetCreator/WidgetCreator.tsx create mode 100644 frontend/src/config.ts create mode 100644 frontend/src/css/_app.css create mode 100644 frontend/src/css/_calendar.css create mode 100644 frontend/src/css/_checkbox-radio-switch.css create mode 100644 frontend/src/css/_helper.css create mode 100644 frontend/src/css/_progress.css create mode 100644 frontend/src/css/_rich-text.css create mode 100644 frontend/src/css/_scrollbars.css create mode 100644 frontend/src/css/_select-dropdown.css create mode 100644 frontend/src/css/_table.css create mode 100644 frontend/src/css/_theme.css create mode 100644 frontend/src/css/main.css create mode 100644 frontend/src/css/tailwind/_base.css create mode 100644 frontend/src/css/tailwind/_components.css create mode 100644 frontend/src/css/tailwind/_utilities.css create mode 100644 frontend/src/helpers/dataFormatter.js create mode 100644 frontend/src/helpers/fileSaver.ts create mode 100644 frontend/src/helpers/humanize.ts create mode 100644 frontend/src/helpers/notifyStateHandler.ts create mode 100644 frontend/src/helpers/pexels.ts create mode 100644 frontend/src/helpers/userPermissions.ts create mode 100644 frontend/src/hooks/sampleData.ts create mode 100644 frontend/src/hooks/useDevCompilationStatus.ts create mode 100644 frontend/src/i18n.ts create mode 100644 frontend/src/interfaces/index.ts create mode 100644 frontend/src/layouts/Authenticated.tsx create mode 100644 frontend/src/layouts/Guest.tsx create mode 100644 frontend/src/menuAside.ts create mode 100644 frontend/src/menuNavBar.ts create mode 100644 frontend/src/pages/_app.tsx create mode 100644 frontend/src/pages/activity_logs/[activity_logsId].tsx create mode 100644 frontend/src/pages/activity_logs/activity_logs-edit.tsx create mode 100644 frontend/src/pages/activity_logs/activity_logs-list.tsx create mode 100644 frontend/src/pages/activity_logs/activity_logs-new.tsx create mode 100644 frontend/src/pages/activity_logs/activity_logs-table.tsx create mode 100644 frontend/src/pages/activity_logs/activity_logs-view.tsx create mode 100644 frontend/src/pages/api/hello.js create mode 100644 frontend/src/pages/api/logError.ts create mode 100644 frontend/src/pages/approval_steps/[approval_stepsId].tsx create mode 100644 frontend/src/pages/approval_steps/approval_steps-edit.tsx create mode 100644 frontend/src/pages/approval_steps/approval_steps-list.tsx create mode 100644 frontend/src/pages/approval_steps/approval_steps-new.tsx create mode 100644 frontend/src/pages/approval_steps/approval_steps-table.tsx create mode 100644 frontend/src/pages/approval_steps/approval_steps-view.tsx create mode 100644 frontend/src/pages/approval_workflows/[approval_workflowsId].tsx create mode 100644 frontend/src/pages/approval_workflows/approval_workflows-edit.tsx create mode 100644 frontend/src/pages/approval_workflows/approval_workflows-list.tsx create mode 100644 frontend/src/pages/approval_workflows/approval_workflows-new.tsx create mode 100644 frontend/src/pages/approval_workflows/approval_workflows-table.tsx create mode 100644 frontend/src/pages/approval_workflows/approval_workflows-view.tsx create mode 100644 frontend/src/pages/approvals/[approvalsId].tsx create mode 100644 frontend/src/pages/approvals/approvals-edit.tsx create mode 100644 frontend/src/pages/approvals/approvals-list.tsx create mode 100644 frontend/src/pages/approvals/approvals-new.tsx create mode 100644 frontend/src/pages/approvals/approvals-table.tsx create mode 100644 frontend/src/pages/approvals/approvals-view.tsx create mode 100644 frontend/src/pages/companies/[companiesId].tsx create mode 100644 frontend/src/pages/companies/companies-edit.tsx create mode 100644 frontend/src/pages/companies/companies-list.tsx create mode 100644 frontend/src/pages/companies/companies-new.tsx create mode 100644 frontend/src/pages/companies/companies-table.tsx create mode 100644 frontend/src/pages/companies/companies-view.tsx create mode 100644 frontend/src/pages/dashboard.tsx create mode 100644 frontend/src/pages/departments/[departmentsId].tsx create mode 100644 frontend/src/pages/departments/departments-edit.tsx create mode 100644 frontend/src/pages/departments/departments-list.tsx create mode 100644 frontend/src/pages/departments/departments-new.tsx create mode 100644 frontend/src/pages/departments/departments-table.tsx create mode 100644 frontend/src/pages/departments/departments-view.tsx create mode 100644 frontend/src/pages/document_links/[document_linksId].tsx create mode 100644 frontend/src/pages/document_links/document_links-edit.tsx create mode 100644 frontend/src/pages/document_links/document_links-list.tsx create mode 100644 frontend/src/pages/document_links/document_links-new.tsx create mode 100644 frontend/src/pages/document_links/document_links-table.tsx create mode 100644 frontend/src/pages/document_links/document_links-view.tsx create mode 100644 frontend/src/pages/document_types/[document_typesId].tsx create mode 100644 frontend/src/pages/document_types/document_types-edit.tsx create mode 100644 frontend/src/pages/document_types/document_types-list.tsx create mode 100644 frontend/src/pages/document_types/document_types-new.tsx create mode 100644 frontend/src/pages/document_types/document_types-table.tsx create mode 100644 frontend/src/pages/document_types/document_types-view.tsx create mode 100644 frontend/src/pages/documents/[documentsId].tsx create mode 100644 frontend/src/pages/documents/documents-edit.tsx create mode 100644 frontend/src/pages/documents/documents-list.tsx create mode 100644 frontend/src/pages/documents/documents-new.tsx create mode 100644 frontend/src/pages/documents/documents-table.tsx create mode 100644 frontend/src/pages/documents/documents-view.tsx create mode 100644 frontend/src/pages/error.tsx create mode 100644 frontend/src/pages/forgot.tsx create mode 100644 frontend/src/pages/forms.tsx create mode 100644 frontend/src/pages/goods_receipt_lines/[goods_receipt_linesId].tsx create mode 100644 frontend/src/pages/goods_receipt_lines/goods_receipt_lines-edit.tsx create mode 100644 frontend/src/pages/goods_receipt_lines/goods_receipt_lines-list.tsx create mode 100644 frontend/src/pages/goods_receipt_lines/goods_receipt_lines-new.tsx create mode 100644 frontend/src/pages/goods_receipt_lines/goods_receipt_lines-table.tsx create mode 100644 frontend/src/pages/goods_receipt_lines/goods_receipt_lines-view.tsx create mode 100644 frontend/src/pages/goods_receipts/[goods_receiptsId].tsx create mode 100644 frontend/src/pages/goods_receipts/goods_receipts-edit.tsx create mode 100644 frontend/src/pages/goods_receipts/goods_receipts-list.tsx create mode 100644 frontend/src/pages/goods_receipts/goods_receipts-new.tsx create mode 100644 frontend/src/pages/goods_receipts/goods_receipts-table.tsx create mode 100644 frontend/src/pages/goods_receipts/goods_receipts-view.tsx create mode 100644 frontend/src/pages/index.tsx create mode 100644 frontend/src/pages/invoice_lines/[invoice_linesId].tsx create mode 100644 frontend/src/pages/invoice_lines/invoice_lines-edit.tsx create mode 100644 frontend/src/pages/invoice_lines/invoice_lines-list.tsx create mode 100644 frontend/src/pages/invoice_lines/invoice_lines-new.tsx create mode 100644 frontend/src/pages/invoice_lines/invoice_lines-table.tsx create mode 100644 frontend/src/pages/invoice_lines/invoice_lines-view.tsx create mode 100644 frontend/src/pages/login.tsx create mode 100644 frontend/src/pages/organizations/[organizationsId].tsx create mode 100644 frontend/src/pages/organizations/organizations-edit.tsx create mode 100644 frontend/src/pages/organizations/organizations-list.tsx create mode 100644 frontend/src/pages/organizations/organizations-new.tsx create mode 100644 frontend/src/pages/organizations/organizations-table.tsx create mode 100644 frontend/src/pages/organizations/organizations-view.tsx create mode 100644 frontend/src/pages/password-reset.tsx create mode 100644 frontend/src/pages/payments/[paymentsId].tsx create mode 100644 frontend/src/pages/payments/payments-edit.tsx create mode 100644 frontend/src/pages/payments/payments-list.tsx create mode 100644 frontend/src/pages/payments/payments-new.tsx create mode 100644 frontend/src/pages/payments/payments-table.tsx create mode 100644 frontend/src/pages/payments/payments-view.tsx create mode 100644 frontend/src/pages/permissions/[permissionsId].tsx create mode 100644 frontend/src/pages/permissions/permissions-edit.tsx create mode 100644 frontend/src/pages/permissions/permissions-list.tsx create mode 100644 frontend/src/pages/permissions/permissions-new.tsx create mode 100644 frontend/src/pages/permissions/permissions-table.tsx create mode 100644 frontend/src/pages/permissions/permissions-view.tsx create mode 100644 frontend/src/pages/privacy-policy.tsx create mode 100644 frontend/src/pages/product_categories/[product_categoriesId].tsx create mode 100644 frontend/src/pages/product_categories/product_categories-edit.tsx create mode 100644 frontend/src/pages/product_categories/product_categories-list.tsx create mode 100644 frontend/src/pages/product_categories/product_categories-new.tsx create mode 100644 frontend/src/pages/product_categories/product_categories-table.tsx create mode 100644 frontend/src/pages/product_categories/product_categories-view.tsx create mode 100644 frontend/src/pages/products/[productsId].tsx create mode 100644 frontend/src/pages/products/products-edit.tsx create mode 100644 frontend/src/pages/products/products-list.tsx create mode 100644 frontend/src/pages/products/products-new.tsx create mode 100644 frontend/src/pages/products/products-table.tsx create mode 100644 frontend/src/pages/products/products-view.tsx create mode 100644 frontend/src/pages/profile.tsx create mode 100644 frontend/src/pages/purchase_order_lines/[purchase_order_linesId].tsx create mode 100644 frontend/src/pages/purchase_order_lines/purchase_order_lines-edit.tsx create mode 100644 frontend/src/pages/purchase_order_lines/purchase_order_lines-list.tsx create mode 100644 frontend/src/pages/purchase_order_lines/purchase_order_lines-new.tsx create mode 100644 frontend/src/pages/purchase_order_lines/purchase_order_lines-table.tsx create mode 100644 frontend/src/pages/purchase_order_lines/purchase_order_lines-view.tsx create mode 100644 frontend/src/pages/purchase_orders/[purchase_ordersId].tsx create mode 100644 frontend/src/pages/purchase_orders/purchase_orders-edit.tsx create mode 100644 frontend/src/pages/purchase_orders/purchase_orders-list.tsx create mode 100644 frontend/src/pages/purchase_orders/purchase_orders-new.tsx create mode 100644 frontend/src/pages/purchase_orders/purchase_orders-table.tsx create mode 100644 frontend/src/pages/purchase_orders/purchase_orders-view.tsx create mode 100644 frontend/src/pages/purchase_requisition_lines/[purchase_requisition_linesId].tsx create mode 100644 frontend/src/pages/purchase_requisition_lines/purchase_requisition_lines-edit.tsx create mode 100644 frontend/src/pages/purchase_requisition_lines/purchase_requisition_lines-list.tsx create mode 100644 frontend/src/pages/purchase_requisition_lines/purchase_requisition_lines-new.tsx create mode 100644 frontend/src/pages/purchase_requisition_lines/purchase_requisition_lines-table.tsx create mode 100644 frontend/src/pages/purchase_requisition_lines/purchase_requisition_lines-view.tsx create mode 100644 frontend/src/pages/purchase_requisitions/[purchase_requisitionsId].tsx create mode 100644 frontend/src/pages/purchase_requisitions/purchase_requisitions-edit.tsx create mode 100644 frontend/src/pages/purchase_requisitions/purchase_requisitions-list.tsx create mode 100644 frontend/src/pages/purchase_requisitions/purchase_requisitions-new.tsx create mode 100644 frontend/src/pages/purchase_requisitions/purchase_requisitions-table.tsx create mode 100644 frontend/src/pages/purchase_requisitions/purchase_requisitions-view.tsx create mode 100644 frontend/src/pages/register.tsx create mode 100644 frontend/src/pages/role_permission_mappings/[role_permission_mappingsId].tsx create mode 100644 frontend/src/pages/role_permission_mappings/role_permission_mappings-edit.tsx create mode 100644 frontend/src/pages/role_permission_mappings/role_permission_mappings-list.tsx create mode 100644 frontend/src/pages/role_permission_mappings/role_permission_mappings-new.tsx create mode 100644 frontend/src/pages/role_permission_mappings/role_permission_mappings-table.tsx create mode 100644 frontend/src/pages/role_permission_mappings/role_permission_mappings-view.tsx create mode 100644 frontend/src/pages/roles/[rolesId].tsx create mode 100644 frontend/src/pages/roles/roles-edit.tsx create mode 100644 frontend/src/pages/roles/roles-list.tsx create mode 100644 frontend/src/pages/roles/roles-new.tsx create mode 100644 frontend/src/pages/roles/roles-table.tsx create mode 100644 frontend/src/pages/roles/roles-view.tsx create mode 100644 frontend/src/pages/search.tsx create mode 100644 frontend/src/pages/tables.tsx create mode 100644 frontend/src/pages/terms-of-use.tsx create mode 100644 frontend/src/pages/ui_announcements/[ui_announcementsId].tsx create mode 100644 frontend/src/pages/ui_announcements/ui_announcements-edit.tsx create mode 100644 frontend/src/pages/ui_announcements/ui_announcements-list.tsx create mode 100644 frontend/src/pages/ui_announcements/ui_announcements-new.tsx create mode 100644 frontend/src/pages/ui_announcements/ui_announcements-table.tsx create mode 100644 frontend/src/pages/ui_announcements/ui_announcements-view.tsx create mode 100644 frontend/src/pages/user_role_assignments/[user_role_assignmentsId].tsx create mode 100644 frontend/src/pages/user_role_assignments/user_role_assignments-edit.tsx create mode 100644 frontend/src/pages/user_role_assignments/user_role_assignments-list.tsx create mode 100644 frontend/src/pages/user_role_assignments/user_role_assignments-new.tsx create mode 100644 frontend/src/pages/user_role_assignments/user_role_assignments-table.tsx create mode 100644 frontend/src/pages/user_role_assignments/user_role_assignments-view.tsx create mode 100644 frontend/src/pages/users/[usersId].tsx create mode 100644 frontend/src/pages/users/users-edit.tsx create mode 100644 frontend/src/pages/users/users-list.tsx create mode 100644 frontend/src/pages/users/users-new.tsx create mode 100644 frontend/src/pages/users/users-table.tsx create mode 100644 frontend/src/pages/users/users-view.tsx create mode 100644 frontend/src/pages/vendor_invoices/[vendor_invoicesId].tsx create mode 100644 frontend/src/pages/vendor_invoices/vendor_invoices-edit.tsx create mode 100644 frontend/src/pages/vendor_invoices/vendor_invoices-list.tsx create mode 100644 frontend/src/pages/vendor_invoices/vendor_invoices-new.tsx create mode 100644 frontend/src/pages/vendor_invoices/vendor_invoices-table.tsx create mode 100644 frontend/src/pages/vendor_invoices/vendor_invoices-view.tsx create mode 100644 frontend/src/pages/vendors/[vendorsId].tsx create mode 100644 frontend/src/pages/vendors/vendors-edit.tsx create mode 100644 frontend/src/pages/vendors/vendors-list.tsx create mode 100644 frontend/src/pages/vendors/vendors-new.tsx create mode 100644 frontend/src/pages/vendors/vendors-table.tsx create mode 100644 frontend/src/pages/vendors/vendors-view.tsx create mode 100644 frontend/src/pages/verify-email.tsx create mode 100644 frontend/src/pages/warehouses/[warehousesId].tsx create mode 100644 frontend/src/pages/warehouses/warehouses-edit.tsx create mode 100644 frontend/src/pages/warehouses/warehouses-list.tsx create mode 100644 frontend/src/pages/warehouses/warehouses-new.tsx create mode 100644 frontend/src/pages/warehouses/warehouses-table.tsx create mode 100644 frontend/src/pages/warehouses/warehouses-view.tsx create mode 100644 frontend/src/stores/activity_logs/activity_logsSlice.ts create mode 100644 frontend/src/stores/approval_steps/approval_stepsSlice.ts create mode 100644 frontend/src/stores/approval_workflows/approval_workflowsSlice.ts create mode 100644 frontend/src/stores/approvals/approvalsSlice.ts create mode 100644 frontend/src/stores/authSlice.ts create mode 100644 frontend/src/stores/companies/companiesSlice.ts create mode 100644 frontend/src/stores/departments/departmentsSlice.ts create mode 100644 frontend/src/stores/document_links/document_linksSlice.ts create mode 100644 frontend/src/stores/document_types/document_typesSlice.ts create mode 100644 frontend/src/stores/documents/documentsSlice.ts create mode 100644 frontend/src/stores/goods_receipt_lines/goods_receipt_linesSlice.ts create mode 100644 frontend/src/stores/goods_receipts/goods_receiptsSlice.ts create mode 100644 frontend/src/stores/hooks.ts create mode 100644 frontend/src/stores/introSteps.ts create mode 100644 frontend/src/stores/invoice_lines/invoice_linesSlice.ts create mode 100644 frontend/src/stores/mainSlice.ts create mode 100644 frontend/src/stores/openAiSlice.ts create mode 100644 frontend/src/stores/organizations/organizationsSlice.ts create mode 100644 frontend/src/stores/payments/paymentsSlice.ts create mode 100644 frontend/src/stores/permissions/permissionsSlice.ts create mode 100644 frontend/src/stores/product_categories/product_categoriesSlice.ts create mode 100644 frontend/src/stores/products/productsSlice.ts create mode 100644 frontend/src/stores/purchase_order_lines/purchase_order_linesSlice.ts create mode 100644 frontend/src/stores/purchase_orders/purchase_ordersSlice.ts create mode 100644 frontend/src/stores/purchase_requisition_lines/purchase_requisition_linesSlice.ts create mode 100644 frontend/src/stores/purchase_requisitions/purchase_requisitionsSlice.ts create mode 100644 frontend/src/stores/role_permission_mappings/role_permission_mappingsSlice.ts create mode 100644 frontend/src/stores/roles/rolesSlice.ts create mode 100644 frontend/src/stores/store.ts create mode 100644 frontend/src/stores/styleSlice.ts create mode 100644 frontend/src/stores/ui_announcements/ui_announcementsSlice.ts create mode 100644 frontend/src/stores/user_role_assignments/user_role_assignmentsSlice.ts create mode 100644 frontend/src/stores/users/usersSlice.ts create mode 100644 frontend/src/stores/usersSlice.ts create mode 100644 frontend/src/stores/vendor_invoices/vendor_invoicesSlice.ts create mode 100644 frontend/src/stores/vendors/vendorsSlice.ts create mode 100644 frontend/src/stores/warehouses/warehousesSlice.ts create mode 100644 frontend/src/styles.ts create mode 100644 frontend/tailwind.config.js create mode 100644 frontend/tsconfig.json create mode 100644 frontend/yarn.lock create mode 100644 nginx.conf create mode 100644 package.json diff --git a/.cursorrules b/.cursorrules new file mode 100644 index 0000000..496b86f --- /dev/null +++ b/.cursorrules @@ -0,0 +1,305 @@ +# Cursor Rules - Group 1: Development Philosophy & Coding Conventions +1. Overall Architecture & Structure: + - Enforce a clear separation of concerns between the backend and the frontend: + - **Backend**: Use Express for routing, Passport for authentication, and Swagger for API documentation. Organize code into modules such as routes, services, and helpers. + - **Example**: + - Routes: `src/routes/auth.js` for authentication routes. + - Services: `src/services/auth.js` for authentication logic. + - Helpers: `src/helpers/wrapAsync.js` for wrapping asynchronous functions. + - **Frontend**: Use Next.js with React and TypeScript. Structure components using functional components, hooks, and layouts. + - **Example**: + - Pages: `pages/index.tsx` for the main page. + - Components: `components/Header.tsx` for the header component. + - Layouts: `layouts/MainLayout.tsx` for common page layouts. + - Ensure that backend modules and frontend components are organized for reusability and maintainability: + - **Backend**: Separate business logic into services and use middleware for common tasks. + - **Frontend**: Use reusable components and hooks to manage state and lifecycle. + +2. Coding Style & Formatting: + - For the backend (JavaScript): + • Use ES6+ features (const/let, arrow functions) consistently. + • Follow Prettier and ESLint configurations (e.g., consistent 2-space indentation, semicolons, and single quotes). + • Maintain clear asynchronous patterns with helper wrappers (e.g., wrapAsync). + - **Example from auth.js**: + ```javascript + router.post('/signin/local', wrapAsync(async (req, res) => { + const payload = await AuthService.signin(req.body.email, req.body.password, req); + res.status(200).send(payload); + })); + ``` + • Document API endpoints with inline Swagger comments to ensure API clarity and consistency. + - **Example**: + ```javascript + /** + * @swagger + * /api/auth/signin: + * post: + * summary: Sign in a user + * responses: + * 200: + * description: Successful login + */ + ``` + - For the frontend (TypeScript/React): + • Use functional components with strict typing and separation of concerns. + - **Example**: + ```typescript + const Button: React.FC<{ onClick: () => void }> = ({ onClick }) => ( + + ); + ``` + • Follow naming conventions: PascalCase for components and types/interfaces, camelCase for variables, hooks, and function names. + - **Example**: + ```typescript + const useCustomHook = () => { + const [state, setState] = useState(false); + return [state, setState]; + }; + ``` + • Utilize hooks (useEffect, useState) to manage state and lifecycle in a clear and concise manner. + - **Example**: + ```typescript + useEffect(() => { + console.log('Component mounted'); + }, []); + ``` + +3. Code Quality & Best Practices: + - Ensure code modularity by splitting complex logic into smaller, testable units. + - **Example**: In `auth.js`, routes are separated from business logic, which is handled in `AuthService`. + - Write self-documenting code and add comments where the logic is non-trivial. + - **Example**: Use descriptive function and variable names in `auth.js`, and add comments for complex asynchronous operations. + - Embrace declarative programming and adhere to SOLID principles. + - **Example**: In service functions, ensure each function has a single responsibility and dependencies are injected rather than hardcoded. + +4. Consistency & Tools Integration: + - Leverage existing tools like Prettier and ESLint to automatically enforce style and formatting rules. + - **Example**: Use `.prettierrc` and `.eslintrc.cjs` for configuration in your project. + - Use TypeScript in the frontend to ensure type safety and catch errors early. + - **Example**: Define interfaces and types in your React components to enforce strict typing. + - Maintain uniformity in API design and error handling strategies. + - **Example**: Consistently use Passport for authentication and a common error handling middleware in `auth.js`. + +## Group 2 – Naming Conventions +1. File Naming and Structure: + • Frontend: + - Page Files: Use lower-case filenames (e.g., index.tsx) as prescribed by Next.js conventions. + - **Example**: `pages/index.tsx`, `pages/about.tsx` + - Component Files: Use PascalCase for React component files (e.g., WebSiteHeader.tsx, NavBar.tsx). + - **Example**: `components/Header.tsx`, `components/Footer.tsx` + - Directories: Use clear, descriptive names (e.g., 'pages', 'components', 'WebPageComponents'). + - **Example**: `src/pages`, `src/components` + • Backend: + - Use lower-case filenames for modules (e.g., index.js, auth.js, projects.js). + - **Example**: `routes/auth.js`, `services/user.js` + - When needed, use hyphenation for clarity, but maintain consistency. + - **Example**: `helpers/wrap-async.js` + +2. Component and Module Naming: + • Frontend: + - React Components: Define components in PascalCase. + - TypeScript Interfaces/Types: Use PascalCase (e.g., WebSiteHeaderProps). + • Backend: + - Classes (if any) and constructors should be in PascalCase; most helper functions and modules use camelCase. + +3. Variable, Function, and Hook Naming: + • Use camelCase for variables and function names in both frontend and backend. + - **Example**: + ```javascript + const userName = 'John Doe'; + function handleLogin() { ... } + ``` + • Custom Hooks: Prefix with 'use' (e.g., useAuth, useForm). + - **Example**: + ```typescript + const useAuth = () => { + const [isAuthenticated, setIsAuthenticated] = useState(false); + return { isAuthenticated, setIsAuthenticated }; + }; + ``` + +4. Consistency and Readability: + • Maintain uniform naming across the project to ensure clarity and ease of maintenance. + - **Example**: Use consistent naming conventions for variables, functions, and components, such as camelCase for variables and functions, and PascalCase for components. + - **Example**: In `auth.js`, ensure that all function names clearly describe their purpose, such as `handleLogin` or `validateUserInput`. + +## Group 3 – Frontend & React Best Practices +1. Use of Functional Components & TypeScript: + • Build all components as functional components. + - **Example**: + ```typescript + const Header: React.FC = () => { + return
Header Content
; + }; + ``` + • Leverage TypeScript for static type checking and enforce strict prop and state types. + - **Example**: + ```typescript + interface ButtonProps { + onClick: () => void; + } + const Button: React.FC = ({ onClick }) => ( + + ); + ``` + +2. Effective Use of React Hooks: + • Utilize useState and useEffect appropriately with proper dependency arrays. + - **Example**: + ```typescript + const [count, setCount] = useState(0); + useEffect(() => { + console.log('Component mounted'); + }, []); + ``` + • Create custom hooks to encapsulate shared logic (e.g., useAppSelector). + - **Example**: + ```typescript + const useAuth = () => { + const [isAuthenticated, setIsAuthenticated] = useState(false); + return { isAuthenticated, setIsAuthenticated }; + }; + ``` + +3. Component Composition & Separation of Concerns: + • Separate presentational (stateless) components from container components managing logic. + - **Example**: Use `LayoutGuest` to encapsulate common page structures. + +4. Code Quality & Readability: + • Maintain consistent formatting and adhere to Prettier and ESLint rules. + • Use descriptive names for variables, functions, and components. + • Document non-trivial logic with inline comments and consider implementing error boundaries where needed. + • New code must adhere to these conventions to avoid ambiguity. + • Use descriptive names that reflect the purpose and domain, avoiding abbreviations unless standard in the project. + +## Group 4 – Backend & API Guidelines +1. API Endpoint Design & Documentation: + • Follow RESTful naming conventions; all route handlers should be named clearly and consistently. + - **Example**: Use verbs like `GET`, `POST`, `PUT`, `DELETE` to define actions, e.g., `GET /api/auth/me` to retrieve user info. + • Document endpoints with Swagger annotations to provide descriptions, expected request bodies, and response codes. + - **Example**: + ```javascript + /** + * @swagger + * /api/auth/signin: + * post: + * summary: Sign in a user + * requestBody: + * description: User credentials + * content: + * application/json: + * schema: + * $ref: "#/components/schemas/Auth" + * responses: + * 200: + * description: Successful login + * 400: + * description: Invalid username/password supplied + */ + ``` + • Examples (for Auth endpoints): + - POST /api/auth/signin/local + • Description: Logs the user into the system. + • Request Body (application/json): + { "email": "admin@flatlogic.com", "password": "password" } + • Responses: + - 200: Successful login (returns token and user data). + - 400: Invalid username/password supplied. + - GET /api/auth/me + • Description: Retrieves current authorized user information. + • Secured via Passport JWT; uses req.currentUser. + • Responses: + - 200: Returns current user info. + - 400: Invalid credentials or missing user data. + - POST /api/auth/signup + • Description: Registers a new user. + • Request Body (application/json): + { "email": "admin@flatlogic.com", "password": "password" } + • Responses: + - 200: New user signed up successfully. + - 400: Invalid input supplied. + - 500: Server error. + +## Group 5 – Testing, Quality Assurance & Error Handling +1. Testing Guidelines: + • Write unit tests for critical backend and frontend components using frameworks such as Jest, React Testing Library, and Mocha/Chai. + - **Example**: + ```javascript + test('should return user data', async () => { + const user = await getUserData(); + expect(user).toHaveProperty('email'); + }); + ``` + • Practice test-driven development and maintain high test coverage. + • Regularly update tests following changes in business logic. + +2. Quality Assurance: + • Enforce code quality with ESLint, Prettier, and static analysis tools. + • Integrate continuous testing workflows (CI/CD) to catch issues early. + - **Example**: Use GitHub Actions for automated testing and deployment. + • Ensure documentation is kept up-to-date with the implemented code. + +3. Error Handling: + • Back-end: + - Wrap asynchronous route handlers with a helper (e.g., wrapAsync) to capture errors. + - **Example**: + ```javascript + router.post('/signin', wrapAsync(async (req, res) => { + const user = await AuthService.signin(req.body); + res.send(user); + })); + ``` + - Use centralized error handling middleware (e.g., commonErrorHandler) for uniform error responses. + • Front-end: + - Implement error boundaries in React to gracefully handle runtime errors. + - Display user-friendly error messages and log errors for further analysis. + +2. Authentication & Security: + • Protect endpoints by using Passport.js with JWT (e.g., passport.authenticate('jwt', { session: false })). + - **Example**: + ```javascript + router.get('/profile', passport.authenticate('jwt', { session: false }), (req, res) => { + res.send(req.user); + }); + ``` + • Ensure that secure routes check for existence of req.currentUser. If absent, return a ForbiddenError. + +3. Consistent Error Handling & Middleware Usage: + • Wrap asynchronous route handlers with helpers like wrapAsync for error propagation. + • Use centralized error handling middleware (e.g., commonErrorHandler) to capture and format errors uniformly. + +4. Modular Code Organization: + • Organize backend code into separate files for routes, services, and database access (e.g., auth.js, projects.js, tasks.js). + • Use descriptive, lowercase filenames for modules and routes. + +5. Endpoint Security Best Practices: + • Validate input data and sanitize requests where necessary. + • Restrict sensitive operations to authenticated users with proper role-based permissions. + + +──────────────────────────────────────── +Group 6 – Accessibility, UI, and Styling Guidelines (Updated) +──────────────────────────────────────── +1. Sidebar Styling: + • The sidebar is implemented in the authenticated layout via the AsideMenu component, with the actual element defined in AsideMenuLayer (located at frontend/src/components/AsideMenuLayer.tsx) as an