From 39c620d7479a7d6c0a619b5405ab3bda892b19c2 Mon Sep 17 00:00:00 2001 From: Civolilah Date: Sun, 19 Mar 2023 23:04:46 +0100 Subject: [PATCH 1/9] Added condition for checking vendor contact --- src/pages/purchase-orders/edit/components/VendorSelector.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pages/purchase-orders/edit/components/VendorSelector.tsx b/src/pages/purchase-orders/edit/components/VendorSelector.tsx index 08bfd7b1da..4c2f0aa9d6 100644 --- a/src/pages/purchase-orders/edit/components/VendorSelector.tsx +++ b/src/pages/purchase-orders/edit/components/VendorSelector.tsx @@ -45,7 +45,9 @@ export function VendorSelector(props: Props) { (i) => i.vendor_contact_id === id ); - return Boolean(potential); + const contact = vendor?.contacts.find((contact) => contact.id === id); + + return Boolean(potential) || Boolean(contact?.send_email); }; return ( From 1cacc0d832417085fafe6c52e073fd761e06465c Mon Sep 17 00:00:00 2001 From: Civolilah Date: Mon, 20 Mar 2023 17:03:51 +0100 Subject: [PATCH 2/9] Changed logic of resolving bug with vendor contacts --- src/pages/purchase-orders/create/Create.tsx | 30 ++++++++++++++++++- .../edit/components/VendorSelector.tsx | 6 ++-- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/pages/purchase-orders/create/Create.tsx b/src/pages/purchase-orders/create/Create.tsx index 9a922bafd1..68d4092c96 100644 --- a/src/pages/purchase-orders/create/Create.tsx +++ b/src/pages/purchase-orders/create/Create.tsx @@ -11,7 +11,10 @@ import { InvoiceSum } from '$app/common/helpers/invoices/invoice-sum'; import { useReactSettings } from '$app/common/hooks/useReactSettings'; import { useTitle } from '$app/common/hooks/useTitle'; -import { PurchaseOrder } from '$app/common/interfaces/purchase-order'; +import { + Invitation, + PurchaseOrder, +} from '$app/common/interfaces/purchase-order'; import { ValidationBag } from '$app/common/interfaces/validation-bag'; import { Page } from '$app/components/Breadcrumbs'; import { Default } from '$app/components/layouts/Default'; @@ -37,6 +40,8 @@ import { useHandleDeleteLineItem } from '../edit/hooks/useHandleDeleteLineItem'; import { useHandleInvitationChange } from '../edit/hooks/useHandleInvitationChange'; import { useHandleLineItemPropertyChange } from '../edit/hooks/useHandleLineItemPropertyChange'; import { useHandleProductChange } from '../edit/hooks/useHandleProductChange'; +import { blankInvitation } from '$app/common/constants/blank-invitation'; +import { useVendorResolver } from '$app/common/hooks/vendors/useVendorResolver'; export function Create() { const { documentTitle } = useTitle('new_purchase_order'); @@ -44,6 +49,8 @@ export function Create() { const reactSettings = useReactSettings(); + const vendorResolver = useVendorResolver(); + const [searchParams] = useSearchParams(); const pages: Page[] = [ @@ -126,6 +133,27 @@ export function Create() { const onSave = useCreate({ setErrors }); + useEffect(() => { + purchaseOrder && + purchaseOrder.vendor_id && + vendorResolver.find(purchaseOrder.vendor_id).then((vendor) => { + const invitations: Invitation[] = []; + + vendor.contacts.map((contact) => { + if (contact.send_email) { + const invitation = cloneDeep( + blankInvitation + ) as unknown as Invitation; + + invitation.vendor_contact_id = contact.id; + invitations.push(invitation); + } + }); + + handleChange('invitations', invitations); + }); + }, [purchaseOrder?.vendor_id]); + return ( { + console.log(props.resource?.invitations); + const potential = props.resource?.invitations.find( (i) => i.vendor_contact_id === id ); - const contact = vendor?.contacts.find((contact) => contact.id === id); - - return Boolean(potential) || Boolean(contact?.send_email); + return Boolean(potential); }; return ( From 0468389f9731fe790d96be09d03a7d8e4132aef5 Mon Sep 17 00:00:00 2001 From: Civolilah Date: Mon, 20 Mar 2023 17:05:54 +0100 Subject: [PATCH 3/9] Removed unnecessary console log --- src/pages/purchase-orders/edit/components/VendorSelector.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/pages/purchase-orders/edit/components/VendorSelector.tsx b/src/pages/purchase-orders/edit/components/VendorSelector.tsx index 7d31c855f1..08bfd7b1da 100644 --- a/src/pages/purchase-orders/edit/components/VendorSelector.tsx +++ b/src/pages/purchase-orders/edit/components/VendorSelector.tsx @@ -41,8 +41,6 @@ export function VendorSelector(props: Props) { }, [props.resource?.vendor_id]); const isChecked = (id: string) => { - console.log(props.resource?.invitations); - const potential = props.resource?.invitations.find( (i) => i.vendor_contact_id === id ); From eed1eb6c095628967eff1fad1bbd9db4865cb7eb Mon Sep 17 00:00:00 2001 From: Civolilah Date: Mon, 20 Mar 2023 17:31:26 +0100 Subject: [PATCH 4/9] Added report permission --- src/common/hooks/permissions/useHasPermission.ts | 4 +++- src/components/layouts/Default.tsx | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/common/hooks/permissions/useHasPermission.ts b/src/common/hooks/permissions/useHasPermission.ts index 8b4a6116d7..cd929fc301 100644 --- a/src/common/hooks/permissions/useHasPermission.ts +++ b/src/common/hooks/permissions/useHasPermission.ts @@ -37,6 +37,7 @@ type PurchaseOrderPermissions = | 'create_purchase_order' | 'view_purchase_order' | 'edit_purchase_order'; +type ReportPermissions = 'view_reports'; export type Permissions = | AllPermissions @@ -53,7 +54,8 @@ export type Permissions = | ExpensePermissions | RecurringExpensePermissions | BankTransactionsPermissions - | PurchaseOrderPermissions; + | PurchaseOrderPermissions + | ReportPermissions; export function useHasPermission() { const user = useCurrentCompanyUser(); diff --git a/src/components/layouts/Default.tsx b/src/components/layouts/Default.tsx index 35db7e85e1..e0ec6a08ef 100644 --- a/src/components/layouts/Default.tsx +++ b/src/components/layouts/Default.tsx @@ -315,7 +315,7 @@ export function Default(props: Props) { href: '/reports', icon: PieChart, current: location.pathname.startsWith('/reports'), - visible: companyUser?.is_admin || companyUser?.is_owner || false, + visible: hasPermission('view_reports'), }, { name: t('transactions'), From 2f05c15edf6c41fe78ce89aa152724483e338a7d Mon Sep 17 00:00:00 2001 From: Civolilah Date: Tue, 21 Mar 2023 01:04:25 +0100 Subject: [PATCH 5/9] Resolved bug with bank transaction bulk actions --- src/pages/transactions/index/Transactions.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/transactions/index/Transactions.tsx b/src/pages/transactions/index/Transactions.tsx index 491b3ba69c..e3a9b9986a 100644 --- a/src/pages/transactions/index/Transactions.tsx +++ b/src/pages/transactions/index/Transactions.tsx @@ -71,6 +71,7 @@ export function Transactions() { Date: Tue, 21 Mar 2023 01:04:43 +0100 Subject: [PATCH 6/9] Resolved bug with displaying error message for bank account --- src/pages/transactions/components/BankAccountSelector.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/transactions/components/BankAccountSelector.tsx b/src/pages/transactions/components/BankAccountSelector.tsx index 05edfd7088..b4f5a008f1 100644 --- a/src/pages/transactions/components/BankAccountSelector.tsx +++ b/src/pages/transactions/components/BankAccountSelector.tsx @@ -46,6 +46,7 @@ export function BankAccountSelector(props: BankAccountSelectorProps) { disabled={props.readonly} clearButton={props.clearButton} onClearButtonClick={props.onClearButtonClick} + errorMessage={props.errorMessage} queryAdditional actionLabel={t('new_bank_account')} onActionClick={() => setIsModalOpen(true)} From fee7a5d1ca739267b23c65180bbb68f8f65d8748 Mon Sep 17 00:00:00 2001 From: Civolilah Date: Tue, 21 Mar 2023 02:06:19 +0100 Subject: [PATCH 7/9] Undo unnecessary change --- src/pages/transactions/components/BankAccountSelector.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pages/transactions/components/BankAccountSelector.tsx b/src/pages/transactions/components/BankAccountSelector.tsx index b4f5a008f1..05edfd7088 100644 --- a/src/pages/transactions/components/BankAccountSelector.tsx +++ b/src/pages/transactions/components/BankAccountSelector.tsx @@ -46,7 +46,6 @@ export function BankAccountSelector(props: BankAccountSelectorProps) { disabled={props.readonly} clearButton={props.clearButton} onClearButtonClick={props.onClearButtonClick} - errorMessage={props.errorMessage} queryAdditional actionLabel={t('new_bank_account')} onActionClick={() => setIsModalOpen(true)} From ba44271336429a1806d6d5992b3549999d5e886b Mon Sep 17 00:00:00 2001 From: Civolilah Date: Tue, 21 Mar 2023 02:06:36 +0100 Subject: [PATCH 8/9] Added bulkRoute for tables where it is missed --- src/pages/clients/index/Clients.tsx | 1 + src/pages/projects/index/Projects.tsx | 1 + .../components/transaction-rules/TransactionRules.tsx | 1 + src/pages/settings/bank-accounts/index/BankAccounts.tsx | 1 + src/pages/settings/expense-categories/ExpenseCategories.tsx | 1 + src/pages/settings/gateways/index/Gateways.tsx | 1 + src/pages/settings/integrations/api-tokens/ApiTokens.tsx | 1 + src/pages/settings/integrations/api-webhooks/ApiWebhooks.tsx | 1 + src/pages/settings/schedules/index/Schedules.tsx | 1 + src/pages/settings/subscriptions/index/Subscriptions.tsx | 1 + src/pages/settings/task-statuses/TaskStatuses.tsx | 1 + src/pages/settings/tax-rates/TaxRates.tsx | 1 + src/pages/vendors/index/Vendors.tsx | 1 + 13 files changed, 13 insertions(+) diff --git a/src/pages/clients/index/Clients.tsx b/src/pages/clients/index/Clients.tsx index 6c3b1a7c11..136dbe2e56 100644 --- a/src/pages/clients/index/Clients.tsx +++ b/src/pages/clients/index/Clients.tsx @@ -58,6 +58,7 @@ export function Clients() { Date: Tue, 21 Mar 2023 17:07:53 +1100 Subject: [PATCH 9/9] Updates for languages --- src/resources/lang/de/de.json | 2 +- src/resources/lang/en/en.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/resources/lang/de/de.json b/src/resources/lang/de/de.json index e9967a8a78..7f8ca7f283 100644 --- a/src/resources/lang/de/de.json +++ b/src/resources/lang/de/de.json @@ -1 +1 @@ -{"organization":"Unternehmen","name":"Name","website":"Webseite","work_phone":"Telefon","address":"Adresse","address1":"Straße","address2":"Adresszusatz","city":"Stadt","state":"Bundesland","postal_code":"Postleitzahl","country_id":"Land","contacts":"Kontakte","first_name":"Vorname","last_name":"Nachname","phone":"Telefon","email":"E-Mail","additional_info":"Zusätzliche Informationen","payment_terms":"Zahlungsbedingungen","currency_id":"Währung","size_id":"Firmengröße","industry_id":"Branche","private_notes":"Interne Notizen","invoice":"Rechnung","client":"Kunde","invoice_date":"Rechnungsdatum","due_date":"Fälligkeitsdatum","invoice_number":"Rechnungsnummer","invoice_number_short":"Re-Nr.","po_number":"Bestellnummer","po_number_short":"Best.-Nr.","frequency_id":"Wie oft","discount":"Rabatt","taxes":"Steuern","tax":"Steuer","item":"Artikel","description":"Beschreibung","unit_cost":"Einzelpreis","quantity":"Menge","line_total":"Summe","subtotal":"Zwischensumme","net_subtotal":"Netto","paid_to_date":"Bereits gezahlt","balance_due":"Offener Betrag","invoice_design_id":"Design","terms":"Bedingungen","your_invoice":"Ihre Rechnung","remove_contact":"Kontakt löschen","add_contact":"Kontakt hinzufügen","create_new_client":"Einen neuen Kunden erstellen","edit_client_details":"Kundendetails bearbeiten","enable":"Aktivieren","learn_more":"Mehr erfahren","manage_rates":"Steuersätze verwalten","note_to_client":"Notiz an den Kunden","invoice_terms":"Rechnungsbedingungen","save_as_default_terms":"Als Standardbedingungen speichern","download_pdf":"PDF herunterladen","pay_now":"Jetzt bezahlen","save_invoice":"Rechnung speichern","clone_invoice":"Als Rechnung kopieren","archive_invoice":"Rechnung archivieren","delete_invoice":"Rechnung löschen","email_invoice":"Rechnung versenden","enter_payment":"Zahlung eingeben","tax_rates":"Steuersätze","rate":"Stundensatz","settings":"Einstellungen","enable_invoice_tax":"Ermögliche das Bestimmen einer Rechnungssteuer<\/strong>","enable_line_item_tax":"Ermögliche das Bestimmen von Steuern für Belegpositionen<\/strong>","dashboard":"Übersicht","dashboard_totals_in_all_currencies_help":"Hinweis: Fügen Sie einen :link namens \":name\" hinzu, um die Summen in einer einzigen Basiswährung anzuzeigen.","clients":"Kunden","invoices":"Rechnungen","payments":"Zahlungen","credits":"Gutschrift","history":"Verlauf","search":"Suche","sign_up":"Anmeldung","guest":"Gast","company_details":"Firmendaten","online_payments":"Online-Zahlungen","notifications":"Benachrichtigungen","import_export":"Import\/Export","done":"Erledigt","save":"Speichern","create":"Erstellen","upload":"Hochladen","import":"Importieren","download":"Herunterladen","cancel":"Abbrechen","close":"Schließen","provide_email":"Bitte geben Sie eine gültige E-Mail-Adresse an","powered_by":"Unterstützt durch","no_items":"Keine Elemente","recurring_invoices":"Wiederkehrende Rechnungen","recurring_help":"

Senden Sie Ihren Kunden automatisch die gleichen Rechnungen wöchentlich, zweimonatlich, monatlich, vierteljährlich oder jährlich zu.<\/p> \n

Verwenden Sie :MONTH, :QUARTER oder :YEAR für dynamische Daten. Grundlegende Mathematik funktioniert auch, zum Beispiel :MONTH-1.<\/p>\n

Beispiele für dynamische Rechnungsvariablen:<\/p>\n