From 90a4bb209d084b139488532e6dd9912d54e88d60 Mon Sep 17 00:00:00 2001 From: Oleg Zhuk Date: Tue, 11 Jun 2024 17:15:51 +0200 Subject: [PATCH] VCST-1306: Incomplete quote proposal warning feat: Adds Incomplete quote proposal warning if quote doesn't have either any items or with a zero total. --- .../Localizations/de.VirtoCommerce.Quote.json | 290 +++++++++--------- .../Localizations/en.VirtoCommerce.Quote.json | 8 +- .../Localizations/ru.VirtoCommerce.Quote.json | 6 +- .../Scripts/blades/quote-detail.js | 39 ++- 4 files changed, 186 insertions(+), 157 deletions(-) diff --git a/src/VirtoCommerce.QuoteModule.Web/Localizations/de.VirtoCommerce.Quote.json b/src/VirtoCommerce.QuoteModule.Web/Localizations/de.VirtoCommerce.Quote.json index 2f3ce69..d3ca626 100644 --- a/src/VirtoCommerce.QuoteModule.Web/Localizations/de.VirtoCommerce.Quote.json +++ b/src/VirtoCommerce.QuoteModule.Web/Localizations/de.VirtoCommerce.Quote.json @@ -1,145 +1,149 @@ { - "quotes": { + "quotes": { "main-menu-title": "Kostenvoranschläge", - "blades": { - "quotes-assets": { - "subtitle": "Anhänge", - "labels": { - "drag-note": "Anzuhängende Dateien hier hin ziehen", - "select-files": "Dateien auswählen", - "progress": "Fortschritt", - "type": "Typ", - "name": "Name", - "actions": "Aktionen" - } - }, - "quote-detail": { - "subtitle": "Details zum Kostenvoranschlag", - "labels": { - "customer": "Kunde", - "created": "Erstellt", - "customer-organization": "Organisation", - "last-updated": "Letzte Aktualisierung", - "status": "Status", - "expiry-date": "Verfalldatum", - "assigned-to": "Zugewiesen zu", - "rfq-from": "Angebotsanforderung von", - "reminder-date": "Mahndatum", - "general-comment": "Allgemeine Bemerkung", - "internal-comment": "Interne Bemerkung" - }, - "placeholders": { - "status": "Wählen Sie aus...", - "expiry-date": "Datum auswählen", - "assigned-to": "Wählen Sie aus...", - "rfq-from": "Shop auswählen", - "reminder-date": "Datum auswählen", - "general-comment": "Allgemeine Anmerkung", - "internal-comment": "Interne Bemerkung" - } - }, - "quote-items": { - "title": "{{title}} Positionen", - "subtitle": "Positionen bearbeiten", - "labels": { - "new-subtotal": "Neue Zwischensumme", - "relative-discount": "Rabatt", - "shipping-method": "Versandart", - "manual-shipping-total": "Manueller Versand gesamt", - "sub-total-placed": "Zwischensumme (gesetzt).", - "adjustment-quote": "Justierung", - "sub-total": "Zwischensumme", - "shipping": "Versand", - "discount": "Rabatt", - "grand-total": "Gesamtsumme", - "taxes": "Steuern", - "grand-total-incl-tax": "Gesamtbetrag (Inkl. Steuern)", - "picture": "Bild", - "comment": "Kommentar mit Produkt", - "list-price": "Listenpreis", - "sale-price": "Sonderangebot", - "quantity": "Menge", - "proposed-price": "Vorgeschlagener Preis", - "margin": "Marge (GP)", - "product": "Produkt", - "sku": "Art.-Nr." - }, - "placeholders": { - "shipping-method": "Wählen Sie aus...", - "comment": "Kommentar eingeben" - } - }, - "quotes-list": { - "title": "Kostenvoranschläge", - "labels": { - "quote-number": "Angebot Nr.", - "status": "Status", - "items-count": "Anzahl Artikel", - "customer": "Kunde", - "created": "Erstellt", - "no-quotes": "Keine Angebote noch" - } - }, - "catalog-items-select": { - "title": "Artikel zum Angebot einfügen" - } - }, - "widgets": { - "quote-address": { - "address-type": "Adresse eingeben", - "no-address": "Keine Adresse", - "blade-subtitle": "Adressen verwalten" - }, - "quotes-assets": { - "title": "Anhänge" - }, - "quote-items": { - "title": "Posten" - }, - "quote-totals": { - "sub-total": "Zwischensumme", - "shipping": "Versand", - "discount": "Rabatt", - "grand-total": "Gesamtsumme" - } - }, - "dialogs": { - "quote-requests-delete": { - "title": "Bestätigung löschen", - "message": "Sind Sie sicher, dass Sie ausgewählte Angebotanfragen löschen möchten?" - }, - "quote-delete": { - "title": "Bestätigung löschen", - "message": "Möchten Sie dieses Angebot wirklich löschen?" - }, - "quote-save": { - "title": "Änderungen speichern", - "message": "Der Kostenvoranschlag wurde geändert. Möchten Sie die Änderungen speichern?" - }, - "quote-cancel": { - "title": "Angebot stornieren", - "message": "Möchten Sie dieses Angebot wirklich abbrechen?", - "placeholders": { - "reason": "Ein Grund, hier abzubrechen..." - } - }, - "proposal-delete": { - "title": "Vorschlag bestätigen", - "message": "Nur begrenzte Änderungen sind verfügbar, nachdem der Antrag gesendet wurde. Sind Sie sicher, dass Sie diesen Vorschlag an den Kunden schicken möchten?" - }, - "hold-confirmation": { - "title": "Warteschleifen Bestätigung", - "message-release": "Bist du sicher, dass die Pausierung aus diesem Angebot freigeben willst?", - "message-place": "Bist du sicher, dass die Pausierung aus diesem Angebot einsetzen willst?" - } - }, - "commands": { - "release-hold": "Pausierung aufheben", - "place-on-hold": "Pausieren", - "submit-proposal": "Vorschlag senden", - "cancel-document": "Beleg stornieren", - "add-selected": "Ausgewählte hinzufügen", - "add-item": "Artikel hinzufügen" - } - } -} \ No newline at end of file + "blades": { + "quotes-assets": { + "subtitle": "Anhänge", + "labels": { + "drag-note": "Anzuhängende Dateien hier hin ziehen", + "select-files": "Dateien auswählen", + "progress": "Fortschritt", + "type": "Typ", + "name": "Name", + "actions": "Aktionen" + } + }, + "quote-detail": { + "subtitle": "Details zum Kostenvoranschlag", + "labels": { + "customer": "Kunde", + "created": "Erstellt", + "customer-organization": "Organisation", + "last-updated": "Letzte Aktualisierung", + "status": "Status", + "expiry-date": "Verfalldatum", + "assigned-to": "Zugewiesen zu", + "rfq-from": "Angebotsanforderung von", + "reminder-date": "Mahndatum", + "general-comment": "Allgemeine Bemerkung", + "internal-comment": "Interne Bemerkung" + }, + "placeholders": { + "status": "Wählen Sie aus...", + "expiry-date": "Datum auswählen", + "assigned-to": "Wählen Sie aus...", + "rfq-from": "Shop auswählen", + "reminder-date": "Datum auswählen", + "general-comment": "Allgemeine Anmerkung", + "internal-comment": "Interne Bemerkung" + } + }, + "quote-items": { + "title": "{{title}} Positionen", + "subtitle": "Positionen bearbeiten", + "labels": { + "new-subtotal": "Neue Zwischensumme", + "relative-discount": "Rabatt", + "shipping-method": "Versandart", + "manual-shipping-total": "Manueller Versand gesamt", + "sub-total-placed": "Zwischensumme (gesetzt).", + "adjustment-quote": "Justierung", + "sub-total": "Zwischensumme", + "shipping": "Versand", + "discount": "Rabatt", + "grand-total": "Gesamtsumme", + "taxes": "Steuern", + "grand-total-incl-tax": "Gesamtbetrag (Inkl. Steuern)", + "picture": "Bild", + "comment": "Kommentar mit Produkt", + "list-price": "Listenpreis", + "sale-price": "Sonderangebot", + "quantity": "Menge", + "proposed-price": "Vorgeschlagener Preis", + "margin": "Marge (GP)", + "product": "Produkt", + "sku": "Art.-Nr." + }, + "placeholders": { + "shipping-method": "Wählen Sie aus...", + "comment": "Kommentar eingeben" + } + }, + "quotes-list": { + "title": "Kostenvoranschläge", + "labels": { + "quote-number": "Angebot Nr.", + "status": "Status", + "items-count": "Anzahl Artikel", + "customer": "Kunde", + "created": "Erstellt", + "no-quotes": "Keine Angebote noch" + } + }, + "catalog-items-select": { + "title": "Artikel zum Angebot einfügen" + } + }, + "widgets": { + "quote-address": { + "address-type": "Adresse eingeben", + "no-address": "Keine Adresse", + "blade-subtitle": "Adressen verwalten" + }, + "quotes-assets": { + "title": "Anhänge" + }, + "quote-items": { + "title": "Posten" + }, + "quote-totals": { + "sub-total": "Zwischensumme", + "shipping": "Versand", + "discount": "Rabatt", + "grand-total": "Gesamtsumme" + } + }, + "dialogs": { + "quote-requests-delete": { + "title": "Bestätigung löschen", + "message": "Sind Sie sicher, dass Sie ausgewählte Angebotanfragen löschen möchten?" + }, + "quote-delete": { + "title": "Bestätigung löschen", + "message": "Möchten Sie dieses Angebot wirklich löschen?" + }, + "quote-save": { + "title": "Änderungen speichern", + "message": "Der Kostenvoranschlag wurde geändert. Möchten Sie die Änderungen speichern?" + }, + "quote-cancel": { + "title": "Angebot stornieren", + "message": "Möchten Sie dieses Angebot wirklich abbrechen?", + "placeholders": { + "reason": "Ein Grund, hier abzubrechen..." + } + }, + "proposal-submit": { + "title": "Vorschlag bestätigen", + "message": "Nur begrenzte Änderungen sind verfügbar, nachdem der Antrag gesendet wurde. Sind Sie sicher, dass Sie diesen Vorschlag an den Kunden schicken möchten?" + }, + "proposal-submit-with-warning": { + "title": "Unvollständiger Angebotsvorschlag", + "message": "Achtung: Das Angebot enthält entweder keine Artikel oder hat einen Gesamtwert von Null. Bitte stellen Sie sicher, dass alle Artikel aufgelistet und mit den richtigen Preisen versehen sind, bevor Sie fortfahren. Möchten Sie wirklich fortfahren?" + }, + "hold-confirmation": { + "title": "Warteschleifen Bestätigung", + "message-release": "Bist du sicher, dass die Pausierung aus diesem Angebot freigeben willst?", + "message-place": "Bist du sicher, dass die Pausierung aus diesem Angebot einsetzen willst?" + } + }, + "commands": { + "release-hold": "Pausierung aufheben", + "place-on-hold": "Pausieren", + "submit-proposal": "Vorschlag senden", + "cancel-document": "Beleg stornieren", + "add-selected": "Ausgewählte hinzufügen", + "add-item": "Artikel hinzufügen" + } + } +} diff --git a/src/VirtoCommerce.QuoteModule.Web/Localizations/en.VirtoCommerce.Quote.json b/src/VirtoCommerce.QuoteModule.Web/Localizations/en.VirtoCommerce.Quote.json index 3dd9293..6ee9c1d 100644 --- a/src/VirtoCommerce.QuoteModule.Web/Localizations/en.VirtoCommerce.Quote.json +++ b/src/VirtoCommerce.QuoteModule.Web/Localizations/en.VirtoCommerce.Quote.json @@ -123,9 +123,13 @@ "reason": "Please enter reason here..." } }, - "proposal-delete": { + "proposal-submit": { "title": "Confirm proposal", - "message": "After you send a proposal, you will not be able to modify some parts of your quote. Are you sure you want to proceed?" + "message": "Once you submit your proposal, certain parts of your quote will be locked and cannot be modified. Are you sure you want to proceed?" + }, + "proposal-submit-with-warning": { + "title": "Incomplete quote proposal", + "message": "Warning: The quote doesn't have either any items or with a zero total. Please ensure that all items are listed and priced appropriately before proceeding. Are you sure you want to proceed?" }, "hold-confirmation": { "title": "Confirm put on hold", diff --git a/src/VirtoCommerce.QuoteModule.Web/Localizations/ru.VirtoCommerce.Quote.json b/src/VirtoCommerce.QuoteModule.Web/Localizations/ru.VirtoCommerce.Quote.json index 4cc1efe..91a46c9 100644 --- a/src/VirtoCommerce.QuoteModule.Web/Localizations/ru.VirtoCommerce.Quote.json +++ b/src/VirtoCommerce.QuoteModule.Web/Localizations/ru.VirtoCommerce.Quote.json @@ -124,10 +124,14 @@ } }, - "proposal-delete": { + "proposal-submit": { "title": "Подтверждение предложения", "message": "После отправления предложения будут доступны лишь незначительные правки. Вы действительно хотите отправить это предложение покупателю?" }, + "proposal-submit-with-warning": { + "title": "Неполное предложение", + "message": "Предупреждение: Ваша квота будет отправлена ​​без каких-либо позиций или с нулевой общей суммой. Пожалуйста, убедитесь, что все позиции перечислены и оценены надлежащим образом, прежде чем продолжить. Вы уверены, что хотите продолжить?" + }, "hold-confirmation": { "title": "Ожидание подтверждения", "message-release": "Вы уверены, что хотите исключить это из квоты?", diff --git a/src/VirtoCommerce.QuoteModule.Web/Scripts/blades/quote-detail.js b/src/VirtoCommerce.QuoteModule.Web/Scripts/blades/quote-detail.js index 50f31ee..8457617 100644 --- a/src/VirtoCommerce.QuoteModule.Web/Scripts/blades/quote-detail.js +++ b/src/VirtoCommerce.QuoteModule.Web/Scripts/blades/quote-detail.js @@ -148,18 +148,35 @@ angular.module('virtoCommerce.quoteModule') { name: "quotes.commands.submit-proposal", icon: 'fa fa-check-square-o', executeMethod: function () { - var dialog = { - id: "confirmDelete", - title: "quotes.dialogs.proposal-delete.title", - message: "quotes.dialogs.proposal-delete.message", - callback: function (ok) { - if (ok) { - blade.currentEntity.status = 'Proposal sent'; - saveChanges(); + if (blade.currentEntity.items.length == 0 || + blade.currentEntity.totals.grandTotalInclTax == 0) { + var dialog = { + id: "submitProposalWithWarning", + title: "quotes.dialogs.proposal-submit-with-warning.title", + message: "quotes.dialogs.proposal-submit-with-warning.message", + callback: function (ok) { + if (ok) { + blade.currentEntity.status = 'Proposal sent'; + saveChanges(); + } } - } - }; - dialogService.showConfirmationDialog(dialog); + }; + dialogService.showWarningDialog(dialog); + } + else { + var dialog = { + id: "submitProposal", + title: "quotes.dialogs.proposal-submit.title", + message: "quotes.dialogs.proposal-submit.message", + callback: function (ok) { + if (ok) { + blade.currentEntity.status = 'Proposal sent'; + saveChanges(); + } + } + }; + dialogService.showConfirmationDialog(dialog); + } }, canExecuteMethod: function () { return blade.origEntity && blade.origEntity.status !== 'Proposal sent';