From cbd5ae0344bc0a3fadaf8f90e095328129814ffe Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Fri, 25 Jul 2025 06:19:49 +0000 Subject: [PATCH] Test v1 --- .gitignore | 5 + app-shell/src/_schema.json | 7 +- backend/src/db/api/companies.js | 100 +++++++++++++++++- backend/src/db/migrations/1753424341635.js | 54 ++++++++++ backend/src/db/migrations/1753424347349.js | 54 ++++++++++ backend/src/db/migrations/1753424353903.js | 54 ++++++++++ backend/src/db/migrations/1753424357878.js | 54 ++++++++++ backend/src/db/migrations/1753424362035.js | 38 +++++++ backend/src/db/models/companies.js | 20 ++++ backend/src/routes/companies.js | 15 ++- backend/src/services/search.js | 12 +++ frontend/json/runtimeError.json | 1 + .../components/Companies/CardCompanies.tsx | 47 +++++++- .../components/Companies/ListCompanies.tsx | 25 +++++ .../Companies/configureCompaniesCols.tsx | 65 ++++++++++++ frontend/src/helpers/dataFormatter.js | 8 +- .../src/pages/buildings/[buildingsId].tsx | 2 +- .../src/pages/buildings/buildings-edit.tsx | 2 +- .../src/pages/buildings/buildings-view.tsx | 2 +- .../src/pages/companies/[companiesId].tsx | 44 ++++++++ .../src/pages/companies/companies-edit.tsx | 44 ++++++++ .../src/pages/companies/companies-list.tsx | 2 +- .../src/pages/companies/companies-new.tsx | 44 ++++++++ .../src/pages/companies/companies-table.tsx | 2 +- .../src/pages/companies/companies-view.tsx | 20 ++++ 25 files changed, 702 insertions(+), 19 deletions(-) create mode 100644 backend/src/db/migrations/1753424341635.js create mode 100644 backend/src/db/migrations/1753424347349.js create mode 100644 backend/src/db/migrations/1753424353903.js create mode 100644 backend/src/db/migrations/1753424357878.js create mode 100644 backend/src/db/migrations/1753424362035.js create mode 100644 frontend/json/runtimeError.json diff --git a/.gitignore b/.gitignore index e427ff3..d0eb167 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,8 @@ node_modules/ */node_modules/ */build/ + +**/node_modules/ +**/build/ +.DS_Store +.env \ No newline at end of file diff --git a/app-shell/src/_schema.json b/app-shell/src/_schema.json index a4b7db6..5b20919 100644 --- a/app-shell/src/_schema.json +++ b/app-shell/src/_schema.json @@ -1,5 +1,4 @@ - - { - "Initial version": "{\"iv\":\"4OivLCZ8ayxE32jl\",\"encryptedData\":\"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\"}" -} + "Initial version": "{\"iv\":\"4OivLCZ8ayxE32jl\",\"encryptedData\":\"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\"}", + "Test v1": "{\"iv\":\"O6zXNTNw8wMK2IrV\",\"encryptedData\":\"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\"}" +} \ No newline at end of file diff --git a/backend/src/db/api/companies.js b/backend/src/db/api/companies.js index 6a4ece1..a117314 100644 --- a/backend/src/db/api/companies.js +++ b/backend/src/db/api/companies.js @@ -16,6 +16,26 @@ module.exports = class CompaniesDBApi { { id: data.id || undefined, + name: data.name + || + null + , + + address: data.address + || + null + , + + email: data.email + || + null + , + + phonenumber: data.phonenumber + || + null + , + importHash: data.importHash || null, createdById: currentUser.id, updatedById: currentUser.id, @@ -34,6 +54,26 @@ module.exports = class CompaniesDBApi { const companiesData = data.map((item, index) => ({ id: item.id || undefined, + name: item.name + || + null + , + + address: item.address + || + null + , + + email: item.email + || + null + , + + phonenumber: item.phonenumber + || + null + , + importHash: item.importHash || null, createdById: currentUser.id, updatedById: currentUser.id, @@ -54,6 +94,14 @@ module.exports = class CompaniesDBApi { const updatePayload = {}; + if (data.name !== undefined) updatePayload.name = data.name; + + if (data.address !== undefined) updatePayload.address = data.address; + + if (data.email !== undefined) updatePayload.email = data.email; + + if (data.phonenumber !== undefined) updatePayload.phonenumber = data.phonenumber; + updatePayload.updatedById = currentUser.id; await companies.update(updatePayload, {transaction}); @@ -149,6 +197,50 @@ module.exports = class CompaniesDBApi { }; } + if (filter.name) { + where = { + ...where, + [Op.and]: Utils.ilike( + 'companies', + 'name', + filter.name, + ), + }; + } + + if (filter.address) { + where = { + ...where, + [Op.and]: Utils.ilike( + 'companies', + 'address', + filter.address, + ), + }; + } + + if (filter.email) { + where = { + ...where, + [Op.and]: Utils.ilike( + 'companies', + 'email', + filter.email, + ), + }; + } + + if (filter.phonenumber) { + where = { + ...where, + [Op.and]: Utils.ilike( + 'companies', + 'phonenumber', + filter.phonenumber, + ), + }; + } + if (filter.active !== undefined) { where = { ...where, @@ -219,7 +311,7 @@ module.exports = class CompaniesDBApi { { ['id']: Utils.uuid(query) }, Utils.ilike( 'companies', - 'id', + 'name', query, ), ], @@ -227,16 +319,16 @@ module.exports = class CompaniesDBApi { } const records = await db.companies.findAll({ - attributes: [ 'id', 'id' ], + attributes: [ 'id', 'name' ], where, limit: limit ? Number(limit) : undefined, offset: offset ? Number(offset) : undefined, - orderBy: [['id', 'ASC']], + orderBy: [['name', 'ASC']], }); return records.map((record) => ({ id: record.id, - label: record.id, + label: record.name, })); } diff --git a/backend/src/db/migrations/1753424341635.js b/backend/src/db/migrations/1753424341635.js new file mode 100644 index 0000000..8c5c812 --- /dev/null +++ b/backend/src/db/migrations/1753424341635.js @@ -0,0 +1,54 @@ +module.exports = { + /** + * @param {QueryInterface} queryInterface + * @param {Sequelize} Sequelize + * @returns {Promise} + */ + async up(queryInterface, Sequelize) { + /** + * @type {Transaction} + */ + const transaction = await queryInterface.sequelize.transaction(); + try { + + await queryInterface.addColumn( + 'companies', + 'name', + { + type: Sequelize.DataTypes.TEXT, + + }, + { transaction } + ); + + await transaction.commit(); + } catch (err) { + await transaction.rollback(); + throw err; + } + }, + /** + * @param {QueryInterface} queryInterface + * @param {Sequelize} Sequelize + * @returns {Promise} + */ + async down(queryInterface, Sequelize) { + /** + * @type {Transaction} + */ + const transaction = await queryInterface.sequelize.transaction(); + try { + + await queryInterface.removeColumn( + 'companies', + 'name', + { transaction } + ); + + await transaction.commit(); + } catch (err) { + await transaction.rollback(); + throw err; + } + } +}; diff --git a/backend/src/db/migrations/1753424347349.js b/backend/src/db/migrations/1753424347349.js new file mode 100644 index 0000000..48c86ed --- /dev/null +++ b/backend/src/db/migrations/1753424347349.js @@ -0,0 +1,54 @@ +module.exports = { + /** + * @param {QueryInterface} queryInterface + * @param {Sequelize} Sequelize + * @returns {Promise} + */ + async up(queryInterface, Sequelize) { + /** + * @type {Transaction} + */ + const transaction = await queryInterface.sequelize.transaction(); + try { + + await queryInterface.addColumn( + 'companies', + 'address', + { + type: Sequelize.DataTypes.TEXT, + + }, + { transaction } + ); + + await transaction.commit(); + } catch (err) { + await transaction.rollback(); + throw err; + } + }, + /** + * @param {QueryInterface} queryInterface + * @param {Sequelize} Sequelize + * @returns {Promise} + */ + async down(queryInterface, Sequelize) { + /** + * @type {Transaction} + */ + const transaction = await queryInterface.sequelize.transaction(); + try { + + await queryInterface.removeColumn( + 'companies', + 'address', + { transaction } + ); + + await transaction.commit(); + } catch (err) { + await transaction.rollback(); + throw err; + } + } +}; diff --git a/backend/src/db/migrations/1753424353903.js b/backend/src/db/migrations/1753424353903.js new file mode 100644 index 0000000..51e19a5 --- /dev/null +++ b/backend/src/db/migrations/1753424353903.js @@ -0,0 +1,54 @@ +module.exports = { + /** + * @param {QueryInterface} queryInterface + * @param {Sequelize} Sequelize + * @returns {Promise} + */ + async up(queryInterface, Sequelize) { + /** + * @type {Transaction} + */ + const transaction = await queryInterface.sequelize.transaction(); + try { + + await queryInterface.addColumn( + 'companies', + 'email', + { + type: Sequelize.DataTypes.TEXT, + + }, + { transaction } + ); + + await transaction.commit(); + } catch (err) { + await transaction.rollback(); + throw err; + } + }, + /** + * @param {QueryInterface} queryInterface + * @param {Sequelize} Sequelize + * @returns {Promise} + */ + async down(queryInterface, Sequelize) { + /** + * @type {Transaction} + */ + const transaction = await queryInterface.sequelize.transaction(); + try { + + await queryInterface.removeColumn( + 'companies', + 'email', + { transaction } + ); + + await transaction.commit(); + } catch (err) { + await transaction.rollback(); + throw err; + } + } +}; diff --git a/backend/src/db/migrations/1753424357878.js b/backend/src/db/migrations/1753424357878.js new file mode 100644 index 0000000..21bfcee --- /dev/null +++ b/backend/src/db/migrations/1753424357878.js @@ -0,0 +1,54 @@ +module.exports = { + /** + * @param {QueryInterface} queryInterface + * @param {Sequelize} Sequelize + * @returns {Promise} + */ + async up(queryInterface, Sequelize) { + /** + * @type {Transaction} + */ + const transaction = await queryInterface.sequelize.transaction(); + try { + + await queryInterface.addColumn( + 'companies', + 'phonenumber', + { + type: Sequelize.DataTypes.TEXT, + + }, + { transaction } + ); + + await transaction.commit(); + } catch (err) { + await transaction.rollback(); + throw err; + } + }, + /** + * @param {QueryInterface} queryInterface + * @param {Sequelize} Sequelize + * @returns {Promise} + */ + async down(queryInterface, Sequelize) { + /** + * @type {Transaction} + */ + const transaction = await queryInterface.sequelize.transaction(); + try { + + await queryInterface.removeColumn( + 'companies', + 'phonenumber', + { transaction } + ); + + await transaction.commit(); + } catch (err) { + await transaction.rollback(); + throw err; + } + } +}; diff --git a/backend/src/db/migrations/1753424362035.js b/backend/src/db/migrations/1753424362035.js new file mode 100644 index 0000000..a1c6034 --- /dev/null +++ b/backend/src/db/migrations/1753424362035.js @@ -0,0 +1,38 @@ +module.exports = { + /** + * @param {QueryInterface} queryInterface + * @param {Sequelize} Sequelize + * @returns {Promise} + */ + async up(queryInterface, Sequelize) { + /** + * @type {Transaction} + */ + const transaction = await queryInterface.sequelize.transaction(); + try { + + await transaction.commit(); + } catch (err) { + await transaction.rollback(); + throw err; + } + }, + /** + * @param {QueryInterface} queryInterface + * @param {Sequelize} Sequelize + * @returns {Promise} + */ + async down(queryInterface, Sequelize) { + /** + * @type {Transaction} + */ + const transaction = await queryInterface.sequelize.transaction(); + try { + + await transaction.commit(); + } catch (err) { + await transaction.rollback(); + throw err; + } + } +}; diff --git a/backend/src/db/models/companies.js b/backend/src/db/models/companies.js index fd8d351..15ebed6 100644 --- a/backend/src/db/models/companies.js +++ b/backend/src/db/models/companies.js @@ -14,6 +14,26 @@ module.exports = function(sequelize, DataTypes) { primaryKey: true, }, +name: { + type: DataTypes.TEXT, + + }, + +address: { + type: DataTypes.TEXT, + + }, + +email: { + type: DataTypes.TEXT, + + }, + +phonenumber: { + type: DataTypes.TEXT, + + }, + importHash: { type: DataTypes.STRING(255), allowNull: true, diff --git a/backend/src/routes/companies.js b/backend/src/routes/companies.js index b44d72b..114deaf 100644 --- a/backend/src/routes/companies.js +++ b/backend/src/routes/companies.js @@ -17,6 +17,19 @@ const { parse } = require('json2csv'); * type: object * properties: + * name: + * type: string + * default: name + * address: + * type: string + * default: address + * email: + * type: string + * default: email + * phonenumber: + * type: string + * default: phonenumber + */ /** @@ -272,7 +285,7 @@ router.get('/', wrapAsync(async (req, res) => { req.query, { currentUser } ); if (filetype && filetype === 'csv') { - const fields = ['id', + const fields = ['id','name','address','email','phonenumber', ]; const opts = { fields }; diff --git a/backend/src/services/search.js b/backend/src/services/search.js index 91ec364..80ebf59 100644 --- a/backend/src/services/search.js +++ b/backend/src/services/search.js @@ -71,6 +71,18 @@ module.exports = class SearchService { ], + "companies": [ + + "name", + + "address", + + "email", + + "phonenumber", + + ], + }; const columnsInt = { diff --git a/frontend/json/runtimeError.json b/frontend/json/runtimeError.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/frontend/json/runtimeError.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/frontend/src/components/Companies/CardCompanies.tsx b/frontend/src/components/Companies/CardCompanies.tsx index 9890d3a..5027773 100644 --- a/frontend/src/components/Companies/CardCompanies.tsx +++ b/frontend/src/components/Companies/CardCompanies.tsx @@ -46,7 +46,7 @@ const CardCompanies = ({ }`} > - {item.id} + {item.name}
@@ -61,6 +61,51 @@ const CardCompanies = ({
+
+
Name
+
+
+ { item.name } +
+
+
+ +
+
Address
+
+
+ { item.address } +
+
+
+ +
+
Email
+
+
+ { item.email } +
+
+
+ +
+
Phonenumber
+
+
+ { item.phonenumber } +
+
+
+ +
+
Buildings
+
+
+ { item.buildings } +
+
+
+
))} diff --git a/frontend/src/components/Companies/ListCompanies.tsx b/frontend/src/components/Companies/ListCompanies.tsx index a7522df..cb34e0d 100644 --- a/frontend/src/components/Companies/ListCompanies.tsx +++ b/frontend/src/components/Companies/ListCompanies.tsx @@ -35,6 +35,31 @@ const ListCompanies = ({ companies, loading, onDelete, currentPage, numPages, on } > +
+

Name

+

{ item.name }

+
+ +
+

Address

+

{ item.address }

+
+ +
+

Email

+

{ item.email }

+
+ +
+

Phonenumber

+

{ item.phonenumber }

+
+ +
+

Buildings

+

{ item.buildings }

+
+ item.id) + return val.map((item) => item.name) }, companiesOneListFormatter(val) { if (!val) return '' - return val.id + return val.name }, companiesManyListFormatterEdit(val) { if (!val || !val.length) return [] return val.map((item) => { - return {id: item.id, label: item.id} + return {id: item.id, label: item.name} }); }, companiesOneListFormatterEdit(val) { if (!val) return '' - return {label: val.id, id: val.id} + return {label: val.name, id: val.id} }, } diff --git a/frontend/src/pages/buildings/[buildingsId].tsx b/frontend/src/pages/buildings/[buildingsId].tsx index 474b5e6..f9d6a25 100644 --- a/frontend/src/pages/buildings/[buildingsId].tsx +++ b/frontend/src/pages/buildings/[buildingsId].tsx @@ -114,7 +114,7 @@ const EditBuildings = () => { options={initialValues.company} itemRef={'companies'} - showField={'id'} + showField={'name'} > diff --git a/frontend/src/pages/buildings/buildings-edit.tsx b/frontend/src/pages/buildings/buildings-edit.tsx index c3037f6..4087cb4 100644 --- a/frontend/src/pages/buildings/buildings-edit.tsx +++ b/frontend/src/pages/buildings/buildings-edit.tsx @@ -112,7 +112,7 @@ const EditBuildingsPage = () => { options={initialValues.company} itemRef={'companies'} - showField={'id'} + showField={'name'} > diff --git a/frontend/src/pages/buildings/buildings-view.tsx b/frontend/src/pages/buildings/buildings-view.tsx index ea43b14..df601a3 100644 --- a/frontend/src/pages/buildings/buildings-view.tsx +++ b/frontend/src/pages/buildings/buildings-view.tsx @@ -62,7 +62,7 @@ const BuildingsView = () => {

Company

-

{buildings?.company?.id ?? 'No data'}

+

{buildings?.company?.name ?? 'No data'}

diff --git a/frontend/src/pages/companies/[companiesId].tsx b/frontend/src/pages/companies/[companiesId].tsx index 3d1e04a..cb34b97 100644 --- a/frontend/src/pages/companies/[companiesId].tsx +++ b/frontend/src/pages/companies/[companiesId].tsx @@ -32,6 +32,14 @@ const EditCompanies = () => { const dispatch = useAppDispatch() const initVals = { + 'name': '', + + 'address': '', + + 'email': '', + + 'phonenumber': '', + } const [initialValues, setInitialValues] = useState(initVals) @@ -82,6 +90,42 @@ const EditCompanies = () => { >
+ + + + + + + + + + + + + + + + diff --git a/frontend/src/pages/companies/companies-edit.tsx b/frontend/src/pages/companies/companies-edit.tsx index 679f621..ab24509 100644 --- a/frontend/src/pages/companies/companies-edit.tsx +++ b/frontend/src/pages/companies/companies-edit.tsx @@ -33,6 +33,14 @@ const EditCompaniesPage = () => { const dispatch = useAppDispatch() const initVals = { + 'name': '', + + 'address': '', + + 'email': '', + + 'phonenumber': '', + } const [initialValues, setInitialValues] = useState(initVals) @@ -80,6 +88,42 @@ const EditCompaniesPage = () => { > + + + + + + + + + + + + + + + + diff --git a/frontend/src/pages/companies/companies-list.tsx b/frontend/src/pages/companies/companies-list.tsx index 7f3eca3..cea9bb2 100644 --- a/frontend/src/pages/companies/companies-list.tsx +++ b/frontend/src/pages/companies/companies-list.tsx @@ -22,7 +22,7 @@ const CompaniesTablesPage = () => { const dispatch = useAppDispatch(); - const [filters] = useState([ + const [filters] = useState([{label: 'Name', title: 'name'},{label: 'Address', title: 'address'},{label: 'Email', title: 'email'},{label: 'Phonenumber', title: 'phonenumber'}, ]); const addFilter = () => { diff --git a/frontend/src/pages/companies/companies-new.tsx b/frontend/src/pages/companies/companies-new.tsx index f8d8a60..eb947c7 100644 --- a/frontend/src/pages/companies/companies-new.tsx +++ b/frontend/src/pages/companies/companies-new.tsx @@ -25,6 +25,14 @@ import { useRouter } from 'next/router' const initialValues = { + name: '', + + address: '', + + email: '', + + phonenumber: '', + } const CompaniesNew = () => { @@ -53,6 +61,42 @@ const CompaniesNew = () => { > + + + + + + + + + + + + + + + + diff --git a/frontend/src/pages/companies/companies-table.tsx b/frontend/src/pages/companies/companies-table.tsx index 921b509..029bf88 100644 --- a/frontend/src/pages/companies/companies-table.tsx +++ b/frontend/src/pages/companies/companies-table.tsx @@ -22,7 +22,7 @@ const CompaniesTablesPage = () => { const dispatch = useAppDispatch(); - const [filters] = useState([ + const [filters] = useState([{label: 'Name', title: 'name'},{label: 'Address', title: 'address'},{label: 'Email', title: 'email'},{label: 'Phonenumber', title: 'phonenumber'}, ]); const addFilter = () => { diff --git a/frontend/src/pages/companies/companies-view.tsx b/frontend/src/pages/companies/companies-view.tsx index 270d01d..523c0db 100644 --- a/frontend/src/pages/companies/companies-view.tsx +++ b/frontend/src/pages/companies/companies-view.tsx @@ -49,6 +49,26 @@ const CompaniesView = () => { +
+

Name

+

{companies?.name}

+
+ +
+

Address

+

{companies?.address}

+
+ +
+

Email

+

{companies?.email}

+
+ +
+

Phonenumber

+

{companies?.phonenumber}

+
+ <>

Buildings Company