bugfix/Warehouse

This commit is contained in:
hungdztrau123 2024-05-16 13:52:38 +07:00
parent 53326c579d
commit 9d4d0b39a6
4 changed files with 82 additions and 30 deletions

View File

@ -0,0 +1,35 @@
# Generated by Django 4.2.11 on 2024-05-16 04:35
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('documents', '1046_workflowaction_remove_all_correspondents_and_more'),
]
operations = [
migrations.CreateModel(
name='Warehouse',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=256, unique=True, verbose_name='name')),
('type', models.CharField(blank=True, choices=[('Warehouse', 'Warehouse'), ('Shelf', 'Shelf'), ('Boxcase', 'Boxcase')], default='Warehouse', max_length=20, null=True)),
('owner', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='owner')),
('parent_warehouse', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='parent_warehouses', to='documents.warehouse')),
],
options={
'verbose_name': 'warehouse',
'verbose_name_plural': 'warehouses',
},
),
migrations.AddField(
model_name='document',
name='warehouses',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='documents', to='documents.warehouse', verbose_name='warehouses'),
),
]

View File

@ -129,6 +129,29 @@ class StoragePath(MatchingModel):
verbose_name = _("storage path")
verbose_name_plural = _("storage paths")
class Warehouse(ModelWithOwner):
WAREHOUSE = "Warehouse"
SHELF = "Shelf"
BOXCASE = "Boxcase"
TYPE_WAREHOUSE = (
(WAREHOUSE, _("Warehouse")),
(SHELF, _("Shelf")),
(BOXCASE, _("Boxcase")),
)
name = models.CharField(_("name"), max_length=256, unique=True)
type = models.CharField(max_length=20, null=True, blank=True,
choices=TYPE_WAREHOUSE,
default=WAREHOUSE,)
parent_warehouse = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name="parent_warehouses" )
class Meta:
verbose_name = _("warehouse")
verbose_name_plural = _("warehouses")
def __str__(self):
return self.name
class Document(ModelWithOwner):
STORAGE_TYPE_UNENCRYPTED = "unencrypted"
@ -185,6 +208,15 @@ class Document(ModelWithOwner):
verbose_name=_("tags"),
)
warehouses = models.ForeignKey(
Warehouse,
blank=True,
null=True,
related_name="documents",
on_delete=models.SET_NULL,
verbose_name=_("warehouses"),
)
checksum = models.CharField(
_("checksum"),
max_length=32,
@ -1241,26 +1273,3 @@ class Workflow(models.Model):
class Warehouse(ModelWithOwner):
WAREHOUSE = "Warehouse"
SHELF = "Shelf"
BOXCASE = "Boxcase"
TYPE_WAREHOUSE = (
(WAREHOUSE, _("Warehouse")),
(SHELF, _("Shelf")),
(BOXCASE, _("Boxcase")),
)
name = models.CharField(_("name"), max_length=256, unique=True)
type = models.CharField(max_length=20, null=True, blank=True,
choices=TYPE_WAREHOUSE,
default=WAREHOUSE,)
parent_warehouse = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name="parent_warehouses" )
class Meta:
verbose_name = _("warehouse")
verbose_name_plural = _("warehouses")
def __str__(self):
return self.name

View File

@ -428,6 +428,9 @@ class TagsField(serializers.PrimaryKeyRelatedField):
def get_queryset(self):
return Tag.objects.all()
class WarehousesField(serializers.PrimaryKeyRelatedField):
def get_queryset(self):
return Warehouse.objects.all()
class DocumentTypeField(serializers.PrimaryKeyRelatedField):
def get_queryset(self):
@ -653,6 +656,7 @@ class DocumentSerializer(
):
correspondent = CorrespondentField(allow_null=True)
tags = TagsField(many=True)
warehouses = WarehousesField(allow_null=True)
document_type = DocumentTypeField(allow_null=True)
storage_path = StoragePathField(allow_null=True)
@ -774,6 +778,7 @@ class DocumentSerializer(
"title",
"content",
"tags",
"warehouses",
"created",
"created_date",
"modified",
@ -1751,15 +1756,18 @@ class WorkflowSerializer(serializers.ModelSerializer):
class WarehouseSerializer(MatchingModelSerializer, OwnedObjectSerializer):
parent_warehouse_reference = serializers.SerializerMethodField()
class Meta:
model = Warehouse
fields = '__all__'
def get_parent_warehouse_reference(self, obj):
if obj.parent_warehouse:
return WarehouseSerializer(obj.parent_warehouse).data
return None
def to_representation(self, instance):
data = super().to_representation(instance)
if instance.parent_warehouse:
data['parent_warehouse'] = WarehouseSerializer(instance.parent_warehouse).data
else:
data['parent_warehouse'] = None
return data

View File

@ -1758,7 +1758,7 @@ class SystemStatusView(PassUserMixin):
class WarehouseViewSet(ModelViewSet):
class WarehouseViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin):
model = Warehouse
queryset = Warehouse.objects.select_related("owner").order_by(
@ -1774,5 +1774,5 @@ class WarehouseViewSet(ModelViewSet):
ObjectOwnedOrGrantedPermissionsFilter,
)
filterset_class = WarehouseFilterSet
ordering_fields = ("name", "type", "parent_warehouse")
ordering_fields = ("name", "type", "parent_warehouse", "document_count")