Jelajahi Sumber

申请发票

wushaodong 4 tahun lalu
induk
melakukan
1e0fd958b7

+ 0 - 5
apps/admin/tenant/serializers.py

@@ -51,8 +51,3 @@ class TenantSerializer(serializers.ModelSerializer) :
         return instance
 
 
-class InvoiceSerializer(serializers.ModelSerializer):
-
-    class Meta:
-        model = Invoice
-        fields = '__all__'

+ 12 - 2
apps/tenant/filters.py

@@ -2,11 +2,21 @@
 
 import django_filters
 
-from .models import Tenant
+from .models import Tenant,Invoice
 
 class TenantFilter(django_filters.FilterSet):
     name = django_filters.CharFilter(field_name='name', lookup_expr='icontains')
 
     class Meta:
         model = Tenant
-        fields = ['name',]
+        fields = ['name',]
+
+class InvoiceFilter(django_filters.FilterSet):
+    invoice_name = django_filters.CharFilter(field_name='invoice_name', lookup_expr='icontains')
+    tax_no = django_filters.CharFilter(field_name='tax_no', lookup_expr='icontains')
+    consignee = django_filters.CharFilter(field_name='consignee', lookup_expr='icontains')
+    consignee_tel = django_filters.CharFilter(field_name='consignee_tel', lookup_expr='icontains')
+
+    class Meta:
+        model = Invoice
+        fields = '__all__'

+ 5 - 4
apps/tenant/models.py

@@ -89,7 +89,7 @@ class Pay(models.Model):
     WAIT = 0
     PAY = 1
     CONFIRM = 2
-    UNDO = 4
+    UNDO = 3
     STATUS_CHOICES = (
         (WAIT, u'待付款'),
         (PAY, u'已付款'),
@@ -110,7 +110,8 @@ class Pay(models.Model):
     qrcode = models.CharField(max_length=512, verbose_name=u"付款码", null=True)
     amount = models.BigIntegerField(verbose_name=u"支付金额", null=True)
     user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u'下单人',related_name='pay_user', on_delete=models.PROTECT)
-    tenant = models.ForeignKey(Tenant, verbose_name=u'商户',related_name='pay_tenant', on_delete=models.PROTECT)
+    tenant = models.ForeignKey(Tenant, verbose_name=u'商户', related_name='pay_tenant', on_delete=models.PROTECT)
+    invoice = models.ForeignKey('invoice',verbose_name=u'发票', related_name='pay_invoice', on_delete=models.PROTECT)
 
     class Meta:
         db_table = "pay"
@@ -235,8 +236,7 @@ class Invoice(models.Model):
     bank_account = models.CharField(max_length=50, verbose_name=u'银行帐户', blank=True, null=True)
     invoice_sum = models.FloatField(max_length=20, verbose_name=u'发票金额')
 
-    user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u"申请人", on_delete=models.PROTECT,
-                             editable=False)
+    user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u"申请人", on_delete=models.PROTECT)
     create_time = models.DateTimeField(verbose_name=u'申请时间', auto_now_add=True, editable=False)
     status = models.PositiveSmallIntegerField(choices=APPLY_STATE_CHOICES, verbose_name=u'状态',
                                               default=NOT_CHECKED)
@@ -248,6 +248,7 @@ class Invoice(models.Model):
     consignee_address= models.CharField(max_length=200, verbose_name=u'收件地址')
     express_company = models.CharField(max_length=20, verbose_name=u'快递公司', blank=True, null=True)
     express_number = models.CharField(max_length=200, verbose_name=u'快递单号', blank=True, null=True)
+    tenant = models.ForeignKey(Tenant, verbose_name=u'商户', related_name='invoice_tenant', on_delete=models.PROTECT)
 
     class Meta:
         db_table = 'invoice'

+ 10 - 1
apps/tenant/serializers.py

@@ -8,7 +8,7 @@ from rest_framework_jwt.settings import api_settings
 from apps.log.models import BizLog
 from utils import get_remote_addr
 from apps.tenant.employee.models import Employee
-from apps.tenant.models import Pay
+from apps.tenant.models import Pay,Invoice
 from apps.base import Formater
 
 User = get_user_model()
@@ -67,3 +67,12 @@ class PaySerializer(serializers.ModelSerializer):
     class Meta:
         model = Pay
         fields = '__all__'
+
+class InvoiceSerializer(serializers.ModelSerializer):
+    status_text = serializers.CharField(source='get_status_display', read_only=True)
+    tenant = serializers.DateTimeField(source='tenant.company_name', read_only=True)
+    username = serializers.CharField(source='user.employee.name', read_only=True)
+
+    class Meta:
+        model = Invoice
+        fields = '__all__'

+ 2 - 0
apps/tenant/urls.py

