Example #1
0
    def shelf_award(self):
        """撤销申请"""
        if not is_supplizer() and not is_admin():
            raise AuthorityError()
        form = ShelfFreshManfirstOrder().valid_data()
        fmfaid = form.fmfaid.data
        with db.auto_commit():
            suid = request.user.id if is_supplizer() else None
            apply_query = FreshManFirstApply.query.filter(
                FreshManFirstApply.isdelete == False,
                FreshManFirstApply.FMFAid == fmfaid,
                FreshManFirstApply.FMFAstatus == ApplyStatus.wait_check.value)
            if suid:
                apply_query = apply_query.filter(
                    FreshManFirstApply.SUid == request.user.id, )
            apply = apply_query.first_('申请已处理')

            # 库存处理
            self._re_stock(apply)
            apply.FMFAstatus = ApplyStatus.cancle.value
            db.session.add(apply)
            # 相应的审批流
            Approval.query.filter(Approval.isdelete == False,
                                  Approval.AVcontent == fmfaid).update(
                                      {'AVstatus': ApplyStatus.cancle.value})
        return Success('撤销成功')
Example #2
0
    def shelf_award(self):
        """撤销申请"""
        if not (is_supplizer() or is_admin()):
            raise AuthorityError()
        data = parameter_required(('tlpid', ))
        tlpid = data.get('tlpid')
        if is_supplizer():
            tlp_from = ApplyFrom.supplizer.value
            suid = request.user.id

        else:
            tlp_from = ApplyFrom.platform.value

            suid = None
        with db.auto_commit():
            apply_info = TimeLimitedProduct.query.filter_by(
                TLPid=tlpid, isdelete=False).first_('无此申请记录')

            if apply_info.TLAstatus != ApplyStatus.wait_check.value:
                raise StatusError('只有在审核状态的申请可以撤销')
            if apply_info.SUid != suid:
                raise AuthorityError('仅可撤销自己提交的申请')
            apply_info.TLAstatus = ApplyStatus.cancle.value

            # 获取原商品属性
            # gnap_old = GuessNumAwardProduct.query.filter(GuessNumAwardProduct.GNAAid == apply_info.GNAAid,
            #                                                 GuessNumAwardProduct.isdelete == False).first()
            product = Products.query.filter_by(PRid=apply_info.PRid,
                                               PRfrom=tlp_from,
                                               isdelete=False).first_('商品信息出错')
            # 获取原sku属性
            tls_list = TimeLimitedSku.query.filter(
                TimeLimitedSku.isdelete == False,
                TimeLimitedSku.TLPid == apply_info.TLPid).all()

            # 遍历原sku 将库存退出去
            for sku in tls_list:
                sku_instance = ProductSku.query.filter_by(
                    isdelete=False, PRid=product.PRid,
                    SKUid=sku.SKUid).first_('商品sku信息不存在')
                self._update_stock(int(sku.TLSstock), product, sku_instance)

            # 同时将正在进行的审批流改为取消 todo
            approval_info = Approval.query.filter_by(
                AVcontent=tlpid,
                AVstartid=request.user.id,
                isdelete=False,
                AVstatus=ApplyStatus.wait_check.value).first()
            approval_info.AVstatus = ApplyStatus.cancle.value
            if is_admin():
                BASEADMIN().create_action(AdminActionS.update.value,
                                          'TimeLimitedProduct', tlpid)
        return Success('取消成功', {'tlpid': tlpid})
Example #3
0
 def list_apply(self):
     """查看申请列表"""
     if not is_supplizer() and not is_admin():
         raise AuthorityError()
     form = ListFreshmanFirstOrderApply().valid_data()
     starttime, endtime = form.starttime.data, form.endtime.data
     suid = form.suid.data
     if is_supplizer():
         suid = request.user.id
     adid = form.adid.data
     status = form.status.data
     query = FreshManFirstApply.query.filter(
         FreshManFirstApply.isdelete == False)
     if suid:
         query = query.filter(
             FreshManFirstApply.SUid == suid,
             FreshManFirstApply.FMFAfrom == ApplyFrom.supplizer.value)
     if adid:
         query = query.filter(
             FreshManFirstApply.SUid == adid,
             FreshManFirstApply.FMFAfrom == ApplyFrom.platform.value)
     if status is not None:
         query = query.filter(FreshManFirstApply.FMFAstatus == status)
     applys = query.filter(
         FreshManFirstApply.FMFAstartTime >= starttime,
         FreshManFirstApply.FMFAendTime <= endtime).order_by(
             FreshManFirstApply.createtime.desc()).all_with_page()
     for apply in applys:
         # 状态中文
         apply.fill('FMFAstatus_zh', ApplyStatus(apply.FMFAstatus).zh_value)
         # 商品
         fresh_product = FreshManFirstProduct.query.filter(
             FreshManFirstProduct.isdelete == False,
             FreshManFirstProduct.FMFAid == apply.FMFAid,
         ).first()
         apply.fill('fresh_product', fresh_product)
         # 活动sku
         freshsku = FreshManFirstSku.query.filter(
             FreshManFirstSku.isdelete == False,
             FreshManFirstSku.FMFPid == fresh_product.FMFPid).all()
         fresh_product.fill('sku', freshsku)
         # 申请人
         if apply.FMFAfrom == ApplyFrom.supplizer.value:
             supplizer = Supplizer.query.filter(
                 Supplizer.SUid == apply.SUid).first()
             apply.fill('from_supplizer', supplizer)
         elif apply.FMFAfrom == ApplyFrom.platform.value:
             admin = Admin.query.filter(Admin.ADid == apply.SUid).first()
             admin.hide('ADfirstpwd', 'ADpassword')
             apply.fill('from_admin', admin)
     return Success(data=applys)
