diff --git a/pom.xml b/pom.xml
index d2da4fc..6d96570 100644
--- a/pom.xml
+++ b/pom.xml
@@ -64,6 +64,12 @@
org.springframework.boot
spring-boot-starter-validation
+
+ org.jetbrains
+ annotations
+ 26.0.2
+ provided
+
com.mysql
diff --git a/src/main/java/de/avatic/lcc/controller/calculation/PremiseController.java b/src/main/java/de/avatic/lcc/controller/calculation/PremiseController.java
index 54cca2f..53da4ad 100644
--- a/src/main/java/de/avatic/lcc/controller/calculation/PremiseController.java
+++ b/src/main/java/de/avatic/lcc/controller/calculation/PremiseController.java
@@ -4,6 +4,7 @@ package de.avatic.lcc.controller.calculation;
import de.avatic.lcc.dto.calculation.CalculationStatus;
import de.avatic.lcc.dto.calculation.DestinationDTO;
import de.avatic.lcc.dto.calculation.PremiseDTO;
+import de.avatic.lcc.dto.calculation.create.CreatePremiseDTO;
import de.avatic.lcc.dto.calculation.create.PremiseSearchResultDTO;
import de.avatic.lcc.dto.calculation.edit.PremiseDetailDTO;
import de.avatic.lcc.dto.calculation.edit.SetDataDTO;
@@ -12,7 +13,6 @@ import de.avatic.lcc.dto.calculation.edit.destination.DestinationUpdateDTO;
import de.avatic.lcc.dto.calculation.edit.masterData.MaterialUpdateDTO;
import de.avatic.lcc.dto.calculation.edit.masterData.PackagingUpdateDTO;
import de.avatic.lcc.dto.calculation.edit.masterData.PriceUpdateDTO;
-import de.avatic.lcc.dto.generic.LocationDTO;
import de.avatic.lcc.service.access.DestinationService;
import de.avatic.lcc.service.access.PremisesService;
import de.avatic.lcc.service.calculation.ChangeMaterialService;
@@ -20,6 +20,7 @@ import de.avatic.lcc.service.calculation.ChangeSupplierService;
import de.avatic.lcc.service.calculation.PremiseCreationService;
import de.avatic.lcc.service.calculation.PremiseSearchStringAnalyzerService;
import de.avatic.lcc.util.exception.badrequest.InvalidArgumentException;
+import jakarta.validation.Valid;
import jakarta.validation.constraints.Min;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
@@ -75,46 +76,23 @@ public class PremiseController {
}
@PostMapping({"/create", "/create/"})
- public ResponseEntity> createPremises(@RequestParam("material") List materialIds,
- @RequestParam(value = "supplier", required = false) List supplierIds,
- @RequestParam(name = "user_supplier", required = false) List userSupplierIds,
- @RequestParam(name = "from_scratch", defaultValue = "true") boolean createEmpty) {
+ public ResponseEntity> createPremises(@RequestBody @Valid CreatePremiseDTO dto) {
- List suppliers;
- List userSuppliers;
- List materials;
-
- try {
- suppliers = supplierIds == null ? Collections.emptyList() : supplierIds.stream().map(Integer::parseInt).toList();
- userSuppliers = userSupplierIds == null ? Collections.emptyList() : userSupplierIds.stream().map(Integer::parseInt).toList();
- materials = materialIds.stream().map(Integer::parseInt).toList();
-
- if(suppliers.stream().anyMatch(s -> s < 1))
- throw new InvalidArgumentException("Supplier ID must be greater than or equal to 1");
-
- if(userSuppliers.stream().anyMatch(s -> s < 1))
- throw new InvalidArgumentException("User supplier ID must be greater than or equal to 1");
-
- if(materials.stream().anyMatch(s -> s < 1))
- throw new InvalidArgumentException("Material ID must be greater than or equal to 1");
-
- } catch (NumberFormatException e) {
- throw new InvalidArgumentException("Invalid material or supplier ID provided. Suppliers: "
- + supplierIds + ", userSuppliers: " + userSupplierIds + ", materials: " + materialIds + ".");
- }
-
- if (suppliers.isEmpty() && userSuppliers.isEmpty()) {
+ if ((dto.getSupplierIds() == null || dto.getSupplierIds().isEmpty()) && (dto.getUserSupplierIds() == null || dto.getUserSupplierIds().isEmpty())) {
throw new InvalidArgumentException("Either suppliers or userSuppliers must be provided. Suppliers: "
- + supplierIds + ", userSuppliers: " + userSupplierIds + ".");
+ + dto.getSupplierIds() + ", userSuppliers: " + dto.getUserSupplierIds() + ".");
}
- return ResponseEntity.ok(premiseCreationService.createPremises(materials, suppliers, userSuppliers, createEmpty));
+ return ResponseEntity.ok(premiseCreationService.createPremises(
+ dto.getMaterialIds(),
+ dto.getSupplierIds() == null ? Collections.emptyList() : dto.getSupplierIds(),
+ dto.getUserSupplierIds() == null ? Collections.emptyList() : dto.getUserSupplierIds(),
+ dto.createEmpty()));
}
-
@GetMapping({"/edit", "/edit/"})
- public ResponseEntity> getPremises(@RequestParam("premiss_ids") List premissIds) {
+ public ResponseEntity> getPremises(@RequestBody List premissIds) {
return ResponseEntity.ok(premisesServices.getPremises(premissIds));
}
@@ -135,19 +113,22 @@ public class PremiseController {
}
- @PutMapping({"/status/{processing_id}", "/status/{processing_id}/"})
- public ResponseEntity> updatePackaging(@RequestBody PackagingUpdateDTO packagingDTO) {
- return ResponseEntity.ok(premisesServices.updatePackaging(packagingDTO));
+ @PostMapping({"/packaging", "/packaging/"})
+ public ResponseEntity updatePackaging(@RequestBody PackagingUpdateDTO packagingDTO) {
+ premisesServices.updatePackaging(packagingDTO);
+ return ResponseEntity.ok().build();
}
@PostMapping({"/material", "/material/"})
- public ResponseEntity> updateMaterial(@RequestBody MaterialUpdateDTO materialUpdateDTO) {
- return ResponseEntity.ok(premisesServices.updateMaterial(materialUpdateDTO));
+ public ResponseEntity updateMaterial(@RequestBody @Valid MaterialUpdateDTO materialUpdateDTO) {
+ premisesServices.updateMaterial(materialUpdateDTO);
+ return ResponseEntity.ok().build();
}
- @PutMapping({"/price", "/price/"})
- public ResponseEntity> updatePrice(@RequestBody PriceUpdateDTO priceUpdateDTO) {
- return ResponseEntity.ok(premisesServices.updatePrice(priceUpdateDTO));
+ @PostMapping({"/price", "/price/"})
+ public ResponseEntity updatePrice(@RequestBody @Valid PriceUpdateDTO priceUpdateDTO) {
+ premisesServices.updatePrice(priceUpdateDTO);
+ return ResponseEntity.ok().build();
}
@PostMapping({"/destination", "/destination/"})
diff --git a/src/main/java/de/avatic/lcc/dto/calculation/create/CreatePremiseDTO.java b/src/main/java/de/avatic/lcc/dto/calculation/create/CreatePremiseDTO.java
new file mode 100644
index 0000000..c4293cc
--- /dev/null
+++ b/src/main/java/de/avatic/lcc/dto/calculation/create/CreatePremiseDTO.java
@@ -0,0 +1,60 @@
+package de.avatic.lcc.dto.calculation.create;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.Min;
+import org.springframework.validation.annotation.Validated;
+
+import java.util.List;
+
+public class CreatePremiseDTO {
+
+ @Valid
+ @JsonProperty("material")
+ private List<@Min(1) Integer> materialIds;
+
+ @Valid
+ @JsonProperty("supplier")
+ private List<@Min(1) Integer> supplierIds;
+
+ @JsonProperty("user_supplier")
+ private List<@Min(1) Integer> userSupplierIds;
+
+ @JsonProperty("from_scratch")
+ private boolean createEmpty;
+
+ public List getMaterialIds() {
+ return materialIds;
+ }
+
+ public void setMaterialIds(List materialIds) {
+ this.materialIds = materialIds;
+ }
+
+ public List getSupplierIds() {
+ return supplierIds;
+ }
+
+ public void setSupplierIds(List supplierIds) {
+ this.supplierIds = supplierIds;
+ }
+
+ public List getUserSupplierIds() {
+ return userSupplierIds;
+ }
+
+ public void setUserSupplierIds(List userSupplierIds) {
+ this.userSupplierIds = userSupplierIds;
+ }
+
+ @JsonIgnore
+ public boolean createEmpty() {
+ return this.createEmpty;
+ }
+
+ @JsonIgnore
+ public void setCreateEmpty(boolean createEmpty) {
+ this.createEmpty = createEmpty;
+ }
+}
diff --git a/src/main/java/de/avatic/lcc/dto/calculation/edit/masterData/MaterialUpdateDTO.java b/src/main/java/de/avatic/lcc/dto/calculation/edit/masterData/MaterialUpdateDTO.java
index 6c22d7f..ff92afb 100644
--- a/src/main/java/de/avatic/lcc/dto/calculation/edit/masterData/MaterialUpdateDTO.java
+++ b/src/main/java/de/avatic/lcc/dto/calculation/edit/masterData/MaterialUpdateDTO.java
@@ -1,6 +1,7 @@
package de.avatic.lcc.dto.calculation.edit.masterData;
import com.fasterxml.jackson.annotation.JsonProperty;
+import jakarta.validation.constraints.*;
import java.util.List;
@@ -11,9 +12,13 @@ public class MaterialUpdateDTO {
private List premiseIds;
@JsonProperty("hs_code")
+ @Size(min = 8, max = 11, message = "HS code must be between 8 and 11 characters")
+ @Pattern(regexp = "^\\d+$", message = "HS code must contain only digits")
private String hsCode;
@JsonProperty("tariff_rate")
+ @DecimalMin(value = "0.00", message = "Tariff_rate must be greater than or equal 0")
+ @Digits(integer = 4, fraction = 4, message = "Tariff rate must have at most 4 decimal places")
private Number tariffRate;
public String getHsCode() {
diff --git a/src/main/java/de/avatic/lcc/dto/calculation/edit/masterData/PackagingUpdateDTO.java b/src/main/java/de/avatic/lcc/dto/calculation/edit/masterData/PackagingUpdateDTO.java
index f538b1d..1609bf2 100644
--- a/src/main/java/de/avatic/lcc/dto/calculation/edit/masterData/PackagingUpdateDTO.java
+++ b/src/main/java/de/avatic/lcc/dto/calculation/edit/masterData/PackagingUpdateDTO.java
@@ -2,6 +2,7 @@ package de.avatic.lcc.dto.calculation.edit.masterData;
import com.fasterxml.jackson.annotation.JsonProperty;
import de.avatic.lcc.dto.generic.DimensionDTO;
+import jakarta.validation.constraints.Min;
import java.util.List;
@@ -16,7 +17,7 @@ public class PackagingUpdateDTO {
@JsonProperty("is_stackable")
private Boolean isStackable;
- private List premiseIds;
+ private List<@Min(1) Integer> premiseIds;
public DimensionDTO getDimensions() {
diff --git a/src/main/java/de/avatic/lcc/dto/calculation/edit/masterData/PriceUpdateDTO.java b/src/main/java/de/avatic/lcc/dto/calculation/edit/masterData/PriceUpdateDTO.java
index 66b27ba..6f5356f 100644
--- a/src/main/java/de/avatic/lcc/dto/calculation/edit/masterData/PriceUpdateDTO.java
+++ b/src/main/java/de/avatic/lcc/dto/calculation/edit/masterData/PriceUpdateDTO.java
@@ -1,6 +1,10 @@
package de.avatic.lcc.dto.calculation.edit.masterData;
import com.fasterxml.jackson.annotation.JsonProperty;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.DecimalMin;
+import jakarta.validation.constraints.Digits;
+import jakarta.validation.constraints.Min;
import java.util.List;
@@ -8,16 +12,21 @@ import java.util.List;
public class PriceUpdateDTO {
@JsonProperty("premise_ids")
- private List premiseIds;
+ private List<@Min(1) Integer> premiseIds;
+ @DecimalMin(value = "0.01", message = "Amount must be greater than 0")
+ @Digits(integer = 13, fraction = 2, message = "Amount must have at most 2 decimal places")
private Number price;
@JsonProperty("oversea_share")
+ @DecimalMin(value = "0.00", message = "Amount must be greater than or equal 0")
+ @Digits(integer = 4, fraction = 4, message = "Amount must have at most 4 decimal places")
private Number overseaShare;
@JsonProperty("fca_fee_included")
private Boolean includeFcaFee;
+
public Number getPrice() {
return price;
}
diff --git a/src/main/java/de/avatic/lcc/model/nodes/Node.java b/src/main/java/de/avatic/lcc/model/nodes/Node.java
index f0610c2..168a5c0 100644
--- a/src/main/java/de/avatic/lcc/model/nodes/Node.java
+++ b/src/main/java/de/avatic/lcc/model/nodes/Node.java
@@ -1,5 +1,6 @@
package de.avatic.lcc.model.nodes;
+import org.jetbrains.annotations.Debug.Renderer;
import jakarta.validation.constraints.*;
import org.springframework.validation.annotation.Validated;
@@ -9,7 +10,7 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
-
+@Renderer(text = "\"Node: \" + externalMappingId")
@Validated
public class Node {
diff --git a/src/main/java/de/avatic/lcc/model/premises/route/Destination.java b/src/main/java/de/avatic/lcc/model/premises/route/Destination.java
index 9aef0d6..5d323a0 100644
--- a/src/main/java/de/avatic/lcc/model/premises/route/Destination.java
+++ b/src/main/java/de/avatic/lcc/model/premises/route/Destination.java
@@ -17,7 +17,7 @@ public class Destination {
private Boolean isD2d;
- private int leadTimeD2d;
+ private Integer leadTimeD2d;
private BigDecimal repackingCost;
@@ -31,11 +31,11 @@ public class Destination {
private Integer countryId;
- public int getLeadTimeD2d() {
+ public Integer getLeadTimeD2d() {
return leadTimeD2d;
}
- public void setLeadTimeD2d(int leadTimeD2d) {
+ public void setLeadTimeD2d(Integer leadTimeD2d) {
this.leadTimeD2d = leadTimeD2d;
}
diff --git a/src/main/java/de/avatic/lcc/model/utils/DimensionUnit.java b/src/main/java/de/avatic/lcc/model/utils/DimensionUnit.java
index 87141b2..364e17a 100644
--- a/src/main/java/de/avatic/lcc/model/utils/DimensionUnit.java
+++ b/src/main/java/de/avatic/lcc/model/utils/DimensionUnit.java
@@ -2,6 +2,7 @@ package de.avatic.lcc.model.utils;
import com.fasterxml.jackson.annotation.JsonValue;
+import de.avatic.lcc.util.exception.badrequest.InvalidArgumentException;
/**
* An enumeration representing the units of dimension measurement.
@@ -32,8 +33,8 @@ public enum DimensionUnit {
return displayedName;
}
- public Number convertToMM(Number value) {
- return DimensionUnit.MM.convertFrom(value, this).intValue();
+ public Integer convertToMM(Number value) {
+ return Math.toIntExact(Math.round(DimensionUnit.MM.convertFrom(value, this)));
}
/**
@@ -44,9 +45,9 @@ public enum DimensionUnit {
* @return the converted value
* @throws IllegalArgumentException if value or fromUnit is null
*/
- public Number convertFrom(Number value, DimensionUnit fromUnit) {
+ public Double convertFrom(Number value, DimensionUnit fromUnit) {
if (value == null || fromUnit == null) {
- throw new IllegalArgumentException("Value and fromUnit must not be null");
+ throw new InvalidArgumentException("Value and fromUnit must not be null");
}
// Convert to base unit (millimeters)
@@ -63,7 +64,7 @@ public enum DimensionUnit {
* @return the converted value in the target unit
* @throws IllegalArgumentException if the provided value is null
*/
- public Number convertFromMM(Number value) {
+ public Double convertFromMM(Number value) {
return convertFrom(value, MM);
}
}
diff --git a/src/main/java/de/avatic/lcc/model/utils/WeightUnit.java b/src/main/java/de/avatic/lcc/model/utils/WeightUnit.java
index 98cd568..86765f1 100644
--- a/src/main/java/de/avatic/lcc/model/utils/WeightUnit.java
+++ b/src/main/java/de/avatic/lcc/model/utils/WeightUnit.java
@@ -38,7 +38,7 @@ public enum WeightUnit {
* @return the converted value
* @throws IllegalArgumentException if value or fromUnit is null
*/
- public Number convertFrom(Number value, WeightUnit fromUnit) {
+ public Double convertFrom(Number value, WeightUnit fromUnit) {
if (value == null || fromUnit == null) {
throw new IllegalArgumentException("Value and fromUnit must not be null");
}
@@ -50,11 +50,11 @@ public enum WeightUnit {
return valueInBaseUnit / this.baseFactor;
}
- public Number convertFromG(Number value) {
+ public Double convertFromG(Number value) {
return convertFrom(value, G);
}
- public Number convertToG(Double weight) {
- return WeightUnit.G.convertFrom(weight, this);
+ public Integer convertToG(Double weight) {
+ return Math.toIntExact(Math.round(WeightUnit.G.convertFrom(weight, this)));
}
}
\ No newline at end of file
diff --git a/src/main/java/de/avatic/lcc/repositories/NodeRepository.java b/src/main/java/de/avatic/lcc/repositories/NodeRepository.java
index 2701728..609e751 100644
--- a/src/main/java/de/avatic/lcc/repositories/NodeRepository.java
+++ b/src/main/java/de/avatic/lcc/repositories/NodeRepository.java
@@ -289,7 +289,7 @@ public class NodeRepository {
chains.forEach(chain -> {
- var currentChain = new ArrayList();
+ var currentChain = new ArrayList(Collections.nCopies(chain.size(), null));
resolvedChains.add(currentChain);
/*
@@ -302,7 +302,7 @@ public class NodeRepository {
if (predecessor.isEmpty()) {
throw new RuntimeException("Predecessor not found for chain " + chain + " and sequence number " + sequenceNumber);
}
- currentChain.add(sequenceNumber, predecessor.get());
+ currentChain.set(sequenceNumber - 1, predecessor.get());
});
});
@@ -329,7 +329,7 @@ public class NodeRepository {
) <= ?
""";
- return jdbcTemplate.query(query, new NodeMapper(), node.getGeoLat(), node.getGeoLng(), node.getGeoLat());
+ return jdbcTemplate.query(query, new NodeMapper(), node.getGeoLat(), node.getGeoLng(), node.getGeoLat(),regionRadius);
}
@@ -345,14 +345,13 @@ public class NodeRepository {
*/
public List getAllOutboundFor(Integer countryId) {
String query = """
- SELECT node.id AS id, node.name AS name, node.address as address, node.is_source as is_source,
- node.is_destination as is_destination, node.is_intermediate as is_intermediate, node.country_id as country_id, node.predecessor_required as predecessor_required
+ SELECT node.*
FROM node
LEFT JOIN outbound_country_mapping ON outbound_country_mapping.node_id = node.id
WHERE node.is_deprecated = FALSE AND (outbound_country_mapping.country_id = ? OR (node.is_intermediate = TRUE AND node.country_id = ?))
""";
- return jdbcTemplate.query(query, new NodeMapper(), countryId);
+ return jdbcTemplate.query(query, new NodeMapper(), countryId, countryId);
}
public List findNodeListsForReportingByPeriodId(Integer materialId, Integer periodId) {
@@ -386,7 +385,6 @@ public class NodeRepository {
}
-
private class NodeMapper implements RowMapper {
@Override
@@ -407,6 +405,8 @@ public class NodeRepository {
data.setDeprecated(rs.getBoolean("is_deprecated"));
+ data.setExternalMappingId(rs.getString("external_mapping_id"));
+
data.setNodePredecessors(getPredecessorsOf(data.getId()));
data.setOutboundCountries(getOutboundCountriesOf(data.getId()));
diff --git a/src/main/java/de/avatic/lcc/repositories/premise/DestinationRepository.java b/src/main/java/de/avatic/lcc/repositories/premise/DestinationRepository.java
index 477a181..e58f2e0 100644
--- a/src/main/java/de/avatic/lcc/repositories/premise/DestinationRepository.java
+++ b/src/main/java/de/avatic/lcc/repositories/premise/DestinationRepository.java
@@ -95,13 +95,24 @@ public class DestinationRepository {
jdbcTemplate.update(connection -> {
var ps = connection.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
- ps.setInt(1, destination.getAnnualAmount());
+
+ if(destination.getAnnualAmount() == null)
+ ps.setNull(1, java.sql.Types.INTEGER);
+ else
+ ps.setInt(1, destination.getAnnualAmount());
+
ps.setInt(2, destination.getPremiseId());
ps.setInt(3, destination.getDestinationNodeId());
ps.setInt(4, destination.getCountryId());
ps.setBigDecimal(5, destination.getRateD2d());
- ps.setInt(6, destination.getLeadTimeD2d());
+
+ if(destination.getLeadTimeD2d() == null)
+ ps.setNull(6, java.sql.Types.INTEGER);
+ else
+ ps.setInt(6, destination.getLeadTimeD2d());
+
ps.setBoolean(7, destination.getD2d());
+
ps.setBigDecimal(8, destination.getRepackingCost());
ps.setBigDecimal(9, destination.getHandlingCost());
ps.setBigDecimal(10, destination.getDisposalCost());
diff --git a/src/main/java/de/avatic/lcc/repositories/premise/PremiseRepository.java b/src/main/java/de/avatic/lcc/repositories/premise/PremiseRepository.java
index 578212d..d103848 100644
--- a/src/main/java/de/avatic/lcc/repositories/premise/PremiseRepository.java
+++ b/src/main/java/de/avatic/lcc/repositories/premise/PremiseRepository.java
@@ -203,95 +203,191 @@ public class PremiseRepository {
@Transactional
public void updatePackaging(List premiseIds, Integer userId, PackagingDimension hu, Boolean stackable, Boolean mixable) {
- if (premiseIds == null || premiseIds.isEmpty() || userId == null || hu == null) {
+
+ if (premiseIds == null || premiseIds.isEmpty() || userId == null) {
return;
}
- boolean isStackable = stackable != null ? stackable : false;
- boolean isMixable = mixable != null ? mixable : false;
-
MapSqlParameterSource params = new MapSqlParameterSource();
- params.addValue("length", hu.getLength());
- params.addValue("height", hu.getHeight());
- params.addValue("width", hu.getWidth());
- params.addValue("weight", hu.getWeight());
- params.addValue("dimensionUnit", hu.getDimensionUnit().name());
- params.addValue("weightUnit", hu.getWeightUnit().name());
- params.addValue("unitCount", hu.getContentUnitCount());
- params.addValue("stackable", isStackable);
- params.addValue("mixable", isMixable);
params.addValue("userId", userId);
params.addValue("premiseIds", premiseIds);
- String sql = """
- UPDATE premise
- SET individual_hu_length = :length,
- individual_hu_height = :height,
- individual_hu_width = :width,
- individual_hu_weight = :weight,
- hu_displayed_dimension_unit = :dimensionUnit,
- hu_displayed_weight_unit = :weightUnit,
- hu_unit_count = :unitCount,
- hu_stackable = :stackable,
- hu_mixable = :mixable
- WHERE user_id = :userId AND id IN (:premiseIds)
- """;
+ StringBuilder sqlBuilder = new StringBuilder("UPDATE premise SET ");
+ List setClauses = new ArrayList<>();
- namedParameterJdbcTemplate.update(sql, params);
+ // Handle PackagingDimension hu fields
+ if (hu != null) {
+ if (hu.getLength() != null) {
+ setClauses.add("individual_hu_length = :length");
+ params.addValue("length", hu.getLength());
+ }
+
+ if (hu.getHeight() != null) {
+ setClauses.add("individual_hu_height = :height");
+ params.addValue("height", hu.getHeight());
+ }
+
+ if (hu.getWidth() != null) {
+ setClauses.add("individual_hu_width = :width");
+ params.addValue("width", hu.getWidth());
+ }
+
+ if (hu.getWeight() != null) {
+ setClauses.add("individual_hu_weight = :weight");
+ params.addValue("weight", hu.getWeight());
+ }
+
+ if (hu.getDimensionUnit() != null) {
+ setClauses.add("hu_displayed_dimension_unit = :dimensionUnit");
+ params.addValue("dimensionUnit", hu.getDimensionUnit().name());
+ }
+
+ if (hu.getWeightUnit() != null) {
+ setClauses.add("hu_displayed_weight_unit = :weightUnit");
+ params.addValue("weightUnit", hu.getWeightUnit().name());
+ }
+
+ if (hu.getContentUnitCount() != null) {
+ setClauses.add("hu_unit_count = :unitCount");
+ params.addValue("unitCount", hu.getContentUnitCount());
+ }
+ }
+
+ // Handle stackable
+ if (stackable != null) {
+ setClauses.add("hu_stackable = :stackable");
+ params.addValue("stackable", stackable);
+ }
+
+ // Handle mixable
+ if (mixable != null) {
+ setClauses.add("hu_mixable = :mixable");
+ params.addValue("mixable", mixable);
+ }
+
+ // If no fields to update, return early
+ if (setClauses.isEmpty()) {
+ return;
+ }
+
+ // Build the complete SQL
+ sqlBuilder.append(String.join(", ", setClauses));
+ sqlBuilder.append(" WHERE user_id = :userId AND id IN (:premiseIds)");
+
+ String sql = sqlBuilder.toString();
+ var affectedRows = namedParameterJdbcTemplate.update(sql, params);
+
+ if(affectedRows != premiseIds.size())
+ throw new DatabaseException("Premise update failed for " + premiseIds.size() + " premises. Affected rows: " + affectedRows);
}
@Transactional
public void updateMaterial(List premiseIds, Integer userId, String hsCode, BigDecimal tariffRate) {
+ // Build the SET clause dynamically based on non-null parameters
+ List setClauses = new ArrayList<>();
+ List
*/
+ @Renderer(text = "getFullChainView()")
private static class ChainValidationObject {
/** Current position in the chain being processed */
@@ -155,6 +157,14 @@ public class ChainResolver {
var nextCandidates = new ArrayList>();
boolean shortChainFound = false;
+ /*
+ * if we are at the end of the chain and all foreign chains are empty, there is no need to check any further
+ * the chain object itself is a solution -> return empty.
+ */
+
+ if(chainPointer == chain.size() - 1 && foreignChains.stream().allMatch(List::isEmpty))
+ return Collections.emptyList();
+
int foreignIdx = 0;
for (int localIdx = chainPointer + 1; localIdx < chain.size(); localIdx++, foreignIdx++) {
var localNode = chain.get(localIdx);
@@ -175,12 +185,22 @@ public class ChainResolver {
candidates.clear();
candidates.addAll(nextCandidates);
- if (candidates.isEmpty()) {
- if (!shortChainFound)
- this.chainValid = false;
+ if (candidates.isEmpty())
+ break;
+ }
- return Collections.emptyList();
- }
+ /*
+ * if there are no candidates left, there is no need to check any further.
+ * -> set chain to invalid and return empty
+ * (if any of the chains ended before check was finished (== shortChainFound), the chain object itself is a
+ * solution -> so keep the chain valid and return empty)
+ */
+
+ if (candidates.isEmpty()) {
+ if (!shortChainFound)
+ this.chainValid = false;
+
+ return Collections.emptyList();
}
return mergeCandidates(candidates, foreignIdx);
@@ -216,7 +236,7 @@ public class ChainResolver {
* @return true if there are more nodes in the chain, false otherwise
*/
public boolean hasNext() {
- return chainPointer < chain.size() - 1;
+ return chainPointer < chain.size();
}
/**
@@ -258,7 +278,24 @@ public class ChainResolver {
return (chain.stream().map(Node::getId)
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
.entrySet().stream()
- .noneMatch(entry -> entry.getValue() > 1));
+ .anyMatch(entry -> entry.getValue() > 1));
+ }
+
+
+ private String getFullChainView() {
+ StringBuilder sb = new StringBuilder();
+ sb.append(chainValid ? "✓ " : "✗ ");
+ sb.append("Chain[").append(chainPointer).append("|").append(chain.size()).append("]: ");
+
+ for (int i = 0; i < Math.min(chain.size(), 5); i++) {
+ if (i > 0) sb.append(" -> ");
+ if (i == chainPointer) sb.append("[");
+ sb.append(chain.get(i).getExternalMappingId());
+ if (i == chainPointer) sb.append("]");
+ }
+
+ if (chain.size() > 5) sb.append(" ...");
+ return sb.toString();
}
}
diff --git a/src/main/java/de/avatic/lcc/service/calculation/RoutingService.java b/src/main/java/de/avatic/lcc/service/calculation/RoutingService.java
index 00688f7..d156edb 100644
--- a/src/main/java/de/avatic/lcc/service/calculation/RoutingService.java
+++ b/src/main/java/de/avatic/lcc/service/calculation/RoutingService.java
@@ -11,6 +11,7 @@ import de.avatic.lcc.repositories.NodeRepository;
import de.avatic.lcc.repositories.properties.PropertyRepository;
import de.avatic.lcc.repositories.rates.ContainerRateRepository;
import de.avatic.lcc.repositories.rates.MatrixRateRepository;
+import org.jetbrains.annotations.Debug.Renderer;
import org.springframework.stereotype.Service;
import java.util.*;
@@ -416,6 +417,8 @@ public class RoutingService {
* - check if chain is routable
* - add post run and main run
*/
+ var mainruns = container.getMainRuns();
+
for (var mainRun : container.getMainRuns()) {
Node mainRunEndNode = nodeRepository.getById(mainRun.getToNodeId()).orElseThrow();
@@ -423,50 +426,99 @@ public class RoutingService {
TemporaryRateObject mainRunObj = new TemporaryRateObject(mainRunStartNode, mainRunEndNode, TemporaryRateObject.TemporaryRateObjectType.MAIN_RUN, mainRun);
+// var postRuns = container.getPostRuns().get(mainRun.getId());
+//
+// var sortedChains = sortByQuality(destinationChains)
+
+
for (var postRun : container.getPostRuns().get(mainRun.getId())) {
Node postRunEndNode = nodeRepository.getById(postRun.getToNodeId()).orElseThrow();
- TemporaryRateObject postRunObj = new TemporaryRateObject(postRunEndNode, mainRunEndNode, TemporaryRateObject.TemporaryRateObjectType.POST_RUN, postRun);
+ TemporaryRateObject postRunObj = new TemporaryRateObject(mainRunEndNode,postRunEndNode, TemporaryRateObject.TemporaryRateObjectType.POST_RUN, postRun);
- for (var chain : destinationChains) {
- ChainQuality quality = getChainQuality(chain, postRun, mainRun);
+ var sortedChains = sortByQuality(destinationChains, postRun, mainRun);
+
+ for(ChainQuality quality : ChainQuality.values())
+ {
+ boolean qualityRoutable = false;
/* if connection quality is bad, do not try to route this and continue. */
if (quality == ChainQuality.FALLBACK) continue;
- boolean routable = true;
- TemporaryRouteObject routeObj = new TemporaryRouteObject();
+ if(sortedChains.get(quality) == null) continue;
- for (int idx = 1; idx < chain.size() - quality.getSizeOffset(); idx++) {
- Node startNode = chain.get(idx);
- Node endNode = chain.get(idx - 1);
+ for(var chain : sortedChains.get(quality)) {
+ boolean routable = true;
+ TemporaryRouteObject routeObj = new TemporaryRouteObject();
- var rate = connectNodes(startNode, endNode, container);
+ for (int idx = 1; idx < chain.size() - quality.getSizeOffset(); idx++) {
+ Node startNode = chain.get(idx);
+ Node endNode = chain.get(idx - 1);
- if (rate != null) {
- routeObj.addSection(rate);
- } else {
- // chain is not routable -> discard
- routable = false;
- break;
+ var rate = connectNodes(startNode, endNode, container);
+
+ if (rate != null) {
+ routeObj.addSection(rate);
+ } else {
+ // chain is not routable -> discard
+ routable = false;
+ break;
+ }
+ }
+
+ if(routable && quality == ChainQuality.LOW) {
+ var rate = connectNodes(postRunEndNode, chain.getLast(), container);
+
+ if (rate != null) {
+ routeObj.addSection(rate);
+ } else {
+ routable = false;
+ }
+ }
+
+ if (routable) {
+ qualityRoutable = true;
+ routeObj.setQuality(quality);
+ routeObj.addPostRunSection(postRunObj);
+ routeObj.addMainRunSection(mainRunObj);
+ container.addRoute(routeObj);
}
}
- if (routable) {
- routeObj.addPostRunSection(postRunObj);
- routeObj.addMainRunSection(mainRunObj);
- container.addRoute(routeObj);
- }
+ /* if higher quality is routable, do not calculate lower qualities. */
+ if(qualityRoutable)
+ break;
+
}
}
}
}
+ private Map>> sortByQuality(List> chains, ContainerRate postRun, ContainerRate mainRun) {
+
+ Map>> sortedChains = new HashMap<>();
+
+ for(var chain : chains) {
+ ChainQuality chainQuality = getChainQuality(chain, postRun, mainRun);
+ sortedChains.putIfAbsent(chainQuality, new ArrayList<>());
+ sortedChains.get(chainQuality).add(chain);
+ }
+
+ return sortedChains;
+ }
+
private ChainQuality getChainQuality(List chain, ContainerRate postRun, ContainerRate mainRun) {
if (chain.getLast().getId().equals(postRun.getToNodeId())) {
return ChainQuality.MEDIUM;
- } else if (chain.getLast().getId().equals(postRun.getFromNodeId()) && chain.get(chain.size() - 2).getId().equals(postRun.getToNodeId())) {
+ } else if (chain.size() > 2
+ && chain.getLast().getId().equals(mainRun.getFromNodeId())
+ && chain.get(chain.size() - 2).getId().equals(postRun.getFromNodeId())
+ && chain.get(chain.size() - 3).getId().equals(postRun.getToNodeId())) {
+ return ChainQuality.SUPERIOR;
+ } else if (chain.size() > 1
+ && chain.getLast().getId().equals(postRun.getFromNodeId())
+ && chain.get(chain.size() - 2).getId().equals(postRun.getToNodeId())) {
return ChainQuality.HIGH;
} else if (chain.getLast().getCountryId().equals(postRun.getToCountryId())) {
return ChainQuality.LOW;
@@ -505,7 +557,7 @@ public class RoutingService {
}
private enum ChainQuality {
- HIGH(1), MEDIUM(0), LOW(0), FALLBACK(0);
+ SUPERIOR(2), HIGH(1), MEDIUM(0), LOW(0), FALLBACK(0);
private final int sizeOffset;
@@ -534,10 +586,14 @@ public class RoutingService {
private final Node source;
private final Node destination;
/*
- * mainRuns and postRuns retrieved from database.
+ * mainRuns (maps start node to rate) retrieved from the database.
*/
private Map> mainRuns;
+ /*
+ * postRuns (maps main_run container rate id to post_run container rate id) retrieved from the database.
+ */
private Map> postRuns;
+
private MatrixRate sourceMatrixRate;
public TemporaryContainer(Node source, Node destination) {
@@ -603,6 +659,7 @@ public class RoutingService {
}
}
+ @Renderer(text = "getFullDebugText()")
private static class TemporaryRouteObject {
private final List sections;
@@ -613,6 +670,7 @@ public class RoutingService {
private boolean nearBy = false;
private boolean isCheapest = false;
private boolean isFastest = false;
+ private ChainQuality quality;
public TemporaryRouteObject() {
sections = new ArrayList<>();
@@ -688,9 +746,32 @@ public class RoutingService {
public Boolean isFastest() {
return isFastest;
}
+
+ public String getFullDebugText() {
+
+ StringBuilder sb = new StringBuilder();
+
+ if(!sections.isEmpty()) {
+ sb.append(sections.getLast().getFromNode().getExternalMappingId());
+ for (var section : sections.reversed()) {
+ sb.append(" -");
+ sb.append(section.getType().debugText());
+ sb.append("-> ");
+ sb.append(section.getToNode().getExternalMappingId());
+ }
+ } else sb.append("Empty");
+
+
+ return String.format("Route: [%s][%s]", quality.name(), sb.toString());
+ }
+
+ public void setQuality(ChainQuality quality) {
+ this.quality = quality;
+ }
}
+ @Renderer(text = "getFullDebugText()")
private static class TemporaryRateObject {
private final Node fromNode;
@@ -791,7 +872,24 @@ public class RoutingService {
}
private enum TemporaryRateObjectType {
- MATRIX, CONTAINER, POST_RUN, MAIN_RUN;
+ MATRIX("\uD83D\uDDA9"), CONTAINER("\uD83D\uDCE6"), POST_RUN("\uD83D\uDE9B"), MAIN_RUN("\uD83D\uDEA2");
+
+ private final String debugText;
+
+ TemporaryRateObjectType(String debugText) {
+ this.debugText = debugText;
+ }
+
+ public String debugText() {
+ return debugText;
+ }
+ }
+
+ public String getFullDebugText() {
+ if(type.equals(TemporaryRateObjectType.MATRIX)) {
+ return String.format("Rate [%s --> %s [%s, %.2f km]", fromNode.getExternalMappingId(), toNode.getExternalMappingId(), type, approxDistance);
+ }
+ return String.format("Rate [%s --> %s [%s]", fromNode.getExternalMappingId(), toNode.getExternalMappingId(), type);
}
}
}
diff --git a/src/main/java/de/avatic/lcc/service/transformer/generic/DimensionTransformer.java b/src/main/java/de/avatic/lcc/service/transformer/generic/DimensionTransformer.java
index a9e677e..c492971 100644
--- a/src/main/java/de/avatic/lcc/service/transformer/generic/DimensionTransformer.java
+++ b/src/main/java/de/avatic/lcc/service/transformer/generic/DimensionTransformer.java
@@ -4,6 +4,7 @@ import de.avatic.lcc.dto.generic.DimensionDTO;
import de.avatic.lcc.model.packaging.PackagingDimension;
import de.avatic.lcc.model.packaging.PackagingType;
import de.avatic.lcc.model.premises.Premise;
+import de.avatic.lcc.util.exception.badrequest.InvalidArgumentException;
import org.springframework.stereotype.Service;
@Service
@@ -27,14 +28,24 @@ public class DimensionTransformer {
}
public PackagingDimension toDimensionEntity(DimensionDTO dto) {
+
+ if(dto.getDimensionUnit() == null) {
+ throw new InvalidArgumentException("dimension_unit", "null");
+ }
+
+ if(dto.getWeightUnit() == null) {
+ throw new InvalidArgumentException("weight_unit", "null");
+ }
+
var entity = new PackagingDimension();
entity.setId(dto.getId());
entity.setType(dto.getType());
- entity.setLength(dto.getDimensionUnit().convertToMM(dto.getLength()).intValue());
- entity.setWidth(dto.getDimensionUnit().convertToMM(dto.getWidth()).intValue());
- entity.setHeight(dto.getDimensionUnit().convertToMM(dto.getHeight()).intValue());
+
+ entity.setLength(dto.getDimensionUnit().convertToMM(dto.getLength()));
+ entity.setWidth(dto.getDimensionUnit().convertToMM(dto.getWidth()));
+ entity.setHeight( dto.getDimensionUnit().convertToMM(dto.getHeight()));
entity.setDimensionUnit(dto.getDimensionUnit());
- entity.setWeight(dto.getWeightUnit().convertToG(dto.getWeight()).intValue());
+ entity.setWeight(dto.getWeightUnit().convertToG(dto.getWeight()));
entity.setWeightUnit(dto.getWeightUnit());
entity.setContentUnitCount(dto.getContentUnitCount());
entity.setDeprecated(dto.getDeprecated());
diff --git a/src/main/resources/master_data/08-data-containerrate.sql b/src/main/resources/master_data/08-data-containerrate.sql
index 6fddd86..df01a15 100644
--- a/src/main/resources/master_data/08-data-containerrate.sql
+++ b/src/main/resources/master_data/08-data-containerrate.sql
@@ -1,14 +1,5 @@
-SET @validity_period_id = (
- SELECT id
- FROM validity_period
- WHERE state = 'VALID'
- AND start_date <= NOW()
- AND (end_date IS NULL OR end_date > NOW())
- LIMIT 1
-);
-
--- Generated SQL INSERT statements for container rates
--- Generated from shipping_data.csv
+-- Container Rate INSERT Statements
+-- Generiert aus Excel-Datei
INSERT INTO container_rate (
from_node_id,
@@ -20,12 +11,12 @@ INSERT INTO container_rate (
lead_time,
validity_period_id
) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'Xiamen'),
- (SELECT id FROM node WHERE external_mapping_id = 'CNXMN'),
+ (SELECT id FROM node WHERE external_mapping_id = 'Aurangabad'),
+ (SELECT id FROM node WHERE external_mapping_id = 'ExM'),
'ROAD',
- 118.00,
- 129.00,
- 131.00,
+ 200.00,
+ 300.00,
+ 350.00,
1,
@validity_period_id
);
@@ -40,88 +31,8 @@ INSERT INTO container_rate (
lead_time,
validity_period_id
) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'Shanghai'),
- (SELECT id FROM node WHERE external_mapping_id = 'CNSHA'),
- 'ROAD',
- 127.00,
- 144.00,
- 147.00,
- 1,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'Hangzhou'),
- (SELECT id FROM node WHERE external_mapping_id = 'CNSHA'),
- 'ROAD',
- 372.00,
- 535.00,
- 562.00,
- 1,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'Yangzhong'),
- (SELECT id FROM node WHERE external_mapping_id = 'CNSHA'),
- 'ROAD',
- 394.00,
- 570.00,
- 599.00,
- 1,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'Taicang'),
- (SELECT id FROM node WHERE external_mapping_id = 'CNSHA'),
- 'ROAD',
- 183.00,
- 263.00,
- 276.00,
- 1,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'Jinjiang'),
- (SELECT id FROM node WHERE external_mapping_id = 'CNTAO'),
+ (SELECT id FROM node WHERE external_mapping_id = 'Aurangabad'),
+ (SELECT id FROM node WHERE external_mapping_id = 'INJNPT'),
'ROAD',
250.00,
400.00,
@@ -140,12 +51,12 @@ INSERT INTO container_rate (
lead_time,
validity_period_id
) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'Qingdao'),
- (SELECT id FROM node WHERE external_mapping_id = 'CNTAO'),
- 'ROAD',
- 100.00,
- 160.00,
- 170.00,
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ (SELECT id FROM node WHERE external_mapping_id = 'AB'),
+ 'POST_RUN',
+ 200.00,
+ 300.00,
+ 350.00,
1,
@validity_period_id
);
@@ -160,12 +71,12 @@ INSERT INTO container_rate (
lead_time,
validity_period_id
) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'Fuqin'),
- (SELECT id FROM node WHERE external_mapping_id = 'CNTGS'),
- 'ROAD',
- 250.00,
- 400.00,
- 425.00,
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ (SELECT id FROM node WHERE external_mapping_id = 'FGG'),
+ 'POST_RUN',
+ 200.00,
+ 300.00,
+ 350.00,
1,
@validity_period_id
);
@@ -180,12 +91,12 @@ INSERT INTO container_rate (
lead_time,
validity_period_id
) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'Linfen'),
- (SELECT id FROM node WHERE external_mapping_id = 'CNYTN'),
- 'ROAD',
- 250.00,
- 400.00,
- 425.00,
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ (SELECT id FROM node WHERE external_mapping_id = 'KWS'),
+ 'POST_RUN',
+ 200.00,
+ 300.00,
+ 350.00,
1,
@validity_period_id
);
@@ -200,12 +111,52 @@ INSERT INTO container_rate (
lead_time,
validity_period_id
) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'Yantian'),
- (SELECT id FROM node WHERE external_mapping_id = 'CNYTN'),
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ (SELECT id FROM node WHERE external_mapping_id = 'Urban AB'),
+ 'POST_RUN',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ (SELECT id FROM node WHERE external_mapping_id = 'Urban Wörth'),
+ 'POST_RUN',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Bangalore'),
+ (SELECT id FROM node WHERE external_mapping_id = 'ExM'),
'ROAD',
- 264.00,
- 423.00,
- 449.00,
+ 200.00,
+ 300.00,
+ 350.00,
1,
@validity_period_id
);
@@ -240,93 +191,13 @@ INSERT INTO container_rate (
lead_time,
validity_period_id
) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'Pune'),
- (SELECT id FROM node WHERE external_mapping_id = 'INMAA'),
- 'ROAD',
- 250.00,
- 400.00,
- 425.00,
- 1,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'JJ'),
- (SELECT id FROM node WHERE external_mapping_id = 'ExM'),
- 'ROAD',
- 250.00,
- 400.00,
- 425.00,
- 2,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'LX'),
- (SELECT id FROM node WHERE external_mapping_id = 'ExM'),
- 'ROAD',
- 250.00,
- 400.00,
- 425.00,
- 2,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'Aurangabad'),
- (SELECT id FROM node WHERE external_mapping_id = 'INJNPT'),
- 'ROAD',
- 250.00,
- 400.00,
- 425.00,
- 1,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'Chennai'),
- (SELECT id FROM node WHERE external_mapping_id = 'INMAA'),
- 'ROAD',
- 626.00,
- 901.00,
- 965.00,
- 1,
+ (SELECT id FROM node WHERE external_mapping_id = 'CNSHA'),
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ 'SEA',
+ 13795.00,
+ 22472.00,
+ 23448.00,
+ 24,
@validity_period_id
);
@@ -361,155 +232,15 @@ INSERT INTO container_rate (
validity_period_id
) VALUES (
(SELECT id FROM node WHERE external_mapping_id = 'CNTAO'),
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
'SEA',
- 14216.00,
- 23146.00,
- 24148.00,
+ 14208.00,
+ 23133.00,
+ 24134.00,
25,
@validity_period_id
);
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'CNTGS'),
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- 'SEA',
- 14697.00,
- 23915.00,
- 24963.00,
- 26,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'CNXMN'),
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- 'SEA',
- 13901.00,
- 22642.00,
- 23629.00,
- 24,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'CNYTN'),
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- 'SEA',
- 13779.00,
- 22447.00,
- 23422.00,
- 24,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'INMAA'),
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- 'SEA',
- 10355.00,
- 16968.00,
- 17702.00,
- 18,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'ExM'),
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- 'SEA',
- 1200.00,
- 1920.00,
- 2040.00,
- 15,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'INJNPT'),
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- 'SEA',
- 10311.00,
- 16897.00,
- 17627.00,
- 18,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'CNSHA'),
- (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
- 'SEA',
- 13795.00,
- 22472.00,
- 23448.00,
- 24,
- @validity_period_id
- );
-
INSERT INTO container_rate (
from_node_id,
to_node_id,
@@ -521,11 +252,11 @@ INSERT INTO container_rate (
validity_period_id
) VALUES (
(SELECT id FROM node WHERE external_mapping_id = 'CNTAO'),
- (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
'SEA',
- 14208.00,
- 23133.00,
- 24134.00,
+ 14216.00,
+ 23146.00,
+ 24148.00,
25,
@validity_period_id
);
@@ -550,6 +281,26 @@ INSERT INTO container_rate (
@validity_period_id
);
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'CNTGS'),
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ 'SEA',
+ 14697.00,
+ 23915.00,
+ 24963.00,
+ 26,
+ @validity_period_id
+ );
+
INSERT INTO container_rate (
from_node_id,
to_node_id,
@@ -580,136 +331,16 @@ INSERT INTO container_rate (
lead_time,
validity_period_id
) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'CNYTN'),
- (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNXMN'),
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
'SEA',
- 13771.00,
- 22434.00,
- 23408.00,
+ 13901.00,
+ 22642.00,
+ 23629.00,
24,
@validity_period_id
);
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'INMAA'),
- (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
- 'SEA',
- 10347.00,
- 16955.00,
- 17688.00,
- 18,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'ExM'),
- (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
- 'SEA',
- 1200.00,
- 1920.00,
- 2040.00,
- 15,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'INJNPT'),
- (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
- 'SEA',
- 10303.00,
- 16885.00,
- 17614.00,
- 18,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'CNSHA'),
- (SELECT id FROM node WHERE external_mapping_id = 'FRLEH'),
- 'SEA',
- 13691.00,
- 22306.00,
- 23270.00,
- 24,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'CNTAO'),
- (SELECT id FROM node WHERE external_mapping_id = 'FRLEH'),
- 'SEA',
- 14104.00,
- 22966.00,
- 23956.00,
- 25,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'CNTGS'),
- (SELECT id FROM node WHERE external_mapping_id = 'FRLEH'),
- 'SEA',
- 14585.00,
- 23736.00,
- 24772.00,
- 26,
- @validity_period_id
- );
-
INSERT INTO container_rate (
from_node_id,
to_node_id,
@@ -730,146 +361,6 @@ INSERT INTO container_rate (
@validity_period_id
);
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'CNYTN'),
- (SELECT id FROM node WHERE external_mapping_id = 'FRLEH'),
- 'SEA',
- 13667.00,
- 22267.00,
- 23230.00,
- 24,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'INMAA'),
- (SELECT id FROM node WHERE external_mapping_id = 'FRLEH'),
- 'SEA',
- 9795.00,
- 16072.00,
- 16765.00,
- 17,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'ExM'),
- (SELECT id FROM node WHERE external_mapping_id = 'FRLEH'),
- 'SEA',
- 1200.00,
- 1920.00,
- 2040.00,
- 15,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'INJNPT'),
- (SELECT id FROM node WHERE external_mapping_id = 'FRLEH'),
- 'SEA',
- 9751.00,
- 16002.00,
- 16692.00,
- 17,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'CNSHA'),
- (SELECT id FROM node WHERE external_mapping_id = 'ITGOA'),
- 'SEA',
- 12430.00,
- 20288.00,
- 21182.00,
- 22,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'CNTAO'),
- (SELECT id FROM node WHERE external_mapping_id = 'ITGOA'),
- 'SEA',
- 12843.00,
- 20949.00,
- 21871.00,
- 22,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'CNTGS'),
- (SELECT id FROM node WHERE external_mapping_id = 'ITGOA'),
- 'SEA',
- 13324.00,
- 21718.00,
- 22689.00,
- 23,
- @validity_period_id
- );
-
INSERT INTO container_rate (
from_node_id,
to_node_id,
@@ -901,12 +392,12 @@ INSERT INTO container_rate (
validity_period_id
) VALUES (
(SELECT id FROM node WHERE external_mapping_id = 'CNYTN'),
- (SELECT id FROM node WHERE external_mapping_id = 'ITGOA'),
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
'SEA',
- 12406.00,
- 20250.00,
- 21142.00,
- 22,
+ 13771.00,
+ 22434.00,
+ 23408.00,
+ 24,
@validity_period_id
);
@@ -920,13 +411,13 @@ INSERT INTO container_rate (
lead_time,
validity_period_id
) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'INMAA'),
- (SELECT id FROM node WHERE external_mapping_id = 'ITGOA'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNYTN'),
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
'SEA',
- 6069.00,
- 9710.00,
- 10417.00,
- 11,
+ 13779.00,
+ 22447.00,
+ 23422.00,
+ 24,
@validity_period_id
);
@@ -940,52 +431,12 @@ INSERT INTO container_rate (
lead_time,
validity_period_id
) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Chennai'),
(SELECT id FROM node WHERE external_mapping_id = 'ExM'),
- (SELECT id FROM node WHERE external_mapping_id = 'ITGOA'),
- 'SEA',
- 1200.00,
- 1920.00,
- 2040.00,
- 15,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'INJNPT'),
- (SELECT id FROM node WHERE external_mapping_id = 'ITGOA'),
- 'SEA',
- 6025.00,
- 9640.00,
- 10342.00,
- 11,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- (SELECT id FROM node WHERE external_mapping_id = 'Zbůch'),
- 'POST_RUN',
- 250.00,
- 400.00,
- 425.00,
+ 'ROAD',
+ 200.00,
+ 300.00,
+ 350.00,
1,
@validity_period_id
);
@@ -1000,172 +451,12 @@ INSERT INTO container_rate (
lead_time,
validity_period_id
) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- (SELECT id FROM node WHERE external_mapping_id = 'Pfaff Rade'),
- 'POST_RUN',
- 250.00,
- 400.00,
- 425.00,
- 1,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- (SELECT id FROM node WHERE external_mapping_id = 'KOL'),
- 'POST_RUN',
- 250.00,
- 400.00,
- 425.00,
- 1,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- (SELECT id FROM node WHERE external_mapping_id = 'Urban Wörth'),
- 'POST_RUN',
- 250.00,
- 400.00,
- 425.00,
- 1,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- (SELECT id FROM node WHERE external_mapping_id = 'Bat3'),
- 'POST_RUN',
- 250.00,
- 400.00,
- 425.00,
- 1,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- (SELECT id FROM node WHERE external_mapping_id = 'Urban AB'),
- 'POST_RUN',
- 250.00,
- 400.00,
- 425.00,
- 1,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- (SELECT id FROM node WHERE external_mapping_id = 'Jeantet'),
- 'POST_RUN',
- 250.00,
- 400.00,
- 425.00,
- 1,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- (SELECT id FROM node WHERE external_mapping_id = 'AB'),
- 'POST_RUN',
- 250.00,
- 400.00,
- 425.00,
- 1,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- (SELECT id FROM node WHERE external_mapping_id = 'FGG'),
- 'POST_RUN',
- 250.00,
- 400.00,
- 425.00,
- 1,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- (SELECT id FROM node WHERE external_mapping_id = 'KWS'),
- 'POST_RUN',
- 250.00,
- 400.00,
- 425.00,
+ (SELECT id FROM node WHERE external_mapping_id = 'Chennai'),
+ (SELECT id FROM node WHERE external_mapping_id = 'INMAA'),
+ 'ROAD',
+ 626.00,
+ 901.00,
+ 965.00,
1,
@validity_period_id
);
@@ -1210,6 +501,26 @@ INSERT INTO container_rate (
@validity_period_id
);
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ (SELECT id FROM node WHERE external_mapping_id = 'KOL'),
+ 'POST_RUN',
+ 250.00,
+ 400.00,
+ 425.00,
+ 1,
+ @validity_period_id
+ );
+
INSERT INTO container_rate (
from_node_id,
to_node_id,
@@ -1230,6 +541,26 @@ INSERT INTO container_rate (
@validity_period_id
);
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ (SELECT id FROM node WHERE external_mapping_id = 'Pfaff Rade'),
+ 'POST_RUN',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
INSERT INTO container_rate (
from_node_id,
to_node_id,
@@ -1250,6 +581,46 @@ INSERT INTO container_rate (
@validity_period_id
);
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ (SELECT id FROM node WHERE external_mapping_id = 'Urban AB'),
+ 'POST_RUN',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ (SELECT id FROM node WHERE external_mapping_id = 'Urban Wörth'),
+ 'POST_RUN',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
INSERT INTO container_rate (
from_node_id,
to_node_id,
@@ -1281,11 +652,71 @@ INSERT INTO container_rate (
validity_period_id
) VALUES (
(SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ (SELECT id FROM node WHERE external_mapping_id = 'Zbůch'),
+ 'POST_RUN',
+ 250.00,
+ 400.00,
+ 425.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'ExM'),
+ (SELECT id FROM node WHERE external_mapping_id = 'INJNPT'),
+ 'ROAD',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'FRLEH'),
+ (SELECT id FROM node WHERE external_mapping_id = 'Bat3'),
+ 'POST_RUN',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'FRLEH'),
(SELECT id FROM node WHERE external_mapping_id = 'CTT'),
'POST_RUN',
- 250.00,
- 400.00,
- 425.00,
+ 200.00,
+ 300.00,
+ 350.00,
1,
@validity_period_id
);
@@ -1300,9 +731,429 @@ INSERT INTO container_rate (
lead_time,
validity_period_id
) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'FRLEH'),
+ (SELECT id FROM node WHERE external_mapping_id = 'Jeantet'),
+ 'POST_RUN',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Fuqin'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNXMN'),
+ 'ROAD',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'HKMBP'),
(SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ 'SEA',
+ 5000.00,
+ 5500.00,
+ 6000.00,
+ 45,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Hangzhou'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNSHA'),
+ 'ROAD',
+ 372.00,
+ 535.00,
+ 562.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'INJNPT'),
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ 'SEA',
+ 10303.00,
+ 16885.00,
+ 17614.00,
+ 18,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'INJNPT'),
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ 'SEA',
+ 10311.00,
+ 16897.00,
+ 17627.00,
+ 18,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'INJNPT'),
+ (SELECT id FROM node WHERE external_mapping_id = 'FRLEH'),
+ 'SEA',
+ 9751.00,
+ 16002.00,
+ 16692.00,
+ 17,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'INJNPT'),
+ (SELECT id FROM node WHERE external_mapping_id = 'ITGOA'),
+ 'SEA',
+ 6025.00,
+ 9640.00,
+ 10342.00,
+ 11,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'INMAA'),
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ 'SEA',
+ 10347.00,
+ 16955.00,
+ 17688.00,
+ 18,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'INMAA'),
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ 'SEA',
+ 10355.00,
+ 16968.00,
+ 17702.00,
+ 18,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'INMAA'),
+ (SELECT id FROM node WHERE external_mapping_id = 'FRLEH'),
+ 'SEA',
+ 9795.00,
+ 16072.00,
+ 16765.00,
+ 17,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'INMAA'),
+ (SELECT id FROM node WHERE external_mapping_id = 'ITGOA'),
+ 'SEA',
+ 6069.00,
+ 9710.00,
+ 10417.00,
+ 11,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'ITGOA'),
(SELECT id FROM node WHERE external_mapping_id = 'LZZ'),
'POST_RUN',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'ITGOA'),
+ (SELECT id FROM node WHERE external_mapping_id = 'Urban Rolo'),
+ 'POST_RUN',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'JJ'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNXMN'),
+ 'ROAD',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Jinjiang'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNXMN'),
+ 'ROAD',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'LX'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNXMN'),
+ 'ROAD',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Linfen'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNTAO'),
+ 'ROAD',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Linfen'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNTGS'),
+ 'ROAD',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Pune'),
+ (SELECT id FROM node WHERE external_mapping_id = 'ExM'),
+ 'ROAD',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Pune'),
+ (SELECT id FROM node WHERE external_mapping_id = 'INJNPT'),
+ 'ROAD',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Pune'),
+ (SELECT id FROM node WHERE external_mapping_id = 'INMAA'),
+ 'ROAD',
250.00,
400.00,
425.00,
@@ -1320,12 +1171,112 @@ INSERT INTO container_rate (
lead_time,
validity_period_id
) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- (SELECT id FROM node WHERE external_mapping_id = 'Urban Rolo'),
- 'POST_RUN',
- 250.00,
- 400.00,
- 425.00,
+ (SELECT id FROM node WHERE external_mapping_id = 'Qingdao'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNTAO'),
+ 'ROAD',
+ 100.00,
+ 160.00,
+ 170.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Shanghai'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNSHA'),
+ 'ROAD',
+ 127.00,
+ 144.00,
+ 147.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Taicang'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNSHA'),
+ 'ROAD',
+ 183.00,
+ 263.00,
+ 276.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Xiamen'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNXMN'),
+ 'ROAD',
+ 118.00,
+ 129.00,
+ 131.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Yangzhong'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNSHA'),
+ 'ROAD',
+ 394.00,
+ 570.00,
+ 599.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Yantian'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNYTN'),
+ 'ROAD',
+ 264.00,
+ 423.00,
+ 449.00,
1,
@validity_period_id
);
diff --git a/src/main/resources/master_data/excel_to_sql_converter_rate.py b/src/main/resources/master_data/excel_to_sql_converter_rate.py
new file mode 100644
index 0000000..2ea1d65
--- /dev/null
+++ b/src/main/resources/master_data/excel_to_sql_converter_rate.py
@@ -0,0 +1,139 @@
+#!/usr/bin/env python3
+"""
+Excel zu SQL Konverter für Container Rates
+Konvertiert Excel-Datei mit Container-Raten in SQL INSERT-Statements
+"""
+
+import pandas as pd
+import sys
+from pathlib import Path
+
+def load_excel_data(file_path):
+ """
+ Lädt die Excel-Datei und gibt die Daten als DataFrame zurück
+ """
+ try:
+ df = pd.read_excel(file_path)
+ print(f"✓ Excel-Datei geladen: {len(df)} Zeilen")
+ return df
+ except Exception as e:
+ print(f"✗ Fehler beim Laden der Excel-Datei: {e}")
+ sys.exit(1)
+
+def group_and_process_data(df):
+ """
+ Gruppiert die Daten nach From, To, Type und extrahiert die verschiedenen Raten
+ """
+ # Nach From, To, Type gruppieren
+ grouped = df.groupby(['From', 'To', 'Type'])
+
+ sql_statements = []
+
+ for (from_port, to_port, transport_type), group in grouped:
+ # Initialisiere Werte
+ rate_teu = 'NULL'
+ rate_feu = 'NULL'
+ rate_hc = 'NULL'
+ lead_time = 'NULL'
+
+ # Lead time aus der ersten Zeile nehmen (sollte in allen Zeilen gleich sein)
+ if not group.empty:
+ lead_time = group.iloc[0]['lead_time']
+
+ # Raten nach container_type extrahieren
+ for _, row in group.iterrows():
+ container_type = row['container_type']
+ rate = row['rate']
+
+ if container_type == "20'":
+ rate_teu = f"{float(rate):.2f}"
+ elif container_type == "40'":
+ rate_feu = f"{float(rate):.2f}"
+ elif container_type == "40'HC":
+ rate_hc = f"{float(rate):.2f}"
+
+ # SQL INSERT Statement erstellen
+ sql_statement = f"""INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = '{from_port}'),
+ (SELECT id FROM node WHERE external_mapping_id = '{to_port}'),
+ '{transport_type}',
+ {rate_teu},
+ {rate_feu},
+ {rate_hc},
+ {lead_time},
+ @validity_period_id
+ );"""
+
+ sql_statements.append(sql_statement)
+
+ return sql_statements
+
+def write_sql_file(sql_statements, output_file):
+ """
+ Schreibt die SQL-Statements in eine Datei
+ """
+ try:
+ with open(output_file, 'w', encoding='utf-8') as f:
+ # Header schreiben
+ f.write("-- Container Rate INSERT Statements\n")
+ f.write("-- Generiert aus Excel-Datei\n\n")
+
+ # SQL Statements schreiben
+ for statement in sql_statements:
+ f.write(statement)
+ f.write("\n\n")
+
+ print(f"✓ SQL-Datei erstellt: {output_file}")
+ print(f"✓ {len(sql_statements)} INSERT-Statements generiert")
+
+ except Exception as e:
+ print(f"✗ Fehler beim Schreiben der SQL-Datei: {e}")
+ sys.exit(1)
+
+def main():
+ """
+ Hauptfunktion
+ """
+ # Dateipfade
+ excel_file = "container_rates.xlsx"
+ sql_file = "08-data-containerrate.sql"
+
+ # Prüfen ob Excel-Datei existiert
+ if not Path(excel_file).exists():
+ print(f"✗ Excel-Datei nicht gefunden: {excel_file}")
+ print("Bitte stellen Sie sicher, dass die Datei im aktuellen Verzeichnis liegt.")
+ sys.exit(1)
+
+ print("Container Rates Excel zu SQL Konverter")
+ print("=" * 40)
+
+ # 1. Excel-Datei laden
+ df = load_excel_data(excel_file)
+
+ # 2. Datenstruktur anzeigen
+ print(f"Spalten: {list(df.columns)}")
+ print(f"Eindeutige From-Werte: {df['From'].nunique()}")
+ print(f"Eindeutige To-Werte: {df['To'].nunique()}")
+ print(f"Eindeutige Type-Werte: {df['Type'].unique()}")
+ print(f"Container Types: {df['container_type'].unique()}")
+
+ # 3. Daten gruppieren und SQL-Statements erstellen
+ print("\n⚙️ Verarbeite Daten...")
+ sql_statements = group_and_process_data(df)
+
+ # 4. SQL-Datei schreiben
+ write_sql_file(sql_statements, sql_file)
+
+ print(f"\n✅ Fertig! SQL-Datei wurde erstellt: {sql_file}")
+
+if __name__ == "__main__":
+ main()
diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql
index 99b88fe..e04935f 100644
--- a/src/main/resources/schema.sql
+++ b/src/main/resources/schema.sql
@@ -254,7 +254,7 @@ CREATE TABLE IF NOT EXISTS material
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
part_number CHAR(12) NOT NULL,
normalized_part_number CHAR(12) NOT NULL,
- hs_code CHAR(8),
+ hs_code CHAR(11),
name VARCHAR(500) NOT NULL,
is_deprecated BOOLEAN NOT NULL DEFAULT FALSE,
CONSTRAINT `uq_normalized_part_number` UNIQUE (`normalized_part_number`)
@@ -342,7 +342,7 @@ CREATE TABLE IF NOT EXISTS premise
material_cost DECIMAL(15, 2) DEFAULT NULL COMMENT 'aka MEK_A in EUR',
is_fca_enabled BOOLEAN DEFAULT FALSE,
oversea_share DECIMAL(8, 4) DEFAULT NULL,
- hs_code CHAR(8) DEFAULT NULL,
+ hs_code CHAR(11) DEFAULT NULL,
tariff_rate DECIMAL(8, 4) DEFAULT NULL,
state CHAR(10) NOT NULL DEFAULT 'DRAFT',
individual_hu_length INT UNSIGNED COMMENT 'user entered dimensions in mm (if system-wide packaging is used, packaging dimensions are copied here after creation)',
@@ -381,7 +381,7 @@ CREATE TABLE IF NOT EXISTS premise_destination
destination_node_id INT NOT NULL,
is_d2d BOOLEAN DEFAULT FALSE,
rate_d2d DECIMAL(15, 2) DEFAULT NULL CHECK (rate_d2d >= 0),
- lead_time_d2d INT UNSIGNED DEFAULT NULL,
+ lead_time_d2d INT UNSIGNED DEFAULT NULL CHECK (lead_time_d2d >= 0),
repacking_cost DECIMAL(15, 2) DEFAULT NULL CHECK (repacking_cost >= 0),
handling_cost DECIMAL(15, 2) DEFAULT NULL CHECK (handling_cost >= 0),
disposal_cost DECIMAL(15, 2) DEFAULT NULL CHECK (disposal_cost >= 0),
diff --git a/src/test/java/de/avatic/lcc/controller/calculation/PremiseControllerIntegrationTest.java b/src/test/java/de/avatic/lcc/controller/calculation/PremiseControllerIntegrationTest.java
index 33cacf9..d1166de 100644
--- a/src/test/java/de/avatic/lcc/controller/calculation/PremiseControllerIntegrationTest.java
+++ b/src/test/java/de/avatic/lcc/controller/calculation/PremiseControllerIntegrationTest.java
@@ -1,34 +1,34 @@
package de.avatic.lcc.controller.calculation;
import com.fasterxml.jackson.databind.ObjectMapper;
+import de.avatic.lcc.dto.calculation.create.CreatePremiseDTO;
import de.avatic.lcc.dto.calculation.edit.PremiseDetailDTO;
-import de.avatic.lcc.dto.generic.MaterialDTO;
+import de.avatic.lcc.dto.calculation.edit.destination.DestinationCreateDTO;
+import de.avatic.lcc.dto.calculation.edit.masterData.MaterialUpdateDTO;
+import de.avatic.lcc.dto.calculation.edit.masterData.PackagingUpdateDTO;
+import de.avatic.lcc.dto.calculation.edit.masterData.PriceUpdateDTO;
+import de.avatic.lcc.dto.generic.DimensionDTO;
import de.avatic.lcc.model.nodes.Location;
import de.avatic.lcc.model.premises.Premise;
import de.avatic.lcc.model.premises.PremiseState;
-import de.avatic.lcc.model.premises.route.Destination;
import de.avatic.lcc.model.utils.DimensionUnit;
import de.avatic.lcc.model.utils.WeightUnit;
-import de.avatic.lcc.repositories.premise.DestinationRepository;
-import de.avatic.lcc.repositories.premise.PremiseRepository;
import org.assertj.core.api.InstanceOfAssertFactories;
import org.junit.jupiter.api.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Import;
+import org.springframework.http.MediaType;
import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.jdbc.core.RowMapper;
import org.springframework.test.context.jdbc.Sql;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.LinkedMultiValueMap;
-import org.springframework.util.MultiValueMap;
-import java.sql.ResultSet;
-import java.sql.SQLException;
+import java.math.BigDecimal;
+import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
-import java.util.stream.Collectors;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import static org.hamcrest.Matchers.*;
@@ -45,24 +45,115 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
public class PremiseControllerIntegrationTest {
+ @Autowired
+ protected JdbcTemplate jdbcTemplate;
@Autowired
private MockMvc mockMvc;
-
@Autowired
private ObjectMapper objectMapper;
-
- @Autowired
- protected JdbcTemplate jdbcTemplate;
-
@Autowired
private PremiseControllerTestData premiseTestData;
+ private List getPremisesFromDb() {
+ String query = "SELECT * FROM premise";
+ return jdbcTemplate.query(query, (rs, rowNum) -> {
+ var entity = new Premise();
+
+ entity.setId(rs.getInt("id"));
+
+ entity.setPackagingId(rs.getInt("packaging_id"));
+ if (rs.wasNull())
+ entity.setPackagingId(null);
+
+ entity.setMaterialId(rs.getInt("material_id"));
+ if (rs.wasNull())
+ entity.setMaterialId(null);
+
+ entity.setSupplierNodeId(rs.getInt("supplier_node_id"));
+ if (rs.wasNull())
+ entity.setSupplierNodeId(null);
+
+ entity.setUserSupplierNodeId(rs.getInt("user_supplier_node_id"));
+ if (rs.wasNull())
+ entity.setUserSupplierNodeId(null);
+
+ entity.setLocation(new Location(rs.getBigDecimal("geo_lng").doubleValue(), rs.getBigDecimal("geo_lat").doubleValue()));
+
+ entity.setCountryId(rs.getInt("country_id"));
+ if (rs.wasNull())
+ entity.setCountryId(null);
+
+ entity.setUserId(rs.getInt("user_id"));
+ if (rs.wasNull())
+ entity.setUserId(null);
+
+ entity.setMaterialCost(rs.getBigDecimal("material_cost"));
+
+ entity.setHsCode(rs.getString("hs_code"));
+
+ entity.setCustomRate(rs.getBigDecimal("tariff_rate"));
+
+ entity.setFcaEnabled(rs.getBoolean("is_fca_enabled"));
+ if (rs.wasNull())
+ entity.setFcaEnabled(null);
+
+ entity.setOverseaShare(rs.getBigDecimal("oversea_share"));
+
+ entity.setIndividualHuHeight(rs.getInt("individual_hu_height"));
+ if (rs.wasNull())
+ entity.setIndividualHuHeight(null);
+
+ entity.setIndividualHuWidth(rs.getInt("individual_hu_width"));
+ if (rs.wasNull())
+ entity.setIndividualHuWidth(null);
+
+ entity.setIndividualHuLength(rs.getInt("individual_hu_length"));
+ if (rs.wasNull())
+ entity.setIndividualHuLength(null);
+
+ entity.setIndividualHuWeight(rs.getInt("individual_hu_weight"));
+ if (rs.wasNull())
+ entity.setIndividualHuWeight(null);
+
+ entity.setHuDisplayedDimensionUnit(DimensionUnit.valueOf(rs.getString("hu_displayed_dimension_unit")));
+ entity.setHuDisplayedWeightUnit(WeightUnit.valueOf(rs.getString("hu_displayed_weight_unit")));
+
+ entity.setHuStackable(rs.getBoolean("hu_stackable"));
+ if (rs.wasNull())
+ entity.setHuStackable(null);
+
+ entity.setHuMixable(rs.getBoolean("hu_mixable"));
+ if (rs.wasNull())
+ entity.setHuMixable(null);
+
+ entity.setHuUnitCount(rs.getInt("hu_unit_count"));
+ if (rs.wasNull())
+ entity.setHuUnitCount(null);
+
+ entity.setState(PremiseState.valueOf(rs.getString("state")));
+ entity.setUpdatedAt(rs.getTimestamp("updated_at").toLocalDateTime());
+ entity.setCreatedAt(rs.getTimestamp("created_at").toLocalDateTime());
+
+ return entity;
+ });
+ }
+
+ private Integer getNodeIdByExternalMappingId(String mappingId) {
+ String query = "SELECT id FROM node WHERE external_mapping_id = ? LIMIT 1";
+ return jdbcTemplate.queryForObject(query, Integer.class, mappingId);
+ }
+
+ private Integer getUserNodeIdByName(String name) {
+ String query = "SELECT id FROM sys_user_node WHERE name = ? LIMIT 1";
+ return jdbcTemplate.queryForObject(query, Integer.class, name);
+ }
@Nested
@Sql(scripts = {"classpath:master_data/alldata.sql", "classpath:master_data/users.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_CLASS)
@Sql(scripts = {"classpath:master_data/users-cleanup.sql", "classpath:master_data/alldata-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_CLASS)
@Sql(scripts = {"classpath:master_data/premises.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
@Sql(scripts = {"classpath:master_data/premises-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
+ @DisplayName("GET /api/calculation/view - View Calculations Tests")
class ViewPremisesTests {
// Test for GET /api/calculation/view
@@ -115,6 +206,7 @@ public class PremiseControllerIntegrationTest {
@Sql(scripts = {"classpath:master_data/users-cleanup.sql", "classpath:master_data/alldata-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_CLASS)
@Sql(scripts = {"classpath:master_data/premises.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
@Sql(scripts = {"classpath:master_data/premises-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
+ @DisplayName("GET /api/calculation/search - Search Tests")
class SearchMaterialTests {
// Test for GET /api/calculation/search
@@ -156,7 +248,6 @@ public class PremiseControllerIntegrationTest {
}
/**
- *
* Testcases
*
*
@@ -336,13 +427,13 @@ public class PremiseControllerIntegrationTest {
* | Sarah Smith |
*
*
- *
*/
@Nested
@Sql(scripts = {"classpath:master_data/alldata.sql", "classpath:master_data/users.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_CLASS)
@Sql(scripts = {"classpath:master_data/users-cleanup.sql", "classpath:master_data/alldata-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_CLASS)
@Sql(scripts = {"classpath:master_data/premises.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
@Sql(scripts = {"classpath:master_data/premises-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
+ @DisplayName("POST /api/calculation/create - Create Calculations Tests")
class CreatePremiseTests {
@BeforeEach
@@ -361,18 +452,18 @@ public class PremiseControllerIntegrationTest {
public void createPremiseCase1() throws Exception {
- var supplierId = getSupplierIdByExternalMappingId("LX");
+ var supplierId = getNodeIdByExternalMappingId("LX");
var premisesBeforeCreate = getPremisesFromDb();
var materialId = getMaterialIdByPartNumber("28152640129");
+ var dto = new CreatePremiseDTO();
+ dto.setMaterialIds(List.of(materialId));
+ dto.setSupplierIds(List.of(supplierId));
+ dto.setUserSupplierIds(null);
- MultiValueMap params = new LinkedMultiValueMap<>();
- params.add("material", materialId.toString());
- params.add("supplier", supplierId.toString());
- params.add("from_scratch", "false");
var result = mockMvc.perform(post("/api/calculation/create")
- .params(params))
+ .contentType(MediaType.APPLICATION_JSON).content(objectMapper.writeValueAsString(dto)))
.andExpect(status().isOk())
.andDo(print())
.andExpect(jsonPath("$[?(@.material.part_number=='28152640129')].handling_unit.content_unit_count", hasItem(2))) // content_unit_count is in the newest premise set to 2
@@ -408,18 +499,19 @@ public class PremiseControllerIntegrationTest {
@DisplayName("POST /api/calculation/create - Recycles DRAFT from same user")
public void createPremiseCase2() throws Exception {
- var supplierId = getSupplierIdByExternalMappingId("LX");
+ var supplierId = getNodeIdByExternalMappingId("LX");
var premisesBeforeCreate = getPremisesFromDb();
var materialId = getMaterialIdByPartNumber("8222640822");
- MultiValueMap params = new LinkedMultiValueMap<>();
- params.add("material", materialId.toString());
- params.add("supplier", supplierId.toString());
- params.add("from_scratch", "false");
+ var dto = new CreatePremiseDTO();
+ dto.setMaterialIds(List.of(materialId));
+ dto.setSupplierIds(List.of(supplierId));
+ dto.setUserSupplierIds(null);
+
var result = mockMvc.perform(post("/api/calculation/create")
- .params(params))
+ .contentType(MediaType.APPLICATION_JSON).content(objectMapper.writeValueAsString(dto)))
.andExpect(status().isOk())
.andDo(print())
.andExpect(jsonPath("$[?(@.material.part_number=='8222640822')].handling_unit.content_unit_count", hasItem(3))) // content_unit_count is in the correct permise set to 3
@@ -439,18 +531,19 @@ public class PremiseControllerIntegrationTest {
@Test
@DisplayName("POST /api/calculation/create - Recycles COMPLETED from other user")
public void createPremiseCase3() throws Exception {
- var supplierId = getSupplierIdByExternalMappingId("LX");
+ var supplierId = getNodeIdByExternalMappingId("LX");
var premisesBeforeCreate = getPremisesFromDb();
var materialId = getMaterialIdByPartNumber("3064540201");
- MultiValueMap params = new LinkedMultiValueMap<>();
- params.add("material", materialId.toString());
- params.add("supplier", supplierId.toString());
- params.add("from_scratch", "false");
+ var dto = new CreatePremiseDTO();
+ dto.setMaterialIds(List.of(materialId));
+ dto.setSupplierIds(List.of(supplierId));
+ dto.setUserSupplierIds(null);
+
var result = mockMvc.perform(post("/api/calculation/create")
- .params(params))
+ .contentType(MediaType.APPLICATION_JSON).content(objectMapper.writeValueAsString(dto)))
.andExpect(status().isOk())
.andDo(print())
.andExpect(jsonPath("$[?(@.material.part_number=='3064540201')].handling_unit.content_unit_count", hasItem(4))) // content_unit_count is in the correct premise set to 4
@@ -469,18 +562,19 @@ public class PremiseControllerIntegrationTest {
@Test
@DisplayName("POST /api/calculation/create - Creates new Premise if no old data")
public void createPremiseCase4() throws Exception {
- var supplierId = getSupplierIdByExternalMappingId("LX");
+ var supplierId = getNodeIdByExternalMappingId("LX");
var premisesBeforeCreate = getPremisesFromDb();
var materialId = getMaterialIdByPartNumber("8212640113");
- MultiValueMap params = new LinkedMultiValueMap<>();
- params.add("material", materialId.toString());
- params.add("supplier", supplierId.toString());
- params.add("from_scratch", "false");
+ var dto = new CreatePremiseDTO();
+ dto.setMaterialIds(List.of(materialId));
+ dto.setSupplierIds(List.of(supplierId));
+ dto.setUserSupplierIds(null);
+
var result = mockMvc.perform(post("/api/calculation/create")
- .params(params))
+ .contentType(MediaType.APPLICATION_JSON).content(objectMapper.writeValueAsString(dto)))
.andExpect(status().isOk())
.andDo(print())
.andExpect(jsonPath("$[?(@.material.part_number=='8212640113')].handling_unit.content_unit_count", hasItem(54))) // content_unit_count is the data from the packaging database.
@@ -500,18 +594,19 @@ public class PremiseControllerIntegrationTest {
@Test
@DisplayName("POST /api/calculation/create - Uses UserSupplier DRAFT")
public void createPremiseCase5() throws Exception {
- var supplierId = getUserSupplierIdByName("My Supplier 1");
+ var supplierId = getUserNodeIdByName("My Supplier 1");
var premisesBeforeCreate = getPremisesFromDb();
var materialId = getMaterialIdByPartNumber("28152640129");
- MultiValueMap params = new LinkedMultiValueMap<>();
- params.add("material", materialId.toString());
- params.add("user_supplier", supplierId.toString());
- params.add("from_scratch", "false");
+ var dto = new CreatePremiseDTO();
+ dto.setMaterialIds(List.of(materialId));
+ dto.setUserSupplierIds(List.of(supplierId));
+ dto.setSupplierIds(null);
+
var result = mockMvc.perform(post("/api/calculation/create")
- .params(params))
+ .contentType(MediaType.APPLICATION_JSON).content(objectMapper.writeValueAsString(dto)))
.andExpect(status().isOk())
.andDo(print())
.andExpect(jsonPath("$[?(@.material.part_number=='28152640129')].handling_unit.content_unit_count", hasItem(8))) // content_unit_count is the data from the packaging database.
@@ -530,18 +625,19 @@ public class PremiseControllerIntegrationTest {
@Test
@DisplayName("POST /api/calculation/create - Access Violation UserSupplier")
public void createPremiseCase6() throws Exception {
- var supplierId = getUserSupplierIdByName("My Supplier 2");
+ var supplierId = getUserNodeIdByName("My Supplier 2");
var premisesBeforeCreate = getPremisesFromDb();
var materialId = getMaterialIdByPartNumber("28152640129");
- MultiValueMap params = new LinkedMultiValueMap<>();
- params.add("material", materialId.toString());
- params.add("user_supplier", supplierId.toString());
- params.add("from_scratch", "false");
+ var dto = new CreatePremiseDTO();
+ dto.setMaterialIds(List.of(materialId));
+ dto.setUserSupplierIds(List.of(supplierId));
+ dto.setSupplierIds(null);
+
var result = mockMvc.perform(post("/api/calculation/create")
- .params(params))
+ .contentType(MediaType.APPLICATION_JSON).content(objectMapper.writeValueAsString(dto)))
.andExpect(status().isForbidden())
.andDo(print())
.andReturn();
@@ -554,22 +650,22 @@ public class PremiseControllerIntegrationTest {
@Test
@DisplayName("POST /api/calculation/create - From Scratch behavior test")
public void createPremiseCase7() throws Exception {
- var supplierId = getSupplierIdByExternalMappingId("LX");
+ var supplierId = getNodeIdByExternalMappingId("LX");
var materialId1 = getMaterialIdByPartNumber("28152640129");
var materialId2 = getMaterialIdByPartNumber("8222640822");
var materialId4 = getMaterialIdByPartNumber("8212640113");
var premisesBeforeCreate = getPremisesFromDb();
- MultiValueMap params = new LinkedMultiValueMap<>();
- params.add("material", materialId1.toString());
- params.add("material", materialId2.toString());
- params.add("material", materialId4.toString());
- params.add("supplier", supplierId.toString());
- params.add("from_scratch", "true");
+ var dto = new CreatePremiseDTO();
+ dto.setMaterialIds(Arrays.asList(materialId1, materialId2, materialId4));
+ dto.setSupplierIds(List.of(supplierId));
+ dto.setUserSupplierIds(Collections.emptyList());
+ dto.setCreateEmpty(true);
+
var result = mockMvc.perform(post("/api/calculation/create")
- .params(params))
+ .contentType(MediaType.APPLICATION_JSON).content(objectMapper.writeValueAsString(dto)))
.andExpect(status().isOk())
.andDo(print())
.andExpect(jsonPath("$[?(@.material.part_number=='28152640129')].handling_unit.content_unit_count", hasItem(1))) // content_unit_count is the data from the packaging database.
@@ -595,13 +691,15 @@ public class PremiseControllerIntegrationTest {
var premisesBeforeCreate = getPremisesFromDb();
- MultiValueMap params = new LinkedMultiValueMap<>();
- params.add("material", String.valueOf(-1));
- params.add("supplier", String.valueOf(1));
- params.add("from_scratch", "false");
+
+ var dto = new CreatePremiseDTO();
+ dto.setMaterialIds(List.of(-1));
+ dto.setSupplierIds(List.of(1));
+ dto.setUserSupplierIds(null);
+
var result = mockMvc.perform(post("/api/calculation/create")
- .params(params))
+ .contentType(MediaType.APPLICATION_JSON).content(objectMapper.writeValueAsString(dto)))
.andExpect(status().isBadRequest())
.andDo(print())
.andReturn();
@@ -619,13 +717,14 @@ public class PremiseControllerIntegrationTest {
var premisesBeforeCreate = getPremisesFromDb();
- MultiValueMap params = new LinkedMultiValueMap<>();
- params.add("material", String.valueOf(1));
- params.add("supplier", String.valueOf(-1));
- params.add("from_scratch", "false");
+ var dto = new CreatePremiseDTO();
+ dto.setMaterialIds(List.of(1));
+ dto.setSupplierIds(List.of(-1));
+ dto.setUserSupplierIds(null);
+
var result = mockMvc.perform(post("/api/calculation/create")
- .params(params))
+ .contentType(MediaType.APPLICATION_JSON).content(objectMapper.writeValueAsString(dto)))
.andExpect(status().isBadRequest())
.andDo(print())
.andReturn();
@@ -642,13 +741,14 @@ public class PremiseControllerIntegrationTest {
public void createPremiseCase10() throws Exception {
var premisesBeforeCreate = getPremisesFromDb();
- MultiValueMap params = new LinkedMultiValueMap<>();
- params.add("material", String.valueOf(1));
- params.add("user_supplier", String.valueOf(-1));
- params.add("from_scratch", "false");
+ var dto = new CreatePremiseDTO();
+ dto.setMaterialIds(List.of(-1));
+ dto.setUserSupplierIds(List.of(1));
+ dto.setSupplierIds(null);
+
var result = mockMvc.perform(post("/api/calculation/create")
- .params(params))
+ .contentType(MediaType.APPLICATION_JSON).content(objectMapper.writeValueAsString(dto)))
.andExpect(status().isBadRequest())
.andDo(print())
.andReturn();
@@ -659,94 +759,6 @@ public class PremiseControllerIntegrationTest {
}
- private List getPremisesFromDb() {
- String query = "SELECT * FROM premise";
- return jdbcTemplate.query(query, new RowMapper<>() {
-
- @Override
- public Premise mapRow(ResultSet rs, int rowNum) throws SQLException {
- var entity = new Premise();
-
- entity.setId(rs.getInt("id"));
-
- entity.setPackagingId(rs.getInt("packaging_id"));
- if (rs.wasNull())
- entity.setPackagingId(null);
-
- entity.setMaterialId(rs.getInt("material_id"));
- if (rs.wasNull())
- entity.setMaterialId(null);
-
- entity.setSupplierNodeId(rs.getInt("supplier_node_id"));
- if (rs.wasNull())
- entity.setSupplierNodeId(null);
-
- entity.setUserSupplierNodeId(rs.getInt("user_supplier_node_id"));
- if (rs.wasNull())
- entity.setUserSupplierNodeId(null);
-
- entity.setLocation(new Location(rs.getBigDecimal("geo_lng").doubleValue(), rs.getBigDecimal("geo_lat").doubleValue()));
-
- entity.setCountryId(rs.getInt("country_id"));
- if (rs.wasNull())
- entity.setCountryId(null);
-
- entity.setUserId(rs.getInt("user_id"));
- if (rs.wasNull())
- entity.setUserId(null);
-
- entity.setMaterialCost(rs.getBigDecimal("material_cost"));
-
- entity.setHsCode(rs.getString("hs_code"));
-
- entity.setCustomRate(rs.getBigDecimal("tariff_rate"));
-
- entity.setFcaEnabled(rs.getBoolean("is_fca_enabled"));
- if (rs.wasNull())
- entity.setFcaEnabled(null);
-
- entity.setOverseaShare(rs.getBigDecimal("oversea_share"));
-
- entity.setIndividualHuHeight(rs.getInt("individual_hu_height"));
- if (rs.wasNull())
- entity.setIndividualHuHeight(null);
-
- entity.setIndividualHuWidth(rs.getInt("individual_hu_width"));
- if (rs.wasNull())
- entity.setIndividualHuWidth(null);
-
- entity.setIndividualHuLength(rs.getInt("individual_hu_length"));
- if (rs.wasNull())
- entity.setIndividualHuLength(null);
-
- entity.setIndividualHuWeight(rs.getInt("individual_hu_weight"));
- if (rs.wasNull())
- entity.setIndividualHuWeight(null);
-
- entity.setHuDisplayedDimensionUnit(DimensionUnit.valueOf(rs.getString("hu_displayed_dimension_unit")));
- entity.setHuDisplayedWeightUnit(WeightUnit.valueOf(rs.getString("hu_displayed_weight_unit")));
-
- entity.setHuStackable(rs.getBoolean("hu_stackable"));
- if (rs.wasNull())
- entity.setHuStackable(null);
-
- entity.setHuMixable(rs.getBoolean("hu_mixable"));
- if (rs.wasNull())
- entity.setHuMixable(null);
-
- entity.setHuUnitCount(rs.getInt("hu_unit_count"));
- if (rs.wasNull())
- entity.setHuUnitCount(null);
-
- entity.setState(PremiseState.valueOf(rs.getString("state")));
- entity.setUpdatedAt(rs.getTimestamp("updated_at").toLocalDateTime());
- entity.setCreatedAt(rs.getTimestamp("created_at").toLocalDateTime());
-
- return entity;
- }
- });
- }
-
private Integer getMaterialIdByPartNumber(String partNumber) {
String query = "SELECT id FROM material WHERE part_number = ? LIMIT 1";
@@ -763,52 +775,1092 @@ public class PremiseControllerIntegrationTest {
return jdbcTemplate.queryForObject(query, Integer.class, name);
}
- private Integer getSupplierIdByExternalMappingId(String mappingId) {
- String query = "SELECT id FROM node WHERE external_mapping_id = ? LIMIT 1";
- return jdbcTemplate.queryForObject(query, Integer.class, mappingId);
+
+ }
+
+ @Nested
+ @Sql(scripts = {"classpath:master_data/alldata.sql", "classpath:master_data/users.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_CLASS)
+ @Sql(scripts = {"classpath:master_data/users-cleanup.sql", "classpath:master_data/alldata-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_CLASS)
+ @Sql(scripts = {"classpath:master_data/premises.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
+ @Sql(scripts = {"classpath:master_data/premises-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
+ @DisplayName("GET /api/calculation/edit - Get Calculations Tests")
+ class GetPremiseTests {
+ @BeforeEach
+ void setUp() {
+ premiseTestData.generateData();
}
- private Integer getUserSupplierIdByName(String name) {
- String query = "SELECT id FROM sys_user_node WHERE name = ? LIMIT 1";
- return jdbcTemplate.queryForObject(query, Integer.class, name);
+ @AfterEach
+ void cleanUp() {
+ premiseTestData.deleteAll();
}
+
+ @Test
+ @DisplayName("GET /api/calculation/edit - Get Single Premiss")
+ public void getPremiseCase1() throws Exception {
+
+ var premises = getPremisesFromDb();
+
+ var premise1 = premises.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+
+
+ var result = mockMvc.perform(get("/api/calculation/edit")
+ .content(Collections.singletonList(premise1.getId()).toString()).contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isOk())
+ .andDo(print())
+ .andExpect(jsonPath("$[?(@.material.part_number=='28152640129')].handling_unit.content_unit_count", hasItem(2))) // content_unit_count is in the newest premise set to 2
+ .andExpect(jsonPath("$", hasSize(1)))
+ .andReturn();
+
+
+ var dtos = objectMapper.readValue(result.getResponse().getContentAsString(), PremiseDetailDTO[].class);
+
+
+ // check that destinations are copied from completed.
+ assertThat(dtos[0].getDestinations().getFirst().getDestinationNode().getName()).isEqualTo("Aschaffenburg (KION plant)");
+
+ assertThat(dtos[0].getDestinations().getFirst().getRoutes().getFirst().getTransitNodes().get(0).getName()).isEqualTo("Linde (China) Forklift Truck (Supplier)");
+ assertThat(dtos[0].getDestinations().getFirst().getRoutes().getFirst().getTransitNodes().get(1).getName()).isEqualTo("Xiamen (Port)");
+ assertThat(dtos[0].getDestinations().getFirst().getRoutes().get(0).getTransitNodes().get(2).getName()).isEqualTo("Hamburg (Port)");
+ assertThat(dtos[0].getDestinations().getFirst().getRoutes().get(0).getTransitNodes().get(3).getName()).isEqualTo("Aschaffenburg (KION plant)");
+
+ assertThat(dtos[0].getDestinations().getFirst().getRoutes().get(1).getTransitNodes().get(0).getName()).isEqualTo("Linde (China) Forklift Truck (Supplier)");
+ assertThat(dtos[0].getDestinations().getFirst().getRoutes().get(1).getTransitNodes().get(1).getName()).isEqualTo("Xiamen (Port)");
+ assertThat(dtos[0].getDestinations().getFirst().getRoutes().get(1).getTransitNodes().get(2).getName()).isEqualTo("Zeebrugge (Port)");
+ assertThat(dtos[0].getDestinations().getFirst().getRoutes().get(1).getTransitNodes().get(3).getName()).isEqualTo("Aschaffenburg (KION plant)");
+
+ }
+
+ @Test
+ @DisplayName("GET /api/calculation/edit - Get Multiple Premisses")
+ public void getPremiseCase2() throws Exception {
+
+ var premises = getPremisesFromDb();
+
+ var premise1 = premises.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premise3 = premises.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+
+ var result = mockMvc.perform(get("/api/calculation/edit")
+ .content(Arrays.asList(premise1.getId(), premise3.getId()).toString()).contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isOk())
+ .andDo(print())
+ .andExpect(jsonPath("$[?(@.material.part_number=='28152640129')].handling_unit.content_unit_count", hasItem(2)))
+ .andExpect(jsonPath("$[?(@.material.part_number=='8222640822')].handling_unit.content_unit_count", hasItem(3)))
+ .andExpect(jsonPath("$", hasSize(2)))
+ .andReturn();
+
+
+ var dtos = objectMapper.readValue(result.getResponse().getContentAsString(), PremiseDetailDTO[].class);
+
+ assertThat(dtos[0].getDestinations().getFirst().getDestinationNode().getName()).isEqualTo("Aschaffenburg (KION plant)");
+
+ assertThat(dtos[0].getDestinations().getFirst().getRoutes().getFirst().getTransitNodes().get(0).getName()).isEqualTo("Linde (China) Forklift Truck (Supplier)");
+ assertThat(dtos[0].getDestinations().getFirst().getRoutes().getFirst().getTransitNodes().get(1).getName()).isEqualTo("Xiamen (Port)");
+ assertThat(dtos[0].getDestinations().getFirst().getRoutes().get(0).getTransitNodes().get(2).getName()).isEqualTo("Hamburg (Port)");
+ assertThat(dtos[0].getDestinations().getFirst().getRoutes().get(0).getTransitNodes().get(3).getName()).isEqualTo("Aschaffenburg (KION plant)");
+
+ assertThat(dtos[0].getDestinations().getFirst().getRoutes().get(1).getTransitNodes().get(0).getName()).isEqualTo("Linde (China) Forklift Truck (Supplier)");
+ assertThat(dtos[0].getDestinations().getFirst().getRoutes().get(1).getTransitNodes().get(1).getName()).isEqualTo("Xiamen (Port)");
+ assertThat(dtos[0].getDestinations().getFirst().getRoutes().get(1).getTransitNodes().get(2).getName()).isEqualTo("Zeebrugge (Port)");
+ assertThat(dtos[0].getDestinations().getFirst().getRoutes().get(1).getTransitNodes().get(3).getName()).isEqualTo("Aschaffenburg (KION plant)");
+
+
+ assertThat(dtos[0].getDestinations().get(1).getDestinationNode().getName()).isEqualTo("Stříbro (KION plant)");
+ assertThat(dtos[1].getDestinations().getFirst().getDestinationNode().getName()).isEqualTo("Châtellerault (KION plant)");
+
+ }
+
}
+
@Nested
- class SetSupplierTests {
+ @Sql(scripts = {"classpath:master_data/alldata.sql", "classpath:master_data/users.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_CLASS)
+ @Sql(scripts = {"classpath:master_data/users-cleanup.sql", "classpath:master_data/alldata-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_CLASS)
+ @Sql(scripts = {"classpath:master_data/premises.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
+ @Sql(scripts = {"classpath:master_data/premises-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
+ @DisplayName("POST /api/calculation/material - Update Material tests")
+ class UpdateMaterialTests {
+
+
+ @Test
+ @DisplayName("POST /api/calculation/material - happy path (update tariff_rate)")
+ public void updateMaterialCase1() throws Exception {
+
+ var premisesBeforeUpdate = getPremisesFromDb();
+ var premise1 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premise3 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+ var premise8 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 8).findFirst().orElseThrow();
+
+ var dto = new MaterialUpdateDTO();
+ dto.setTariffRate(13.5);
+ dto.setPremiseIds(Arrays.asList(premise1.getId(), premise3.getId(), premise8.getId()));
+
+
+ mockMvc.perform(post("/api/calculation/material")
+ .content(objectMapper.writeValueAsString(dto)).contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isOk())
+ .andDo(print());
+
+ var premisesAfterUpdate = getPremisesFromDb();
+
+ var premiseAfter1 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premiseAfter3 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+ var premiseAfter8 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 8).findFirst().orElseThrow();
+
+ assertThat(premiseAfter1.getCustomRate()).isEqualByComparingTo(BigDecimal.valueOf(13.5));
+ assertThat(premiseAfter3.getCustomRate()).isEqualByComparingTo(BigDecimal.valueOf(13.5));
+ assertThat(premiseAfter8.getCustomRate()).isEqualByComparingTo(BigDecimal.valueOf(13.5));
+
+ assertThat(premiseAfter1.getHsCode()).isEqualTo(premise1.getHsCode());
+ assertThat(premiseAfter3.getHsCode()).isEqualTo(premise3.getHsCode());
+ assertThat(premiseAfter8.getHsCode()).isEqualTo(premise8.getHsCode());
+
+ }
+
+ @Test
+ @DisplayName("POST /api/calculation/material - happy path (update hs_code)")
+ public void updateMaterialCase2() throws Exception {
+
+ var premisesBeforeUpdate = getPremisesFromDb();
+ var premise1 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premise3 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+ var premise8 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 8).findFirst().orElseThrow();
+
+ var dto = new MaterialUpdateDTO();
+ dto.setHsCode("12345678");
+ dto.setPremiseIds(Arrays.asList(premise1.getId(), premise3.getId(), premise8.getId()));
+
+
+ mockMvc.perform(post("/api/calculation/material")
+ .content(objectMapper.writeValueAsString(dto)).contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isOk())
+ .andDo(print());
+
+ var premisesAfterUpdate = getPremisesFromDb();
+
+ var premiseAfter1 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premiseAfter3 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+ var premiseAfter8 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 8).findFirst().orElseThrow();
+
+ assertThat(premiseAfter1.getCustomRate()).isEqualByComparingTo(premise1.getCustomRate());
+ assertThat(premiseAfter3.getCustomRate()).isEqualByComparingTo(premise3.getCustomRate());
+ assertThat(premiseAfter8.getCustomRate()).isEqualByComparingTo(premise8.getCustomRate());
+
+ assertThat(premiseAfter1.getHsCode()).isEqualTo("12345678");
+ assertThat(premiseAfter3.getHsCode()).isEqualTo("12345678");
+ assertThat(premiseAfter8.getHsCode()).isEqualTo("12345678");
+
+ }
+
+ @Test
+ @DisplayName("POST /api/calculation/material - happy path (update both)")
+ public void updateMaterialCase3() throws Exception {
+
+ var premisesBeforeUpdate = getPremisesFromDb();
+ var premise1 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premise3 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+ var premise8 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 8).findFirst().orElseThrow();
+
+ var dto = new MaterialUpdateDTO();
+ dto.setTariffRate(13.5);
+ dto.setHsCode("12345678");
+ dto.setPremiseIds(Arrays.asList(premise1.getId(), premise3.getId(), premise8.getId()));
+
+
+ mockMvc.perform(post("/api/calculation/material")
+ .content(objectMapper.writeValueAsString(dto)).contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isOk())
+ .andDo(print());
+
+ var premisesAfterUpdate = getPremisesFromDb();
+
+ var premiseAfter1 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premiseAfter3 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+ var premiseAfter8 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 8).findFirst().orElseThrow();
+
+ assertThat(premiseAfter1.getCustomRate()).isEqualByComparingTo(BigDecimal.valueOf(13.5));
+ assertThat(premiseAfter3.getCustomRate()).isEqualByComparingTo(BigDecimal.valueOf(13.5));
+ assertThat(premiseAfter8.getCustomRate()).isEqualByComparingTo(BigDecimal.valueOf(13.5));
+
+ assertThat(premiseAfter1.getHsCode()).isEqualTo("12345678");
+ assertThat(premiseAfter3.getHsCode()).isEqualTo("12345678");
+ assertThat(premiseAfter8.getHsCode()).isEqualTo("12345678");
+
+ }
+
+
+ @Test
+ @DisplayName("POST /api/calculation/material - error (invalid hs_code - to long)")
+ public void updateMaterialCase4() throws Exception {
+
+ var premisesBeforeUpdate = getPremisesFromDb();
+ var premise1 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premise3 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+ var premise8 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 8).findFirst().orElseThrow();
+
+ var dto = new MaterialUpdateDTO();
+ dto.setHsCode("123456123456");
+ dto.setPremiseIds(Arrays.asList(premise1.getId(), premise3.getId(), premise8.getId()));
+
+
+ mockMvc.perform(post("/api/calculation/material")
+ .content(objectMapper.writeValueAsString(dto)).contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andDo(print());
+
+ var premisesAfterUpdate = getPremisesFromDb();
+
+ var premiseAfter1 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premiseAfter3 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+ var premiseAfter8 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 8).findFirst().orElseThrow();
+
+ assertThat(premiseAfter1.getCustomRate()).isEqualByComparingTo(premise1.getCustomRate());
+ assertThat(premiseAfter3.getCustomRate()).isEqualByComparingTo(premise3.getCustomRate());
+ assertThat(premiseAfter8.getCustomRate()).isEqualByComparingTo(premise8.getCustomRate());
+
+ assertThat(premiseAfter1.getHsCode()).isEqualTo(premise1.getHsCode());
+ assertThat(premiseAfter3.getHsCode()).isEqualTo(premise3.getHsCode());
+ assertThat(premiseAfter8.getHsCode()).isEqualTo(premise8.getHsCode());
+
+ }
+
+ @Test
+ @DisplayName("POST /api/calculation/material - error (invalid hs_code - to short)")
+ public void updateMaterialCase5() throws Exception {
+
+ var premisesBeforeUpdate = getPremisesFromDb();
+ var premise1 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premise3 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+ var premise8 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 8).findFirst().orElseThrow();
+
+ var dto = new MaterialUpdateDTO();
+ dto.setHsCode("12345");
+ dto.setPremiseIds(Arrays.asList(premise1.getId(), premise3.getId(), premise8.getId()));
+
+
+ mockMvc.perform(post("/api/calculation/material")
+ .content(objectMapper.writeValueAsString(dto)).contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andDo(print());
+
+ var premisesAfterUpdate = getPremisesFromDb();
+
+ var premiseAfter1 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premiseAfter3 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+ var premiseAfter8 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 8).findFirst().orElseThrow();
+
+ assertThat(premiseAfter1.getCustomRate()).isEqualByComparingTo(premise1.getCustomRate());
+ assertThat(premiseAfter3.getCustomRate()).isEqualByComparingTo(premise3.getCustomRate());
+ assertThat(premiseAfter8.getCustomRate()).isEqualByComparingTo(premise8.getCustomRate());
+
+ assertThat(premiseAfter1.getHsCode()).isEqualTo(premise1.getHsCode());
+ assertThat(premiseAfter3.getHsCode()).isEqualTo(premise3.getHsCode());
+ assertThat(premiseAfter8.getHsCode()).isEqualTo(premise8.getHsCode());
+
+ }
+
+ @Test
+ @DisplayName("POST /api/calculation/material - error (invalid hs_code - invalid characters)")
+ public void updateMaterialCase6() throws Exception {
+
+ var premisesBeforeUpdate = getPremisesFromDb();
+ var premise1 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premise3 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+ var premise8 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 8).findFirst().orElseThrow();
+
+ var dto = new MaterialUpdateDTO();
+ dto.setHsCode("123abc45");
+ dto.setPremiseIds(Arrays.asList(premise1.getId(), premise3.getId(), premise8.getId()));
+
+
+ mockMvc.perform(post("/api/calculation/material")
+ .content(objectMapper.writeValueAsString(dto)).contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andDo(print());
+
+ var premisesAfterUpdate = getPremisesFromDb();
+
+ var premiseAfter1 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premiseAfter3 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+ var premiseAfter8 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 8).findFirst().orElseThrow();
+
+ assertThat(premiseAfter1.getCustomRate()).isEqualByComparingTo(premise1.getCustomRate());
+ assertThat(premiseAfter3.getCustomRate()).isEqualByComparingTo(premise3.getCustomRate());
+ assertThat(premiseAfter8.getCustomRate()).isEqualByComparingTo(premise8.getCustomRate());
+
+ assertThat(premiseAfter1.getHsCode()).isEqualTo(premise1.getHsCode());
+ assertThat(premiseAfter3.getHsCode()).isEqualTo(premise3.getHsCode());
+ assertThat(premiseAfter8.getHsCode()).isEqualTo(premise8.getHsCode());
+
+ }
+
+
+ @Test
+ @DisplayName("POST /api/calculation/material - error (invalid hs_code - negative number)")
+ public void updateMaterialCase7() throws Exception {
+
+ var premisesBeforeUpdate = getPremisesFromDb();
+ var premise1 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premise3 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+ var premise8 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 8).findFirst().orElseThrow();
+
+ var dto = new MaterialUpdateDTO();
+ dto.setHsCode("-12345678");
+ dto.setPremiseIds(Arrays.asList(premise1.getId(), premise3.getId(), premise8.getId()));
+
+
+ mockMvc.perform(post("/api/calculation/material")
+ .content(objectMapper.writeValueAsString(dto)).contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andDo(print());
+
+ var premisesAfterUpdate = getPremisesFromDb();
+
+ var premiseAfter1 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premiseAfter3 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+ var premiseAfter8 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 8).findFirst().orElseThrow();
+
+ assertThat(premiseAfter1.getCustomRate()).isEqualByComparingTo(premise1.getCustomRate());
+ assertThat(premiseAfter3.getCustomRate()).isEqualByComparingTo(premise3.getCustomRate());
+ assertThat(premiseAfter8.getCustomRate()).isEqualByComparingTo(premise8.getCustomRate());
+
+ assertThat(premiseAfter1.getHsCode()).isEqualTo(premise1.getHsCode());
+ assertThat(premiseAfter3.getHsCode()).isEqualTo(premise3.getHsCode());
+ assertThat(premiseAfter8.getHsCode()).isEqualTo(premise8.getHsCode());
+
+ }
+
+ @Test
+ @DisplayName("POST /api/calculation/material - error (invalid tariff_rate values)")
+ public void updateMaterialCase8() throws Exception {
+
+ var premisesBeforeUpdate = getPremisesFromDb();
+ var premise1 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premise3 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+ var premise8 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 8).findFirst().orElseThrow();
+
+ // to many digits
+ var dto = new MaterialUpdateDTO();
+ dto.setTariffRate(13.54321);
+ dto.setPremiseIds(Arrays.asList(premise1.getId(), premise3.getId(), premise8.getId()));
+
+
+ mockMvc.perform(post("/api/calculation/material")
+ .content(objectMapper.writeValueAsString(dto)).contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andDo(print());
+
+ // negative
+ dto = new MaterialUpdateDTO();
+ dto.setTariffRate(-13.5);
+ dto.setPremiseIds(Arrays.asList(premise1.getId(), premise3.getId(), premise8.getId()));
+
+
+ mockMvc.perform(post("/api/calculation/material")
+ .content(objectMapper.writeValueAsString(dto)).contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andDo(print());
+
+ // to big
+ dto = new MaterialUpdateDTO();
+ dto.setTariffRate(13333.5);
+ dto.setPremiseIds(Arrays.asList(premise1.getId(), premise3.getId(), premise8.getId()));
+
+
+ mockMvc.perform(post("/api/calculation/material")
+ .content(objectMapper.writeValueAsString(dto)).contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andDo(print());
+
+
+ var premisesAfterUpdate = getPremisesFromDb();
+
+ var premiseAfter1 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premiseAfter3 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+ var premiseAfter8 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 8).findFirst().orElseThrow();
+
+ assertThat(premiseAfter1.getCustomRate()).isEqualByComparingTo(premise1.getCustomRate());
+ assertThat(premiseAfter3.getCustomRate()).isEqualByComparingTo(premise3.getCustomRate());
+ assertThat(premiseAfter8.getCustomRate()).isEqualByComparingTo(premise8.getCustomRate());
+
+ assertThat(premiseAfter1.getHsCode()).isEqualTo(premise1.getHsCode());
+ assertThat(premiseAfter3.getHsCode()).isEqualTo(premise3.getHsCode());
+ assertThat(premiseAfter8.getHsCode()).isEqualTo(premise8.getHsCode());
+
+ }
+
}
@Nested
- class SetPackagingTests {
+ @Sql(scripts = {"classpath:master_data/alldata.sql", "classpath:master_data/users.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_CLASS)
+ @Sql(scripts = {"classpath:master_data/users-cleanup.sql", "classpath:master_data/alldata-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_CLASS)
+ @Sql(scripts = {"classpath:master_data/premises.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
+ @Sql(scripts = {"classpath:master_data/premises-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
+ @DisplayName("POST /api/calculation/packaging - Update Packaging tests")
+ class UpdatePackagingTests {
+
+ @Test
+ @DisplayName("POST /api/calculation/packaging - happy path (update mixable)")
+ public void updatePackagingCase1() throws Exception {
+
+ var premisesBeforeUpdate = getPremisesFromDb();
+ var premise1 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premise3 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+ var premise8 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 8).findFirst().orElseThrow();
+
+ var dto = new PackagingUpdateDTO();
+ dto.setMixable(false);
+ dto.setPremiseIds(Arrays.asList(premise1.getId(), premise3.getId(), premise8.getId()));
+
+
+ var result = mockMvc.perform(post("/api/calculation/packaging")
+ .content(objectMapper.writeValueAsString(dto)).contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isOk())
+ .andDo(print())
+ .andReturn();
+
+
+ var premisesAfterUpdate = getPremisesFromDb();
+
+ var premiseAfter1 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premiseAfter3 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+ var premiseAfter8 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 8).findFirst().orElseThrow();
+
+ assertThat(premiseAfter1.getHuMixable()).isEqualTo(false);
+ assertThat(premiseAfter3.getHuMixable()).isEqualTo(false);
+ assertThat(premiseAfter8.getHuMixable()).isEqualTo(false);
+
+ assertThat(premiseAfter1.getHuStackable()).isEqualTo(premise1.getHuStackable());
+ assertThat(premiseAfter3.getHuStackable()).isEqualTo(premise3.getHuStackable());
+ assertThat(premiseAfter8.getHuStackable()).isEqualTo(premise8.getHuStackable());
+
+ assertThat(premiseAfter1.getIndividualHuWeight()).isEqualTo(premise1.getIndividualHuWeight());
+ assertThat(premiseAfter1.getIndividualHuLength()).isEqualTo(premise1.getIndividualHuLength());
+ assertThat(premiseAfter1.getIndividualHuWidth()).isEqualTo(premise1.getIndividualHuWidth());
+ assertThat(premiseAfter1.getIndividualHuHeight()).isEqualTo(premise1.getIndividualHuHeight());
+ assertThat(premiseAfter1.getHuDisplayedDimensionUnit()).isEqualTo(premise1.getHuDisplayedDimensionUnit());
+ assertThat(premiseAfter1.getHuDisplayedWeightUnit()).isEqualTo(premise1.getHuDisplayedWeightUnit());
+
+ assertThat(premiseAfter3.getIndividualHuWeight()).isEqualTo(premise3.getIndividualHuWeight());
+ assertThat(premiseAfter3.getIndividualHuLength()).isEqualTo(premise3.getIndividualHuLength());
+ assertThat(premiseAfter3.getIndividualHuWidth()).isEqualTo(premise3.getIndividualHuWidth());
+ assertThat(premiseAfter3.getIndividualHuHeight()).isEqualTo(premise3.getIndividualHuHeight());
+ assertThat(premiseAfter3.getHuDisplayedDimensionUnit()).isEqualTo(premise3.getHuDisplayedDimensionUnit());
+ assertThat(premiseAfter3.getHuDisplayedWeightUnit()).isEqualTo(premise3.getHuDisplayedWeightUnit());
+
+ assertThat(premiseAfter8.getIndividualHuWeight()).isEqualTo(premise8.getIndividualHuWeight());
+ assertThat(premiseAfter8.getIndividualHuLength()).isEqualTo(premise8.getIndividualHuLength());
+ assertThat(premiseAfter8.getIndividualHuWidth()).isEqualTo(premise8.getIndividualHuWidth());
+ assertThat(premiseAfter8.getIndividualHuHeight()).isEqualTo(premise8.getIndividualHuHeight());
+ assertThat(premiseAfter8.getHuDisplayedDimensionUnit()).isEqualTo(premise8.getHuDisplayedDimensionUnit());
+ assertThat(premiseAfter8.getHuDisplayedWeightUnit()).isEqualTo(premise8.getHuDisplayedWeightUnit());
+
+ }
+
+ @Test
+ @DisplayName("POST /api/calculation/packaging - happy path (update stackable)")
+ public void updatePackagingCase2() throws Exception {
+
+ var premisesBeforeUpdate = getPremisesFromDb();
+ var premise1 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premise3 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+ var premise8 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 8).findFirst().orElseThrow();
+
+ var dto = new PackagingUpdateDTO();
+ dto.setStackable(!premise1.getHuStackable());
+ dto.setPremiseIds(Arrays.asList(premise1.getId(), premise3.getId(), premise8.getId()));
+
+
+ var result = mockMvc.perform(post("/api/calculation/packaging")
+ .content(objectMapper.writeValueAsString(dto)).contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isOk())
+ .andDo(print())
+ .andReturn();
+
+
+ var premisesAfterUpdate = getPremisesFromDb();
+
+ var premiseAfter1 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premiseAfter3 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+ var premiseAfter8 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 8).findFirst().orElseThrow();
+
+ assertThat(premiseAfter1.getHuStackable()).isEqualTo(dto.getStackable());
+ assertThat(premiseAfter3.getHuStackable()).isEqualTo(dto.getStackable());
+ assertThat(premiseAfter8.getHuStackable()).isEqualTo(dto.getStackable());
+
+ assertThat(premiseAfter1.getHuMixable()).isEqualTo(premise1.getHuMixable());
+ assertThat(premiseAfter3.getHuMixable()).isEqualTo(premise3.getHuMixable());
+ assertThat(premiseAfter8.getHuMixable()).isEqualTo(premise8.getHuMixable());
+
+ assertThat(premiseAfter1.getIndividualHuWeight()).isEqualTo(premise1.getIndividualHuWeight());
+ assertThat(premiseAfter1.getIndividualHuLength()).isEqualTo(premise1.getIndividualHuLength());
+ assertThat(premiseAfter1.getIndividualHuWidth()).isEqualTo(premise1.getIndividualHuWidth());
+ assertThat(premiseAfter1.getIndividualHuHeight()).isEqualTo(premise1.getIndividualHuHeight());
+ assertThat(premiseAfter1.getHuDisplayedDimensionUnit()).isEqualTo(premise1.getHuDisplayedDimensionUnit());
+ assertThat(premiseAfter1.getHuDisplayedWeightUnit()).isEqualTo(premise1.getHuDisplayedWeightUnit());
+
+ assertThat(premiseAfter3.getIndividualHuWeight()).isEqualTo(premise3.getIndividualHuWeight());
+ assertThat(premiseAfter3.getIndividualHuLength()).isEqualTo(premise3.getIndividualHuLength());
+ assertThat(premiseAfter3.getIndividualHuWidth()).isEqualTo(premise3.getIndividualHuWidth());
+ assertThat(premiseAfter3.getIndividualHuHeight()).isEqualTo(premise3.getIndividualHuHeight());
+ assertThat(premiseAfter3.getHuDisplayedDimensionUnit()).isEqualTo(premise3.getHuDisplayedDimensionUnit());
+ assertThat(premiseAfter3.getHuDisplayedWeightUnit()).isEqualTo(premise3.getHuDisplayedWeightUnit());
+
+ assertThat(premiseAfter8.getIndividualHuWeight()).isEqualTo(premise8.getIndividualHuWeight());
+ assertThat(premiseAfter8.getIndividualHuLength()).isEqualTo(premise8.getIndividualHuLength());
+ assertThat(premiseAfter8.getIndividualHuWidth()).isEqualTo(premise8.getIndividualHuWidth());
+ assertThat(premiseAfter8.getIndividualHuHeight()).isEqualTo(premise8.getIndividualHuHeight());
+ assertThat(premiseAfter8.getHuDisplayedDimensionUnit()).isEqualTo(premise8.getHuDisplayedDimensionUnit());
+ assertThat(premiseAfter8.getHuDisplayedWeightUnit()).isEqualTo(premise8.getHuDisplayedWeightUnit());
+
+ }
+
+ @Test
+ @DisplayName("POST /api/calculation/packaging - happy path (update dimensions)")
+ public void updatePackagingCase3() throws Exception {
+
+ var premisesBeforeUpdate = getPremisesFromDb();
+ var premise1 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premise3 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+ var premise8 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 8).findFirst().orElseThrow();
+
+ var dimensions = new DimensionDTO();
+ dimensions.setDimensionUnit(DimensionUnit.CM);
+ dimensions.setWeightUnit(WeightUnit.KG);
+ dimensions.setHeight(100.5);
+ dimensions.setWidth(125.0);
+ dimensions.setLength(70.0);
+ dimensions.setWeight(55.5);
+
+ var dto = new PackagingUpdateDTO();
+ dto.setDimensions(dimensions);
+ dto.setPremiseIds(Arrays.asList(premise1.getId(), premise3.getId(), premise8.getId()));
+
+
+ var result = mockMvc.perform(post("/api/calculation/packaging")
+ .content(objectMapper.writeValueAsString(dto)).contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isOk())
+ .andDo(print())
+ .andReturn();
+
+ var premisesAfterUpdate = getPremisesFromDb();
+
+ var premiseAfter1 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premiseAfter3 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+ var premiseAfter8 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 8).findFirst().orElseThrow();
+
+ assertThat(premiseAfter1.getHuStackable()).isEqualTo(premise1.getHuStackable());
+ assertThat(premiseAfter3.getHuStackable()).isEqualTo(premise3.getHuStackable());
+ assertThat(premiseAfter8.getHuStackable()).isEqualTo(premise8.getHuStackable());
+
+ assertThat(premiseAfter1.getHuMixable()).isEqualTo(premise1.getHuMixable());
+ assertThat(premiseAfter3.getHuMixable()).isEqualTo(premise3.getHuMixable());
+ assertThat(premiseAfter8.getHuMixable()).isEqualTo(premise8.getHuMixable());
+
+ assertThat(premiseAfter1.getIndividualHuWeight()).isEqualTo(55500);
+ assertThat(premiseAfter1.getIndividualHuLength()).isEqualTo(700);
+ assertThat(premiseAfter1.getIndividualHuWidth()).isEqualTo(1250);
+ assertThat(premiseAfter1.getIndividualHuHeight()).isEqualTo(1005);
+ assertThat(premiseAfter1.getHuDisplayedDimensionUnit()).isEqualTo(DimensionUnit.CM);
+ assertThat(premiseAfter1.getHuDisplayedWeightUnit()).isEqualTo(WeightUnit.KG);
+
+ assertThat(premiseAfter3.getIndividualHuWeight()).isEqualTo(55500);
+ assertThat(premiseAfter3.getIndividualHuLength()).isEqualTo(700);
+ assertThat(premiseAfter3.getIndividualHuWidth()).isEqualTo(1250);
+ assertThat(premiseAfter3.getIndividualHuHeight()).isEqualTo(1005);
+ assertThat(premiseAfter3.getHuDisplayedDimensionUnit()).isEqualTo(DimensionUnit.CM);
+ assertThat(premiseAfter3.getHuDisplayedWeightUnit()).isEqualTo(WeightUnit.KG);
+
+ assertThat(premiseAfter8.getIndividualHuWeight()).isEqualTo(55500);
+ assertThat(premiseAfter8.getIndividualHuLength()).isEqualTo(700);
+ assertThat(premiseAfter8.getIndividualHuWidth()).isEqualTo(1250);
+ assertThat(premiseAfter8.getIndividualHuHeight()).isEqualTo(1005);
+ assertThat(premiseAfter8.getHuDisplayedDimensionUnit()).isEqualTo(DimensionUnit.CM);
+ assertThat(premiseAfter8.getHuDisplayedWeightUnit()).isEqualTo(WeightUnit.KG);
+
+ }
+
+ @Test
+ @DisplayName("POST /api/calculation/packaging - error (partial update dimensions)")
+ public void updatePackagingCase4() throws Exception {
+
+ var premisesBeforeUpdate = getPremisesFromDb();
+ var premise1 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premise3 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+ var premise8 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 8).findFirst().orElseThrow();
+
+ var dimensions = new DimensionDTO();
+ dimensions.setDimensionUnit(DimensionUnit.M);
+ dimensions.setWeightUnit(WeightUnit.G);
+ dimensions.setHeight(1.005);
+ dimensions.setWidth(1.250);
+ dimensions.setLength(null);
+ dimensions.setWeight(55500.0);
+
+ var dto = new PackagingUpdateDTO();
+ dto.setDimensions(dimensions);
+ dto.setPremiseIds(Arrays.asList(premise1.getId(), premise3.getId(), premise8.getId()));
+
+
+ var result = mockMvc.perform(post("/api/calculation/packaging")
+ .content(objectMapper.writeValueAsString(dto)).contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andDo(print())
+ .andReturn();
+
+ var premisesAfterUpdate = getPremisesFromDb();
+
+ var premiseAfter1 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premiseAfter3 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+ var premiseAfter8 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 8).findFirst().orElseThrow();
+
+ assertThat(premiseAfter1.getHuStackable()).isEqualTo(premise1.getHuStackable());
+ assertThat(premiseAfter3.getHuStackable()).isEqualTo(premise3.getHuStackable());
+ assertThat(premiseAfter8.getHuStackable()).isEqualTo(premise8.getHuStackable());
+
+ assertThat(premiseAfter1.getHuMixable()).isEqualTo(premise1.getHuMixable());
+ assertThat(premiseAfter3.getHuMixable()).isEqualTo(premise3.getHuMixable());
+ assertThat(premiseAfter8.getHuMixable()).isEqualTo(premise8.getHuMixable());
+
+ assertThat(premiseAfter1.getIndividualHuWeight()).isEqualTo(premise1.getIndividualHuWeight());
+ assertThat(premiseAfter1.getIndividualHuLength()).isEqualTo(premise1.getIndividualHuLength());
+ assertThat(premiseAfter1.getIndividualHuWidth()).isEqualTo(premise1.getIndividualHuWidth());
+ assertThat(premiseAfter1.getIndividualHuHeight()).isEqualTo(premise1.getIndividualHuHeight());
+ assertThat(premiseAfter1.getHuDisplayedDimensionUnit()).isEqualTo(premise1.getHuDisplayedDimensionUnit());
+ assertThat(premiseAfter1.getHuDisplayedWeightUnit()).isEqualTo(premise1.getHuDisplayedWeightUnit());
+
+ assertThat(premiseAfter3.getIndividualHuWeight()).isEqualTo(premise3.getIndividualHuWeight());
+ assertThat(premiseAfter3.getIndividualHuLength()).isEqualTo(premise3.getIndividualHuLength());
+ assertThat(premiseAfter3.getIndividualHuWidth()).isEqualTo(premise3.getIndividualHuWidth());
+ assertThat(premiseAfter3.getIndividualHuHeight()).isEqualTo(premise3.getIndividualHuHeight());
+ assertThat(premiseAfter3.getHuDisplayedDimensionUnit()).isEqualTo(premise3.getHuDisplayedDimensionUnit());
+ assertThat(premiseAfter3.getHuDisplayedWeightUnit()).isEqualTo(premise3.getHuDisplayedWeightUnit());
+
+ assertThat(premiseAfter8.getIndividualHuWeight()).isEqualTo(premise8.getIndividualHuWeight());
+ assertThat(premiseAfter8.getIndividualHuLength()).isEqualTo(premise8.getIndividualHuLength());
+ assertThat(premiseAfter8.getIndividualHuWidth()).isEqualTo(premise8.getIndividualHuWidth());
+ assertThat(premiseAfter8.getIndividualHuHeight()).isEqualTo(premise8.getIndividualHuHeight());
+ assertThat(premiseAfter8.getHuDisplayedDimensionUnit()).isEqualTo(premise8.getHuDisplayedDimensionUnit());
+ assertThat(premiseAfter8.getHuDisplayedWeightUnit()).isEqualTo(premise8.getHuDisplayedWeightUnit());
+
+ }
+
+ @Test
+ @DisplayName("POST /api/calculation/packaging - happy path (API read-back)")
+ public void updatePackagingCase5() throws Exception {
+
+ var premisesBeforeUpdate = getPremisesFromDb();
+ var premise1 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+
+
+ var dimensions = new DimensionDTO();
+ dimensions.setDimensionUnit(DimensionUnit.M);
+ dimensions.setWeightUnit(WeightUnit.G);
+ dimensions.setHeight(1.005);
+ dimensions.setWidth(1.250);
+ dimensions.setLength(.70);
+ dimensions.setWeight(55500.0);
+
+ var dto = new PackagingUpdateDTO();
+ dto.setDimensions(dimensions);
+ dto.setPremiseIds(Collections.singletonList(premise1.getId()));
+
+
+ mockMvc.perform(post("/api/calculation/packaging")
+ .content(objectMapper.writeValueAsString(dto)).contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isOk())
+ .andDo(print())
+ .andReturn();
+
+ mockMvc.perform(get("/api/calculation/edit")
+ .content(Collections.singletonList(premise1.getId()).toString())
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isOk())
+ .andDo(print())
+ .andExpect(jsonPath("$[0].handling_unit.weight").value(55500.0))
+ .andExpect(jsonPath("$[0].handling_unit.height").value(1.005))
+ .andExpect(jsonPath("$[0].handling_unit.width").value(1.250))
+ .andExpect(jsonPath("$[0]['handling_unit']['length']").value(0.7));
+
+ }
+
}
@Nested
- class SetPriceTests {
+ @Sql(scripts = {"classpath:master_data/alldata.sql", "classpath:master_data/users.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_CLASS)
+ @Sql(scripts = {"classpath:master_data/users-cleanup.sql", "classpath:master_data/alldata-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_CLASS)
+ @Sql(scripts = {"classpath:master_data/premises.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
+ @Sql(scripts = {"classpath:master_data/premises-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
+ @DisplayName("POST /api/calculation/price - Update price tests")
+ class UpdatePriceTests {
+
+ @Test
+ @DisplayName("POST /api/calculation/price - happy path (update price only)")
+ public void updatePriceCase1() throws Exception {
+
+ var premisesBeforeUpdate = getPremisesFromDb();
+ var premise1 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premise3 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+
+
+ var dto = new PriceUpdateDTO();
+ dto.setPrice(12.34);
+ dto.setPremiseIds(Arrays.asList(premise1.getId(), premise3.getId()));
+
+
+ mockMvc.perform(post("/api/calculation/price")
+ .content(objectMapper.writeValueAsString(dto)).contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isOk())
+ .andDo(print());
+
+
+ var premisesAfterUpdate = getPremisesFromDb();
+
+ var premiseAfter1 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premiseAfter3 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+
+ assertThat(premiseAfter1.getMaterialCost()).isEqualTo(BigDecimal.valueOf(12.34));
+ assertThat(premiseAfter3.getMaterialCost()).isEqualTo(BigDecimal.valueOf(12.34));
+
+ assertThat(premiseAfter1.getOverseaShare()).isEqualByComparingTo(premise1.getOverseaShare());
+ assertThat(premiseAfter3.getOverseaShare()).isEqualByComparingTo(premise3.getOverseaShare());
+
+ assertThat(premiseAfter1.getFcaEnabled()).isEqualTo(premise1.getFcaEnabled());
+ assertThat(premiseAfter3.getFcaEnabled()).isEqualTo(premise3.getFcaEnabled());
+
+
+ }
+
+ @Test
+ @DisplayName("POST /api/calculation/price - error case (set invalid prices)")
+ public void updatePriceCase2() throws Exception {
+
+ var premisesBeforeUpdate = getPremisesFromDb();
+ var premise1 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premise3 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+
+
+ // to many fractions
+ var dto = new PriceUpdateDTO();
+ dto.setPrice(12.3456);
+ dto.setPremiseIds(Arrays.asList(premise1.getId(), premise3.getId()));
+
+ mockMvc.perform(post("/api/calculation/price")
+ .content(objectMapper.writeValueAsString(dto)).contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andDo(print());
+
+ // negative price
+ dto = new PriceUpdateDTO();
+ dto.setPrice(-12.34);
+ dto.setPremiseIds(Arrays.asList(premise1.getId(), premise3.getId()));
+
+ mockMvc.perform(post("/api/calculation/price")
+ .content(objectMapper.writeValueAsString(dto)).contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andDo(print());
+
+ // price == 0
+ dto = new PriceUpdateDTO();
+ dto.setPrice(0.00);
+ dto.setPremiseIds(Arrays.asList(premise1.getId(), premise3.getId()));
+
+ mockMvc.perform(post("/api/calculation/price")
+ .content(objectMapper.writeValueAsString(dto)).contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andDo(print());
+
+ // check if database is untouched
+ var premisesAfterUpdate = getPremisesFromDb();
+
+ var premiseAfter1 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premiseAfter3 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+
+ assertThat(premiseAfter1.getMaterialCost()).isEqualTo(premise1.getMaterialCost());
+ assertThat(premiseAfter3.getMaterialCost()).isEqualTo(premise3.getMaterialCost());
+
+ assertThat(premiseAfter1.getOverseaShare()).isEqualByComparingTo(premise1.getOverseaShare());
+ assertThat(premiseAfter3.getOverseaShare()).isEqualByComparingTo(premise3.getOverseaShare());
+
+ assertThat(premiseAfter1.getFcaEnabled()).isEqualTo(premise1.getFcaEnabled());
+ assertThat(premiseAfter3.getFcaEnabled()).isEqualTo(premise3.getFcaEnabled());
+
+ }
+
+ @Test
+ @DisplayName("POST /api/calculation/price - happy path (update oversea share only)")
+ public void updatePriceCase4() throws Exception {
+
+ var premisesBeforeUpdate = getPremisesFromDb();
+ var premise1 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premise3 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+
+
+ var dto = new PriceUpdateDTO();
+ dto.setOverseaShare(60.06);
+ dto.setPremiseIds(Arrays.asList(premise1.getId(), premise3.getId()));
+
+
+ mockMvc.perform(post("/api/calculation/price")
+ .content(objectMapper.writeValueAsString(dto)).contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isOk())
+ .andDo(print());
+
+
+ var premisesAfterUpdate = getPremisesFromDb();
+
+ var premiseAfter1 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premiseAfter3 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+
+ assertThat(premiseAfter1.getMaterialCost()).isEqualTo(premise1.getMaterialCost());
+ assertThat(premiseAfter3.getMaterialCost()).isEqualTo(premise3.getMaterialCost());
+
+ assertThat(premiseAfter1.getOverseaShare()).isEqualByComparingTo(BigDecimal.valueOf(60.06));
+ assertThat(premiseAfter3.getOverseaShare()).isEqualByComparingTo(BigDecimal.valueOf(60.06));
+
+ assertThat(premiseAfter1.getFcaEnabled()).isEqualTo(premise1.getFcaEnabled());
+ assertThat(premiseAfter3.getFcaEnabled()).isEqualTo(premise3.getFcaEnabled());
+
+
+ }
+
+ @Test
+ @DisplayName("POST /api/calculation/price - error case (set invalid oversea share)")
+ public void updatePriceCase5() throws Exception {
+
+ var premisesBeforeUpdate = getPremisesFromDb();
+ var premise1 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premise3 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+
+
+ // negative value
+ var dto = new PriceUpdateDTO();
+ dto.setOverseaShare(-60.06);
+ dto.setPremiseIds(Arrays.asList(premise1.getId(), premise3.getId()));
+
+
+ mockMvc.perform(post("/api/calculation/price")
+ .content(objectMapper.writeValueAsString(dto)).contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andDo(print());
+
+
+ //value to high
+ dto = new PriceUpdateDTO();
+ dto.setOverseaShare(60000.06);
+ dto.setPremiseIds(Arrays.asList(premise1.getId(), premise3.getId()));
+
+
+ mockMvc.perform(post("/api/calculation/price")
+ .content(objectMapper.writeValueAsString(dto)).contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andDo(print());
+
+
+ var premisesAfterUpdate = getPremisesFromDb();
+
+ var premiseAfter1 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premiseAfter3 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+
+ assertThat(premiseAfter1.getMaterialCost()).isEqualTo(premise1.getMaterialCost());
+ assertThat(premiseAfter3.getMaterialCost()).isEqualTo(premise3.getMaterialCost());
+
+ assertThat(premiseAfter1.getOverseaShare()).isEqualByComparingTo(premise1.getOverseaShare());
+ assertThat(premiseAfter3.getOverseaShare()).isEqualByComparingTo(premise3.getOverseaShare());
+
+ assertThat(premiseAfter1.getFcaEnabled()).isEqualTo(premise1.getFcaEnabled());
+ assertThat(premiseAfter3.getFcaEnabled()).isEqualTo(premise3.getFcaEnabled());
+
+
+ }
+
+ @Test
+ @DisplayName("POST /api/calculation/price - happy path (update include fca fee)")
+ public void updatePriceCase6() throws Exception {
+
+ var premisesBeforeUpdate = getPremisesFromDb();
+ var premise1 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premise3 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+
+ var dto = new PriceUpdateDTO();
+ dto.setIncludeFcaFee(true);
+ dto.setPremiseIds(Arrays.asList(premise1.getId(), premise3.getId()));
+
+ mockMvc.perform(post("/api/calculation/price")
+ .content(objectMapper.writeValueAsString(dto)).contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isOk())
+ .andDo(print());
+
+ var premisesAfterUpdate = getPremisesFromDb();
+
+ var premiseAfter1 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premiseAfter3 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+
+ assertThat(premiseAfter1.getMaterialCost()).isEqualTo(premise1.getMaterialCost());
+ assertThat(premiseAfter3.getMaterialCost()).isEqualTo(premise3.getMaterialCost());
+
+ assertThat(premiseAfter1.getOverseaShare()).isEqualByComparingTo(premise1.getOverseaShare());
+ assertThat(premiseAfter3.getOverseaShare()).isEqualByComparingTo(premise3.getOverseaShare());
+
+ assertThat(premiseAfter1.getFcaEnabled()).isEqualTo(true);
+ assertThat(premiseAfter3.getFcaEnabled()).isEqualTo(true);
+
+ dto = new PriceUpdateDTO();
+ dto.setIncludeFcaFee(false);
+ dto.setPremiseIds(Arrays.asList(premise1.getId(), premise3.getId()));
+
+
+ mockMvc.perform(post("/api/calculation/price")
+ .content(objectMapper.writeValueAsString(dto)).contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isOk())
+ .andDo(print());
+
+
+ premisesAfterUpdate = getPremisesFromDb();
+
+ premiseAfter1 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ premiseAfter3 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+
+ assertThat(premiseAfter1.getMaterialCost()).isEqualTo(premise1.getMaterialCost());
+ assertThat(premiseAfter3.getMaterialCost()).isEqualTo(premise3.getMaterialCost());
+
+ assertThat(premiseAfter1.getOverseaShare()).isEqualByComparingTo(premise1.getOverseaShare());
+ assertThat(premiseAfter3.getOverseaShare()).isEqualByComparingTo(premise3.getOverseaShare());
+
+ assertThat(premiseAfter1.getFcaEnabled()).isEqualTo(false);
+ assertThat(premiseAfter3.getFcaEnabled()).isEqualTo(false);
+
+
+ }
+
+ @Test
+ @DisplayName("POST /api/calculation/price - happy path (update all values)")
+ public void updatePriceCase7() throws Exception {
+
+ var premisesBeforeUpdate = getPremisesFromDb();
+ var premise1 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premise3 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+
+
+ var dto = new PriceUpdateDTO();
+ dto.setPrice(12.34);
+ dto.setOverseaShare(60.06);
+ dto.setIncludeFcaFee(true);
+ dto.setPremiseIds(Arrays.asList(premise1.getId(), premise3.getId()));
+
+
+ mockMvc.perform(post("/api/calculation/price")
+ .content(objectMapper.writeValueAsString(dto)).contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isOk())
+ .andDo(print());
+
+
+ var premisesAfterUpdate = getPremisesFromDb();
+
+ var premiseAfter1 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premiseAfter3 = premisesAfterUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+
+ assertThat(premiseAfter1.getMaterialCost()).isEqualTo(BigDecimal.valueOf(12.34));
+ assertThat(premiseAfter3.getMaterialCost()).isEqualTo(BigDecimal.valueOf(12.34));
+
+ assertThat(premiseAfter1.getOverseaShare()).isEqualByComparingTo(BigDecimal.valueOf(60.06));
+ assertThat(premiseAfter3.getOverseaShare()).isEqualByComparingTo(BigDecimal.valueOf(60.06));
+
+ assertThat(premiseAfter1.getFcaEnabled()).isEqualTo(true);
+ assertThat(premiseAfter3.getFcaEnabled()).isEqualTo(true);
+
+
+ }
}
@Nested
+ @Sql(scripts = {"classpath:master_data/alldata.sql", "classpath:master_data/users.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_CLASS)
+ @Sql(scripts = {"classpath:master_data/users-cleanup.sql", "classpath:master_data/alldata-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_CLASS)
+ @Sql(scripts = {"classpath:master_data/premises.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
+ @Sql(scripts = {"classpath:master_data/premises-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
class CreateDestinationTests {
+ @Test
+ @DisplayName("POST /api/calculation/price - happy path (create destination)")
+ public void createDestinationCase1() throws Exception {
+
+ var nodeId = getNodeIdByExternalMappingId("AB");
+
+ var premisesBeforeUpdate = getPremisesFromDb();
+ var premise1 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 2).findFirst().orElseThrow();
+ var premise3 = premisesBeforeUpdate.stream().filter(p -> p.getHuUnitCount() == 3).findFirst().orElseThrow();
+
+ var dto = new DestinationCreateDTO();
+ dto.setPremiseId(Arrays.asList(premise1.getId(), premise3.getId()));
+ dto.setDestinationNodeId(nodeId);
+
+ mockMvc.perform(post("/api/calculation/destination")
+ .content(objectMapper.writeValueAsString(dto))
+ .contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andDo(print());
+
+
+ }
}
@Nested
+ @Sql(scripts = {"classpath:master_data/alldata.sql", "classpath:master_data/users.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_CLASS)
+ @Sql(scripts = {"classpath:master_data/users-cleanup.sql", "classpath:master_data/alldata-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_CLASS)
+ @Sql(scripts = {"classpath:master_data/premises.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
+ @Sql(scripts = {"classpath:master_data/premises-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
class GetDestinationTests {
}
@Nested
- class SetDestinationTests {
+ @Sql(scripts = {"classpath:master_data/alldata.sql", "classpath:master_data/users.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_CLASS)
+ @Sql(scripts = {"classpath:master_data/users-cleanup.sql", "classpath:master_data/alldata-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_CLASS)
+ @Sql(scripts = {"classpath:master_data/premises.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
+ @Sql(scripts = {"classpath:master_data/premises-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
+ class UpdateDestinationTests {
}
@Nested
+ @Sql(scripts = {"classpath:master_data/alldata.sql", "classpath:master_data/users.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_CLASS)
+ @Sql(scripts = {"classpath:master_data/users-cleanup.sql", "classpath:master_data/alldata-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_CLASS)
+ @Sql(scripts = {"classpath:master_data/premises.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
+ @Sql(scripts = {"classpath:master_data/premises-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
class DeleteDestinationTests {
}
+ @Nested
+ @Sql(scripts = {"classpath:master_data/alldata.sql", "classpath:master_data/users.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_CLASS)
+ @Sql(scripts = {"classpath:master_data/users-cleanup.sql", "classpath:master_data/alldata-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_CLASS)
+ @Sql(scripts = {"classpath:master_data/premises.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
+ @Sql(scripts = {"classpath:master_data/premises-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
+ @DisplayName("GET /api/calculation/start - Start Calculations Tests")
+ class StartCalculationTests {
+
+ }
+
+ @Nested
+ @Sql(scripts = {"classpath:master_data/alldata.sql", "classpath:master_data/users.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_CLASS)
+ @Sql(scripts = {"classpath:master_data/users-cleanup.sql", "classpath:master_data/alldata-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_CLASS)
+ @Sql(scripts = {"classpath:master_data/premises.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
+ @Sql(scripts = {"classpath:master_data/premises-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
+ class SetSupplierTests {
+
+
+ }
+
+ @Nested
+ @Sql(scripts = {"classpath:master_data/alldata.sql", "classpath:master_data/users.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_CLASS)
+ @Sql(scripts = {"classpath:master_data/users-cleanup.sql", "classpath:master_data/alldata-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_CLASS)
+ @Sql(scripts = {"classpath:master_data/premises.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
+ @Sql(scripts = {"classpath:master_data/premises-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
+ class SetMaterialTests {
+
+ }
+
// @Nested
// class claudeTests {
//
diff --git a/src/test/resources/master_data/alldata.sql b/src/test/resources/master_data/alldata.sql
index 8a63248..7f6a4a1 100644
--- a/src/test/resources/master_data/alldata.sql
+++ b/src/test/resources/master_data/alldata.sql
@@ -1,3 +1,4 @@
+
-- full setup data. but with reduced material master data and fake container rates.
INSERT INTO property_set (state)
@@ -50900,6 +50901,8 @@ INSERT INTO country_matrix_rate (
-- Generated SQL INSERT statements for container rates
-- Generated from shipping_data.csv
+-- Container Rate INSERT Statements
+-- Generiert aus Excel-Datei
INSERT INTO container_rate (
from_node_id,
@@ -50911,12 +50914,12 @@ INSERT INTO container_rate (
lead_time,
validity_period_id
) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'Xiamen'),
- (SELECT id FROM node WHERE external_mapping_id = 'CNXMN'),
+ (SELECT id FROM node WHERE external_mapping_id = 'Aurangabad'),
+ (SELECT id FROM node WHERE external_mapping_id = 'ExM'),
'ROAD',
- 118.00,
- 129.00,
- 131.00,
+ 200.00,
+ 300.00,
+ 350.00,
1,
@validity_period_id
);
@@ -50931,88 +50934,8 @@ INSERT INTO container_rate (
lead_time,
validity_period_id
) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'Shanghai'),
- (SELECT id FROM node WHERE external_mapping_id = 'CNSHA'),
- 'ROAD',
- 127.00,
- 144.00,
- 147.00,
- 1,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'Hangzhou'),
- (SELECT id FROM node WHERE external_mapping_id = 'CNSHA'),
- 'ROAD',
- 372.00,
- 535.00,
- 562.00,
- 1,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'Yangzhong'),
- (SELECT id FROM node WHERE external_mapping_id = 'CNSHA'),
- 'ROAD',
- 394.00,
- 570.00,
- 599.00,
- 1,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'Taicang'),
- (SELECT id FROM node WHERE external_mapping_id = 'CNSHA'),
- 'ROAD',
- 183.00,
- 263.00,
- 276.00,
- 1,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'Jinjiang'),
- (SELECT id FROM node WHERE external_mapping_id = 'CNTAO'),
+ (SELECT id FROM node WHERE external_mapping_id = 'Aurangabad'),
+ (SELECT id FROM node WHERE external_mapping_id = 'INJNPT'),
'ROAD',
250.00,
400.00,
@@ -51031,12 +50954,12 @@ INSERT INTO container_rate (
lead_time,
validity_period_id
) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'Qingdao'),
- (SELECT id FROM node WHERE external_mapping_id = 'CNTAO'),
- 'ROAD',
- 100.00,
- 160.00,
- 170.00,
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ (SELECT id FROM node WHERE external_mapping_id = 'AB'),
+ 'POST_RUN',
+ 200.00,
+ 300.00,
+ 350.00,
1,
@validity_period_id
);
@@ -51051,12 +50974,12 @@ INSERT INTO container_rate (
lead_time,
validity_period_id
) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'Fuqin'),
- (SELECT id FROM node WHERE external_mapping_id = 'CNTGS'),
- 'ROAD',
- 250.00,
- 400.00,
- 425.00,
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ (SELECT id FROM node WHERE external_mapping_id = 'FGG'),
+ 'POST_RUN',
+ 200.00,
+ 300.00,
+ 350.00,
1,
@validity_period_id
);
@@ -51071,12 +50994,12 @@ INSERT INTO container_rate (
lead_time,
validity_period_id
) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'Linfen'),
- (SELECT id FROM node WHERE external_mapping_id = 'CNYTN'),
- 'ROAD',
- 250.00,
- 400.00,
- 425.00,
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ (SELECT id FROM node WHERE external_mapping_id = 'KWS'),
+ 'POST_RUN',
+ 200.00,
+ 300.00,
+ 350.00,
1,
@validity_period_id
);
@@ -51091,12 +51014,52 @@ INSERT INTO container_rate (
lead_time,
validity_period_id
) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'Yantian'),
- (SELECT id FROM node WHERE external_mapping_id = 'CNYTN'),
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ (SELECT id FROM node WHERE external_mapping_id = 'Urban AB'),
+ 'POST_RUN',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ (SELECT id FROM node WHERE external_mapping_id = 'Urban Wörth'),
+ 'POST_RUN',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Bangalore'),
+ (SELECT id FROM node WHERE external_mapping_id = 'ExM'),
'ROAD',
- 264.00,
- 423.00,
- 449.00,
+ 200.00,
+ 300.00,
+ 350.00,
1,
@validity_period_id
);
@@ -51131,93 +51094,13 @@ INSERT INTO container_rate (
lead_time,
validity_period_id
) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'Pune'),
- (SELECT id FROM node WHERE external_mapping_id = 'INMAA'),
- 'ROAD',
- 250.00,
- 400.00,
- 425.00,
- 1,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'JJ'),
- (SELECT id FROM node WHERE external_mapping_id = 'ExM'),
- 'ROAD',
- 250.00,
- 400.00,
- 425.00,
- 2,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'LX'),
- (SELECT id FROM node WHERE external_mapping_id = 'ExM'),
- 'ROAD',
- 250.00,
- 400.00,
- 425.00,
- 2,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'Aurangabad'),
- (SELECT id FROM node WHERE external_mapping_id = 'INJNPT'),
- 'ROAD',
- 250.00,
- 400.00,
- 425.00,
- 1,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'Chennai'),
- (SELECT id FROM node WHERE external_mapping_id = 'INMAA'),
- 'ROAD',
- 626.00,
- 901.00,
- 965.00,
- 1,
+ (SELECT id FROM node WHERE external_mapping_id = 'CNSHA'),
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ 'SEA',
+ 13795.00,
+ 22472.00,
+ 23448.00,
+ 24,
@validity_period_id
);
@@ -51252,155 +51135,15 @@ INSERT INTO container_rate (
validity_period_id
) VALUES (
(SELECT id FROM node WHERE external_mapping_id = 'CNTAO'),
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
'SEA',
- 14216.00,
- 23146.00,
- 24148.00,
+ 14208.00,
+ 23133.00,
+ 24134.00,
25,
@validity_period_id
);
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'CNTGS'),
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- 'SEA',
- 14697.00,
- 23915.00,
- 24963.00,
- 26,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'CNXMN'),
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- 'SEA',
- 13901.00,
- 22642.00,
- 23629.00,
- 24,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'CNYTN'),
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- 'SEA',
- 13779.00,
- 22447.00,
- 23422.00,
- 24,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'INMAA'),
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- 'SEA',
- 10355.00,
- 16968.00,
- 17702.00,
- 18,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'ExM'),
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- 'SEA',
- 1200.00,
- 1920.00,
- 2040.00,
- 15,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'INJNPT'),
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- 'SEA',
- 10311.00,
- 16897.00,
- 17627.00,
- 18,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'CNSHA'),
- (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
- 'SEA',
- 13795.00,
- 22472.00,
- 23448.00,
- 24,
- @validity_period_id
- );
-
INSERT INTO container_rate (
from_node_id,
to_node_id,
@@ -51412,11 +51155,11 @@ INSERT INTO container_rate (
validity_period_id
) VALUES (
(SELECT id FROM node WHERE external_mapping_id = 'CNTAO'),
- (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
'SEA',
- 14208.00,
- 23133.00,
- 24134.00,
+ 14216.00,
+ 23146.00,
+ 24148.00,
25,
@validity_period_id
);
@@ -51441,6 +51184,26 @@ INSERT INTO container_rate (
@validity_period_id
);
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'CNTGS'),
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ 'SEA',
+ 14697.00,
+ 23915.00,
+ 24963.00,
+ 26,
+ @validity_period_id
+ );
+
INSERT INTO container_rate (
from_node_id,
to_node_id,
@@ -51471,136 +51234,16 @@ INSERT INTO container_rate (
lead_time,
validity_period_id
) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'CNYTN'),
- (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNXMN'),
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
'SEA',
- 13771.00,
- 22434.00,
- 23408.00,
+ 13901.00,
+ 22642.00,
+ 23629.00,
24,
@validity_period_id
);
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'INMAA'),
- (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
- 'SEA',
- 10347.00,
- 16955.00,
- 17688.00,
- 18,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'ExM'),
- (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
- 'SEA',
- 1200.00,
- 1920.00,
- 2040.00,
- 15,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'INJNPT'),
- (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
- 'SEA',
- 10303.00,
- 16885.00,
- 17614.00,
- 18,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'CNSHA'),
- (SELECT id FROM node WHERE external_mapping_id = 'FRLEH'),
- 'SEA',
- 13691.00,
- 22306.00,
- 23270.00,
- 24,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'CNTAO'),
- (SELECT id FROM node WHERE external_mapping_id = 'FRLEH'),
- 'SEA',
- 14104.00,
- 22966.00,
- 23956.00,
- 25,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'CNTGS'),
- (SELECT id FROM node WHERE external_mapping_id = 'FRLEH'),
- 'SEA',
- 14585.00,
- 23736.00,
- 24772.00,
- 26,
- @validity_period_id
- );
-
INSERT INTO container_rate (
from_node_id,
to_node_id,
@@ -51621,146 +51264,6 @@ INSERT INTO container_rate (
@validity_period_id
);
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'CNYTN'),
- (SELECT id FROM node WHERE external_mapping_id = 'FRLEH'),
- 'SEA',
- 13667.00,
- 22267.00,
- 23230.00,
- 24,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'INMAA'),
- (SELECT id FROM node WHERE external_mapping_id = 'FRLEH'),
- 'SEA',
- 9795.00,
- 16072.00,
- 16765.00,
- 17,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'ExM'),
- (SELECT id FROM node WHERE external_mapping_id = 'FRLEH'),
- 'SEA',
- 1200.00,
- 1920.00,
- 2040.00,
- 15,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'INJNPT'),
- (SELECT id FROM node WHERE external_mapping_id = 'FRLEH'),
- 'SEA',
- 9751.00,
- 16002.00,
- 16692.00,
- 17,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'CNSHA'),
- (SELECT id FROM node WHERE external_mapping_id = 'ITGOA'),
- 'SEA',
- 12430.00,
- 20288.00,
- 21182.00,
- 22,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'CNTAO'),
- (SELECT id FROM node WHERE external_mapping_id = 'ITGOA'),
- 'SEA',
- 12843.00,
- 20949.00,
- 21871.00,
- 22,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'CNTGS'),
- (SELECT id FROM node WHERE external_mapping_id = 'ITGOA'),
- 'SEA',
- 13324.00,
- 21718.00,
- 22689.00,
- 23,
- @validity_period_id
- );
-
INSERT INTO container_rate (
from_node_id,
to_node_id,
@@ -51792,12 +51295,12 @@ INSERT INTO container_rate (
validity_period_id
) VALUES (
(SELECT id FROM node WHERE external_mapping_id = 'CNYTN'),
- (SELECT id FROM node WHERE external_mapping_id = 'ITGOA'),
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
'SEA',
- 12406.00,
- 20250.00,
- 21142.00,
- 22,
+ 13771.00,
+ 22434.00,
+ 23408.00,
+ 24,
@validity_period_id
);
@@ -51811,13 +51314,13 @@ INSERT INTO container_rate (
lead_time,
validity_period_id
) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'INMAA'),
- (SELECT id FROM node WHERE external_mapping_id = 'ITGOA'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNYTN'),
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
'SEA',
- 6069.00,
- 9710.00,
- 10417.00,
- 11,
+ 13779.00,
+ 22447.00,
+ 23422.00,
+ 24,
@validity_period_id
);
@@ -51831,52 +51334,12 @@ INSERT INTO container_rate (
lead_time,
validity_period_id
) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Chennai'),
(SELECT id FROM node WHERE external_mapping_id = 'ExM'),
- (SELECT id FROM node WHERE external_mapping_id = 'ITGOA'),
- 'SEA',
- 1200.00,
- 1920.00,
- 2040.00,
- 15,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'INJNPT'),
- (SELECT id FROM node WHERE external_mapping_id = 'ITGOA'),
- 'SEA',
- 6025.00,
- 9640.00,
- 10342.00,
- 11,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- (SELECT id FROM node WHERE external_mapping_id = 'Zbůch'),
- 'POST_RUN',
- 250.00,
- 400.00,
- 425.00,
+ 'ROAD',
+ 200.00,
+ 300.00,
+ 350.00,
1,
@validity_period_id
);
@@ -51891,172 +51354,12 @@ INSERT INTO container_rate (
lead_time,
validity_period_id
) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- (SELECT id FROM node WHERE external_mapping_id = 'Pfaff Rade'),
- 'POST_RUN',
- 250.00,
- 400.00,
- 425.00,
- 1,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- (SELECT id FROM node WHERE external_mapping_id = 'KOL'),
- 'POST_RUN',
- 250.00,
- 400.00,
- 425.00,
- 1,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- (SELECT id FROM node WHERE external_mapping_id = 'Urban Wörth'),
- 'POST_RUN',
- 250.00,
- 400.00,
- 425.00,
- 1,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- (SELECT id FROM node WHERE external_mapping_id = 'Bat3'),
- 'POST_RUN',
- 250.00,
- 400.00,
- 425.00,
- 1,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- (SELECT id FROM node WHERE external_mapping_id = 'Urban AB'),
- 'POST_RUN',
- 250.00,
- 400.00,
- 425.00,
- 1,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- (SELECT id FROM node WHERE external_mapping_id = 'Jeantet'),
- 'POST_RUN',
- 250.00,
- 400.00,
- 425.00,
- 1,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- (SELECT id FROM node WHERE external_mapping_id = 'AB'),
- 'POST_RUN',
- 250.00,
- 400.00,
- 425.00,
- 1,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- (SELECT id FROM node WHERE external_mapping_id = 'FGG'),
- 'POST_RUN',
- 250.00,
- 400.00,
- 425.00,
- 1,
- @validity_period_id
- );
-
-INSERT INTO container_rate (
- from_node_id,
- to_node_id,
- container_rate_type,
- rate_teu,
- rate_feu,
- rate_hc,
- lead_time,
- validity_period_id
-) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- (SELECT id FROM node WHERE external_mapping_id = 'KWS'),
- 'POST_RUN',
- 250.00,
- 400.00,
- 425.00,
+ (SELECT id FROM node WHERE external_mapping_id = 'Chennai'),
+ (SELECT id FROM node WHERE external_mapping_id = 'INMAA'),
+ 'ROAD',
+ 626.00,
+ 901.00,
+ 965.00,
1,
@validity_period_id
);
@@ -52101,6 +51404,26 @@ INSERT INTO container_rate (
@validity_period_id
);
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ (SELECT id FROM node WHERE external_mapping_id = 'KOL'),
+ 'POST_RUN',
+ 250.00,
+ 400.00,
+ 425.00,
+ 1,
+ @validity_period_id
+ );
+
INSERT INTO container_rate (
from_node_id,
to_node_id,
@@ -52121,6 +51444,26 @@ INSERT INTO container_rate (
@validity_period_id
);
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ (SELECT id FROM node WHERE external_mapping_id = 'Pfaff Rade'),
+ 'POST_RUN',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
INSERT INTO container_rate (
from_node_id,
to_node_id,
@@ -52141,6 +51484,46 @@ INSERT INTO container_rate (
@validity_period_id
);
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ (SELECT id FROM node WHERE external_mapping_id = 'Urban AB'),
+ 'POST_RUN',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ (SELECT id FROM node WHERE external_mapping_id = 'Urban Wörth'),
+ 'POST_RUN',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
INSERT INTO container_rate (
from_node_id,
to_node_id,
@@ -52172,11 +51555,71 @@ INSERT INTO container_rate (
validity_period_id
) VALUES (
(SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ (SELECT id FROM node WHERE external_mapping_id = 'Zbůch'),
+ 'POST_RUN',
+ 250.00,
+ 400.00,
+ 425.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'ExM'),
+ (SELECT id FROM node WHERE external_mapping_id = 'INJNPT'),
+ 'ROAD',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'FRLEH'),
+ (SELECT id FROM node WHERE external_mapping_id = 'Bat3'),
+ 'POST_RUN',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'FRLEH'),
(SELECT id FROM node WHERE external_mapping_id = 'CTT'),
'POST_RUN',
- 250.00,
- 400.00,
- 425.00,
+ 200.00,
+ 300.00,
+ 350.00,
1,
@validity_period_id
);
@@ -52191,9 +51634,429 @@ INSERT INTO container_rate (
lead_time,
validity_period_id
) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'FRLEH'),
+ (SELECT id FROM node WHERE external_mapping_id = 'Jeantet'),
+ 'POST_RUN',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Fuqin'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNXMN'),
+ 'ROAD',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'HKMBP'),
(SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ 'SEA',
+ 5000.00,
+ 5500.00,
+ 6000.00,
+ 45,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Hangzhou'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNSHA'),
+ 'ROAD',
+ 372.00,
+ 535.00,
+ 562.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'INJNPT'),
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ 'SEA',
+ 10303.00,
+ 16885.00,
+ 17614.00,
+ 18,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'INJNPT'),
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ 'SEA',
+ 10311.00,
+ 16897.00,
+ 17627.00,
+ 18,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'INJNPT'),
+ (SELECT id FROM node WHERE external_mapping_id = 'FRLEH'),
+ 'SEA',
+ 9751.00,
+ 16002.00,
+ 16692.00,
+ 17,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'INJNPT'),
+ (SELECT id FROM node WHERE external_mapping_id = 'ITGOA'),
+ 'SEA',
+ 6025.00,
+ 9640.00,
+ 10342.00,
+ 11,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'INMAA'),
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ 'SEA',
+ 10347.00,
+ 16955.00,
+ 17688.00,
+ 18,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'INMAA'),
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ 'SEA',
+ 10355.00,
+ 16968.00,
+ 17702.00,
+ 18,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'INMAA'),
+ (SELECT id FROM node WHERE external_mapping_id = 'FRLEH'),
+ 'SEA',
+ 9795.00,
+ 16072.00,
+ 16765.00,
+ 17,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'INMAA'),
+ (SELECT id FROM node WHERE external_mapping_id = 'ITGOA'),
+ 'SEA',
+ 6069.00,
+ 9710.00,
+ 10417.00,
+ 11,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'ITGOA'),
(SELECT id FROM node WHERE external_mapping_id = 'LZZ'),
'POST_RUN',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'ITGOA'),
+ (SELECT id FROM node WHERE external_mapping_id = 'Urban Rolo'),
+ 'POST_RUN',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'JJ'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNXMN'),
+ 'ROAD',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Jinjiang'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNXMN'),
+ 'ROAD',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'LX'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNXMN'),
+ 'ROAD',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Linfen'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNTAO'),
+ 'ROAD',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Linfen'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNTGS'),
+ 'ROAD',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Pune'),
+ (SELECT id FROM node WHERE external_mapping_id = 'ExM'),
+ 'ROAD',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Pune'),
+ (SELECT id FROM node WHERE external_mapping_id = 'INJNPT'),
+ 'ROAD',
+ 200.00,
+ 300.00,
+ 350.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Pune'),
+ (SELECT id FROM node WHERE external_mapping_id = 'INMAA'),
+ 'ROAD',
250.00,
400.00,
425.00,
@@ -52211,12 +52074,113 @@ INSERT INTO container_rate (
lead_time,
validity_period_id
) VALUES (
- (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
- (SELECT id FROM node WHERE external_mapping_id = 'Urban Rolo'),
- 'POST_RUN',
- 250.00,
- 400.00,
- 425.00,
+ (SELECT id FROM node WHERE external_mapping_id = 'Qingdao'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNTAO'),
+ 'ROAD',
+ 100.00,
+ 160.00,
+ 170.00,
1,
@validity_period_id
- );
\ No newline at end of file
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Shanghai'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNSHA'),
+ 'ROAD',
+ 127.00,
+ 144.00,
+ 147.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Taicang'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNSHA'),
+ 'ROAD',
+ 183.00,
+ 263.00,
+ 276.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Xiamen'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNXMN'),
+ 'ROAD',
+ 118.00,
+ 129.00,
+ 131.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Yangzhong'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNSHA'),
+ 'ROAD',
+ 394.00,
+ 570.00,
+ 599.00,
+ 1,
+ @validity_period_id
+ );
+
+INSERT INTO container_rate (
+ from_node_id,
+ to_node_id,
+ container_rate_type,
+ rate_teu,
+ rate_feu,
+ rate_hc,
+ lead_time,
+ validity_period_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Yantian'),
+ (SELECT id FROM node WHERE external_mapping_id = 'CNYTN'),
+ 'ROAD',
+ 264.00,
+ 423.00,
+ 449.00,
+ 1,
+ @validity_period_id
+ );
+
diff --git a/src/test/resources/master_data/premises.sql b/src/test/resources/master_data/premises.sql
index ac05519..f5a8d55 100644
--- a/src/test/resources/master_data/premises.sql
+++ b/src/test/resources/master_data/premises.sql
@@ -53,7 +53,7 @@ VALUES ((SELECT id FROM material WHERE part_number = '28152640129'),
'G',
2,
TRUE,
- FALSE,
+ TRUE,
NOW());
SET @premise_id_1 = LAST_INSERT_ID();
@@ -103,7 +103,7 @@ VALUES ((SELECT id FROM material WHERE part_number = '28152640129'),
'G',
1,
TRUE,
- FALSE,
+ TRUE,
DATE_SUB(NOW(), INTERVAL 3 MONTH));
SET @premiseId2 = LAST_INSERT_ID();
@@ -152,7 +152,7 @@ VALUES ((SELECT id FROM material WHERE part_number = '8222640822'),
'G',
3,
TRUE,
- FALSE,
+ TRUE,
NOW());
SET @premiseId3 = LAST_INSERT_ID();
@@ -202,7 +202,7 @@ VALUES ((SELECT id FROM material WHERE part_number = '8222640822'),
'G',
1,
TRUE,
- FALSE,
+ TRUE,
NOW());
SET @premiseId4 = LAST_INSERT_ID();
@@ -251,7 +251,7 @@ VALUES ((SELECT id FROM material WHERE part_number = '8222640822'),
'KG',
1,
TRUE,
- FALSE,
+ TRUE,
NOW());
SET @premiseId5 = LAST_INSERT_ID();
@@ -301,7 +301,7 @@ VALUES ((SELECT id FROM material WHERE part_number = '3064540201'),
'KG',
1,
TRUE,
- FALSE,
+ TRUE,
NOW());
SET @premiseId6 = LAST_INSERT_ID();
@@ -351,7 +351,7 @@ VALUES ((SELECT id FROM material WHERE part_number = '3064540201'),
'KG',
4,
TRUE,
- FALSE,
+ TRUE,
NOW());
SET @premiseId7 = LAST_INSERT_ID();
@@ -401,7 +401,7 @@ VALUES ((SELECT id FROM material WHERE part_number = '28152640129'),
'G',
8,
TRUE,
- FALSE,
+ TRUE,
NOW());
SET @premiseId8 = LAST_INSERT_ID();
@@ -451,7 +451,7 @@ VALUES ((SELECT id FROM material WHERE part_number = '28152640129'),
'G',
1,
TRUE,
- FALSE,
+ TRUE,
NOW());
SET @premiseId9 = LAST_INSERT_ID();