Search in sources :

Example 1 with Reply

use of eu.ggnet.saft.api.Reply in project dwoss by gg-net.

the class RedTapeGeneratorOperation method makeSalesDossiers.

/**
 * Generates a random amount of dossiers in a random valid state using already persisted elements like available units and product batches.
 * <p/>
 * @param amount
 * @return the list of generated dossiers.
 */
// TODO: Some usefull repayments would be nice.
public List<Dossier> makeSalesDossiers(int amount) {
    SubMonitor m = monitorFactory.newSubMonitor("Erzeuge " + amount + " Dossiers", amount);
    m.start();
    if (amount < 1)
        return Collections.EMPTY_LIST;
    List<CustomerMetaData> customers = customerService.allAsCustomerMetaData().stream().filter(c -> !c.getFlags().contains(SYSTEM_CUSTOMER)).collect(toList());
    if (customers.isEmpty())
        throw new RuntimeException("No Customers found, obviously there are non in the database");
    List<UniqueUnit> freeUniqueUnits = uniqueUnitAgent.findAllEager(UniqueUnit.class);
    List<Product> products = uniqueUnitAgent.findAllEager(Product.class);
    List<Dossier> dossiers = new ArrayList<>();
    for (int i = 0; i <= amount; i++) {
        CustomerMetaData customer = customers.get(R.nextInt(customers.size()));
        // Create a dossier on a random customer.
        Dossier dos = redTapeWorker.create(customer.getId(), R.nextBoolean(), "Generated by RedTapeGeneratorOperation.makeSalesDossiers()");
        Document doc = dos.getActiveDocuments(DocumentType.ORDER).get(0);
        // At least two positions.
        int noOfPositions = R.nextInt(10) + 2;
        Set<Long> productIds = new HashSet<>();
        for (int j = 0; j < noOfPositions; j++) {
            // Add Some units, but make sure, not only units are added.
            if (j < (noOfPositions - 2) && !freeUniqueUnits.isEmpty()) {
                UniqueUnit uu = null;
                while (uu == null && !freeUniqueUnits.isEmpty()) {
                    uu = freeUniqueUnits.remove(0);
                    StockUnit su = stockAgent.findStockUnitByUniqueUnitIdEager(uu.getId());
                    // Saftynet, so no unit is set double.
                    if (su == null || su.getLogicTransaction() != null)
                        uu = null;
                }
                if (uu == null)
                    continue;
                double price = uu.getPrice(PriceType.CUSTOMER);
                if (price < 0.001)
                    price = uu.getPrice(PriceType.RETAILER);
                if (price < 0.001)
                    price = 1111.11;
                Position pos = Position.builder().amount(1).type(PositionType.UNIT).uniqueUnitId(uu.getId()).uniqueUnitProductId(uu.getProduct().getId()).price(price).tax(doc.getSingleTax()).description(UniqueUnitFormater.toDetailedDiscriptionLine(uu)).name(UniqueUnitFormater.toPositionName(uu)).refurbishedId(uu.getIdentifier(REFURBISHED_ID)).build();
                doc.append(pos);
                continue;
            }
            double price = (R.nextInt(100000) + 100) / 100;
            switch(// Add a random position
            R.nextInt(3)) {
                case // Add a Product Batch
                0:
                    Product p;
                    int k = 0;
                    do {
                        p = products.get(R.nextInt(products.size()));
                        k++;
                        if (k > 10)
                            throw new RuntimeException("Could find a alternative product : p.size=" + products.size() + ", pids.size=" + productIds.size());
                    } while (productIds.contains(p.getId()));
                    productIds.add(p.getId());
                    doc.append(Position.builder().amount(R.nextInt(10) + 1).type(PositionType.PRODUCT_BATCH).uniqueUnitProductId(p.getId()).price(price).tax(doc.getSingleTax()).name(p.getName()).description(p.getDescription()).bookingAccount(postLedger.get(PositionType.PRODUCT_BATCH, doc.getTaxType()).orElse(null)).build());
                    break;
                case // Add a Service
                1:
                    doc.append(Position.builder().amount((R.nextInt(100) + 1) / 4.0).type(PositionType.SERVICE).price(price).tax(doc.getSingleTax()).name("Service").description("Service").bookingAccount(postLedger.get(PositionType.SERVICE, doc.getTaxType()).orElse(null)).build());
                    break;
                case // Add a comment
                2:
                    doc.append(Position.builder().amount(1).type(PositionType.COMMENT).name("Comment").description("Comment").bookingAccount(postLedger.get(PositionType.COMMENT, doc.getTaxType()).orElse(null)).build());
                    break;
            }
        }
        if (dos.isDispatch()) {
            // add the shipping costs.
            double price = (R.nextInt(10) + 1) * 10;
            doc.append(Position.builder().amount(1).type(PositionType.SHIPPING_COST).price(price).tax(doc.getSingleTax()).name("Versandkosten").description("Versandkosten").bookingAccount(postLedger.get(PositionType.SHIPPING_COST, doc.getTaxType()).orElse(null)).build());
        }
        // Break, if what we build is wrong.
        ValidationUtil.validate(doc);
        LOG.info("Preupdate document.id={}", doc.getId());
        doc = redTapeWorker.update(doc, null, "JUnit");
        for (int j = 0; j <= R.nextInt(4); j++) {
            CustomerDocument cd = new CustomerDocument(customer.getFlags(), doc, customer.getShippingCondition(), customer.getPaymentMethod());
            List<StateTransition<CustomerDocument>> transitions = redTapeWorker.getPossibleTransitions(cd);
            if (transitions.isEmpty())
                break;
            RedTapeStateTransition transition = (RedTapeStateTransition) transitions.get(R.nextInt(transitions.size()));
            if (transition.getHints().contains(RedTapeStateTransition.Hint.CREATES_ANNULATION_INVOICE) || transition.getHints().contains(RedTapeStateTransition.Hint.CREATES_CREDIT_MEMO))
                break;
            // Never fails.
            Reply<Document> reply = redTapeWorker.stateChange(cd, transition, "JUnit");
            if (reply.hasSucceded())
                doc = reply.getPayload();
            else {
                LOG.error("Fail on startChange {}", reply.getSummary());
                break;
            }
        }
        dossiers.add(doc.getDossier());
        m.worked(1, doc.getDossier().getIdentifier());
    }
    m.finish();
    return dossiers;
}
Also used : java.util(java.util) CustomerServiceBean(eu.ggnet.dwoss.customer.ee.CustomerServiceBean) PostLedger(eu.ggnet.dwoss.mandator.api.value.PostLedger) SubMonitor(eu.ggnet.dwoss.progress.SubMonitor) LoggerFactory(org.slf4j.LoggerFactory) RedTapeWorker(eu.ggnet.dwoss.redtapext.ee.RedTapeWorker) UniqueUnit(eu.ggnet.dwoss.uniqueunit.ee.entity.UniqueUnit) StateTransition(eu.ggnet.statemachine.StateTransition) SYSTEM_CUSTOMER(eu.ggnet.dwoss.rules.CustomerFlag.SYSTEM_CUSTOMER) Inject(javax.inject.Inject) StockAgent(eu.ggnet.dwoss.stock.ee.StockAgent) REQUIRES_NEW(javax.ejb.TransactionAttributeType.REQUIRES_NEW) DocumentType(eu.ggnet.dwoss.rules.DocumentType) ValidationUtil(eu.ggnet.dwoss.util.validation.ValidationUtil) UniqueUnitFormater(eu.ggnet.dwoss.uniqueunit.ee.format.UniqueUnitFormater) UniqueUnitAgent(eu.ggnet.dwoss.uniqueunit.ee.UniqueUnitAgent) Logger(org.slf4j.Logger) PriceType(eu.ggnet.dwoss.uniqueunit.ee.entity.PriceType) CustomerMetaData(eu.ggnet.dwoss.customer.opi.CustomerMetaData) StockUnit(eu.ggnet.dwoss.stock.ee.entity.StockUnit) PositionType(eu.ggnet.dwoss.rules.PositionType) REFURBISHED_ID(eu.ggnet.dwoss.uniqueunit.ee.entity.UniqueUnit.Identifier.REFURBISHED_ID) Collectors.toList(java.util.stream.Collectors.toList) RedTapeStateTransition(eu.ggnet.dwoss.redtapext.ee.state.RedTapeStateTransition) eu.ggnet.dwoss.redtape.ee.entity(eu.ggnet.dwoss.redtape.ee.entity) MonitorFactory(eu.ggnet.dwoss.progress.MonitorFactory) Reply(eu.ggnet.saft.api.Reply) Product(eu.ggnet.dwoss.uniqueunit.ee.entity.Product) CustomerDocument(eu.ggnet.dwoss.redtapext.ee.state.CustomerDocument) javax.ejb(javax.ejb) Product(eu.ggnet.dwoss.uniqueunit.ee.entity.Product) CustomerDocument(eu.ggnet.dwoss.redtapext.ee.state.CustomerDocument) RedTapeStateTransition(eu.ggnet.dwoss.redtapext.ee.state.RedTapeStateTransition) StockUnit(eu.ggnet.dwoss.stock.ee.entity.StockUnit) CustomerMetaData(eu.ggnet.dwoss.customer.opi.CustomerMetaData) SubMonitor(eu.ggnet.dwoss.progress.SubMonitor) StateTransition(eu.ggnet.statemachine.StateTransition) RedTapeStateTransition(eu.ggnet.dwoss.redtapext.ee.state.RedTapeStateTransition) UniqueUnit(eu.ggnet.dwoss.uniqueunit.ee.entity.UniqueUnit) CustomerDocument(eu.ggnet.dwoss.redtapext.ee.state.CustomerDocument)