Example #4
0
    def set_supplizeraccount(self):
        if not is_supplizer():
            raise AuthorityError

        from flask import request
        from planet.control.CUser import CUser
        data = request.json
        cuser = CUser()
        cardno = data.get('sacardno')
        cardno = re.sub(r'\s', '', str(cardno))
        cuser._CUser__check_card_num(cardno)
        check_res = cuser._verify_cardnum(cardno)  # 检验卡号
        if not check_res.data.get('validated'):
            raise ParamsError('请输入正确的银行卡号')
        checked_res = cuser._verify_cardnum(data.get('sabankaccount'))
        # if not checked_res.data.get('validated'):
        #     raise ParamsError('请输入正确的开票账户银行卡号')
        checked_name = cuser._verify_chinese(data.get('sacardname'))
        if not checked_name or len(checked_name[0]) < 2:
            raise ParamsError('请输入正确的开户人姓名')
        current_app.logger.info('用户输入银行名为:{}'.format(data.get('sabankname')))
        bankname = check_res.data.get('cnbankname')
        try:
            WexinBankCode(bankname)
        except Exception:
            raise ParamsError('系统暂不支持该银行提现,请更换银行后重新保存')
        data['sabankname'] = bankname
        current_app.logger.info('校验后更改银行名为:{}'.format(data.get('sabankname')))

        sa = SupplizerAccount.query.filter(
            SupplizerAccount.SUid == request.user.id,
            SupplizerAccount.isdelete == False).first()
        if sa:
            for key in sa.__dict__:
                if str(key).lower() in data:
                    if re.match(r'^(said|suid)$', str(key).lower()):
                        continue
                    if str(key).lower() == 'sacardno':
                        setattr(sa, key, cardno)
                        continue
                    setattr(sa, key, data.get(str(key).lower()))
        else:
            sa_dict = {}
            for key in SupplizerAccount.__dict__:

                if str(key).lower() in data:
                    if not data.get(str(key).lower()):
                        continue
                    if str(key).lower() == 'suid':
                        continue
                    if str(key).lower() == 'sacardno':
                        sa_dict.setdefault(key, cardno)
                        continue
                    sa_dict.setdefault(key, data.get(str(key).lower()))
            sa_dict.setdefault('SAid', str(uuid.uuid1()))
            sa_dict.setdefault('SUid', request.user.id)
            sa = SupplizerAccount.create(sa_dict)
            db.session.add(sa)

        return Success('设置供应商账户信息成功')
Example #5
0
 def list(self):
     """获取优惠券列表"""
     form = CouponListForm().valid_data()
     itid = form.itid.data
     coupons = Coupon.query.filter(Coupon.isdelete == False)
     usid = suid = adid = None
     if is_supplizer():
         suid = request.user.id
     elif is_admin():
         adid = request.user.id
     elif not is_tourist():
         usid = request.user.id
     if itid:
         coupons = coupons.join(CouponItem,
                                CouponItem.COid == Coupon.COid).filter(
                                    CouponItem.ITid == itid,
                                    CouponItem.isdelete == False)
     if suid:
         coupons = coupons.filter(Coupon.SUid == suid)
     coupons = coupons.order_by(Coupon.createtime.desc(),
                                Coupon.COid).all_with_page()
     for coupon in coupons:
         # 标签
         self._coupon(coupon, usid=usid)
     return Success(data=coupons)
Example #6
0
 def delete(self):
     """删除申请"""
     if is_supplizer():
         usid = request.user.id
         sup = Supplizer.query.filter_by_(SUid=usid).first_('供应商信息错误')
         current_app.logger.info('Supplizer {} delete guess group apply'.format(sup.SUname))
     elif is_admin():
         usid = request.user.id
         admin = Admin.query.filter_by_(ADid=usid).first_('管理员信息错误')
         current_app.logger.info('Admin {} delete guess group apply'.format(admin.ADname))
         sup = None
     else:
         raise AuthorityError()
     data = parameter_required(('gpid',))
     gpid = data.get('gpid')
     with db.auto_commit():
         apply_info = GroupGoodsProduct.query.filter_by(GPid=gpid, isdelete=False).first_('没有该商品记录')
         if sup and apply_info.SUid != sup.SUid:
             raise ParamsError('只能删除自己提交的申请')
         if apply_info.GPstatus not in [ApplyStatus.cancle.value, ApplyStatus.reject.value,
                                        ApplyStatus.shelves.value]:
             raise StatusError('只能删除已下架、已拒绝、已撤销状态下的申请')
         apply_info.isdelete = True
         GroupGoodsSku.query.filter(GroupGoodsSku.GPid == apply_info.GPid).delete_()
         if is_admin():
             BASEADMIN().create_action(AdminActionS.delete.value, 'GroupGoodsProduct', apply_info.GPid)
     return Success('删除成功', {'gpid': gpid})
