瀏覽代碼

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	apps/tenant/models.py
#	ly_baoxiu_admin/settings.py
wushaodong 4 年之前
父節點
當前提交
4e20b82d2a

+ 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__'

+ 0 - 1
apps/tenant/inspection_order/filters.py

@@ -14,5 +14,4 @@ class InspectionOrderFilter(django_filters.FilterSet):
 
     def query_status(self, queryset, *args):
         queryset = queryset.filter(status__in=args[1].split(','))
-        print(queryset)
         return queryset

+ 5 - 4
apps/tenant/models.py

@@ -121,7 +121,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)
     edition_year = models.CharField(max_length=10, verbose_name='版本年限', default='')
 
     class Meta:
@@ -261,10 +262,9 @@ class Invoice(models.Model):
     phone_no = models.CharField(max_length=20, verbose_name=u'电话号码', blank=True, null=True)
     deposit_bank = models.CharField(max_length=50, verbose_name=u'开户银行', blank=True, null=True)
     bank_account = models.CharField(max_length=50, verbose_name=u'银行帐户', blank=True, null=True)
-    invoice_sum = models.FloatField(max_length=20, verbose_name=u'发票金额')
+    invoice_sum = models.FloatField(verbose_name=u'发票金额')
 
-    user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u"申请人", on_delete=models.PROTECT,
-                             editable=False)
+    user = models.CharField(max_length=20, verbose_name=u"申请人")
     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)
@@ -276,6 +276,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'

+ 15 - 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,17 @@ 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__'
+
+    def create(self, validated_data):
+        validated_data['tenant'] = self.context['request'].user.employee.tenant
+        instance = super(InvoiceSerializer, self).create(validated_data)
+        return instance

+ 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

+ 60 - 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
@@ -149,3 +154,56 @@ class CompanyViewSet(CustomModelViewSet):
         payment = Pay.objects.filter(tenant_id=pk)
         data = PaySerializer(payment, many=True).data
         return response_ok(data)
+
+class InvoiceDataView(APIView):
+    permission_classes = [IsTenantUser, ]
+
+    def get(self, request):
+        tenant = request.user.employee.tenant
+        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'))
+        data = {
+            'invoice_name': "",
+            'tax_no': "",
+            'company_address': "",
+            'phone_no': "",
+            'deposit_bank': "",
+            'bank_account': "",
+            'invoice_sum': "",
+            'consignee': "",
+            'consignee_tel': "",
+            'consignee_address': "",
+        }
+        try:
+            if not pay['amount']:
+                return CustomError('未开具发票!')
+            invoice = Invoice.objects.filter(tenant=tenant).order_by('-id').first()
+            if invoice:
+                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:
+                data['invoice_sum']=pay['amount']
+        except Exception as e:
+            return response_error(str(e))
+        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(tenant=self.request.user.employee.tenant)
+        f = InvoiceFilter(self.request.GET, queryset=queryset)
+        return f.qs

+ 1 - 1
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',
 
 ]