Example 2 with Reply

use of eu.ggnet.saft.api.Reply in project dwoss by gg-net.

the class ImportImageIdsAction method actionPerformed.

@Override
public void actionPerformed(ActionEvent e) {
    Ui.exec(() -> {
        Optional<File> inFile = Ui.fileChooser().open().opt();
        if (!inFile.isPresent())
            return;
        Ui.build().dialog().eval(() -> new Alert(CONFIRMATION, "ImageIds aus der Datei:" + inFile.get().getPath() + " importieren ?")).opt().filter(b -> b == OK).map(b -> TikaUtil.isExcel(inFile.get())).filter(Ui.failure()::handle).map(Reply::getPayload).map(f -> Ui.progress().call(() -> Dl.remote().lookup(ImageIdHandler.class).importMissing(new FileJacket("in", ".xls", f)))).filter(Ui.failure()::handle).isPresent();
    });
}
Also used : Alert(javafx.scene.control.Alert) FileJacket(eu.ggnet.dwoss.util.FileJacket) AccessableAction(eu.ggnet.saft.core.auth.AccessableAction) Ui(eu.ggnet.saft.Ui) ActionEvent(java.awt.event.ActionEvent) File(java.io.File) Dl(eu.ggnet.saft.Dl) CONFIRMATION(javafx.scene.control.Alert.AlertType.CONFIRMATION) TikaUtil(eu.ggnet.dwoss.util.TikaUtil) Reply(eu.ggnet.saft.api.Reply) IMPORT_IMAGE_IDS(eu.ggnet.dwoss.rights.api.AtomicRight.IMPORT_IMAGE_IDS) ImageIdHandler(eu.ggnet.dwoss.misc.ee.ImageIdHandler) Optional(java.util.Optional) OK(javafx.scene.control.ButtonType.OK) ImageIdHandler(eu.ggnet.dwoss.misc.ee.ImageIdHandler) Alert(javafx.scene.control.Alert) FileJacket(eu.ggnet.dwoss.util.FileJacket) File(java.io.File)