Example #7
0
    def cancel_apply(self):
        """取消申请"""
        if is_supplizer():
            sup = Supplizer.query.filter_by_(SUid=request.user.id).first_("账号状态错误")
        else:
            raise AuthorityError()
        data = parameter_required(('gpid',))
        with db.auto_commit():
            gp = GroupGoodsProduct.query.filter(GroupGoodsProduct.GPid == data.get('gpid'),
                                                GroupGoodsProduct.isdelete == False,
                                                GroupGoodsProduct.GPstatus == ApplyStatus.wait_check.value
                                                ).first_("只有待审核状态下的申请可以撤销")
            if gp.SUid != sup.SUid:
                raise AuthorityError("只能撤销属于自己的申请")
            gp.update({'GPstatus': ApplyStatus.cancle.value})
            db.session.add(gp)
            # 返回库存
            product = Products.query.filter_by(PRid=gp.PRid, isdelete=False).first_('商品信息出错')
            gps_old = GroupGoodsSku.query.filter(GroupGoodsSku.GPid == gp.GPid,
                                                 GroupGoodsSku.isdelete == False,
                                                 ).all()
            for sku in gps_old:
                sku_instance = ProductSku.query.filter_by(isdelete=False, PRid=product.PRid,
                                                          SKUid=sku.SKUid).first_('商品sku信息不存在')
                super(CGuessGroup, self)._update_stock(int(sku.GSstock), product, sku_instance)

            # 同时取消正在进行的审批流
            Approval.query.filter_by(AVcontent=gp.GPid, AVstartid=sup.SUid,
                                     isdelete=False, AVstatus=ApplyStatus.wait_check.value
                                     ).update({'AVstatus': ApplyStatus.cancle.value})
        return Success('已取消申请', {'gpid': gp.GPid})
Example #8
0
    def get_platform_message(self):
        data = parameter_required()
        filter_args = {PlatformMessage.isdelete == False}
        if common_user():
            filter_args.add(
                PlatformMessage.PMstatus == PlanetMessageStatus.publish.value)
        if is_supplizer():
            filter_args.add(PlatformMessage.PMcreate == request.user.id)

        if data.get('PMstatus', None) is not None:
            filter_args.add(PlatformMessage.PMstatus == data.get('pmstatus'))

        pm_list = PlatformMessage.query.filter(*filter_args).order_by(
            PlatformMessage.createtime.desc()).all_with_page()
        for pm in pm_list:
            self._fill_pm(pm)
            if common_user():
                self._fill_um(pm, request.user.id)
            else:
                um_read_count = UserPlatfromMessage.query.filter(
                    UserPlatfromMessage.isdelete == False,
                    UserPlatfromMessage.PMid == pm.PMid,
                    UserPlatfromMessage.UPMstatus ==
                    UserPlanetMessageStatus.read.value).count()
                pm.fill('pmreadcount', um_read_count)

        return Success(data=pm_list)
 def del_award(self):
     """删除申请"""
     if not is_supplizer() and not is_admin():
         raise AuthorityError()
     form = ShelfFreshManfirstOrder().valid_data()
     fmfaid = form.fmfaid.data
     with db.auto_commit():
         apply_info = FreshManFirstApply.query.filter_by_(FMFAid=fmfaid).first_('申请未找到或已删除')
         if is_supplizer():
             assert apply_info.SUid == request.user.id, '供应商只能删除自己提交的申请'
         if apply_info.FMFAstatus not in [ApplyStatus.cancle.value, ApplyStatus.reject.value]:
             raise StatusError('只能删除已拒绝或已撤销状态下的申请')
         apply_info.isdelete = True
         if is_admin():
             BASEADMIN().create_action(AdminActionS.delete.value, 'FreshManFirstApply', fmfaid)
     return Success('删除成功', {'fmfaid': fmfaid})
 def resubmit_apply(self):
     """重新提交申请"""
     if is_supplizer():
         usid = request.user.id
         sup = self._check_supplizer(usid)
         current_app.logger.info('Supplizer {} resubmit commodity'.format(
             sup.SUname))
         nefrom = ApplyFrom.supplizer.value
     elif is_admin():
         usid = request.user.id
         admin = self._check_admin(usid)
         current_app.logger.info('Admin {} resubmit commodity'.format(
             admin.ADname))
         nefrom = ApplyFrom.platform.value
         sup = None
     else:
         raise AuthorityError()
     data = parameter_required(('tcid', ))
     tcid = data.get('tcid')
     with db.auto_commit():
         commodity = TrialCommodity.query.filter_by_(
             TCid=tcid).first_('无此商品信息')
         if commodity.TCstatus not in [
                 TrialCommodityStatus.cancel.value,
                 TrialCommodityStatus.reject.value
         ]:
             raise StatusError('只有撤销或已下架状态的申请可以重新提交')
         if sup:
             if commodity.CreaterId != usid:
                 raise AuthorityError('仅可重新提交自己上传的商品')
         commodity.TCstatus = TrialCommodityStatus.auditing.value
         # 重新创建一个审批流
     super().create_approval('totrialcommodity', usid, tcid, nefrom)
     return Success('提交成功', {'tcid': tcid})
 def shelves(self):
     """批量下架试用商品"""
     if is_supplizer():
         usid = request.user.id
         sup = self._check_supplizer(usid)
         current_app.logger.info('Supplizer {} shelves commodity'.format(
             sup.SUname))
     elif is_admin():
         usid = request.user.id
         admin = self._check_admin(usid)
         current_app.logger.info('Admin {} shelves commodity'.format(
             admin.ADname))
         sup = None
     else:
         raise AuthorityError()
     data = parameter_required(("tcids", ))
     tcid_list = data.get('tcids')
     for tcid in tcid_list:
         commodity = TrialCommodity.query.filter_by_(
             TCid=tcid).first_('未找到商品信息, tcid参数异常')
         if sup:
             assert commodity.CreaterId == usid, '供应商只能下架自己上传的商品'
         if commodity.TCstatus != TrialCommodityStatus.upper.value:
             raise StatusError('只能下架正在上架状态的商品')
         with db.auto_commit():
             commodity.TCstatus = TrialCommodityStatus.reject.value
     return Success('下架成功', {'tcid': tcid_list})
