wushaodong 3 lat temu
rodzic
commit
cb071f11f9
32 zmienionych plików z 204 dodań i 6 usunięć
  1. 1 0
      .gitignore
  2. 1 1
      apps/material/views.py
  3. 49 0
      apps/order/views.py
  4. 1 1
      apps/purchase/models.py
  5. 1 1
      apps/purchase/resources.py
  6. 149 1
      apps/purchase/views.py
  7. BIN
      uis/media/customer/1-20181017164122424000.png
  8. BIN
      uis/media/customer/1-20181017164122747000.png
  9. BIN
      uis/media/customer/1-20190110101354931000.jpeg
  10. BIN
      uis/media/customer/1-20190110120026324000.jpeg
  11. BIN
      uis/media/customer/7-20190110102942505000.jpeg
  12. BIN
      uis/media/customer/7-20190110103334714000.jpeg
  13. BIN
      uis/media/customer/7-20190110103353432000.jpeg
  14. BIN
      uis/media/customer/7-20190110103442732000.jpeg
  15. BIN
      uis/media/customer/7-20190110104808983000.jpeg
  16. BIN
      uis/media/customer/7-20190110111804327000.jpeg
  17. BIN
      uis/media/customer/7-20190110140948686000.jpeg
  18. BIN
      uis/media/customer/8-20190110101805918000.jpeg
  19. BIN
      uis/media/customer/8-20190110141044866000.jpeg
  20. BIN
      uis/media/customer/9-20190110112049829000.jpeg
  21. BIN
      uis/media/customer/9-20190110114914735000.jpeg
  22. BIN
      uis/media/customer/9-20190110114954166000.jpeg
  23. BIN
      uis/media/office_notice/files/4-20190713140845211000.png
  24. BIN
      uis/media/office_notice/files/4-20190713140917615000.zip
  25. 0 0
      uis/media/office_notice/files/4-20190713140945996000.wav
  26. BIN
      uis/media/office_notice/files/4-20190713141009401000.pdf
  27. BIN
      uis/media/purchase_order/invoice/15-20190622101902920000.png
  28. BIN
      uis/media/purchase_order/invoice/15-20190709105008276000.png
  29. BIN
      uis/media/purchase_order/invoice/20190424134614.png
  30. BIN
      uis/media/purchase_order/invoice/202101071033.png
  31. 1 1
      uis/views/material/deliver_material_edit.html
  32. 1 1
      uis/views/order/goods_deliver_edit.html

+ 1 - 0
.gitignore

