CleanUp
This commit is contained in:
@@ -9,7 +9,6 @@ import de.assecutor.votianlt.model.CargoItem;
|
|||||||
import de.assecutor.votianlt.model.Job;
|
import de.assecutor.votianlt.model.Job;
|
||||||
import de.assecutor.votianlt.model.task.BaseTask;
|
import de.assecutor.votianlt.model.task.BaseTask;
|
||||||
import de.assecutor.votianlt.pages.service.AppUserService;
|
import de.assecutor.votianlt.pages.service.AppUserService;
|
||||||
import de.assecutor.votianlt.pages.service.UserService;
|
|
||||||
import de.assecutor.votianlt.repository.AppUserRepository;
|
import de.assecutor.votianlt.repository.AppUserRepository;
|
||||||
import de.assecutor.votianlt.repository.CargoItemRepository;
|
import de.assecutor.votianlt.repository.CargoItemRepository;
|
||||||
import de.assecutor.votianlt.repository.JobRepository;
|
import de.assecutor.votianlt.repository.JobRepository;
|
||||||
@@ -71,7 +70,6 @@ public class MessageController {
|
|||||||
private final JobHistoryService jobHistoryService;
|
private final JobHistoryService jobHistoryService;
|
||||||
private final EmailService emailService;
|
private final EmailService emailService;
|
||||||
private final MessageService messageService;
|
private final MessageService messageService;
|
||||||
private final UserService userService;
|
|
||||||
private final ObjectMapper objectMapper;
|
private final ObjectMapper objectMapper;
|
||||||
private final ClientConnectionService clientConnectionService;
|
private final ClientConnectionService clientConnectionService;
|
||||||
|
|
||||||
@@ -79,7 +77,7 @@ public class MessageController {
|
|||||||
AppUserService appUserService, JobRepository jobRepository, CargoItemRepository cargoItemRepository,
|
AppUserService appUserService, JobRepository jobRepository, CargoItemRepository cargoItemRepository,
|
||||||
TaskRepository taskRepository, PhotoRepository photoRepository, BarcodeRepository barcodeRepository,
|
TaskRepository taskRepository, PhotoRepository photoRepository, BarcodeRepository barcodeRepository,
|
||||||
SignatureRepository signatureRepository, CommentRepository commentRepository, JobHistoryService jobHistoryService,
|
SignatureRepository signatureRepository, CommentRepository commentRepository, JobHistoryService jobHistoryService,
|
||||||
EmailService emailService, MessageService messageService, UserService userService, ObjectMapper objectMapper,
|
EmailService emailService, MessageService messageService, ObjectMapper objectMapper,
|
||||||
ClientConnectionService clientConnectionService) {
|
ClientConnectionService clientConnectionService) {
|
||||||
this.mqttPublisher = mqttPublisher;
|
this.mqttPublisher = mqttPublisher;
|
||||||
this.appUserRepository = appUserRepository;
|
this.appUserRepository = appUserRepository;
|
||||||
@@ -94,7 +92,6 @@ public class MessageController {
|
|||||||
this.jobHistoryService = jobHistoryService;
|
this.jobHistoryService = jobHistoryService;
|
||||||
this.emailService = emailService;
|
this.emailService = emailService;
|
||||||
this.messageService = messageService;
|
this.messageService = messageService;
|
||||||
this.userService = userService;
|
|
||||||
this.objectMapper = objectMapper;
|
this.objectMapper = objectMapper;
|
||||||
this.clientConnectionService = clientConnectionService;
|
this.clientConnectionService = clientConnectionService;
|
||||||
}
|
}
|
||||||
@@ -483,10 +480,6 @@ public class MessageController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void completeTask(Object tid) {
|
|
||||||
completeTaskWithHistory(tid, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void completeTaskWithHistory(Object tid, String extraDataSummary) {
|
private void completeTaskWithHistory(Object tid, String extraDataSummary) {
|
||||||
String taskIdStr = tid.toString();
|
String taskIdStr = tid.toString();
|
||||||
try {
|
try {
|
||||||
@@ -615,13 +608,6 @@ public class MessageController {
|
|||||||
return userClientIdMapping.get(userId);
|
return userClientIdMapping.get(userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the userId (AppUser ID) for a given clientId
|
|
||||||
*/
|
|
||||||
private String getUserIdForClientId(String clientId) {
|
|
||||||
return clientIdUserMapping.get(clientId);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle pong response from a client.
|
* Handle pong response from a client.
|
||||||
* Client sends to /server/{clientId}/pong with payload { timestamp }.
|
* Client sends to /server/{clientId}/pong with payload { timestamp }.
|
||||||
|
|||||||
@@ -32,9 +32,7 @@ public class MqttMessagingPlugin implements MessagingPlugin {
|
|||||||
|
|
||||||
// Topic templates
|
// Topic templates
|
||||||
private static final String TOPIC_TO_CLIENT = "/client/%s/%s"; // /client/{clientId}/{messageType}
|
private static final String TOPIC_TO_CLIENT = "/client/%s/%s"; // /client/{clientId}/{messageType}
|
||||||
private static final String TOPIC_FROM_CLIENT = "/server/%s/%s"; // /server/{clientId}/{messageType}
|
|
||||||
private static final String TOPIC_ACK_TO_CLIENT = "/client/%s/ack"; // /client/{clientId}/ack (messageId in payload)
|
private static final String TOPIC_ACK_TO_CLIENT = "/client/%s/ack"; // /client/{clientId}/ack (messageId in payload)
|
||||||
private static final String TOPIC_ACK_FROM_CLIENT = "/server/%s/ack"; // /server/{clientId}/ack (messageId in payload)
|
|
||||||
|
|
||||||
// Subscription patterns
|
// Subscription patterns
|
||||||
private static final String PATTERN_FROM_CLIENT = "/server/+/%s"; // /server/+/{messageType}
|
private static final String PATTERN_FROM_CLIENT = "/server/+/%s"; // /server/+/{messageType}
|
||||||
@@ -52,7 +50,6 @@ public class MqttMessagingPlugin implements MessagingPlugin {
|
|||||||
private static final String CONFIG_USERNAME = "username";
|
private static final String CONFIG_USERNAME = "username";
|
||||||
private static final String CONFIG_PASSWORD = "password";
|
private static final String CONFIG_PASSWORD = "password";
|
||||||
private static final String CONFIG_CLIENT_ID = "client.id";
|
private static final String CONFIG_CLIENT_ID = "client.id";
|
||||||
private static final String CONFIG_AUTO_RECONNECT = "auto.reconnect";
|
|
||||||
private static final String CONFIG_CLEAN_START = "clean.start";
|
private static final String CONFIG_CLEAN_START = "clean.start";
|
||||||
private static final String CONFIG_CONNECTION_TIMEOUT = "connection.timeout.seconds";
|
private static final String CONFIG_CONNECTION_TIMEOUT = "connection.timeout.seconds";
|
||||||
private static final String CONFIG_KEEP_ALIVE = "keep.alive.seconds";
|
private static final String CONFIG_KEEP_ALIVE = "keep.alive.seconds";
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import org.springframework.data.mongodb.core.mapping.Document;
|
|||||||
import org.bson.types.ObjectId;
|
import org.bson.types.ObjectId;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Photo entity for storing photo data from task completions. References the job
|
* Photo entity for storing photo data from task completions. References the job
|
||||||
|
|||||||
@@ -43,13 +43,23 @@ class MqttPublisherImpl implements MqttPublisher {
|
|||||||
@Override
|
@Override
|
||||||
public void publishAsJson(String topic, Object payload, boolean retained) {
|
public void publishAsJson(String topic, Object payload, boolean retained) {
|
||||||
try {
|
try {
|
||||||
|
// Parse topic to extract clientId and messageType
|
||||||
|
// Expected format: /client/{clientId}/{messageType}
|
||||||
|
String[] parts = topic.split("/");
|
||||||
|
if (parts.length < 4 || !"client".equals(parts[1])) {
|
||||||
|
log.warn("Invalid topic format: {}. Expected /client/{clientId}/{messageType}", topic);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String clientId = parts[2];
|
||||||
|
String messageType = parts[3];
|
||||||
|
|
||||||
// Use MessageDeliveryService for reliable delivery
|
// Use MessageDeliveryService for reliable delivery
|
||||||
DeliveryOptions options = DeliveryOptions.builder()
|
DeliveryOptions options = DeliveryOptions.builder()
|
||||||
.requiresAck(true)
|
.requiresAck(true)
|
||||||
.retained(retained)
|
.retained(retained)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
deliveryService.sendMessage(topic, payload, options)
|
deliveryService.sendToClient(clientId, messageType, payload, options)
|
||||||
.thenAccept(receipt -> {
|
.thenAccept(receipt -> {
|
||||||
log.info("=== MESSAGE DELIVERY SUBMITTED ===");
|
log.info("=== MESSAGE DELIVERY SUBMITTED ===");
|
||||||
log.info("Topic: {}", topic);
|
log.info("Topic: {}", topic);
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import static com.vaadin.flow.theme.lumo.LumoUtility.*;
|
import static com.vaadin.flow.theme.lumo.LumoUtility.*;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
@AnonymousAllowed
|
@AnonymousAllowed
|
||||||
@Slf4j
|
@Slf4j
|
||||||
|
|||||||
@@ -25,8 +25,6 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||||||
@Route(value = "add-app-user", layout = de.assecutor.votianlt.pages.base.ui.view.MainLayout.class)
|
@Route(value = "add-app-user", layout = de.assecutor.votianlt.pages.base.ui.view.MainLayout.class)
|
||||||
@RolesAllowed({ "USER", "ADMIN" })
|
@RolesAllowed({ "USER", "ADMIN" })
|
||||||
public class AddAppUserView extends VerticalLayout {
|
public class AddAppUserView extends VerticalLayout {
|
||||||
|
|
||||||
private final AppUserService appUserService;
|
|
||||||
private final Binder<AppUser> binder = new Binder<>(AppUser.class);
|
private final Binder<AppUser> binder = new Binder<>(AppUser.class);
|
||||||
|
|
||||||
// Form fields
|
// Form fields
|
||||||
@@ -40,7 +38,6 @@ public class AddAppUserView extends VerticalLayout {
|
|||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public AddAppUserView(AppUserService appUserService) {
|
public AddAppUserView(AppUserService appUserService) {
|
||||||
this.appUserService = appUserService;
|
|
||||||
setSizeFull();
|
setSizeFull();
|
||||||
setPadding(true);
|
setPadding(true);
|
||||||
setSpacing(true);
|
setSpacing(true);
|
||||||
@@ -182,10 +179,6 @@ public class AddAppUserView extends VerticalLayout {
|
|||||||
AppUser newAppUser = new AppUser();
|
AppUser newAppUser = new AppUser();
|
||||||
binder.writeBean(newAppUser);
|
binder.writeBean(newAppUser);
|
||||||
|
|
||||||
// Save AppUser first to get the ObjectId
|
|
||||||
AppUser savedUser = appUserService.createAppUser(newAppUser);
|
|
||||||
|
|
||||||
|
|
||||||
// Show success message
|
// Show success message
|
||||||
Notification.show("App-Nutzer erfolgreich angelegt", 3000, Notification.Position.MIDDLE);
|
Notification.show("App-Nutzer erfolgreich angelegt", 3000, Notification.Position.MIDDLE);
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,6 @@ import de.assecutor.votianlt.model.task.BarcodeTask;
|
|||||||
import de.assecutor.votianlt.model.task.CommentTask;
|
import de.assecutor.votianlt.model.task.CommentTask;
|
||||||
import de.assecutor.votianlt.pages.service.AddJobService;
|
import de.assecutor.votianlt.pages.service.AddJobService;
|
||||||
import de.assecutor.votianlt.pages.service.CustomerService;
|
import de.assecutor.votianlt.pages.service.CustomerService;
|
||||||
import de.assecutor.votianlt.pages.base.ui.component.ViewToolbar;
|
|
||||||
import de.assecutor.votianlt.pages.service.AddCustomerService;
|
import de.assecutor.votianlt.pages.service.AddCustomerService;
|
||||||
import de.assecutor.votianlt.model.Customer;
|
import de.assecutor.votianlt.model.Customer;
|
||||||
import de.assecutor.votianlt.pages.service.AppUserService;
|
import de.assecutor.votianlt.pages.service.AppUserService;
|
||||||
@@ -854,7 +853,9 @@ public class AddJobView extends Main {
|
|||||||
binder.bind(deliveryPhone, Job::getDeliveryPhone, Job::setDeliveryPhone);
|
binder.bind(deliveryPhone, Job::getDeliveryPhone, Job::setDeliveryPhone);
|
||||||
binder.bind(deliveryAddressAddition, Job::getDeliveryAddressAddition, Job::setDeliveryAddressAddition);
|
binder.bind(deliveryAddressAddition, Job::getDeliveryAddressAddition, Job::setDeliveryAddressAddition);
|
||||||
|
|
||||||
binder.bind(digitalProcessing, Job::isDigitalProcessing, Job::setDigitalProcessing);
|
binder.forField(digitalProcessing).bind(
|
||||||
|
Job::isDigitalProcessing,
|
||||||
|
(job, value) -> job.setDigitalProcessing(Boolean.TRUE.equals(value)));
|
||||||
|
|
||||||
// Bind appUser with converter: AppUser object <-> String ID
|
// Bind appUser with converter: AppUser object <-> String ID
|
||||||
binder.forField(appUser).withConverter(
|
binder.forField(appUser).withConverter(
|
||||||
@@ -1972,6 +1973,9 @@ public class AddJobView extends Main {
|
|||||||
|
|
||||||
configContainer.add(barcodeLayout);
|
configContainer.add(barcodeLayout);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
throw new IllegalArgumentException("Unbekannter TaskType: " + taskType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2245,9 +2249,6 @@ public class AddJobView extends Main {
|
|||||||
taskContainer.add(taskTypeCombo, configContainer);
|
taskContainer.add(taskTypeCombo, configContainer);
|
||||||
taskContainer.add(deleteXButton);
|
taskContainer.add(deleteXButton);
|
||||||
|
|
||||||
// The task is already in tasksState from loadTasksFromTemplate
|
|
||||||
// Find the index and use it for the UI
|
|
||||||
int taskIndex = tasksState.size() - 1; // This should be the last added task
|
|
||||||
final BaseTask[] currentTask = { task };
|
final BaseTask[] currentTask = { task };
|
||||||
|
|
||||||
// Set up the value change listener for the combo box
|
// Set up the value change listener for the combo box
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package de.assecutor.votianlt.pages.view;
|
package de.assecutor.votianlt.pages.view;
|
||||||
|
|
||||||
import com.vaadin.flow.component.button.Button;
|
|
||||||
import com.vaadin.flow.component.button.ButtonVariant;
|
|
||||||
import com.vaadin.flow.component.html.Div;
|
import com.vaadin.flow.component.html.Div;
|
||||||
import com.vaadin.flow.component.html.H1;
|
import com.vaadin.flow.component.html.H1;
|
||||||
import com.vaadin.flow.component.html.H3;
|
import com.vaadin.flow.component.html.H3;
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import com.vaadin.flow.router.Route;
|
|||||||
import de.assecutor.votianlt.model.PriceTable;
|
import de.assecutor.votianlt.model.PriceTable;
|
||||||
import de.assecutor.votianlt.pages.base.ui.view.AdminLayout;
|
import de.assecutor.votianlt.pages.base.ui.view.AdminLayout;
|
||||||
import de.assecutor.votianlt.repository.PriceTableRepository;
|
import de.assecutor.votianlt.repository.PriceTableRepository;
|
||||||
import de.assecutor.votianlt.security.SecurityService;
|
|
||||||
import jakarta.annotation.security.RolesAllowed;
|
import jakarta.annotation.security.RolesAllowed;
|
||||||
|
|
||||||
@Route(value = "admin-price-table", layout = AdminLayout.class)
|
@Route(value = "admin-price-table", layout = AdminLayout.class)
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import com.vaadin.flow.router.PageTitle;
|
|||||||
import com.vaadin.flow.router.Route;
|
import com.vaadin.flow.router.Route;
|
||||||
import com.vaadin.flow.theme.lumo.LumoUtility;
|
import com.vaadin.flow.theme.lumo.LumoUtility;
|
||||||
import de.assecutor.votianlt.model.Customer;
|
import de.assecutor.votianlt.model.Customer;
|
||||||
import de.assecutor.votianlt.pages.base.ui.component.ViewToolbar;
|
|
||||||
import de.assecutor.votianlt.pages.service.CustomerService;
|
import de.assecutor.votianlt.pages.service.CustomerService;
|
||||||
|
|
||||||
import java.time.Clock;
|
import java.time.Clock;
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ import com.vaadin.flow.component.orderedlayout.VerticalLayout;
|
|||||||
import com.vaadin.flow.component.UI;
|
import com.vaadin.flow.component.UI;
|
||||||
import com.vaadin.flow.component.textfield.EmailField;
|
import com.vaadin.flow.component.textfield.EmailField;
|
||||||
import com.vaadin.flow.component.textfield.TextField;
|
import com.vaadin.flow.component.textfield.TextField;
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -219,7 +218,9 @@ public class EditProfileView extends HorizontalLayout {
|
|||||||
binder.forField(faxField).bind(User::getFax, User::setFax);
|
binder.forField(faxField).bind(User::getFax, User::setFax);
|
||||||
|
|
||||||
// Abweichende Rechnungsadresse binden
|
// Abweichende Rechnungsadresse binden
|
||||||
binder.forField(diffInvoiceAddress).bind(User::isDiffInvoiceAddress, User::setDiffInvoiceAddress);
|
binder.forField(diffInvoiceAddress).bind(
|
||||||
|
User::isDiffInvoiceAddress,
|
||||||
|
(user, value) -> user.setDiffInvoiceAddress(Boolean.TRUE.equals(value)));
|
||||||
binder.forField(invCompanyField).bind(User::getInvCompany, User::setInvCompany);
|
binder.forField(invCompanyField).bind(User::getInvCompany, User::setInvCompany);
|
||||||
binder.forField(invCompanyAddField).bind(User::getInvCompanyAddition, User::setInvCompanyAddition);
|
binder.forField(invCompanyAddField).bind(User::getInvCompanyAddition, User::setInvCompanyAddition);
|
||||||
binder.forField(invFirstnameField).bind(User::getInvFirstname, User::setInvFirstname);
|
binder.forField(invFirstnameField).bind(User::getInvFirstname, User::setInvFirstname);
|
||||||
|
|||||||
@@ -50,7 +50,6 @@ import org.bson.types.ObjectId;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
@Route(value = "job_summary", layout = de.assecutor.votianlt.pages.base.ui.view.MainLayout.class)
|
@Route(value = "job_summary", layout = de.assecutor.votianlt.pages.base.ui.view.MainLayout.class)
|
||||||
@PageTitle("Zusammenfassung")
|
@PageTitle("Zusammenfassung")
|
||||||
@@ -66,7 +65,6 @@ public class JobSummaryView extends Main implements HasUrlParameter<String> {
|
|||||||
private final PhotoRepository photoRepository;
|
private final PhotoRepository photoRepository;
|
||||||
private final CommentRepository commentRepository;
|
private final CommentRepository commentRepository;
|
||||||
private final AppUserService appUserService;
|
private final AppUserService appUserService;
|
||||||
private final MessageService messageService;
|
|
||||||
|
|
||||||
private final VerticalLayout content;
|
private final VerticalLayout content;
|
||||||
private final List<Div> taskCards = new ArrayList<>();
|
private final List<Div> taskCards = new ArrayList<>();
|
||||||
@@ -83,7 +81,6 @@ public class JobSummaryView extends Main implements HasUrlParameter<String> {
|
|||||||
this.photoRepository = photoRepository;
|
this.photoRepository = photoRepository;
|
||||||
this.commentRepository = commentRepository;
|
this.commentRepository = commentRepository;
|
||||||
this.appUserService = appUserService;
|
this.appUserService = appUserService;
|
||||||
this.messageService = messageService;
|
|
||||||
|
|
||||||
setSizeFull();
|
setSizeFull();
|
||||||
addClassNames(LumoUtility.BoxSizing.BORDER, LumoUtility.Display.FLEX, LumoUtility.FlexDirection.COLUMN,
|
addClassNames(LumoUtility.BoxSizing.BORDER, LumoUtility.Display.FLEX, LumoUtility.FlexDirection.COLUMN,
|
||||||
@@ -142,9 +139,6 @@ public class JobSummaryView extends Main implements HasUrlParameter<String> {
|
|||||||
String appUserId = job.getAppUser();
|
String appUserId = job.getAppUser();
|
||||||
String jobNumber = job.getJobNumber() != null ? job.getJobNumber() : job.getId().toHexString();
|
String jobNumber = job.getJobNumber() != null ? job.getJobNumber() : job.getId().toHexString();
|
||||||
|
|
||||||
// Check if messages exist for this job
|
|
||||||
List<de.assecutor.votianlt.model.Message> existingMessages = messageService.getMessagesForJob(job.getId());
|
|
||||||
|
|
||||||
// Navigate to message details view with job conversation
|
// Navigate to message details view with job conversation
|
||||||
// Format: message-details/{clientId}/job-{jobNumber}
|
// Format: message-details/{clientId}/job-{jobNumber}
|
||||||
String conversationId = "job-" + jobNumber;
|
String conversationId = "job-" + jobNumber;
|
||||||
@@ -541,7 +535,7 @@ public class JobSummaryView extends Main implements HasUrlParameter<String> {
|
|||||||
if (confirmationTask.getButtonText() != null && !confirmationTask.getButtonText().isBlank()) {
|
if (confirmationTask.getButtonText() != null && !confirmationTask.getButtonText().isBlank()) {
|
||||||
content.add(new Span("Button-Text: " + confirmationTask.getButtonText()));
|
content.add(new Span("Button-Text: " + confirmationTask.getButtonText()));
|
||||||
}
|
}
|
||||||
} else if (task instanceof SignatureTask signatureTask) {
|
} else if (task instanceof SignatureTask) {
|
||||||
content.add(new Span("Unterschrift erforderlich"));
|
content.add(new Span("Unterschrift erforderlich"));
|
||||||
|
|
||||||
// Show signature if task is completed
|
// Show signature if task is completed
|
||||||
@@ -578,7 +572,7 @@ public class JobSummaryView extends Main implements HasUrlParameter<String> {
|
|||||||
log.debug("Failed to load signature for task {}: {}", task.getId(), e.getMessage());
|
log.debug("Failed to load signature for task {}: {}", task.getId(), e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (task instanceof BarcodeTask barcodeTask) {
|
} else if (task instanceof BarcodeTask) {
|
||||||
content.add(new Span("Barcode-Scan erforderlich"));
|
content.add(new Span("Barcode-Scan erforderlich"));
|
||||||
|
|
||||||
// Show barcodes if task is completed
|
// Show barcodes if task is completed
|
||||||
|
|||||||
@@ -37,7 +37,6 @@ import de.assecutor.votianlt.model.MessageType;
|
|||||||
import de.assecutor.votianlt.pages.service.AppUserService;
|
import de.assecutor.votianlt.pages.service.AppUserService;
|
||||||
import de.assecutor.votianlt.service.MessageBroadcaster;
|
import de.assecutor.votianlt.service.MessageBroadcaster;
|
||||||
import de.assecutor.votianlt.service.MessageService;
|
import de.assecutor.votianlt.service.MessageService;
|
||||||
import de.assecutor.votianlt.security.SecurityService;
|
|
||||||
import de.assecutor.votianlt.event.MessageReadStatusChangedEvent;
|
import de.assecutor.votianlt.event.MessageReadStatusChangedEvent;
|
||||||
import org.springframework.context.ApplicationEventPublisher;
|
import org.springframework.context.ApplicationEventPublisher;
|
||||||
import jakarta.annotation.security.RolesAllowed;
|
import jakarta.annotation.security.RolesAllowed;
|
||||||
@@ -75,7 +74,6 @@ public class MessageDetailsView extends Main implements BeforeEnterObserver {
|
|||||||
|
|
||||||
private final AppUserService appUserService;
|
private final AppUserService appUserService;
|
||||||
private final MessageService messageService;
|
private final MessageService messageService;
|
||||||
private final SecurityService securityService;
|
|
||||||
private final MessageBroadcaster messageBroadcaster;
|
private final MessageBroadcaster messageBroadcaster;
|
||||||
private final ApplicationEventPublisher eventPublisher;
|
private final ApplicationEventPublisher eventPublisher;
|
||||||
|
|
||||||
@@ -98,11 +96,10 @@ public class MessageDetailsView extends Main implements BeforeEnterObserver {
|
|||||||
private static final float JPEG_COMPRESSION_QUALITY = 0.8f;
|
private static final float JPEG_COMPRESSION_QUALITY = 0.8f;
|
||||||
|
|
||||||
public MessageDetailsView(AppUserService appUserService, MessageService messageService,
|
public MessageDetailsView(AppUserService appUserService, MessageService messageService,
|
||||||
SecurityService securityService, MessageBroadcaster messageBroadcaster,
|
MessageBroadcaster messageBroadcaster,
|
||||||
ApplicationEventPublisher eventPublisher) {
|
ApplicationEventPublisher eventPublisher) {
|
||||||
this.appUserService = appUserService;
|
this.appUserService = appUserService;
|
||||||
this.messageService = messageService;
|
this.messageService = messageService;
|
||||||
this.securityService = securityService;
|
|
||||||
this.messageBroadcaster = messageBroadcaster;
|
this.messageBroadcaster = messageBroadcaster;
|
||||||
this.eventPublisher = eventPublisher;
|
this.eventPublisher = eventPublisher;
|
||||||
|
|
||||||
@@ -800,9 +797,6 @@ public class MessageDetailsView extends Main implements BeforeEnterObserver {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
String sender = Optional.ofNullable(securityService.getCurrentUsername()).filter(name -> !name.isBlank())
|
|
||||||
.orElse("System");
|
|
||||||
|
|
||||||
ensureJobContextForConversation(currentMessages);
|
ensureJobContextForConversation(currentMessages);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ import com.vaadin.flow.router.Route;
|
|||||||
import de.assecutor.votianlt.model.Job;
|
import de.assecutor.votianlt.model.Job;
|
||||||
import de.assecutor.votianlt.model.JobStatus;
|
import de.assecutor.votianlt.model.JobStatus;
|
||||||
import de.assecutor.votianlt.repository.JobRepository;
|
import de.assecutor.votianlt.repository.JobRepository;
|
||||||
import de.assecutor.votianlt.security.SecurityService;
|
|
||||||
import jakarta.annotation.security.RolesAllowed;
|
import jakarta.annotation.security.RolesAllowed;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
||||||
@@ -29,13 +28,11 @@ public class ShowJobsView extends VerticalLayout {
|
|||||||
private final TextField searchField = new TextField("Auftragsnummer suchen");
|
private final TextField searchField = new TextField("Auftragsnummer suchen");
|
||||||
private final ComboBox<String> statusFilter = new ComboBox<>("Status");
|
private final ComboBox<String> statusFilter = new ComboBox<>("Status");
|
||||||
private final JobRepository jobRepository;
|
private final JobRepository jobRepository;
|
||||||
private final SecurityService securityService;
|
|
||||||
private final Grid<Job> grid = new Grid<>(Job.class, false);
|
private final Grid<Job> grid = new Grid<>(Job.class, false);
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public ShowJobsView(JobRepository jobRepository, SecurityService securityService) {
|
public ShowJobsView(JobRepository jobRepository) {
|
||||||
this.jobRepository = jobRepository;
|
this.jobRepository = jobRepository;
|
||||||
this.securityService = securityService;
|
|
||||||
setSizeFull();
|
setSizeFull();
|
||||||
setPadding(true);
|
setPadding(true);
|
||||||
setSpacing(true);
|
setSpacing(true);
|
||||||
|
|||||||
@@ -8,8 +8,6 @@ import org.springframework.stereotype.Service;
|
|||||||
import com.itextpdf.html2pdf.HtmlConverter;
|
import com.itextpdf.html2pdf.HtmlConverter;
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.nio.file.Paths;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
@@ -160,8 +158,6 @@ public class CustomerInvoiceService {
|
|||||||
|
|
||||||
private String fillCustomerInvoiceHtmlWithInvoiceData(String html, CustomerInvoiceData data) {
|
private String fillCustomerInvoiceHtmlWithInvoiceData(String html, CustomerInvoiceData data) {
|
||||||
String filledHtml = html;
|
String filledHtml = html;
|
||||||
NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(Locale.GERMANY);
|
|
||||||
|
|
||||||
// Replace invoice header data
|
// Replace invoice header data
|
||||||
filledHtml = filledHtml.replace("${invoiceData.invoiceNumber}", nvl(data.getInvoiceNumber()));
|
filledHtml = filledHtml.replace("${invoiceData.invoiceNumber}", nvl(data.getInvoiceNumber()));
|
||||||
filledHtml = filledHtml.replace("${invoiceData.invoiceDate}", nvl(data.getFormattedInvoiceDate()));
|
filledHtml = filledHtml.replace("${invoiceData.invoiceDate}", nvl(data.getFormattedInvoiceDate()));
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
package de.assecutor.votianlt.service;
|
package de.assecutor.votianlt.service;
|
||||||
|
|
||||||
import de.assecutor.votianlt.model.AppUser;
|
|
||||||
import de.assecutor.votianlt.model.Job;
|
import de.assecutor.votianlt.model.Job;
|
||||||
import de.assecutor.votianlt.model.User;
|
import de.assecutor.votianlt.model.User;
|
||||||
import de.assecutor.votianlt.repository.AppUserRepository;
|
|
||||||
import de.assecutor.votianlt.repository.JobRepository;
|
import de.assecutor.votianlt.repository.JobRepository;
|
||||||
import de.assecutor.votianlt.repository.TaskRepository;
|
import de.assecutor.votianlt.repository.TaskRepository;
|
||||||
import de.assecutor.votianlt.repository.UserRepository;
|
import de.assecutor.votianlt.repository.UserRepository;
|
||||||
@@ -21,8 +19,6 @@ import java.util.Optional;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class EmailService {
|
public class EmailService {
|
||||||
|
|
||||||
private final AppUserRepository appUserRepository;
|
|
||||||
private final UserRepository userRepository;
|
private final UserRepository userRepository;
|
||||||
private final JobRepository jobRepository;
|
private final JobRepository jobRepository;
|
||||||
private final TaskRepository taskRepository;
|
private final TaskRepository taskRepository;
|
||||||
|
|||||||
Reference in New Issue
Block a user