Example 3 with Reply

use of eu.ggnet.saft.api.Reply in project dwoss by gg-net.

the class CustomerSearchController method buildContextMenu.

/**
 * Build a ContextMenu for ListView of the search results for a better navigation
 *
 * @return ContextMenu the filled ContextMenu
 */
private ContextMenu buildContextMenu() {
    // Create a ContextMenu
    ContextMenu contextMenu = new ContextMenu();
    MenuItem viewCustomer = new MenuItem("Detailansicht");
    MenuItem viewCompleteCustomer = new MenuItem("Detailansicht inc. aller Mandatendetails");
    MenuItem editCustomer = new MenuItem("Bearbeiten");
    // adding actions to the context menu
    viewCustomer.setOnAction((ActionEvent event) -> {
        // open toHtml(String matchcode, DefaultCustomerSalesdata defaults)
        if (resultListView.getSelectionModel().getSelectedItem() == null)
            return;
        PicoCustomer selectedCustomer = resultListView.getSelectionModel().getSelectedItem();
        Ui.exec(() -> {
            Ui.build(statusHbox).title("Kunde mit Mandant").fx().show(() -> Css.toHtml5WithStyle(AGENT.findCustomerAsMandatorHtml(selectedCustomer.getId())), () -> new HtmlPane());
        });
    });
    viewCompleteCustomer.setOnAction((ActionEvent event) -> {
        // open toHtml(String salesRow, String comment)
        if (resultListView.getSelectionModel().getSelectedItem() == null)
            return;
        PicoCustomer selectedCustomer = resultListView.getSelectionModel().getSelectedItem();
        Ui.exec(() -> {
            Ui.build(statusHbox).title("Kunden Ansicht").fx().show(() -> Css.toHtml5WithStyle(AGENT.findCustomerAsHtml(selectedCustomer.getId())), () -> new HtmlPane());
        });
    });
    editCustomer.setOnAction((ActionEvent event) -> {
        if (resultListView.getSelectionModel().getSelectedItem() == null)
            return;
        PicoCustomer picoCustomer = resultListView.getSelectionModel().getSelectedItem();
        Ui.exec(() -> {
            Customer customer = Ui.progress().call(() -> AGENT.findByIdEager(Customer.class, picoCustomer.getId()));
            if (!customer.isValid()) {
                Ui.build(resultListView).title("Fehlerhafter Datensatz").alert().message("Kundendaten sind invalid (aktuell normal): " + customer.getViolationMessage()).show(AlertType.WARNING);
            } else if (customer.isSimple()) {
                L.info("Edit Simple Customer {}", customer.getId());
                Optional<CustomerContinue> result = Ui.build(resultListView).fxml().eval(() -> customer, CustomerSimpleController.class).opt();
                if (!result.isPresent())
                    return;
                Reply<Customer> reply = Dl.remote().lookup(CustomerAgent.class).store(result.get().simpleCustomer);
                if (!Ui.failure().handle(reply))
                    return;
                if (!result.get().continueEnhance)
                    return;
                Ui.build(statusHbox).fxml().eval(() -> reply.getPayload(), CustomerEnhanceController.class).opt().ifPresent(c -> Ui.build(statusHbox).alert("Would store + " + c));
            } else if (customer.isBusiness()) {
                L.info("Edit (Complex) Customer {}", customer.getId());
                Ui.build(statusHbox).fxml().eval(() -> customer, CustomerEnhanceController.class).opt().ifPresent(c -> Ui.build(statusHbox).alert("Would store + " + c));
            }
        });
    });
    // add MenuItemes to ContextMenu
    contextMenu.getItems().addAll(viewCustomer, viewCompleteCustomer, editCustomer);
    return contextMenu;
}
Also used : java.util(java.util) Initializable(javafx.fxml.Initializable) javafx.scene.control(javafx.scene.control) URL(java.net.URL) SimpleStringProperty(javafx.beans.property.SimpleStringProperty) LoggerFactory(org.slf4j.LoggerFactory) FXCollections(javafx.collections.FXCollections) CustomerContinue(eu.ggnet.dwoss.customer.ui.neo.CustomerSimpleController.CustomerContinue) Ui(eu.ggnet.saft.Ui) PicoCustomer(eu.ggnet.dwoss.customer.ee.entity.projection.PicoCustomer) Dl(eu.ggnet.saft.Dl) AlertType(eu.ggnet.saft.core.ui.AlertType) READY(javafx.concurrent.Worker.State.READY) CustomerAgent(eu.ggnet.dwoss.customer.ee.CustomerAgent) KeyCode(javafx.scene.input.KeyCode) HBox(javafx.scene.layout.HBox) Logger(org.slf4j.Logger) Css(eu.ggnet.dwoss.rules.Css) CustomerTaskService(eu.ggnet.dwoss.customer.ui.CustomerTaskService) eu.ggnet.saft.api.ui(eu.ggnet.saft.api.ui) FXML(javafx.fxml.FXML) ActionEvent(javafx.event.ActionEvent) MAX_VALUE(java.lang.Double.MAX_VALUE) SearchField(eu.ggnet.dwoss.customer.ee.entity.Customer.SearchField) FxSaft(eu.ggnet.saft.core.ui.FxSaft) Reply(eu.ggnet.saft.api.Reply) Customer(eu.ggnet.dwoss.customer.ee.entity.Customer) ObservableList(javafx.collections.ObservableList) StringProperty(javafx.beans.property.StringProperty) HtmlPane(eu.ggnet.dwoss.util.HtmlPane) PicoCustomer(eu.ggnet.dwoss.customer.ee.entity.projection.PicoCustomer) Customer(eu.ggnet.dwoss.customer.ee.entity.Customer) ActionEvent(javafx.event.ActionEvent) Reply(eu.ggnet.saft.api.Reply) PicoCustomer(eu.ggnet.dwoss.customer.ee.entity.projection.PicoCustomer) HtmlPane(eu.ggnet.dwoss.util.HtmlPane)

