|
@@ -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())
|