Example #12
0
 def shelf_award(self):
     """撤销申请"""
     if not (is_supplizer() or is_admin()):
         raise AuthorityError()
     data = parameter_required(('mbaid', ))
     mbaid = data.get('mbaid')
     with db.auto_commit():
         apply_info = MagicBoxApply.query.filter_by_(
             MBAid=mbaid).first_('无此申请记录')
         other_apply_info = MagicBoxApply.query.filter(
             MagicBoxApply.isdelete == False,
             MagicBoxApply.MBAid != mbaid,
             MagicBoxApply.MBAstatus.notin_(
                 [ApplyStatus.cancle.value, ApplyStatus.reject.value]),
             MagicBoxApply.OSid == apply_info.OSid,
         ).first()
         current_app.logger.info("其他的同库存申请 --> {}".format(other_apply_info))
         if apply_info.MBAstatus != ApplyStatus.wait_check.value:
             raise StatusError('只有在审核状态的申请可以撤销')
         if apply_info.SUid != request.user.id:
             raise AuthorityError('仅可撤销自己提交的申请')
         apply_info.MBAstatus = ApplyStatus.cancle.value
         # 是否修改库存
         if not other_apply_info:
             out_stock = OutStock.query.filter(
                 OutStock.isdelete == False,
                 OutStock.OSid == apply_info.OSid).first()
             self._update_stock(out_stock.OSnum, skuid=apply_info.SKUid)
         # 同时将正在进行的审批流改为取消
         approval_info = Approval.query.filter_by_(
             AVcontent=mbaid,
             AVstartid=request.user.id,
             AVstatus=ApplyStatus.wait_check.value).first()
         approval_info.AVstatus = ApplyStatus.cancle.value
     return Success('取消成功', {'mbaid': mbaid})
Example #13
0
 def shelves(self):
     """下架申请"""
     if is_supplizer():
         usid = request.user.id
         sup = Supplizer.query.filter_by_(SUid=usid).first_('供应商信息错误')
         current_app.logger.info(
             'Supplizer {} delete magicbox apply'.format(sup.SUname))
     elif is_admin():
         usid = request.user.id
         admin = Admin.query.filter_by_(ADid=usid).first_('管理员信息错误')
         current_app.logger.info('Admin {} magicbox apply'.format(
             admin.ADname))
         sup = None
     else:
         raise AuthorityError()
     data = parameter_required(('mbaid', ))
     mbaid = data.get('mbaid')
     with db.auto_commit():
         apply_info = MagicBoxApply.query.filter_by_(
             MBAid=mbaid).first_('无此申请记录')
         if sup:
             assert apply_info.SUid == usid, '供应商只能下架自己的申请'
         if apply_info.MBAstatus != ApplyStatus.agree.value:
             raise StatusError('只能下架已通过的申请')
         apply_info.MBAstatus = ApplyStatus.reject.value
     return Success('下架成功', {'mbaid': mbaid})
 def cancel_commodity_apply(self):
     """撤销自己的申请"""
     if is_supplizer():
         usid = request.user.id
         sup = self._check_supplizer(usid)
         current_app.logger.info('Supplizer {} cancel commodity'.format(
             sup.SUname))
     elif is_admin():
         usid = request.user.id
         admin = self._check_admin(usid)
         current_app.logger.info('Admin {} cancel commodity'.format(
             admin.ADname))
     else:
         raise AuthorityError()
     data = parameter_required(('tcid', ))
     tcid = data.get('tcid')
     with db.auto_commit():
         commodity = TrialCommodity.query.filter_by_(
             TCid=tcid).first_('无此商品信息')
         if commodity.TCstatus != TrialCommodityStatus.auditing.value:
             raise StatusError('只有在审核状态的申请可以撤销')
         if commodity.CreaterId != request.user.id:
             raise AuthorityError('仅可撤销自己提交的申请')
         commodity.TCstatus = TrialCommodityStatus.cancel.value
         # 同时将正在进行的审批流改为取消
         approval_info = Approval.query.filter_by_(
             AVcontent=tcid,
             AVstartid=request.user.id,
             AVstatus=ApplyStatus.wait_check.value).first()
         approval_info.AVstatus = ApplyStatus.cancle.value
     return Success('取消成功', {'tcid': tcid})
Example #15
0
    def set_supplizeraccount(self):
        if not is_supplizer():
            raise AuthorityError

        from flask import request
        data = request.json
        # todo 数据校验
        sa = SupplizerAccount.query.filter(
            SupplizerAccount.SUid == request.user.id,
            SupplizerAccount.isdelete == False).first()

        if sa:
            for key in sa.__dict__:
                if str(key).lower() in data:
                    if str(key).lower() == 'suid':
                        continue
                    setattr(sa, key, data.get(str(key).lower()))
        else:
            sa_dict = {}
            for key in SupplizerAccount.__dict__:

                if str(key).lower() in data:
                    if str(key).lower() == 'suid':
                        continue
                    if not data.get(str(key).lower()):
                        continue
                    sa_dict.setdefault(key, data.get(str(key).lower()))
            sa_dict.setdefault('SAid', str(uuid.uuid1()))
            sa_dict.setdefault('SUid', request.user.id)
            sa = SupplizerAccount.create(sa_dict)
            db.session.add(sa)

        return Success('设置供应商账户信息成功')