Example 4 with Reply

use of eu.ggnet.saft.api.Reply in project dwoss by gg-net.

the class AssignmentController method addUnitCollection.

@FXML
private void addUnitCollection() {
    final PicoProduct selectedProduct = productList.getSelectionModel().getSelectedItem();
    if (selectedProduct == null)
        return;
    Ui.exec(() -> {
        Ui.build(root).fxml().eval(() -> new UnitCollection(), UnitCollectionEditorController.class).opt().map(dto -> Dl.remote().lookup(UniqueUnitAgent.class).createOnProduct(selectedProduct.getId(), dto, Dl.local().lookup(Guardian.class).getUsername())).filter(Ui.failure()::handle).map(Reply::getPayload).ifPresent(uc -> {
            unitCollectionList.getItems().add(uc);
        });
    });
}
Also used : EventHandler(javafx.event.EventHandler) Title(eu.ggnet.saft.api.ui.Title) java.util(java.util) Initializable(javafx.fxml.Initializable) ListView(javafx.scene.control.ListView) URL(java.net.URL) ListCell(javafx.scene.control.ListCell) LoggerFactory(org.slf4j.LoggerFactory) FXCollections(javafx.collections.FXCollections) UniqueUnit(eu.ggnet.dwoss.uniqueunit.ee.entity.UniqueUnit) MULTIPLE(javafx.scene.control.SelectionMode.MULTIPLE) Ui(eu.ggnet.saft.Ui) Dl(eu.ggnet.saft.Dl) FxController(eu.ggnet.saft.api.ui.FxController) StockApi(eu.ggnet.dwoss.stock.api.StockApi) PicoProduct(eu.ggnet.dwoss.uniqueunit.api.PicoProduct) UniqueUnitAgent(eu.ggnet.dwoss.uniqueunit.ee.UniqueUnitAgent) javafx.scene.input(javafx.scene.input) Logger(org.slf4j.Logger) PicoUnit(eu.ggnet.dwoss.uniqueunit.api.PicoUnit) UnitCollection(eu.ggnet.dwoss.uniqueunit.ee.entity.UnitCollection) Collectors(java.util.stream.Collectors) FXML(javafx.fxml.FXML) Guardian(eu.ggnet.saft.core.auth.Guardian) ActionEvent(javafx.event.ActionEvent) Reply(eu.ggnet.saft.api.Reply) Product(eu.ggnet.dwoss.uniqueunit.ee.entity.Product) ObservableValue(javafx.beans.value.ObservableValue) BorderPane(javafx.scene.layout.BorderPane) ChangeListener(javafx.beans.value.ChangeListener) UnitCollection(eu.ggnet.dwoss.uniqueunit.ee.entity.UnitCollection) UniqueUnitAgent(eu.ggnet.dwoss.uniqueunit.ee.UniqueUnitAgent) PicoProduct(eu.ggnet.dwoss.uniqueunit.api.PicoProduct) FXML(javafx.fxml.FXML)

