Fixed "Oversea share" -> "Overseas share". Dont show partnumber/Supplier in error message when in single edit mode
This commit is contained in:
parent
eb5aecb1b5
commit
9b13261a20
9 changed files with 56 additions and 242 deletions
|
|
@ -13,7 +13,7 @@
|
|||
</div>
|
||||
|
||||
<div class="field-group">
|
||||
<div class="caption-column">Oversea share [%]</div>
|
||||
<div class="caption-column">Overseas share [%]</div>
|
||||
<div class="input-column">
|
||||
<div class="text-container">
|
||||
<input ref="overseaShareInput" @keydown.enter="handleEnter('overseaShareInput', $event)" :value="overSeaSharePercent" @blur="validateOverSeaShare" class="input-field"
|
||||
|
|
|
|||
|
|
@ -1,67 +0,0 @@
|
|||
package de.avatic.lcc.model.zolltarifnummern;
|
||||
|
||||
import java.lang.reflect.Array;
|
||||
import java.util.List;
|
||||
|
||||
public class ZolltarifnummernResponse {
|
||||
|
||||
String query;
|
||||
|
||||
String year;
|
||||
|
||||
String lang;
|
||||
|
||||
String version;
|
||||
|
||||
String total;
|
||||
|
||||
List<ZolltarifnummernResponseEntry> suggestions;
|
||||
|
||||
public String getQuery() {
|
||||
return query;
|
||||
}
|
||||
|
||||
public void setQuery(String query) {
|
||||
this.query = query;
|
||||
}
|
||||
|
||||
public String getYear() {
|
||||
return year;
|
||||
}
|
||||
|
||||
public void setYear(String year) {
|
||||
this.year = year;
|
||||
}
|
||||
|
||||
public String getLang() {
|
||||
return lang;
|
||||
}
|
||||
|
||||
public void setLang(String lang) {
|
||||
this.lang = lang;
|
||||
}
|
||||
|
||||
public String getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
public void setVersion(String version) {
|
||||
this.version = version;
|
||||
}
|
||||
|
||||
public String getTotal() {
|
||||
return total;
|
||||
}
|
||||
|
||||
public void setTotal(String total) {
|
||||
this.total = total;
|
||||
}
|
||||
|
||||
public List<ZolltarifnummernResponseEntry> getSuggestions() {
|
||||
return suggestions;
|
||||
}
|
||||
|
||||
public void setSuggestions(List<ZolltarifnummernResponseEntry> suggestions) {
|
||||
this.suggestions = suggestions;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,44 +0,0 @@
|
|||
package de.avatic.lcc.model.zolltarifnummern;
|
||||
|
||||
public class ZolltarifnummernResponseEntry {
|
||||
|
||||
String code;
|
||||
|
||||
String score;
|
||||
|
||||
String value;
|
||||
|
||||
String data;
|
||||
|
||||
public String getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public void setCode(String code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public String getScore() {
|
||||
return score;
|
||||
}
|
||||
|
||||
public void setScore(String score) {
|
||||
this.score = score;
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public void setValue(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public String getData() {
|
||||
return data;
|
||||
}
|
||||
|
||||
public void setData(String data) {
|
||||
this.data = data;
|
||||
}
|
||||
}
|
||||
|
|
@ -32,18 +32,16 @@ public class TaxationResolverService {
|
|||
private final CountryRepository countryRepository;
|
||||
private final EUTaxationApiService eUTaxationApiService;
|
||||
private final PropertyRepository propertyRepository;
|
||||
private final ZolltarifnummernApiService zolltarifnummernApiService;
|
||||
private final NomenclatureService nomenclatureService;
|
||||
private final CountryPropertyRepository countryPropertyRepository;
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(TaxationResolverService.class);
|
||||
|
||||
|
||||
public TaxationResolverService(CountryRepository countryRepository, EUTaxationApiService eUTaxationApiService, PropertyRepository propertyRepository, ZolltarifnummernApiService zolltarifnummernApiService, NomenclatureService nomenclatureService, CountryPropertyRepository countryPropertyRepository) {
|
||||
public TaxationResolverService(CountryRepository countryRepository, EUTaxationApiService eUTaxationApiService, PropertyRepository propertyRepository, NomenclatureService nomenclatureService, CountryPropertyRepository countryPropertyRepository) {
|
||||
this.countryRepository = countryRepository;
|
||||
this.eUTaxationApiService = eUTaxationApiService;
|
||||
this.propertyRepository = propertyRepository;
|
||||
this.zolltarifnummernApiService = zolltarifnummernApiService;
|
||||
this.nomenclatureService = nomenclatureService;
|
||||
this.countryPropertyRepository = countryPropertyRepository;
|
||||
}
|
||||
|
|
@ -104,19 +102,6 @@ public class TaxationResolverService {
|
|||
return singleRequests;
|
||||
}
|
||||
|
||||
private List<TaxationResolverSingleRequest> resolveIncompleteHsCodes(List<TaxationResolverRequest> request) {
|
||||
|
||||
var futures = request.stream()
|
||||
.collect(Collectors.toMap(
|
||||
r -> r,
|
||||
r -> zolltarifnummernApiService.getDeclarableHsCodes(r.material().getHsCode()))
|
||||
);
|
||||
|
||||
CompletableFuture.allOf(futures.values().toArray(new CompletableFuture[0])).join();
|
||||
|
||||
return futures.keySet().stream().flatMap(k -> futures.get(k).join().stream().map(resp -> new TaxationResolverSingleRequest(resp, k.countryId(), k))).toList();
|
||||
}
|
||||
|
||||
|
||||
private Map<TaxationResolverSingleRequest, GoodsMeasForWsResponse> doSingleRequests(List<TaxationResolverSingleRequest> requests) {
|
||||
|
||||
|
|
|
|||
|
|
@ -1,58 +0,0 @@
|
|||
package de.avatic.lcc.service.api;
|
||||
|
||||
import de.avatic.lcc.model.zolltarifnummern.ZolltarifnummernResponse;
|
||||
import de.avatic.lcc.model.zolltarifnummern.ZolltarifnummernResponseEntry;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
import org.springframework.web.util.UriComponentsBuilder;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
public class ZolltarifnummernApiService {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(ZolltarifnummernApiService.class);
|
||||
|
||||
private static final String API_V_1 = "https://www.zolltarifnummern.de/api/v1/cnSuggest";
|
||||
private final RestTemplate restTemplate;
|
||||
|
||||
public ZolltarifnummernApiService(RestTemplate restTemplate) {
|
||||
this.restTemplate = restTemplate;
|
||||
}
|
||||
|
||||
@Async("customLookupExecutor")
|
||||
public CompletableFuture<Set<String>> getDeclarableHsCodes(String incompleteHsCode) {
|
||||
|
||||
try {
|
||||
String url = UriComponentsBuilder.fromUriString(API_V_1)
|
||||
.queryParam("term", incompleteHsCode)
|
||||
.queryParam("lang", "en")
|
||||
.encode()
|
||||
.toUriString();
|
||||
|
||||
var resp = restTemplate.getForObject(url, ZolltarifnummernResponse.class);
|
||||
|
||||
if (resp != null && resp.getSuggestions() != null) {
|
||||
return CompletableFuture.completedFuture(resp.getSuggestions().stream()
|
||||
.map(ZolltarifnummernResponseEntry::getCode)
|
||||
.filter(s -> s.startsWith(incompleteHsCode))
|
||||
.filter(s -> s.length() >= 10).collect(Collectors.toSet()));
|
||||
}
|
||||
|
||||
} catch (Throwable t) {
|
||||
logger.error("HS code lookup failed with exception \"{}\"", t.getMessage());
|
||||
// just continue
|
||||
}
|
||||
|
||||
logger.warn("Unable to load tarif numbers for HS code {}", incompleteHsCode);
|
||||
|
||||
return CompletableFuture.completedFuture(Collections.emptySet());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -70,8 +70,8 @@ public class CalculationJobProcessorManagementService {
|
|||
validPeriod = validityPeriodRepository.getByDate(request.getDate());
|
||||
}
|
||||
|
||||
|
||||
request.getPremiseIds().forEach(premiseId -> preCalculationCheckService.doPrecheck(premiseId, validSet, validPeriod, request.getDate()));
|
||||
boolean multiRequest = request.getPremiseIds().size() > 1;
|
||||
request.getPremiseIds().forEach(premiseId -> preCalculationCheckService.doPrecheck(premiseId, validSet, validPeriod, request.getDate(), multiRequest));
|
||||
|
||||
|
||||
if (validSet.isEmpty() || validPeriod.isEmpty())
|
||||
|
|
|
|||
|
|
@ -52,14 +52,12 @@ public class HandlingCostCalculationService {
|
|||
BigDecimal handling = BigDecimal.valueOf(Double.parseDouble(propertyRepository.getPropertyByMappingId(SystemPropertyMappingId.KLT_HANDLING, setId).orElseThrow().getCurrentValue()));
|
||||
BigDecimal release = BigDecimal.valueOf(Double.parseDouble(propertyRepository.getPropertyByMappingId(SystemPropertyMappingId.KLT_RELEASE, setId).orElseThrow().getCurrentValue()));
|
||||
BigDecimal dispatch = BigDecimal.valueOf(Double.parseDouble(propertyRepository.getPropertyByMappingId(SystemPropertyMappingId.KLT_DISPATCH, setId).orElseThrow().getCurrentValue()));
|
||||
BigDecimal disposal = (addRepackingAndDisposalCost ? BigDecimal.valueOf(Double.parseDouble(propertyRepository.getPropertyByMappingId(SystemPropertyMappingId.DISPOSAL, setId).orElseThrow().getCurrentValue())) : BigDecimal.ZERO);
|
||||
|
||||
BigDecimal wageFactor = BigDecimal.valueOf(Double.parseDouble(countryPropertyRepository.getByMappingIdAndCountryId(CountryPropertyMappingId.WAGE, setId, destination.getCountryId()).orElseThrow().getCurrentValue()));
|
||||
BigDecimal booking = BigDecimal.valueOf(Double.parseDouble(propertyRepository.getPropertyByMappingId(SystemPropertyMappingId.BOOKING_KLT, setId).orElseThrow().getCurrentValue()));
|
||||
|
||||
BigDecimal annualRepacking = Objects.requireNonNullElse(destinationRepacking, getRepackingCost(setId, hu, loadCarrierType, addRepackingAndDisposalCost, destinationRepacking).multiply(wageFactor)).multiply(huAnnualAmount);
|
||||
BigDecimal annualDisposal = Objects.requireNonNullElse(destinationDisposal.multiply(huAnnualAmount), BigDecimal.ZERO);
|
||||
// BigDecimal annualHandling = Objects.requireNonNullElse(destinationHandling, handling.add(release).add(dispatch).add(disposal).multiply(wageFactor)).multiply(multiplier);
|
||||
|
||||
BigDecimal annualHandling;
|
||||
|
||||
|
|
|
|||
|
|
@ -69,12 +69,12 @@ public class PreCalculationCheckService {
|
|||
this.userNodeRepository = userNodeRepository;
|
||||
}
|
||||
|
||||
public void doPrecheck(Integer premiseId, Optional<PropertySet> set, Optional<ValidityPeriod> period) {
|
||||
doPrecheck(premiseId, set, period, LocalDate.now());
|
||||
public void doPrecheck(Integer premiseId, Optional<PropertySet> set, Optional<ValidityPeriod> period, boolean showCalcInfo) {
|
||||
doPrecheck(premiseId, set, period, LocalDate.now(), showCalcInfo);
|
||||
}
|
||||
|
||||
|
||||
public void doPrecheck(Integer premiseId, Optional<PropertySet> set, Optional<ValidityPeriod> period, LocalDate date) {
|
||||
public void doPrecheck(Integer premiseId, Optional<PropertySet> set, Optional<ValidityPeriod> period, LocalDate date, boolean showCalcInfo) {
|
||||
var premise = premiseRepository.getPremiseById(premiseId).orElseThrow();
|
||||
|
||||
supplierCheck(premise);
|
||||
|
|
@ -88,46 +88,46 @@ public class PreCalculationCheckService {
|
|||
var partNumber = material.get().getPartNumber();
|
||||
var supplierName = supplier.get().getName();
|
||||
|
||||
materialCheck(premise, supplierName, partNumber);
|
||||
materialCheck(premise, supplierName, partNumber, showCalcInfo);
|
||||
|
||||
packagingCheck(premise, supplierName, partNumber);
|
||||
packagingCheck(premise, supplierName, partNumber, showCalcInfo);
|
||||
|
||||
priceCheck(premise, supplierName, partNumber);
|
||||
priceCheck(premise, supplierName, partNumber, showCalcInfo);
|
||||
|
||||
var destinations = destinationRepository.getByPremiseId(premiseId);
|
||||
|
||||
if (destinations == null || destinations.isEmpty()) {
|
||||
throw new PremiseValidationError("Please add at least one destination to continue", supplierName, partNumber);
|
||||
throw new PremiseValidationError("Please add at least one destination to continue", supplierName, partNumber, showCalcInfo);
|
||||
}
|
||||
|
||||
for (Destination destination : destinations) {
|
||||
|
||||
var node = nodeRepository.getByDestinationId(destination.getId()).orElseThrow();
|
||||
|
||||
destinationCheck(destination, node, supplierName, partNumber);
|
||||
destinationCheck(destination, node, supplierName, partNumber, showCalcInfo);
|
||||
|
||||
var routes = routeRepository.getByDestinationId(destination.getId());
|
||||
|
||||
|
||||
if (routes.isEmpty() && destination.getD2d() == false)
|
||||
throw new PremiseValidationError(String.format("No standard route found for %s - try using an individual rate instead", node.getName()), supplierName, partNumber);
|
||||
throw new PremiseValidationError(String.format("No standard route found for %s - try using an individual rate instead", node.getName()), supplierName, partNumber, showCalcInfo);
|
||||
|
||||
if (routes.stream().noneMatch(Route::getSelected) && destination.getD2d() == false)
|
||||
throw new PremiseValidationError(String.format("Please select a route for %s", node.getName()), supplierName, partNumber);
|
||||
throw new PremiseValidationError(String.format("Please select a route for %s", node.getName()), supplierName, partNumber, showCalcInfo);
|
||||
|
||||
if (destination.getD2d() && (destination.getRateD2d() == null || destination.getRateD2d().compareTo(BigDecimal.ZERO) == 0)) {
|
||||
throw new PremiseValidationError("Please enter a door-to-door rate greater than zero", supplierName, partNumber);
|
||||
throw new PremiseValidationError("Please enter a door-to-door rate greater than zero", supplierName, partNumber, showCalcInfo);
|
||||
}
|
||||
|
||||
if (destination.getD2d() && (destination.getLeadTimeD2d() == null || destination.getLeadTimeD2d() == 0)) {
|
||||
throw new PremiseValidationError("Please enter a door-to-door lead time", supplierName, partNumber);
|
||||
throw new PremiseValidationError("Please enter a door-to-door lead time", supplierName, partNumber, showCalcInfo);
|
||||
}
|
||||
|
||||
periodCheck(period.orElse(null), set.orElse(null), date, supplierName, partNumber);
|
||||
|
||||
routes.stream().filter(Route::getSelected).findAny().ifPresent(r -> {
|
||||
var sections = routeSectionRepository.getByRouteId(r.getId());
|
||||
routeCheck(sections, period.orElseThrow(), date, supplierName, partNumber);
|
||||
routeCheck(sections, period.orElseThrow(), date, supplierName, partNumber, showCalcInfo);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -163,74 +163,74 @@ public class PreCalculationCheckService {
|
|||
|
||||
}
|
||||
|
||||
private void routeCheck(List<RouteSection> sections, ValidityPeriod period, LocalDate calculationDate, String supplierName, String partNumber) {
|
||||
private void routeCheck(List<RouteSection> sections, ValidityPeriod period, LocalDate calculationDate, String supplierName, String partNumber, boolean showCalcInfo) {
|
||||
|
||||
sections.forEach(section -> {
|
||||
var fromRouteNode = routeNodeRepository.getFromNodeBySectionId(section.getId());
|
||||
var toRouteNode = routeNodeRepository.getToNodeBySectionId(section.getId());
|
||||
|
||||
if (fromRouteNode.isEmpty() || toRouteNode.isEmpty())
|
||||
throw new PremiseValidationError("Route configuration issue - please contact your administrator", supplierName, partNumber);
|
||||
throw new PremiseValidationError("Route configuration issue - please contact your administrator", supplierName, partNumber, showCalcInfo);
|
||||
|
||||
if (RateType.MATRIX == section.getRateType()) {
|
||||
var rate = matrixRateRepository.getByCountryIds(fromRouteNode.get().getCountryId(), toRouteNode.get().getCountryId(), period.getId());
|
||||
constructRouteSectionError(calculationDate, fromRouteNode.get(), toRouteNode.get(), rate.isEmpty(), supplierName, partNumber);
|
||||
constructRouteSectionError(calculationDate, fromRouteNode.get(), toRouteNode.get(), rate.isEmpty(), supplierName, partNumber, showCalcInfo);
|
||||
}
|
||||
|
||||
if (RateType.CONTAINER == section.getRateType()) {
|
||||
var rate = containerRateRepository.findRoute(fromRouteNode.get().getNodeId(), toRouteNode.get().getNodeId(), period.getId(), section.getTransportType());
|
||||
constructRouteSectionError(calculationDate, fromRouteNode.get(), toRouteNode.get(), rate.isEmpty(), supplierName, partNumber);
|
||||
constructRouteSectionError(calculationDate, fromRouteNode.get(), toRouteNode.get(), rate.isEmpty(), supplierName, partNumber, showCalcInfo);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void constructRouteSectionError(LocalDate calculationDate, RouteNode fromRouteNode, RouteNode toRouteNode, boolean empty, String supplierName, String partNumber) {
|
||||
private void constructRouteSectionError(LocalDate calculationDate, RouteNode fromRouteNode, RouteNode toRouteNode, boolean empty, String supplierName, String partNumber, boolean showCalcInfo) {
|
||||
if (empty) {
|
||||
var dateStr = calculationDate == null ? "" : String.format("on %s", calculationDate.format(DateTimeFormatter.ofPattern("dd.MM.yyyy")));
|
||||
var errStr = String.format("Transport rate missing for %s to %s %s - please contact your administrator",
|
||||
fromRouteNode.getExternalMappingId(),
|
||||
toRouteNode.getExternalMappingId(),
|
||||
dateStr);
|
||||
throw new PremiseValidationError(errStr, supplierName, partNumber);
|
||||
throw new PremiseValidationError(errStr, supplierName, partNumber, showCalcInfo);
|
||||
}
|
||||
}
|
||||
|
||||
private void destinationCheck(Destination destination, Node node, String supplierName, String partNumber) {
|
||||
private void destinationCheck(Destination destination, Node node, String supplierName, String partNumber, boolean showCalcInfo) {
|
||||
|
||||
if (destination.getAnnualAmount() == null || destination.getAnnualAmount() == 0)
|
||||
throw new PremiseValidationError(String.format("Annual quantity for %s must be greater than zero", node.getName()), supplierName, partNumber);
|
||||
throw new PremiseValidationError(String.format("Annual quantity for %s must be greater than zero", node.getName()), supplierName, partNumber, showCalcInfo);
|
||||
|
||||
if (destination.getD2d() == null)
|
||||
throw new PremiseValidationError(String.format("Something's missing for %s - please contact your administrator", node.getName()), supplierName, partNumber);
|
||||
throw new PremiseValidationError(String.format("Something's missing for %s - please contact your administrator", node.getName()), supplierName, partNumber, showCalcInfo);
|
||||
|
||||
if (destination.getD2d() == true) {
|
||||
if (destination.getRateD2d() == null || destination.getRateD2d().compareTo(BigDecimal.ZERO) == 0) {
|
||||
throw new PremiseValidationError(String.format("Door-to-door rate for %s needs to be greater than zero", node.getName()), supplierName, partNumber);
|
||||
throw new PremiseValidationError(String.format("Door-to-door rate for %s needs to be greater than zero", node.getName()), supplierName, partNumber, showCalcInfo);
|
||||
}
|
||||
|
||||
if (destination.getLeadTimeD2d() == null || destination.getLeadTimeD2d() == 0) {
|
||||
throw new PremiseValidationError(String.format("Please set a lead time for door-to-door delivery to %s", node.getName()), supplierName, partNumber);
|
||||
throw new PremiseValidationError(String.format("Please set a lead time for door-to-door delivery to %s", node.getName()), supplierName, partNumber, showCalcInfo);
|
||||
}
|
||||
}
|
||||
|
||||
if (destination.getCountryId() == null || destination.getCountryId() == 0) {
|
||||
throw new PremiseValidationError(String.format("Configuration issue with %s - please contact your administrator", node.getName()), supplierName, partNumber);
|
||||
throw new PremiseValidationError(String.format("Configuration issue with %s - please contact your administrator", node.getName()), supplierName, partNumber, showCalcInfo);
|
||||
}
|
||||
|
||||
if (destination.getGeoLat() == null || destination.getGeoLng() == null) {
|
||||
throw new PremiseValidationError(String.format("Location data missing for %s - please contact your administrator", node.getName()), supplierName, partNumber);
|
||||
throw new PremiseValidationError(String.format("Location data missing for %s - please contact your administrator", node.getName()), supplierName, partNumber, showCalcInfo);
|
||||
}
|
||||
|
||||
if (destination.getDisposalCost() != null && destination.getDisposalCost().compareTo(BigDecimal.ZERO) < 0) {
|
||||
throw new PremiseValidationError(String.format("Disposal costs for %s can't be negative", node.getName()), supplierName, partNumber);
|
||||
throw new PremiseValidationError(String.format("Disposal costs for %s can't be negative", node.getName()), supplierName, partNumber, showCalcInfo);
|
||||
}
|
||||
|
||||
if (destination.getHandlingCost() != null && destination.getHandlingCost().compareTo(BigDecimal.ZERO) < 0) {
|
||||
throw new PremiseValidationError(String.format("Handling costs for %s can't be negative", node.getName()), supplierName, partNumber);
|
||||
throw new PremiseValidationError(String.format("Handling costs for %s can't be negative", node.getName()), supplierName, partNumber, showCalcInfo);
|
||||
}
|
||||
|
||||
if (destination.getRepackingCost() != null && destination.getRepackingCost().compareTo(BigDecimal.ZERO) < 0) {
|
||||
throw new PremiseValidationError(String.format("Repackaging costs for %s can't be negative", node.getName()), supplierName, partNumber);
|
||||
throw new PremiseValidationError(String.format("Repackaging costs for %s can't be negative", node.getName()), supplierName, partNumber, showCalcInfo);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -242,62 +242,62 @@ public class PreCalculationCheckService {
|
|||
|
||||
}
|
||||
|
||||
private void priceCheck(Premise premise, String supplierName, String partNumber) {
|
||||
private void priceCheck(Premise premise, String supplierName, String partNumber, boolean showCalcInfo) {
|
||||
|
||||
if (premise.getMaterialCost() == null || premise.getMaterialCost().compareTo(BigDecimal.ZERO) == 0) {
|
||||
throw new PremiseValidationError("Please enter a material cost (MEK_A) greater than zero", supplierName, partNumber);
|
||||
throw new PremiseValidationError("Please enter a material cost (MEK_A) greater than zero", supplierName, partNumber, showCalcInfo);
|
||||
}
|
||||
|
||||
if (premise.getOverseaShare() == null) {
|
||||
throw new PremiseValidationError("Please enter the overseas share", supplierName, partNumber);
|
||||
throw new PremiseValidationError("Please enter the overseas share", supplierName, partNumber, showCalcInfo);
|
||||
}
|
||||
|
||||
if (premise.getFcaEnabled() == null) {
|
||||
throw new PremiseValidationError("FCA configuration missing - please contact your administrator", supplierName, partNumber);
|
||||
throw new PremiseValidationError("FCA configuration missing - please contact your administrator", supplierName, partNumber, showCalcInfo);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void packagingCheck(Premise premise, String supplierName, String partNumber) {
|
||||
private void packagingCheck(Premise premise, String supplierName, String partNumber, boolean showCalcInfo) {
|
||||
|
||||
if (premise.getHuMixable() == null) {
|
||||
throw new PremiseValidationError("Packaging configuration incomplete - please contact your administrator", supplierName, partNumber);
|
||||
throw new PremiseValidationError("Packaging configuration incomplete - please contact your administrator", supplierName, partNumber, showCalcInfo);
|
||||
}
|
||||
|
||||
if (premise.getHuStackable() == null) {
|
||||
throw new PremiseValidationError("Packaging configuration incomplete - please contact your administrator", supplierName, partNumber);
|
||||
throw new PremiseValidationError("Packaging configuration incomplete - please contact your administrator", supplierName, partNumber, showCalcInfo);
|
||||
}
|
||||
|
||||
if (premise.getHuStackable() == false && premise.getHuMixable() == true) {
|
||||
throw new PremiseValidationError("If packaging is mixable, it must also be stackable", supplierName, partNumber);
|
||||
throw new PremiseValidationError("If packaging is mixable, it must also be stackable", supplierName, partNumber, showCalcInfo);
|
||||
}
|
||||
|
||||
if (premise.getIndividualHuLength() == null || premise.getIndividualHuLength() == 0) {
|
||||
throw new PremiseValidationError("Please enter packaging length", supplierName, partNumber);
|
||||
throw new PremiseValidationError("Please enter packaging length", supplierName, partNumber, showCalcInfo);
|
||||
}
|
||||
|
||||
if (premise.getIndividualHuWidth() == null || premise.getIndividualHuWidth() == 0) {
|
||||
throw new PremiseValidationError("Please enter packaging width", supplierName, partNumber);
|
||||
throw new PremiseValidationError("Please enter packaging width", supplierName, partNumber, showCalcInfo);
|
||||
}
|
||||
|
||||
if (premise.getIndividualHuHeight() == null || premise.getIndividualHuHeight() == 0) {
|
||||
throw new PremiseValidationError("Please enter packaging height", supplierName, partNumber);
|
||||
throw new PremiseValidationError("Please enter packaging height", supplierName, partNumber, showCalcInfo);
|
||||
}
|
||||
|
||||
if (premise.getIndividualHuWeight() == null || premise.getIndividualHuWeight() == 0) {
|
||||
throw new PremiseValidationError("Please enter packaging weight", supplierName, partNumber);
|
||||
throw new PremiseValidationError("Please enter packaging weight", supplierName, partNumber, showCalcInfo);
|
||||
}
|
||||
|
||||
if (premise.getHuUnitCount() == null || premise.getHuUnitCount() == 0) {
|
||||
throw new PremiseValidationError("Please enter the number of units per package", supplierName, partNumber);
|
||||
throw new PremiseValidationError("Please enter the number of units per package", supplierName, partNumber, showCalcInfo);
|
||||
}
|
||||
|
||||
if (premise.getHuDisplayedWeightUnit() == null) {
|
||||
throw new PremiseValidationError("Weight unit configuration missing - please contact your administrator", supplierName, partNumber);
|
||||
throw new PremiseValidationError("Weight unit configuration missing - please contact your administrator", supplierName, partNumber, showCalcInfo);
|
||||
}
|
||||
|
||||
if (premise.getHuDisplayedDimensionUnit() == null) {
|
||||
throw new PremiseValidationError("Dimension unit configuration missing - please contact your administrator", supplierName, partNumber);
|
||||
throw new PremiseValidationError("Dimension unit configuration missing - please contact your administrator", supplierName, partNumber, showCalcInfo);
|
||||
}
|
||||
|
||||
var hu = dimensionTransformer.toDimensionEntity(premise).withTolerance(DIMENSION_TOLERANCE);
|
||||
|
|
@ -306,26 +306,26 @@ public class PreCalculationCheckService {
|
|||
Optional<Integer> feuLoad = propertyService.getProperty(SystemPropertyMappingId.TEU_LOAD);
|
||||
|
||||
if (teuLoad.isEmpty() || feuLoad.isEmpty())
|
||||
throw new PremiseValidationError("System configuration incomplete - please contact your administrator", supplierName, partNumber);
|
||||
throw new PremiseValidationError("System configuration incomplete - please contact your administrator", supplierName, partNumber, showCalcInfo);
|
||||
|
||||
if (WeightUnit.KG.convertFromG(hu.getWeight()) > teuLoad.get() && hu.getWeight() > feuLoad.get())
|
||||
throw new PremiseValidationError(String.format("Package weight exceeds %d kg - please check your weight and unit", Math.max(teuLoad.get(), feuLoad.get())), supplierName, partNumber);
|
||||
throw new PremiseValidationError(String.format("Package weight exceeds %d kg - please check your weight and unit", Math.max(teuLoad.get(), feuLoad.get())), supplierName, partNumber, showCalcInfo);
|
||||
|
||||
var teuFitsXY = (hu.getLength() < ContainerType.TEU.getLength() && hu.getWidth() < ContainerType.TEU.getWidth());
|
||||
var teuFitsYX = (hu.getWidth() < ContainerType.TEU.getLength() && hu.getLength() < ContainerType.TEU.getWidth());
|
||||
|
||||
if (!teuFitsYX && !teuFitsXY) {
|
||||
throw new PremiseValidationError("Package dimensions are too large - please check your measurements and unit", supplierName, partNumber);
|
||||
throw new PremiseValidationError("Package dimensions are too large - please check your measurements and unit", supplierName, partNumber, showCalcInfo);
|
||||
}
|
||||
|
||||
|
||||
if ((hu.getLength() * hu.getWidth()) < 20000) {
|
||||
throw new PremiseValidationError("Package dimensions are too small - please check your measurements and unit", supplierName, partNumber);
|
||||
throw new PremiseValidationError("Package dimensions are too small - please check your measurements and unit", supplierName, partNumber, showCalcInfo);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void materialCheck(Premise premise, String supplierName, String partNumber) {
|
||||
private void materialCheck(Premise premise, String supplierName, String partNumber, boolean showCalcInfo) {
|
||||
|
||||
// if (premise.getTariffUnlocked()) {
|
||||
// if (premise.getHsCode() == null || premise.getHsCode().length() < 10)
|
||||
|
|
@ -337,7 +337,7 @@ public class PreCalculationCheckService {
|
|||
// }
|
||||
|
||||
if (premise.getTariffRate() == null) {
|
||||
throw new PremiseValidationError("Please enter a tariff rate", supplierName, partNumber);
|
||||
throw new PremiseValidationError("Please enter a tariff rate", supplierName, partNumber, showCalcInfo);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,8 +4,8 @@ import de.avatic.lcc.util.exception.base.InternalErrorException;
|
|||
|
||||
public class PremiseValidationError extends InternalErrorException {
|
||||
|
||||
public PremiseValidationError(String message, String supplierName, String partNumber) {
|
||||
super("Calculation data validation failed.", String.format("%s (Part number:%s - %s)",message, partNumber, supplierName));
|
||||
public PremiseValidationError(String message, String supplierName, String partNumber, boolean showCalcInfo) {
|
||||
super("Calculation data validation failed.", showCalcInfo ? String.format("%s (Part number: %s - %s)" , message, partNumber, supplierName) : message);
|
||||
}
|
||||
|
||||
public PremiseValidationError(String message) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue