RenderUtil.js 103 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370
  1. /**
  2. * grid render
  3. */
  4. Ext.QuickTips.init();
  5. Ext.define('erp.util.RenderUtil', {
  6. /**
  7. * @PLM
  8. */
  9. render_change: function(val, meta, record){
  10. if(record && record.data.percentdone < 30)
  11. return '<img src="'+basePath+'resource/images/renderer/remind2.png">'+'<span style="color:#436EEE;padding-left:2px">' + val + '</span>';
  12. else if(record && record.data.percentdone > 30 && record.data.percentdone < 50)
  13. return '<img src="'+basePath+'resource/images/renderer/remind.png">'+'<span style="color:#5F9EA0;padding-left:2px">' + val + '</span>';
  14. else if(record && record.data.point == 100){
  15. return '<img src="'+basePath+'resource/images/renderer/award1.png">'+'<span style="color:blue;padding-left:2px">' + val + '</span>';
  16. }else if(record && record.data.point > 80){
  17. return '<img src="'+basePath+'resource/images/renderer/award2.png">'+'<span style="color:green;padding-left:2px">' + val + '</span>';
  18. }
  19. else return val;
  20. },
  21. /**
  22. * @PLM
  23. */
  24. plm_recordchange: function(val, meta, record){
  25. if(record && record.data.wr_percentdone == 100){
  26. if(record.data.wr_haveattach==1){
  27. return '<img src="'+basePath+'resource/images/renderer/finishrecord.png">'+'<span style="color:blue;padding-left:2px">' + val + '</span><img style="padding-right:2px" src="../../resource/images/renderer/attach.png">';
  28. }
  29. else return '<img src="'+basePath+'resource/images/renderer/finishrecord.png">'+'<span style="color:blue;padding-left:2px">' + val + '</span>';
  30. }
  31. else {
  32. if(record.data.wr_haveattach==1){
  33. return '<span style="color:green;padding-left:2px">' + val + '</span><img align="right" style="padding-right:2px" src="'+basePath+'resource/images/renderer/attach.png">';
  34. }
  35. else return '<span style="color:green;padding-left:2px">' + val + '</span>';
  36. }
  37. },
  38. /**
  39. * @PLM
  40. */
  41. plm_projectbudget:function(val,meta,record){
  42. if(record.data.cost>record.data.budget){
  43. return '<div class="color-column-inner" style="background-color:red" align="center">&nbsp;</div>';
  44. }else return '<div class="color-column-inner" style="background-color:green" align="center">&nbsp;</div>';
  45. },
  46. plm_projectchange: function(val, meta, record){
  47. if(record && record.data.prjplan_prjname == 'ERP')
  48. return '<img src="'+basePath+'resource/images/renderer/important.png">'+'<span style="color:blue;padding-left:2px">' + val + '</span>';
  49. else return '<span style="color:green;padding-left:2px">' + val + '</span>';
  50. },
  51. plm_reduce: function(val, meta, record, x, y, store, view){
  52. var me = this.RenderUtil || this;
  53. var field = this.columns[y].dataIndex;
  54. if(me.args){
  55. var arg = me.args.plm_reduce[field];
  56. var maxValue = 0;
  57. if(arg && arg.length > 0){
  58. var v = 0;
  59. Ext.each(arg, function(a, index){
  60. if(Ext.isNumber(a)){
  61. v = a;
  62. } else {
  63. v = record.data[a] || 0;
  64. }
  65. if(index == 0){
  66. maxValue = Number(v);
  67. } else {
  68. maxValue -= Number(v);
  69. }
  70. });
  71. }
  72. val = (val == null || val == 0) ? maxValue : val;
  73. if(record.data[field] != val){
  74. record.set(field, val);
  75. }
  76. if(val > 0){
  77. return '<img src="' + basePath + 'resource/images/icon/need.png">' +
  78. '<span style="color:blue;padding-left:2px">' + val + '</span>';
  79. } else if(val < 0){
  80. return 0;
  81. } else {
  82. return val;
  83. }
  84. } else {
  85. return val;
  86. }
  87. },
  88. /**
  89. * @PLM
  90. */
  91. plm_resource_rank:function(val,meta,record){
  92. if(record&&record.data.percentdone>89){
  93. return '<img src="'+basePath+'resource/images/renderer/start1.png">'+'<img src="'+basePath+'resource/images/renderer/start1.png">'+'<img src="'+basePath+'resource/images/renderer/start1.png">'+'<span style="color:blue;padding-left:2px">' + val + '</span>';
  94. }else if(record&&record.data.percentdone>69&&record.data.percentdone<90){
  95. return '<img src="'+basePath+'resource/images/renderer/start1.png">'+'<img src="'+basePath+'resource/images/renderer/start1.png">'+'<span style="color:blue;padding-left:2px">' + val + '</span>';
  96. }else if(record&&record.data.percentdone>50&&record.data.percentdone<70){
  97. return '<img src="'+basePath+'resource/images/renderer/start1.png">'+'<img src="'+basePath+'resource/images/renderer/start2.png">'+'<span style="color:blue;padding-left:2px">' + val + '</span>';
  98. }
  99. },
  100. /**
  101. *@PLM
  102. * */
  103. PLM_planstatus:function(val,meta,record){
  104. var statuscode=record.data['prjplan_statuscode'];
  105. if(statuscode=='FINISHED'){
  106. return '<img src="' + basePath + 'resource/images/renderer/finishrecord.png" >' +
  107. '<span style="color:green;padding-left:2px;">' + val + '</span>';
  108. }else if(statuscode=='DOING'){
  109. return '<img src="' + basePath + 'resource/images/renderer/doing.png" >' +
  110. '<span style="color:blue;padding-left:2px;">' + val + '</span>';
  111. }else return '<img src="' + basePath + 'resource/images/renderer/remind2.png" >'+'<span style="color:red;padding-left:2px;">' + val + '</span>';
  112. },
  113. PLM_MainTaskStatus:function(val,meta,record){
  114. var statuscode=record.data['handstatuscode'];
  115. if(statuscode=='FINISHED'){
  116. return '<img src="' + basePath + 'resource/images/renderer/finishrecord.png" >' +
  117. '<span style="color:green;padding-left:2px;">' + val + '</span>';
  118. }else if(statuscode=='DOING'){
  119. return '<img src="' + basePath + 'resource/images/renderer/doing.png" >' +
  120. '<span style="color:blue;padding-left:2px;">' + val + '</span>';
  121. }else if(statuscode=='ACTIVE'||statuscode=='STOP'){
  122. return '<img src="' + basePath + 'resource/images/renderer/key2.png" >' +
  123. '<span style="color:red;padding-left:2px;" >' + val + '</span>';
  124. }else {
  125. return '<img src="' + basePath + 'resource/images/renderer/key1.png">'+'<span style="color:#8B8B83;padding-left:2px ">' + val + '<a/></span>';
  126. }
  127. },
  128. PLM_TaskStatus:function(val,meta,record){
  129. var statuscode=record.data['ra_statuscode'];
  130. if(statuscode=='FINISHED'){
  131. return '<img src="' + basePath + 'resource/images/renderer/finishrecord.png" >' +
  132. '<span style="color:green;padding-left:2px;">' + val + '</span>';
  133. }else if(statuscode=='START'){
  134. return '<img src="' + basePath + 'resource/images/renderer/doing.png" >' +
  135. '<span style="color:blue;padding-left:2px;">' + val + '</span>';
  136. }else if(statuscode=='STOP'){
  137. return '<img src="' + basePath + 'resource/images/renderer/key1.png">'+'<span style="color:#8B8B83;padding-left:2px ">' + val + '<a/></span>';
  138. }else {
  139. return '<img src="' + basePath + 'resource/images/renderer/key2.png">'+'<span style="color:#8B8B83;padding-left:2px ">' + val + '<a/></span>';
  140. }
  141. },
  142. /**
  143. *@PLM
  144. * */
  145. plm_BUGAttach:function(val,meta,record){
  146. if(record&&record.data.cld_attach!=null&&record.data.cld_attach!=""){
  147. var attach=record.data.cld_attach;
  148. //var path="dsd";
  149. // return '<a href=' + basePath + 'common/downloadbyId.action>下载</a>';
  150. return '<img align= style="padding-left:2px" src="'+basePath+'resource/images/renderer/attach.png"></span>'+val+'</br><a href="' + basePath + 'common/downloadbyId.action?id='+attach.split(";")[1]+'">' + attach.split(";")[0] + '</a>';
  151. }else return '<img src="' + basePath + 'resource/images/icon/need.png" title="'+val+'">' +
  152. '<span style="color:blue;padding-left:2px;" title="'+val+'">' + val + '</span>';
  153. },
  154. plm_BUGTurn:function(val,meta,record){
  155. if(record&&record.data.cc_turn!=null&&record.data.cc_turn!=""){
  156. var turn=record.data.cc_turn;
  157. meta.style = "text-align:center";
  158. return '<sapn style="color:blue;padding-left:20px;">'+turn.split(";")[0]+'</span><img style="padding-left:10px;padding-top:3px;padding-right:10px;" src="'+basePath+'resource/images/renderer/turn.png">'+turn.split(";")[1];
  159. }else return "";
  160. },
  161. /**
  162. *@PLM
  163. * */
  164. plm_BUGStatus:function(val,meta,record){
  165. var statuscode=record.data.cld_statuscode?record.data.cld_statuscode:record.data.cbd_statuscode;
  166. if(statuscode=='PENDING'){
  167. return '<img src="' + basePath + 'resource/images/renderer/key2.png" title="'+val+'">' +
  168. '<span style="color:red;padding-left:2px;" title="'+val+'">' + val + '</span>';
  169. }else if(statuscode=='TESTING'){
  170. return '<img src="' + basePath + 'resource/images/renderer/test.png" title="'+val+'">' +
  171. '<span style="color:blue;padding-left:2px;" title="'+val+'">' + val + '</span>';
  172. }else if(statuscode=='HANDED'){
  173. return '<img src="' + basePath + 'resource/images/renderer/finishrecord.png" title="'+val+'">' +
  174. '<span style="color:green;padding-left:2px;" title="'+val+'">' + val + '</span>';
  175. }else if(statuscode=='NOTDEAL'){
  176. return '<img src="' + basePath + 'resource/images/renderer/key1.png" title="'+val+'">' +
  177. '<span style="color:#8B8B83;padding-left:2px;" title="'+val+'">' + val + '</span>';
  178. }
  179. },
  180. plm_BUGTest:function(val,meta,record){
  181. if(val&&val!=null){
  182. if(val=='-1'){
  183. return '<span style="color:green;padding-left:2px;" title="'+val+'">测试通过</span>';
  184. }else if(val=='0'){
  185. return '<span style="color:red;padding-left:2px;" title="'+val+'">测试失败</span>';
  186. }
  187. }else return null;
  188. },
  189. /**
  190. *稽核查看单据信息
  191. * */
  192. SysCheckHref:function(val,meta,record){
  193. var url=null;
  194. if(record.data.scd_url.indexOf('?')>0){
  195. if(record.data.sf_mainfield){
  196. //主从记录都有
  197. url=record.data.scd_url+"&formCondition="+record.data.sf_keyfield+"IS"+record.data.scd_sourceid+"&gridCondition="+record.data.sf_mainfield+"IS"+record.data.scd_sourceid;
  198. }else url=record.data.scd_url+"&formCondition="+record.data.sf_keyfield+"IS"+record.data.scd_sourceid;
  199. }else {
  200. if(record.data.sf_mainfield){
  201. //主从记录都有
  202. url=record.data.scd_url+"?formCondition="+record.data.sf_keyfield+"IS"+record.data.scd_sourceid+"&gridCondition="+record.data.sf_mainfield+"IS"+record.data.scd_sourceid;
  203. }else url=record.data.scd_url+"?formCondition="+record.data.sf_keyfield+"IS"+record.data.scd_sourceid;
  204. }
  205. return '<a href="javascript:openUrl(\''+url+'\');">' + val + '</a>';
  206. },
  207. /**
  208. *查看工作日程
  209. * */
  210. seeCalendar:function(val,meta,record){
  211. if(record.data.epd_emcode!=''&&record.data.epd_starttime!=null && record.data.epd_epid!=0){
  212. var time=Ext.Date.format(record.data.epd_starttime, 'Y-m-d');
  213. return "<input type='button' value='查看工作日程' name='detailbutton' style='color:gray;font-size:13px;cursor:pointer;height:25px;' onClick='Ext.getCmp(\"form\").seec(\""+record.data.epd_emcode+"\",\""+time+"\",\""+record.data.epd_epid+"\",\""+caller+"\")'>";
  214. }
  215. return '';
  216. },
  217. /**
  218. * 生产计划链接
  219. * */
  220. MakePlanHref:function(val,meta,record){
  221. var url='jsps/pm/make/makeBase.jsp?whoami=Make!Base';
  222. var code=record.data.ma_code;
  223. var keyValue=record.data.ma_id;
  224. url+='&formCondition=ma_idIS'+keyValue+'&gridCondition=mm_maidIS'+keyValue;
  225. return '<a href="javascript:openUrl(\''+url+'\');">' + code + '</a>';
  226. },
  227. /**
  228. * 生产计划链接
  229. * */
  230. MakeHref:function(val,meta,record){
  231. var url='jsps/pm/make/makeBase.jsp?whoami=Make';
  232. var code=record.data.ma_code;
  233. var keyValue=record.data.ma_id;
  234. url+='&formCondition=ma_idIS'+keyValue+'&gridCondition=mm_maidIS'+keyValue;
  235. return '<a href="javascript:openUrl(\''+url+'\');">' + code + '</a>';
  236. },
  237. /**
  238. * 应付发票 付款详情
  239. * */
  240. PayApbillHref:function(val,meta,record){
  241. var url='jsps/common/commonpage.jsp?whoami=PayAPBill';
  242. var code=record.data.ppdd_billcode;
  243. url+='&formCondition=ab_codeIS'+code+'&gridCondition=pa_codeIS'+code;
  244. return '<a href="javascript:openUrl(\''+url+'\');">' + code + '</a>';
  245. },
  246. /**
  247. * 采购订单链接
  248. * */
  249. PurchaseHref:function(val,meta,record){
  250. var url='jsps/scm/purchase/purchase.jsp';
  251. var code=record.data.vad_pucode;
  252. url+='?formCondition=pu_codeIS'+code+'&gridCondition=pd_codeIS'+code;
  253. return '<a href="javascript:openUrl(\''+url+'\');">' + code + '</a>';
  254. },
  255. /**
  256. * 付款申请单 应付发票链接
  257. * */
  258. ApbillHref:function(val,meta,record){
  259. var url='jsps/fa/ars/apbill.jsp?whoami=APBill!CWIM';
  260. var code=record.data.ppdd_billcode;
  261. url+='&formCondition=ab_codeIS'+code+'&gridCondition=abd_codeIS'+code;
  262. return '<a href="javascript:openUrl(\''+url+'\');">' + code + '</a>';
  263. },
  264. /**
  265. * 预付款申请单 采购订单链接
  266. * */
  267. PurcYFHref:function(val,meta,record){
  268. var url='jsps/scm/purchase/purchase.jsp';
  269. var code=record.data.ppdd_pucode;
  270. url+='?formCondition=pu_codeIS'+code+'&gridCondition=pd_codeIS'+code;
  271. return '<a href="javascript:openUrl(\''+url+'\');">' + code + '</a>';
  272. },
  273. /**
  274. *
  275. * 检验单链接
  276. * */
  277. IQCHref:function(val,meta,record){
  278. var url='jsps/scm/qc/verifyApplyDetail2.jsp?whoami=VerifyApplyDetail';
  279. var code=record.data.ve_code;
  280. url+='&formCondition=ve_codeIS'+code+'&gridCondition=ved_codeIS'+code;
  281. return '<a href="javascript:openUrl(\''+url+'\');">' + code + '</a>';
  282. },
  283. /*
  284. *点开链接
  285. */
  286. Href: function(val, meta, record,x,y){
  287. var me = this.RenderUtil || this;
  288. var field = this.columns[y].dataIndex;
  289. var KeyValue = 0;
  290. var url='';
  291. var title='';
  292. var arg = me.args.Href[field];
  293. var keyField=arg[0];
  294. var data=record.data;
  295. if(arg && arg.length > 0){
  296. KeyValue=data[keyField];
  297. url=arg[1];
  298. title=arg[2];
  299. }
  300. if(val==''||val==$I18N.common.grid.emptyText) return val;
  301. if(keyField.indexOf('code')>=0){
  302. return '<a href="javascript:openFormUrl(\'' + KeyValue + '\',\''+keyField+'\',\''+url+'\',\''+title+'\''+ ');">' + val + '</a>';
  303. }
  304. return '<a href="javascript:openFormUrl(' + KeyValue + ',\''+keyField+'\',\''+url+'\',\''+title+'\''+ ');">' + val + '</a>';
  305. },
  306. /**
  307. * 生产计划已分拆
  308. * */
  309. MakePlanSplited:function(val,meta,record){
  310. if(record.data.ma_version){
  311. meta.tdCls = "x-grid-cell-renderer-cl";
  312. }
  313. },
  314. SysCheckStatus:function(val,meta,record){
  315. var statuscode=record.data.scd_statuscode;
  316. if(statuscode=='UNEXECUTE'){
  317. return '<img src="' + basePath + 'resource/images/icon/execute.png">' +
  318. '<span style="color:red;padding-left:2px">' + val + '</span>';
  319. }else if(statuscode=='EXECUTE'){
  320. return '<img src="' + basePath + 'resource/images/renderer/finishrecord.png">' +
  321. '<span style="color:green;padding-left:2px">' + val + '</span>';
  322. }else if(statuscode='FREEZE') return '<img src="' + basePath + 'resource/images/renderer/locked.png">' +
  323. '<span style="color:blue;padding-left:2px">' + val+ '</span>';
  324. else return null;
  325. },
  326. SysCheckMethod:function(val,meta,record){
  327. var method=record.data.scd_method;
  328. if(method=='-1'){
  329. return '<span style="color:red;padding-left:2px">扣分</span>';
  330. }else if(method=='0') return '<span style="color:blue;padding-left:2px">提醒</span>';
  331. else return null;
  332. },
  333. SysCheckPunish:function(val,meta,record){
  334. var method=record.data.scd_method;
  335. meta.align='left';
  336. if(record.data.scd_ispunished=='-1'){
  337. return '<span style="color:blue;padding-left:2px">已生成</span>';
  338. }else if(record.data.scd_ispunished=='0'&&method=='-1'){
  339. return '<span style="color:green;padding-left:2px">未生成</span>';
  340. }else return '<span style="color:#8B8B83;padding-left:2px">无</span>';
  341. },
  342. /**
  343. * 显示所有信息
  344. * */
  345. showAll:function(val,meta,record){
  346. if(val&&val!=null&&val.length>20){
  347. return val.substring(0,20)+'<button onClick="javascript:showAll(' + '\''+val+'\'' +');">详细</button>';
  348. }else return val;
  349. },
  350. /**
  351. * 通过args传递参数到function
  352. */
  353. args: new Object(),
  354. /**
  355. * 公式计算
  356. * 通用方法
  357. * @expression formula:pd_orderprice/(1+pd_taxrate/100)*pd_inqty
  358. *
  359. */
  360. formula: function(val, meta, record, x, y, store, view){
  361. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y],field = column.dataIndex;
  362. var editvalue=val;
  363. if(!me || !me.args){
  364. grid = grid.ownerCt, me = grid.RenderUtil;
  365. if(!me || !me.args){
  366. return val;
  367. }
  368. }
  369. var arg = me.args.formula[field];
  370. if(arg && arg.length > 0){
  371. var data = record.data,keys = Ext.Object.getKeys(data),formu = arg[0];
  372. Ext.each(keys, function(k){
  373. if(contains(formu, k, true)) {
  374. formu = formu.replace(new RegExp(k,"gm"), '(' + data[k] + ')');
  375. }
  376. });
  377. var d = 0;
  378. try {
  379. d = eval(formu);
  380. } catch (e) {
  381. d = 0;
  382. }
  383. if(d == null || d == '' || String(d) == 'NaN' || String(d).length == 0)
  384. d = 0;
  385. var _val = val, _d = d;
  386. if(column.format) {
  387. _val = Ext.util.Format.number(val, column.format);
  388. _d = Ext.util.Format.number(d, column.format);
  389. }
  390. val = _val;
  391. //用原值赋值
  392. if(_val != _d) {
  393. val = d;
  394. record.set(field, d);
  395. val = _d;
  396. }
  397. }
  398. if(record.get(field) != 0)
  399. return val;
  400. return "";
  401. },
  402. /**
  403. * 通过args传递参数到function
  404. */
  405. args: new Object(),
  406. /**
  407. * 公式计算
  408. * 通用方法
  409. * @expression formula:pd_orderprice/(1+pd_taxrate/100)*pd_inqty
  410. */
  411. _formula: function(val, meta, record, x, y, store, view){
  412. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y],field = column.dataIndex;
  413. if(!me || !me.args){
  414. grid = grid.ownerCt, me = grid.RenderUtil;
  415. if(!me || !me.args){
  416. return val;
  417. }
  418. }
  419. var arg = me.args._formula[field];
  420. if(arg && arg.length > 0){
  421. var data = record.data,keys = Ext.Object.getKeys(data),formu = arg[0];
  422. Ext.each(keys, function(k){
  423. if(contains(formu, k, true)) {
  424. formu = formu.replace(new RegExp(k,"gm"), '(' + data[k] + ')');
  425. }
  426. });
  427. var d = 0;
  428. try {
  429. d = eval(formu);
  430. } catch (e) {
  431. d = 0;
  432. }
  433. if(d == null || d == '' || String(d) == 'NaN' || String(d).length == 0)
  434. d = 0;
  435. var fsize = (column.format && column.format.indexOf('.') > -1) ?
  436. column.format.substr(column.format.indexOf('.') + 1).length : 2,
  437. _d = d.toFixed(fsize);
  438. //按设置的格式长度赋值
  439. if(val != _d) {
  440. record.set(field, _d);
  441. val = _d;
  442. }
  443. val = Ext.util.Format.number(val, column.format || '0,000.00');
  444. }
  445. if(record.get(field) != 0)
  446. return val;
  447. return "";
  448. },
  449. /**
  450. * 公式计算
  451. * 通用方法
  452. * @expression formula:pd_orderprice/(1+pd_taxrate/100)*pd_inqty
  453. */
  454. overqty: function(val, meta, record, x, y, store, view){
  455. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y],field = column.dataIndex;
  456. if(!me || !me.args){
  457. grid = grid.ownerCt, me = grid.RenderUtil;
  458. if(!me || !me.args){
  459. return val;
  460. }
  461. }
  462. var arg = me.args.overqty[field];
  463. if(arg && arg.length > 0){
  464. var data = record.data,keys = Ext.Object.getKeys(data),formu = arg[0];
  465. Ext.each(keys, function(k){
  466. if(contains(formu, k, true)) {
  467. formu = formu.replace(new RegExp(k,"gm"), '(' + data[k] + ')');
  468. }
  469. });
  470. var d = 0;
  471. try {
  472. d = eval(formu);
  473. } catch (e) {
  474. d = 0;
  475. }
  476. if(d == null || d == '' || String(d) == 'NaN' || String(d).length == 0)
  477. d = 0;
  478. var _val = val, _d = d;
  479. if(column.format) {
  480. _val = Ext.util.Format.number(val, column.format);
  481. _d = Ext.util.Format.number(d, column.format);
  482. }
  483. val = _val;
  484. if(_val != _d) {
  485. //鉴于小数问题 保留2位小数
  486. if(column.editor || (column.getEditor && column.getEditor())) {
  487. val = (!Ext.isNumber(val) || val == 0) ? d : val;
  488. if(Number(val) - d > 0){
  489. val = d;
  490. showError('请不要输入超过最大数量' + d + "的值!");
  491. }
  492. } else {
  493. val = d;
  494. }
  495. var _v = val;
  496. if(column.xtype == 'numbercolumn') {
  497. _v = Ext.util.Format.number(val, column.format);
  498. }
  499. if(Ext.util.Format.number(record.data[field], column.format) != _v){
  500. record.set(field, val);
  501. }
  502. return _v;
  503. } else {
  504. return val;
  505. }
  506. }
  507. },
  508. /**
  509. * 公式计算
  510. * 通用方法
  511. * @expression eval:pd_orderprice/(1+pd_taxrate/100)*pd_inqty
  512. */
  513. eval: function(val, meta, record, x, y, store, view){
  514. meta.tdCls = "x-grid-cell-renderer-bl";
  515. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y],field = column.dataIndex;
  516. if(!me || !me.args){
  517. grid = grid.ownerCt, me = grid.RenderUtil;
  518. if(!me || !me.args){
  519. return val;
  520. }
  521. }
  522. var arg = me.args.eval[field];
  523. if(arg && arg.length > 0){
  524. val = record.get(field);
  525. var data = record.data,keys = Ext.Object.getKeys(data),formu = arg[0];
  526. Ext.each(keys, function(k){
  527. if(contains(formu, k, true)) {
  528. formu = formu.replace(new RegExp(k,"gm"), '(' + data[k] + ')');
  529. }
  530. });
  531. var d = 0;
  532. try {
  533. d = eval(formu);
  534. } catch (e) {
  535. d = 0;
  536. }
  537. if(d == null || d == '' || String(d) == 'NaN' || String(d).length == 0)
  538. return val;
  539. var _val = val, _d = d;
  540. if(column.format) {
  541. _val = Ext.util.Format.number(val, column.format);
  542. _d = Ext.util.Format.number(d, column.format);
  543. }
  544. if(_val != _d) {
  545. if(record.modified == null || record.modified[field] == null) {
  546. val = d;
  547. record.set(field, d);
  548. record.modified[field] = d;
  549. }
  550. }
  551. }
  552. return val;
  553. },
  554. /**
  555. * 适用于所有日期类型
  556. * 超时提示
  557. * 当v < 当前日期时,表示超时
  558. * 需要在dataListDetail表的dld_render 配置 overtime:{dateField}
  559. * 注意:日期类型貌似不能直接render,所以要借助其他字段
  560. * @expression overtime:pu_delivery
  561. */
  562. overtime: function(val, meta, record, x, y, store, view){
  563. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y],field = column.dataIndex;
  564. if(!me || !me.args){
  565. grid = grid.ownerCt, me = grid.RenderUtil;
  566. if(!me || !me.args){
  567. return val;
  568. }
  569. }
  570. var d = new Date();
  571. var arg = me.args.overtime[field];
  572. if(arg && arg.length > 0){
  573. d = record.data[arg[0]];//me.args[0]为需要逻辑判断的日期字段
  574. }
  575. if(!Ext.isDate(d)){
  576. d = Ext.Date.parse(d, 'Y-m-d H:i:s') || Ext.Date.parse(d, 'Y-m-d');
  577. }
  578. if(d < new Date()){
  579. return '<img src="' + basePath + 'resource/images/renderer/important.png" title="时间结束:' + Ext.Date.toString(d) + '">' +
  580. '<span style="color:blue;padding-left:2px" title="时间结束:' + Ext.Date.toString(d) + '">' + val + '</span>';
  581. } else {
  582. return val;
  583. }
  584. },
  585. pd_auditstatus_show:function(val, meta, record, x, y, store, view){
  586. var grid = view.ownerCt,column = grid.columns[y],field = column.dataIndex;
  587. var returnStr;
  588. if(val == 'PARTAR'||val == '部分开票'){
  589. returnStr = '部分开票';
  590. }else if(val == 'TURNAR'||val == '已开票'){
  591. returnStr = '已开票';
  592. }else{
  593. returnStr = '未开票';
  594. }
  595. if(val != returnStr) {
  596. val = returnStr;
  597. record.set(field, val);
  598. }
  599. return val;
  600. },
  601. defaultValue:function(val, meta, record, x, y, store, view){
  602. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y],field = column.dataIndex;
  603. if(val == null || val == '' || val == 0){
  604. if(!me || !me.args){
  605. grid = grid.ownerCt, me = grid.RenderUtil;
  606. if(!me || !me.args){
  607. return val;
  608. }
  609. }
  610. var v = record.data[field];
  611. if(v == null || v == '' || (column.xtype == 'numbercolumn' && v == 0)){
  612. var arg = me.args.defaultValue[field];
  613. if(arg && arg.length > 0){
  614. val = arg[0];
  615. }
  616. if(val != null && val != '' && val != 0){
  617. record.set(field, val);
  618. }
  619. }
  620. }
  621. if(column.xtype == 'numbercolumn' && val != 0){
  622. val = Ext.util.Format.number(val, column.format);
  623. }
  624. return val;
  625. },
  626. /**
  627. * 解析链接,并打开
  628. * @expression jsps/scm/sale/sendnotify.jsp?formConditionISsn_id={snd_snid}&gridConditionISsnd_snid={snd_snid}
  629. */
  630. link: function(val, m, record, x, y, store, view) {
  631. var grid = view.ownerCt, me = grid.RenderUtil,column = grid.columns[y], url = column.logic || (me.args ? me.args.link[column.dataIndex][0] : '');
  632. if(url) {
  633. var res = '';
  634. if(url == 'necessaryField' || url == 'orNecessField') {
  635. if(!val)
  636. res = '<img src="' + basePath + 'resource/images/icon/need.png" title="必填字段">';
  637. url = me.args ? me.args.link[column.dataIndex][0] : '';
  638. }
  639. var index = 0, length = url.length, s, e;
  640. while(index < length) {
  641. if((s = url.indexOf('{', index)) != -1 && (e = url.indexOf('}', s + 1)) != -1) {
  642. url = url.substring(0, s) + record.get(url.substring(s+1, e)) + url.substring(e+1);
  643. index = e + 1;
  644. } else {
  645. break;
  646. }
  647. }
  648. return res + '<a href="javascript:openUrl(\'' + url + '\');">' + val + '</a>';
  649. }
  650. return val;
  651. },
  652. /**
  653. * val不能小于当前日期
  654. * @expression undertime
  655. */
  656. undertime: function(val, meta, record, x, y, store, view){
  657. meta.style = "background:#C6E2FF;";
  658. var d = Ext.Date.parse(Ext.Date.toString(new Date()), 'Y-m-d');
  659. var grid = view.ownerCt,column = grid.columns[y],field = column.dataIndex;
  660. val = record.data[field];
  661. if(val == null) {
  662. val = Ext.Date.toString(d);
  663. } else {
  664. if(!Ext.isDate(val)){
  665. val = Ext.Date.parse(val, 'Y-m-d');
  666. }
  667. if(val < d){
  668. val = Ext.Date.toString(d);
  669. showError("日期不能小于当前日期!");
  670. } else {
  671. val = Ext.Date.toString(new Date(val));
  672. }
  673. }
  674. if(Ext.isDate(record.data[field])){
  675. if(Ext.Date.toString(record.data[field]) != val){
  676. record.set(field, val);
  677. }
  678. } else {
  679. if(record.data[field] != val){
  680. record.set(field, val);
  681. }
  682. }
  683. return val;
  684. },
  685. /**
  686. * 适用于所有数字类型
  687. * 数量过大提示
  688. * 当val > d时,表示过大
  689. * 需要在dataListDetail表的dld_render 配置 oversize:{num}
  690. * @expression oversize:100
  691. * @expression oversize:pd_qty
  692. */
  693. oversize: function(val, meta, record, x, y, store, view){
  694. meta.style = "background:#C6E2FF;";
  695. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y],field = column.dataIndex;
  696. if(!me || !me.args){
  697. grid = grid.ownerCt, me = grid.RenderUtil;
  698. if(!me || !me.args){
  699. return val;
  700. }
  701. }
  702. var d = val;
  703. var arg = me.args.oversize[field];
  704. if(arg && arg.length > 0){
  705. if(Ext.isNumber(arg[0])){
  706. d = Number(arg[0]);
  707. } else {
  708. d = Number(record.data[arg[0]]);
  709. }
  710. }
  711. if(val > d){
  712. return '<img src="' + basePath + 'resource/images/renderer/important.png" title="数值过大:' + val + '>' + d + '">' +
  713. '<span style="color:blue;padding-left:2px" title="数值过大:' + val + '>' + d + '">' + val + '</span>';
  714. } else {
  715. return val;
  716. }
  717. },
  718. /**
  719. * 适用于所有数字类型
  720. * 数量过小提示
  721. * 当val < d时,表示过小
  722. * 需要在dataListDetail表的dld_render 配置 undersize:{num}
  723. * @param arg为number类型或某字段
  724. * @expression undersize:100
  725. * @expression undersize:pd_yqty
  726. */
  727. undersize: function(val, meta, record, x, y, store, view){
  728. meta.style = "background:#CDB5CD;";
  729. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y],field = column.dataIndex,uCol = null;
  730. if(!me || !me.args){
  731. grid = grid.ownerCt, me = grid.RenderUtil;
  732. if(!me || !me.args){
  733. return val;
  734. }
  735. }
  736. var d = val;
  737. var arg = me.args.undersize[field];
  738. if(arg && arg.length > 0){
  739. if(!Ext.isNumber(Number(arg[0]))){
  740. d = Number(record.data[arg[0]]);
  741. var rr = grid.columns.filter(function(c){
  742. return c.dataIndex == arg[0];
  743. });
  744. if(rr.length > 0) {
  745. uCol = rr[0];
  746. }
  747. } else {
  748. d = Number(arg[0]);
  749. }
  750. }
  751. if(record.data[field] != val){
  752. record.set(field, val);
  753. }
  754. if(!Ext.isNumber(val)){
  755. val = d;
  756. record.set(field, val);
  757. showError('请输入数字!');
  758. } else{
  759. if(val < d){
  760. if(val != 0) {
  761. var err = '请不要输入低于';
  762. if(uCol != null) {
  763. err += '<' + uCol.text + '>';
  764. }
  765. showError(err + '<' + d + ">的值!");
  766. }
  767. val = d;
  768. record.set(field, val);
  769. }
  770. }
  771. var str = val;
  772. if(column.format) {
  773. str = Ext.util.Format.number(val, column.format);
  774. }
  775. if(val < d){
  776. return '<img src="' + basePath + 'resource/images/renderer/important.png" title="数值过小:' + val + '<' + d + '">' +
  777. '<span style="color:blue;padding-left:2px" title="数值过小:' + val + '<' + d + '">' + str + '</span>';
  778. } else {
  779. return str;
  780. }
  781. },
  782. /**
  783. * 适用于所有数字类型
  784. * 数量介于{min}~{max}
  785. * @expression betweensize:0:100
  786. * @expression betweensize:0:pd_qty
  787. * @expression betweensize:pd_tqty:pd_qty
  788. */
  789. betweensize: function(val, meta, record, x, y, store, view){
  790. meta.style = "background:#C6E2FF;";
  791. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y],field = column.dataIndex;
  792. if(!me || !me.args){
  793. grid = grid.ownerCt, me = grid.RenderUtil;
  794. if(!me || !me.args){
  795. return val;
  796. }
  797. }
  798. var arg = me.args.betweensize[field];
  799. var min = 0;
  800. var max = 0;
  801. if(arg && arg.length > 0){
  802. if(!Ext.isNumber(Number(arg[0]))){
  803. min = record.modified[arg[0]];
  804. } else {
  805. min = Number(arg[0]);
  806. }
  807. if(!Ext.isNumber(Number(arg[1]))){
  808. max = record.modified[arg[1]];
  809. } else {
  810. max = Number(arg[1]);
  811. }
  812. }
  813. if(record.data[field] != val){
  814. record.set(field, val);
  815. }
  816. if(!Ext.isNumber(val)){
  817. val = max;
  818. record.set(field, val);
  819. showError('请输入数字!');
  820. } else{
  821. if(val < min){
  822. val = max;
  823. record.set(field, val);
  824. showError('请不要输入低于' + min + "的值!");
  825. } else if(val > max){
  826. val = max;
  827. record.set(field, val);
  828. showError('请不要输入大于' + max + "的值!");
  829. }
  830. }
  831. if(val < min){
  832. return '<img src="' + basePath + 'resource/images/renderer/important.png" title="数值过小:' + val + '<' + min + '">' +
  833. '<span style="color:blue;padding-left:2px" title="数值过小:' + val + '<' + min + '">' + val + '</span>';
  834. } else if(val > max){
  835. return '<img src="' + basePath + 'resource/images/renderer/important.png" title="数值过大:' + val + '<' + max + '">' +
  836. '<span style="color:blue;padding-left:2px" title="数值过大:' + val + '<' + max + '">' + val + '</span>';
  837. } else {
  838. return val;
  839. }
  840. },
  841. /**
  842. * 通用方法
  843. * 值是否为空
  844. * @expression isnull
  845. */
  846. isnull: function(val, meta, record){
  847. meta.style = "background:#C6E2FF;";
  848. if(val == null || val == ''){
  849. return '<img src="' + basePath + 'resource/images/renderer/important.png" title="无数据">' +
  850. '<span style="color:blue;padding-left:2px" title="无数据">' + val + '</span>';
  851. } else {
  852. return val;
  853. }
  854. },
  855. /**
  856. * 通用方法
  857. * 值=arg[0]+arg[1]+...
  858. * @expression plus:pd_tqty:pd_yqty
  859. * @expression plus:pd_tqty:100:pd_yqty
  860. */
  861. plus: function(val, meta, record, x, y, store, view){
  862. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y],field = column.dataIndex,format = column.format,type = column.xtype;
  863. if(!me || !me.args){
  864. grid = grid.ownerCt, me = grid.RenderUtil;
  865. if(!me || !me.args){
  866. return val;
  867. }
  868. }
  869. var d = 0;
  870. var arg = me.args.plus[field];
  871. if(arg && arg.length > 0){
  872. Ext.each(arg, function(a, index){
  873. if(Ext.isNumber(a)){
  874. d += Number(a);
  875. } else {
  876. d += Number(record.data[a]);
  877. }
  878. if(format&&type =='numbercolumn'){
  879. d = Ext.util.Format.number(d,format);
  880. }
  881. });
  882. }
  883. if(record.data[field] != d){
  884. record.set(field, d);
  885. }
  886. return '<img src="' + basePath + 'resource/images/renderer/finishrecord.png">' +
  887. '<span style="color:blue;padding-left:2px">' + d + '</span>';
  888. },
  889. /**
  890. * 通用乘法方法
  891. * 值=arg[0]*arg[1]*...
  892. * @expression multiply:pd_tqty:pd_price
  893. * @expression multiply:pd_tqty:100:pd_rate
  894. */
  895. multiply: function(val, meta, record, x, y, store, view){
  896. var grid = view.ownerCt, me = grid.RenderUtil,column = grid.columns[y],field = column.dataIndex,format = column.format,type = column.xtype;
  897. if(!me || !me.args){
  898. grid = grid.ownerCt, me = grid.RenderUtil;
  899. if(!me || !me.args){
  900. return val;
  901. }
  902. }
  903. var d = 1;
  904. var red= d;
  905. var arg = me.args.multiply[field];
  906. if(arg && arg.length > 0){
  907. Ext.each(arg, function(a, index){
  908. if(Ext.isNumber(a)){
  909. d = d * Number(a);
  910. } else {
  911. d = d * Number(record.data[a]);
  912. }
  913. if(format&&type =='numbercolumn'){
  914. red = Ext.util.Format.number(d,format);
  915. }else{
  916. red = d;
  917. }
  918. });
  919. }
  920. if(record.data[field] != d){
  921. record.set(field, d);
  922. }
  923. return '<img src="' + basePath + 'resource/images/renderer/finishrecord.png">' +
  924. '<span style="color:blue;padding-left:2px">' + red + '</span>';
  925. },
  926. /**
  927. * 通用方法
  928. * A floating:B
  929. * 比较A相对于B的浮动变化
  930. * @expression floating:B
  931. */
  932. floating: function(val, meta, record, x, y, store, view) {
  933. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y],field = column.dataIndex;
  934. if(!me || !me.args){
  935. return val;
  936. }
  937. var arg = me.args.floating[field], a = null, b = null, f = null, n = null, istxt = true;
  938. if(column.xtype == 'datecolumn') {
  939. if(!val) return null;
  940. a = record.get(arg);
  941. b = val;
  942. f = (column.format || 'Y-m-d');
  943. n = Ext.Date.format(val, f);
  944. istxt = false;
  945. } else if(column.xtype == 'numbercolumn') {
  946. a = Number(record.get(arg));
  947. b = Number(val);
  948. f = (column.format || '0,000');
  949. n = Ext.util.Format.number(val, f);
  950. istxt = false;
  951. } else {
  952. a = record.get(arg);
  953. b = val;
  954. }
  955. if(istxt) {
  956. if(a != b) {
  957. return '<span style="color:red;padding-left:2px">' + val + '</span>';
  958. } else {
  959. return val;
  960. }
  961. } else {
  962. if(a < b) {
  963. return '<img src="' + basePath + 'resource/images/16/up.png">' +
  964. '<span style="color:red;padding-left:2px">' + n + '</span>';
  965. } else if(a > b) {
  966. return '<img src="' + basePath + 'resource/images/16/down.png">' +
  967. '<span style="color:red;padding-left:2px">' + n + '</span>';
  968. } else if(a == 0 && b == 0) {
  969. return '';
  970. }
  971. }
  972. return n;
  973. },
  974. ars_prodtoapbill_outqty:function(val, meta, record, x, y){
  975. var inqty = 0;
  976. var outqty = 0;
  977. var returnqty = 0;
  978. if(record.data['pd_inqty']!=null&&record.data['pd_inqty']){
  979. inqty = Ext.Number.from(record.data['pd_inqty'],0);
  980. }
  981. if(record.data['pd_outqty']!=null&&record.data['pd_outqty']){
  982. inqty = Ext.Number.from(record.data['pd_inqty'],0);
  983. }
  984. returnqty=outqty-inqty;
  985. if(val != returnqty){
  986. record.set('pd_outqty', returnqty);
  987. val = returnqty;
  988. }
  989. return val;
  990. },
  991. ars_prodtoarbill_price:function(val, meta, record, x, y){
  992. var orderprice = 0.00;
  993. var sendprice = 0.00;
  994. var returnprice = 0.00;
  995. if(record.data['pd_orderprice']!=null&&record.data['pd_orderprice']){
  996. orderprice = Ext.Number.from(record.data['pd_orderprice'],0.00);
  997. }
  998. if(record.data['pd_sendprice']!=null&&record.data['pd_sendprice']){
  999. sendprice = Ext.Number.from(record.data['pd_sendprice'],0.00);
  1000. }
  1001. returnprice=Math.abs(orderprice-sendprice);
  1002. returnprice=Ext.util.Format.number(returnprice,'0.00');
  1003. if(val != returnprice){
  1004. record.set('pd_showprice', returnprice);
  1005. val = returnprice;
  1006. }
  1007. return val;
  1008. },
  1009. /**
  1010. * 出货数量 outqty - inqty
  1011. * @param val
  1012. * @param meta
  1013. * @param record
  1014. * @param x
  1015. * @param y
  1016. * @returns
  1017. */
  1018. ars_prodtoapbill_outqty:function(val, meta, record, x, y){
  1019. var inqty = 0;
  1020. var outqty = 0;
  1021. var returnqty = 0;
  1022. if(record.data['pd_inqty']!=null&&record.data['pd_inqty']){
  1023. inqty = Ext.Number.from(record.data['pd_inqty'],0);
  1024. }
  1025. if(record.data['pd_outqty']!=null&&record.data['pd_outqty']){
  1026. outqty = Ext.Number.from(record.data['pd_outqty'],0);
  1027. }
  1028. returnqty=outqty-inqty;
  1029. if(val != returnqty){
  1030. record.set('pd_showqty', returnqty);
  1031. val = returnqty;
  1032. }
  1033. return val;
  1034. },
  1035. /**
  1036. * @CRM
  1037. * 客户关系商机状态显示
  1038. */
  1039. chanceAllstatus: function(val, meta, record,x,y){
  1040. var code=record.data['cd_chancecode'];
  1041. var str=val.replace(/1/g,'√');
  1042. str=str.replace(/0/g,'O');
  1043. return '<a href="javascript:showchancestatus(' + '\''+code+'\'' +');">' + str + '</a>';
  1044. },
  1045. /**
  1046. * @CRM
  1047. * 客户关系商机状态显示
  1048. */
  1049. chancestatus: function(val, meta, record,x,y){
  1050. var str='';
  1051. if(val=='0'){
  1052. str='O';
  1053. }
  1054. if(val=='1'){
  1055. str='√';
  1056. }
  1057. return str;
  1058. },
  1059. /**
  1060. * @CRM
  1061. * 客户关系商机状态显示
  1062. */
  1063. inquiryturnstatus: function(val, meta, record,x,y){
  1064. var str='';
  1065. if(val=='0'){
  1066. str='否';
  1067. }
  1068. if(val=='1'){
  1069. str='未选择';
  1070. }
  1071. if(val=='-1'){
  1072. str='是';
  1073. }
  1074. return str;
  1075. },
  1076. oameeting:function(val,meta, record){
  1077. if(val=='0'){
  1078. return ' ';
  1079. }
  1080. var url='jsps/oa/meeting/meetingroomapply.jsp';
  1081. var title='会议室申请单';
  1082. return '<a href="javascript:openGridUrl(\''+val+'\''+',\'ma_id\',\'mad_maid\',\''+url+'\',\''+title+'\''+ ');">' + '√' + '</a>';
  1083. },
  1084. /**
  1085. * 验收数量 inqty - outqty
  1086. * @param val
  1087. * @param meta
  1088. * @param record
  1089. * @param x
  1090. * @param y
  1091. * @returns
  1092. */
  1093. ars_prodtoapbill_inqty:function(val, meta, record, x, y){
  1094. var inqty = 0;
  1095. var outqty = 0;
  1096. var returnqty = 0;
  1097. if(record.data['pd_inqty']!=null&&record.data['pd_inqty']){
  1098. inqty = Ext.Number.from(record.data['pd_inqty'],0);
  1099. }
  1100. if(record.data['pd_outqty']!=null&&record.data['pd_outqty']){
  1101. outqty = Ext.Number.from(record.data['pd_outqty'],0);
  1102. }
  1103. returnqty=inqty-outqty;
  1104. if(val != returnqty){
  1105. record.set('pd_showqty', returnqty);
  1106. val = returnqty;
  1107. }
  1108. return val;
  1109. },
  1110. /**
  1111. * 验收数量的绝对值 pd_inqty -已经转发票数量 pd_showinvoqty = 本次可转发票数量 pd_thisvoqty
  1112. * @param val
  1113. * @param meta
  1114. * @param record
  1115. * @param x
  1116. * @param y
  1117. * @returns
  1118. */
  1119. ars_prodtoapbill_thisqty:function(val, meta, record, x, y){
  1120. meta.style = "background:#C6E2FF;";
  1121. //pd_thisvoqty = pd_inqty-pd_showinvoqty inqty要绝对值
  1122. var thisvoqty = 0;
  1123. var inqty = 0;
  1124. var invoqty = 0;
  1125. if(record.data['pd_showqty']!=null&&record.data['pd_showqty']!=''){
  1126. inqty = Math.abs(Ext.Number.from(record.data['pd_showqty'],0));
  1127. }
  1128. if(record.data['pd_showinvoqty']!=null&&record.data['pd_showinvoqty']){
  1129. invoqty = Ext.Number.from(record.data['pd_showinvoqty'],0);
  1130. }
  1131. thisvoqty=inqty-invoqty;
  1132. if(val != thisvoqty){
  1133. record.set('pd_thisvoqty', thisvoqty);
  1134. val = thisvoqty;
  1135. }
  1136. return val;
  1137. },
  1138. /**
  1139. * 出入库单号链接
  1140. *
  1141. **/
  1142. ProdioHref:function(val,meta,record){
  1143. var url='jsps/scm/reserve/prodInOut.jsp?whoami=';
  1144. var caller;
  1145. var piclass=record.data.pi_class, piid = record.data.pi_id;
  1146. if(piclass == '采购验收单'){
  1147. caller = 'ProdInOut!PurcCheckin';
  1148. } else if(piclass == '采购验退单'){
  1149. caller = 'ProdInOut!PurcCheckout';
  1150. } else if(piclass == '其它采购入库单'){
  1151. caller = 'ProdInOut!OtherPurcIn';
  1152. } else if(piclass == '完工入库单'){
  1153. caller = 'ProdInOut!Make!In';
  1154. } else if(piclass == '其它采购出库单'){
  1155. caller = 'ProdInOut!OtherPurcOut';
  1156. } else if(piclass == '换货出库单'){
  1157. caller = 'ProdInOut!ExchangeOut';
  1158. } else if(piclass == '换货入库单'){
  1159. caller = 'ProdInOut!ExchangeIn';
  1160. } else if(piclass == '出货单'){
  1161. caller = 'ProdInOut!Sale';
  1162. } else if(piclass == '委外领料单'){
  1163. caller = 'ProdInOut!OutsidePicking';
  1164. } else if(piclass == '研发退料单'){
  1165. caller = 'ProdInOut!YFIN';
  1166. } else if(piclass == '研发领料单'){
  1167. caller = 'ProdInOut!YFOUT';
  1168. } else if(piclass == '辅料入库单'){
  1169. caller = 'ProdInOut!FLIN';
  1170. } else if(piclass == '辅料出库单'){
  1171. caller = 'ProdInOut!FLOUT';
  1172. } else if(piclass == '借货出货单'){
  1173. caller = 'ProdInOut!SaleBorrow';
  1174. } else if(piclass == '借货归还单'){
  1175. caller = 'ProdInOut!OutReturn';
  1176. } else if(piclass == '委外补料单'){
  1177. caller = 'ProdInOut!OSMake!Give';
  1178. } else if(piclass == '不良品入库单'){
  1179. caller = 'ProdInOut!DefectIn';
  1180. } else if(piclass == '不良品出库单'){
  1181. caller = 'ProdInOut!DefectOut';
  1182. } else if(piclass == '库存初始化'){
  1183. caller = 'ProdInOut!ReserveInitialize';
  1184. } else if(piclass == '报废单'){
  1185. caller = 'ProdInOut!StockScrap';
  1186. } else if(piclass == '盘亏调整单'){
  1187. caller = 'ProdInOut!StockLoss';
  1188. } else if(piclass == '盘盈调整单'){
  1189. caller = 'ProdInOut!StockProfit';
  1190. } else if(piclass == '拆件入库单'){
  1191. caller = 'ProdInOut!PartitionStockIn';
  1192. } else if(piclass == '其它入库单'){
  1193. caller = 'ProdInOut!OtherIn';
  1194. } else if(piclass == '生产领料单'){
  1195. caller = 'ProdInOut!Picking';
  1196. } else if(piclass == '生产退料单'){
  1197. caller = 'ProdInOut!Make!Return';
  1198. } else if(piclass == '销售退货单'){
  1199. caller = 'ProdInOut!SaleReturn';
  1200. } else if(piclass == '委外验收单'){
  1201. caller = 'ProdInOut!OutsideCheckIn';
  1202. } else if(piclass == '委外验退单'){
  1203. caller = 'ProdInOut!OutesideCheckReturn';
  1204. } else if(piclass == '委外退料单'){
  1205. caller = 'ProdInOut!OutsideReturn';
  1206. } else if(piclass == '拨出单'){
  1207. caller = 'ProdInOut!AppropriationOut';
  1208. } else if(piclass == '拨入单'){
  1209. caller = 'ProdInOut!AppropriationIn';
  1210. } else if(piclass == '销售拨出单'){
  1211. caller = 'ProdInOut!SaleAppropriationOut';
  1212. } else if(piclass == '销售拨入单'){
  1213. caller = 'ProdInOut!SalePutIn';
  1214. } else if(piclass == '其它出库单'){
  1215. caller = 'ProdInOut!OtherOut';
  1216. } else if(piclass == '生产补料单'){
  1217. caller = 'ProdInOut!Make!Give';
  1218. }
  1219. url = url + caller + '&formCondition=pi_idIS'+piid+'&gridCondition=pd_piidIS'+piid;
  1220. return '<a href="javascript:openUrl(\''+url+'\');">' + val + '</a>';
  1221. },
  1222. /**
  1223. * 应收发票维护 计算不含税金额 不含税金额,需要改为“本次开票不含税金额”=本次开票价税合计 / (1+税率)
  1224. *
  1225. *
  1226. *
  1227. */
  1228. ars_arbill_tax: function(val, meta, record, x, y, store, view){
  1229. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y];
  1230. var tax = Number(record.data['abd_qty'])*Number(record.data['abd_thisvoprice'])/(1+Number(record.data['abd_taxrate'])/100);
  1231. if(tax != null && tax >= 0) {
  1232. record.set('abd_noaramount', tax);
  1233. val = tax;
  1234. }
  1235. if(column.format)
  1236. val = Ext.util.Format.number(val, column.format);
  1237. return val;
  1238. },
  1239. /**
  1240. * 应收发票维护 计算不含税金额 不含税金额,需要改为“本次开票不含税金额”=本次开票价税合计 / (1+税率)
  1241. *
  1242. *
  1243. *
  1244. */
  1245. arp_apbill_tax: function(val, meta, record, x, y, store, view){
  1246. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y];
  1247. var tax = Number(record.data['abd_apamount'])/(1+Number(record.data['abd_taxrate'])/100);
  1248. if(tax != null && tax >= 0) {
  1249. record.set('abd_noapamount', tax);
  1250. val = tax;
  1251. }
  1252. if(column.format)
  1253. val = Ext.util.Format.number(val, column.format);
  1254. return val;
  1255. },
  1256. /**
  1257. * 应收发票维护 计算不含税金额 不含税金额,需要改为“本次开票不含税金额”=本次开票价税合计 / (1+税率)
  1258. *
  1259. *
  1260. *
  1261. */
  1262. arbill_show_invototal: function(val, meta, record, x, y, store, view){
  1263. var sourcekind = record.data['abd_sourcekind'];
  1264. var grid = view.ownerCt,column = grid.columns[y];
  1265. var pd_invototal = Number(record.data['pd_invototal']); //出入库单转出
  1266. var gsd_invototal = Number(record.data['gsd_invototal']); //发出商品数据
  1267. var abd_totalbillprice = Number(record.data['abd_totalbillprice']);//初始化数据
  1268. //转发类型是发出商品
  1269. if(sourcekind == 'GOODSSEND'){
  1270. if(val!=gsd_invototal){
  1271. record.set('abd_totalbillprice', gsd_invototal);
  1272. gsd_invototal=val;
  1273. }
  1274. return Ext.util.Format.number(gsd_invototal, column.format);
  1275. //出入库单转出
  1276. }else if(sourcekind == 'PRODIODETAIL'){
  1277. if(val!=pd_invototal){
  1278. record.set('abd_totalbillprice', pd_invototal);
  1279. pd_invototal=val;
  1280. }
  1281. return Ext.util.Format.number(pd_invototal, column.format);
  1282. //初始化
  1283. }else if(sourcekind == 'INITIALIZATION'){
  1284. if(val!=abd_totalbillprice){
  1285. record.set('abd_totalbillprice', abd_totalbillprice);
  1286. abd_totalbillprice=val;
  1287. }
  1288. return Ext.util.Format.number(abd_totalbillprice, column.format);
  1289. }
  1290. },
  1291. /**
  1292. * 应收发票维护 计算不含税金额 不含税金额,需要改为“本次开票不含税金额”=本次开票价税合计 / (1+税率)
  1293. *
  1294. *
  1295. *
  1296. */
  1297. apbill_show_invototal: function(val, meta, record, x, y, store, view){
  1298. var sourcekind = record.data['abd_sourcekind'];
  1299. var grid = view.ownerCt,column = grid.columns[y];
  1300. var pd_invototal = Number(record.data['pd_invototal']); //出入库单转出
  1301. var esd_invototal = Number(record.data['esd_invototal']); //发出商品数据
  1302. var abd_totalbillprice = Number(record.data['abd_totalbillprice']);//初始化数据
  1303. //转发类型是发出商品
  1304. if(sourcekind == 'ESTIMATE'){
  1305. if(val!=esd_invototal){
  1306. record.set('abd_totalbillprice', esd_invototal);
  1307. esd_invototal=val;
  1308. }
  1309. return Ext.util.Format.number(esd_invototal,column.format);
  1310. //出入库单转出
  1311. }else if(sourcekind == 'PRODIODETAIL'){
  1312. if(val!=pd_invototal){
  1313. record.set('abd_totalbillprice', pd_invototal);
  1314. pd_invototal=val;
  1315. }
  1316. return Ext.util.Format.number(pd_invototal,column.format);
  1317. //初始化
  1318. }else if(sourcekind == 'INITIALIZATION'){
  1319. if(val!=abd_totalbillprice){
  1320. record.set('abd_totalbillprice', abd_totalbillprice);
  1321. abd_totalbillprice=val;
  1322. }
  1323. return Ext.util.Format.number(abd_totalbillprice, column.format);
  1324. }
  1325. },
  1326. /**
  1327. * 应付发票维护 计算不含税金额 不含税金额,需要改为“本次开票不含税金额”=本次开票价税合计 / (1+税率)
  1328. *
  1329. *
  1330. *
  1331. */
  1332. ars_apbill_tax: function(val, meta, record, x, y){
  1333. var tax = Number(record.data['abd_apamount'])/(1+Number(record.data['abd_taxrate'])/100);
  1334. var tval=Ext.util.Format.number(tax,'0.00');
  1335. if(val != tval){
  1336. record.set('abd_noapamount', tval);
  1337. val = tval;
  1338. }
  1339. return tval;
  1340. },
  1341. colspan: function(val, meta, record, x, y, store, view){
  1342. meta.tdAttr = "rowspan=8;";
  1343. },
  1344. nullcolspan: function(val, meta){
  1345. meta.tdAttr = "rowspan=0;";
  1346. },
  1347. CRMHref:function(val, meta, record,x,y){
  1348. var me = this.RenderUtil || this;
  1349. var field = this.columns[y].dataIndex;
  1350. var KeyValue = 0;
  1351. var url='';
  1352. var title='';
  1353. var arg = me.args.CRMHref[field];
  1354. var keyField=arg[0];
  1355. var data=record.data;
  1356. if(arg && arg.length > 0){
  1357. KeyValue=data[field];
  1358. url=arg[1];
  1359. title=arg[2];
  1360. }
  1361. if(keyField.indexOf('code')>=0){
  1362. url+='?mr_taskcode='+KeyValue;
  1363. Ext.Ajax.request({
  1364. url: basePath+'crm/getReportCode.action',
  1365. async:false,
  1366. params:{
  1367. mt_code:KeyValue
  1368. },
  1369. method:'post',
  1370. callback:function(options,success,response){
  1371. var res = new Ext.decode(response.responseText);
  1372. url+='&whoami='+res.mt_reportcode;
  1373. }
  1374. });
  1375. }else{
  1376. url+='?mr_id='+KeyValue;
  1377. url+='&formCondition=mr_idIS'+KeyValue+'&gridCondition=mrd_mridIS'+KeyValue;
  1378. Ext.Ajax.request({
  1379. url: basePath+'crm/getReportCodeById.action',
  1380. async:false,
  1381. params:{
  1382. mr_id:KeyValue
  1383. },
  1384. method:'post',
  1385. callback:function(options,success,response){
  1386. var res = new Ext.decode(response.responseText);
  1387. url+='&whoami='+res.mr_reportcode;
  1388. }
  1389. });
  1390. }
  1391. if(val==''||val==$I18N.common.grid.emptyText) return val;
  1392. if(keyField.indexOf('code')>=0){
  1393. return '<a href="javascript:openUrl(\''+url+'\');">' + val + '</a>';
  1394. }
  1395. return '<a href="javascript:openFormUrl(' + KeyValue + ',\''+keyField+'\',\''+url+'\',\''+title+'\''+ ');">' + val + '</a>';
  1396. },
  1397. CRMtaskHref:function(val, meta, record,x,y){
  1398. var me = this.RenderUtil || this;
  1399. var rt_foid=record.data['rt_foid'];
  1400. var url='jsps/crm/marketmgr/marketresearch/multiform.jsp?'+
  1401. 'formCondition=fo_idIS'+rt_foid+'&gridCondition=fd_foidIS'+rt_foid+'&whoami='+record.data['rt_code']+'&cond=rt_idIS'+record.data['rt_id']+'&type=crm';
  1402. var keyField='rt_code';
  1403. var KeyValue=record.data['rt_code']
  1404. var title='调研模板';
  1405. return '<a href="javascript:openUrl2(\''+url+'\',\''+title+'\',\''+keyField+'\',\''+KeyValue+'\');">' + KeyValue + '</a>';
  1406. },
  1407. PXtaskHref:function(val, meta, record,x,y){
  1408. var me = this.RenderUtil || this;
  1409. var rt_foid=record.data['px_foid'];
  1410. var url='jsps/crm/marketmgr/marketresearch/multiform.jsp?'+
  1411. 'formCondition=fo_idIS'+rt_foid+'&gridCondition=fd_foidIS'+rt_foid+'&whoami='+record.data['px_code']+'&cond=px_idIS'+record.data['px_id']+'&type=ProductTrain';
  1412. var keyField='px_code';
  1413. var KeyValue=record.data['px_code']
  1414. var title='考核模板';
  1415. return '<a href="javascript:openUrl2(\''+url+'\',\''+title+'\',\''+keyField+'\',\''+KeyValue+'\');">' + KeyValue + '</a>';
  1416. },
  1417. CRMtaskReport:function(val, meta, record,x,y){
  1418. var me = this.RenderUtil || this;
  1419. var reporttemplatecode=record.data['reporttemplatecode'];
  1420. var url='jsps/crm/marketmgr/marketresearch/taskReport.jsp?'+
  1421. 'whoami='+reporttemplatecode+'&cond=idIS'
  1422. +record.data['id'];
  1423. var keyField='taskcode';
  1424. var KeyValue=record.data['taskcode']
  1425. var title='调研报告';
  1426. return '<a href="javascript:openUrl2(\''+url+'\',\''+title+'\',\''+keyField+'\',\''+KeyValue+'\');">' + KeyValue + '</a>';
  1427. },
  1428. CRMResearchReport:function(val, meta, record,x,y){
  1429. var me = this.RenderUtil || this;
  1430. var reporttemplatecode=record.data['manuallyscheduled'];
  1431. var url='jsps/crm/marketmgr/marketresearch/researchReport.jsp?'+
  1432. 'whoami='+reporttemplatecode+'&cond=idIS'
  1433. +record.data['id'];
  1434. if(record.data['mr_id']!=0){
  1435. url=url+'&formCondition=mr_idIS'+record.data['mr_id']+'&gridCondition=mrd_mridIS'+record.data['mr_id'];
  1436. }
  1437. var keyField='taskcode';
  1438. var KeyValue=record.data['taskcode']
  1439. var title='调研报告';
  1440. return '<a href="javascript:openUrl2(\''+url+'\',\''+title+'\',\''+keyField+'\',\''+KeyValue+'\');">' + KeyValue + '</a>';
  1441. },
  1442. CRMTrainReport:function(val, meta, record,x,y){
  1443. var me = this.RenderUtil || this;
  1444. var reporttemplatecode=record.data['to_tpcode'];
  1445. var url="jsps/crm/marketmgr/resourcemgr/trainReport.jsp?whoami="
  1446. +reporttemplatecode+"&cond=to_idIS"+record.data['to_id']+"&formCondition=tr_idIS"+record.data['tr_id'];
  1447. var keyField='tr_code';
  1448. var KeyValue=record.data['tr_code']
  1449. var title='产品培训考核报告';
  1450. return '<a href="javascript:openUrl2(\''+url+'\',\''+title+'\',\''+keyField+'\',\''+KeyValue+'\');">' + KeyValue + '</a>';
  1451. },
  1452. CRMReport:function(val, meta, record,x,y){
  1453. var me = this.RenderUtil || this;
  1454. var reporttemplatecode=record.data['mr_reportcode'];
  1455. var url='jsps/crm/marketmgr/marketresearch/researchReport.jsp?'+
  1456. 'whoami='+reporttemplatecode+'&cond=idIS'
  1457. +record.data['id']+"&formCondition=mr_idIS"+record.data['mr_id']+'&gridCondition=mrd_mridIS'+record.data['mr_id'];
  1458. var keyField='mr_code';
  1459. var KeyValue=record.data['mr_code']
  1460. var title='调研报告';
  1461. return '<a href="javascript:openUrl2(\''+url+'\',\''+title+'\',\''+keyField+'\',\''+KeyValue+'\');">' + KeyValue + '</a>';
  1462. },
  1463. Vehicle:function(val, meta, record,x,y){
  1464. var url='jsps/oa/vehicle/vehiclereturn.jsp?cond=va_code='+val;
  1465. var title='返车维护单';
  1466. var keyField='va_code';
  1467. return '<a href="javascript:openUrl2(\''+url+'\',\''+title+'\',\''+keyField+'\',\''+val+'\');">' + val + '</a>';
  1468. },
  1469. /**
  1470. * 会议室申请,确认出席人员,如果已经确认出席的默认选上
  1471. */
  1472. confirmMan:function(val, meta, record, x, y, store, view){
  1473. var grid = view.ownerCt;
  1474. if(record.data['md_attend']=='是'){
  1475. grid.selModel.select(record,true);
  1476. }
  1477. return val;
  1478. },
  1479. /**
  1480. * 会议室申请,确认出席人员,如果已经确认出席的默认选上
  1481. */
  1482. oa_confirmMan:function(val, meta, record, x, y, store, view){
  1483. var grid = view.ownerCt;
  1484. if(record.data['md_isconfirmed']=='-1'){
  1485. grid.selModel.select(record,true);
  1486. }
  1487. return val;
  1488. },
  1489. /**
  1490. * 通用方法
  1491. * 值=arg[0]-arg[1]-...
  1492. * @expression reduce:pd_qty:pd_yqty
  1493. * @expression reduce:pd_qty:100:pd_yqty
  1494. */
  1495. reduce: function(val, meta, record, x, y, store, view){
  1496. meta.tdCls = "x-grid-cell-renderer-bl";
  1497. var grid = view.ownerCt, me = grid.RenderUtil,column = grid.columns[y],field = column.dataIndex;
  1498. if(!me || !me.args){
  1499. grid = grid.ownerCt, me = grid.RenderUtil;
  1500. if(!me || !me.args){
  1501. return val;
  1502. }
  1503. }
  1504. if(me.args){
  1505. var arg = me.args.reduce[field];
  1506. var maxValue = 0;
  1507. if(arg && arg.length > 0){
  1508. var v = 0;
  1509. Ext.each(arg, function(a, index){
  1510. if(Ext.isNumber(a)){
  1511. v = a;
  1512. } else {
  1513. v = record.data[a] || 0;
  1514. }
  1515. if(index == 0){
  1516. maxValue = Number(v);
  1517. } else {
  1518. maxValue -= Number(v);
  1519. }
  1520. });
  1521. }
  1522. //鉴于小数问题 保留2位小数
  1523. //maxValue=maxValue.toFixed(4);
  1524. if(column.editor || (column.getEditor && column.getEditor())) {//在允许编辑的情况下,修改值不能大于maxValue
  1525. val = (!Ext.isNumber(val) || val == 0) ? maxValue : val;
  1526. if(Number(val) > maxValue ){
  1527. val = maxValue;
  1528. showError('请不要输入超过最大数量' + maxValue + "的值!");
  1529. }
  1530. } else {
  1531. val = maxValue;
  1532. }
  1533. var _v = val;
  1534. if(column.xtype == 'numbercolumn') {
  1535. _v = Ext.util.Format.number(val, column.format);
  1536. }
  1537. if(Ext.util.Format.number(record.data[field], column.format) != _v){
  1538. record.set(field, val);
  1539. }
  1540. return _v;
  1541. } else {
  1542. return val;
  1543. }
  1544. },
  1545. /**
  1546. * @OA
  1547. * 信息发布 Note
  1548. */
  1549. emergency: function(val, meta, record){
  1550. var d = Number(val);
  1551. var str = '';
  1552. switch (d){
  1553. case 1:
  1554. str = '<span style="color:#20B7B9;padding-left:2px">一般</span>';
  1555. break;
  1556. case 2:
  1557. str = '<img src="' + basePath + 'resource/images/renderer/remind.png">' +
  1558. '<span style="color:blue;padding-left:2px">平急</span>';
  1559. break;
  1560. case 3:
  1561. str = '<img src="' + basePath + 'resource/images/renderer/remind2.png">' +
  1562. '<span style="color:red;padding-left:2px">特急</span>';
  1563. break;
  1564. }
  1565. return str;
  1566. },
  1567. /**
  1568. * @OA流程催办
  1569. * */
  1570. remindprocess:function(val,meta,record){
  1571. var min=0,a=0,b=0,str='';
  1572. if(record && record.data.jp_id){
  1573. var launchTime=record.data.jp_launchTime;
  1574. min=parseInt((new Date().getTime()-new Date(launchTime).getTime())/60000);
  1575. a=parseInt(min/60);
  1576. b=min%60;
  1577. if(a>0) str+=a+'小时';
  1578. if(b>0) str+=b+'分钟';
  1579. if(a>2) meta.style = 'color:red;';
  1580. else meta.style='color:green';
  1581. return str;
  1582. }
  1583. else return null;
  1584. },
  1585. /**
  1586. *@OA 版本管理
  1587. **/
  1588. Version: function(val, meta, record){
  1589. if(val == 0)
  1590. return '当前版本|阅读版本';
  1591. else
  1592. return '';
  1593. },
  1594. /**
  1595. *@OA 阅读状态
  1596. */
  1597. State: function(val, meta, record){
  1598. if(val == 0){
  1599. var str = '<img src="' + basePath + 'resource/images/renderer/remind.png">' +
  1600. '<span style="color:blue;padding-left:2px">未阅</span>';
  1601. return str ;
  1602. } else
  1603. return '已阅';
  1604. },
  1605. /**
  1606. *@OA attentionGrade
  1607. */
  1608. Grade:function(val,meta,record,x,y){
  1609. var field = this.columns[y].dataIndex;
  1610. var me = this.RenderUtil || this;
  1611. var arg = me.args.Grade[field];
  1612. var colorfield=arg[0];
  1613. var color=record.data[colorfield];
  1614. if(color) return '<span style="color:#'+color+'">'+val+'</span>';
  1615. },
  1616. GradeColor:function(val,meta,record){
  1617. meta.style = "background:#"+val+";";
  1618. return '';
  1619. } ,
  1620. /**
  1621. *@OA 知识权限控制
  1622. */
  1623. OAHref: function(val, meta, record,x,y){
  1624. var scanpersonid=record.data.kl_scanpersonid+'#';
  1625. var authorid=record.data.kl_authorid;
  1626. var me = this.RenderUtil || this;
  1627. var field = this.columns[y].dataIndex;
  1628. var KeyValue = 0;
  1629. var url='';
  1630. var title='';
  1631. var arg = me.args.OAHref[field];
  1632. var keyField=arg[0];
  1633. var data=record.data;
  1634. if(arg && arg.length > 0){
  1635. KeyValue=data[keyField];
  1636. url=arg[1];
  1637. title=arg[2];
  1638. }
  1639. if(val==''||val==$I18N.common.grid.emptyText) return val;
  1640. if(scanpersonid.indexOf(emid)>0||authorid==emid){
  1641. return '<img src="' + basePath + 'resource/images/renderer/key2.png">'+'<span><a href="javascript:openUrl(' + KeyValue + ',\''+keyField+'\',\''+url+'\',\''+title+'\''+ ');">' + val + '</a></span>';
  1642. }
  1643. return '<img src="' + basePath + 'resource/images/renderer/key1.png">'+'<span style="color:#8B8B83;padding-left:2px "><a href="javascript:openWin();" style="text-decoration: none||blink;" active="color:#8B8B83; text-decoration:none;">' + val + '<a/></span>';
  1644. },
  1645. oa_oaacceptancedetail_status:function(val, meta, record){
  1646. if(val=='1'){
  1647. return '已转采购';
  1648. }else{
  1649. return '未转采购';
  1650. }
  1651. },
  1652. /**
  1653. * @SCM.Purchase
  1654. * 采购明细数量的修改限制
  1655. */
  1656. scm_purc_pdqty: function(val, meta, record){
  1657. meta.style = "background:#C6E2FF;";
  1658. if(!Ext.isNumber(val)) {
  1659. record.set('pd_qty', 0);
  1660. return 0;
  1661. } else {
  1662. var adid = record.data['ad_qty'];oldqty = 0;
  1663. if(adid != null && adid > 0 ) {
  1664. if(val > adid) {
  1665. oldqty = record.modified.pd_qty || record.data.pd_qty || adid;
  1666. if (val != oldqty){
  1667. val = oldqty;
  1668. record.set('pd_qty', oldqty);
  1669. showError('请不要超过请购数<' + adid + '>修改!');
  1670. }
  1671. }
  1672. }
  1673. return val;
  1674. }
  1675. },
  1676. /**
  1677. * @PM.MakeNotice
  1678. * 制造通知单明细数量的修改限制
  1679. */
  1680. pm_mano_mndqty: function(val, meta, record){
  1681. meta.style = "background:#C6E2FF;";
  1682. var sdid = record.data['sd_qty'];oldqty = 0;
  1683. if(sdid != null && sdid > 0) {
  1684. if(val > sdid) {
  1685. oldqty = record.modified.mnd_qty || record.data.mnd_qty || sdid;
  1686. val = oldqty;
  1687. record.set('mnd_qty', oldqty);
  1688. showError('请不要超过订单数<' + sdid + '>修改!');
  1689. }
  1690. }
  1691. return val;
  1692. },
  1693. /**
  1694. * @SCM.Sale
  1695. * 销售通知单明细数量的修改限制
  1696. */
  1697. scm_send_sndqty: function(val, meta, record){
  1698. meta.style = "background:#C6E2FF;";
  1699. var sdid = record.data['sd_qty'];oldqty = 0;
  1700. if(sdid != null && sdid > 0) {
  1701. if(val > sdid) {
  1702. oldqty = record.modified.snd_outqty || record.data.snd_outqty || sdid;
  1703. val = oldqty;
  1704. record.set('snd_outqty', oldqty);
  1705. showError('请不要超过订单数<' + sdid + '>修改!');
  1706. }
  1707. }
  1708. return val;
  1709. },
  1710. /**
  1711. * @SCM.AcceptNotify
  1712. * 收料通知单明细数量的修改限制
  1713. */
  1714. scm_acceptnotify_andinqty: function(val, meta, record){
  1715. meta.style = "background:#C6E2FF;";
  1716. var sdid = record.data['pd_qty'];oldqty = 0;
  1717. if(sdid != null && sdid > 0) {
  1718. if(val > sdid) {
  1719. oldqty = record.modified.and_inqty || record.data.and_inqty || sdid;
  1720. val = oldqty;
  1721. record.set('and_inqty', oldqty);
  1722. showError('请不要超过采购单数<' + sdid + '>修改!');
  1723. }
  1724. }
  1725. return val;
  1726. },
  1727. /**
  1728. * @SCM.VerifyApply
  1729. * 收料单明细数量的修改限制
  1730. */
  1731. scm_acceptnotify_vadqty: function(val, meta, record){
  1732. meta.style = "background:#C6E2FF;";
  1733. var sdid = record.data['pd_qty'];oldqty = 0;
  1734. if(sdid != null && sdid > 0) {
  1735. if(val > sdid) {
  1736. oldqty = record.modified.vad_qty || record.data.vad_qty || sdid;
  1737. val = oldqty;
  1738. record.set('vad_qty', oldqty);
  1739. showError('请不要超过采购单数<' + sdid + '>修改!');
  1740. }
  1741. }
  1742. return val;
  1743. },
  1744. /**
  1745. * @SCM.ProdIODetail
  1746. * 出货单明细数量的修改限制
  1747. */
  1748. scm_prodio_pdqty: function(val, meta, record, x, y, store, view){
  1749. meta.style = "background:#C6E2FF;";
  1750. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y];
  1751. if(record.get('pd_snid') != null && record.get('pd_snid') != 0) {
  1752. var snid = record.data['snd_outqty'];oldqty = 0;
  1753. if(snid != null && snid > 0) {
  1754. if(val > snid) {
  1755. oldqty = record.modified.pd_outqty || record.data.pd_outqty || sdid;
  1756. val = oldqty;
  1757. record.set('pd_outqty', oldqty);
  1758. showError('请不要超过通知单数<' + snid + '>修改!');
  1759. }
  1760. }
  1761. }
  1762. if(column.format)
  1763. val = Ext.util.Format.number(val, column.format);
  1764. return val;
  1765. },
  1766. /**
  1767. * @PM.Dispatch
  1768. * 完成数不能大于流程单数量
  1769. */
  1770. pm_dispatch_overqty: function(val, meta, record, x, y, store, view){
  1771. meta.style = "background:#C6E2FF;";
  1772. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y];
  1773. var q = record.data['mf_qty'];
  1774. if(q != null && q > 0) {
  1775. if(val > q) {
  1776. val = q;
  1777. record.set('did_overqty', q);
  1778. showError('完成数请不要超过流程单数量<' + q + '>!');
  1779. }
  1780. }
  1781. if(column.format)
  1782. val = Ext.util.Format.number(val, column.format);
  1783. return val;
  1784. },
  1785. /**
  1786. * @SCM.Sale.ReturnApply
  1787. * 退货申请单
  1788. */
  1789. returnapply_qty: function(val, meta, record, x, y, store, view){
  1790. meta.style = "background:#C6E2FF;";
  1791. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y];
  1792. var q = record.data['sd_sendqty'];
  1793. if(q != null && q > 0) {
  1794. if(val > q) {
  1795. val = q;
  1796. record.set('rad_qty', q);
  1797. showError('请不要超过订单发货数<' + q + '>退货!');
  1798. }
  1799. }
  1800. if(column.format)
  1801. val = Ext.util.Format.number(val, column.format);
  1802. return val;
  1803. },
  1804. /**
  1805. * @SCM.ProdIODetail
  1806. * 采购验收单明细数量的修改限制
  1807. */
  1808. scm_prodio_okqty: function(val, meta, record, x, y, store, view){
  1809. meta.style = "background:#C6E2FF;";
  1810. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y];
  1811. if(record.get('pd_vacode') != null&&record.get('pd_vacode')!="") {
  1812. var vadid = record.data['ve_okqty'];oldqty = 0;
  1813. if(vadid != null && vadid > 0) {
  1814. if(val > vadid) {
  1815. oldqty = record.modified.pd_inqty || record.data.pd_inqty || vadid;
  1816. val = oldqty;
  1817. record.set('pd_inqty', oldqty);
  1818. showError('请不要超过收料合格数<' + vadid + '>修改!');
  1819. }
  1820. }
  1821. }
  1822. if(column.format)
  1823. val = Ext.util.Format.number(val, column.format);
  1824. return val;
  1825. },
  1826. /**
  1827. * 研发采购变更 限制数量
  1828. * @param val
  1829. * @param meta
  1830. * @param record
  1831. * @returns
  1832. */
  1833. plm_pc_yqty: function(val, meta, record, x, y, store, view){
  1834. meta.style = "background:#C6E2FF;";
  1835. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y];
  1836. var vadid = record.data['pcd_newqty'];
  1837. if(vadid != null && vadid > 0) {
  1838. if(val > vadid) {
  1839. val = oldqty;
  1840. record.set('pcd_newqty', val);
  1841. showError('新采购数请不要小于已转数量<' + val + '>!');
  1842. }
  1843. }
  1844. if(column.format)
  1845. val = Ext.util.Format.number(val, column.format);
  1846. return val;
  1847. },
  1848. /**
  1849. * @SCM.ProdIODetail
  1850. * 不良品入库单明细数量的修改限制
  1851. */
  1852. scm_prodio_ngqty: function(val, meta, record, x, y, store, view){
  1853. meta.style = "background:#C6E2FF;";
  1854. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y];
  1855. if(record.get('pd_vacode') != null) {
  1856. var vadid = record.data['ve_notokqty'];oldqty = 0;
  1857. if(vadid != null && vadid > 0) {
  1858. if(val > vadid) {
  1859. oldqty = record.modified.pd_inqty || record.data.pd_inqty || vadid;
  1860. val = oldqty;
  1861. record.set('pd_inqty', oldqty);
  1862. showError('请不要超过收料不合格数<' + vadid + '>修改!');
  1863. }
  1864. }
  1865. }
  1866. if(column.format)
  1867. val = Ext.util.Format.number(val, column.format);
  1868. return val;
  1869. },
  1870. /**
  1871. * PM.makeScrap 生产报废单报废数量限制
  1872. */
  1873. md_qty_mm_havegetqty: function(val, meta, record, x, y, store, view){
  1874. meta.style = "background:#C6E2FF;";
  1875. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y];
  1876. var have = record.data['mm_havegetqty'] || 0,
  1877. oldqty = 0;
  1878. if(val > have) {
  1879. oldqty = record.modified.md_qty || record.data.md_qty || have;
  1880. val = oldqty;
  1881. if(record.data.md_qty != oldqty) {
  1882. record.set('md_qty', oldqty);
  1883. showError('请不要超过已领数<' + have + '>!');
  1884. }
  1885. }
  1886. if(column.format)
  1887. val = Ext.util.Format.number(val, column.format);
  1888. return val;
  1889. },
  1890. /**
  1891. * @SCM.Sale.SaleChange
  1892. * 销售变更单新数量(原数量为0的时候不考虑)
  1893. */
  1894. scm_sale_change_qty: function(val, meta, record, x, y, store, view){
  1895. meta.style = "background:#C6E2FF;";
  1896. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y];
  1897. var adq = record.data['sd_qty'];
  1898. var acq = record.data['sd_sendqty'];
  1899. var yq = Math.min(record.data['sd_yqty'], adq);
  1900. if(adq != null && adq > 0) {
  1901. if(val > adq) {
  1902. showError('请不要超过原订单数<' + adq + '>!');
  1903. val = adq;
  1904. record.set('scd_newqty', adq);
  1905. }
  1906. }
  1907. if(acq != null && acq > 0) {
  1908. if(val == 0) {
  1909. val = acq;
  1910. record.set('scd_newqty', acq);
  1911. } else if(val < acq) {
  1912. showError('请不要小于已发货数<' + acq + '>!');
  1913. val = acq;
  1914. record.set('scd_newqty', acq);
  1915. }
  1916. }
  1917. if(yq != null && yq > 0) {
  1918. if(val == 0) {
  1919. val = yq;
  1920. record.set('scd_newqty', yq);
  1921. } else if(val < yq) {
  1922. showError('请不要小于已转发货通知数<' + yq + '>!');
  1923. val = yq;
  1924. record.set('scd_newqty', yq);
  1925. }
  1926. }
  1927. if(column.format)
  1928. val = Ext.util.Format.number(val, column.format);
  1929. return val;
  1930. },
  1931. /**
  1932. * @SCM.Sale.SaleChange
  1933. * 销售变更单新数量(原数量为0的时候也要考虑)
  1934. */
  1935. scm_sale_change_qty2: function(val, meta, record, x, y, store, view){
  1936. meta.style = "background:#C6E2FF;";
  1937. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y];
  1938. var adq = record.data['sd_qty'];
  1939. var acq = record.data['sd_sendqty'];
  1940. var yq = Math.min(record.data['sd_yqty'], adq);
  1941. if(adq != null && adq >= 0) {
  1942. if(val > adq) {
  1943. showError('请不要超过原订单数<' + adq + '>!');
  1944. val = adq;
  1945. record.set('scd_newqty', adq);
  1946. }
  1947. }
  1948. if(acq != null && acq >= 0) {
  1949. if(val == 0) {
  1950. val = acq;
  1951. record.set('scd_newqty', acq);
  1952. } else if(val < acq) {
  1953. showError('请不要小于已发货数<' + acq + '>!');
  1954. val = acq;
  1955. record.set('scd_newqty', acq);
  1956. }
  1957. }
  1958. if(yq != null && yq >= 0) {
  1959. if(val == 0) {
  1960. val = yq;
  1961. record.set('scd_newqty', yq);
  1962. } else if(val < yq) {
  1963. showError('请不要小于已转发货通知数<' + yq + '>!');
  1964. val = yq;
  1965. record.set('scd_newqty', yq);
  1966. }
  1967. }
  1968. if(column.format)
  1969. val = Ext.util.Format.number(val, column.format);
  1970. return val;
  1971. },
  1972. /**
  1973. * @SCM.Purchase.PurchaseChange
  1974. * 采购变更单新数量
  1975. */
  1976. scm_purc_change_qty: function(val, meta, record, x, y, store, view){
  1977. meta.style = "background:#C6E2FF;";
  1978. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y];
  1979. var adq = record.data['ad_qty'];oldqty = 0;
  1980. var acq = record.data['pd_acceptqty'];
  1981. var yq = record.data['pd_yqty'];
  1982. if(adq != null && adq > 0) {
  1983. if(val > adq) {
  1984. val = adq;
  1985. showError('请不要超过请购数<' + adq + '>!');
  1986. }
  1987. }
  1988. if(acq != null && acq > 0) {
  1989. if(val == 0) {
  1990. val = acq;
  1991. } else if(val < acq) {
  1992. val = acq;
  1993. showError('请不要小于验收数<' + acq + '>!');
  1994. }
  1995. }
  1996. if(yq != null && yq > 0) {
  1997. if(val == 0) {
  1998. val = yq;
  1999. } else if(val < yq) {
  2000. val = yq;
  2001. showError('请不要小于采购已转数<' + yq + '>!');
  2002. }
  2003. }
  2004. if(record.get('pcd_newqty') != val) {
  2005. record.set('pcd_newqty', val);
  2006. }
  2007. if(column.format)
  2008. val = Ext.util.Format.number(val, column.format);
  2009. return val;
  2010. },
  2011. /**
  2012. * @SCM.Purchase.PurchaseChange
  2013. * 采购变更单新数量(易方)
  2014. */
  2015. scm_purc_change_qty2: function(val, meta, record, x, y, store, view){
  2016. meta.style = "background:#C6E2FF;";
  2017. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y];
  2018. var adq = record.data['pcd_oldqty'];oldqty = 0;
  2019. var acq = record.data['pd_acceptqty'];
  2020. var yq = record.data['pd_yqty'];
  2021. if(adq != null && adq > 0) {
  2022. if(val > adq) {
  2023. val = adq;
  2024. showError('请不要超过原采购订单数<' + adq + '>!');
  2025. }
  2026. }
  2027. if(acq != null && acq > 0) {
  2028. if(val == 0) {
  2029. val = acq;
  2030. } else if(val < acq) {
  2031. val = acq;
  2032. showError('请不要小于验收数<' + acq + '>!');
  2033. }
  2034. }
  2035. if(yq != null && yq > 0) {
  2036. if(val == 0) {
  2037. val = yq;
  2038. } else if(val < yq) {
  2039. val = yq;
  2040. showError('请不要小于采购已转数<' + yq + '>!');
  2041. }
  2042. }
  2043. if(record.get('pcd_newqty') != val) {
  2044. record.set('pcd_newqty', val);
  2045. }
  2046. if(column.format)
  2047. val = Ext.util.Format.number(val, column.format);
  2048. return val;
  2049. },
  2050. /**
  2051. * @PM.Make.MakeChange
  2052. * 制造变更单新数量(易方)
  2053. */
  2054. pm_make_change_qty: function(val, meta, record){
  2055. meta.style = "background:#C6E2FF;";
  2056. var adq = record.data['md_qty'];oldqty = 0;
  2057. var acq = record.data['ma_madeqty'];
  2058. var yq = record.data['ma_toquaqty'];
  2059. if(adq != null && adq > 0) {
  2060. if(val > adq) {
  2061. val = adq;
  2062. showError('请不要超过原制造单数<' + adq + '>!');
  2063. }
  2064. }
  2065. if(acq != null && acq > 0) {
  2066. if(val == 0) {
  2067. val = acq;
  2068. } else if(val < acq) {
  2069. val = acq;
  2070. showError('请不要小于已完工数<' + acq + '>!');
  2071. }
  2072. }
  2073. if(yq != null && yq > 0) {
  2074. if(val == 0) {
  2075. val = yq;
  2076. } else if(val < yq) {
  2077. val = yq;
  2078. showError('请不要小于已转检验数<' + yq + '>!');
  2079. }
  2080. }
  2081. if(record.get('md_newqty') != val) {
  2082. record.set('md_newqty', val);
  2083. }
  2084. return val;
  2085. },
  2086. /**
  2087. * @PM.Make.MakeChangeOS
  2088. * 委外变更单新数量(易方)
  2089. */
  2090. pm_makeos_change_qty: function(val, meta, record){
  2091. meta.style = "background:#C6E2FF;";
  2092. var adq = record.data['md_oldqty'];oldqty = 0;
  2093. var acq = record.data['ma_madeqty'];
  2094. var yq = record.data['ma_haveqty'];
  2095. if(adq != null && adq > 0) {
  2096. if(val > adq) {
  2097. val = adq;
  2098. showError('请不要超过原委外单数<' + adq + '>!');
  2099. }
  2100. }
  2101. if(acq != null && acq > 0) {
  2102. if(val == 0) {
  2103. val = acq;
  2104. } else if(val < acq) {
  2105. val = acq;
  2106. showError('请不要小于已生产数量<' + acq + '>!');
  2107. }
  2108. }
  2109. if(yq != null && yq > 0) {
  2110. if(val == 0) {
  2111. val = yq;
  2112. } else if(val < yq) {
  2113. val = yq;
  2114. showError('请不要小于已转收料数<' + yq + '>!');
  2115. }
  2116. }
  2117. if(record.get('md_newqty') != val) {
  2118. record.set('md_newqty', val);
  2119. }
  2120. return val;
  2121. },
  2122. /**
  2123. * @SCM.Sale.SendNotify
  2124. * 出货通知变更单新数量
  2125. */
  2126. scm_sendnotify_change_qty: function(val, meta, record, x, y, store, view){
  2127. meta.style = "background:#C6E2FF;";
  2128. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y];
  2129. var adq = record.data['scd_oldqty'];
  2130. var yq = Math.min(record.data['snd_yqty'], adq);
  2131. if(adq != null && adq > 0) {
  2132. if(val > adq) {
  2133. showError('请不要超过原通知单数<' + adq + '>!');
  2134. val = adq;
  2135. record.set('scd_qty', adq);
  2136. }
  2137. }
  2138. if(yq != null && yq > 0) {
  2139. if(val == 0) {
  2140. val = yq;
  2141. record.set('scd_qty', yq);
  2142. } else if(val < yq) {
  2143. showError('请不要小于已转出货数<' + yq + '>!');
  2144. val = yq;
  2145. record.set('scd_qty', yq);
  2146. }
  2147. }
  2148. if(column.format)
  2149. val = Ext.util.Format.number(val, column.format);
  2150. return val;
  2151. },
  2152. /**
  2153. * @SCM.Sale.SaleForecastChange
  2154. * 预测变更单明细数量的修改限制
  2155. */
  2156. scm_sale_sfchange_qty: function(val, meta, record){
  2157. meta.style = "background:#C6E2FF;";
  2158. var sdq = record.data['scd_oldqty'];
  2159. var kq = record.data['scd_minqty'];
  2160. if(sdq != null && sdq > 0) {
  2161. if(val > sdq) {
  2162. val = sdq;
  2163. showError('请不要超过原预测数量<' + sdq + '>!');
  2164. }
  2165. }
  2166. if(kq != null && kq > 0) {
  2167. if(val == 0) {
  2168. val = kq;
  2169. } else if(val < kq) {
  2170. val = kq;
  2171. showError('请不要小于最小变更数<' + kq + '>!');
  2172. }
  2173. }
  2174. if(record.get('scd_newqty') != val) {
  2175. record.set('scd_newqty', val);
  2176. }
  2177. return val;
  2178. },
  2179. /**
  2180. * @SCM.Sale
  2181. * 销售单明细数量的修改限制
  2182. */
  2183. scm_sale_sdqty: function(val, meta, record){
  2184. meta.style = "background:#C6E2FF;";
  2185. var status = Ext.getCmp('sa_statuscode') == null ? null : Ext.getCmp('sa_statuscode').value;
  2186. var maxValue = record.modified.sd_qty || record.data.sd_qty;
  2187. if(status == null || status == 'ENTERING' || status == 'COMMITED'){
  2188. var sd_sourceid = record.data['sd_sourceid'];
  2189. if(sd_sourceid != null && sd_sourceid != '0' && sd_sourceid != 0){//有来源
  2190. //限制val<maxValue
  2191. if(val > maxValue){
  2192. val = maxValue;
  2193. record.set('sd_qty', val);
  2194. showError('请不要输入超过来源数量' + maxValue + "的值!");
  2195. }
  2196. }
  2197. if(!Ext.isNumber(val)){
  2198. val = maxValue;
  2199. record.set('sd_qty', val);
  2200. showError('请输入数字!');
  2201. }
  2202. if(val < 0){
  2203. val = maxValue;
  2204. record.set('sd_qty', val);
  2205. showError("请不要输入小于0的值!");
  2206. }
  2207. } else {
  2208. if(val != maxValue){
  2209. val = maxValue;
  2210. record.set('sd_qty', val);
  2211. showError("该单据已审核,无法修改,请申请变更!");
  2212. }
  2213. }
  2214. return val;
  2215. },
  2216. /**
  2217. * @SCM.Purchase.VerifyApply
  2218. * 收料单明细数量的修改限制
  2219. */
  2220. scm_purc_vadqty: function(val, meta, record){
  2221. meta.style = "background:#C6E2FF;";
  2222. var andid = record.data['vad_andid'];
  2223. if(andid == null || andid == 0){
  2224. var pdid = record.data['pd_qty'],qty = 0;
  2225. if(pdid != null && pdid > 0) {
  2226. if(val > pdid) {
  2227. qty = record.modified.vad_qty || record.data.vad_qty || pdid;
  2228. val = qty;
  2229. record.set('vad_qty', qty);
  2230. showError('请不要超过采购数<' + pdid + '>修改!');
  2231. }
  2232. }
  2233. } else {
  2234. var andqty = record.data['and_inqty'],oldqty = 0;
  2235. if(andqty != null && andqty > 0) {
  2236. if(val > andqty) {
  2237. oldqty = record.modified.vad_qty || record.data.vad_qty || andqty;
  2238. val = oldqty;
  2239. record.set('vad_qty', oldqty);
  2240. showError('请不要超过收料通知单数<' + andqty + '>修改!');
  2241. }
  2242. }
  2243. }
  2244. return val;
  2245. },
  2246. /**
  2247. * 通用方法
  2248. * 仅仅是改变该列的背景颜色
  2249. * @arg red/black.../C6E2FF/B376F5/..null..
  2250. * @expression color:red
  2251. * @expression color:#C1D0D9
  2252. */
  2253. color: function(val, meta, record, x, y, store, view){
  2254. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y],field = column.dataIndex;
  2255. if(!me || !me.args){
  2256. meta.style = "background:#C6E2FF;";
  2257. return val;
  2258. }
  2259. me.args.color = me.args.color || new Object();
  2260. var arg = me.args.color[field];
  2261. if(arg && arg.length > 0){
  2262. meta.style = "background:" + arg[0] + ";";
  2263. } else {
  2264. meta.style = "background:#C6E2FF;";
  2265. }
  2266. return val;
  2267. },
  2268. /**
  2269. * 通用方法
  2270. * 如果当前字段的值为空或空字符串,就获取指定字段的值赋给当前字段
  2271. * @expression copy:pcd_oldprodcode
  2272. */
  2273. copy: function(val, meta, record, x, y, store, view){
  2274. meta.style = "background:#C6E2FF;";
  2275. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y],field = column.dataIndex;
  2276. if(val == null || val == '' || val == 0){
  2277. if(!me || !me.args){
  2278. grid = grid.ownerCt, me = grid.RenderUtil;
  2279. if(!me || !me.args){
  2280. return val;
  2281. }
  2282. }
  2283. var v = record.data[field];
  2284. if(v == null || v == '' || (column.xtype == 'numbercolumn' && v == 0)){
  2285. var arg = me.args.copy[field];
  2286. if(arg && arg.length > 0){
  2287. val = record.data[arg[0]];
  2288. }
  2289. if(val != null && val != '' && val != 0){
  2290. record.set(field, val);
  2291. }
  2292. }
  2293. }
  2294. if(column.xtype == 'numbercolumn' && val != 0){
  2295. val = Ext.util.Format.number(val, column.format);
  2296. }
  2297. return val;
  2298. },
  2299. /**
  2300. * 通用方法
  2301. * 如果指定字段的值为空或空字符串,就获取当前值赋给指定字段
  2302. * @expression paste:pcd_newprodcode
  2303. */
  2304. paste: function(val, meta, record, x, y, store, view){
  2305. meta.style = "background:#C6E2FF;";
  2306. if(val != null && val != ''){
  2307. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y],field = column.dataIndex;
  2308. if(!me || !me.args){
  2309. grid = grid.ownerCt, me = grid.RenderUtil;
  2310. if(!me || !me.args){
  2311. return val;
  2312. }
  2313. }
  2314. var arg = me.args.paste[field];
  2315. var value = null;
  2316. if(arg && arg.length > 0){
  2317. value = record.data[arg[0]];
  2318. if(value == null || value == ''){
  2319. if(column.xtype == 'numbercolumn' && val != 0){
  2320. record.set(arg[0], val);
  2321. } else {
  2322. if(Ext.isDate(val)){
  2323. val = Ext.Date.toString(val);
  2324. }
  2325. record.set(arg[0], val);
  2326. }
  2327. }
  2328. }
  2329. }
  2330. return val;
  2331. },
  2332. /**
  2333. * 必填字段
  2334. */
  2335. necessary: function(val, meta, record, x, y, store, view){
  2336. return '<img src="' + basePath + 'resource/images/icon/need.png" title="必填字段">' +
  2337. '<span style="color:blue;padding-left:2px;" title="必填字段">' + val + '</span>';
  2338. },
  2339. /**
  2340. * @FA
  2341. * 应收系统参数设置
  2342. */
  2343. stringToDate: function(val, meta, record, x, y){
  2344. meta.style = "background:#C6E2FF;";
  2345. var reg = /\d{2}-\d{1,2}月-\d{2}/;
  2346. var field = this.columns[y].dataIndex;
  2347. if(val == 'true'){
  2348. record.set(field,'是');
  2349. }
  2350. if(val == 'false'){
  2351. record.set(field,'否');
  2352. }
  2353. if(reg.test(val)){
  2354. var day = val.split('-')[0];
  2355. var month = val.split('-')[1].replace('月', '');
  2356. if(Number(month) < 10){
  2357. month = '0' + month;
  2358. }
  2359. var year = '20' + val.split('-')[2];
  2360. val = year + '-' + month + '-' + day;
  2361. record.set(field, val);
  2362. }
  2363. return val;
  2364. },
  2365. /**
  2366. * @PM.Make
  2367. * 成套发料,本次发料套数
  2368. */
  2369. pm_make_issue_thisqty: function(val, meta, record, x, y){
  2370. var code = record.data['ma_code'], busy = Ext.getCmp('grid').busy;
  2371. record.hasdataChanged=false;
  2372. if(!Ext.isEmpty(record.data['ma_id']) && !Ext.isEmpty(code)) {
  2373. var nQty = record.data['ma_qty'] - record.data['ma_haveqty'];
  2374. if(record.maxQty!=nQty){
  2375. record.maxQty=nQty;
  2376. record.hasdataChanged=true;
  2377. }
  2378. var maxQty = nQty;
  2379. if(val > maxQty) {
  2380. if(!busy && !record.hasdataChanged)
  2381. showError('本次发料套数不能超过<' + maxQty + '>,单号:' + code);
  2382. val = maxQty;
  2383. if(record.data['ma_thisqty'] != val) {
  2384. record.set('ma_thisqty', val);
  2385. }
  2386. } else{
  2387. if(record.hasdataChanged) val=maxQty;
  2388. val= val==0?maxQty:val;
  2389. if(record.data['ma_thisqty'] != val) {
  2390. record.set('ma_thisqty', val);
  2391. }
  2392. }
  2393. var grid = Ext.getCmp('editorColumnGridPanel'),items = grid.store.data.items;
  2394. if(!grid.lockrender && Ext.getCmp('set').value) {
  2395. Ext.each(items, function(item){
  2396. if(item.data['mm_code'] == code){
  2397. var max = item.data['mm_oneuseqty'] * val;
  2398. var t = 0;
  2399. if(item.data.isrep) {
  2400. t = item.data['mm_canuserepqty'] - item.data['mm_totaluseqty'];
  2401. } else {
  2402. t = item.data['mm_qty'] - item.data['mm_canuserepqty'] - (item.data['mm_havegetqty'] +
  2403. item.data['mm_returnmqty'] - item.data['mm_addqty'] - item.data['mm_haverepqty']) -
  2404. item.data['mm_totaluseqty'];
  2405. }
  2406. max = Math.min(t, max);
  2407. if(item.data['mm_thisqty'] > max){
  2408. item.set('mm_thisqty', max);
  2409. }
  2410. }
  2411. });
  2412. }
  2413. }
  2414. return val;
  2415. },
  2416. /**
  2417. * @PM.Make
  2418. * 制造单本次领料数mm_thisqty=mm_qty(制单数)-mm_canuserepqty(替代维护数)-mm_havegetqty(已领)+mm_returnmqty(不良数)
  2419. * -mm_addqty(补料数)-mm_haverepqty(替代已领)-mm_totaluseqty(已转领料)
  2420. */
  2421. pm_make_thisqty: function(val, meta, record, x, y){
  2422. meta.tdCls = "x-grid-cell-renderer-bl";
  2423. var t = 0,busy = Ext.getCmp('editorColumnGridPanel').busy;
  2424. if(record.data.isrep) {
  2425. t = record.data['mm_qty'] - (record.data['mm_havegetqty'] - record.data['mm_addqty'] + record.data['mm_returnmqty'] ) - record.data['mm_totaluseqty'] ;
  2426. } else {
  2427. t = record.data['mm_qty'] - record.data['mm_canuserepqty'] - (record.data['mm_havegetqty'] - record.data['mm_haverepqty'] +
  2428. record.data['mm_returnmqty'] - record.data['mm_repreturnmqty'] - record.data['mm_addqty'] + record.data['mm_repaddqty']) -
  2429. record.data['mm_totaluseqty'];
  2430. }
  2431. t = t < 0 ? 0 : t;
  2432. var max = t.toFixed(3);
  2433. max = max < 0 ? 0 : max;
  2434. //ma_thisqty*mm_oneuseqty
  2435. var tqty = max;
  2436. if(Ext.getCmp('set').value) {
  2437. var items = Ext.getCmp('grid').store.data.items,mItem = null;
  2438. Ext.each(items, function(item){
  2439. if(item.data['ma_code'] != null && item.data['ma_code'].toString().trim() != ''
  2440. && item.data['ma_code'] == record.data['mm_code']){
  2441. mItem = item;
  2442. if(item.data['ma_thisqty'] > 0 && record.data['mm_oneuseqty'] > 0){
  2443. max = item.data['ma_thisqty'] * record.data['mm_oneuseqty'];
  2444. tqty = Math.min(max, t);
  2445. tqty = Number(tqty.toFixed(3));
  2446. }
  2447. }
  2448. });
  2449. }
  2450. val = Number(val.toFixed(3));
  2451. if(val > tqty) {
  2452. if(!busy)
  2453. showError("本次领料数不得超过" + tqty);
  2454. val = tqty;
  2455. record.set('mm_thisqty', val);
  2456. } else if(val < 0){
  2457. if(!busy)
  2458. showError("本次领料数不能是负数");
  2459. val = tqty;
  2460. record.set('mm_thisqty', val);
  2461. } else if(val == 0 && tqty != 0){
  2462. val = tqty;
  2463. record.set('mm_thisqty', val);
  2464. } else {
  2465. // if(val < max && mItem) {//本次领料数 <本次发料套数*单位用量
  2466. // mItem.maxQty = Math.ceil(val/record.data['mm_oneuseqty']);
  2467. // mItem.set('ma_thisqty', mItem.maxQty);
  2468. // }
  2469. }
  2470. return val;
  2471. },
  2472. /**
  2473. * @PM.Make
  2474. * 替代料,特殊样式
  2475. */
  2476. pm_isrep: function(val, meta, record, x, y){
  2477. var field = this.columns[y].dataIndex;
  2478. if(record.data.isrep) {
  2479. meta.tdCls = "x-grid-cell-renderer-cl";
  2480. if(field == 'mm_code') {
  2481. return '<img src="' + basePath + 'resource/images/renderer/important.png">' +
  2482. '替代料';
  2483. } else {
  2484. return val;
  2485. }
  2486. }
  2487. return val;
  2488. },
  2489. /**
  2490. * @PM.Make
  2491. * 成套退料,本次退料套数
  2492. */
  2493. pm_make_return_thisqty: function(val, meta, record, x, y){
  2494. var code = record.data['ma_code'], busy = Ext.getCmp('grid').busy;
  2495. record.hasdataChanged=false;
  2496. if(!Ext.isEmpty(record.data['ma_id']) && !Ext.isEmpty(code)) {
  2497. var nQty = record.data['ma_qty'];
  2498. if(record.maxQty!=nQty){
  2499. record.maxQty=nQty;
  2500. record.hasdataChanged=true;
  2501. }
  2502. var maxQty = Math.min(record.maxQty, nQty);
  2503. if(val > maxQty) {
  2504. if(!busy && !record.hasdataChanged)
  2505. showError('本次退料套数不能超过<' + maxQty + '>,单号:' + code);
  2506. val = maxQty;
  2507. if(record.data['ma_thisqty'] != val) {
  2508. record.set('ma_thisqty', val);
  2509. }
  2510. } else {
  2511. if(record.hasdataChanged) val=maxQty;
  2512. val= val==0?maxQty:val;
  2513. if(record.data['ma_thisqty'] != val) {
  2514. record.set('ma_thisqty', val);
  2515. }
  2516. }
  2517. var grid = Ext.getCmp('editorColumnGridPanel'),items = grid.store.data.items;
  2518. if(!grid.lockrender) {
  2519. Ext.each(items, function(item){
  2520. if(item.data['mm_code'] == code){
  2521. var max = item.data['mm_oneuseqty'] * val;
  2522. var t = item.data['mm_onlineqty'] || 0;
  2523. max = Math.min(t, max);
  2524. if(item.data['mm_thisqty'] > max){
  2525. item.set('mm_thisqty', max);
  2526. }
  2527. }
  2528. });
  2529. }
  2530. }
  2531. return val;
  2532. },
  2533. /**
  2534. * @PM.Make
  2535. * 制造单本次退料数mm_thisqty<=mm_onlineqty(在制数)
  2536. */
  2537. pm_make_rqty: function(val, meta, record, x, y, store){
  2538. meta.style = "background:#C6E2FF;";
  2539. if(record.data['mm_onlineqty'] < 0) {// 返修工单退料
  2540. return val;
  2541. }
  2542. var mrec = record;
  2543. if(record.data.isrep) {
  2544. //替代料 本次数量 按主料本次数量计算
  2545. store.each(function(d){
  2546. if(d.data.mm_id == record.data.mm_id && !d.data.isrep) {
  2547. mrec = d;return;
  2548. }
  2549. });
  2550. }
  2551. var t = ((mrec.data['mm_onlineqty'] || 0) - (mrec.data['mm_backqty'] || 0)),
  2552. busy = Ext.getCmp('editorColumnGridPanel').busy;
  2553. var max = t;
  2554. max = max < 0 ? 0 : max;
  2555. var tqty = max;
  2556. /*退料不需要此限制
  2557. var items = Ext.getCmp('grid').store.data.items;
  2558. Ext.each(items, function(item){
  2559. if(item.data['ma_code'] != null && item.data['ma_code'].toString().trim() != ''
  2560. && item.data['ma_code'] == mrec.data['mm_code']){
  2561. mItem = item;
  2562. if(item.data['ma_thisqty'] > 0 && mrec.data['mm_oneuseqty'] > 0){
  2563. max = item.data['ma_thisqty'] * mrec.data['mm_oneuseqty'];
  2564. tqty = Math.min(max, t);
  2565. }
  2566. }
  2567. });
  2568. */
  2569. if(val > tqty) {
  2570. if(!busy)
  2571. showError("本次退料数不得超过" + tqty);
  2572. val = tqty;
  2573. } else if(val < 0){
  2574. if(!busy)
  2575. showError("本次退料数不能是负数");
  2576. val = tqty;
  2577. } else if(val == 0 && tqty != 0){
  2578. val = tqty;
  2579. }
  2580. if(record.get('mm_thisqty') != val)
  2581. record.set('mm_thisqty', val);
  2582. return val;
  2583. },
  2584. /**
  2585. * @PM.Make
  2586. * 成套补料,本次补料套数
  2587. */
  2588. pm_make_add_thisqty: function(val, meta, record, x, y){
  2589. var code = record.data['ma_code'], busy = Ext.getCmp('grid').busy;
  2590. if(!Ext.isEmpty(record.data['ma_id']) && !Ext.isEmpty(code)) {
  2591. var nQty = record.data['ma_qty'] - record.data['ma_haveqty'];
  2592. record.maxQty = record.maxQty || nQty;
  2593. var maxQty = Math.min(record.maxQty, nQty);
  2594. if(val > maxQty) {
  2595. if(!busy)
  2596. showError('本次补料套数不能超过<' + maxQty + '>,单号:' + code);
  2597. val = maxQty;
  2598. if(record.data['ma_thisqty'] != val) {
  2599. record.set('ma_thisqty', val);
  2600. }
  2601. } else if(val == 0) {
  2602. val = maxQty;
  2603. if(record.data['ma_thisqty'] != val) {
  2604. record.set('ma_thisqty', val);
  2605. }
  2606. }
  2607. var grid = Ext.getCmp('editorColumnGridPanel'),items = grid.store.data.items;
  2608. if(!grid.lockrender) {
  2609. Ext.each(items, function(item){
  2610. if(item.data['mm_code'] == code){
  2611. var max = item.data['mm_oneuseqty'] * val;
  2612. var t = 0;
  2613. if(item.data.isrep) {
  2614. t = 0;
  2615. } else {
  2616. t = item.data['mm_scrapqty'] + item.data['mm_returnmqty'] - item.data['mm_balance']
  2617. - item.data['mm_addqty'] ;//- item.data['mm_totaluseqty']
  2618. }
  2619. max = Math.min(t, max);
  2620. if(item.data['mm_thisqty'] > max){
  2621. item.set('mm_thisqty', max);
  2622. }
  2623. }
  2624. });
  2625. }
  2626. }
  2627. return val;
  2628. },
  2629. /**
  2630. * @PM.Make
  2631. * 本次补料数: mm_scrapqty(报废) + mm_returnmqty(制程不良退料数) - mm_balance(备损数) - mm_addqty(补料数)// - mm_totaluseqty(已转领料数量)
  2632. *
  2633. */
  2634. pm_make_thisadd: function(val, meta, record, x, y) {
  2635. meta.tdCls = "x-grid-cell-renderer-bl";
  2636. var t = 0,busy = Ext.getCmp('editorColumnGridPanel').busy;
  2637. if(record.data.isrep) {
  2638. return val;
  2639. } else {
  2640. t = record.data['mm_scrapqty'] + record.data['mm_returnmqty'] - record.data['mm_balance']
  2641. - record.data['mm_addqty'];// - record.data['mm_totaluseqty']
  2642. }
  2643. var max = t;
  2644. max = max < 0 ? 0 : max;
  2645. var tqty = max;
  2646. var items = Ext.getCmp('grid').store.data.items;
  2647. Ext.each(items, function(item){
  2648. if(item.data['ma_code'] != null && item.data['ma_code'].toString().trim() != ''
  2649. && item.data['ma_code'] == record.data['mm_code']){
  2650. mItem = item;
  2651. if(item.data['ma_thisqty'] > 0 && record.data['mm_oneuseqty'] > 0){
  2652. max = item.data['ma_thisqty'] * record.data['mm_oneuseqty'];
  2653. tqty = Math.min(max, t);
  2654. }
  2655. }
  2656. });
  2657. if(val > tqty) {
  2658. if(!busy)
  2659. showError("本次补料数不得超过" + tqty);
  2660. val = tqty;
  2661. record.set('mm_thisqty', val);
  2662. } else if(val < 0){
  2663. if(!busy)
  2664. showError("本次补料数不能是负数");
  2665. val = tqty;
  2666. record.set('mm_thisqty', val);
  2667. } else if(val == 0 && tqty != 0){
  2668. val = tqty;
  2669. record.set('mm_thisqty', val);
  2670. }
  2671. return val;
  2672. },
  2673. /**
  2674. * @PM.Make
  2675. * ProductAll!Query MRP仓剩余可用=pr_mrponhand-pr_commited
  2676. */
  2677. pm_ProductAll_onhandlack: function(val, meta, record, x, y){
  2678. var t = 0 ;
  2679. t = record.data['v_po_mrponhand'] - record.data['v_mrpsaqty'] - record.data['v_forecastqty'] - record.data['v_mrpmmqty'] ;
  2680. var field = this.columns[y].dataIndex;
  2681. return t;
  2682. //record.set(field, t);
  2683. },
  2684. /**
  2685. * @PM.Make
  2686. * ProductAll!Query 收料仓剩余可用=pr_mrponhand+pr_reconhand-pr_commited
  2687. */
  2688. pm_ProductAll_reconhandlack: function(val, meta, record, x, y){
  2689. var t = 0 ;
  2690. t = record.data['v_po_mrponhand'] + record.data['v_reconhand'] - record.data['v_mrpsaqty'] - record.data['v_forecastqty'] - record.data['v_mrpmmqty'] ;
  2691. var field = this.columns[y].dataIndex;
  2692. return t;
  2693. },
  2694. /**
  2695. * @PM.Make
  2696. * ProductAll!Query MRP在途剩余可用=pr_mrponhand+pr_onorder-pr_commited
  2697. */
  2698. pm_ProductAll_onorderlack: function(val, meta, record, x, y){
  2699. var t = 0 ;
  2700. t = record.data['v_po_mrponhand'] + record.data['v_mrppoqty'] + record.data['v_mrpmaqty'] - record.data['v_forecastqty'] - record.data['v_mrpsaqty']- record.data['v_mrpmmqty'] ;
  2701. var field = this.columns[y].dataIndex;
  2702. return t;
  2703. },
  2704. /**
  2705. * @PM.Make
  2706. * ProductAll!Query MRP请购剩余可用=pr_mrponhand+pr_onorder+pr_arkqty-pr_commited
  2707. */
  2708. pm_ProductAll_arklack: function(val, meta, record, x, y){
  2709. var t = 0;
  2710. t = record.data['v_po_mrponhand'] + record.data['v_mrppoqty'] + record.data['v_mrpmaqty'] + record.data['v_arkqty'] - record.data['v_mrpsaqty'] - record.data['v_forecastqty'] - record.data['v_mrpmmqty'] ;
  2711. var field = this.columns[y].dataIndex;
  2712. return t;
  2713. },
  2714. /**
  2715. *@PM.MakePlan 生产计划维护
  2716. * */
  2717. pm_make_presMakePlan:function(val,meta,record,rol){
  2718. if(val)
  2719. return '<a href="javascript:showWin('+ '\''+rol+'\''+');">' + val + '</a>';
  2720. else return null;
  2721. },
  2722. /**
  2723. * 颜色列
  2724. * @expression bgcolor
  2725. */
  2726. bgcolor: function(val, meta, record, x, y){
  2727. return "<div style='background:#" + val + " !important'>" + val + "</div>";
  2728. },
  2729. /**
  2730. * 颜色列
  2731. * @expression bgcolor2
  2732. */
  2733. bgcolor2: function(val, meta, record, x, y){
  2734. return '<div style="background:#' + val + '">&nbsp;</div>';
  2735. },
  2736. /**
  2737. * 年和月
  2738. */
  2739. yearmonth: function(val, meta, record, x, y){
  2740. meta.style = "background:#C6E2FF;";
  2741. if(val == null || val == ''){
  2742. var date = new Date();
  2743. var year = date.getFullYear();
  2744. var month = date.getMonth() + 1;
  2745. month = month < 10 ? '0' + month : month;
  2746. val = '' + year + month;
  2747. }
  2748. var field = this.columns[y].dataIndex;
  2749. if(record.data[field] != val){
  2750. record.set(field, val);
  2751. }
  2752. return val;
  2753. },
  2754. /**
  2755. * ??
  2756. */
  2757. date: function(val, meta, record){
  2758. meta.style = "background:#C6E2FF;";
  2759. if(val){
  2760. return '<span style="color:blue;padding-left:2px">' + Ext.Date.toString(val); + '</span>';
  2761. } else
  2762. return '<span style="color:blue;padding-left:2px"></span>';
  2763. },
  2764. /**
  2765. * 网络寻呼-状态prd_status
  2766. * -1未读 1已读 0保留
  2767. */
  2768. pagingReleaseStatus: function(val, meta, record){
  2769. var d = Number(val);
  2770. var str = '';
  2771. switch (d){
  2772. case 0:
  2773. str = '<span style="color:#20B7B9;padding-left:2px">保留</span>';
  2774. break;
  2775. case 1:
  2776. str = '<img src="' + basePath + 'resource/images/renderer/remind.png">' +
  2777. '<span style="color:blue;padding-left:2px">已阅</span>';
  2778. break;
  2779. case -1:
  2780. str = '<img src="' + basePath + 'resource/images/renderer/remind2.png">' +
  2781. '<span style="color:red;padding-left:2px">未阅</span>';
  2782. break;
  2783. }
  2784. return str;
  2785. },
  2786. /**
  2787. * @OA
  2788. * 不通过监听itemmousedown来查看明细,
  2789. * 而是点击button
  2790. */
  2791. detailbutton: function(msg, meta, record){
  2792. /**
  2793. * 寻呼内容列表显示时
  2794. * 将表情代码转化成图片。
  2795. * 插入的图片和附件代码不转化
  2796. */
  2797. if(msg){
  2798. msg = msg.toString();
  2799. var faces = msg.match(/&f\d+;/g);
  2800. Ext.each(faces, function(f){//表情
  2801. msg = msg.replace(f, '<img src="' + basePath + 'resource/images/face/' + f.substr(2).replace(';', '') + '.gif">');
  2802. });
  2803. }
  2804. return (msg || ' ') + "<input type='button' value='查看详细' name='detailbutton' style='float:right;color:gray;font-size:13px;cursor:pointer;height:25px;' onClick='Ext.getCmp(\"grid\").onGridItemClick();'/>";
  2805. },
  2806. opendetail: function(val, meta, record) {
  2807. if(!Ext.isEmpty(val)){
  2808. var sd_id = record.get('sd_id');
  2809. return val + "<input type='button' value='出货排程' name='detailbutton' " +
  2810. "style='float:right;color:gray;font-size:13px;cursor:pointer;height:25px;' onClick='window.open(\"" + basePath +
  2811. "jsps/scm/sale/saleDetail.jsp?formCondition=sd_id="+sd_id+"&gridCondition=sdd_sdid="+sd_id+"\", \"测试\", \"width=800,height=600,top=30,left=200\")'/>";
  2812. }
  2813. },
  2814. /**
  2815. * 不直接显示附件的ID字符串,转化显示附件数
  2816. */
  2817. attachcolumn: function(val, meta, record){
  2818. if(val != null && val != ''){
  2819. return val.split(',').length + ' 个';
  2820. } else {
  2821. return '无';
  2822. }
  2823. },
  2824. /**
  2825. * 对任务完成率不同阶段进行图片标识
  2826. */
  2827. percentdone: function(val, meta, record){
  2828. val == null || 0;
  2829. if(val < 30)
  2830. return '<img src="' + basePath + 'resource/images/renderer/remind2.png">'+'<span style="color:#436EEE;padding-left:2px">' + val + '</span>';
  2831. else if(val > 30 && val < 50)
  2832. return '<img src="' + basePath + 'resource/images/renderer/remind.png">'+'<span style="color:#5F9EA0;padding-left:2px">' + val + '</span>';
  2833. else if(val == 100){
  2834. return '<img src="' + basePath + 'resource/images/renderer/award1.png">'+'<span style="color:blue;padding-left:2px">' + val + '</span>';
  2835. }else if(val > 80){
  2836. return '<img src="' + basePath + 'resource/images/renderer/award2.png">'+'<span style="color:green;padding-left:2px">' + val + '</span>';
  2837. }
  2838. else
  2839. return val;
  2840. },
  2841. /**
  2842. * SCM 请购转采购替代料
  2843. * */
  2844. ap_isrep: function(val, meta, record, x, y){
  2845. if(record.data.ad_ifrep==-1) {
  2846. meta.tdCls = "x-grid-cell-renderer-cl";
  2847. return '<img src="' + basePath + 'resource/images/taskdescription.png">' + val;
  2848. }
  2849. return val;
  2850. },
  2851. isDateModel_type: function(val){
  2852. if(val =='zhou'){
  2853. return '周';
  2854. } else if(val == 'yue'){
  2855. return '月';
  2856. } else {
  2857. return '未知';
  2858. }
  2859. },
  2860. string_substring: function(val, meta, record, x, y, store, view){
  2861. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y],field = column.dataIndex;
  2862. if(!me || !me.args){
  2863. return val;
  2864. } else {
  2865. var i=me.args['string_substring'][field];
  2866. return val.substring(Number(i[0]),Number(i[1]));
  2867. }
  2868. },
  2869. /**
  2870. * @MA
  2871. */
  2872. logicDesc_type: function(val){
  2873. if (val == 1) {
  2874. return '主算法';
  2875. } else if(val == 0){
  2876. return '一般算法';
  2877. } else {
  2878. return '系统算法';
  2879. }
  2880. },
  2881. /**
  2882. * 通用方法
  2883. * 获取本地常用属性
  2884. * em_name,em_code,em_uu,en_uu...
  2885. * 以及获取本地时间
  2886. * @expression getLocal(em_code),getLocal(Y-m-d),getLocal(time)
  2887. */
  2888. getLocal: function(val, meta, record, x, y, store, view){
  2889. var grid = view.ownerCt,me = grid.RenderUtil,column = grid.columns[y],field = column.dataIndex;
  2890. if(!me || !me.args){
  2891. grid = grid.ownerCt, me = grid.RenderUtil;
  2892. if(!me || !me.args){
  2893. return val;
  2894. }
  2895. }
  2896. var arg = me.args.getLocal[field][0],v = val;
  2897. if(contains('Y-m-d H:i:s', arg)) {
  2898. v = Ext.Date.format(new Date(), arg);
  2899. } else if('time' == arg){
  2900. v = Ext.Date.format(new Date(), 'Y-m-d H:i:s');
  2901. } else if('date' == arg){
  2902. v = Ext.Date.format(new Date(), 'Y-m-d');
  2903. } else {
  2904. v = window[arg];
  2905. }
  2906. if(v && Ext.isEmpty(val)) {
  2907. val = v;
  2908. record.set(field, v);
  2909. }
  2910. return val;
  2911. },
  2912. /**
  2913. * @MA
  2914. * 逻辑顺序 0-before,1-after
  2915. */
  2916. logicturn: function(val){
  2917. switch (Number(val)){
  2918. case 0 :
  2919. val = 'before';break;
  2920. case 1 :
  2921. val = 'after';break;
  2922. }
  2923. return val;
  2924. },
  2925. /**
  2926. * @MA
  2927. * form配置界面,将从datadictonary得到的ddd_fieldtype转化为form能识别的fd_type
  2928. */
  2929. form_type: function(val, meta, record, x, y, store, view){
  2930. var grid = view.ownerCt,column = grid.columns[y],e,f, _v = val ? val.toLowerCase() : '', len = 20;
  2931. if(/^(varchar2)/.test(_v)) {
  2932. val = 'S';
  2933. len = Number(_v.substring(_v.indexOf('(') + 1, _v.indexOf(')')));
  2934. } else if (/^(int)/.test(_v)) {
  2935. val = 'N';
  2936. } else if (/^(number)/.test(_v)) {
  2937. val = 'N';
  2938. } else if (/^(float)/.test(_v)) {
  2939. val = 'N';
  2940. } else if (/^(smallint)/.test(_v)) {
  2941. val = 'N';
  2942. } else if ('date' == _v) {
  2943. val = 'D';
  2944. } else if ('timestamp' == _v) {
  2945. val = 'DT';
  2946. }
  2947. if (record.get('fd_type') != val) {
  2948. record.set('fd_type', val);
  2949. record.set('fd_fieldlength', len);
  2950. }
  2951. if ((e = (column.editor || column.filter)) != null && e.store) {
  2952. var s = null,dd = e.store.data;
  2953. s = Ext.Array.filter(dd, function(d, index){
  2954. return d.value == val;
  2955. });
  2956. if(s && s.length > 0) {
  2957. return s[0].display;
  2958. }
  2959. } else if ((f = column.field) != null) {
  2960. return f.rawValue;
  2961. }
  2962. return val;
  2963. },
  2964. /**
  2965. * @FA.VoucherStyle
  2966. */
  2967. fa_vdclass: function(val, meta, record, x, y, store, view) {
  2968. if(!Ext.isEmpty(val)) {
  2969. var count = 0;
  2970. store.each(function(d){
  2971. if(d.get('vd_class') == val) {
  2972. count++;
  2973. }
  2974. });
  2975. var v = record.get('vd_detno');
  2976. if(v <= 0 || v > count) {
  2977. record.set('vd_detno', count);
  2978. }
  2979. }
  2980. return val;
  2981. } ,
  2982. /**
  2983. * @FA.VoucherStyle
  2984. */
  2985. fa_custmonthcys_batch: function(val, meta, record, x, y, store, view) {
  2986. var cm_endamount = record.data['cm_endamount']; //应收金额
  2987. var cm_prepayend = record.data['cm_prepayend']; //预收金额
  2988. if(Ext.isNumber(Number(cm_endamount))&&Ext.isNumber(Number(cm_prepayend))){
  2989. if(cm_endamount == '' && cm_prepayend == ''){
  2990. return '';
  2991. }
  2992. return Number(cm_endamount) > Number(cm_prepayend) ? Ext.util.Format.number(cm_endamount, '0,000.00') :Ext.util.Format.number(cm_prepayend,'0,000.00') ;
  2993. } else {
  2994. return '';
  2995. }
  2996. } ,
  2997. /**
  2998. * @流程等待时间
  2999. */
  3000. WaitTime:function(val, meta, record){
  3001. if(record){
  3002. var launchTime=record.data.jp_launchTime;
  3003. return parseInt((new Date().getTime()-new Date(launchTime).getTime())/60000);
  3004. }
  3005. else return null;
  3006. },
  3007. /**
  3008. * @FA.Voucher
  3009. * VoucherCreate
  3010. * 打开凭证
  3011. */
  3012. openvoucher: function(val, meta, record) {
  3013. if(!Ext.isEmpty(val)) {
  3014. if(!window.__fn) {
  3015. var fn = function(vo_code) {
  3016. Ext.Ajax.request({
  3017. url: basePath + 'common/getFieldData.action',
  3018. params: {
  3019. caller: 'Voucher',
  3020. field: 'vo_id',
  3021. condition: 'vo_code=\'' + vo_code + '\''
  3022. },
  3023. callback: function(opt, s, r) {
  3024. if(s) {
  3025. var rs = Ext.decode(r.responseText);
  3026. if(rs.data != null && rs.data > 0) {
  3027. openUrl('jsps/fa/ars/voucher.jsp?formCondition=vo_idIS' + rs.data +
  3028. '&gridCondition=vd_voidIS' + rs.data);
  3029. }
  3030. }
  3031. }
  3032. });
  3033. };
  3034. window.__fn = fn;
  3035. }
  3036. val = '<a href="javascript:window.__fn(\'' + val + '\');">' + val + '</a>';
  3037. }
  3038. return val;
  3039. },
  3040. prod_disable : function(v, m, r) {
  3041. var s = r.get('pr_status');
  3042. m.style = '';
  3043. if('已删除' == s || '已禁用' == s) {
  3044. m.style = 'color:red;';
  3045. }
  3046. return v;
  3047. },
  3048. /**
  3049. * @PM
  3050. * 制造单批量转FQC前,判断根据物料大类,批号需要手工录入(国扬)
  3051. **/
  3052. turnfqc_requirebatch : function(v, m, r, x, y, store, view) {
  3053. var kinds = ['CWDM模块','PCBA板','PCB板','光开关','结构件','模拟光模块','模拟光器件','数字光模块','数字光器件','数字器件材料','无源半成品','无源器件材料'];
  3054. if(kinds.indexOf(v) > -1 && view.ownerCt.selModel.isSelected(r) && Ext.isEmpty(r.get('ma_contractcode'))) {
  3055. showError('需要填写批号,工单:' + r.get('ma_code'));
  3056. }
  3057. return v;
  3058. },
  3059. /**
  3060. * @Scm.Application
  3061. * 请购单差异天数计算(国扬)
  3062. **/
  3063. application_differdays : function(val, meta, record){
  3064. var v = record.get('ad_delivery');
  3065. if(v != null) {
  3066. return Math.round((v-Ext.getCmp('ap_date').getValue())/86400000)-(record.get('ad_leadtime'));
  3067. }
  3068. return 0;
  3069. },
  3070. /**
  3071. * @Pm.MakeScrap
  3072. * 报废单是否超备损数报废
  3073. **/
  3074. ifoverqtyScrap : function(val, meta, record){
  3075. var v1 = record.get('md_allscrapqty');
  3076. var v2 = record.get('mm_balanceqty');
  3077. var v;
  3078. if(v1>0 && v1>v2) {
  3079. v='是';
  3080. }else
  3081. v= '否';
  3082. return v;
  3083. },
  3084. /**
  3085. * @Scm。ProdInOut
  3086. * 生产退料单,是否超损耗退料
  3087. **/
  3088. ifoverqtyReturn : function(val, meta, record){
  3089. var v1 = record.get('pd_orderqty');
  3090. var v2 = record.get('mm_balanceqty');
  3091. var v;
  3092. if(v1>0 && v1>v2 && record.get('pd_description')=="制程不良") {
  3093. v='是';
  3094. }else
  3095. v= '否';
  3096. return v;
  3097. },
  3098. /**
  3099. * @Pm。
  3100. * 增加物料的关联信息查看render(鼠标停在某个物料上时,显示一个tip提示信息,
  3101. * 包含物料的MRP库存,不良品库存,采购待检数,PO在途数,请购在途数,工单未发料数,工单为完工数)
  3102. **/
  3103. ProductHref : function(val, meta, record,x,y,store, view){
  3104. document.body.addEventListener("mouseover", function(e){
  3105. callValue=e.target.innerHTML;
  3106. var grid = view.ownerCt;
  3107. if(!view.tip) {
  3108. view.tip = Ext.create('Ext.tip.ToolTip', {
  3109. target: view.el,
  3110. delegate: view.itemSelector,
  3111. trackMouse: true,
  3112. renderTo: Ext.getBody(),
  3113. maxWidth :580,
  3114. listeners: {
  3115. beforeshow: function updateTipBody(tip) {
  3116. Ext.Ajax.request({
  3117. url: basePath + 'pm/product/getProductCount.action',
  3118. params: {
  3119. codes: callValue
  3120. },
  3121. callback: function (opt, s, r) {
  3122. if(s) {
  3123. var rs = Ext.decode(r.responseText);
  3124. if(rs.data) {
  3125. tip.down('grid').setTitle(callValue);
  3126. tip.down('grid').store.loadData(rs.data);
  3127. }
  3128. }
  3129. }
  3130. });
  3131. }
  3132. },
  3133. items: [{
  3134. xtype: 'grid',
  3135. width: 580,
  3136. columns: [{
  3137. text: 'MRP库存',
  3138. cls: 'x-grid-header-1',
  3139. dataIndex:'PO_MRPONHAND',
  3140. width: 80
  3141. },{
  3142. text: '不良品库存',
  3143. cls: 'x-grid-header-1',
  3144. dataIndex: 'PO_DEFECTONHAND',
  3145. width: 80
  3146. },{
  3147. text: '采购待检数',
  3148. cls: 'x-grid-header-1',
  3149. xtype: 'numbercolumn',
  3150. align: 'right',
  3151. dataIndex: 'RECONHAND',
  3152. width: 80
  3153. },{
  3154. text: 'PO在途数',
  3155. cls: 'x-grid-header-1',
  3156. xtype: 'numbercolumn',
  3157. align: 'right',
  3158. dataIndex: 'POQTY',
  3159. width: 80
  3160. },{
  3161. text: '请购在途数',
  3162. cls: 'x-grid-header-1',
  3163. xtype: 'numbercolumn',
  3164. align: 'right',
  3165. dataIndex: 'ARKQTY',
  3166. width: 80
  3167. },{
  3168. text: '工单未发料数',
  3169. cls: 'x-grid-header-1',
  3170. xtype: 'numbercolumn',
  3171. align: 'right',
  3172. dataIndex: 'MMQTY',
  3173. width: 80
  3174. },{
  3175. text: '工单未完工数',
  3176. cls: 'x-grid-header-1',
  3177. xtype: 'numbercolumn',
  3178. align: 'left',
  3179. dataIndex: 'MAQTY',
  3180. width: 100
  3181. }],
  3182. columnLines: true,
  3183. title: '物料分仓库存',
  3184. store: new Ext.data.Store({
  3185. fields: ['PO_MRPONHAND', 'PO_DEFECTONHAND', 'RECONHAND','POQTY','ARKQTY','MMQTY','MAQTY'],
  3186. data: [{}]
  3187. })
  3188. }]
  3189. });
  3190. }
  3191. })
  3192. var field = this.columns[y].dataIndex;
  3193. return record.data[field];
  3194. },
  3195. /**
  3196. * @SCM.Purchase.VerifyApplyChange
  3197. * 收料变更单新数量
  3198. */
  3199. scm_verify_change_qty: function(val, meta, record){
  3200. meta.style = "background:#C6E2FF;";
  3201. var pdq = record.data['pd_qty'], oldqty = record.data['vcd_oldqty'],
  3202. yqty = record.data['pd_yqty'];
  3203. if(pdq != null && pdq > 0) {
  3204. if(yqty + (val-oldqty) > pdq) {
  3205. val = pdq-yqty+oldqty;
  3206. showError('请不要超过采购数<' + pdq + '>!');
  3207. }
  3208. }
  3209. if(record.get('vcd_newqty') != val) {
  3210. record.set('vcd_newqty', val);
  3211. }
  3212. return val;
  3213. },
  3214. /**
  3215. * @PM ProdInOut!Partition!Deal
  3216. * 拆件批量入库 (入库数)
  3217. */
  3218. pm_io_thisqty: function(val, meta, record, x, y, store, view){
  3219. meta.tdCls = "x-grid-cell-renderer-bl";
  3220. var grid = view.ownerCt, me = grid.RenderUtil,column = grid.columns[y] ;
  3221. var gqty = record.data['mm_gqty'];
  3222. var yqty = record.data['mm_yqty'];
  3223. if(gqty != null && gqty > 0 ) {
  3224. var maxValue = gqty-yqty;
  3225. if(record.dirty){
  3226. var thisqty = val ;
  3227. if(column.editor || (column.getEditor && column.getEditor())) {//在允许编辑的情况下,修改值不能大于maxValue
  3228. if (thisqty > maxValue){
  3229. val = maxValue;
  3230. showError('请不要输入超过最大数量<' + maxValue + '>的值!');
  3231. }
  3232. }
  3233. }else{
  3234. val = maxValue;
  3235. }
  3236. if(record.data['mm_thisqty'] != val){
  3237. record.set('mm_thisqty', val);
  3238. }
  3239. return val;
  3240. }
  3241. },
  3242. /**
  3243. * @Fa
  3244. * 应付批量开票
  3245. * */
  3246. FA_THISVOQTY: function(val, meta, record, x, y, store, view){
  3247. var maxValue=record.get('pd_showqty')-record.get('pd_showinvoqty');
  3248. var grid = view.ownerCt,column = grid.columns[y],field = column.dataIndex;
  3249. if(maxValue>0 && val<0){
  3250. val=maxValue;
  3251. showError('开票数量不能小于0!');
  3252. record.set(field,val);
  3253. }
  3254. else if(maxValue<0 && val>0){
  3255. val=maxValue;
  3256. showError('开票数量不能大于0!');
  3257. record.set(field,val);
  3258. }
  3259. if(column.format)
  3260. val = Ext.util.Format.number(val, column.format);
  3261. else
  3262. val = val.toFixed(4);
  3263. return val;
  3264. },
  3265. FA_BILLOUTTHISVOQTY: function(val, meta, record, x, y, store, view){
  3266. var maxValue=record.get('abd_qty')-record.get('abd_yqty');
  3267. var grid = view.ownerCt,column = grid.columns[y],field = column.dataIndex;
  3268. if(maxValue>0 && val<0){
  3269. val=maxValue;
  3270. showError('开票数量不能小于0!');
  3271. record.set(field,val);
  3272. }
  3273. else if(maxValue<0 && val>0){
  3274. val=maxValue;
  3275. showError('开票数量不能大于0!');
  3276. record.set(field,val);
  3277. }
  3278. if(column.format)
  3279. val = Ext.util.Format.number(val, column.format);
  3280. else
  3281. val = val.toFixed(4);
  3282. return val;
  3283. },
  3284. BatchRemind: function(val, meta, record){
  3285. if(record.get('ba_validtime') && Number(record.get('ba_remain'))>0 && new Date()>record.get('ba_validtime'))
  3286. return '<span style="color:red;padding-left:2px">' + val + '</span>';
  3287. else return val;
  3288. },
  3289. SMTMonitor :function(val, meta, record, x, y, store, view){
  3290. var me = this;
  3291. if(Ext.isDefined(me.unitTime)){
  3292. if(Number(me.unitTime)*Number(record.get('msl_remainqty')) < Number(me.warningTime)*60){
  3293. me.getView().getRowClass = function(record, rowIndex, rowParams, store) {
  3294. return 'renderColor';
  3295. };
  3296. var el = Ext.get('audio-error').dom;
  3297. el.play();
  3298. }
  3299. }
  3300. return val;
  3301. },
  3302. /**
  3303. * 明细行附件上传下载
  3304. * */
  3305. detailAttach:function(val, meta, record, x, y, store, view){
  3306. if(record&&record.data["1detailAttach"]!=null&&record.data["1detailAttach"]!=""){
  3307. var attach=record.data["1detailAttach"];
  3308. var grid = view.ownerCt,column = grid.columns[y],field = column.dataIndex;
  3309. if(record.data[field] != attach){
  3310. record.set(field,attach);
  3311. }
  3312. return '<img src="'+basePath+'resource/images/renderer/attach.png">'+'<span style="color:green;padding-left:2px;">' + attach.split(";")[0] + '</span>'+'<a href="' + basePath + 'common/downloadbyId.action?id='+attach.split(";")[1]+'"><img src="' + basePath + 'resource/images/icon/download.png" ></a>';
  3313. }else if(record&&val!=null&&val!=""){
  3314. return '<img src="'+basePath+'resource/images/renderer/attach.png">'+'<span style="color:green;padding-left:2px;">' + val.split(";")[0] + '</span>'+'<a href="' + basePath + 'common/downloadbyId.action?id='+val.split(";")[1]+'"><img src="' + basePath + 'resource/images/icon/download.png" ></a>';
  3315. }else return val;
  3316. },
  3317. /**
  3318. *kpi考核结果 查看分数来源
  3319. * */
  3320. score_from:function(val,meta,record){
  3321. if(record.data.ktd_kiid!=0){
  3322. var ktd_kiid=record.data.ktd_kiid;
  3323. return "<input type='button' value='查看分数来源' name='"+ktd_kiid+"' style='color:gray;font-size:13px;cursor:pointer;height:25px;' onClick='scoreFrom(this.name)' />";
  3324. }
  3325. return '';
  3326. }
  3327. });