From 3cfd45e4460c4db066a1bb49c905024d6c628dc0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1s=C3=A1ry=20D=C3=A1niel?= Date: Wed, 15 Nov 2023 12:00:29 +0100 Subject: [PATCH] Invoice import assign/approve editor modifications --- TODO.txt | 33 +++++++++++++- .../lis/service/data/EntityDataService.java | 2 +- .../ImportInvoiceApproveEditorModel.java | 8 ++-- .../ImportInvoiceAssignEditorModel.java | 22 +++++++++- .../ui/editor/common/EntityEditorModel.java | 2 + .../lis/ui/view/ApproveInvoicesViewModel.java | 1 - .../lis/ui/view/AssignInvoicesViewModel.java | 30 ++++++++++--- .../lis/ui/view/InvoicePaymentViewModel.java | 5 +++ .../user/lis/ui/view/InvoicesViewModel.java | 44 +++++++++++++++++-- .../editor/import-invoice-assign-editor.zul | 8 ++-- .../main/resources/web/form/invoice-form.zul | 2 +- lis-ui/src/main/resources/web/index.zul | 8 +++- .../main/resources/web/invoice-payment.zul | 5 ++- 13 files changed, 144 insertions(+), 26 deletions(-) diff --git a/TODO.txt b/TODO.txt index 17104bd..2f0a3f0 100644 --- a/TODO.txt +++ b/TODO.txt @@ -2,6 +2,37 @@ - távlati: dokumentum kezelés szétválasztása - távlati: utalás előkészítése - távlati: banki integráció +- távlati: táblák exportja + +Számla import +------------- +Javításra váró számlák lista kezelése: az elvetett vagy meg nem érkezett számlákat egy külön listába kell tenni. + +Az import folyamat számlái és a tervezett számlák hogyan kapcsolódjanak össze? +Projektszámok: 2023-0013 + + +Számla kiegyenlítés +------------- +teszt: 9090010764 + + +Összes számla +------------- +A kiegyenlítés hogyan kezelje a különböző devizákat? + + + +F: egy számlához több fájl csatolása +*F: a számla assign esetén ki kell választani a tervezett számlát, ha van +*BUG: a rendezés elromlik a lista megnyitásakor +*F: "Összes számla" szűrőnél lehessen kiválasztani a dátum típusát +*F: A számla listán a funkciók: szerkesztés, másik projekthez csatolás, kiegyenlítés +*F: számla kiegyenlítés bal oldala legyen olvashatóbb +*F: a számla kiegyenlítés a számla listában is jelenjen meg +*F: a számla kiegyenlítés: csak a bruttó legyen, csak akkor oké ha egyenlő, ha nagyobb akkor szól +*F: a parkolóból lehessen eldobni végleg + 0.1.8 - A "Számla kiegyenlítés" számla sorszám alapú kereséssel indul, találat esetén megjelenik egy űrlap: @@ -11,13 +42,13 @@ * mivel tartozhat egy sorszám több számlához is, ezt kezelni kell - A "Szállítói követelés követés" funkció a számlák listáját mutatja szűrve, azokat tartalmazza amik még nincsenek kiegyenlítve (külön a bejövö külön a kimenő) - munkalap hiba javítása +- NAV számla lekérdezés folytatólagossága (meg kell jegyezni, mi volt az utolsó elem), a kezdő dátum (napok száma) konfigurálható legyen? * projekt ID-t regexp-el ki kell szedni, ha több van egy listát feldobni invoiceHead/invoiceDetail/additionalInvoiceData invoiceHead/invoiceDetail/conventionalInvoiceInfo/orderNumbers invoiceHead/invoiceDetail/conventionalInvoiceInfo/contractNumbers invoiceHead/invoiceDetail/conventionalInvoiceInfo/customerCompanyCodes invoiceHead/invoiceDetail/conventionalInvoiceInfo/projectNumbers -- NAV számla lekérdezés folytatólagossága (meg kell jegyezni, mi volt az utolsó elem), a kezdő dátum (napok száma) konfigurálható legyen? 0.1.7 * A számla importhoz tartozó menüpontok jelezzék, ha van feladat diff --git a/lis-service/src/main/java/hu/user/lis/service/data/EntityDataService.java b/lis-service/src/main/java/hu/user/lis/service/data/EntityDataService.java index d7de60d..75ff85f 100644 --- a/lis-service/src/main/java/hu/user/lis/service/data/EntityDataService.java +++ b/lis-service/src/main/java/hu/user/lis/service/data/EntityDataService.java @@ -90,7 +90,7 @@ public class EntityDataService extends EntityDataService JSONAssert.assertEquals(json1, json2, JSONCompareMode.LENIENT); } catch (Throwable e) { result = true; - log.error(e); + //log.error(e); } } return result; diff --git a/lis-ui/src/main/java/hu/user/lis/ui/editor/ImportInvoiceApproveEditorModel.java b/lis-ui/src/main/java/hu/user/lis/ui/editor/ImportInvoiceApproveEditorModel.java index a3f5bda..47b5ecb 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/editor/ImportInvoiceApproveEditorModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/editor/ImportInvoiceApproveEditorModel.java @@ -28,6 +28,7 @@ public class ImportInvoiceApproveEditorModel extends InvoiceEditorModel { boolean canEditPartner; @Init + @Override public void init() { super.init(); canEditPartner = Objects.isNull(getFormDocument().getPartner().getId()); @@ -40,6 +41,7 @@ public class ImportInvoiceApproveEditorModel extends InvoiceEditorModel { && Objects.nonNull(entity.getFile()); } + @Override @AfterCompose public void onAfterCompose(@ContextParam(ContextType.VIEW) Component view) { getEntitySelectorRouter().configureSelector(Project.class, getFormDocument(), "project"); @@ -50,9 +52,7 @@ public class ImportInvoiceApproveEditorModel extends InvoiceEditorModel { @Command public void onEditPartner() { Partner entity = partnersDataModel.clone(getFormDocument().getPartner()); - Editors.doEdit(Editors.PARTNER, entity, modifiedEntity -> { - getFormDocument().setPartner(modifiedEntity); - }); + Editors.doEdit(Editors.PARTNER, entity, modifiedEntity -> getFormDocument().setPartner(modifiedEntity)); } @Command @@ -61,13 +61,11 @@ public class ImportInvoiceApproveEditorModel extends InvoiceEditorModel { Events.postEvent(new Event("onClose", target, null)); return; } - ImmutableMap args = ImmutableMap.of("approved", save == 2, "modifiedEntity", getFormDocument()); if (save == 1) { Events.postEvent(new Event("onClose", target, ImmutableMap.of("approved", false))); return; } - if (isSaveEnabled()) { Events.postEvent(new Event("onClose", target, ImmutableMap.of("approved", true, "modifiedEntity", getFormDocument()))); diff --git a/lis-ui/src/main/java/hu/user/lis/ui/editor/ImportInvoiceAssignEditorModel.java b/lis-ui/src/main/java/hu/user/lis/ui/editor/ImportInvoiceAssignEditorModel.java index ee7ac4c..5de60be 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/editor/ImportInvoiceAssignEditorModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/editor/ImportInvoiceAssignEditorModel.java @@ -1,5 +1,6 @@ package hu.user.lis.ui.editor; +import com.google.common.collect.ImmutableMap; import hu.user.lis.db.Invoice; import hu.user.lis.db.Partner; import hu.user.lis.db.Project; @@ -12,8 +13,11 @@ import lombok.extern.log4j.Log4j2; import org.zkoss.bind.annotation.*; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.Executions; +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zk.ui.event.Events; import org.zkoss.zk.ui.select.annotation.WireVariable; import org.zkoss.zk.ui.util.Notification; +import org.zkoss.zul.Window; import java.util.List; import java.util.Objects; @@ -71,8 +75,24 @@ public class ImportInvoiceAssignEditorModel extends InvoiceEditorModel { getEntitySelectorRouter().configureSelector(Project.class, getFormDocument(), "project"); validate(); } else { - Notification.show("Nincs projekt ezen a számon: " + humanId, true); + Notification.show("Nincs projekt ezen a számon: " + humanId, null, null, null, 3000, true); } } + @Command + public void onCloseApproveWindow(@BindingParam("target") Window target, @BindingParam("save") int save) { + if (save == 0) { + Events.postEvent(new Event("onClose", target, null)); + return; + } + if (save == 1) { + Events.postEvent(new Event("onClose", target, ImmutableMap.of("invalid", true))); + return; + } + if (isSaveEnabled()) { + Events.postEvent(new Event("onClose", target, ImmutableMap.of("modifiedEntity", getFormDocument()))); + } + } + + } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/editor/common/EntityEditorModel.java b/lis-ui/src/main/java/hu/user/lis/ui/editor/common/EntityEditorModel.java index 02d9f8f..56ef034 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/editor/common/EntityEditorModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/editor/common/EntityEditorModel.java @@ -52,6 +52,8 @@ public abstract class EntityEditorModel extends Abstract @WireVariable EntitySelectorRouter entitySelectorRouter; + @Getter + @Setter private boolean readonlyForm; @Command diff --git a/lis-ui/src/main/java/hu/user/lis/ui/view/ApproveInvoicesViewModel.java b/lis-ui/src/main/java/hu/user/lis/ui/view/ApproveInvoicesViewModel.java index 6e99299..197f852 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/view/ApproveInvoicesViewModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/view/ApproveInvoicesViewModel.java @@ -87,7 +87,6 @@ public class ApproveInvoicesViewModel extends EntityViewModel implem Map results = (Map) e.getData(); boolean approved = (boolean) results.get("approved"); Invoice modifiedEntity = (Invoice) results.get("modifiedEntity"); - //TODO move entity persistance to BPMN if (approved) { Partner partner = modifiedEntity.getPartner(); if (Objects.isNull(partner.getId())) { diff --git a/lis-ui/src/main/java/hu/user/lis/ui/view/AssignInvoicesViewModel.java b/lis-ui/src/main/java/hu/user/lis/ui/view/AssignInvoicesViewModel.java index 2af175e..f175f11 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/view/AssignInvoicesViewModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/view/AssignInvoicesViewModel.java @@ -5,7 +5,6 @@ import hu.user.lis.db.Invoice; import hu.user.lis.ui.Constants; import hu.user.lis.ui.data.AssignInvoicesDataModel; import hu.user.lis.ui.data.common.CachedSpringDataModel; -import hu.user.lis.ui.editor.common.EditCompleted; import hu.user.lis.ui.editor.common.Editors; import hu.user.lis.ui.event.EventBus; import hu.user.lis.ui.event.ProcessEventRouter; @@ -18,14 +17,17 @@ import org.zkoss.bind.annotation.Command; import org.zkoss.bind.annotation.Destroy; import org.zkoss.bind.annotation.Init; import org.zkoss.json.JSONObject; +import org.zkoss.zk.ui.Executions; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.select.annotation.VariableResolver; import org.zkoss.zk.ui.select.annotation.WireVariable; import org.zkoss.zkplus.spring.DelegatingVariableResolver; +import org.zkoss.zul.Window; import java.util.List; import java.util.Map; +import java.util.Objects; @Getter @Log4j2 @@ -72,11 +74,29 @@ public class AssignInvoicesViewModel extends EntityViewModel impleme public void onHandleTask() { Invoice entity = (Invoice) getSelectedEntity().get("invoiceEntity"); List projectSuggestions = (List) getSelectedEntity().get("projectSuggestions"); - Map arg = ImmutableMap.of("formDocument", entity, "projectSuggestions", projectSuggestions); - Editors.doShowEdit(Editors.IMPORT_INVOICE_ASSIGN, arg, (EditCompleted) modifiedEntity -> { - assignInvoicesDataModel.completeTask(getSelectedEntity(), ImmutableMap.of("invoiceEntity", modifiedEntity)); - onRefresh(); + Map args = ImmutableMap.of("formDocument", entity, "projectSuggestions", projectSuggestions); +// Editors.doShowEdit(Editors.IMPORT_INVOICE_ASSIGN, args, (EditCompleted) modifiedEntity -> { +// assignInvoicesDataModel.completeTask(getSelectedEntity(), ImmutableMap.of("invoiceEntity", modifiedEntity)); +// onRefresh(); +// }); + + Window editorWindow = (Window) Executions.createComponents(Editors.IMPORT_INVOICE_ASSIGN, null, args); + editorWindow.addEventListener("onClose", e -> { + if (Objects.nonNull(e.getData())) { + Map results = (Map) e.getData(); + boolean invalid = (boolean) results.get("invalid"); + Invoice modifiedEntity = (Invoice) results.get("modifiedEntity"); + if (invalid) { + assignInvoicesDataModel.completeTask(getSelectedEntity(), ImmutableMap.of("invalid", true)); + } else { + assignInvoicesDataModel.completeTask(getSelectedEntity(), ImmutableMap.of("invoiceEntity", modifiedEntity)); + } + onRefresh(); + } }); + editorWindow.doModal(); + editorWindow.setFocus(true); + } @Override diff --git a/lis-ui/src/main/java/hu/user/lis/ui/view/InvoicePaymentViewModel.java b/lis-ui/src/main/java/hu/user/lis/ui/view/InvoicePaymentViewModel.java index 0eb16fb..fb882dd 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/view/InvoicePaymentViewModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/view/InvoicePaymentViewModel.java @@ -75,6 +75,7 @@ public class InvoicePaymentViewModel extends EntityViewModel { @Setter private boolean newPaymentDisabled; + @Init @Override public void init() { @@ -105,6 +106,10 @@ public class InvoicePaymentViewModel extends EntityViewModel { @NotifyChange("partnerRequired") public void search() { log.info("Searching for invoice {}", invoiceNumber); + if (formDocument != null && !formDocument.getHumanId().equals(invoiceNumber)) { + filterPartner = null; + setPartnerRequired(false); + } hideEditor(); if (Objects.isNull(filterPartner)) { List invoices = invoiceRepository.findByHumanId(invoiceNumber); diff --git a/lis-ui/src/main/java/hu/user/lis/ui/view/InvoicesViewModel.java b/lis-ui/src/main/java/hu/user/lis/ui/view/InvoicesViewModel.java index e9538d4..97e5c7b 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/view/InvoicesViewModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/view/InvoicesViewModel.java @@ -1,13 +1,13 @@ package hu.user.lis.ui.view; import com.google.common.collect.ImmutableMap; -import hu.user.lis.db.Invoice; -import hu.user.lis.db.Partner; -import hu.user.lis.db.Project; +import hu.user.lis.db.*; import hu.user.lis.db.repository.filter.InvoiceFilter; import hu.user.lis.ui.Constants; +import hu.user.lis.ui.data.InvoiceDataModel; import hu.user.lis.ui.data.InvoicesDataModel; import hu.user.lis.ui.data.common.CachedSpringDataModel; +import hu.user.lis.ui.editor.common.Editors; import hu.user.lis.ui.editor.selector.EntitySelectorRouter; import hu.user.lis.ui.event.EventBus; import hu.user.lis.ui.view.common.EntityViewModel; @@ -28,22 +28,27 @@ import static hu.user.lis.ui.data.common.CachedDataModel.NATURAL; public class InvoicesViewModel extends EntityViewModel implements EventListener { @Getter private final InvoiceFilter invoiceFilter = InvoiceFilter.builder().incoming(true).build(); + @WireVariable private EventBus eventBus; + @Getter @WireVariable private EntitySelectorRouter entitySelectorRouter; + @Getter @WireVariable private InvoicesDataModel invoicesDataModel; + @WireVariable + private InvoiceDataModel invoiceDataModel; + @Init @Override public void init() { super.init(); eventBus.register(this); eventBus.registerForBinding(this); - refresh(); addColumns(ImmutableMap.of( "partner.humanId", NATURAL, "partner.name", NATURAL, @@ -54,6 +59,7 @@ public class InvoicesViewModel extends EntityViewModel implements Event "currency", NATURAL, "incoming", NATURAL )); + refresh(); } @Override @@ -97,6 +103,7 @@ public class InvoicesViewModel extends EntityViewModel implements Event // (this.equals(propertyEvent.getBase()) && propertyEvent.getProperty().startsWith("invoiceFilter"))) if (invoiceFilter.equals(propertyEvent.getBase())) { log.info("Refresh needed, {} changed", propertyEvent.getProperty()); + refresh(); } } @@ -107,4 +114,33 @@ public class InvoicesViewModel extends EntityViewModel implements Event log.info("Destroy {}", getClass().getSimpleName()); eventBus.unregister(this); } + + @Command + public void onEdit() { + Invoice invoice = getSelectedEntity(); + if (invoice.isIncoming()) { + onEditIncoming(); + } else { + onEditOutgoing(); + } + } + + public void onEditIncoming() { + IncomingInvoice selectedIncomingInvoice = (IncomingInvoice) getSelectedEntity(); + IncomingInvoice entity = invoiceDataModel.clone(selectedIncomingInvoice); + Editors.doEdit(Editors.INCOMING_INVOICE, entity, selectedIncomingInvoice, modifiedEntity -> { + invoiceDataModel.save(modifiedEntity); + refresh(); + }); + } + + public void onEditOutgoing() { + OutgoingInvoice selectedOutgoingInvoice = (OutgoingInvoice) getSelectedEntity(); + OutgoingInvoice entity = invoiceDataModel.clone((OutgoingInvoice) getSelectedEntity()); + Editors.doEdit(Editors.OUTGOING_INVOICE, entity, selectedOutgoingInvoice, modifiedEntity -> { + invoiceDataModel.save(modifiedEntity); + refresh(); + }); + } + } diff --git a/lis-ui/src/main/resources/web/editor/import-invoice-assign-editor.zul b/lis-ui/src/main/resources/web/editor/import-invoice-assign-editor.zul index 381c586..6406278 100644 --- a/lis-ui/src/main/resources/web/editor/import-invoice-assign-editor.zul +++ b/lis-ui/src/main/resources/web/editor/import-invoice-assign-editor.zul @@ -122,9 +122,11 @@