Example #16
0
 def delete_apply(self):
     """删除申请"""
     if is_supplizer():
         usid = request.user.id
         sup = Supplizer.query.filter_by_(SUid=usid).first_('供应商信息错误')
         current_app.logger.info(
             'Supplizer {} delete magicbox apply'.format(sup.SUname))
     elif is_admin():
         usid = request.user.id
         admin = Admin.query.filter_by_(ADid=usid).first_('管理员信息错误')
         current_app.logger.info('Admin {} magicbox apply'.format(
             admin.ADname))
         sup = None
     else:
         raise AuthorityError()
     data = parameter_required(('mbaid', ))
     mbaid = data.get('mbaid')
     with db.auto_commit():
         apply_info = MagicBoxApply.query.filter_by_(
             MBAid=mbaid).first_('无此申请记录')
         if sup:
             assert apply_info.SUid == usid, '供应商只能删除自己提交的申请'
         if apply_info.MBAstatus not in [
                 ApplyStatus.cancle.value, ApplyStatus.reject.value
         ]:
             raise StatusError('只能删除已拒绝或已撤销状态下的申请')
         apply_info.isdelete = True
     return Success('删除成功', {'mbaid': mbaid})
Example #17
0
    def upload_delivery_file(self):
        """
        订单批量发货,文件上传入口
        :return:
        """
        if is_admin():
            Admin.query.filter_by(ADid=request.user.id,
                                  ADstatus=AdminStatus.normal.value,
                                  isdelete=False).first_('管理员账号错误')
        elif is_supplizer():
            Supplizer.query.filter_by(SUid=request.user.id,
                                      SUstatus=UserStatus.usual.value,
                                      isdelete=False).first_('供应商账号状态错误')
        else:
            raise TokenError('未登录')
        file = request.files.get('file')
        if not file:
            raise ParamsError('未上传文件')
        current_app.logger.info('Start Add Delivery Template {}'.format(
            datetime.now()))
        folder = 'xls'
        # 接收数据保存到服务器
        file_path = self._save_excel(file, folder)

        # 进行订单发货
        nrows = self._order_delivery(file_path)
        if is_admin():
            with db.auto_commit():
                BASEADMIN().create_action(AdminActionS.insert.value, 'file',
                                          file_path)

        current_app.logger.info('End Add Delivery Template {}'.format(
            datetime.now()))
        return Success('批量发货成功, 共发货 {} 个订单'.format(nrows - 1))
Example #18
0
 def download(self):
     if not is_supplizer() and not is_admin():
         raise AuthorityError()
     args = parameter_required(('type', ))
     type = args.get('type')
     try:
         tp = getattr(ExcelTemplateType, type).value
     except Exception:
         raise ParamsError('type 参数错误')
     current_app.logger.info('start download template')
     template_path = os.path.join(current_app.config['BASEDIR'], 'img',
                                  'xls')
     current_app.logger.info('template path {}'.format(template_path))
     if tp:
         current_app.logger.info('is file {}'.format(
             os.path.isfile(
                 os.path.join(template_path, 'deliverytemplate.xlsx'))))
         return send_from_directory(template_path,
                                    'deliverytemplate.xlsx',
                                    as_attachment=True)
     current_app.logger.info('is file {}'.format(
         os.path.isfile(os.path.join(template_path, 'template.xlsx'))))
     return send_from_directory(template_path,
                                'template.xlsx',
                                as_attachment=True)
 def del_commodity(self):
     """删除试用商品"""
     if is_supplizer():
         usid = request.user.id
         sup = self._check_supplizer(usid)
         current_app.logger.info('Supplizer {} delete commodity'.format(
             sup.SUname))
     elif is_admin():
         usid = request.user.id
         admin = self._check_admin(usid)
         current_app.logger.info('Admin {} delete commodity'.format(
             admin.ADname))
         sup = None
     else:
         raise AuthorityError()
     data = parameter_required(("tcid", ))
     tcid = data.get('tcid')
     commodity = TrialCommodity.query.filter_by_(
         TCid=tcid).first_('未找到商品信息, tcid参数异常')
     if sup:
         assert commodity.CreaterId == usid, '供应商只能删除自己上传的商品'
     if commodity.TCstatus not in [
             TrialCommodityStatus.reject.value,
             TrialCommodityStatus.cancel.value
     ]:
         raise StatusError('只能删除已下架或已撤销的商品')
     with db.auto_commit():
         TrialCommodity.query.filter_by(TCid=tcid).delete_()
         TrialCommodityImage.query.filter_by(TCid=tcid).delete_()
         TrialCommoditySku.query.filter_by(TCid=tcid).delete_()
         TrialCommoditySkuValue.query.filter_by(TCid=tcid).delete_()
     return Success('删除成功', {'tcid': tcid})
