Пример #1
0
    def do_action(self, queryset):
        if not self.has_change_permission():
            raise PermissionDenied
        n = queryset.count()
        if n:
            if self.modify_models_batch:
                self.log('change',
                         '批量审核了 %(count)d %(items)s.' % {"count": n, "items": model_ngettext(self.opts, n)})
                queryset.update(status=2)
            else:
                for obj in queryset:
                    _total_si_quantity = obj.va_stockout.vallotsiinfo_set.all().filter(order_status__in=[1, 2, 3]).aggregate(sum_quantity=Sum('quantity'))['sum_quantity']
                    if not _total_si_quantity:
                        _total_si_quantity = 0
                    if _total_si_quantity > obj.va_stockout.quantity:
                        self.message_user("%s 虚拟入库确实超过了对应出库数,请查看" % obj.order_id, "error")
                        obj.mistake_tag = 1
                        obj.save()
                        n -= 1
                        continue
                    else:
                        _total_si_complete_quantity = obj.va_stockout.vallotsiinfo_set.all().filter(order_status__in=[2, 3]).aggregate(sum_quantity=Sum('quantity'))['sum_quantity']
                        if not _total_si_complete_quantity:
                            _total_si_complete_quantity = 0
                        obj.va_stockout.undistributed = obj.va_stockout.quantity - _total_si_complete_quantity
                        obj.va_stockout.save()

            self.message_user("成功提交 %(count)d %(items)s." % {"count": n, "items": model_ngettext(self.opts, n)},
                              'success')
        return None
Пример #2
0
 def do_action(self, queryset):
     if not self.has_change_permission():
         raise PermissionDenied
     n = queryset.count()
     if n:
         if self.modify_models_batch:
             self.log(
                 'change', '批量审核了 %(count)d %(items)s.' % {
                     "count": n,
                     "items": model_ngettext(self.opts, n)
                 })
             queryset.update(status=2)
         else:
             des_department = CentreInfo.objects.filter(name='物流部')[0]
             i = 0
             for obj in queryset:
                 self.log('change', '', obj)
                 if i == 0:
                     des_department = obj.des_department
                     obj.order_category = obj.des_department.category
                     i += 1
                     continue
                 else:
                     obj.des_department = des_department
                     obj.order_category = obj.des_department.category
                     i += 1
                 obj.save()
         self.message_user(
             "成功提交 %(count)d %(items)s." % {
                 "count": n,
                 "items": model_ngettext(self.opts, n)
             }, 'success')
     return None
Пример #3
0
    def do_action(self, queryset):
        if not self.has_change_permission():
            raise PermissionDenied
        n = queryset.count()
        if n:
            if self.modify_models_batch:
                self.log(
                    'change', '批量审核了 %(count)d %(items)s.' % {
                        "count": n,
                        "items": model_ngettext(self.opts, n)
                    })
                queryset.update(status=2)
            else:
                for obj in queryset:
                    self.log('change', '', obj)
                    if obj.warehouse.undistributed >= obj.quantity:
                        repeat_stock = DeptStockInfo.objects.filter(
                            goods_name=obj.goods_name,
                            warehouse=obj.warehouse.warehouse,
                            vwarehouse=obj.vwarehouse)
                        if repeat_stock:
                            dp_stock = repeat_stock[0]
                            dp_stock.quantity += obj.quantity
                            dp_stock.save()
                        else:
                            dp_stock = DeptStockInfo()
                            attrs = ['goods_name', 'vwarehouse', 'quantity']
                            for attr in attrs:
                                value = getattr(obj, attr, None)
                                setattr(dp_stock, attr, value)
                            dp_stock.warehouse = obj.warehouse.warehouse
                            dp_stock.goods_id = obj.goods_name.goods_id
                            dp_stock.creator = self.request.user.username
                            dp_stock.save()
                        stock_order = StockInfo.objects.filter(
                            id=obj.warehouse.id)[0]
                        stock_order.undistributed = stock_order.undistributed - obj.quantity
                        stock_order.save()

                    else:
                        self.message_user(
                            "%s 可分配库存不足,无法分配" % obj.distribution_order_id,
                            "error")
                        n -= 1
                        obj.error_tag = 1
                        obj.save()
                        continue
                    obj.order_status = 2
                    obj.save()
                    # 设置入库单的入库数量。
                    self.message_user("%s 递交完毕" % obj.distribution_order_id,
                                      "info")

            self.message_user(
                "成功提交 %(count)d %(items)s." % {
                    "count": n,
                    "items": model_ngettext(self.opts, n)
                }, 'success')

        return None
Пример #4
0
    def do_action(self, queryset):
        if not self.has_change_permission():
            raise PermissionDenied
        n = queryset.count()
        if n:
            if self.modify_models_batch:
                self.log('change',
                         '批量审核了 %(count)d %(items)s.' % {"count": n, "items": model_ngettext(self.opts, n)})
                queryset.update(status=2)
            else:
                check_uq = 0
                for obj in queryset:
                    self.log('change', '', obj)
                    if check_uq:
                        obj.va_stockout.undistributed = check_uq
                    _q_dept_stock = DeptStockInfo.objects.filter(centre=obj.centre, goods_name=obj.goods_name,
                                                                 warehouse=obj.warehouse, vwarehouse=obj.vwarehouse)

                    if _q_dept_stock.exists():
                        dept_stock = _q_dept_stock[0]
                        dept_stock.quantity += obj.quantity
                    else:
                        dept_stock = DeptStockInfo()
                        fields = ['centre', 'goods_name', 'goods_id', 'warehouse', 'vwarehouse', 'quantity']
                        for key in fields:
                            value = getattr(obj, key, None)
                            setattr(dept_stock, key, value)
                    check_uq = obj.va_stockout.undistributed - obj.quantity
                    if check_uq < 0:
                        self.message_user("%s 虚拟入库超过了对应出库数" % obj.order_id, "error")
                        obj.mistake_tag = 1
                        obj.save()
                        n -= 1
                        continue
                    else:
                        try:
                            obj.va_stockout.undistributed = check_uq
                            obj.va_stockout.save()
                        except Exception as e:
                            self.message_user("%s 更新对应虚拟入库出错, %s" % (obj.order_id, e), "error")
                            obj.mistake_tag = 2
                            obj.save()
                            n -= 1
                            continue
                    try:
                        dept_stock.save()
                    except Exception as e:
                        self.message_user("%s 单据保存出错, %s" % (obj.order_id, e), "error")
                        obj.mistake_tag = 3
                        obj.save()
                        n -= 1
                        continue
                    obj.order_status = 2
                    obj.mistake_tag = 0
                    obj.save()
            self.message_user("成功提交 %(count)d %(items)s." % {"count": n, "items": model_ngettext(self.opts, n)},
                              'success')
        return None
