diff --git a/ayanova/src/views/adm-user.vue b/ayanova/src/views/adm-user.vue index a99a6a27..66f0e11f 100644 --- a/ayanova/src/views/adm-user.vue +++ b/ayanova/src/views/adm-user.vue @@ -419,8 +419,52 @@ - - + + + + {{ $ay.t("SendEmail") }} + + + + + + + + + + + + + {{ + $ay.t("Close") + }} + + {{ $ay.t("OK") }} + + + @@ -490,7 +534,10 @@ export default { serverError: {} }, rights: window.$gz.role.defaultRightsObject(), - ayaType: window.$gz.type.User + ayaType: window.$gz.type.User, + emailDialog: false, + subject: null, + message: null }; }, watch: { @@ -586,6 +633,37 @@ export default { window.$gz.eventBus.$off("menu-click", clickHandler); }, methods: { + async sendEmail() { + if ( + this.obj.id == 0 || + this.subject == null || + this.message == null || + window.$gz.util.stringIsNullOrEmpty(this.obj.emailAddress) + ) { + return; + } + window.$gz.form.deleteAllErrorBoxErrors(this); + try { + const res = await window.$gz.api.upsert("notify/direct-smtp", { + ObjectId: this.obj.id, + aType: this.ayaType, + toAddress: this.obj.emailAddress, + subject: this.subject, + textBody: this.message + }); + if (res.error) { + this.formState.serverError = res.error; + window.$gz.form.setErrorBoxErrors(this); + } + } catch (error) { + window.$gz.form.setFormState({ + vm: this, + loading: false + }); + window.$gz.errorHandler.handleFormError(error, this); + } + this.emailDialog = false; + }, goHelp() { window.open(window.$gz.api.helpUrl() + "ay-start-localization", "_blank"); }, @@ -924,6 +1002,9 @@ async function clickHandler(menuItem) { } }); break; + case "sendemail": + m.vm.emailDialog = true; + break; default: window.$gz.eventBus.$emit( "notify-warning", @@ -1043,6 +1124,19 @@ function generateMenu(vm) { } } + if ( + vm.rights.change && + vm.$route.params.recordid != 0 && + !window.$gz.util.stringIsNullOrEmpty(vm.obj.emailAddress) + ) { + menuOptions.menuItems.push({ + title: "SendEmail", + icon: "$ayiAt", + key: FORM_KEY + ":sendemail", + vm: vm + }); + } + menuOptions.menuItems.push({ divider: true, inset: false }); window.$gz.eventBus.$emit("menu-change", menuOptions); @@ -1109,7 +1203,8 @@ async function fetchTranslatedText() { "AuthTwoFactorDisabled", "WorkOrderItemScheduledUserList", "WorkOrderItemLaborList", - "AllowLogin" + "AllowLogin", + "SendEmail" ]); } diff --git a/ayanova/src/views/cust-head-office.vue b/ayanova/src/views/cust-head-office.vue index 95e1c3ba..fac3763c 100644 --- a/ayanova/src/views/cust-head-office.vue +++ b/ayanova/src/views/cust-head-office.vue @@ -672,6 +672,51 @@ + + + + {{ $ay.t("SendEmail") }} + + + + + + + + + + + + + {{ + $ay.t("Close") + }} + + {{ $ay.t("OK") }} + + + @@ -742,7 +787,10 @@ export default { availableRoles: [], timeZoneName: window.$gz.locale.getResolvedTimeZoneName(), languageName: window.$gz.locale.getResolvedLanguage(), - hour12: window.$gz.locale.getHour12() + hour12: window.$gz.locale.getHour12(), + emailDialog: false, + subject: null, + message: null }; }, watch: { @@ -846,6 +894,37 @@ export default { // }); // } // }, + async sendEmail() { + if ( + this.obj.id == 0 || + this.subject == null || + this.message == null || + window.$gz.util.stringIsNullOrEmpty(this.obj.emailAddress) + ) { + return; + } + window.$gz.form.deleteAllErrorBoxErrors(this); + try { + const res = await window.$gz.api.upsert("notify/direct-smtp", { + ObjectId: this.obj.id, + aType: this.ayaType, + toAddress: this.obj.emailAddress, + subject: this.subject, + textBody: this.message + }); + if (res.error) { + this.formState.serverError = res.error; + window.$gz.form.setErrorBoxErrors(this); + } + } catch (error) { + window.$gz.form.setFormState({ + vm: this, + loading: false + }); + window.$gz.errorHandler.handleFormError(error, this); + } + this.emailDialog = false; + }, canSave: function() { return this.formState.valid && this.formState.dirty; }, @@ -1254,6 +1333,9 @@ async function clickHandler(menuItem) { } }); break; + case "sendemail": + m.vm.emailDialog = true; + break; default: window.$gz.eventBus.$emit( "notify-warning", @@ -1352,6 +1434,19 @@ function generateMenu(vm) { vm: vm }); + if ( + vm.rights.change && + vm.$route.params.recordid != 0 && + !window.$gz.util.stringIsNullOrEmpty(vm.obj.emailAddress) + ) { + menuOptions.menuItems.push({ + title: "SendEmail", + icon: "$ayiAt", + key: FORM_KEY + ":sendemail", + vm: vm + }); + } + menuOptions.menuItems.push({ divider: true, inset: false }); window.$gz.eventBus.$emit("menu-change", menuOptions); } @@ -1425,7 +1520,8 @@ async function fetchTranslatedText() { "UserPageAddress", "Contact", "LastLogin", - "CustomerList" + "CustomerList", + "SendEmail" ]); } diff --git a/ayanova/src/views/cust-user.vue b/ayanova/src/views/cust-user.vue index 1b134e9c..aaa282ba 100644 --- a/ayanova/src/views/cust-user.vue +++ b/ayanova/src/views/cust-user.vue @@ -411,6 +411,51 @@ + + + + {{ $ay.t("SendEmail") }} + + + + + + + + + + + + + {{ + $ay.t("Close") + }} + + {{ $ay.t("OK") }} + + + @@ -479,7 +524,10 @@ export default { serverError: {} }, rights: window.$gz.role.defaultRightsObject(), - ayaType: window.$gz.type.User + ayaType: window.$gz.type.User, + emailDialog: false, + subject: null, + message: null }; }, watch: { @@ -588,6 +636,37 @@ export default { window.$gz.eventBus.$off("menu-click", clickHandler); }, methods: { + async sendEmail() { + if ( + this.obj.id == 0 || + this.subject == null || + this.message == null || + window.$gz.util.stringIsNullOrEmpty(this.obj.emailAddress) + ) { + return; + } + window.$gz.form.deleteAllErrorBoxErrors(this); + try { + const res = await window.$gz.api.upsert("notify/direct-smtp", { + ObjectId: this.obj.id, + aType: this.ayaType, + toAddress: this.obj.emailAddress, + subject: this.subject, + textBody: this.message + }); + if (res.error) { + this.formState.serverError = res.error; + window.$gz.form.setErrorBoxErrors(this); + } + } catch (error) { + window.$gz.form.setFormState({ + vm: this, + loading: false + }); + window.$gz.errorHandler.handleFormError(error, this); + } + this.emailDialog = false; + }, goHelp() { window.open(window.$gz.api.helpUrl() + "ay-start-localization", "_blank"); }, @@ -898,6 +977,9 @@ async function clickHandler(menuItem) { case "disable2fa": m.vm.disableTfa(); break; + case "sendemail": + m.vm.emailDialog = true; + break; default: window.$gz.eventBus.$emit( "notify-warning", @@ -998,6 +1080,20 @@ function generateMenu(vm) { } } } + + if ( + vm.rights.change && + vm.$route.params.recordid != 0 && + !window.$gz.util.stringIsNullOrEmpty(vm.obj.emailAddress) + ) { + menuOptions.menuItems.push({ + title: "SendEmail", + icon: "$ayiAt", + key: FORM_KEY + ":sendemail", + vm: vm + }); + } + menuOptions.menuItems.push({ divider: true, inset: false }); window.$gz.eventBus.$emit("menu-change", menuOptions); } @@ -1062,7 +1158,8 @@ async function fetchTranslatedText() { "SendPasswordResetCode", "AuthDisableTwoFactor", "AuthTwoFactorDisabled", - "AllowLogin" + "AllowLogin", + "SendEmail" ]); } diff --git a/ayanova/src/views/vendor.vue b/ayanova/src/views/vendor.vue index 567677fb..2c6d6dbd 100644 --- a/ayanova/src/views/vendor.vue +++ b/ayanova/src/views/vendor.vue @@ -602,6 +602,51 @@ + + + + {{ $ay.t("SendEmail") }} + + + + + + + + + + + + + {{ + $ay.t("Close") + }} + + {{ $ay.t("OK") }} + + + @@ -661,7 +706,10 @@ export default { serverError: {} }, rights: window.$gz.role.defaultRightsObject(), - ayaType: window.$gz.type.Vendor + ayaType: window.$gz.type.Vendor, + emailDialog: false, + subject: null, + message: null }; }, watch: { @@ -753,6 +801,37 @@ export default { window.$gz.eventBus.$off("menu-click", clickHandler); }, methods: { + async sendEmail() { + if ( + this.obj.id == 0 || + this.subject == null || + this.message == null || + window.$gz.util.stringIsNullOrEmpty(this.obj.emailAddress) + ) { + return; + } + window.$gz.form.deleteAllErrorBoxErrors(this); + try { + const res = await window.$gz.api.upsert("notify/direct-smtp", { + ObjectId: this.obj.id, + aType: this.ayaType, + toAddress: this.obj.emailAddress, + subject: this.subject, + textBody: this.message + }); + if (res.error) { + this.formState.serverError = res.error; + window.$gz.form.setErrorBoxErrors(this); + } + } catch (error) { + window.$gz.form.setFormState({ + vm: this, + loading: false + }); + window.$gz.errorHandler.handleFormError(error, this); + } + this.emailDialog = false; + }, canSave: function() { return this.formState.valid && this.formState.dirty; }, @@ -1046,6 +1125,9 @@ async function clickHandler(menuItem) { addressPostal: m.vm.obj.addressPostal }); break; + case "sendemail": + m.vm.emailDialog = true; + break; default: window.$gz.eventBus.$emit( "notify-warning", @@ -1139,6 +1221,19 @@ function generateMenu(vm) { vm: vm }); + if ( + vm.rights.change && + vm.$route.params.recordid != 0 && + !window.$gz.util.stringIsNullOrEmpty(vm.obj.emailAddress) + ) { + menuOptions.menuItems.push({ + title: "SendEmail", + icon: "$ayiAt", + key: FORM_KEY + ":sendemail", + vm: vm + }); + } + menuOptions.menuItems.push({ divider: true, inset: false }); window.$gz.eventBus.$emit("menu-change", menuOptions); @@ -1206,7 +1301,8 @@ async function fetchTranslatedText() { "VendorCustom13", "VendorCustom14", "VendorCustom15", - "VendorCustom16" + "VendorCustom16", + "SendEmail" ]); }