Example 5 with Reply

use of eu.ggnet.saft.api.Reply in project dwoss by gg-net.

the class DocumentPrintAction method actionPerformed.

@Override
public void actionPerformed(ActionEvent e) {
    Ui.exec(() -> {
        // TODO: This is a very special case, there the Ui needs the result on construction. So the consumer pattern cannot be used.
        // This meeans, for now no progress display.
        JasperPrint print = Dl.remote().lookup(DocumentSupporter.class).render(document, type);
        CustomerMetaData customer = Dl.remote().lookup(CustomerService.class).asCustomerMetaData(customerId);
        boolean mailAvailable = customer.getEmail() != null && !customer.getEmail().trim().isEmpty();
        Ui.exec(() -> {
            Ui.build().parent(controller.getView()).swing().eval(() -> new JRViewerCask(print, document, type, mailAvailable)).opt().filter(c -> c.isCorrectlyBriefed()).ifPresent(c -> Ui.progress().call(() -> {
                CustomerDocument customerDocument = new CustomerDocument(customer.getFlags(), document, customer.getShippingCondition(), customer.getPaymentMethod());
                for (StateTransition<CustomerDocument> stateTransition : Dl.remote().lookup(RedTapeWorker.class).getPossibleTransitions(customerDocument)) {
                    RedTapeStateTransition redTapeStateTransition = (RedTapeStateTransition) stateTransition;
                    for (RedTapeStateTransition.Hint hint : redTapeStateTransition.getHints()) {
                        if (hint == RedTapeStateTransition.Hint.SENDED_INFORMATION) {
                            this.document = Optional.of(Dl.remote().lookup(RedTapeWorker.class).stateChange(customerDocument, redTapeStateTransition, Lookup.getDefault().lookup(Guardian.class).getUsername())).filter(Ui.failure()::handle).map(Reply::getPayload).orElse(document);
                        }
                    }
                }
                controller.reloadSelectionOnStateChange(Dl.remote().lookup(DocumentSupporter.class).briefed(document, Dl.local().lookup(Guardian.class).getUsername()));
                return null;
            }));
        });
    });
}
Also used : Lookup(org.openide.util.Lookup) JasperPrint(net.sf.jasperreports.engine.JasperPrint) CustomerService(eu.ggnet.dwoss.customer.opi.CustomerService) CustomerMetaData(eu.ggnet.dwoss.customer.opi.CustomerMetaData) DocumentViewType(eu.ggnet.dwoss.mandator.api.DocumentViewType) RedTapeWorker(eu.ggnet.dwoss.redtapext.ee.RedTapeWorker) RedTapeController(eu.ggnet.dwoss.redtapext.ui.cao.RedTapeController) Ui(eu.ggnet.saft.Ui) ActionEvent(java.awt.event.ActionEvent) StateTransition(eu.ggnet.statemachine.StateTransition) Dl(eu.ggnet.saft.Dl) Guardian(eu.ggnet.saft.core.auth.Guardian) AbstractAction(javax.swing.AbstractAction) RedTapeStateTransition(eu.ggnet.dwoss.redtapext.ee.state.RedTapeStateTransition) Document(eu.ggnet.dwoss.redtape.ee.entity.Document) DocumentSupporter(eu.ggnet.dwoss.redtapext.ee.DocumentSupporter) Reply(eu.ggnet.saft.api.Reply) Optional(java.util.Optional) CustomerDocument(eu.ggnet.dwoss.redtapext.ee.state.CustomerDocument) CustomerService(eu.ggnet.dwoss.customer.opi.CustomerService) RedTapeStateTransition(eu.ggnet.dwoss.redtapext.ee.state.RedTapeStateTransition) DocumentSupporter(eu.ggnet.dwoss.redtapext.ee.DocumentSupporter) CustomerMetaData(eu.ggnet.dwoss.customer.opi.CustomerMetaData) JasperPrint(net.sf.jasperreports.engine.JasperPrint) StateTransition(eu.ggnet.statemachine.StateTransition) RedTapeStateTransition(eu.ggnet.dwoss.redtapext.ee.state.RedTapeStateTransition) RedTapeWorker(eu.ggnet.dwoss.redtapext.ee.RedTapeWorker) CustomerDocument(eu.ggnet.dwoss.redtapext.ee.state.CustomerDocument)