@@ -10,6 +10,7 @@ tmp/*
 uploads/*
 logs/*
 build/*
+media/*
 .idea/workspace.xml
 .idea/misc.xml
 .idea/scj.xml

+ 1 - 1
apps/material/views.py

@@ -1570,4 +1570,4 @@ def stock_log(request):
     if row:
         total = row[0]
 
-    return DataGridJSONResponse(items, total)
+    return DataGridJSONResponse(items, total)

+ 49 - 0
apps/order/views.py

@@ -672,6 +672,8 @@ def deliver_save(request):
                 for item in items_data:
                     item['main'] = serializer.id
                     item['product_base'] = Goods.getByBaseId(item['product_base']).id
+                    if not item['warehouse_stockrecord']:
+                        2 # todo 不选入库单号,自动选择入库单
                     detail_serializer = GoodsDeliverDetailSerializer.factory(request.user, data=item)
                     detail_serializer.validSave()
             serializer.update_total()
@@ -682,6 +684,53 @@ def deliver_save(request):
         return JSONError(u'保存失败!')
     return JSONResponse(serializer.id)
 
+@csrf_exempt
+@permission_required('order.add_goods_deliver')
+def deliver_save_mult(request):
+    # 销售订单,批量转出库
+    from apps.warehouse.models import WarehouseStockRecord
+    try:
+        with transaction.atomic():
+            order_details = SaleOrderDetail.objects.filter().exclude(id=1654)
+            print 2222222,order_details.count()
+            for order_detail in order_details:
+                main_data = {'customer': order_detail.main.customer.id,
+                              'agent_user': 1,
+                              # 'customer_text': '{}-{}'.format(order_detail.main.customer.name,order_detail.main.customer.mobile),
+                              'notes': '',
+                              'sale_order_no': order_detail.main.no,
+                              'sale_order': order_detail.main.id,
+                              'warehouse': 16
+                              }
+                # print 1111111111,main_data
+                serializer = GoodsDeliverSerializer.factory(request.user, main_data)
+                if serializer.instance and serializer.instance.status == settings.PASS:
+                    raise CustomError(u'该出库单已审核,禁止修改!')
+                serializer = serializer.validSave()
+                # print 222222,serializer.id
+                GoodsDeliverDetail.objects.filter(main=serializer).delete()
+                warehouse_stockrecord = WarehouseStockRecord.objects.filter(product=order_detail.goods.product_base, warehouse_id=16).first()
+                # print 3333333333, warehouse_stockrecord.id
+                items_data = {
+                                'count': Formater.formatCountShow(order_detail.count),
+                              'warehouse_stockrecord': warehouse_stockrecord.id,
+                              'total_cost': Formater.formatAmountShow(warehouse_stockrecord.entry_price * order_detail.count),
+                              'price': Formater.formatPriceShow(order_detail.price),
+                              'product_base': order_detail.goods.id,
+                              'notes': u'',
+                              'main': serializer.id,
+                              }
+                # print 444444444, items_data
+                detail_serializer = GoodsDeliverDetailSerializer.factory(request.user, data=items_data)
+                detail_serializer.validSave()
+                serializer.update_total()
+    except CustomError, e:
+        return JSONError(e.get_error_msg())
+    except Exception, e:
+        traceback.print_exc()
+        return JSONError(u'保存失败!')
+    return JSONResponse(serializer.id)
+
 
 @csrf_exempt
 @permission_required('order.delete_goods_deliver')

+ 1 - 1
apps/purchase/models.py

@@ -528,7 +528,7 @@ class GodownEntry(models.Model):
     status = models.PositiveSmallIntegerField(choices=settings.CHECK_STATUS_CHOICES, default=settings.DEFAULT, verbose_name=u"审核状态")
     check_user = models.ForeignKey(User, related_name='godown_entry_ref_check_user', verbose_name=u"审核人", on_delete=models.PROTECT, blank=True, null=True)
     check_time = models.DateTimeField(verbose_name=u"审核时间", blank=True, null=True)
-    notes = models.CharField(max_length=200, verbose_name=u"备注", blank=True, null=True)
+    notes = models.TextField(verbose_name=u"备注", blank=True, null=True)
     warehouse = models.ForeignKey(Warehouse, verbose_name=u'仓别', on_delete=models.PROTECT)
     product_type = models.PositiveSmallIntegerField(choices=PRODUCT_CHOICES, verbose_name=u"产品类型")
     total_return_count = models.BigIntegerField(verbose_name=u"退货数量合计", default=0)

+ 1 - 1
apps/purchase/resources.py

@@ -416,4 +416,4 @@ class GodownEntryImporter(ExcelImporter):
         u'单价': (True, ExcelImporter.formatFloatGeZ),
         u'发票金额': (True, ExcelImporter.formatFloatGeZ),
         u'备注': (False, ExcelImporter.formatUnicode),
-    }
+    }

+ 149 - 1
apps/purchase/views.py

@@ -1909,9 +1909,31 @@ def godownentry_import(request):
         importer = GodownEntryImporter()
         excel_rows = importer.getExcelData(file)
         with transaction.atomic():
-
+            godownentry_process = Config.getValue('godownentry_process')
             serializer = GodownEntrySerializer.factory(request.user, main_data)
             serializer = serializer.validSave()
+
+            # 简易流程:添加入库单,同时生成合同,自动审核合同。
+            if main_data.has_key('purchase_order') and main_data['purchase_order']:
+                # 合同中点到货,会执行此接口。此时无论那种流程,都不应该在创建合同。
+                godownentry_process = ''
+            pb = None
+            if godownentry_process == '1':
+                order_data = {
+                    'supplier': serializer.supplier.id,
+                    'status': PurchaseOrder.PASS,
+                    'arrval': PurchaseOrder.ALL_ARRVAL,
+                    'check_time': timezone.now(),
+                    'check_user': request.user.id,
+                    'count': 0,
+                    'amount': 0,
+                }
+                pb = PurchaseOrderSerializer.factory(request.user, order_data)
+                pb = pb.validSave()
+                pb.no = pb.order_no
+                serializer.purchase_order = pb
+                serializer.save()
+
             for excel_row in excel_rows:
                 try:
                     row = importer.validRow(excel_row)
@@ -1933,12 +1955,138 @@ def godownentry_import(request):
 
                     detail_serializer = GodownEntryDetailSerializer.factory(request.user, items_data)
                     detail_serializer.validSave()
+
+                    if godownentry_process == '1':
+                        detail = detail_serializer.instance
+                        dict = {
+                            'main': pb.id,
+                            'product': detail.product_base.id,
+                            'count': items_data['count'],
+                            'price': items_data['price'],
+                            'amount': detail.amount,
+                            'is_arrval': True,
+                        }
+                        pbd = PurchaseOrderDetailSerializer.factory(request.user, dict)
+                        pbd.validSave()
+                        pbd.instance.arrval_count = detail.count
+                        pbd.instance.save()
+
                 except CustomError, e:
                     raise CustomError(u'第%d行:%s' % (line, e.get_error_msg()))
                 except Exception, e:
                     raise CustomError(u'第%d行:%s' % (line, unicode(e)))
                 line += 1
             serializer.update_total()
+            if pb:
+                pb.count = serializer.total_count
+                pb.amount = serializer.total_amount
+                pb.apply_amount = serializer.total_amount
+                pb.save()
+            BizLog.objects.addnew(request.user, BizLog.IMPORT, u"导入入库单[%s],id=%d" % (serializer.no, serializer.id))
+    except CustomError, e:
+        return JSONError(e.get_error_msg())
+    except Exception, e:
+        traceback.print_exc()
+        return JSONError(u'导入失败!')
+    return JSONResponse()
+
+@csrf_exempt
+@token_required
+def godownentry_import_mult(request):
+    # 原料、耗材批量导入,导入模板包含供应商
+    file = request.FILES.get('excel_file')
+    main_data = json.loads(request.POST.get('main_data'))
+    print 11111111, main_data
+    try:
+        type = GodownEntry.getValidType(request.GET.get('type'))
+        main_data['product_type'] = type
+        valid_permission(request.user, GodownEntry.getPermissionByType(type, 'import'))
+        line = 2
+        importer = GodownEntryImporter()
+        excel_rows = importer.getExcelData(file)
+        with transaction.atomic():
+            godownentry_process = Config.getValue('godownentry_process')
+            for excel_row in excel_rows:
+                try:
+                    row = importer.validRow(excel_row)
+                    supplier = Supplier.objects.filter(name=row[u'供应商'], type=main_data['product_type']).first()
+                    if not supplier:
+                        raise CustomError(u'第{}行供应商{}不存在'.format(line, row[u'供应商'], ))
+                    main_data['supplier'] = supplier.id
+                    main_data['notes'] = row[u'入库备注']
+                    serializer = GodownEntrySerializer.factory(request.user, main_data)
+                    serializer = serializer.validSave()
+
+                    # 简易流程:添加入库单,同时生成合同,自动审核合同。
+                    if main_data.has_key('purchase_order') and main_data['purchase_order']:
+                        # 合同中点到货,会执行此接口。此时无论那种流程,都不应该在创建合同。
+                        godownentry_process = ''
+                    pb = None
+                    if godownentry_process == '1':
+                        order_data = {
+                            'supplier': serializer.supplier.id,
+                            'status': PurchaseOrder.PASS,
+                            'arrval': PurchaseOrder.ALL_ARRVAL,
+                            'check_time': timezone.now(),
+                            'check_user': request.user.id,
+                            'count': 0,
+                            'amount': 0,
+                        }
+                        pb = PurchaseOrderSerializer.factory(request.user, order_data)
+                        pb = pb.validSave()
+                        pb.no = pb.order_no
+                        serializer.purchase_order = pb
+                        serializer.save()
+
+
+                    model = row[u'产品代码']
+                    product_base = ProductBase.objects.filter(model=model, type=type)
+                    if product_base.count() == 0:
+                        raise CustomError(u'产品代码不存在')
+                    elif product_base.count() > 1:
+                        raise CustomError(u'产品代码重复,前往基础数据设置修改')
+                    else:
+                        product_base = product_base.first()
+                    items_data = {}
+                    items_data['product_base'] = product_base.id
+                    items_data['main'] = serializer.id
+                    items_data['price'] = row[u'单价']
+                    items_data['count'] = row[u'数量']
+                    items_data['invoice_amount'] = row[u'发票金额']
+                    items_data['notes'] = row[u'备注']
+
+                    detail_serializer = GodownEntryDetailSerializer.factory(request.user, items_data)
+                    detail_serializer.validSave()
+
+                    if godownentry_process == '1':
+                        detail = detail_serializer.instance
+                        dict = {
+                            'main': pb.id,
+                            'product': detail.product_base.id,
+                            'count': items_data['count'],
+                            'price': items_data['price'],
+                            'amount': detail.amount,
+                            'is_arrval': True,
+                        }
+                        pbd = PurchaseOrderDetailSerializer.factory(request.user, dict)
+                        pbd.validSave()
+                        pbd.instance.arrval_count = detail.count
+                        pbd.instance.save()
+                    serializer.update_total()
+                    if pb:
+                        pb.count = serializer.total_count
+                        pb.amount = serializer.total_amount
+                        pb.apply_amount = serializer.total_amount
+                        pb.save()
+                except CustomError, e:
+                    raise CustomError(u'第%d行:%s' % (line, e.get_error_msg()))
+                except Exception, e:
+                    traceback.print_exc()
+                    raise CustomError(u'第%d行:%s' % (line, unicode(e)))
+                line += 1
+                if line % 100 == 0:
+                    print line
+            print '000000llkkkkkk'
             BizLog.objects.addnew(request.user, BizLog.IMPORT, u"导入入库单[%s],id=%d" % (serializer.no, serializer.id))
     except CustomError, e:
         return JSONError(e.get_error_msg())

BIN
uis/media/customer/1-20181017164122424000.png


BIN
uis/media/customer/1-20181017164122747000.png


BIN
uis/media/customer/1-20190110101354931000.jpeg


BIN
uis/media/customer/1-20190110120026324000.jpeg


BIN
uis/media/customer/7-20190110102942505000.jpeg


BIN
uis/media/customer/7-20190110103334714000.jpeg


BIN
uis/media/customer/7-20190110103353432000.jpeg


BIN
uis/media/customer/7-20190110103442732000.jpeg


BIN
uis/media/customer/7-20190110104808983000.jpeg


BIN
uis/media/customer/7-20190110111804327000.jpeg


BIN
uis/media/customer/7-20190110140948686000.jpeg


BIN
uis/media/customer/8-20190110101805918000.jpeg


BIN
uis/media/customer/8-20190110141044866000.jpeg


BIN
uis/media/customer/9-20190110112049829000.jpeg


BIN
uis/media/customer/9-20190110114914735000.jpeg


BIN
uis/media/customer/9-20190110114954166000.jpeg


BIN
uis/media/office_notice/files/4-20190713140845211000.png


BIN
uis/media/office_notice/files/4-20190713140917615000.zip


+ 0 - 0
uis/media/office_notice/files/4-20190713140945996000.wav


BIN
uis/media/office_notice/files/4-20190713141009401000.pdf


BIN
uis/media/purchase_order/invoice/15-20190622101902920000.png


BIN
uis/media/purchase_order/invoice/15-20190709105008276000.png


BIN
uis/media/purchase_order/invoice/20190424134614.png


BIN
uis/media/purchase_order/invoice/202101071033.png


+ 1 - 1
uis/views/material/deliver_material_edit.html

@@ -368,7 +368,7 @@ layui.config({
                 model: rows[n].model,
                 unit: rows[n].unit,
                 warehouse_stockrecord: warehouse_stockrecord,
-                record_data: rows[n].record_data,
+                //record_data: rows[n].record_data,
                 entry_no: warehouse_stockrecord,
                 count: count,
                 total_cost: total_cost,

+ 1 - 1
uis/views/order/goods_deliver_edit.html

@@ -719,4 +719,4 @@
 
 </script>
 </body>
-</html>
+</html>