diff --git a/docs/assets/usage/import_export/part_import_example.csv b/docs/assets/usage/import_export/part_import_example.csv new file mode 100644 index 00000000..08701426 --- /dev/null +++ b/docs/assets/usage/import_export/part_import_example.csv @@ -0,0 +1,4 @@ +name;description;category;notes;footprint;tags;quantity;storage_location;mass;ipn;mpn;manufacturing_status;manufacturer;supplier;spn;price;favorite;needs_review;minamount;partUnit;manufacturing_status +BC547;NPN transistor;Transistors -> NPN;very important notes;TO -> TO-92;NPN,Transistor;5;Room 1 -> Shelf 1 -> Box 2;10;;;Manufacturer;;You need to fill this line, to use spn and price;BC547C;2,3;0;;;; +BC557;PNP transistor;HTML;;TO -> TO-92;PNP,Transistor;10;Room 2-> Box 3;;Internal1234;;;;;;;;1;;;active +Copper Wire;;Wire;;;;;;;;;;;;;;;;;Meter; \ No newline at end of file diff --git a/docs/usage/import_export.md b/docs/usage/import_export.md index 0e458976..38b79774 100644 --- a/docs/usage/import_export.md +++ b/docs/usage/import_export.md @@ -11,6 +11,11 @@ Part-DB offers the possibility to import existing data (parts, datastructures, e ## Import +{: .note } +> As data import is a very powerful feature and can easily fill up your database with lots of data, import is by default only available for +> administrators. If you want to allow other users to import data, or can not import data, check the permissions of the user. You can enable import for each data structure +> individually in the permissions settings. + ### Import parts Part-DB supports the import of parts from CSV files and other formats. This can be used to import existing parts from other databases or datasources into Part-DB. The import can be done via the "Tools -> Import parts" page, which you can find in the "Tools" sidebar panel. @@ -65,6 +70,8 @@ The following fields can be used to specify the supplier/distributor, supplier p #### Example data Here you can find some example data for the import of parts, you can use it as a template for your own import (especially the CSV file). +* [Part import CSV example]({% link assets/usage/import_export/part_import_example.csv %}) with all possible fields + ## Export By default every user, who can read the datastructure, can also export the data of this datastructure, as this does not give the user any additional information. diff --git a/src/Controller/PartImportExportController.php b/src/Controller/PartImportExportController.php index 98430ed3..7b8038c0 100644 --- a/src/Controller/PartImportExportController.php +++ b/src/Controller/PartImportExportController.php @@ -33,6 +33,7 @@ use Symfony\Component\HttpFoundation\File\UploadedFile; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Serializer\Exception\NotNormalizableValueException; use UnexpectedValueException; class PartImportExportController extends AbstractController @@ -93,6 +94,9 @@ class PartImportExportController extends AbstractController $errors = $this->entityImporter->importFileAndPersistToDB($file, $options, $entities); } catch (UnexpectedValueException $e) { $this->addFlash('error', 'parts.import.flash.error.invalid_file'); + if ($e instanceof NotNormalizableValueException) { + $this->addFlash('error', $e->getMessage()); + } goto ret; } diff --git a/src/Serializer/PartNormalizer.php b/src/Serializer/PartNormalizer.php index dbad5aa2..ef844acf 100644 --- a/src/Serializer/PartNormalizer.php +++ b/src/Serializer/PartNormalizer.php @@ -103,13 +103,24 @@ class PartNormalizer implements NormalizerInterface, DenormalizerInterface, Cach $data['ipn'] = null; } + //Fill empty needs_review and needs_review_comment fields with false + if (empty($data['needs_review'])) { + $data['needs_review'] = false; + } + if (empty($data['favorite'])) { + $data['favorite'] = false; + } + if (empty($data['minamount'])) { + $data['minamount'] = 0.0; + } + $object = $this->normalizer->denormalize($data, $type, $format, $context); if (!$object instanceof Part) { throw new \InvalidArgumentException('This normalizer only supports Part objects!'); } - if (isset($data['instock']) || isset($data['storelocation'])) { + if ((isset($data['instock']) && trim($data['instock']) !== "") || (isset($data['storelocation']) && trim($data['storelocation']) !== "")) { $partLot = new PartLot(); if (isset($data['instock']) && $data['instock'] !== "") {