Aggregations

Reply (eu.ggnet.saft.api.Reply)14 Dl (eu.ggnet.saft.Dl)10 Ui (eu.ggnet.saft.Ui)9 Guardian (eu.ggnet.saft.core.auth.Guardian)6 ActionEvent (java.awt.event.ActionEvent)6 ReplyUtil (eu.ggnet.dwoss.common.ReplyUtil)5 UniqueUnitAgent (eu.ggnet.dwoss.uniqueunit.ee.UniqueUnitAgent)5 Product (eu.ggnet.dwoss.uniqueunit.ee.entity.Product)5 AccessableAction (eu.ggnet.saft.core.auth.AccessableAction)5 java.util (java.util)5 TextInputDialog (javafx.scene.control.TextInputDialog)5 UniqueUnit (eu.ggnet.dwoss.uniqueunit.ee.entity.UniqueUnit)4 PicoProduct (eu.ggnet.dwoss.uniqueunit.api.PicoProduct)3 PicoUnit (eu.ggnet.dwoss.uniqueunit.api.PicoUnit)3 StringUtils (org.apache.commons.lang3.StringUtils)3 Logger (org.slf4j.Logger)3 LoggerFactory (org.slf4j.LoggerFactory)3 CustomerMetaData (eu.ggnet.dwoss.customer.opi.CustomerMetaData)2 UnitDestroyer (eu.ggnet.dwoss.receipt.ee.UnitDestroyer)2 Document (eu.ggnet.dwoss.redtape.ee.entity.Document)2