Example #20
0
 def validate_suid(self, raw):
     if is_supplizer():
         self.suid.data = request.user.id
     else:
         if not raw.data:
             raise ParamsError('供应商suid不可为空')
     supplizer = Supplizer.query.filter(
         Supplizer.SUid == raw.data,
         Supplizer.isdelete == False).first_('供应商不存在')
     self.supplizer = supplizer
Example #21
0
    def list(self):
        """拼团/商品列表"""
        args = request.args.to_dict()
        now = datetime.datetime.now()
        option = args.get('option')
        gpstatus = args.get('gpstatus')
        starttime, endtime = args.get('starttime', '2019-01-01') or '2019-01-01', args.get('endtime', '2100-01-01') or '2100-01-01'
        if is_admin() or is_supplizer():
            return self._back_group_product_list(gpstatus, starttime, endtime)

        if str(option) == 'my':
            my_group = []
            if common_user():
                my_group = self._filter_joined_group().all_with_page()
            list(map(lambda x: self._fill_single_group(x), my_group))
            return Success(data=my_group)

        elif str(option) == 'all':
            all_group = self._filter_not_joined_group().all_with_page()
            list(map(lambda x: self._fill_single_group(x), all_group))
            return Success(data=all_group)

        my_group = []
        if common_user():
            my_group = self._filter_joined_group().distinct().limit(2).all()

        list(map(lambda x: self._fill_single_group(x), my_group))

        all_group = self._filter_not_joined_group().distinct().limit(2).all()

        list(map(lambda x: self._fill_single_group(x), all_group))

        group_goods = GroupGoodsProduct.query.filter(GroupGoodsProduct.isdelete == False,
                                                     GroupGoodsProduct.GPstatus == ApplyStatus.agree.value,
                                                     GroupGoodsProduct.GPday == now.date()
                                                     ).order_by(GroupGoodsProduct.createtime.desc()).all_with_page()
        for gp in group_goods:
            gp.hide('SUid', 'PRid', 'GPfreight')
            product = Products.query.filter(Products.PRid == gp.PRid, Products.isdelete == False).first()
            if not product:
                continue
            gps_list = GroupGoodsSku.query.filter_by(GPid=gp.GPid, isdelete=False).all()
            gpsku_price = [gps.SKUPrice for gps in gps_list]
            gp.fill('gpstatus_en', ApplyStatus(gp.GPstatus).name)
            gp.fill('gpstatus_zh', ApplyStatus(gp.GPstatus).zh_value)
            gp.fill('prmainpic', product['PRmainpic'])
            gp.fill('prtitle', product.PRtitle)
            gp.fill('gpdeposit', max(gpsku_price))

        res = {'my_group': my_group,
               'all_group': all_group,
               'group_goods': group_goods
               }

        return Success(data=res)
Example #22
0
 def list(self):
     form = BrandsListForm().valid_data()
     pbstatus = dict(form.pbstatus.choices).get(form.pbstatus.data)
     free = dict(form.free.choices).get(form.free.data)
     time_order = dict(form.time_order.choices).get(form.time_order.data)
     itid = form.itid.data
     itid = itid.split('|') if itid else []
     kw = form.kw.data
     brand_query = ProductBrand.query.filter_(
         ProductBrand.isdelete == False, ProductBrand.PBstatus == pbstatus)
     if itid:
         brand_query = brand_query.join(
             BrandWithItems,
             ProductBrand.PBid == BrandWithItems.PBid).filter(
                 BrandWithItems.isdelete == False,
                 BrandWithItems.ITid.in_(itid))
     if is_supplizer():
         current_app.logger.info('供应商查看品牌列表..')
         brand_query = brand_query.filter(
             ProductBrand.SUid == request.user.id)
     if free is True:
         brand_query = brand_query.filter(ProductBrand.SUid.is_(None))
     elif free is False:
         brand_query = brand_query.filter(ProductBrand.SUid.isnot(None))
     if kw:
         brand_query = brand_query.filter(ProductBrand.PBname.contains(kw))
     brands = brand_query.order_by(time_order).all_with_page()
     for brand in brands:
         brand.fill('PBstatus_en', ProductBrandStatus(brand.PBstatus).name)
         brand.fill('PBstatus_zh',
                    ProductBrandStatus(brand.PBstatus).zh_value)
         brand.add('createtime')
         # 标签
         print(brand.PBid)
         pb_items = Items.query.filter_by().join(
             BrandWithItems, Items.ITid == BrandWithItems.ITid).filter_(
                 BrandWithItems.PBid == brand.PBid,
                 BrandWithItems.isdelete == False,
             ).all()
         brand.fill('items', pb_items)
         if is_admin() or brand.SUid:
             supplizer = Supplizer.query.filter(
                 Supplizer.isdelete == False,
                 Supplizer.SUid == brand.SUid).first()
             if not supplizer:
                 with db.auto_commit():
                     brand.SUid = None
                     db.session.add(brand)
                 continue
             supplizer.fields = [
                 'SUloginPhone', 'SUlinkPhone', 'SUname', 'SUlinkman',
                 'SUheader'
             ]
             brand.fill('supplizer', supplizer)
     return Success(data=brands)
