新建单据,放大镜过滤的添加。

项目:
==国际重工==
单据:
==服务工单-三包维修配件申请单==


代码主要页面:
1.code/worksheet/plugin/worksheetsave.lib
2.code/worksheet/xml/worksheetsaver.xml
3.code/www/js/tdetail.js
4.code/www/js/worksheet/worksheetedit.php
5.code/www/js/worksheet/worksheetajax.php

6.code/www/js/worksheet/worksheetitemajax.php




1--点击用户资产放大镜,只显示带有明细的用户。


code/www/js/worksheet/worksheetedit.php

添加内容:

1》
//编辑资产放大镜
$layout->setAttributeEditFunc("Worksheet.Asset", "gblPageTabObject[gblCurrentTabName]._getAssetItem"); //资产
编辑或者添加$layout->setAttributeEditFunc(“属性名”,“js调用方法名”);
2》
gblPageTabObject[gblCurrentTabName]._getAssetItem = function (attrname, dataObj)
{
var ddo = tui.dd.getDDO(attrname);
var value = https://www.it610.com/article/eval("dataObj."+name2cname(attrname));

addID = eval("dataObj."+name2cname(ddo.ReferredBy));
var refNameAttrName = tui.dd.getNameAttrName(tui.dd.getObjectTypeByName(ddo.ReferObjName))
if(isObject(value))
value = https://www.it610.com/article/eval("value."+lastName(refNameAttrName));
else
valuehttps://www.it610.com/article/= "";


var vname = name2var(ddo.ReferredBy);

var item1 = tui.getObjectSelectItem(vname, ddo.ReferObjName,addID, value, "EditObjectSelectCB", "", "", "", "",true, false);


item1.allowBlank = true;
if ((ddo.EditCols < tui.w)||isBlank(ddo.EditCols))
item1.width = tui.w;
else
item1.width = ddo.EditCols;
if (ddo.IsRequired||ddo.SysRequired)
item1.allowBlank = false;
retItem = item1;


retItem.SelectAPC = gblPageTabObject[gblCurrentTabName]._GetCurrentAccount;

return retItem;


}

gblPageTabObject[gblCurrentTabName]._GetCurrentAccount = function (nomsg)
{
var ele =Ext.get(name2IDName(gblPageTabObject[gblCurrentTabName].CUR_OBJECT_NAME+".AccountID"));
var valuehttps://www.it610.com/article/= "";


if(isObject(ele))
value = https://www.it610.com/article/ele.getValue();

if(!isValidID(value))
valuehttps://www.it610.com/article/= "";
else
{
valuehttps://www.it610.com/article/= "Asset.AccountID:"+value;
}


//AJAX
var url = "/worksheet/worksheetajax.php";
var conn = Ext.lib.Ajax.getConnectionObject().conn;
conn.open("POST", url,false);
conn.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
conn.send();
var response = conn.responseText;


var responseObj = Ext.util.JSON.decode(conn.responseText);

if(responseObj.prodids != "")
//拼凑sql语句 TDD_OPER_INC含义为包含
value += "; Asset.ID:" + responseObj.prodids + ":" + TDD_OPER_INC;
//END


return value;
}



3》
编写ajax处理数据页面
code/www/js/worksheet/worksheetajax.php

内容:
include_once("tglobal.lib");
$debug = new CrmDebug();

global $gblDB;




$result = array();

//拼写sql语句。
$arrProd_id = array();
$stmt = new TSQLStmt();
$stmt->Table("tc_asset", "a");
$stmt->Table("tc_asset_d", "d");
$stmt->Join("a", "asset_id", "d", "asset_id");
$stmt->SelectString("distinct a.asset_id", "asset_id");
$stmt->Cond("a", "asset_id",0,"<>");
$stmt->Cond("d", "is_deleted",0,"=");
$sql = $stmt->SQLGen();
$rs = $gblDB->query($sql);


if ($gblDB->getErrNo()) {
throw new TDBException($gblDB->getErrNo());
}
if ($rs) {
while($rs->fetchRecord()) {
$arrProd_id[] = $rs->getFieldValueByName("asset_id");
}
$rs->close();
}


$prodids = "";
if(count($arrProd_id) > 0)
$prodids = implode(",", $arrProd_id);
$result['success'] = true;
$result['prodids'] = $prodids;