Пример #5
0
    def do_action(self, queryset):
        if not self.has_change_permission():
            raise PermissionDenied
        n = queryset.count()
        if n:
            if self.modify_models_batch:
                self.log(
                    'change', '批量审核了 %(count)d %(items)s.' % {
                        "count": n,
                        "items": model_ngettext(self.opts, n)
                    })
                queryset.update(status=2)
            else:
                i = 0
                for obj in queryset:
                    i += 1
                    self.log('change', '', obj)
                    order_so = VASOCheck()

                    prefix = "AO"
                    serial_number = str(datetime.datetime.now()).replace(
                        "-", "").replace(" ", "").replace(":",
                                                          "").replace(".",
                                                                      "")[:12]
                    suffix = 1000 + i
                    order_id = prefix + str(serial_number) + str(suffix)
                    order_so.order_id = order_id

                    order_so.creator = self.request.user.username
                    order_so.goods_name = obj.goods_name
                    order_so.goods_id = obj.goods_id
                    order_so.centre = obj.centre
                    order_so.warehouse = obj.warehouse
                    order_so.vwarehouse = obj.vwarehouse
                    order_so.undistributed = obj.quantity
                    order_so.quantity = obj.quantity
                    order_so.dept_stock = obj
                    try:
                        order_so.save()
                    except Exception as e:
                        self.message_user(
                            "%s 创建虚拟出库单出错, %s" % (obj.order_id, e), "error")
                        continue

            self.message_user(
                "成功生成 %(count)d %(items)s." % {
                    "count": n,
                    "items": model_ngettext(self.opts, n)
                }, 'success')

        return None
Пример #6
0
 def delete_models(self, queryset):
     n = queryset.count()
     if n:
         if self.delete_models_batch:
             self.log('delete', _('Batch delete %(count)d %(items)s.') % {
                      "count": n, "items": model_ngettext(self.opts, n)})
             queryset.delete()
         else:
             for obj in queryset:
                 self.log('delete', '', obj)
                 obj.delete()
         self.message_user(_("Successfully deleted %(count)d %(items)s.") % {
             "count": n, "items": model_ngettext(self.opts, n)
         }, 'success')
Пример #7
0
 def delete_models(self, queryset):
     n = queryset.count()
     if n:
         queryset.delete()
         self.message_user(_("Successfully deleted %(count)d %(items)s.") % {
             "count": n, "items": model_ngettext(self.opts, n)
         }, 'success')
Пример #8
0
 def delete_models(self, queryset):
     n = queryset.count()
     print 22222
     if n:
         if self.delete_models_batch:
             for data in queryset:
                 for field in data._meta.fields:
                     s = getattr(data,field.name)
                     if(os.path.isfile('./media/'+str(s))==True):
                         if(str(s).find("/quanjing/")==-1):
                             os.remove('./media/' + str(s))
                         else:
                             s = str(s).split("/")
                             str1 = s[0:3]
                             str1 = '/'.join(str1)
                             shutil.rmtree('./media/'+str1)
                             os.remove('./media/'+str1+'.zip')
             queryset.delete()
         else:
             for obj in queryset:
                 for field in obj._meta.fields:
                     s = getattr(obj, field.name)
                     if (os.path.isfile('./media/' + str(s)) == True):
                         if (str(s).find("/quanjing/") == -1):
                             os.remove('./media/' + str(s))
                         else:
                             s = str(s).split("/")
                             str1 = s[0:3]
                             str1 = '/'.join(str1)
                             shutil.rmtree('./media/' + str1)
                             os.remove('./media/' + str1 + '.zip')
                 obj.delete()
         self.message_user(_("Successfully deleted %(count)d %(items)s.") % {
             "count": n, "items": model_ngettext(self.opts, n)
         }, 'success')
Пример #9
0
 def delete_models(self, queryset):
     n = queryset.count()
     if n:
         if self.delete_models_batch:
             for obj in queryset:
                 # print (type(obj) == MnTTa)
                 # if obj.mno and "," in obj.mno:
                 #     type = 2
                 # else:
                 #     type = 1
                 # Jianfenchi.objects.create(djf_issueno=obj.issueno,
                 #                           djf_issueid=obj.pk,
                 #                           djf_wyno=obj.mno,
                 #                           djf_issuebt=obj.biaoti,
                 #                           djf_wyname=obj.mname,
                 #                           djf_type=type,
                 #                           djf_time=obj.submit_time)
                 obj.delete()
         else:
             for obj in queryset:
                 obj.delete()
         self.message_user(
             _("Successfully deleted %(count)d %(items)s.") % {
                 "count": n,
                 "items": model_ngettext(self.opts, n)
             }, 'success')
Пример #10
0
 def delete_models(self, queryset):
     n = queryset.count()
     if n:
         for obj in queryset:
             if obj.order_status == 3:
                 obj.order_status -= 3
                 obj.save()
                 self.message_user("%s 取消成功" % obj.express_id, "success")
             elif obj.order_status in [1, 2, 4, 5]:
                 if obj.wo_category == 1 and obj.order_status == 4:
                     obj.order_status -= 2
                     obj.save()
                     self.message_user("%s 驳回上一级成功" % obj.express_id,
                                       "success")
                 else:
                     obj.order_status -= 1
                     obj.save()
                     self.message_user("%s 取消成功" % obj.express_id,
                                       "success")
         self.message_user(
             "成功驳回 %(count)d %(items)s." % {
                 "count": n,
                 "items": model_ngettext(self.opts, n)
             }, 'success')
     return None