Example #23
0
    def shelves(self):
        """下架申请"""
        if is_supplizer():
            usid = request.user.id
            sup = Supplizer.query.filter_by_(SUid=usid).first_('供应商信息错误')
            current_app.logger.info('Supplizer {} shelf magicbox apply'.format(
                sup.SUname))
        elif is_admin():
            usid = request.user.id
            admin = Admin.query.filter_by_(ADid=usid).first_('管理员信息错误')
            current_app.logger.info('Admin {} shelf magicbox apply'.format(
                admin.ADname))
            sup = None
        else:
            raise AuthorityError()
        data = parameter_required(('mbaid', ))
        mbaid = data.get('mbaid')
        pending_box = MagicBoxJoin.query.filter(
            MagicBoxJoin.isdelete == False,
            MagicBoxJoin.MBJstatus == MagicBoxJoinStatus.pending.value,
            MagicBoxJoin.MBSendtime >= datetime.now().date(),
            MagicBoxJoin.MBAid == mbaid).first()
        if pending_box:
            current_app.logger.info('仍存在未完成礼盒 MBJid: {}'.format(
                pending_box.MBJid))
            raise StatusError('该商品仍有正在分享中的礼盒未完成,暂不能下架')

        with db.auto_commit():
            apply_info = MagicBoxApply.query.filter_by_(
                MBAid=mbaid).first_('无此申请记录')
            if sup and apply_info.SUid != usid:
                raise StatusError('只能下架自己的申请')
            if apply_info.MBAstatus != ApplyStatus.agree.value:
                raise StatusError('只能下架已通过的申请')
            apply_info.MBAstatus = ApplyStatus.shelves.value
            if is_admin():
                BASEADMIN().create_action(AdminActionS.update.value,
                                          'MagicBoxApply', mbaid)
            # 返回库存
            product = Products.query.filter_by(PRid=apply_info.PRid,
                                               isdelete=False).first_('商品信息出错')
            mbs_old = MagicBoxApplySku.query.filter(
                MagicBoxApplySku.MBAid == apply_info.MBAid,
                MagicBoxApplySku.isdelete == False,
            ).all()
            for sku in mbs_old:
                sku_instance = ProductSku.query.filter_by(
                    isdelete=False, PRid=product.PRid,
                    SKUid=sku.SKUid).first_('商品sku信息不存在')
                super(CMagicBox, self)._update_stock(int(sku.MBSstock),
                                                     product, sku_instance)
        return Success('下架成功', {'mbaid': mbaid})
Example #24
0
    def download(self):
        if not is_supplizer() and not is_admin():
            raise AuthorityError()
        current_app.logger.info('start download template')

        template_path = os.path.join(current_app.config['BASEDIR'], 'img',
                                     'xls')
        current_app.logger.info('template path {}'.format(template_path))
        current_app.logger.info('is file {}'.format(
            os.path.isfile(os.path.join(template_path, 'template.xlsx'))))
        return send_from_directory(template_path,
                                   'template.xlsx',
                                   as_attachment=True)
    def list(self):
        """商品列表"""
        args = parameter_required()
        prtitle = args.get('prtitle')
        ipstatus = args.get('status')
        try:
            ipstatus = getattr(ApplyStatus, ipstatus).value
        except Exception as e:
            current_app.logger.error(
                'integral list status error : {}'.format(e))
            ipstatus = None
        integral_balance = 0
        if common_user():
            ipstatus = ApplyStatus.agree.value
            user = User.query.filter_by_(USid=request.user.id).first()
            integral_balance = getattr(user, 'USintegral', 0)
        elif is_tourist():
            ipstatus = ApplyStatus.agree.value

        filter_args = [
            IntegralProduct.isdelete == False,
            IntegralProduct.IPstatus == ipstatus, Products.isdelete == False,
            Products.PRstatus == ProductStatus.usual.value
        ]
        if is_supplizer():
            filter_args.append(Products.CreaterId == request.user.id),
        if prtitle:
            filter_args.append(Products.PRtitle.ilike('%{}%'.format(prtitle)))
        ips = IntegralProduct.query.outerjoin(
            Products, Products.PRid == IntegralProduct.PRid).filter_(
                *filter_args).order_by(
                    IntegralProduct.createtime.desc()).all_with_page()
        for ip in ips:
            pr = Products.query.filter(Products.PRid == ip.PRid).first()
            pb = ProductBrand.query.filter(
                ProductBrand.PBid == pr.PBid).first()
            ip.fill('prtitle', pr.PRtitle)
            ip.fill('prmainpic', pr['PRmainpic'])
            ip.fill('ipstatus_zh', ApplyStatus(ip.IPstatus).zh_value)
            ip.fill('ipstatus_en', ApplyStatus(ip.IPstatus).name)
            ip.fill('pbname', pb.PBname)

        res = dict(product=ips)
        if common_user() or is_tourist():
            cfg = ConfigSettings()
            rule = cfg.get_item('integralrule', 'rule')
            integral = dict(balance=integral_balance, rule=rule)
            res['integral'] = integral
        return Success(data=res)