//返回值为查询语句where后的条件。
echo json_encode($result);


?>



《END 只显示包含明细的用户资产过滤完成》
2.点击明细零件名称放大镜,只显示该用户下的设备。
1》//
在地址:code/www/js/tdetail.js中添加,修改内容


//开始放大镜
function TD_MultiSelectObject(attrVarName)//(objType,dataObj,rowIdx,listIdx,actIdx)
{
Ext.EventObject.stopEvent();
var objName = removeTabID(attrVarName.substr(0,attrVarName.search("_")));
var curObj = getGridDtlEditorByName(objName);
var TypeID=curObj.MainDo.TypeID;
//添加过滤条件
if(objName=="WorksheetItem" &&TypeID=="72"){
Ext.EventObject.stopEvent();
var ddo = tui.dd.getDDO(curObj.mainAttr);
var apc = "";
var param = "";
var objName = ddo.ReferObjName;
var e = Ext.get(addTabID("Worksheet__AssetID"));
if (e)
AssetID = e.dom.value;
if (isValidID(AssetID)){
var url = "/worksheet/worksheetitemajax.php";
var conn = Ext.lib.Ajax.getConnectionObject().conn;
conn.open("POST", url,false);
conn.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
conn.send("AssetID="+AssetID);
var response = conn.responseText;
var responseObj = Ext.util.JSON.decode(response);
if(responseObj.prodids != "")
apc += "Product.ID:" + responseObj.prodids + ":" + TDD_OPER_INC;
}

OpenMuiltiSelectWindow(objName,curObj.mainAttr.replace(/\./g,"_"),"TD_MultiSelectCallBack",'',apc,param,false,false,false,true,curObj.condRelation);

}
else{

var ddo = tui.dd.getDDO(curObj.mainAttr);
if(ddo && ddo.IsRefObj)
{
//var attr = curObj.adaptor.selAttrName;
var apc = "";
if(curObj.condFunc)
{
apc = eval(curObj.condFunc+'()');
if(isBlank(apc) && (objName != "OpportunityItem")) return;
}
var param = "";
if(curObj.paramFunc)
{
param = eval(curObj.paramFunc+'()');
if(isBlank(param) && (objName != "OpportunityItem")) return;
}
var objName = ddo.ReferObjName;
if((ddo.ReferObjName == 'Product')&&(!curObj.isProduct) )
objName = 'PricebookItem';
OpenMuiltiSelectWindow(objName,curObj.mainAttr.replace(/\./g,"_"),"TD_MultiSelectCallBack",'',apc,param,false,false,false,true,curObj.condRelation);
}
return false;
}
}



// 添加行删除前放大镜 (1674,0,0,"TD_SingleSelectObject",0,"WorksheetItem")
function TD_ActionClick(recordId,listIdx, rowIndex, funcname, actIdx,objName)
{
var curObj = getGridDtlEditorByName(objName);
//var list = getPageListObject(listIdx);
//添加过滤条件--start
var TypeID=curObj.MainDo.TypeID;
if(objName=="WorksheetItem" && funcname=="TD_SingleSelectObject"&& TypeID=="72"){
Ext.EventObject.stopEvent();
var ddo = tui.dd.getDDO(curObj.mainAttr);
var apc = "";
var param = "";
var objName = ddo.ReferObjName;
var e = Ext.get(addTabID("Worksheet__AssetID"));
if (e)
AssetID = e.dom.value;
if (isValidID(AssetID)){
var url = "/worksheet/worksheetitemajax.php";
var conn = Ext.lib.Ajax.getConnectionObject().conn;
conn.open("POST", url,false);
conn.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
conn.send("AssetID="+AssetID);
var response = conn.responseText;
var responseObj = Ext.util.JSON.decode(response);
if(responseObj.prodids != "")
apc += "Product.ID:" + responseObj.prodids + ":" + TDD_OPER_INC;
}
var currentStore = curObj.gridPanel.getStore();
for(var i=0; i{
if(currentStore.data.keys[i] == recordId)
{
rowIndex=i;
break;
}
}
curObj.focusRowNumber = rowIndex;
OpenSingleSelectWindow(objName,curObj.mainAttr.replace(/\./g,"_"),curObj.CBName,'',apc,param,"",false,false,false,curObj.condRelation);
//END
}else{
if(funcname=="TD_SingleSelectObject"){
var NewcurObj = getGridDtlEditorByName(objName);
var currentStore = NewcurObj.gridPanel.getStore();
for(var i=0; i{
if(currentStore.data.keys[i] == recordId)
{
rowIndex=i;
break;
}
}
NewcurObj.focusRowNumber = rowIndex;
if (this.xtype == "combo")
{
var pEl = this.el.dom.parentElement.parentElement;
pEl.setAttribute("style","z-index:1; position: absolute");
}
if(isBlank(objName))
{
objName = removeTabID(this.el.dom.id.substr(0,this.el.dom.id.search("_")));
var curObj = getGridDtlEditorByName(objName);
}
else
var curObj = getGridDtlEditorByName(objName);
var ddo = tui.dd.getDDO(curObj.mainAttr);
if(ddo && ddo.IsRefObj)
{
var apc = "";
if(curObj.condFunc)
{
apc = eval(curObj.condFunc+'()');
if(isBlank(apc) && (objName != "OpportunityItem")) return;
}
else if(typeof this.SelectAPC == "function")
apc = this.SelectAPC();
else apc = this.SelectAPC;
var param = "";
if(curObj.paramFunc)
{
param = eval(curObj.paramFunc+'()');
if(isBlank(param) && (objName != "OpportunityItem")) return;
}
var objName = ddo.ReferObjName;
if((ddo.ReferObjName == 'Product')&&(!curObj.isProduct) )
objName = 'PricebookItem';
OpenSingleSelectWindow(objName,curObj.mainAttr.replace(/\./g,"_"),curObj.CBName,'',apc,param,"",false,false,false,curObj.condRelation); //TD_detailPopSelCB
}
return false;
}else{

var curObj = getGridDtlEditorByName(objName);
//var list = getPageListObject(listIdx);
var currentStore = curObj.gridPanel.getStore();
for(var i=0; i{
if(currentStore.data.keys[i] == recordId)
{
rowIndex=i;
break;
}
}
curObj.focusRowNumber = rowIndex;
return eval(funcname+"('',curObj.gridPanel.getStore().getAt(rowIndex).json,rowIndex,0,actIdx,objName)");
}
}
}




//添加行零件名称放大镜
function TD_SingleSelectObject(objType,dataObj,rowIdx,listIdx,actIdx,objName)
{
objName = removeTabID(this.el.dom.id.substr(0,this.el.dom.id.search("_")));
var curObj = getGridDtlEditorByName(objName);
var TypeID=curObj.MainDo.TypeID;
if(objName=="WorksheetItem"&& TypeID=="72"){
//过滤修改
Ext.EventObject.stopEvent();
var ddo = tui.dd.getDDO(curObj.mainAttr);
var apc = "";
var param = "";
var objName = ddo.ReferObjName;
var e = Ext.get(addTabID("Worksheet__AssetID"));
if (e)
AssetID = e.dom.value;
if (isValidID(AssetID)){
var url = "/worksheet/worksheetitemajax.php";
var conn = Ext.lib.Ajax.getConnectionObject().conn;
conn.open("POST", url,false);
conn.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
conn.send("AssetID="+AssetID);
var response = conn.responseText;
var responseObj = Ext.util.JSON.decode(response);
if(responseObj.prodids != "")
apc += "Product.ID:" + responseObj.prodids + ":" + TDD_OPER_INC;
}
OpenSingleSelectWindow(objName,curObj.mainAttr.replace(/\./g,"_"),curObj.CBName,'',apc,param,"",false,false,false,curObj.condRelation); //TD_detailPopSelCB
return false;
}else{
if (this.xtype == "combo")
{
var pEl = this.el.dom.parentElement.parentElement;
pEl.setAttribute("style","z-index:1; position: absolute");
}

if(isBlank(objName))
{
objName = removeTabID(this.el.dom.id.substr(0,this.el.dom.id.search("_")));
var curObj = getGridDtlEditorByName(objName);
}
else
var curObj = getGridDtlEditorByName(objName);
var ddo = tui.dd.getDDO(curObj.mainAttr);
if(ddo && ddo.IsRefObj)
{
var apc = "";
if(curObj.condFunc)
{
apc = eval(curObj.condFunc+'()');
if(isBlank(apc) && (objName != "OpportunityItem")) return;
}
else if(typeof this.SelectAPC == "function")
apc = this.SelectAPC();
else apc = this.SelectAPC;
var param = "";
if(curObj.paramFunc)
{
param = eval(curObj.paramFunc+'()');
if(isBlank(param) && (objName != "OpportunityItem")) return;
}
var objName = ddo.ReferObjName;
if((ddo.ReferObjName == 'Product')&&(!curObj.isProduct) )
objName = 'PricebookItem';
OpenSingleSelectWindow(objName,curObj.mainAttr.replace(/\./g,"_"),curObj.CBName,'',apc,param,"",false,false,false,curObj.condRelation); //TD_detailPopSelCB
}
return false;
}
}



2》ajax文件
创建ajax文件:code/www/js/worksheet/worksheetitemajax.php
内容:


include_once("tglobal.lib");
$dd = TDD_GetDatadict();
global $gblDB;
$zlhID = $_POST['AssetID']?$_POST['AssetID']:$_GET['AssetID'];
$result = array();
$arrProd_id = array();
$stmt = new TSQLStmt();
$stmt->Table("tc_asset", "c");
$stmt->Table("tc_asset_d", "d");
$stmt->Join("c", "asset_id", "d", "asset_id");
$stmt->SelectString("distinct d.prod_id", "prod_id");
$stmt->Cond("c", "asset_id", $zlhID);
$sql = $stmt->SQLGen();
$rs = $gblDB->query($sql);
if ($gblDB->getErrNo()) {
throw new TDBException($gblDB->getErrNo());
}
if ($rs) {
while($rs->fetchRecord()) {
$arrProd_id[] = $rs->getFieldValueByName("prod_id");
}
$rs->close();
}
$prodids = "";
if(count($arrProd_id) > 0)
$prodids = implode(",", $arrProd_id);
$result['success'] = true;
$result['prodids'] = $prodids;
echo json_encode($result);
?>



《END明细过滤完成》
3--点击保存后进行对保修时间的效验,检验提交保修的设备是否已经过了保修期

1.只添加一条明细,配件已经过了保修期提示:” 已经过了保修期 “ 。 2.添加多条明细,其中有配件已经过了保修期提示:“ 选中配件中有经过了保修期的配件 ”。 1》
代码位置code/worksheet/plugin/worksheetsave.lib
添加方法:
class BeforeSaveOutServiceDate extends TPrimitive
{
public function execute()
{
global $gblDB;
$prod_id = array();
$arrProd_id = array();
$do = $this->getTarget();
$asset_id=$do->AssetID;
$itemdo= $tdldo->subObj_Detail;
foreach ($do->subObj_Detail as $k=>$dtldo){
$prod_id[$k]=$dtldo->ProductID;
}
if(count($prod_id) > 0){
$prodids = implode(",", $prod_id);
}
$stmt = new TSQLStmt();
$stmt->Table("tc_asset_d", "c");
$stmt->SelectString("c.out_service_date", "outdate");
$stmt->Cond("c", "asset_id", $asset_id , "=");
$stmt->Cond("c", "prod_id","" ," IN($prodids)" );
$sql = $stmt->SQLGen();
$num=strlen($sql)-4;
$newsql=substr($sql,0,$num);
$sl=")";
$sql=$newsql."".$sl;
$rs = array();
$rs = $gblDB->query($sql);
if ($gblDB->getErrNo()) {
throw new TDBException($gblDB->getErrNo());
}
if ($rs) {
while($rs->fetchRecord()) {
$arrProd_id[] = $rs->getFieldValueByName("outdate");
}
$rs->close();
}
$day=array();
$dd = TDD_GetDatadict();
foreach($arrProd_id as $data){
if(strtotime($data)if(count($arrProd_id)>1){
throw new TException($dd->getStringRes("WORKSHEET_OUT_TIMEs"));
}
else{
throw new TException($dd->getStringRes("WORKSHEET_OUT_TIME"));
}
}
}
}
}



2》
添加xml位置code/worksheet/xml/worksheetsaver.xml
添加效验节点



《END时间效验完成》
【新建单据,放大镜过滤的添加。】

    推荐阅读