add new api
This commit is contained in:
@@ -0,0 +1,3 @@
|
|||||||
|
from .celery import app as celery_app
|
||||||
|
|
||||||
|
__all__ = ['celery_app']
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
from celery import Celery
|
from celery import Celery
|
||||||
|
|
||||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.base')
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.base')
|
||||||
|
|
||||||
app = Celery('config')
|
app = Celery('config', broker="redis://redis:6379", backend="redis://redis:6379")
|
||||||
|
|
||||||
|
|
||||||
app.config_from_object('django.conf:settings', namespace='CELERY')
|
app.config_from_object('django.conf:settings', namespace='CELERY')
|
||||||
|
|
||||||
app.autodiscover_tasks()
|
app.autodiscover_tasks()
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
CELERY_BROKER_URL = 'redis://redis:6379/0'
|
CELERY_BROKER_URL = 'redis://redis:6379'
|
||||||
|
CELERY_RESULT_BACKEND = "redis://redis:6379"
|
||||||
CELERY_ACCEPT_CONTENT = ['json']
|
CELERY_ACCEPT_CONTENT = ['json']
|
||||||
CELERY_TASK_SERIALIZER = 'json'
|
CELERY_TASK_SERIALIZER = 'json'
|
||||||
CELERY_TIMEZONE = settings.TIME_ZONE
|
CELERY_TIMEZONE = settings.TIME_ZONE
|
||||||
|
CELERY_ENABLED = True
|
||||||
|
|
||||||
|
|||||||
@@ -45,7 +45,6 @@ JAZZMIN_SETTINGS = {
|
|||||||
"default_icon_parents": "fas fa-chevron-circle-right",
|
"default_icon_parents": "fas fa-chevron-circle-right",
|
||||||
"default_icon_children": "fas fa-circle",
|
"default_icon_children": "fas fa-circle",
|
||||||
|
|
||||||
"related_modal_active": True,
|
|
||||||
|
|
||||||
"use_google_fonts_cdn": True,
|
"use_google_fonts_cdn": True,
|
||||||
"show_ui_builder": False,
|
"show_ui_builder": False,
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
CACHES = {
|
CACHES = {
|
||||||
"default": {
|
"default": {
|
||||||
"BACKEND": 'django_redis.cache.RedisCache',
|
"BACKEND": 'django_redis.cache.RedisCache',
|
||||||
"LOCATION": 'redis://redis:6379',
|
"LOCATION": 'redis://redis:6379z',
|
||||||
"TIMEOUT": 300,
|
"TIMEOUT": 300,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ PACKAGES = [
|
|||||||
'rest_framework_simplejwt',
|
'rest_framework_simplejwt',
|
||||||
'corsheaders',
|
'corsheaders',
|
||||||
'cacheops',
|
'cacheops',
|
||||||
# 'silk',
|
|
||||||
]
|
]
|
||||||
|
|
||||||
DJANGO_APPS = [
|
DJANGO_APPS = [
|
||||||
@@ -100,7 +99,6 @@ DATABASES = {
|
|||||||
'PASSWORD': env.str('POSTGRES_PASSWORD'),
|
'PASSWORD': env.str('POSTGRES_PASSWORD'),
|
||||||
'HOST': env.str('POSTGRES_HOST'),
|
'HOST': env.str('POSTGRES_HOST'),
|
||||||
'PORT': env.str('POSTGRES_PORT'),
|
'PORT': env.str('POSTGRES_PORT'),
|
||||||
'CONN_MAX_AGE': 0
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -159,5 +157,5 @@ from config.conf.logs import *
|
|||||||
from config.conf.cors_headers import *
|
from config.conf.cors_headers import *
|
||||||
from config.conf.drf_yasg import *
|
from config.conf.drf_yasg import *
|
||||||
from config.conf.jazzmin import *
|
from config.conf.jazzmin import *
|
||||||
from config.conf.redis import *
|
|
||||||
from config.conf.celery import *
|
from config.conf.celery import *
|
||||||
|
from config.conf.redis import *
|
||||||
@@ -81,8 +81,6 @@ class MultipleOrderCreateSerializer(serializers.Serializer):
|
|||||||
date=common_date,
|
date=common_date,
|
||||||
employee=self.context.get('user'),
|
employee=self.context.get('user'),
|
||||||
))
|
))
|
||||||
create_inventory.delay(resource['wherehouse'],resource['quantity'],resource)
|
|
||||||
|
|
||||||
created_orders = Order.objects.bulk_create(orders)
|
created_orders = Order.objects.bulk_create(orders)
|
||||||
return created_orders
|
return created_orders
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ from core.apps.orders.models import Party, PartyAmount, Order, DeletedParty
|
|||||||
from core.apps.orders.serializers.order import MultipleOrderAddSerializer, OrderListSerializer
|
from core.apps.orders.serializers.order import MultipleOrderAddSerializer, OrderListSerializer
|
||||||
from core.apps.accounts.models import User
|
from core.apps.accounts.models import User
|
||||||
from core.apps.counterparty.serializers.counterparty import CounterpartyListPartySerializer
|
from core.apps.counterparty.serializers.counterparty import CounterpartyListPartySerializer
|
||||||
|
from core.apps.orders.tasks.order import create_inventory
|
||||||
from core.apps.shared.models import UsdCourse
|
from core.apps.shared.models import UsdCourse
|
||||||
from core.apps.products.models import Product, Unity
|
from core.apps.products.models import Product, Unity
|
||||||
from core.apps.projects.models import Project, ProjectFolder
|
from core.apps.projects.models import Project, ProjectFolder
|
||||||
@@ -56,6 +57,7 @@ class PartyCreateSerializer(serializers.Serializer):
|
|||||||
total_price=resource.get('total_price'),
|
total_price=resource.get('total_price'),
|
||||||
qqs=resource.get('qqs'),
|
qqs=resource.get('qqs'),
|
||||||
))
|
))
|
||||||
|
create_inventory.delay(resource['wherehouse_id'], resource['quantity'], resource['product_id'], resource['unity_id'], resource['total_price'])
|
||||||
if validated_data.get('currency') == 'uzs':
|
if validated_data.get('currency') == 'uzs':
|
||||||
if resource.get('currency') == 'usd':
|
if resource.get('currency') == 'usd':
|
||||||
usd_value = UsdCourse.objects.first().value
|
usd_value = UsdCourse.objects.first().value
|
||||||
|
|||||||
@@ -6,9 +6,9 @@ from core.apps.wherehouse.models.inventory import Inventory
|
|||||||
@shared_task
|
@shared_task
|
||||||
def create_inventory(wherehouse, quantity, product, unity, price):
|
def create_inventory(wherehouse, quantity, product, unity, price):
|
||||||
Inventory.objects.create(
|
Inventory.objects.create(
|
||||||
wherehouse__id=wherehouse,
|
wherehouse_id=wherehouse,
|
||||||
quantity=quantity,
|
quantity=quantity,
|
||||||
product__id=product,
|
product_id=product,
|
||||||
unity__id=unity,
|
unity_id=unity,
|
||||||
price=price
|
price=price
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ from rest_framework import serializers
|
|||||||
from core.apps.wherehouse.models.inventory import Inventory
|
from core.apps.wherehouse.models.inventory import Inventory
|
||||||
|
|
||||||
|
|
||||||
class WhereHouseInventoryListSerializer(serializers.ModelSerializer):
|
class InventoryListSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Inventory
|
model = Inventory
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'quantity', 'product'
|
'id', 'quantity', 'product', 'price', 'unity'
|
||||||
]
|
]
|
||||||
@@ -3,7 +3,7 @@ from django.db import transaction
|
|||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from core.apps.wherehouse.models.wherehouse import WhereHouse
|
from core.apps.wherehouse.models.wherehouse import WhereHouse
|
||||||
from core.apps.wherehouse.serializers.inventory import WhereHouseInventoryListSerializer
|
from core.apps.wherehouse.serializers.inventory import InventoryListSerializer
|
||||||
from core.apps.company.serializers.branch import BranchListSerializer
|
from core.apps.company.serializers.branch import BranchListSerializer
|
||||||
from core.apps.company.models import Branch
|
from core.apps.company.models import Branch
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
from django.urls import path, include
|
from django.urls import path, include
|
||||||
|
|
||||||
from core.apps.wherehouse.views import wherehouse as wherehouse_views
|
from core.apps.wherehouse.views import wherehouse as wherehouse_views
|
||||||
|
from core.apps.wherehouse.views import inventory as inventory_views
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
@@ -13,4 +14,9 @@ urlpatterns = [
|
|||||||
path('<uuid:id>/update/', wherehouse_views.WhereHouseUpdateApiView.as_view()),
|
path('<uuid:id>/update/', wherehouse_views.WhereHouseUpdateApiView.as_view()),
|
||||||
]
|
]
|
||||||
)),
|
)),
|
||||||
|
path('inventory/', include(
|
||||||
|
[
|
||||||
|
path('<uuid:wherehouse_id>/list/', inventory_views.InventoryListApiView.as_view()),
|
||||||
|
]
|
||||||
|
)),
|
||||||
]
|
]
|
||||||
25
core/apps/wherehouse/views/inventory.py
Normal file
25
core/apps/wherehouse/views/inventory.py
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
from django.shortcuts import get_object_or_404
|
||||||
|
|
||||||
|
from rest_framework import generics, views
|
||||||
|
from rest_framework.response import Response
|
||||||
|
|
||||||
|
from core.apps.wherehouse.serializers import inventory as serializers
|
||||||
|
from core.apps.wherehouse.models import WhereHouse, Inventory
|
||||||
|
from core.apps.accounts.permissions.permissions import HasRolePermission
|
||||||
|
|
||||||
|
|
||||||
|
class InventoryListApiView(generics.GenericAPIView):
|
||||||
|
serializer_class = serializers.InventoryListSerializer
|
||||||
|
queryset = Inventory.objects.all()
|
||||||
|
permissions_class = [HasRolePermission]
|
||||||
|
required_permissions = ['wherehouse']
|
||||||
|
|
||||||
|
def get(self, request, wherehouse_id):
|
||||||
|
wherehouse = get_object_or_404(WhereHouse, id=wherehouse_id)
|
||||||
|
inventories = Inventory.objects.filter(wherehouse=wherehouse)
|
||||||
|
page = self.paginate_queryset(inventories)
|
||||||
|
if page is not None:
|
||||||
|
serializer = self.serializer_class(page, many=True)
|
||||||
|
return self.get_paginated_response(serializer.data)
|
||||||
|
serializer = self.serializer_class(inventories, many=True)
|
||||||
|
return Response(serializer.data, status=200)
|
||||||
@@ -50,8 +50,6 @@ services:
|
|||||||
networks:
|
networks:
|
||||||
- uyqur
|
- uyqur
|
||||||
image: redis
|
image: redis
|
||||||
ports:
|
|
||||||
- "6380:6379"
|
|
||||||
|
|
||||||
celery:
|
celery:
|
||||||
build:
|
build:
|
||||||
@@ -65,3 +63,6 @@ services:
|
|||||||
- web
|
- web
|
||||||
networks:
|
networks:
|
||||||
- uyqur
|
- uyqur
|
||||||
|
environment:
|
||||||
|
- CELERY_BROKER_URL=redis://redis:6379/0
|
||||||
|
- CELERY_RESULT_BACKEND=redis://redis:6379/0
|
||||||
@@ -1,13 +1,26 @@
|
|||||||
FROM python:3.13-alpine
|
FROM python:3.12
|
||||||
|
|
||||||
ENV PYTHONPYCACHEPREFIX=/dev/null
|
|
||||||
|
|
||||||
RUN apk update && apk add git gettext
|
|
||||||
|
|
||||||
WORKDIR /code
|
WORKDIR /code
|
||||||
|
|
||||||
COPY requirements.txt /code/requirements.txt
|
RUN apt-get update && \
|
||||||
|
apt-get install -y \
|
||||||
|
gdal-bin \
|
||||||
|
libgdal-dev \
|
||||||
|
python3-gdal \
|
||||||
|
libgeos-dev \
|
||||||
|
libproj-dev \
|
||||||
|
g++ \
|
||||||
|
make \
|
||||||
|
wget \
|
||||||
|
libfontconfig \
|
||||||
|
libxrender1 \
|
||||||
|
libjpeg-dev \
|
||||||
|
xfonts-base && \
|
||||||
|
apt-get clean && \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
RUN --mount=type=cache,target=/root/.cache/pip pip install -r requirements.txt
|
|
||||||
|
|
||||||
CMD ["sh", "./entrypoint.sh"]
|
COPY ./ /code
|
||||||
|
RUN --mount=type=cache,target=/root/.cache/pip python3 -m pip install -r requirements.txt
|
||||||
|
|
||||||
|
CMD ["sh", "./resources/scripts/entrypoint.sh"]
|
||||||
Reference in New Issue
Block a user