Пример #11
0
 def delete_models(self, queryset):
     n = queryset.count()
     if n:
         queryset.delete()
         self.message_user(_("Successfully deleted %(count)d %(items)s.") % {
             "count": n, "items": model_ngettext(self.opts, n)
         }, 'success')
Пример #12
0
 def reject_models(self, queryset):
     n = queryset.count()
     if n:
         for obj in queryset:
             if isinstance(obj, VAllotSOInfo):
                 if obj.order_status == 1:
                     obj.order_status -= 1
                     obj.save()
                     self.message_user("%s 取消成功" % obj.order_id, "success")
                     continue
                 if obj.order_status == 2 and obj.undistributed == obj.quantity:
                     obj.order_status -= 1
                     obj.save()
                     self.message_user("%s 驳回上一级成功" % obj.order_id, "success")
                     continue
                 else:
                     n -= 1
                     self.message_user("%s 单据状态错误,请检查,驳回出错。" % obj.order_id, "error")
                     continue
             elif isinstance(obj, VAllotSIInfo):
                 if obj.order_status > 0:
                     obj.order_status -= 1
                     obj.save()
                     if obj.order_status == 0:
                         self.message_user("%s 取消成功" % obj.order_id, "success")
                     else:
                         self.message_user("%s 驳回上一级成功" % obj.order_id, "success")
                 else:
                     n -= 1
                     self.message_user("%s 单据状态错误,请检查,驳回出错。" % obj.order_id, "error")
         self.message_user("成功驳回 %(count)d %(items)s." % {"count": n, "items": model_ngettext(self.opts, n)},
                           'success')
     return None
Пример #13
0
 def do_action(self, queryset):
     n = queryset.count()
     if n:
         queryset.update(is_del=1)
         self.message_user(
             _("Successfully deleted %(count)d %(items)s.") % {
                 "count": n,
                 "items": model_ngettext(self.opts, n)
             }, 'success')
Пример #14
0
 def delete_models(self, queryset):
     u'''orm删除对象'''
     n = queryset.count()
     if n:
         self.do_deletes(queryset)
         self.message_user(
             _("Successfully deleted %(count)d %(items)s.") % {
                 "count": n,
                 "items": model_ngettext(self.opts, n)
             }, 'success')
Пример #15
0
    def do_action(self, queryset):
        if not self.has_change_permission():
            raise PermissionDenied
        n = queryset.count()
        if n:
            if self.modify_models_batch:
                self.log('change',
                         '批量审核了 %(count)d %(items)s.' % {"count": n, "items": model_ngettext(self.opts, n)})
                queryset.update(order_status=3)
            else:
                for obj in queryset:
                    self.log('change', '', obj)

                obj.order_status = 2
                obj.mistake_tag = 0
                obj.save()
            self.message_user("成功提交 %(count)d %(items)s." % {"count": n, "items": model_ngettext(self.opts, n)},
                              'success')
        return None
Пример #16
0
 def delete_models(self, queryset):
     u'''orm删除对象'''
     n = queryset.count()
     if n:
         if self.log:
             for obj in queryset:
                 self.log_deletion(self.request, obj)
         queryset.delete()
         self.message_user(
             _("Successfully deleted %(count)d %(items)s.") % {
                 "count": n,
                 "items": model_ngettext(self.opts, n)
             }, 'success')
Пример #17
0
 def delete_models(self, queryset):
     n = queryset.count()
     if n:
         if self.delete_models_batch:
             self.log('delete', _('Batch delete %(count)d %(items)s.') % {"count": n, "items": model_ngettext(self.opts, n)})
             queryset.delete()
         else:
             for obj in queryset:
                 self.log('delete', '', obj)
                 obj.delete()
         self.message_user(_("Successfully deleted %(count)d %(items)s.") % {
             "count": n, "items": model_ngettext(self.opts, n)
         }, 'success')
Пример #18
0
 def reject_models(self, queryset):
     n = queryset.count()
     if n:
         for obj in queryset:
             if obj.order_status == 1:
                 obj.order_status -= 1
                 obj.save()
                 if obj.order_status == 0:
                     self.message_user("%s 取消成功" % obj.express_id, "success")
                 else:
                     self.message_user("%s 驳回上一级成功" % obj.express_id, "success")
             else:
                 n -= 1
                 self.message_user("%s 部门状态错误,请检查,取消出错。" % obj.express_id, "error")
         self.message_user("成功驳回 %(count)d %(items)s." % {"count": n, "items": model_ngettext(self.opts, n)},
                           'success')
     return None
Пример #19
0
    def change_models(self, queryset, cleaned_data):
        n = queryset.count()

        data = {}
        for f in self.opts.fields:
            if not f.editable or isinstance(f, models.AutoField) \
                    or not f.name in cleaned_data:
                continue
            data[f] = cleaned_data[f.name]

        if n:
            for obj in queryset:
                for f, v in data.items():
                    f.save_form_data(obj, v)
                obj.save()
            self.message_user(_("Successfully change %(count)d %(items)s.") % {
                "count": n, "items": model_ngettext(self.opts, n)
            }, 'success')
Пример #20
0
    def change_models(self, queryset, cleaned_data):
        n = queryset.count()

        data = {}
        for f in self.opts.fields:
            if not f.editable or isinstance(f, models.AutoField) \
                    or not f.name in cleaned_data:
                continue
            data[f] = cleaned_data[f.name]

        if n:
            for obj in queryset:
                for f, v in data.items():
                    f.save_form_data(obj, v)
                obj.save()
            self.message_user(_("Successfully change %(count)d %(items)s.") % {
                "count": n, "items": model_ngettext(self.opts, n)
            }, 'success')