Example #26
0
    def set_banner(self):
        data = parameter_required({'pbid': '品牌唯一值缺失'})
        pbid = data.get('pbid')
        if is_supplizer():

            supplizer = get_current_supplizer()
            ProductBrand.query.filter(
                ProductBrand.PBid == pbid, ProductBrand.SUid == supplizer.SUid).first_('只能修改自己的品牌')
        elif is_admin():
            ProductBrand.query.filter(
                ProductBrand.PBid == pbid).first_('品牌不存在')
        else:
            raise AuthorityError()
        bbid = data.get('bbid')
        bbcontent = data.get('bbcontent')
        if bbcontent:
            try:
                bbcontent = json.dumps(bbcontent)
            except Exception as e:
                current_app.logger.info('转置json 出错 bbcontent = {} e = {}'.format(bbcontent, e))
        bbsort = data.get('bbsort')
        if bbsort:
            bbsort = self._check_sort(bbsort, model=BrandBanner, filter_args=[BrandBanner.PBid == pbid], default=1)
        with db.auto_commit():
            if bbid:
                if data.get('delete'):
                    BrandBanner.query.filter(BrandBanner.BBid == bbid, BrandBanner.isdelete == false()).delete_(
                        synchronize_session=False)
                    return Success('删除成功')

                bb = BrandBanner.query.filter(BrandBanner.BBid == bbid, BrandBanner.isdelete == false()).first()
                if bb:
                    if bbsort:
                        bb.BBsort = bbsort
                    if bbcontent:
                        bb.BBcontent = bbcontent
                    return Success('更新成功', data=bbid)
            bbid = str(uuid.uuid1())
            if not bbcontent:
                raise ParamsError('轮播图图片路由缺失')
            bb = BrandBanner.create({
                'BBid': bbid,
                'PBid': pbid,
                'BBsort': bbsort or 1,
                'BBcontent': bbcontent
            })
            db.session.add(bb)

        return Success('添加成功', data=bbid)
Example #27
0
 def del_news(self):
     """删除资讯"""
     if is_tourist():
         raise TokenError()
     elif is_admin():
         usid = request.user.id
         admin = self._check_admin(usid)
         current_app.logger.info('Admin {0} deleted a news'.format(
             admin.ADname))
     elif is_supplizer():
         usid = request.user.id
         sup = self._check_supplizer(usid)
         current_app.logger.info('Supplizer {0} deleted a news'.format(
             sup.SUname))
     else:
         usid = request.user.id
         user = self.snews.get_user_by_id(usid)
         current_app.logger.info('User {0} deleted a news'.format(
             user.USname))
     data = parameter_required(('neid', ))
     neids = data.get('neid')
     with db.auto_commit():
         for neid in neids:
             news = News.query.filter_by_(NEid=neid).first_('未找到该资讯或已被删除')
             if is_admin():
                 if news.NEstatus != NewsStatus.refuse.value:
                     raise StatusError('只能删除已下架状态的资讯')
             else:
                 if news.USid != usid:
                     raise StatusError('只能删除自己发布的资讯')
             News.query.filter_by(NEid=neid, isdelete=False).delete_()
             NewsTag.query.filter_by(NEid=neid).delete_()  # 删除标签关联
             NewsComment.query.filter_by(NEid=neid).delete_()  # 删除评论
             NewsFavorite.query.filter_by(NEid=neid).delete_()  # 删除点赞
             NewsTrample.query.filter_by(NEid=neid).delete_()  # 删除点踩
             # 如果在审核中,同时取消在进行的审批流
             try:
                 if news.NEstatus == NewsStatus.auditing.value:
                     approval_info = Approval.query.filter_by_(
                         AVcontent=neid,
                         AVstartid=news.USid,
                         AVstatus=ApplyStatus.wait_check.value).first()
                     approval_info.update(
                         {'AVstatus': ApplyStatus.cancle.value})
                     db.session.add(approval_info)
             except Exception as e:
                 current_app.logger.error('删除圈子相关审批流时出错: {}'.format(e))
     return Success('删除成功', {'neid': neids})
Example #28
0
 def _coupon(self, coupon, **kwargs):
     items = Items.query.join(CouponItem,
                              CouponItem.ITid == Items.ITid).filter(
                                  CouponItem.COid == coupon.COid).all()
     if not is_admin() and not is_supplizer():
         coupon.COcanCollect = self._can_collect(coupon)
     # 优惠券使用对象
     coupon.fill('items', items)
     coupon.fill('title_subtitle', self._title_subtitle(coupon))
     usid = kwargs.get('usid')
     if usid:
         coupon_user = CouponUser.query.filter_by({
             'USid': usid,
             'COid': coupon.COid
         }).first()
         coupon.fill('ready_collected', bool(coupon_user))
Example #29
0
 def get(self):
     if not is_admin() and not is_supplizer():
         raise AuthorityError()
     form = SupplizerGetForm().valid_data()
     supplizer = form.supplizer
     self._fill_supplizer(supplizer)
     pbs = ProductBrand.query.filter(
         ProductBrand.isdelete == False,
         ProductBrand.SUid == supplizer.SUid).all()
     for pb in pbs:
         if pb:
             pb.pbstatus_zh = ProductBrandStatus(pb.PBstatus).zh_value
             pb.add('pbstatus_zh')
     supplizer.fill('pbs', pbs)
     supplizer.fill('SUbaseRate', supplizer.SUbaseRate or 0)
     return Success(data=supplizer)
Example #30
0
    def get_system_notes(self):
        if is_supplizer():
            mn_list = ManagerSystemNotes.query.filter(
                ManagerSystemNotes.MNstatus == NotesStatus.publish.value)
        elif is_admin():
            mn_list = ManagerSystemNotes.query.filter(
                ManagerSystemNotes.isdelete == False)
        else:
            raise AuthorityError

        mn_list = mn_list.order_by(ManagerSystemNotes.createtime.desc()).all()

        for mn in mn_list:
            mn.fill('mnstatus_zh', NotesStatus(mn.MNstatus).zh_value)
            mn.fill('mnstatus', NotesStatus(mn.MNstatus).name)

        return Success('获取通告成功', data=mn_list)