diff --git a/back/inventory/models.py b/back/inventory/models.py index 59c129d..6462b52 100644 --- a/back/inventory/models.py +++ b/back/inventory/models.py @@ -3,14 +3,15 @@ from django.db import models class Partner(models.Model): id = models.AutoField(primary_key=True) + external_id = models.CharField() def __str__(self): - return f" partner {self.id}" + return f"Partner {self.id}" class Element(models.Model): id = models.AutoField(primary_key=True) - external_id = models.IntegerField() + external_id = models.CharField() type = models.CharField(max_length=100) photo = models.ImageField(upload_to=".") additional_text = models.TextField() diff --git a/back/inventory/serializers.py b/back/inventory/serializers.py index bed8098..4683ef2 100644 --- a/back/inventory/serializers.py +++ b/back/inventory/serializers.py @@ -5,7 +5,7 @@ from .models import Partner, Element class PartnerSerializer(serializers.ModelSerializer): class Meta: model = Partner - fields = ["id"] + fields = ["id", "external_id"] class ElementSerializer(serializers.ModelSerializer): class Meta: diff --git a/back/inventory/views.py b/back/inventory/views.py index 0cb7121..4e3e05c 100644 --- a/back/inventory/views.py +++ b/back/inventory/views.py @@ -24,6 +24,13 @@ class PartnerViewSet(viewsets.ModelViewSet): queryset = Partner.objects.all() serializer_class = PartnerSerializer + def create(self, validated_data): + logger.info("create") + super().create(**validated_data) + + def get(self, request, **kwargs): + logger.info("get") + @action(detail=False, methods=["get"], url_path=r"external") def get_remote_partners(self, request): params = { @@ -67,6 +74,20 @@ class ElementViewSet(viewsets.ModelViewSet): queryset = Element.objects.all() serializer_class = ElementSerializer + def create(self, request, **kwargs): + data = request.data + + # check if partner exist + if Partner.objects.filter(external_id=data["partner"]).exists(): + partner_object = Partner.objects.get(external_id=data["partner"]) + else: + partner_object = Partner.objects.create(external_id=data["partner"]) + partner_serializer = PartnerSerializer(partner_object, many=False) + + + + return Response({"partner": partner_serializer.data}) + @action( detail=False, methods=["get"], diff --git a/front/package-lock.json b/front/package-lock.json index f63bf05..014109b 100644 --- a/front/package-lock.json +++ b/front/package-lock.json @@ -10,7 +10,8 @@ "@nuxt/ui": "^2.16.0", "nuxt": "^3.11.2", "vue": "^3.4.27", - "vue-router": "^4.3.2" + "vue-router": "^4.3.2", + "yup": "^1.4.0" }, "devDependencies": { "sass": "^1.77.2" @@ -9506,6 +9507,11 @@ "node": ">= 6" } }, + "node_modules/property-expr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz", + "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==" + }, "node_modules/protocols": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", @@ -10922,6 +10928,11 @@ "node": ">=0.8" } }, + "node_modules/tiny-case": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz", + "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==" + }, "node_modules/tiny-invariant": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", @@ -10954,6 +10965,11 @@ "node": ">=0.6" } }, + "node_modules/toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==" + }, "node_modules/totalist": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", @@ -12162,6 +12178,28 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yup": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/yup/-/yup-1.4.0.tgz", + "integrity": "sha512-wPbgkJRCqIf+OHyiTBQoJiP5PFuAXaWiJK6AmYkzQAh5/c2K9hzSApBZG5wV9KoKSePF7sAxmNSvh/13YHkFDg==", + "dependencies": { + "property-expr": "^2.0.5", + "tiny-case": "^1.0.3", + "toposort": "^2.0.2", + "type-fest": "^2.19.0" + } + }, + "node_modules/yup/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/zhead": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/zhead/-/zhead-2.2.4.tgz", diff --git a/front/package.json b/front/package.json index 5390854..14f6e9d 100644 --- a/front/package.json +++ b/front/package.json @@ -13,7 +13,8 @@ "@nuxt/ui": "^2.16.0", "nuxt": "^3.11.2", "vue": "^3.4.27", - "vue-router": "^4.3.2" + "vue-router": "^4.3.2", + "yup": "^1.4.0" }, "devDependencies": { "sass": "^1.77.2" diff --git a/front/pages/organization/new.vue b/front/pages/organization/new.vue index d2a1c6c..3d2a5f0 100644 --- a/front/pages/organization/new.vue +++ b/front/pages/organization/new.vue @@ -1,6 +1,8 @@