Пример #21
0
 def delete_models(self, queryset):
     n = queryset.count()
     if n:
         if self.delete_models_batch:
             queryset.delete()
         else:
             for obj in queryset:
                 obj.delete()
         self.message_user(
             _("Successfully deleted %(count)d %(items)s.") % {"count": n, "items": model_ngettext(self.opts, n)},
             "success",
         )
Пример #22
0
    def do_action(self, queryset):
        if not self.has_change_permission():
            raise PermissionDenied
        n = queryset.count()
        if n:
            if self.modify_models_batch:
                self.log(
                    'change', '批量审核了 %(count)d %(items)s.' % {
                        "count": n,
                        "items": model_ngettext(self.opts, n)
                    })
                queryset.update(status=2)
            else:
                for obj in queryset:
                    self.log('change', '', obj)
                    if not obj.des_department:
                        self.message_user("单号%s没有指定目的部门,不允许递交" % obj.order_id,
                                          "error")
                        n -= 1
                        obj.mistake_tag = 1
                        obj.save()
                        continue
                    _q_repeat_so = StockoutList.objects.filter(
                        order_id=obj.order_id)
                    if _q_repeat_so.exists():
                        self.message_user(
                            "单号%s不要重复点递交,多线程递交会造成程序错乱" % obj.order_id, "error")
                        n -= 1
                        obj.mistake_tag = 1
                        obj.save()
                        continue
                    _q_stock_virtual = DeptStockInfo.objects.filter(
                        department=obj.des_department,
                        warehouse=obj.warehouse,
                        goods_name=obj.goods_name)
                    if _q_stock_virtual.exists():
                        stock_virtual = _q_stock_virtual[0]
                        stock_virtual.quantity = stock_virtual.quantity - obj.quantity
                        if stock_virtual.quantity < 0:
                            self.message_user("单号%s部门存货不足" % obj.order_id,
                                              "error")
                            n -= 1
                            obj.mistake_tag = 2
                            obj.save()
                            continue
                        stocklist = StockoutList()
                        stocklist.order_id = obj.order_id
                        stocklist.creator = self.request.user.username
                        try:
                            stocklist.save()
                        except Exception as e:
                            self.message_user(
                                "单号%s保存历史记录失败,错误:%s" % (obj.order_id, e),
                                "error")
                            n -= 1
                            obj.mistake_tag = 3
                            obj.save()
                            continue
                        try:
                            stock_virtual.save()
                        except Exception as e:
                            self.message_user(
                                "单号%s保存部门仓失败,错误:%s" % (obj.order_id, e),
                                "error")
                            n -= 1
                            obj.mistake_tag = 4
                            obj.save()
                            continue
                        stock = StockInfo.objects.filter(
                            warehouse=obj.warehouse,
                            goods_name=obj.goods_name)[0]
                        if obj.des_department.category == 1:
                            stock.undistributed = stock.undistributed - obj.quantity
                            stock.quantity = stock.quantity - obj.quantity
                        else:
                            stock.quantity = stock.quantity - obj.quantity
                        try:
                            stock.save()
                        except Exception as e:
                            self.message_user(
                                "单号%s保存实仓失败,错误:%s" % (obj.order_id, e),
                                "error")
                            n -= 1
                            obj.mistake_tag = 5
                            obj.save()
                            continue
                        convert_si = CovertSIUnhandle.objects.filter(
                            goods_name=obj.goods_name,
                            warehouse=obj.warehouse).order_by('stockin_date')

                        minuend = obj.quantity
                        for c_si in convert_si:
                            if minuend > c_si.quantity_linking:
                                minuend = minuend - c_si.quantity_linking
                                c_si.quantity_linking = 0
                                stocklist.si_order_id = str(c_si.order_id)
                                stocklist.save()
                                c_si.save()
                            else:
                                c_si.quantity_linking = c_si.quantity_linking - minuend
                                stocklist.si_order_id = '{0}+{1}'.format(
                                    str(stocklist.si_order_id),
                                    str(c_si.order_id))
                                stocklist.si_order_id = stocklist.si_order_id[:
                                                                              300]
                                stocklist.save()
                                c_si.save()
                                break
                    else:
                        self.message_user("单号%s部门没有此货品" % obj.order_id,
                                          "error")
                        n -= 1
                        obj.mistake_tag = 7
                        obj.save()
                        continue

                    obj.order_status = 2
                    obj.mistake_tag = 0
                    obj.save()

            self.message_user(
                "成功提交 %(count)d %(items)s." % {
                    "count": n,
                    "items": model_ngettext(self.opts, n)
                }, 'success')

        return None
Пример #23
0
    def do_action(self, queryset):
        if not self.has_change_permission():
            raise PermissionDenied
        n = queryset.count()
        if n:
            if self.modify_models_batch:
                self.log(
                    'change', '批量审核了 %(count)d %(items)s.' % {
                        "count": n,
                        "items": model_ngettext(self.opts, n)
                    })
                queryset.update(status=2)
            else:
                for obj in queryset:
                    self.log('change', '', obj)
                    if obj.quantity_received == obj.quantity_receivable:
                        current_quantity = obj.purchase_order_id.complete_quantity + obj.quantity_received
                        if obj.purchase_order_id.quantity >= current_quantity:
                            obj.purchase_order_id.complete_quantity = current_quantity
                            obj.purchase_order_id.save()
                        else:
                            obj.mistake_tag = 2
                            n -= 1
                            obj.save()
                            continue
                    else:
                        obj.mistake_tag = 1
                        n -= 1
                        obj.save()
                        continue

                    is_exists = StockInfo.objects.filter(
                        goods_name=obj.goods_name, warehouse=obj.warehouse)
                    if is_exists.exists():
                        stock_exists = is_exists[0]
                        stock_exists.quantity += obj.quantity_received
                        stock_exists.undistributed += obj.quantity_received
                        stock_exists.save()
                        obj.order_status = 2
                        obj.save()
                    else:
                        stock = StockInfo()
                        attrs = ['goods_name', 'goods_id', 'warehouse']
                        for att in attrs:
                            value = getattr(obj, att, None)
                            setattr(stock, att, value)
                        stock.undistributed = obj.quantity_received
                        stock.quantity = obj.quantity_received
                        stock.creator = self.request.user.username
                        try:
                            stock.save()
                        except Exception as e:
                            n -= 1
                            obj.mistake_tag = 3
                            obj.save()
                            continue
                        obj.order_status = 2
                        obj.save()

            self.message_user(
                "成功提交 %(count)d %(items)s." % {
                    "count": n,
                    "items": model_ngettext(self.opts, n)
                }, 'success')

        return None
Пример #24
0
 def delete_models(self, queryset):
     u'''orm删除对象'''
     n = queryset.count()
     if n:
         if self.log:
             for obj in queryset:
                 self.log_deletion(self.request, obj)
         queryset.delete()
         self.message_user(_("Successfully deleted %(count)d %(items)s.") % {"count": n, "items": model_ngettext(self.opts, n) }, 'success')
Пример #25
0
    def do_action(self, queryset):
        if not self.has_change_permission():
            raise PermissionDenied
        n = queryset.count()
        if n:
            if self.modify_models_batch:
                self.log(
                    'change', '批量审核了 %(count)d %(items)s.' % {
                        "count": n,
                        "items": model_ngettext(self.opts, n)
                    })
                queryset.update(status=2)
            else:
                queryset = queryset.filter(mistake_tag__in=[2, 7])
                if queryset.exists():
                    try:

                        goods_quantity = queryset.values(
                            'warehouse', 'goods_name',
                            'department__centre').annotate(sum=Sum('quantity'))
                    except Exception as e:
                        self.message_user("设置错误 %s" % e, "error")
                        return None
                    i = 0
                    for quantity in goods_quantity:
                        i += 1
                        _q_entrepot = WarehouseVirtual.objects.filter(
                            warehouse_name='正品待分仓')
                        if _q_entrepot.exists():
                            entrepot = _q_entrepot[0]
                        else:
                            self.message_user("系统不存在'正品待分仓',请先创建该仓库 ", "error")
                            break
                        _q_stock = DeptStockInfo.objects.filter(
                            vwarehouse=entrepot,
                            warehouse_id=quantity['warehouse'],
                            goods_name=quantity['goods_name'])
                        if _q_stock.exists():
                            _sum_quantity = _q_stock.values(
                                'goods_name').annotate(total=Sum('quantity'))
                            if quantity['sum'] > _sum_quantity[0]['total']:
                                self.message_user(
                                    "可分配库存不足 %s" % quantity['goods_name'],
                                    "error")
                                queryset.filter(
                                    goods_name_id=quantity['goods_name']
                                ).update(mistake_tag=8)
                                n -= 1
                                continue
                            else:
                                goods_quantity = quantity['sum']
                                for stock in _q_stock:
                                    i += 1
                                    so_order = VAllotSOInfo()
                                    so_order.dept_stock = stock
                                    prefix = "AO"
                                    serial_number = str(
                                        datetime.datetime.now()).replace(
                                            "-", "").replace(" ", "").replace(
                                                ":", "").replace(".", "")[:12]
                                    suffix = 1000 + i
                                    order_id = prefix + str(
                                        serial_number) + str(suffix)
                                    so_order.order_id = order_id
                                    so_order.centre = stock.centre
                                    so_order.warehouse = stock.warehouse
                                    so_order.vwarehouse = stock.vwarehouse
                                    so_order.goods_id = stock.goods_id
                                    so_order.goods_name = stock.goods_name
                                    so_order.mistake_tag = 8
                                    so_order.creator = self.request.user.username

                                    if stock.quantity >= goods_quantity:
                                        so_order.quantity = goods_quantity
                                        so_order.undistributed = goods_quantity
                                        so_order.memorandum = {
                                            quantity['department__centre']:
                                            goods_quantity
                                        }
                                        try:
                                            so_order.save()
                                            queryset.filter(
                                                goods_name_id=quantity[
                                                    'goods_name']).update(
                                                        mistake_tag=10)
                                            break
                                        except Exception as e:
                                            self.message_user(
                                                "%s 生成虚拟出库单出错 " % e, "error")
                                            queryset.filter(
                                                goods_name_id=quantity[
                                                    'goods_name']).update(
                                                        mistake_tag=9)
                                            break
                                    else:
                                        so_order.quantity = stock.quantity
                                        so_order.undistributed = stock.quantity
                                        goods_quantity -= stock.quantity
                                        so_order.memorandum = {
                                            quantity['department__centre']:
                                            stock.quantity
                                        }
                                    try:
                                        so_order.save()
                                        queryset.filter(goods_name_id=quantity[
                                            'goods_name']).update(
                                                mistake_tag=10)
                                    except Exception as e:
                                        self.message_user(
                                            "%s 生成虚拟出库单出错 " % e, "error")
                                        queryset.filter(goods_name_id=quantity[
                                            'goods_name']).update(
                                                mistake_tag=9)
                                        break
                        else:
                            self.message_user("货品无足够可分配库存", "error")
                            queryset.filter(
                                goods_name_id=quantity['goods_name']).update(
                                    mistake_tag=8)

                else:
                    self.message_user("只支持部门仓无货情况的错误提示订单", "error")

            self.message_user(
                "成功提交 %(count)d %(items)s." % {
                    "count": n,
                    "items": model_ngettext(self.opts, n)
                }, 'success')

        return None
Пример #26
0
 def delete_models(self, queryset):
     u'''orm删除对象'''
     n = queryset.count()
     if n:
         self.do_deletes(queryset)
         self.message_user(_("Successfully deleted %(count)d %(items)s.") % {"count": n, "items": model_ngettext(self.opts, n) }, 'success')
Пример #27
0
    def do_action(self, queryset):
        if not self.has_change_permission():
            raise PermissionDenied
        n = queryset.count()
        if n:
            if self.modify_models_batch:
                self.log(
                    'change', '批量审核了 %(count)d %(items)s.' % {
                        "count": n,
                        "items": model_ngettext(self.opts, n)
                    })
                queryset.update(status=2)
            else:
                for obj in queryset:
                    self.log('change', '', obj)
                    centre = obj.department.centre
                    _q_vwarehouse = DeptToVW.objects.filter(centre=centre)
                    if _q_vwarehouse.exists():
                        vwarehouse = _q_vwarehouse[0].warehouse
                    else:
                        self.message_user(
                            "单号%s部门没有映射部门仓库,请设置对应仓库" % obj.order_id, "error")
                        n -= 1
                        obj.mistake_tag = 1
                        obj.save()
                        continue

                    _q_stock = StockInfo.objects.filter(
                        warehouse=obj.warehouse, goods_name=obj.goods_name)
                    if _q_stock.exists():
                        current_stock = _q_stock[0]
                        current_stock.quantity = obj.quantity_received + current_stock.quantity
                        check_quantity = CovertSI.objects.filter(
                            order_status=2,
                            warehouse=obj.warehouse,
                            goods_name=obj.goods_name).aggregate(
                                Sum('quantity_linking')
                            )['quantity_linking__sum']
                        if check_quantity is None:
                            check_quantity = 0
                        check_quantity = check_quantity + obj.quantity_received
                        if check_quantity != current_stock.quantity:
                            self.message_user(
                                "单号%s不要重复点递交,多线程递交会造成程序错乱" % obj.order_id,
                                "error")
                            n -= 1
                            obj.save()
                            continue
                        else:
                            if obj.department.category == 1:
                                current_stock.undistributed = current_stock.undistributed + obj.quantity_received
                            try:
                                current_stock.save()
                            except Exception as e:
                                self.message_user(
                                    "单号%s实仓实例保存失败, 错误:%s" % (obj.order_id, e),
                                    "error")
                                n -= 1
                                obj.mistake_tag = 3
                                obj.save()
                                continue
                            _q_stock_virtual = DeptStockInfo.objects.filter(
                                centre=obj.department.centre,
                                goods_name=obj.goods_name,
                                warehouse=obj.warehouse,
                                vwarehouse=vwarehouse)

                            if _q_stock_virtual.exists():
                                stock_virtual = _q_stock_virtual[0]
                                stock_virtual.quantity = stock_virtual.quantity + obj.quantity_received
                                try:
                                    stock_virtual.save()
                                except Exception as e:
                                    self.message_user(
                                        "单号%s部门仓实例保存失败, 错误:%s" %
                                        (obj.order_id, e), "error")
                                    n -= 1
                                    obj.mistake_tag = 4
                                    obj.save()
                                    continue
                            else:
                                stock_virtual = DeptStockInfo()
                                stock_virtual.goods_name = obj.goods_name
                                stock_virtual.goods_id = obj.goods_id
                                stock_virtual.warehouse = obj.warehouse
                                stock_virtual.centre = obj.department.centre
                                stock_virtual.vwarehouse = vwarehouse
                                stock_virtual.quantity = obj.quantity_received

                                try:
                                    stock_virtual.creator = self.request.user.username
                                    stock_virtual.save()
                                except Exception as e:
                                    self.message_user(
                                        "单号%s部门仓实例保存失败, 错误:%s" %
                                        (obj.order_id, e), "error")
                                    n -= 1
                                    obj.mistake_tag = 4
                                    obj.save()
                                    continue
                    else:
                        stock = StockInfo()
                        stock_virtual = DeptStockInfo()

                        fields_list = ['goods_name', 'goods_id', 'warehouse']

                        for k in fields_list:
                            if hasattr(obj, k):
                                setattr(stock, k, getattr(obj,
                                                          k))  # 更新对象属性对应键值
                        for k in fields_list:
                            if hasattr(obj, k):
                                setattr(stock_virtual, k,
                                        getattr(obj, k))  # 更新对象属性对应键值

                        stock.quantity = obj.quantity_received
                        if obj.department.category == 1:
                            stock.undistributed = obj.quantity_received
                        else:
                            stock.undistributed = 0

                        stock_virtual.centre = obj.department.centre
                        stock_virtual.vwarehouse = vwarehouse
                        stock_virtual.quantity = obj.quantity_received
                        try:
                            stock.creator = self.request.user.username
                            stock.save()
                        except Exception as e:
                            self.message_user(
                                "单号%s实仓实例保存失败, 错误:%s" % (obj.order_id, e),
                                "error")
                            n -= 1
                            obj.mistake_tag = 3
                            obj.save()
                            continue
                        try:
                            stock_virtual.creator = self.request.user.username
                            stock_virtual.save()
                        except Exception as e:
                            self.message_user(
                                "单号%s部门仓实例保存失败, 错误:%s" % (obj.order_id, e),
                                "error")
                            n -= 1
                            obj.mistake_tag = 4
                            obj.save()
                            continue

                    obj.order_status = 2
                    obj.quantity_linking = obj.quantity_received
                    obj.mistake_tag = 0
                    obj.save()

            self.message_user(
                "成功提交 %(count)d %(items)s." % {
                    "count": n,
                    "items": model_ngettext(self.opts, n)
                }, 'success')

        return None
