def get_column_filters(self): from datetime import datetime, timedelta today = datetime.today() yesterday = today.date() week_ago = (today - timedelta(days=7)).date() _30days_ago = (today - timedelta(days=30)).date() ret = [filters.EqualTo("goods_receipt.customer", name=u"是"), filters.BiggerThan("create_time", name=u"在", options=[ (yesterday, u'一天内'), (week_ago, u'一周内'), (_30days_ago, u'30天内')]), category_filter] if not SchedulerPermission.can(): ret.append(only_unfinished_filter) return ret
class DeliverySessionModelView(ModelView): can_batchly_edit = False column_hide_backrefs = False edit_template = "delivery/delivery-session.html" list_template = "delivery/delivery-session-list.html" __sortable_columns__ = ("create_time", "finish_time") def get_list_columns(self): def gr_item_formatter(v, obj): # 格式化每个发货单,未打印或者过期,需要提示出来 ret = unicode(v) if v.pay_in_cash and not v.is_paid: ret += u'<small class="text-danger"> (未支付)</small>' if not v.MSSQL_ID: ret += u'<small class="text-danger"> (未导入)</small>' if v.stale: ret += u'<small class="text-danger"> (过期)</small>' return ret return [ "id", "plate_", ColumnSpec("tare", label=u"净重(公斤)", formatter=lambda v, obj: sum( dt.weight for dt in obj.delivery_task_list)), "create_time", "finish_time", "with_person", "status", ListColumnSpec("customer_list_unwrapped", label=u"客 户", compressed=True), ListColumnSpec("consignment_list_unwrapped", label=u"发货单", compressed=True, item_col_spec=ColumnSpec( "", formatter=gr_item_formatter)) ] @login_required def try_view(self, processed_objs=None): pass __column_labels__ = { "id": u"编号", "plate_": u"车辆", "create_time": u"创建时间", "tare": u"皮重(公斤)", "with_person": u"驾驶室", "finish_time": u"结束时间", "status": u"状态" } __column_formatters__ = { "status": lambda v, obj: constants.delivery.desc_status(v), "create_time": lambda v, obj: v.strftime("%m月%d日 %H点").decode("utf-8"), "finish_time": lambda v, obj: v.strftime("%m月%d日 %H点").decode("utf-8") if v else "--", "with_person": lambda v, obj: u'有人' if v else u'无人', } from datetime import datetime, timedelta today = datetime.today() yesterday = today.date() week_ago = (today - timedelta(days=7)).date() _30days_ago = (today - timedelta(days=30)).date() __column_filters__ = [ filters.BiggerThan("create_time", name=u"在", default_value=str(yesterday), options=[(yesterday, u'一天内'), (week_ago, u'一周内'), (_30days_ago, u'30天内')]), filters.EqualTo("plate_", name=u"是"), filters.Only("status", display_col_name=u"仅展示未完成会话", test=lambda col: ~col.in_([ constants.delivery.STATUS_CLOSED, constants.delivery. STATUS_DISMISSED ]), notation="__only_unclosed") ] def get_form_columns(self, obj=None): __form_columns__ = OrderedDict() __form_columns__[u"发货会话详情"] = [ ColumnSpec("id"), "plate_", "tare", "with_person", ColumnSpec("create_time"), ColumnSpec("finish_time"), PlaceHolderColumnSpec(col_name="log_list", label=u"日志", template_fname="logs-snippet.html") ] __form_columns__[u"发货任务列表"] = [ PlaceHolderColumnSpec( "delivery_task_list", label="", template_fname="delivery/delivery-task-list-snippet.html") ] __form_columns__[u"发货单列表"] = [ PlaceHolderColumnSpec( "consignment_list", label="", template_fname="delivery/consignment-list-snippet.html") ] if obj and obj.status not in [ constants.delivery.STATUS_CLOSED, constants.delivery.STATUS_DISMISSED ]: __form_columns__[u"已选择仓单列表"] = [ PlaceHolderColumnSpec( "store_bill_list", label="", template_fname="delivery/store-bill-list-snippet.html") ] return __form_columns__ __default_order__ = ("create_time", "desc") def __list_filters__(self): return [filters.NotEqualTo("plate", name=u"", value="foo")] def preprocess(self, obj): return DeliverySessionWrapper(obj) def patch_row_attr(self, idx, obj): test = len(obj.customer_list) > len(obj.consignment_list) stale = False unimported = False for cn in obj.consignment_list: if not cn.MSSQL_ID: unimported = True if cn.stale: stale = True if test or stale: return { "title": u"有客户发货单没有生成,或者存在已经过期的发货单, 强烈建议您重新生成发货单!", "class": "danger" } elif unimported: return {"title": u"有客户发货单未导入", "class": "warning"} def get_create_columns(self): def filter_plate(q): unfinished_us_list = models.UnloadSession.query.filter( models.UnloadSession.finish_time == None) unfinished_ds_list = models.DeliverySession.query.filter( models.DeliverySession.finish_time == None) plates = [us.plate for us in unfinished_us_list] plates.extend(ds.plate for ds in unfinished_ds_list) return q.filter(~models.Plate.name.in_(plates)) columns = OrderedDict() columns[u"基本信息"] = [ InputColumnSpec("plate_", filter_=filter_plate), InputColumnSpec("with_person", label=u"驾驶室是否有人"), "tare" ] columns[u"已选择仓单列表"] = [ PlaceHolderColumnSpec( "store_bill_list", label="", template_fname="delivery/store-bill-list-snippet.html", as_input=True) ] return columns def get_customized_actions(self, model_list=None): from lite_mms.portal.delivery.actions import CloseAction, OpenAction, CreateConsignmentAction, \ BatchPrintConsignment, DeleteDeliverySession action_list = [] if model_list is None: # for list action_list.extend([ CloseAction(u"关闭"), OpenAction(u"打开"), CreateConsignmentAction(u"生成发货单"), BatchPrintConsignment(u"打印发货单"), DeleteDeliverySession(u"删除") ]) else: if len(model_list) == 1: if model_list[0].status in [ constants.delivery.STATUS_CLOSED, constants.delivery.STATUS_DISMISSED ]: action_list.append(OpenAction(u"打开")) else: action_list.append(CloseAction(u"关闭")) if model_list[0].stale: action_list.append(CreateConsignmentAction(u"生成发货单")) if model_list[0].consignment_list: action_list.append(BatchPrintConsignment(u"打印发货单")) return action_list def try_edit(self, processed_objs=None): def _try_edit(obj): if obj and obj.finish_time or obj.status in [ constants.delivery.STATUS_CLOSED, constants.delivery.STATUS_DISMISSED ]: raise PermissionDenied if isinstance(processed_objs, (list, tuple)): for obj_ in processed_objs: _try_edit(obj_) else: _try_edit(processed_objs) def edit_hint_message(self, obj, read_only=False): if read_only: return u"发货会话%s已关闭,不能修改" % obj.id else: return super(DeliverySessionModelView, self).edit_hint_message(obj, read_only) def get_edit_help(self, objs): return render_template("delivery/ds-edit-help.html") def get_list_help(self): return render_template("delivery/ds-list-help.html")
class DeductionModelView(ModelView): __create_columns__ = ["id", "weight", "work_command", "team", "remark"] __list_columns__ = [ "id", "weight", "work_command", "team", "actor", "create_time", "remark" ] __column_labels__ = { "weight": u"重量", "work_command": u"工单号", "team": u"班组", "actor": u"质检员", "create_time": u"创建于", "remark": u"备注", } __list_formatters__ = { "team": lambda model, v: v.name, "weight": lambda model, v: str(v) if v else "" + u'(公斤)', "actor": lambda model, v: v.username, "create_time": lambda model, v: v.strftime("%Y-%m-%d %H") + u"点", "remark": lambda model, v: v or "-", "work_command": lambda model, v: v.id if v else "-" } form_formatters = { "work_command": lambda work_command: work_command.id, "team": lambda team: team.name, "actor": lambda actor: actor.username } __sortable_columns__ = [ "id", "weight", "work_command", "team", "actor", "create_time" ] from flask.ext.databrowser import filters from datetime import datetime, timedelta today = datetime.today() yesterday = today.date() week_ago = (today - timedelta(days=7)).date() _30days_ago = (today - timedelta(days=30)).date() __column_filters__ = [ filters.EqualTo("team", name=u"是", opt_formatter=lambda opt: opt.name), filters.BiggerThan("create_time", name=u"在", options=[(yesterday, u'一天内'), (week_ago, u'一周内'), (_30days_ago, u'30天内')]), filters.EqualTo("id", name=u"是"), filters.LessThan("weight", name=u"小于"), filters.EqualTo("work_command", name=u"等于", opt_formatter=lambda opt: opt.id) ] def can_create(self): return addDeduction.can() def can_edit(self): return editDeduction.can() def can_delete(self): return deleteDeduction.can() def on_model_change(self, form, model): from flask.ext.login import current_user model.actor = current_user if not model.create_time: model.create_time = datetime.now()
class UnloadSessionModelView(ModelView): edit_template = "cargo/unload-session.html" can_batchly_edit = False def try_edit(self, objs=None): CargoClerkPermission.test() def _try_edit(obj_): if obj_ and obj_.finish_time: raise PermissionDenied if isinstance(objs, (list, tuple)): for obj_ in objs: _try_edit(obj_) else: _try_edit(objs) def repr_obj(self, obj): return unicode(obj) + "(" + cargo_const.desc_status( obj.status) + ")" + "<br /><p class='text-center'><small class='muted'>" + ' ' + ",".join( [unicode(customer) for customer in obj.customer_list]) + "</small></p>" def get_list_columns(self): def gr_item_formatter(v, obj): # 格式化每个收货单,未打印或者过期,需要提示出来 ret = unicode(v) v = GoodsReceiptWrapper(v) if not v.printed: ret += u'<small class="text-danger"> (未打印)</small>' if v.stale: ret += u'<small class="text-danger"> (过期)</small>' return ret return ["id", "plate_", "create_time", "finish_time", "with_person", "status", ListColumnSpec("customer_list_unwrapped", label=u"客 户", compressed=True), ListColumnSpec("goods_receipt_list_unwrapped", label=u"收货单", compressed=True, item_col_spec=ColumnSpec("", formatter=gr_item_formatter))] __column_labels__ = {"id": u"编号", "plate_": u"车辆", "create_time": u"创建时间", "finish_time": u"结束时间", "with_person": u"驾驶室", "status": u"状态", "goods_receipt_list": u"收货单", "gross_weight": u"净重"} def patch_row_attr(self, idx, obj): test = len(obj.customer_list) > len(obj.goods_receipt_list) stale = False unprinted = False for gr in obj.goods_receipt_list: if not gr.printed: unprinted = True if gr.stale: stale = True if test or stale: return { "title": u"有客户收货单没有生成,或者存在已经过期的收货单, 强烈建议您重新生成收货单!", "class": "danger"} elif unprinted: return { "title": u"有客户收货单没有打印", "class": "warning"} __column_formatters__ = { "create_time": lambda v, obj: v.strftime("%m月%d日 %H点").decode("utf-8"), "finish_time": lambda v, obj: v.strftime("%m月%d日 %H点").decode("utf-8") if v else "--", "with_person": lambda v, obj: u'有人' if v else u'无人', "status": lambda v, obj: cargo_const.desc_status(v), } __default_order__ = ("id", "desc") __sortable_columns__ = ["id", "plate", "create_time", "finish_time"] from flask.ext.databrowser import filters from datetime import datetime, timedelta today = datetime.today() yesterday = today.date() week_ago = (today - timedelta(days=7)).date() _30days_ago = (today - timedelta(days=30)).date() __column_filters__ = [filters.BiggerThan("create_time", name=u"在", default_value=str(yesterday), options=[(yesterday, u'一天内'), (week_ago, u'一周内'), (_30days_ago, u'30天内')]), filters.EqualTo("plate_", name=u"是"), filters.Only("status", display_col_name=u"仅展示未完成会话", test=lambda col: ~col.in_( [cargo_const.STATUS_CLOSED, cargo_const.STATUS_DISMISSED]), notation="__only_unclosed"), ] def try_view(self, processed_objs=None): from flask.ext.principal import Permission Permission.union(CargoClerkPermission, AdminPermission).test() def preprocess(self, model): return UnloadSessionWrapper(model) def get_customized_actions(self, model_list=None): from lite_mms.portal.cargo.actions import (CloseAction, OpenAction, CreateReceiptAction, BatchPrintGoodsReceipt, DeleteUnloadSessionAction) class _PrintGoodsReceipt(BaseAction): def op_upon_list(self, objs, model_list): obj = objs[0] return redirect(url_for("goods_receipt.goods_receipts_batch_print", id_=",".join([str(gr.id) for gr in obj.goods_receipt_list]), url=request.url)) action_list = [] create_action = CreateReceiptAction(u"生成收货单") if model_list is None: # for list action_list.extend([CloseAction(u"关闭"), OpenAction(u"打开"), create_action, DeleteUnloadSessionAction(u"删除", None)]) else: if len(model_list) == 1: if model_list[0].status in [cargo_const.STATUS_CLOSED, cargo_const.STATUS_DISMISSED]: action_list.append(OpenAction(u"打开")) else: action_list.append(CloseAction(u"关闭")) if create_action.test_enabled(model_list[0]) == 0: action_list.append(create_action) if model_list[0].goods_receipt_list: action_list.append(_PrintGoodsReceipt(u"打印收货单")) return action_list def get_list_help(self): return render_template("cargo/us-list-help.html") # ================= FORM PART ============================ def get_create_columns(self): def filter_plate(q): unfinished_us_list = UnloadSession.query.filter(UnloadSession.finish_time == None) unfinished_ds_list = DeliverySession.query.filter(DeliverySession.finish_time == None) plates = [us.plate for us in unfinished_us_list] plates.extend(ds.plate for ds in unfinished_ds_list) return q.filter(~Plate.name.in_(plates)) # return q.filter( # and_(~exists().where(UnloadSession.plate == Plate.name).where(UnloadSession.finish_time == None), # ~exists().where(DeliverySession.finish_time == None).where(DeliverySession.plate == Plate.name))) return [InputColumnSpec("plate_", filter_=filter_plate), InputColumnSpec("with_person", label=u"驾驶室是否有人"), "gross_weight"] def edit_hint_message(self, obj, read_only=False): if read_only: return u"已关闭的卸货会话不能修改" else: return super(UnloadSessionModelView, self).edit_hint_message(obj, read_only) __form_columns__ = OrderedDict() __form_columns__[u"详细信息"] = [ "plate_", InputColumnSpec("gross_weight", label=u"毛重"), InputColumnSpec("with_person", label=u"驾驶室是否有人"), ColumnSpec("status", label=u"状态", formatter=lambda v, obj: cargo_const.desc_status(v)), InputColumnSpec("create_time", label=u"创建时间", read_only=True), InputColumnSpec("finish_time", label=u"结束时间", read_only=True), PlaceHolderColumnSpec(col_name="log_list", label=u"日志", template_fname="logs-snippet.html") ] __form_columns__[u"收货任务列表"] = [ PlaceHolderColumnSpec(col_name="task_list", label=u"", template_fname="cargo/unload-task-list-snippet.html")] __form_columns__[u"收货单列表"] = [ PlaceHolderColumnSpec(col_name="goods_receipt_list", label=u"", template_fname="cargo/gr-list-snippet.html")] def get_edit_help(self, objs): return render_template("cargo/us-edit-help.html") def get_create_help(self): return render_template("cargo/us-create-help.html")
class GoodsReceiptModelView(ModelView): edit_template = "cargo/goods-receipt.html" can_batchly_edit = True __default_order__ = ("create_time", "desc") def try_create(self): raise PermissionDenied def preprocess(self, obj): return GoodsReceiptWrapper(obj) @login_required def try_view(self, processed_objs=None): pass __sortable_columns__ = ["id", "create_time"] __list_columns__ = ["id", "receipt_id", "customer", "unload_session.plate", InputColumnSpec("order", formatter=lambda v, obj: v or "--", label=u"订单"), ColumnSpec("printed", formatter=lambda v, obj: u"是" if v else u"否", label=u"是否打印"), ColumnSpec("stale", formatter=lambda v, obj: u"是" if v else u"否", label=u"是否过时"), ColumnSpec("create_time", formatter=lambda v, obj: v.strftime("%y年%m月%d日 %H时%M分").decode("utf-8"), label=u"创建时间"), ColumnSpec("creator"), ListColumnSpec("goods_receipt_entries", label=u"产品", compressed=True, item_col_spec=ColumnSpec("", formatter=lambda v, obj: unicode( v.product.product_type) + u"-" + unicode(v.product)))] def patch_row_attr(self, idx, obj): if obj.stale: return { "class": "danger", "title": u"本收货单已经过时,请回到卸货会话重新生成" } if not obj.printed: return { "class": "warning", "title": u"本收货单尚未打印" } from flask.ext.databrowser import filters from datetime import datetime, timedelta today = datetime.today() yesterday = today.date() week_ago = (today - timedelta(days=7)).date() _30days_ago = (today - timedelta(days=30)).date() class NoneOrder(filters.Only): def set_sa_criterion(self, q): if self.value: return q.filter(GoodsReceipt.order == None) else: return q __column_filters__ = [filters.BiggerThan("create_time", name=u"在", default_value=str(yesterday), options=[(yesterday, u'一天内'), (week_ago, u'一周内'), (_30days_ago, u'30天内')]), filters.EqualTo("customer", name=u"是"), filters.Only("printed", display_col_name=u"仅展示未打印收货单", test=lambda col: ~col, notation="__only_unprinted"), NoneOrder("order", display_col_name=u"仅展示未生成订单", test=None, notation="__none")] __form_columns__ = OrderedDict() __form_columns__[u"详细信息"] = [ "receipt_id", "customer", "unload_session.plate", ColumnSpec("create_time", label=u"创建时间"), ColumnSpec("creator"), ColumnSpec("printed", label=u"是否打印", formatter=lambda v, obj: u"是" if v else u'<span class="text-danger">否</span>'), ColumnSpec("stale", label=u"是否过时", formatter=lambda v, obj: u'<span class="text-danger">是</span>' if v else u"否"), PlaceHolderColumnSpec("log_list", label=u"日志", template_fname="logs-snippet.html")] __form_columns__[u"产品列表"] = [ TableColumnSpec( "goods_receipt_entries", label="", preprocess=lambda obj: GoodsReceiptWrapper(obj), col_specs=[ LinkColumnSpec("id", label=u"编号", anchor=lambda v: v, formatter=lambda v, obj: goods_receipt_entry_view.url_for_object(obj, url=request.url)), ColumnSpec("product", label=u"产品"), ColumnSpec("product.product_type", label=u"产品类型"), ColumnSpec("weight", label=u"净重(公斤)"), PlaceHolderColumnSpec(col_name="pic_url", label=u"图片", template_fname="pic-snippet.html", form_width_class="col-lg-3")])] __column_labels__ = {"receipt_id": u'编 号', "customer": u'客 户', "unload_session.plate": u"车牌号", "printed": u'是否打印', "stale": u"是否过时", "create_time": u"创建时间", "order": u"订 单", "creator": u"创建者"} def get_customized_actions(self, objs=None): from lite_mms.portal.cargo.actions import PrintGoodsReceipt, BatchPrintGoodsReceipt, CreateOrderAction, \ CreateExtraOrderAction, ViewOrderAction, DeleteGoodsReceiptAction delete_goods_receipt_action = DeleteGoodsReceiptAction(u"删除") if not objs: if g.request_from_mobile: return [delete_goods_receipt_action] else: return [BatchPrintGoodsReceipt(u"批量打印"), delete_goods_receipt_action] else: def _get_actions(obj): if obj.order: return [ViewOrderAction(u"查看订单")] else: _actions = [CreateOrderAction(u"生成计重类型订单"), CreateExtraOrderAction(u"生成计件类型订单")] if not obj.printed: _actions.append(delete_goods_receipt_action) return _actions if isinstance(objs, (list, tuple)): if len(objs) == 1: actions = _get_actions(objs[0]) else: actions = [] else: actions = _get_actions(objs) if not g.request_from_mobile: actions.append(PrintGoodsReceipt(u"打印")) return actions def try_edit(self, objs=None): def _try_edit(obj): if obj: if isinstance(obj, self.data_browser.db.Model): obj = self.preprocess(obj) if obj.stale or obj.order: raise PermissionDenied CargoClerkPermission.test() if isinstance(objs, (list, tuple)): return any(_try_edit(obj) for obj in objs) else: return _try_edit(objs) def edit_hint_message(self, obj, read_only=False): if read_only: if obj.order: return u"已生成订单的收货单不能修改" else: return u"已过时的收货单不能修改" else: return super(GoodsReceiptModelView, self).edit_hint_message(obj, read_only) def batch_edit_hint_message(self, objs, read_only=False): if read_only: obj_ids = ",".join([obj.receipt_id for obj in objs]) for obj in objs: if obj.order: return u"收货单%s已生成订单,不能批量修改%s" % (obj.receipt_id, obj_ids) elif obj.stale: return u"收货单%s已过时,不能批量修改%s" % (obj.receipt_id, obj_ids) else: return u"存在不能修改的收货单" else: return super(GoodsReceiptModelView, self).edit_hint_message(objs, read_only) def get_batch_form_columns(self, preprocessed_objs=None): return ["customer", "receipt_id", "create_time", "printed"]
class WorkCommandView(ModelView): __list_columns__ = [ "id", "sub_order.order.customer_order_number", "department", "team", "org_weight", "org_cnt", "sub_order.unit", "urgent", "sub_order.returned", "tech_req", "handle_type", "status", "procedure", "previous_procedure", "order.goods_receipt.customer" ] __column_labels__ = { "id": u"编号", "department": u"车间", "team": u"班组", "sub_order.unit": u"单位", "sub_order.returned": u"退镀", "urgent": u"加急", "org_weight": u"重量(公斤)", "org_cnt": u"数量", "handle_type": u"处理类型", "tech_req": u"技术要求", "status": u"状态", "procedure": u"工序", "previous_procedure": u"上道工序", "sub_order.order.customer_order_number": u"订单编号", "sub_order": u"子订单编号", "order.goods_receipt.customer": u"客户" } __default_order__ = ("id", "desc") __sortable_columns__ = [ "sub_order.order.customer_order_number", "urgent", "sub_order.returned" ] def preprocess(self, obj): from lite_mms import apis return apis.manufacture.WorkCommandWrapper(obj) def patch_row_attr(self, idx, row): if row.status != constants.work_command.STATUS_FINISHED and ( row.urgent or row.sub_order.returned): return {"class": "danger", "title": u"退镀或加急"} from datetime import datetime, timedelta today = datetime.today() yesterday = today.date() week_ago = (today - timedelta(days=7)).date() _30days_ago = (today - timedelta(days=30)).date() class In_Filter(filters.BaseFilter): __notation__ = "__in_ex" def __operator__(self, attr, value): return attr.in_(set(value)) __column_filters__ = [ In_Filter("status", u"是", options=[i[:2] for i in get_status_list()], display_col_name=u"状态"), filters.BiggerThan("create_time", name=u"在", display_col_name=u"创建时间", options=[(yesterday, u'一天内'), (week_ago, u'一周内'), (_30days_ago, u'30天内')]), filters.Contains("sub_order.order.customer_order_number", name=u"包含", display_col_name=u"订单编号"), filters.EqualTo("sub_order.order.id", name="", hidden=True), filters.Only("urgent", display_col_name=u"只展示加急", test=lambda v: v == True, notation="__urgent"), filters.Only("sub_order.returned", display_col_name=u"只展示退镀", test=lambda v: v == True, notation="__returned"), filters.EqualTo("department", u"是") ] f = lambda v, model: u"<span class='text-danger'>是</span>" if v else u"否" __column_formatters__ = { "status": lambda v, model: get_wc_status_list().get(v)[0], "department": lambda v, model: v if v else "", "team": lambda v, model: v if v else "", "sub_order.returned": f, "urgent": f, "procedure": lambda v, model: v if v else "", "previous_procedure": lambda v, model: v if v else "", "handle_type": lambda v, model: get_handle_type_list().get(v, u"未知") } def repr_obj(self, obj): return u""" <span> %(wc)s - <small>%(customer)s</small> <small class='pull-right text-muted'> %(datetime)s </small> </span> """ % { "wc": unicode(obj), "customer": obj.order.goods_receipt.customer, "datetime": obj.create_time.strftime("%m-%d %H:%M") } def try_create(self): raise PermissionDenied @login_required def try_view(self, processed_objs=None): pass def try_edit(self, processed_objs=None): SchedulerPermission.test() if processed_objs and processed_objs[ 0].status == constants.work_command.STATUS_DISPATCHING: return True else: raise PermissionDenied def edit_hint_message(self, obj, read_only=False): if read_only: if not SchedulerPermission.can(): return u"无修改订单的权限" else: return u"工单%d已进入生产流程,不能修改" % obj.id else: return super(WorkCommandView, self).edit_hint_message(obj, read_only) def get_customized_actions(self, processed_objs=None): from .actions import schedule_action, retrieve_action def _get_status_filter(desc): for i in get_status_list(): if i[1] == desc: return i[0] else: return None if processed_objs: if all( schedule_action.test_enabled(obj) == 0 for obj in processed_objs): return [schedule_action] elif all( retrieve_action.test_enabled(obj) == 0 for obj in processed_objs): return [retrieve_action] else: if self.__column_filters__[0].value == unicode( _get_status_filter(u"待生产")): return [schedule_action] elif self.__column_filters__[0].value == unicode( _get_status_filter(u"生产中")): return [retrieve_action] elif self.__column_filters__[0].has_value: return [schedule_action, retrieve_action] return [] def get_form_columns(self, obj=None): form_columns = OrderedDict() c = column_spec.ColumnSpec("", formatter=lambda v, obj: u"%s-%s" % (v.id, v.cause_name) if v else "") form_columns[u"工单信息"] = [ column_spec.ColumnSpec("id"), column_spec.ColumnSpec("org_weight"), column_spec.ColumnSpec("org_cnt"), column_spec.ColumnSpec("sub_order.unit"), column_spec.ColumnSpec("sub_order.spec", label=u"规格"), column_spec.ColumnSpec("sub_order.type", label=u"型号"), "urgent", "sub_order.returned", "tech_req", column_spec.ColumnSpec("cause_name", label=u"产生原因"), column_spec.ColumnSpec("previous_work_command", label=u"上级工单", formatter=lambda v, obj: u"%s-%s" % (v.id, v.cause_name) if v else ""), column_spec.ListColumnSpec("next_work_command_list", label=u"下级工单", item_col_spec=c), column_spec.PlaceHolderColumnSpec( "log_list", label=u"日志", template_fname="logs-snippet.html") ] form_columns[u"加工信息"] = [ column_spec.ColumnSpec("department"), column_spec.ColumnSpec("team"), column_spec.ColumnSpec("procedure"), column_spec.ColumnSpec("previous_procedure"), column_spec.ColumnSpec("processed_weight", label=u"工序后重量"), column_spec.ColumnSpec("processed_cnt", label=u"工序后数量"), column_spec.ColumnSpec("status_name", label=u"状态"), column_spec.ColumnSpec("completed_time", label=u"生产结束时间"), column_spec.ColumnSpec( "handle_type", label=u"处理类型", formatter=lambda v, obj: get_handle_type_list().get(v, u"未知")) ] if obj and obj.qir_list: from lite_mms.apis.quality_inspection import get_QI_result_list from lite_mms.portal.quality_inspection.views import qir_model_view def result(qir): for i in get_QI_result_list(): if qir.result == i[0]: status = i[1] break else: status = u"未知" return u"<a href='%s'>质检单%s%s了%s(公斤)</a>" % ( qir_model_view.url_for_object( qir, url=request.url), qir.id, status, qir.weight) form_columns[u"质检信息"] = [ column_spec.ListColumnSpec( "qir_list", label=u"质检结果", formatter=lambda v, obj: [result(qir) for qir in v]) ] form_columns[u"订单信息"] = [ column_spec.ColumnSpec("sub_order"), column_spec.ColumnSpec("sub_order.order", label=u"订单号") ] return form_columns