@@ -9,6 +9,7 @@ urlpatterns = [
     url(r'^login/$', TenantLoginView.as_view()),
     url(r'^token_refresh/$', TenantRefreshTokenView.as_view()),
     url(r'^token_verify/$', TenantVerifyTokenView.as_view()),
+    url(r'get_invoice_dict/$', InvoiceDataView.as_view()),
 
     url(r'^employee/', include('apps.tenant.employee.urls')),
     url(r'^option/', include('apps.tenant.option.urls')),
@@ -23,5 +24,6 @@ urlpatterns = [
 
 
 router = SimpleRouter()
+router.register(r'invoice', InvoiceViewSet)
 router.register(r'company', CompanyViewSet)
 urlpatterns += router.urls

+ 51 - 2
apps/tenant/views.py

@@ -4,14 +4,16 @@ import datetime
 import time
 from django.db import transaction
 from django.conf import settings
+from django.db.models import Q,Sum
 from rest_framework.decorators import action
 from rest_framework_jwt.views import ObtainJSONWebToken,VerifyJSONWebToken,RefreshJSONWebToken
 from rest_framework.serializers import ValidationError
+
 from utils.custom_modelviewset import CustomModelViewSet
 from utils import response_error, response_ok
 from .serializers import TenantJWTSerializer
 from utils.permission import IsTenantUser, IsAdministratorUser
-from .models import Tenant, Pay
+from .models import Tenant, Pay, Invoice
 from apps.admin.tenant.serializers import TenantSerializer
 from apps.admin.tenant.filters import TenantFilter
 from apps.log.models import BizLog
@@ -19,7 +21,10 @@ from apps.tenant.config.models import Config
 from utils.exceptions import CustomError
 from apps.base import Formater
 from apps.WechatApplet.models import WechatApplet
-from apps.tenant.serializers import PaySerializer
+from apps.tenant.serializers import PaySerializer,InvoiceSerializer
+from apps.tenant.filters import InvoiceFilter
+from rest_framework.views import APIView
+
 
 class TenantLoginView(ObtainJSONWebToken):
     serializer_class = TenantJWTSerializer
@@ -166,3 +171,47 @@ class CompanyViewSet(CustomModelViewSet):
         payment = Pay.objects.filter(tenant_id=pk)
         data = PaySerializer(payment, many=True).data
         return response_ok(data)
+
+class InvoiceViewSet(CustomModelViewSet):
+    permission_classes = [IsTenantUser, ]
+    queryset = Invoice.objects.filter()
+    serializer_class = InvoiceSerializer
+
+    def filter_queryset(self, queryset):
+        queryset = queryset.filter(id=self.request.user.employee.tenant.id)
+        f = InvoiceFilter(self.request.GET, queryset=queryset)
+        print(f)
+        return f.qs
+
+class InvoiceDataView(APIView):
+    permission_classes = [IsTenantUser, ]
+
+    def get(self, request):
+        tenant = request.user.employee.tenant
+        invoice_id = request.GET.get('invoice_id')
+
+        pay = Pay.objects.filter(
+            Q(status=Pay.PAY, invoice_id=None,tenant=tenant) | Q(status=Pay.CONFIRM, invoice_id=None,tenant=tenant))\
+            .aggregate(amount=Sum('amount'))
+        print(22222, pay)
+        invoice = Invoice.objects.filter(invoice_id=invoice_id)
+        print(11111111111,invoice)
+        try:
+            if pay:
+                 data = {
+                    'invoice_name': invoice['invoice_name'],
+                    'tax_no': invoice['tax_no'],
+                    'company_address': invoice['company_address'],
+                    'phone_no': invoice['phone_no'],
+                    'deposit_bank': invoice['deposit_bank'],
+                    'bank_account': invoice['bank_account'],
+                    'invoice_sum': pay['amount'],
+                    'consignee': invoice['consignee'],
+                    'consignee_tel': invoice['consignee_tel'],
+                    'consignee_address': invoice['company_address'],
+                 }
+            else:
+                return CustomError('未开具发票!')
+        except Exception as e:
+            return response_error(str(e))
+        return response_ok(data)

+ 13 - 13
ly_baoxiu_admin/settings.py

@@ -55,7 +55,7 @@ INSTALLED_APPS = [
     'apps.tenant.repair_order',
     'apps.tenant.inspection_order',
     'apps.wxapp',
-    'apps.tenant.notices'
+    'apps.tenant.notices',
 
 ]
 
@@ -122,22 +122,22 @@ WSGI_APPLICATION = 'ly_baoxiu_admin.wsgi.application'
 # https://docs.djangoproject.com/en/2.2/ref/settings/#databases
 
 DATABASES = {
-    'default': {
-        'ENGINE': 'django.db.backends.mysql',
-        'NAME': 'baoxiu',
-        'USER': 'baoxiu',
-        'PASSWORD': 'baoxiu@20210323',
-        'HOST': '139.9.148.181',
-        'PORT': 3306,
-    },
     # 'default': {
     #     'ENGINE': 'django.db.backends.mysql',
-    #     'NAME': 'ly_report_repair',
-    #     'USER': 'carwin',
-    #     'PASSWORD': 'carwin!@#',
-    #     'HOST': '192.168.2.45',
+    #     'NAME': 'baoxiu',
+    #     'USER': 'baoxiu',
+    #     'PASSWORD': 'baoxiu@20210323',
+    #     'HOST': '139.9.148.181',
     #     'PORT': 3306,
     # },
+    'default': {
+        'ENGINE': 'django.db.backends.mysql',
+        'NAME': 'ly_report_repair',
+        'USER': 'carwin',
+        'PASSWORD': 'carwin!@#',
+        'HOST': '192.168.2.45',
+        'PORT': 3306,
+    },
     # 'default': {
     #     'ENGINE': 'django.db.backends.mysql',
     #     'NAME': 'baoxiu',