Пример #28
0
    def do_action(self, queryset):
        if not self.has_change_permission():
            raise PermissionDenied
        n = queryset.count()
        if n:
            if self.modify_models_batch:
                self.log(
                    'change', '批量审核了 %(count)d %(items)s.' % {
                        "count": n,
                        "items": model_ngettext(self.opts, n)
                    })
                queryset.update(status=2)
            else:
                for obj in queryset:
                    centre = obj.department.centre
                    _q_vwarehouse = DeptToVW.objects.filter(centre=centre)
                    if _q_vwarehouse.exists():
                        vwarehouse = _q_vwarehouse[0].warehouse
                    else:
                        self.message_user(
                            "单号%s部门没有映射部门仓库,请设置对应仓库" % obj.order_id, "error")
                        n -= 1
                        obj.mistake_tag = 1
                        obj.save()
                        continue

                    if obj.mistake_tag == 4:
                        self.log('change', '', obj)

                        _q_stock_virtual = DeptStockInfo.objects.filter(
                            centre=obj.department.centre,
                            goods_name=obj.goods_name,
                            warehouse=obj.warehouse,
                            vwarehouse=vwarehouse)

                        if _q_stock_virtual.exists():
                            stock_virtual = _q_stock_virtual[0]
                            stock_virtual.quantity = stock_virtual.quantity + obj.quantity_received
                            try:
                                stock_virtual.save()
                            except Exception as e:
                                self.message_user(
                                    "单号%s部门仓实例保存失败, 错误:%s" % (obj.order_id, e),
                                    "error")
                                n -= 1
                                obj.mistake_tag = 4
                                obj.save()
                                continue
                        else:
                            stock_virtual = DeptStockInfo()
                            stock_virtual.goods_name = obj.goods_name
                            stock_virtual.goods_id = obj.goods_id
                            stock_virtual.warehouse = obj.warehouse
                            stock_virtual.centre = obj.department.centre
                            stock_virtual.vwarehouse = vwarehouse
                            stock_virtual.quantity = obj.quantity_received

                            try:
                                stock_virtual.creator = self.request.user.username
                                stock_virtual.save()
                            except Exception as e:
                                self.message_user(
                                    "单号%s部门仓实例保存失败, 错误:%s" % (obj.order_id, e),
                                    "error")
                                n -= 1
                                obj.mistake_tag = 4
                                obj.save()
                                continue
                        obj.order_status = 2
                        obj.quantity_linking = obj.quantity_received
                        obj.mistake_tag = 0
                        obj.save()
                    else:
                        self.message_user("只有虚拟库存保存失败才可以修复", "error")
                        n -= 1
                        continue

            self.message_user(
                "成功修复 %(count)d %(items)s." % {
                    "count": n,
                    "items": model_ngettext(self.opts, n)
                }, 'success')

        return None
Пример #29
0
    def post(self, request, *args, **kwargs):
        delivery_ids = request.POST.get('ids', None)
        special_tag = request.POST.get('special_tag', None)
        if special_tag:
            _q_vwarehouse = WarehouseVirtual.objects.filter(
                warehouse_name='正品待分仓')
            if _q_vwarehouse:
                vwarehouse = _q_vwarehouse[0]
                _q_warehouse = DeptToW.objects.all()
                warehouse_list = [
                    warehouse.warehouse for warehouse in _q_warehouse
                ]
                queryset = TransDeptStock.objects.filter(
                    warehouse__in=warehouse_list, vwarehouse=vwarehouse)
                n = queryset.count()
                if n:
                    i = 0
                    for obj in queryset:
                        if obj.quantity == 0:
                            n -= 1
                            continue
                        i += 1
                        self.log('change', '', obj)
                        order_so = VASOCheck()

                        prefix = "AO"
                        serial_number = str(datetime.datetime.now()).replace(
                            "-", "").replace(" ",
                                             "").replace(":",
                                                         "").replace(".",
                                                                     "")[:12]
                        suffix = 1000 + i
                        order_id = prefix + str(serial_number) + str(suffix)
                        order_so.order_id = order_id

                        order_so.creator = self.request.user.username
                        order_so.goods_name = obj.goods_name
                        order_so.goods_id = obj.goods_id
                        order_so.centre = obj.centre
                        order_so.warehouse = obj.warehouse
                        order_so.vwarehouse = obj.vwarehouse
                        order_so.undistributed = obj.quantity
                        order_so.quantity = obj.quantity
                        order_so.dept_stock = obj
                        try:
                            order_so.save()
                        except Exception as e:
                            self.message_user(
                                "%s 创建虚拟出库单出错, %s" % (obj.order_id, e),
                                "error")
                            continue

                self.message_user(
                    "成功生成 %(count)d %(items)s." % {
                        "count": n,
                        "items": model_ngettext(self.opts, n)
                    }, 'success')
            else:
                self.message_user("没有设置正品待分仓", "error")
        if delivery_ids is not None:
            if " " in delivery_ids:
                delivery_ids = delivery_ids.split(" ")
                for i in delivery_ids:
                    if not re.match(r'^.{3,30}$', i):
                        self.message_user(
                            '%s包含错误的货品编号,请检查' % str(delivery_ids), 'error')
                        break

                self.delivery_ids = delivery_ids
                self.queryset()

        return super(TransDeptStockAdmin, self).post(request, *args, **kwargs)
Пример #30
0
    def post(self, request, *args, **kwargs):
        report_dic = {"successful": 0, "discard": 0, "false": 0, "repeated": 0, "error": []}
        ids = request.POST.get('ids', None)
        special_tag = request.POST.get('special_tag', None)
        if special_tag:
            if special_tag == '1':
                _q_warehouse = DeptToW.objects.all()
                warehouse_list = [warehouse.warehouse for warehouse in _q_warehouse]
                queryset = VAllotSOInfo.objects.filter(order_status=2, warehouse__in=warehouse_list)
                n = queryset.count()
                if n:
                    i = 0
                    for obj in queryset:
                        order_si = VAllotSIInfo()
                        i += 1
                        self.log('change', '', obj)
                        prefix = "AI"
                        serial_number = str(datetime.datetime.now()).replace("-", "").replace(" ", "").replace(":",
                                                                                                               "").replace(
                            ".", "")[:12]
                        suffix = 1000 + i
                        order_id = prefix + str(serial_number) + str(suffix)
                        order_si.order_id = order_id
                        _q_centre = DeptToW.objects.filter(warehouse=obj.warehouse)
                        centre_num = _q_centre.count()
                        if _q_centre.exists() and centre_num == 1:
                            des_centre = _q_centre[0].centre
                        else:
                            obj.mistake_tag = 2
                            obj.save()
                            report_dic['error'].append("%s 中心对应实仓出错, %s" % (obj.order_id, e))
                            report_dic['false'] += 1
                            continue
                        _q_vwarehouse = DeptToVW.objects.filter(centre=des_centre)
                        if _q_vwarehouse.exists():
                            des_vwarehouse = _q_vwarehouse[0].warehouse
                        else:
                            obj.mistake_tag = 2
                            obj.save()
                            report_dic['error'].append("%s 部门对应中心仓出错, %s" % (obj.order_id, e))
                            report_dic['false'] += 1
                            continue

                        order_si.warehouse = obj.warehouse
                        order_si.ori_vwarehouse = obj.vwarehouse
                        order_si.ori_centre = obj.centre
                        order_si.centre = des_centre
                        order_si.vwarehouse = des_vwarehouse
                        order_si.quantity = obj.quantity
                        order_si.creator = request.user.username
                        order_si.goods_name = obj.goods_name
                        order_si.goods_id = obj.goods_id
                        order_si.va_stockout = obj
                        try:
                            order_si.save()
                            report_dic['successful'] += 1
                        except Exception as e:
                            report_dic['false'] += 1
                            report_dic['error'].append(e)
                            continue

                    self.message_user("成功生成 %(count)d %(items)s." % {"count": n, "items": model_ngettext(self.opts, n)},
                                      'success')
            elif special_tag == '2':

                so_orders = VASOHandle.objects.filter(is_delete=0, mistake_tag=8)
                i = 0
                if so_orders:

                    for order in so_orders:
                        i += 1
                        si_order = VAllotSIInfo()
                        try:
                            for k, v in eval(order.memorandum).items():
                                si_order.centre_id = k
                                _q_vwarehouse = DeptToVW.objects.filter(centre_id=k, is_delete=0)
                                if _q_vwarehouse:
                                    si_order.vwarehouse = _q_vwarehouse[0].warehouse
                                else:
                                    self.message_user('%s 入库部门仓库出错' % order.order_id, 'error')
                                    order.mistake_tag = 4
                                    order.save()
                                    report_dic['false'] += 1
                                    continue
                                si_order.quantity = v
                        except Exception as e:
                            report_dic['error'].append('%s备注格式不对,单据出错' % str(order.order_id))
                            report_dic['false'] += 1
                            continue
                        prefix = "AI"
                        serial_number = str(datetime.datetime.now()).replace("-", "").replace(" ", "").replace(":",
                                                                                                               "").replace(
                            ".", "")[:12]
                        suffix = 1000 + i
                        order_id = prefix + str(serial_number) + str(suffix)
                        si_order.order_id = order_id
                        si_order.order_category = 2
                        si_order.ori_centre = order.centre
                        si_order.ori_vwarehouse = order.vwarehouse
                        si_order.goods_id = order.goods_id
                        si_order.goods_name = order.goods_name
                        si_order.warehouse = order.warehouse
                        si_order.va_stockout = order
                        try:
                            si_order.creator = request.user.username
                            si_order.save()
                            report_dic['successful'] += 1

                        except Exception as e:
                            order.mistake_tag = 3
                            order.save()
                            report_dic['false'] += 1
                            report_dic['error'].append(e)

        if report_dic:
            self.message_user(report_dic, 'info')
        if ids is not None:
            if " " in ids:
                ids = ids.split(" ")
                for i in ids:
                    if not re.match(r'^.{3,30}$', i):
                        self.message_user('%s包含错误的货品编号,请检查' % str(ids), 'error')
                        break

                self.ids = ids
                self.queryset()

        return super(VASOHandleAdmin, self).post(request, *args, **kwargs)
Пример #31
0
    def do_action(self, queryset):
        if not self.has_change_permission():
            raise PermissionDenied
        n = queryset.count()
        if n:
            if self.modify_models_batch:
                self.log('change',
                         '批量审核了 %(count)d %(items)s.' % {"count": n, "items": model_ngettext(self.opts, n)})
                queryset.update(status=2)
            else:
                for obj in queryset:
                    self.log('change', '', obj)
                    obj.dept_stock.quantity = obj.dept_stock.quantity - obj.quantity
                    if obj.dept_stock.quantity < 0:
                        self.message_user("%s 可调拨数量不足,修正调拨数量" % obj.order_id, "error")
                        obj.mistake_tag = 1
                        obj.save()
                        continue
                    else:
                        try:
                            obj.dept_stock.save()
                        except Exception as e:
                            self.message_user("%s 更新虚拟库存错误, %s" % (obj.order_id, e), "error")
                            obj.mistake_tag = 2
                            obj.save()
                            continue
                    if obj.centre.category == 1:
                        _q_stock = StockInfo.objects.filter(goods_name=obj.goods_name, warehouse=obj.warehouse)
                        if _q_stock.exists():
                            stock = _q_stock[0]
                            stock.undistributed -= obj.quantity
                            if stock.undistributed < 0:
                                self.message_user("%s 实仓可调拨库存数量错误, %s" % (obj.order_id, e), "error")
                                obj.mistake_tag = 4
                                obj.save()
                                continue
                            else:
                                try:
                                    stock.save()
                                except Exception as e:
                                    self.message_user("%s 实仓可调拨保存错误, %s" % (obj.order_id, e), "error")
                                    obj.mistake_tag = 6
                                    obj.save()
                                    continue
                        else:
                            self.message_user("%s 查不到实仓可调拨货品, %s" % (obj.order_id, e), "error")
                            obj.mistake_tag = 5
                            obj.save()
                            continue
                        pass
                    obj.order_status = 2
                    if obj.mistake_tag != 8:
                        obj.mistake_tag = 0
                    try:
                        obj.save()
                    except Exception as e:
                        self.message_user("%s 单据保存出错, %s" % (obj.order_id, e), "error")
                        obj.mistake_tag = 3
                        obj.save()
                        continue

            self.message_user("成功提交 %(count)d %(items)s." % {"count": n, "items": model_ngettext(self.opts, n)},
                              'success')

        return None