Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ru.pochta.abon.ui.view;
- import com.vaadin.navigator.View;
- import com.vaadin.navigator.ViewChangeListener;
- import com.vaadin.shared.ui.MarginInfo;
- import com.vaadin.shared.ui.label.ContentMode;
- import com.vaadin.spring.annotation.SpringView;
- import com.vaadin.ui.*;
- import org.apache.commons.lang3.exception.ExceptionUtils;
- import org.apache.log4j.Logger;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.MessageSource;
- import ru.pochta.abon.container.Container;
- import ru.pochta.abon.container.ReserveOperation;
- import ru.pochta.abon.library.dto.abonClient.dto.*;
- import ru.pochta.abon.library.dto.abonClient.enumeration.ClaimStatusEnum;
- import ru.pochta.abon.library.dto.abonClient.enumeration.PaymentTypeEnum;
- import ru.pochta.abon.library.dto.abonClient.util.AbstractEntityUtil;
- import ru.pochta.abon.library.service.abonClient.ClaimService;
- import ru.pochta.abon.library.service.abonClient.ServiceManager;
- import ru.pochta.abon.library.service.abonClient.exception.RestException;
- import ru.pochta.abon.library.service.reporting.PrintableForm;
- import ru.pochta.abon.service.notification.MailService;
- import ru.pochta.abon.service.notification.NotificationService;
- import ru.pochta.abon.service.notification.SendEmailRunnable;
- import ru.pochta.abon.service.notification.SendSmsRunnable;
- import ru.pochta.abon.ui.component.AbonHeader;
- import ru.pochta.abon.ui.component.BoxReservationButtons;
- import ru.pochta.abon.ui.component.BoxReservationHeader;
- import ru.pochta.abon.ui.window.ConfirmationDialog;
- import ru.pochta.abon.util.ClaimHelper;
- import ru.pochta.abon.util.ExceptionNotificationUtil;
- import ru.pochta.abon.util.Helper;
- import javax.annotation.PostConstruct;
- import java.time.ZonedDateTime;
- import java.time.format.DateTimeFormatter;
- import java.util.List;
- import java.util.StringJoiner;
- import static ru.pochta.abon.payments.PaymentProcessor.createPayment;
- import static ru.pochta.abon.payments.PaymentProcessor.sendToEAS;
- @SpringView(name = BoxReservationThirdStepView.VIEW_NAME)
- public class BoxReservationThirdStepView extends VerticalLayout implements View {
- public static final String VIEW_NAME = "boxReservationThirdStep";
- public static final int STEP_NUMBER = 3;
- private static final Logger LOG = Logger.getLogger(BoxReservationThirdStepView.class);
- @Autowired
- private MessageSource messageSource;
- @Autowired
- private Container container;
- @Autowired
- private ServiceManager serviceManager;
- @Autowired
- private NotificationService notificationService;
- @Autowired
- private MailService mailService;
- @Autowired
- private PrintableForm printableForm;
- private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");
- private Claim claim;
- private Client client;
- private ReserveOperation reserveOperation;
- private String claimId;
- private String totalCost;
- @PostConstruct
- void init() {
- setSizeFull();
- setSpacing(true);
- addStyleName("light");
- }
- @Override
- public void enter(ViewChangeListener.ViewChangeEvent viewChangeEvent) {
- claim = container.getReserveOperation().getClaim();
- client = claim.getClient();
- reserveOperation = container.getReserveOperation();
- if (claim != null) {
- claimId = claim.getEntityId().toString();
- totalCost = claim.getTotalCost().toString();
- }
- addComponents();
- }
- private void addComponents() {
- addPostOfficeCardHeader();
- addBoxReservationHeader();
- addMainLayout();
- addReservationButtons();
- }
- private void addPostOfficeCardHeader() {
- AbonHeader header = new AbonHeader(container, messageSource, serviceManager, null, false);
- addComponent(header);
- setExpandRatio(header, 0.1f);
- }
- private void addBoxReservationHeader() {
- BoxReservationHeader boxReservationHeader =
- new BoxReservationHeader(STEP_NUMBER,
- messageSource.getMessage("reserveBoxView.headerString", null, getLocale()),
- claimId);
- addComponent(boxReservationHeader);
- setExpandRatio(boxReservationHeader, 0.05f);
- }
- private void addMainLayout() {
- VerticalLayout mainLayout = new VerticalLayout();
- mainLayout.setMargin(new MarginInfo(false, true, false, true));
- mainLayout.setSizeFull();
- addComponent(mainLayout);
- setExpandRatio(mainLayout, 0.75f);
- setComponentAlignment(mainLayout, Alignment.MIDDLE_CENTER);
- FormLayout payForm = new FormLayout();
- TextField claimNumber = new TextField(messageSource.getMessage("abonThirdStep.claimNumber", null, getLocale()), claimId);
- claimNumber.setEnabled(false);
- payForm.addComponent(claimNumber);
- TextField totalPrice = new TextField(messageSource.getMessage("abonThirdStep.totalPrice", null, getLocale()), totalCost);
- payForm.addComponent(totalPrice);
- totalPrice.setEnabled(false);
- mainLayout.addComponent(payForm);
- }
- private void addReservationButtons() {
- BoxReservationButtons reservationButtons = getNavigationButtons();
- reservationButtons.setNextButtonEnabled(false);
- reservationButtons.setBackButtonEventListener(clickEvent -> {
- ConfirmationDialog dialog = Helper
- .checkIfClaimIsOutOfEditingModeOrCancelledAndRedirectToClaims(
- claim,
- container,
- serviceManager,
- messageSource,
- getLocale(),
- getUI()
- );
- if (dialog != null) {
- getUI().addWindow(dialog);
- return;
- }
- // we didn't quit editing mode if we got there
- Helper.updateClaimJustToHaveActualUpdateTime(claim, serviceManager, messageSource, getLocale(), getUI());
- getUI().getNavigator().navigateTo(BoxReservationSecondStepView.VIEW_NAME);
- });
- reservationButtons.setSaveButtonEventListener(clickEvent -> {
- ConfirmationDialog dialog = Helper
- .checkIfClaimIsOutOfEditingModeOrCancelledAndRedirectToClaims(
- claim,
- container,
- serviceManager,
- messageSource,
- getLocale(),
- getUI()
- );
- if (dialog != null) {
- getUI().addWindow(dialog);
- return;
- }
- // we didn't quit editing mode if we got there
- // reflect that the claim isn't in editing any longer
- if (claim != null) {
- Claim tempClaim = AbstractEntityUtil.createTempEntity(claim, Claim.class);
- tempClaim.setInEditing(false);
- try {
- serviceManager.getClaimService().update(tempClaim);
- } catch (RestException e) {
- e.printStackTrace();
- }
- } else {
- LOG.warn("claim is null");
- }
- getUI().getNavigator().navigateTo(PostOfficeCardView.VIEW_NAME);
- });
- reservationButtons.setCancelButtonEventListener(clickEvent -> {
- ConfirmationDialog dialog = Helper
- .checkIfClaimIsOutOfEditingModeOrCancelledAndRedirectToClaims(
- claim,
- container,
- serviceManager,
- messageSource,
- getLocale(),
- getUI()
- );
- if (dialog != null) {
- getUI().addWindow(dialog);
- return;
- }
- // we didn't quit editing mode if we got there
- ConfirmationDialog confirmationDialog = new ConfirmationDialog(
- messageSource.getMessage("abonFirstStep.CancelReservationCaption", null, getLocale()),
- messageSource.getMessage("abonFirstStep.CancelReservationQuestion", null, getLocale()),
- messageSource.getMessage("button.yes", null, getLocale()),
- messageSource.getMessage("button.no", null, getLocale())
- );
- confirmationDialog.setOkButtonListener(event -> {
- ConfirmationDialog dialogInner = Helper
- .checkIfClaimIsOutOfEditingModeOrCancelledAndRedirectToClaims(
- claim,
- container,
- serviceManager,
- messageSource,
- getLocale(),
- getUI()
- );
- if (dialogInner != null) {
- getUI().addWindow(dialogInner);
- return;
- }
- // we didn't quit editing mode if we got there
- // Setting status Cancelled for the claim.
- // Involved Boxes are freed implicitly, no need in calls of boxService.update().
- Claim claim = container.getReserveOperation().getClaim();
- Claim tempClaim = AbstractEntityUtil.createTempEntity(claim, Claim.class);
- tempClaim
- .setClaimStatus(container
- .getClaimStatus(ClaimStatusEnum
- .CANCELLED));
- try {
- ClaimService claimService = serviceManager.getClaimService();
- claimService.update(tempClaim);
- } catch (RestException e) {
- Notification notification = ExceptionNotificationUtil.getNotification(e, messageSource, getLocale());
- notification.show(getUI().getPage());
- }
- // Cleaning the container!
- // But still need reference to reserveOperation in order to set selected tab.
- container.cleanBoxReservationSpecificStuff();
- confirmationDialog.close();
- getUI().getNavigator().navigateTo(PostOfficeCardView.VIEW_NAME);
- });
- confirmationDialog.setCancelButtonListener(event -> {
- // Cancel*no = Ok, just stay on the page
- confirmationDialog.close();
- });
- getUI().addWindow(confirmationDialog);
- });
- if (container.getLoggedViaEASOPS()) {
- reservationButtons.setTransferAndFinalizeButtonEventListener(clickEvent -> {
- ConfirmationDialog dialog = Helper
- .checkIfClaimIsOutOfEditingModeOrCancelledAndRedirectToClaims(
- claim,
- container,
- serviceManager,
- messageSource,
- getLocale(),
- getUI()
- );
- if (dialog != null) {
- getUI().addWindow(dialog);
- return;
- }
- // we didn't quit editing mode if we got there
- String str = "";
- try {
- processClaim();
- PaymentType eas = container.getPaymentType(PaymentTypeEnum.EAS);
- Payment payment = null;
- try {
- payment = createPayment(claim, eas, false, container, serviceManager);
- } catch (Exception e) {
- e.printStackTrace();
- LOG.error("Couldn't calculate price via tarificator");
- Notification.show(
- messageSource.getMessage("abonThirdStep.boxesPriceError", null, getLocale()),
- Notification.Type.TRAY_NOTIFICATION);
- }
- if (payment != null && payment.getEntityId() != null) {
- reservationButtons.setTransferAndFinalizeButtonEnabled(false);
- Notification.show(
- messageSource.getMessage("abonThirdStep.PaymentCreatedCaption", null, getLocale()),
- messageSource.getMessage("abonThirdStep.PaymentCreatedText",
- new Object[]{payment.getEntityId(), payment.getPaymentStatus().getStatus()}, getLocale()),
- Notification.Type.TRAY_NOTIFICATION);
- sendToEAS(claim, payment);
- }
- } catch (RestException e) {
- LOG.error("status of claim " + claimId + "is not changed");
- }
- });
- } else {
- reservationButtons.setTransferAndFinalizeButtonEventListener(clickEvent -> {
- ConfirmationDialog dialog = Helper
- .checkIfClaimIsOutOfEditingModeOrCancelledAndRedirectToClaims(
- claim,
- container,
- serviceManager,
- messageSource,
- getLocale(),
- getUI()
- );
- if (dialog != null) {
- getUI().addWindow(dialog);
- return;
- }
- // we didn't quit editing mode if we got there
- Window subWindow = new Window(messageSource.getMessage("abonThirdStep.windowTitle", null, getLocale()));
- subWindow.center();
- subWindow.setModal(true);
- subWindow.setResizable(false);
- VerticalLayout infoLayout = new VerticalLayout();
- infoLayout.setMargin(true);
- infoLayout.setSpacing(true);
- subWindow.setContent(infoLayout);
- infoLayout.addComponent(new Label(messageSource.getMessage("abonThirdStep.claimIssued", new Object[]{claimId}, getLocale()), ContentMode.HTML));
- HorizontalLayout buttonsLayout = new HorizontalLayout();
- buttonsLayout.setSpacing(true);
- Button okButton = new Button(messageSource.getMessage("button.Ok", null, getLocale()));
- okButton.addClickListener(click -> {
- ConfirmationDialog dialogInner = Helper
- .checkIfClaimIsOutOfEditingModeOrCancelledAndRedirectToClaims(
- claim,
- container,
- serviceManager,
- messageSource,
- getLocale(),
- getUI()
- );
- if (dialogInner != null) {
- getUI().addWindow(dialogInner);
- return;
- }
- try {
- // we didn't quit editing mode if we got there
- processClaim(); // this one potentially throws an exception
- // Assuming we want to create a payment only if the claim was processed without exceptions:
- // if we reached this line, then no exception has been thrown
- PaymentType notEas = container.getPaymentType(PaymentTypeEnum.NOT_EAS);
- try {
- createPayment(claim, notEas, false, container, serviceManager);
- } catch (Exception e) {
- e.printStackTrace();
- LOG.error("Couldn't calcualte price via tarificator");
- Notification.show(
- messageSource.getMessage("abonThirdStep.boxesPriceError", null, getLocale()),
- Notification.Type.TRAY_NOTIFICATION);
- }
- sendEmailAndSMSNotification();
- subWindow.close();
- getUI().getNavigator().navigateTo(PostOfficeCardView.VIEW_NAME);
- } catch (RestException e) {
- Notification notification = ExceptionNotificationUtil.getNotification(e, messageSource, getLocale());
- notification.show(getUI().getPage());
- }
- });
- buttonsLayout.addComponent(okButton);
- Button printClaimButton = new Button(messageSource.getMessage("button.printClaim", null, getLocale()));
- printClaimButton.addClickListener(click -> {
- printableForm.print(claim);
- });
- buttonsLayout.addComponent(printClaimButton);
- buttonsLayout.addComponent(new Button(messageSource.getMessage("button.printInvoice", null, getLocale())));
- infoLayout.addComponent(buttonsLayout);
- getUI().addWindow(subWindow);
- });
- }
- addComponent(reservationButtons);
- setExpandRatio(reservationButtons, 0.1f);
- }
- private BoxReservationButtons getNavigationButtons() {
- BoxReservationButtons buttons;
- if (!container.getLoggedViaEASOPS()) {
- buttons = new BoxReservationButtons(
- messageSource.getMessage("button.back", null, getLocale()),
- messageSource.getMessage("button.cancelFin", null, getLocale()),
- messageSource.getMessage("button.saveAndExit", null, getLocale()),
- messageSource.getMessage("button.next", null, getLocale()),
- messageSource.getMessage("button.finalize", null, getLocale())
- );
- } else {
- buttons = new BoxReservationButtons(
- messageSource.getMessage("button.back", null, getLocale()),
- messageSource.getMessage("button.cancelFin", null, getLocale()),
- messageSource.getMessage("button.saveAndExit", null, getLocale()),
- messageSource.getMessage("button.next", null, getLocale()),
- messageSource.getMessage("button.transfer", null, getLocale())
- );
- }
- return buttons;
- }
- private void processClaim() throws RestException {
- //LOG.error("plugin string: " + container.getReserveOperation().getPluginString());
- LOG.debug("processClaim() called for claim [" + claim.getEntityId() + "]");
- claim.setClaimStatus(container.getClaimStatus(ClaimStatusEnum.AWAITING_PAYMENT));
- // Editing is over, inEditing=false is set explicitly here.
- // There is no else-if branch in ClaimController.update() for setting AWAITING_PAYMENT.
- // So we fall through down to the branch related to inEditing
- // and it will fire an error if current state is inEditing=true and new state is inEditing=true.
- claim.setInEditing(false);
- ClaimService claimService = serviceManager.getClaimService();
- claimService.update(claim);
- //update parent status in case of prolongation case when parent is already finished
- if (reserveOperation.isProlongateMode() || (claim != null && claim.getParent() != null)) {
- if (ClaimHelper.isFinished(claim.getParent().getClaimStatus())) {
- Claim tempClaim = AbstractEntityUtil.createTempEntity(claim.getParent(), Claim.class);
- tempClaim.setClaimStatus(container.getClaimStatus(ClaimStatusEnum.PROLONGATED));
- claimService.update(tempClaim);
- }
- }
- }
- private void sendEmailAndSMSNotification() {
- //send email confirmation
- try {
- String email = client.getEmail();
- String index = claim.getPostOffice().getIndex();
- String postOfficeAddress = claim.getPostOffice().getAddress();
- ZonedDateTime paymentDeadline = (claim.getCreateDate() != null) ? claim.getCreateDate().plusDays(14) : null;
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
- messageSource.getMessage("datePattern", null, getLocale()));
- String paymentDeadlineStr = (paymentDeadline != null) ? paymentDeadline.format(formatter) : "?";
- List<Box> boxes = claim.getBoxes();
- StringJoiner boxNumbers = new StringJoiner(", ");
- boxes.forEach(box -> {
- boxNumbers.add(box.getNumber());
- });
- String confirmationText = messageSource.getMessage("abonThirdStep.reservationConfirmation", new Object[]{index, postOfficeAddress, boxNumbers, paymentDeadlineStr}, getLocale());
- String mailSubject = messageSource.getMessage("abonThirdStep.reservationConfirmationSubj", null, getLocale());
- String mailSignature = messageSource.getMessage("abonThirdStep.reservationConfirmationEmailSignature", null, getLocale());
- if (email != null && email.trim() != "") {
- (new Thread(new SendEmailRunnable(mailService, email, mailSubject, confirmationText, mailSignature)))
- .start();
- }
- } catch (Exception e) {
- LOG.error("Couldn't send e-mail reservation confirmation" + ExceptionUtils.getStackTrace(e));
- }
- //send SMS
- (new Thread(new SendSmsRunnable(notificationService, client.getPhoneNumber(), messageSource.getMessage("abonThirdStep.sms.text", null, getLocale()))))
- .start();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment