GEWIS / sudosos-backend

SudoSOS is a Node.js-based Bar and POS system made for study association GEWIS.
https://sudosos.gewis.nl
GNU Affero General Public License v3.0
4 stars 3 forks source link

PDF Generation and Invoicing Rework #148

Closed JustSamuel closed 4 months ago

JustSamuel commented 7 months ago

Adds the ability to generate PDF's for invoices using the PDF-generator. The parameters of these invoices are hashed as to not recompile if nothing changed.

This PR also implements InvoiceUsers which allow defaults to be saved for users when creating an invoice. That is, if a user is of type INVOICE it will use the stored properties, street, postalCode, city and country. If addressee is not provided it will default to the invoiced users' full name.

TODO:

Fixes #13. Fixes #90

Migration plan

Since this PR adds quite a lot of columns to the Invoices table which are not nullable and do not have a default value I suggest the followings.

When migrating we give these columns a temporary placeholder value like "MIGRATION_DEFAULT". After the migration we fill the InvoiceUser table and replace the values in the invoice with those. For the reference we should simply do some manual work.

github-actions[bot] commented 7 months ago

SudoSOS Coverage Report

Commit: 27a3c17 Base: develop@6446057

Type Base This PR
Total Statements Coverage ?  89.16% (?)
Total Branches Coverage ?  83.67% (?)
Total Functions Coverage ?  90.28% (?)
Total Lines Coverage ?  89.05% (?)
Details (changed files)
FileStatementsBranchesFunctionsLines
Details (all files)
FileStatementsBranchesFunctionsLines
/src/index.ts 82.78% 50% 33.33% 83.22%
/src/authentication/token-handler.ts 100% 100% 100% 100%
/src/controller/authentication-controller.ts 86.47% 97.36% 96% 86.3%
/src/controller/authentication-secure-controller.ts 88.88% 100% 100% 88.88%
/src/controller/balance-controller.ts 78.04% 14.28% 100% 78.04%
/src/controller/banner-controller.ts 82.52% 95.45% 100% 82.52%
/src/controller/base-controller.ts 100% 100% 100% 100%
/src/controller/container-controller.ts 86.27% 90.9% 100% 85.71%
/src/controller/debtor-controller.ts 79.59% 63.63% 100% 84.61%
/src/controller/event-controller.ts 82.66% 94.44% 100% 82.66%
/src/controller/event-shift-controller.ts 75.82% 89.47% 100% 75.82%
/src/controller/invoice-controller.ts 87.01% 92.1% 100% 86.84%
/src/controller/payout-request-controller.ts 81.33% 92.85% 100% 81.33%
/src/controller/point-of-sale-controller.ts 82.53% 86.66% 100% 81.96%
/src/controller/product-category-controller.ts 82.45% 100% 100% 82.45%
/src/controller/product-controller.ts 86.48% 92.5% 100% 86.91%
/src/controller/rbac-controller.ts 88.23% 100% 100% 88.23%
/src/controller/root-controller.ts 85.71% 100% 100% 85.71%
/src/controller/simple-file-controller.ts 11.62% 0% 0% 11.62%
/src/controller/stripe-controller.ts 45.83% 0% 50% 45.83%
/src/controller/stripe-webhook-controller.ts 50% 100% 50% 50%
/src/controller/test-controller.ts 33.33% 100% 0% 33.33%
/src/controller/transaction-controller.ts 85.14% 96.96% 100% 84.69%
/src/controller/transfer-controller.ts 83.92% 94.73% 100% 83.33%
/src/controller/user-controller.ts 82.99% 92.45% 100% 83.05%
/src/controller/vat-group-controller.ts 87.8% 100% 100% 87.8%
/src/controller/voucher-group-controller.ts 79.41% 83.33% 100% 79.41%
/src/controller/request/file-request.ts 0% 0% 0% 0%
/src/controller/request/validators/container-request-spec.ts 100% 100% 100% 100%
/src/controller/request/validators/duration-spec.ts 66.66% 50% 50% 64.28%
/src/controller/request/validators/general-validators.ts 88% 75% 75% 84.21%
/src/controller/request/validators/invoice-request-spec.ts 92.72% 81.81% 100% 97.72%
/src/controller/request/validators/point-of-sale-request-spec.ts 95% 75% 100% 94.11%
/src/controller/request/validators/product-request-spec.ts 90.32% 72.72% 100% 90%
/src/controller/request/validators/string-spec.ts 100% 100% 100% 100%
/src/controller/request/validators/update-local-request-spec.ts 100% 100% 100% 100%
/src/controller/request/validators/update-nfc-request-spec.ts 100% 100% 100% 100%
/src/controller/request/validators/update-pin-request-spec.ts 100% 100% 100% 100%
/src/controller/request/validators/user-request-spec.ts 86.95% 66.66% 85.71% 88.88%
/src/controller/request/validators/validation-errors.ts 88.05% 100% 63.63% 100%
/src/controller/response/dinero.ts 0% 0% 0% 0%
/src/database/database.ts 96.66% 50% 33.33% 98.3%
/src/entity/banner.ts 100% 100% 100% 100%
/src/entity/base-entity-without-id.ts 100% 100% 100% 100%
/src/entity/base-entity.ts 100% 100% 100% 100%
/src/entity/vat-group.ts 100% 100% 100% 100%
/src/entity/authenticator/authentication-method.ts 100% 100% 100% 100%
/src/entity/authenticator/ean-authenticator.ts 100% 100% 100% 100%
/src/entity/authenticator/hash-based-authentication-method.ts 100% 100% 100% 100%
/src/entity/authenticator/key-authenticator.ts 100% 100% 100% 100%
/src/entity/authenticator/ldap-authenticator.ts 100% 100% 100% 100%
/src/entity/authenticator/local-authenticator.ts 100% 100% 100% 100%
/src/entity/authenticator/member-authenticator.ts 100% 100% 100% 100%
/src/entity/authenticator/nfc-authenticator.ts 100% 100% 100% 100%
/src/entity/authenticator/pin-authenticator.ts 100% 100% 100% 100%
/src/entity/authenticator/reset-token.ts 100% 100% 100% 100%
/src/entity/container/container-revision.ts 95% 100% 80% 92.85%
/src/entity/container/container.ts 100% 100% 100% 100%
/src/entity/deposit/stripe-deposit-status.ts 100% 100% 100% 100%
/src/entity/deposit/stripe-deposit.ts 100% 100% 100% 100%
/src/entity/event/event-shift-answer.ts 100% 100% 100% 100%
/src/entity/event/event-shift.ts 100% 100% 100% 100%
/src/entity/event/event.ts 100% 100% 100% 100%
/src/entity/file/banner-image.ts 100% 100% 100% 100%
/src/entity/file/base-file.ts 100% 100% 100% 100%
/src/entity/file/invoice-pdf.ts 100% 100% 100% 100%
/src/entity/file/product-image.ts 100% 100% 100% 100%
/src/entity/fine/fine.ts 100% 100% 100% 100%
/src/entity/fine/fineHandoutEvent.ts 100% 100% 100% 100%
/src/entity/fine/userFineGroup.ts 100% 100% 100% 100%
/src/entity/invoices/invoice-entry.ts 100% 100% 100% 100%
/src/entity/invoices/invoice-status.ts 100% 100% 100% 100%
/src/entity/invoices/invoice.ts 100% 100% 100% 100%
/src/entity/point-of-sale/point-of-sale-revision.ts 94.44% 100% 75% 92.3%
/src/entity/point-of-sale/point-of-sale.ts 100% 100% 100% 100%
/src/entity/point-of-sale/product-ordering.ts 100% 100% 100% 100%
/src/entity/product/product-category.ts 100% 100% 100% 100%
/src/entity/product/product-revision.ts 96% 100% 75% 95%
/src/entity/product/product.ts 100% 100% 100% 100%
/src/entity/roles/assigned-role.ts 100% 100% 100% 100%
/src/entity/transactions/balance.ts 100% 100% 100% 100%
/src/entity/transactions/flagged-transaction.ts 100% 100% 100% 100%
/src/entity/transactions/payout-request-status.ts 100% 100% 100% 100%
/src/entity/transactions/payout-request.ts 100% 100% 100% 100%
/src/entity/transactions/sub-transaction-row.ts 100% 100% 100% 100%
/src/entity/transactions/sub-transaction.ts 100% 100% 100% 100%
/src/entity/transactions/transaction.ts 100% 100% 100% 100%
/src/entity/transactions/transfer.ts 100% 100% 100% 100%
/src/entity/transformer/dinero-transformer.ts 100% 83.33% 100% 100%
/src/entity/user/invoice-user.ts 100% 100% 100% 100%
/src/entity/user/local-user.ts 100% 100% 100% 100%
/src/entity/user/user-voucher-group.ts 100% 100% 100% 100%
/src/entity/user/user.ts 97.72% 75% 100% 100%
/src/entity/user/voucher-group.ts 100% 100% 100% 100%
/src/files/initialize.ts 100% 50% 100% 100%
/src/files/response.ts 28.57% 100% 0% 28.57%
/src/files/storage/disk-storage.ts 82.14% 83.33% 60% 82.14%
/src/files/storage/file-storage.ts 100% 100% 100% 100%
/src/files/storage/index.ts 100% 100% 50% 100%
/src/files/storage/locations.ts 100% 100% 100% 100%
/src/gewis/gewis.ts 72.13% 44.44% 38.09% 75.86%
/src/gewis/controller/gewis-authentication-controller.ts 87.03% 70% 100% 87.03%
/src/gewis/database/seed.ts 100% 100% 100% 100%
/src/gewis/entity/gewis-user.ts 100% 100% 100% 100%
/src/helpers/ad.ts 90.9% 100% 100% 90.9%
/src/helpers/bindings.ts 100% 100% 100% 100%
/src/helpers/database.ts 100% 100% 100% 100%
/src/helpers/hash.ts 100% 100% 100% 100%
/src/helpers/ordering.ts 90.9% 83.33% 100% 90%
/src/helpers/pagination.ts 100% 85.71% 100% 100%
/src/helpers/query-filter.ts 100% 100% 100% 100%
/src/helpers/raw-body.ts 50% 100% 0% 50%
/src/helpers/revision-to-response.ts 91.3% 66.66% 88.88% 95.23%
/src/helpers/specification-validation.ts 97.29% 100% 88.88% 96.87%
/src/helpers/timestamps.ts 70% 33.33% 60% 70%
/src/helpers/token-helper.ts 100% 100% 100% 100%
/src/helpers/transaction-mapper.ts 95.89% 100% 88% 95.58%
/src/helpers/validators.ts 94% 90.27% 100% 97.4%
/src/mailer/index.ts 100% 100% 100% 100%
/src/mailer/mailer.ts 100% 100% 100% 100%
/src/mailer/transporter.ts 100% 100% 100% 100%
/src/mailer/templates/forgot-event-planning.ts 76.92% 100% 57.14% 76.92%
/src/mailer/templates/hello-world.ts 100% 100% 100% 100%
/src/mailer/templates/index.ts 100% 100% 100% 100%
/src/mailer/templates/mail-content.ts 100% 100% 100% 100%
/src/mailer/templates/mail-template.ts 100% 100% 100% 100%
/src/mailer/templates/password-reset.ts 36.84% 0% 0% 36.84%
/src/mailer/templates/signature.ts 100% 100% 100% 100%
/src/mailer/templates/user-debt-notification.ts 82.35% 50% 57.14% 82.35%
/src/mailer/templates/user-got-fined.ts 78.57% 100% 57.14% 78.57%
/src/mailer/templates/user-will-get-fined.ts 71.42% 50% 60% 71.42%
/src/mailer/templates/welcome-to-sudosos.ts 82.35% 50% 57.14% 82.35%
/src/mailer/templates/welcome-with-reset.ts 82.35% 50% 57.14% 82.35%
/src/middleware/policy-middleware.ts 81.81% 100% 100% 81.81%
/src/middleware/request-validator-middleware.ts 92.3% 80% 100% 100%
/src/middleware/restriction-middleware.ts 93.75% 92.85% 75% 100%
/src/middleware/token-middleware.ts 100% 100% 100% 100%
/src/rbac/role-manager.ts 95% 87.5% 100% 98.03%
/src/service/ad-service.ts 85.86% 52.94% 90% 89.04%
/src/service/authentication-service.ts 93.1% 83.78% 100% 92.66%
/src/service/balance-service.ts 98.11% 91.04% 100% 97.89%
/src/service/banner-service.ts 95.23% 86.95% 100% 95.12%
/src/service/container-service.ts 99.03% 89.74% 100% 100%
/src/service/debtor-service.ts 97.95% 85.71% 100% 100%
/src/service/event-service.ts 100% 99.06% 100% 100%
/src/service/file-service.ts 97.1% 79.16% 100% 97.05%
/src/service/invoice-pdf-service.ts 98.21% 89.47% 100% 100%
/src/service/invoice-service.ts 94.63% 82.71% 95.45% 96.7%
/src/service/payout-request-service.ts 100% 96.15% 100% 100%
/src/service/point-of-sale-service.ts 95% 76.19% 92.85% 98.18%
/src/service/product-category-service.ts 100% 100% 100% 100%
/src/service/product-service.ts 94.18% 65.11% 95% 95%
/src/service/rbac-service.ts 100% 100% 100% 100%
/src/service/stripe-service.ts 40.98% 25% 56.25% 40.35%
/src/service/transaction-service.ts 96.96% 86.53% 100% 96.68%
/src/service/transfer-service.ts 100% 96.15% 100% 100%
/src/service/user-service.ts 95.45% 74.46% 90% 97.5%
/src/service/vat-group-service.ts 98.64% 76.19% 92.85% 98.43%
/src/service/voucher-group-service.ts 100% 93.1% 100% 100%
/src/start/swagger.ts 82.5% 58.82% 66.66% 82.05%
/src/subscriber/index.ts 100% 100% 100% 100%
/src/subscriber/transaction-subscriber.ts 79.41% 35.71% 66.66% 78.57%
/src/subscriber/transfer-subscriber.ts 100% 100% 100% 100%
JustSamuel commented 7 months ago

Self: make sure to add a todo / issue to fix the parallelism if that turns out to be the issue,

JustSamuel commented 7 months ago

Still not ready; needs a database migration to work.

github-actions[bot] commented 2 months ago

:tada: This PR is included in version 0.1.0 :tada:

The release is available on GitHub release

Your semantic-release bot :package::rocket: