diff --git a/src/Services/ImportExportSystem/PartKeeprImporter/PKImportHelperTrait.php b/src/Services/ImportExportSystem/PartKeeprImporter/PKImportHelperTrait.php index 1d77d461..ac8e46ca 100644 --- a/src/Services/ImportExportSystem/PartKeeprImporter/PKImportHelperTrait.php +++ b/src/Services/ImportExportSystem/PartKeeprImporter/PKImportHelperTrait.php @@ -235,4 +235,27 @@ trait PKImportHelperTrait $property->setAccessible(true); $property->setValue($entity, $date); } + + /** + * Gets the SI prefix factor for the given prefix ID. + * Used to convert a value from the PartKeepr database to the PartDB database. + * @param array $data + * @param int $prefix_id + * @return float + */ + protected function getSIPrefixFactor(array $data, int $prefix_id): float + { + if ($prefix_id === 0) { + return 1.0; + } + + $prefixes = $data['siprefix']; + foreach ($prefixes as $prefix) { + if ((int) $prefix['id'] === $prefix_id) { + return pow((int) $prefix['base'], (int) $prefix['exponent']); + } + } + + throw new \RuntimeException(sprintf('Could not find SI prefix with ID %s', $prefix_id)); + } } diff --git a/src/Services/ImportExportSystem/PartKeeprImporter/PKPartImporter.php b/src/Services/ImportExportSystem/PartKeeprImporter/PKPartImporter.php index 8ba089d3..767f36b4 100644 --- a/src/Services/ImportExportSystem/PartKeeprImporter/PKPartImporter.php +++ b/src/Services/ImportExportSystem/PartKeeprImporter/PKPartImporter.php @@ -173,20 +173,20 @@ class PKPartImporter $entity->setName($name); $entity->setValueText($partparameter['stringValue'] ?? ''); - if ($partparameter['unit_id'] === null) { + if ($partparameter['unit_id'] !== null && (int) $partparameter['unit_id'] !== 0) { $entity->setUnit($this->getUnitSymbol($data, (int)$partparameter['unit_id'])); } else { $entity->setUnit(""); } - if ($partparameter['normalizedMinValue'] !== null) { - $entity->setValueMin((float) $partparameter['normalizedMinValue']); + if ($partparameter['value'] !== null) { + $entity->setValueTypical((float) $partparameter['value'] * $this->getSIPrefixFactor($data, (int) $partparameter['siPrefix_id'])); } - if ($partparameter['normalizedValue'] !== null) { - $entity->setValueTypical((float) $partparameter['normalizedValue']); + if ($partparameter['minimumValue'] !== null) { + $entity->setValueMin((float) $partparameter['minimumValue'] * $this->getSIPrefixFactor($data, (int) $partparameter['minSiPrefix_id'])); } - if ($partparameter['normalizedMaxValue'] !== null) { - $entity->setValueMax((float) $partparameter['normalizedMaxValue']); + if ($partparameter['maximumValue'] !== null) { + $entity->setValueMax((float) $partparameter['maximumValue'] * $this->getSIPrefixFactor($data, (int) $partparameter['maxSiPrefix_id'])); } $part = $this->em->find(Part::class, (int) $partparameter['part_id']);