| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235 |
- unit ScBigProjManageView;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, JimPages, ZJGrid, ExtCtrls, ComCtrls, ProjectsDM, ZjTrees,
- ActnList, ImgList, ZJGridTrees, ExTreeView, JimTabs, ToolWin, StdCtrls,
- JimLabels, ZjGridDBA, DB, ZjGridTreeDBA, ZJEdits, Menus, ScConsts,
- xmldom, XMLIntf, msxmldom, XMLDoc, Buttons, sdGridDBA, sdGridTreeDBA,
- ScProjManagerTree, dxBar, CheckLst;
- type
- TBuildProjExpandType = (bpetFolder, bpetBuildProj, bpetTender);
- const
- arrBuildProjExpandStr: array [TBuildProjExpandType] of string = ('文件夹', '建设项目', '分段文件');
-
- type
- TScfrmBigProjManage = class(TFrame)
- Splitter1: TSplitter;
- ilstProject: TImageList;
- alstProject: TActionList;
- actnNewBP: TAction;
- actnImportBP: TAction;
- actnDelBP: TAction;
- actnNew: TAction;
- actnInsert: TAction;
- actnOpen: TAction;
- actnGatherProjects: TAction;
- actnAuditProject: TAction;
- actnBPCopyTo: TAction;
- actnCopyProject: TAction;
- actnEditBPName: TAction;
- ztRelaFiles: TZjGridTree;
- odImport: TOpenDialog;
- sdExport: TSaveDialog;
- odOpenFiles: TOpenDialog;
- pnlBuildProjects: TPanel;
- pnlFiles: TPanel;
- tbBuildProject: TToolBar;
- tbNewBP: TToolButton;
- tbImport: TToolButton;
- tbExport: TToolButton;
- tbDelBP: TToolButton;
- zgBuildProjects: TZJGrid;
- dtpEditDate: TDateTimePicker;
- tobtn1: TToolButton;
- tbRenameBP: TToolButton;
- actnImportProject: TAction;
- actnNewFeeFile: TAction;
- actnNewPriceFile: TAction;
- actnImportRelaFile: TAction;
- actnExportRelaFile: TAction;
- actnRenameRelaFile: TAction;
- actnDelRelaFile: TAction;
- actnCopyRelaFile: TAction;
- ppmExportProject: TPopupMenu;
- actnExportSingleProject: TAction;
- pmiExportSingleProject: TMenuItem;
- actnSaveAs: TAction;
- actnSaveAsRelaFile: TAction;
- pmStaticBills: TPopupMenu;
- N1: TMenuItem;
- N2: TMenuItem;
- N3: TMenuItem;
- N4: TMenuItem;
- actnOwnerImport: TAction;
- actnOwnerExport: TAction;
- actnBidderImport: TAction;
- actnBidderExport: TAction;
- tobtn2: TToolButton;
- pnlFindPB: TPanel;
- edtFindBP: TEdit;
- btnFindNext: TSpeedButton;
- staBuildProjects: TsdGridTreeDBA;
- actnNewFolder: TAction;
- actnOpenHistoryDir: TAction;
- pmNew: TPopupMenu;
- N5: TMenuItem;
- N7: TMenuItem;
- N8: TMenuItem;
- actnNewSubFolder: TAction;
- tbStaticBills: TToolButton;
- ilstBtn: TImageList;
- actnImport: TAction;
- actnExport: TAction;
- pmImport: TPopupMenu;
- miImportTender: TMenuItem;
- actnNewTender: TAction;
- actnExportBP: TAction;
- tbOpenTender: TToolButton;
- btn1: TToolButton;
- pnlShowLevel: TPanel;
- cbExpandTo: TComboBox;
- jpcPropties: TJimPageControl;
- jpcProptiesTender: TJimPage;
- jpcProptiesBuildProject: TJimPage;
- Panel4: TPanel;
- JimGradLabel4: TJimGradLabel;
- zgProperties: TZJGrid;
- cbbProperties: TZjComboBox;
- cbbProfit: TZjComboBox;
- pnlBPPropties: TPanel;
- Panel1: TPanel;
- JimGradLabel1: TJimGradLabel;
- Panel2: TPanel;
- Panel5: TPanel;
- Label1: TLabel;
- cbbGatherOtherFee: TComboBox;
- Panel3: TPanel;
- JimGradLabel3: TJimGradLabel;
- ToolBar1: TToolBar;
- tbNewFeeFile: TToolButton;
- tbNewUnitPriceFile: TToolButton;
- tbImportRelaFile: TToolButton;
- tbExportRelaFile: TToolButton;
- tbCopyRelaFile: TToolButton;
- tbSaveAsRelaFile: TToolButton;
- tbRenameRelaFile: TToolButton;
- ToolButton10: TToolButton;
- tbDeleteRelaFile: TToolButton;
- zgRelaFiles: TZJGrid;
- Splitter2: TSplitter;
- zgProjectsByBP: TZJGrid;
- sdProjectsByBP: TsdGridDBA;
- Label2: TLabel;
- edtGatherCoe: TEdit;
- cbbProgressiveFile: TComboBox;
- Label3: TLabel;
- Panel6: TPanel;
- btnCalculateBuildProject: TButton;
- Label4: TLabel;
- actnCalculateBuildProject: TAction;
- Label5: TLabel;
- cbbSiteConstructType: TComboBox;
- jpcBuildProjectProperties: TJimPageControl;
- jpcBuildProjectPropertiesBasic: TJimPage;
- jpcBuildProjectPropertiesZhaoBiao: TJimPage;
- jpcBuildProjectPropertiesTouBiao: TJimPage;
- jpcBuildProjectPropertiesRelaFiles: TJimPage;
- zgBPBasic: TZJGrid;
- zgBPZhaoBiao: TZJGrid;
- zgBPTouBiao: TZJGrid;
- procedure actnOpenUpdate(Sender: TObject);
- procedure actnNewBPExecute(Sender: TObject);
- procedure actnImportBPUpdate(Sender: TObject);
- procedure actnDelBPExecute(Sender: TObject);
- procedure actnBPCopyToExecute(Sender: TObject);
- procedure actnEditBPNameExecute(Sender: TObject);
- procedure actnNewExecute(Sender: TObject);
- procedure actnInsertExecute(Sender: TObject);
- procedure actnOpenExecute(Sender: TObject);
- procedure zgRelaFilesCellCanEdit(Sender: TObject; const ACoord: TPoint;
- var Allow: Boolean);
- procedure zgRelaFilesCellGetColor(Sender: TObject; ACoord: TPoint;
- var AColor: TColor);
- procedure zgPropertiesCellCanEdit(Sender: TObject;
- const ACoord: TPoint; var Allow: Boolean);
- procedure zgPropertiesCellGetColor(Sender: TObject; ACoord: TPoint;
- var AColor: TColor);
- procedure actnImportProjectExecute(Sender: TObject);
- procedure actnImportProjectUpdate(Sender: TObject);
- procedure actnCopyProjectExecute(Sender: TObject);
- procedure actnNewFeeFileExecute(Sender: TObject);
- procedure actnNewPriceFileExecute(Sender: TObject);
- procedure actnNewFeeFileUpdate(Sender: TObject);
- procedure actnExportRelaFileUpdate(Sender: TObject);
- procedure actnExportRelaFileExecute(Sender: TObject);
- procedure zgBuildProjectsDrawCellText(ACanvas: TCanvas;
- const ARect: TRect; const ACoord: TPoint; AGrid: TZJGrid;
- const Text: String; var ADefaultDraw: Boolean);
- procedure actnImportRelaFileExecute(Sender: TObject);
- procedure zgPropertiesCellTextChanged(Sender: TObject; Col,
- Row: Integer);
- procedure zgPropertiesCellButtonClick(Sender: TObject; Col,
- Row: Integer);
- procedure actnDelRelaFileUpdate(Sender: TObject);
- procedure actnDelRelaFileExecute(Sender: TObject);
- procedure actnRenameRelaFileUpdate(Sender: TObject);
- procedure actnRenameRelaFileExecute(Sender: TObject);
- procedure zgRelaFilesCellTextChanged(Sender: TObject; Col,
- Row: Integer);
- procedure zgRelaFilesCellTextChanging(Sender: TObject;
- const ACoord: TPoint; var NewValue: String; var Accept: Boolean);
- procedure zgPropertiesGetCellEditor(Sender: TObject; ACoord: TPoint;
- var AControl: TWinControl);
- procedure zgPropertiesEditorLoadCell(Sender: TObject; ACoord: TPoint;
- AControl: TWinControl);
- procedure zgPropertiesEditorSaveCell(Sender: TObject; ACoord: TPoint;
- AControl: TWinControl);
- procedure actnExportSingleProjectExecute(Sender: TObject);
- procedure actnSaveAsExecute(Sender: TObject);
- procedure actnSaveAsRelaFileExecute(Sender: TObject);
- procedure zgRelaFilesGetCellText(Sender: TObject; const ACoord: TPoint;
- var Value: String; DisplayText: Boolean);
- procedure actnOwnerExportExecute(Sender: TObject);
- procedure actnOwnerImportExecute(Sender: TObject);
- procedure actnBidderExportExecute(Sender: TObject);
- procedure actnBidderImportExecute(Sender: TObject);
- procedure zgPropertiesMouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- procedure zgPropertiesKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- procedure zgBuildProjectsCellTextChanging(Sender: TObject;
- const ACoord: TPoint; var NewValue: String; var Accept: Boolean);
- procedure zgBuildProjectsPaste(Sender: TObject; const ABounds: TRect;
- var Allow: Boolean);
- procedure zgRelaFilesPaste(Sender: TObject; const ABounds: TRect;
- var Allow: Boolean);
- procedure zgPropertiesCellTextChanging(Sender: TObject;
- const ACoord: TPoint; var NewValue: String; var Accept: Boolean);
- procedure edtFindBPChange(Sender: TObject);
- procedure btnFindNextClick(Sender: TObject);
- procedure zgBuildProjectsEditorLoadCell(Sender: TObject;
- ACoord: TPoint; AControl: TWinControl);
- procedure zgBuildProjectsEditorSaveCell(Sender: TObject;
- ACoord: TPoint; AControl: TWinControl);
- procedure zgBuildProjectsGetCellEditor(Sender: TObject; ACoord: TPoint;
- var AControl: TWinControl);
- procedure actnNewFolderExecute(Sender: TObject);
- procedure actnDelBPUpdate(Sender: TObject);
- procedure actnOpenHistoryDirExecute(Sender: TObject);
- procedure zgBuildProjectsCellCanEdit(Sender: TObject;
- const ACoord: TPoint; var Allow: Boolean);
- procedure zgBuildProjectsShowHint(var HintStr: String;
- var CanShow: Boolean; var HintInfo: THintInfo; const ACoord: TPoint);
- procedure actnNewSubFolderExecute(Sender: TObject);
- procedure actnNewSubFolderUpdate(Sender: TObject);
- procedure zgBuildProjectsMouseDown(Sender: TObject;
- Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
- procedure actnNewFolderUpdate(Sender: TObject);
- procedure zgBuildProjectsCellGetColor(Sender: TObject; ACoord: TPoint;
- var AColor: TColor);
- procedure actnExportUpdate(Sender: TObject);
- procedure actnExportExecute(Sender: TObject);
- procedure actnImportExecute(Sender: TObject);
- procedure actnImportBPExecute(Sender: TObject);
- procedure actnNewTenderUpdate(Sender: TObject);
- procedure actnExportBPExecute(Sender: TObject);
- procedure actnExportBPUpdate(Sender: TObject);
- procedure cbExpandToChange(Sender: TObject);
- procedure actnEditBPNameUpdate(Sender: TObject);
- procedure zgPropertiesCanEditAcceptKey(var AKey: Char;
- var Accept: Boolean);
- procedure actnOwnerImportUpdate(Sender: TObject);
- procedure zgRelaFilesMouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- procedure actnOwnerExportUpdate(Sender: TObject);
- procedure actnNewUpdate(Sender: TObject);
- procedure actnImportUpdate(Sender: TObject);
- procedure tbtnTestClick(Sender: TObject);
- procedure zgBuildProjectsGetCellText(Sender: TObject;
- const ACoord: TPoint; var Value: String; DisplayText: Boolean);
- procedure zgProjectsByBPCellCanEdit(Sender: TObject;
- const ACoord: TPoint; var Allow: Boolean);
- procedure edtGatherCoeKeyPress(Sender: TObject; var Key: Char);
- procedure edtGatherCoeChange(Sender: TObject);
- procedure cbbGatherOtherFeeSelect(Sender: TObject);
- procedure cbbProgressiveFileSelect(Sender: TObject);
- procedure actnCalculateBuildProjectUpdate(Sender: TObject);
- procedure actnCalculateBuildProjectExecute(Sender: TObject);
- procedure cbbSiteConstructTypeSelect(Sender: TObject);
- procedure zgBPBasicCellCanEdit(Sender: TObject; const ACoord: TPoint;
- var Allow: Boolean);
- procedure zgBPZhaoBiaoCellCanEdit(Sender: TObject;
- const ACoord: TPoint; var Allow: Boolean);
- procedure zgBPTouBiaoCellCanEdit(Sender: TObject; const ACoord: TPoint;
- var Allow: Boolean);
- procedure zgBPBasicCellTextChanged(Sender: TObject; Col, Row: Integer);
- procedure zgBPBasicCellGetColor(Sender: TObject; ACoord: TPoint;
- var AColor: TColor);
- procedure zgBPZhaoBiaoCellGetColor(Sender: TObject; ACoord: TPoint;
- var AColor: TColor);
- procedure zgBPTouBiaoCellGetColor(Sender: TObject; ACoord: TPoint;
- var AColor: TColor);
- procedure zgBPBasicGetCellEditor(Sender: TObject; ACoord: TPoint;
- var AControl: TWinControl);
- procedure zgBPBasicEditorLoadCell(Sender: TObject; ACoord: TPoint;
- AControl: TWinControl);
- procedure zgBPBasicEditorSaveCell(Sender: TObject; ACoord: TPoint;
- AControl: TWinControl);
- procedure zgBPZhaoBiaoCellTextChanged(Sender: TObject; Col,
- Row: Integer);
- procedure zgBPTouBiaoCellTextChanged(Sender: TObject; Col,
- Row: Integer);
- private
- { Private declarations }
- FProjectParent, FFeeParent, FPriceParent, FRationParent: TZjTreeNode;
- FActive: Boolean;
- FManageProjects: TManageProjects;
- FIsLoading: Boolean;
- FIsPropLoading: Boolean;
- FCurProjIsStaticBills: Boolean; //当前分段是否是固化清单
- procedure SetActive(const Value: Boolean);
- procedure InitViews;
- procedure ClearRelaFilesView;
- procedure RefreshProjectView(ABuildProjectID: Integer = -1);
- procedure RefreshPropertyView;
- procedure RefreshBuildProjectPropertyView(ABuildProjectID: Integer);
- procedure ExportBuildProject(ABuildProjectID: Integer;
- ABuildProjectName, AFileName: string);
- function FindFeeTaxFile(AProjectID: Integer): string;
- function NewRelaFileDisplayName(AName: string): string;
- function GetRelaFileName(ADisplayName: string): string;
- function ImportBuildProjectIfNotExists(ABuildProjName: string): Boolean;
- function ImportBudgetProject(const ABudgetProjFile: string): Boolean;
- function ExportBudgetProject(AID: Integer; const ABuildProject, AProjectName,
- ASourceFile, ABudgetProjFile: string): Boolean;
- // 固化清单 GiLi
- // 固化清单 属性Grid 判断当前行是否允许编辑
- function IsPropertyCanEdit(const ACoord: TPoint): Boolean;
- // 固化清单 导入导出
- procedure ExportStaticBills(ANewAlias: string = ''; AIsOwner: Boolean = False);
- procedure ImportStaticBills(const AFileName: string; AIsOwner: Boolean = False);
- // 固化清单 打开之前 先转换成新的smb文件
- procedure NewGUIDToNewSmpFile(AFileName: string);
- function GetFileGUID(AFileName: string): string;
- // 当从源文件导出固化清单的时候,标记源文件已经导出过固化清单
- procedure SetExportedStaticBillsFlag(AFileName: string; AIsExported: Integer);
- // 判断源文件是否导出过固化清单
- function IsFileHadExportedStaticBills(AFileName: string): Boolean;
- procedure SearchBuildProject(AProjectName: string; AFromHead: Boolean = True);
- function VerifySBP(ABuildProject, AFileName: string): Boolean;
- procedure ExpandTo(AType: TBuildProjExpandType);
- function CurBuildProjID: Integer;
- procedure SetShowFiles(const Value: Boolean);
- function GetShowFiles: Boolean;
- procedure ExportCurrentRelaFile(ASave: Boolean);
- procedure ExportCurrentProjectFile(ASave: Boolean);
- procedure SaveAsRelaFile(ABPID: Integer; AFileName, ANewName, AOldName: string;
- AType: Integer; ACheckExist: Boolean);
- procedure SaveAsRelaFilesByProject(ABPID: Integer;
- AOldTenderNode, ANewTenderNode: TScProjManagerTreeNode);
- function CanSaveAsRelaFilesByProject(ATenderNode: TScProjManagerTreeNode): Boolean;
- procedure DoOnExportProjectXML(Sender: TObject);
- procedure ImportBPProperties(ABuildProjectID: Integer; AProperties: TStrings);
- procedure ExportBPProperties(ABuildProjectID: Integer; AProperties: TStrings);
- public
- { Public declarations }
- // 判断是否是从业主的源文件导出的 固化清单
- function IsOwnerStaticBills(AFileName: string): Boolean;
- constructor Create(AOwner: TComponent); override;
- procedure Init(AManageProjects: TManageProjects);
- procedure BatchExportBuildProject;
- procedure ImportAndOpenBudgetProject(ABuildProjName, ABudgetProjFile: string); overload;
- procedure ImportBP(const AFileName: string);
- procedure ExportCurBuildProject(const AFileName: string);
- procedure ExpXML_QG;
- procedure ExpXML_ZJ;
- function CurSelNodeIsBP: Boolean;
- function GetCurrentBPName: string;
- function GetCurrentFullBuildProjectName: string;
- function OpenAllBudgetProjectOfCurrentBP: TScProjType;
- procedure OpenAllProjectsOfCurBP(var AList: TList);
- procedure ExtractBudgetProjectNames(AStrings: TStrings);
- procedure ImportXML_KM; // 单标段模式,淘汰。
- procedure ImportXML_QG;
- procedure ImportXML_ZheJiang;
- procedure RefreshInfoView;
- function SelectedBuildProject: Boolean;
- function GetSmartProjType: Integer;
- // 建设项目造价计算
- function CanCalculateCurrentBP: Boolean;
- procedure CalculateCurrentBP;
- function NeedBatchCalc: Boolean;
- property Active: Boolean read FActive write SetActive;
- property ShowFiles: Boolean read GetShowFiles write SetShowFiles;
- end;
- implementation
- uses
- ScUtils, ZjIDTree, ScConfig, ScBuildProjectSaverUnit, ScGLJLibs,
- ScMainFrm, ZjCells, ScProjBaseDM, ScProjList, ScFileArchiver, ScFileArchiverConsts,
- ScFeeRateLibsUnit, ScUnitPriceLibsUnit, Math, ScBrowseRelaFilesFrm,
- ScExportBuildProjectsFrm, ScSelectProjectPackageFilesFrm, ScXMLPort, ScProjFrm,
- {$IFDEF _CostService}csParams, {$ENDIF}
- ScCustomMachineDM, ScSelectBuildProjectsFrm, ComObj, ScTypes, ScStaticBills, ScProgressFrm, DBClient,
- sdDB, sdIDTree, ShellAPI, ScSaveAsFileFrm, ScEncryptEditions, ScCommonFeeDM, ScProject, ScTenderKindSelectFrm,
- ScXMLToBuildProject, ScImportZheJiangXMLFrm, DateUtils;
- {$R *.dfm}
- { TScBigProjManageFrm }
- const
- C_Indent = ' ';
- constructor TScfrmBigProjManage.Create(AOwner: TComponent);
- begin
- inherited;
- pnlBuildProjects.Width := Max(Screen.Width - 740, 200);
- //pnlFiles.Width := Screen.Width * 3 div 10;
- //pnlProperties.Width := 325;//Screen.Width * 3 div 10;
- FIsLoading := False;
- FIsPropLoading := False;
- // 固化清单
- FCurProjIsStaticBills := False;
- // 固化清单 界面控制
- if _IsFixedBills then
- tbStaticBills.Visible := True
- else
- tbStaticBills.Visible := False;
- if _IsAreaExe then
- begin
- actnNew.Visible := False;
- actnImportBP.Visible := False;
- actnImportProject.Visible := False;
- end;
- ShowFiles := True;
- end;
- procedure TScfrmBigProjManage.Init(AManageProjects: TManageProjects);
- procedure InitExpandTo;
- var
- bType: TBuildProjExpandType;
- begin
- cbExpandTo.Items.Clear;
- for bType := Low(arrBuildProjExpandStr) to high(arrBuildProjExpandStr) do
- cbExpandTo.Items.Add(arrBuildProjExpandStr[bType]);
- bType := TBuildProjExpandType(ConfigInfo.BuildProjExpandLevel);
- cbExpandTo.ItemIndex := Integer(bType);
- ExpandTo(bType);
- end;
- begin
- FIsLoading := True;
- InitViews;
- FManageProjects := AManageProjects;
- FManageProjects.RefreshInfo := RefreshInfoView;
- staBuildProjects.IDTree := FManageProjects.ManagerTree;
- sdProjectsByBP.DataView := FManageProjects.sdvProjectsByBP;
- FIsLoading := False;
- RefreshInfoView;
- InitExpandTo;
- if (FManageProjects.ManagerTree.Selected = nil) and (FManageProjects.ManagerTree.Count > 0) then
- begin
- FManageProjects.ManagerTree.SelectedIndex := 0;
- if FManageProjects.ManagerTree.Selected <> nil then
- FManageProjects.ManagerTree.Selected.LocateInControl;
- end;
- end;
- procedure TScfrmBigProjManage.InitViews;
- var
- Node, Child: TZjTreeNode;
- begin
- //pnlRelaFiles.Height := Screen.Height * 2 div 6;
- jpcPropties.ShowTabs := False;
- {$IFDEF _ScNoFeeRate}
- tbNewFeeFile.Visible := False;
- {$ENDIF}
- // 建设项目
- {zgBuildProjects.Cells[1, 0].Text := '名称';
- zgBuildProjects.Cells[2, 0].Text := '编制';
- zgBuildProjects.Cells[3, 0].Text := '日期';
- zgBuildProjects.Cells[4, 0].Text := '审核';
- zgBuildProjects.Cells[5, 0].Text := '负责';
- zgBuildProjects.ColWidths[1] := 300;
- zgBuildProjects.ColWidths[2] := 100;
- zgBuildProjects.ColWidths[3] := 100;
- zgBuildProjects.ColWidths[4] := 100;
- zgBuildProjects.ColWidths[5] := 100;
- zgBuildProjects.TextAligns.Cols[1] := gaCenterLeft;
- zgBuildProjects.TextAligns.Cols[2] := gaCenterLeft;
- zgBuildProjects.TextAligns.Cols[3] := gaCenterCenter;
- zgBuildProjects.TextAligns.Cols[4] := gaCenterLeft;
- zgBuildProjects.TextAligns.Cols[5] := gaCenterLeft;
- zgBuildProjects.TextAligns.Alignment[1, 0] := gaCenterCenter;
- zgBuildProjects.TextAligns.Alignment[2, 0] := gaCenterCenter;
- zgBuildProjects.TextAligns.Alignment[3, 0] := gaCenterCenter;
- zgBuildProjects.TextAligns.Alignment[4, 0] := gaCenterCenter;
- zgBuildProjects.TextAligns.Alignment[5, 0] := gaCenterCenter;}
- zgBuildProjects.CellClass.Cols[3] := TZjComboCell;
- ztRelaFiles.Clear;
- zgRelaFiles.RowCount := 1;
- //zgRelaFiles.ColWidths[0] := 22;
- zgRelaFiles.ColWidths[1] := 22;
- zgRelaFiles.ColWidths[2] := 298;
- //zgRelaFiles.ColWidths[3] := 200;
- zgRelaFiles.Cells[2, 0].Text := '名称';
- zgRelaFiles.TextAligns.Cols[0] := gaCenterCenter;
- zgRelaFiles.TextAligns.Cols[1] := gaCenterCenter;
- zgRelaFiles.TextAligns.Cols[2] := gaCenterLeft;
- zgRelaFiles.TextAligns.Alignment[2, 0] := gaCenterCenter;
- Node := ztRelaFiles.AddChild(nil);
- // zgRelaFiles.Cells[0, Node.MajorIndex + zgRelaFiles.FixedRowCount].Width := 2;
- { Node.Caption[1] := '项目文件';
- Node.Expand;
- FProjectParent := Node;
- Node := ztRelaFiles.Add(Node);}
- // zgRelaFiles.Cells[0, Node.MajorIndex + zgRelaFiles.FixedRowCount].Width := 2;
- {$IFNDEF _ScNoFeeRate}
- Node.Caption[1] := '费率文件';
- Node.Expand;
- FFeeParent := Node;
- Node := ztRelaFiles.Add(Node);
- {$ENDIF}
- // zgRelaFiles.Cells[0, Node.MajorIndex + zgRelaFiles.FixedRowCount].Width := 2;
- Node.Caption[1] := '单价文件';
- Node.Expand;
- FPriceParent := Node;
- Node := ztRelaFiles.Add(Node);
- // zgRelaFiles.Cells[0, Node.MajorIndex + zgRelaFiles.FixedRowCount].Width := 2;
- Node.Caption[1] := '定额库';
- Node.Expand;
- FRationParent := Node;
- zgRelaFiles.Selection.Current := Point(2, 1);
- zgRelaFiles.TopLeftCoord := Point(1, 1);
- zgProperties.ColWidths[0] := 120;
- zgProperties.ColWidths[1] := 180;
- zgProperties.Cells[0, 0].Text := '属性';
- zgProperties.Cells[1, 0].Text := '值';
- zgProperties.TextAligns.Cols[0] := gaCenterLeft;
- zgProperties.TextAligns.Cols[1] := gaCenterRight;
- zgProperties.TextAligns.Alignment[0, 0] := gaCenterCenter;
- zgProperties.TextAligns.Alignment[1, 0] := gaCenterCenter;
- zgBPBasic.ColWidths[1] := 150;
- zgBPBasic.ColWidths[2] := 180;
- zgBPBasic.Cells[1, 0].Text := '属性';
- zgBPBasic.Cells[2, 0].Text := '值';
- zgBPBasic.TextAligns.Cols[1] := gaCenterLeft;
- zgBPBasic.TextAligns.Cols[2] := gaCenterRight;
- zgBPBasic.TextAligns.Alignment[1, 0] := gaCenterCenter;
- zgBPBasic.TextAligns.Alignment[2, 0] := gaCenterCenter;
-
- zgBPZhaoBiao.ColWidths[1] := 150;
- zgBPZhaoBiao.ColWidths[2] := 180;
- zgBPZhaoBiao.Cells[1, 0].Text := '属性';
- zgBPZhaoBiao.Cells[2, 0].Text := '值';
- zgBPZhaoBiao.TextAligns.Cols[1] := gaCenterLeft;
- zgBPZhaoBiao.TextAligns.Cols[2] := gaCenterRight;
- zgBPZhaoBiao.TextAligns.Alignment[1, 0] := gaCenterCenter;
- zgBPZhaoBiao.TextAligns.Alignment[2, 0] := gaCenterCenter;
- zgBPTouBiao.ColWidths[1] := 150;
- zgBPTouBiao.ColWidths[2] := 180;
- zgBPTouBiao.Cells[1, 0].Text := '属性';
- zgBPTouBiao.Cells[2, 0].Text := '值';
- zgBPTouBiao.TextAligns.Cols[1] := gaCenterLeft;
- zgBPTouBiao.TextAligns.Cols[2] := gaCenterRight;
- zgBPTouBiao.TextAligns.Alignment[1, 0] := gaCenterCenter;
- zgBPTouBiao.TextAligns.Alignment[2, 0] := gaCenterCenter;
-
- cbbGatherOtherFee.Clear;
- cbbGatherOtherFee.Items.Add('以汇总后定额建安费为基数');
- cbbGatherOtherFee.Items.Add('各汇总工程相加');
- cbbSiteConstructType.Clear;
- cbbSiteConstructType.Items.Add('以汇总后定额建安费(不含专项费用)为基数');
- cbbSiteConstructType.Items.Add('各汇总工程相加');
- CommonFeeLib.GetProgressiveFeeList(cbbProgressiveFile.Items);
- end;
- procedure TScfrmBigProjManage.RefreshPropertyView;
- var
- vNode, vParent: TScProjManagerTreeNode;
- iID, I: Integer;
- PropRec: TsdDataRecord;
- begin
- if not ProjectManager.Active then Exit;
- if staBuildProjects.DataView = nil then Exit;
- // 建设项目总造价
- vNode := TScProjManagerTreeNode(ProjectManager.ManagerTree.Selected);
- if Assigned(vNode) then
- vParent := TScProjManagerTreeNode(vNode.Parent)
- else
- vParent := nil;
- zgProperties.RowCount := Length(PropertyNames) + zgProperties.FixedRowCount;
- if not Assigned(vNode) or not vNode.IsTender then
- begin
- zgProperties.Clear;
- Exit;
- end;
- iID := vNode.ID;
- PropRec := ProjectManager.PropertiesRec(iID);
- if PropRec = nil then
- begin
- zgProperties.Clear;
- Exit;
- end;
- FIsPropLoading := True;
- zgProperties.RowCount := Length(PropertyNames) + zgProperties.FixedRowCount;// + 1;
- // 当要改变属性位置、或者在中间插入新属性时,以下代码维护非常困难,这里换一种实现方法。CSL,2019-06-03
- // for I := 0 to Length(PropertyNames) - 1 do
- // begin
- // if I < 2 then
- // zgProperties.Cells[0, I + zgProperties.FixedRowCount].Text := ProjectPropertiesArray[I]
- // else if I = 2 then
- // zgProperties.Cells[0, I + zgProperties.FixedRowCount].Text := ProjectPropertiesArray[23]
- // else if I < 5 then
- // zgProperties.Cells[0, I + zgProperties.FixedRowCount].Text := ProjectPropertiesArray[I-1]
- // else if I > 5 then
- // zgProperties.Cells[0, I + zgProperties.FixedRowCount + 1].Text := ProjectPropertiesArray[I-1]
- // else
- // begin
- // // 单位工程名称/合同段
- // if _IsGuangDong then
- // zgProperties.Cells[0, I + zgProperties.FixedRowCount].Text := '合同段'
- // else if PropRec.ValueByName(SValue + IntToStr(1)).AsString = '招投标' then
- // zgProperties.Cells[0, I + zgProperties.FixedRowCount].Text := '合同段'
- // else
- // zgProperties.Cells[0, I + zgProperties.FixedRowCount].Text := '单位工程名称';
- // // 编制范围
- // zgProperties.Cells[0, I + zgProperties.FixedRowCount + 1].Text := ProjectPropertiesArray[I-1];
- // end;
- // {$IFDEF _ScNoFeeRate}
- // if (I >= 2) and (I < 18) then
- // zgProperties.Cells[1, I + zgProperties.FixedRowCount].Text :=
- // PropRec.ValueByName(SValue + IntToStr(I + 2)).AsString
- // else
- // {$ENDIF}
- // if I < 2 then
- // zgProperties.Cells[1, I + zgProperties.FixedRowCount].Text :=
- // PropRec.ValueByName(SValue + IntToStr(I + 1)).AsString
- // else if I = 2 then
- // zgProperties.Cells[1, I + zgProperties.FixedRowCount].Text :=
- // PropRec.ValueByName(SValue + IntToStr(25)).AsString
- // else if I < 5 then
- // zgProperties.Cells[1, I + zgProperties.FixedRowCount].Text :=
- // PropRec.ValueByName(SValue + IntToStr(I)).AsString
- // else if I = 5 then
- // begin
- // // 单位工程名称/合同段 -- Value26
- // zgProperties.Cells[1, I + zgProperties.FixedRowCount].Text :=
- // PropRec.ValueByName(SValue + IntToStr(26)).AsString;
- // // 编制范围
- // zgProperties.Cells[1, I + zgProperties.FixedRowCount + 1].Text :=
- // PropRec.ValueByName(SValue + IntToStr(I)).AsString;
- // end
- // else if I > 5 then
- // zgProperties.Cells[1, I + zgProperties.FixedRowCount + 1].Text :=
- // PropRec.ValueByName(SValue + IntToStr(I)).AsString;
- // end;
- for I := Low(PropertyNames) to High(PropertyNames) do
- begin
- zgProperties.Cells[0, I + zgProperties.FixedRowCount - 1].Text := PropertyNames[I];
- zgProperties.Cells[1, I + zgProperties.FixedRowCount - 1].Text := PropRec.ValueByName(PropertyFields[I]).AsString;
- end;
- FIsPropLoading := False;
- {$IFDEF _ScNoFeeRate}
- // 单价文件
- zgProperties.CellClass.Item[1, 4] := TZjEllipsisBtnCell;
- // 编制日期
- zgProperties.CellClass.Item[1, 8] := TZjComboCell;
- // 公路等级
- zgProperties.CellClass.Item[1, 15] := TZjComboCell;
- {$ELSE}
- // 费率文件
- zgProperties.CellClass.Item[1, 4] := TZjEllipsisBtnCell;
- // 单价文件
- zgProperties.CellClass.Item[1, 5] := TZjEllipsisBtnCell;
- // 编制日期
- zgProperties.CellClass.Item[1, 10] := TZjComboCell;
- // 公路等级
- zgProperties.CellClass.Item[1, 17] := TZjComboCell;
- zgProperties.CellClass.Item[1, 22] := TZjComboCell;
- // 税率
- zgProperties.CellClass.Item[1, 23] := TZjComboCell;
- {$ENDIF}
- end;
- procedure TScfrmBigProjManage.SetActive(const Value: Boolean);
- begin
- FActive := Value;
- end;
- procedure TScfrmBigProjManage.actnOpenUpdate(Sender: TObject);
- var
- vNode: TScProjManagerTreeNode;
- begin
- {$IFDEF _ScExportOnly}
- TAction(Sender).Enabled := False;
- Exit;
- {$ENDIF}
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- TAction(Sender).Enabled := TScMainForm(Application.MainForm).IsManageView
- and Assigned(vNode) and vNode.IsTender;
- end;
- procedure TScfrmBigProjManage.actnNewBPExecute(Sender: TObject);
- var
- strName: string;
- ProjItem: TScProjManagerTreeNode;
- begin
- if ScInputQuery('新建建设项目', '请输入建设项目名称', strName, False, True) then
- begin
- strName := Trim(strName);
- if strName = '' then
- begin
- MessageHint('必须输入建设项目名称。');
- Exit;
- end;
- ProjItem := FManageProjects.FindBuildProjectWithSelect(strName);
- if Assigned(ProjItem) then
- MessageWarning(Format('存在同名建设项目或者文件夹[%s]。', [strName]))
- else
- ProjItem := FManageProjects.AddBuildProjectWithSelect(strName, False);
- staBuildProjects.DataView.LocateInControl(ProjItem.Rec);
- end;
- end;
- procedure TScfrmBigProjManage.actnImportBPUpdate(Sender: TObject);
- var
- vNode: TScProjManagerTreeNode;
- begin
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- TAction(Sender).Enabled := TScMainForm(Application.MainForm).IsManageView and
- Assigned(vNode) and not vNode.IsTender;
- end;
- procedure TScfrmBigProjManage.actnDelBPExecute(Sender: TObject);
- var
- vProj: TScProjManagerTreeNode;
- begin
- if staBuildProjects.IDTree.Count > 0 then
- begin
- vProj := FManageProjects.ManagerTree.Selected;
- if vProj.IsTender then
- begin
- if ProjList.IndexByName(vProj.Rec.FileName.AsString) <> nil then
- begin
- MessageHint(0, '文件已打开,不能被删除。');
- Exit;
- end;
- end
- else if FManageProjects.HasTendersOpened(vProj) then
- begin
- if vProj.IsBuildProj then
- MessageHint(0, Format('建设项目[%s]下的标段已打开,请关闭后再删除建设项目。', [vProj.Rec.Name.AsString]))
- else
- MessageHint(0, Format('文件夹[%s]下的标段已打开,请关闭后再删除。', [vProj.Rec.Name.AsString]));
- Exit;
- end;
- if vProj.IsBuildProj then
- begin
- if MessageQuest(0, Format('确定要删除建设项目[%s]吗?', [vProj.Rec.Name.AsString])) = ID_OK then
- begin
- Screen.Cursor := crHourGlass;
- try
- FManageProjects.DeleteNode(vProj);
- finally
- Screen.Cursor := crDefault;
- end;
- end;
- end
- else if vProj.IsFolder then
- begin
- if MessageQuest(0, Format('确定删除文件夹[%s]吗?', [vProj.Rec.Name.AsString])) = ID_OK then
- begin
- Screen.Cursor := crHourGlass;
- try
- FManageProjects.DeleteNode(vProj);
- finally
- Screen.Cursor := crDefault;
- end;
- end;
- end
- else if vProj.IsTender then
- begin
- if MessageQuest(0, Format('确定要删除文件[%s]吗?', [vProj.Rec.Name.AsString])) = ID_OK then
- begin
- Screen.Cursor := crHourGlass;
- try
- FManageProjects.DeleteNode(vProj);
- finally
- Screen.Cursor := crDefault;
- end;
- end;
- end;
- end;
- end;
- procedure TScfrmBigProjManage.actnBPCopyToExecute(Sender: TObject);
- var
- vNode: TScProjManagerTreeNode;
- iProjID: Integer;
- Tenders: TList;
- slstFiles: TStringList;
- strPath, strFile, strNewFile: string;
- I: Integer;
- begin
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if Assigned(vNode) and (vNode.Rec.ValueByName('Type').AsInteger = 0) then
- begin
- iProjID := vNode.ID;
- if BrowseFolder(strPath) then
- begin
- if strPath[Length(strPath)] <> '\' then
- strPath := strPath + '\';
- Tenders := TList.Create;
- slstFiles := TStringList.Create;
- try
- FManageProjects.LoadBuildProjectTenders(iProjID, Tenders);
- for I := 0 to Tenders.Count - 1 do
- begin
- strFile := TsdDataRecord(Tenders.Items[I]).ValueByName('FileName').AsString;
- strNewFile := strPath + ExtractFileName(strFile);
- if FileExists(strNewFile) then
- begin
- if MessageQuest(0, Format('目标文件夹已有文件[]存在,是否覆盖此文件?',
- [ExtractFileName(strFile)])) = ID_OK then
- CopyFile(PChar(strFile), PChar(strNewFile), False);
- end
- else
- CopyFile(PChar(strFile), PChar(strNewFile), False);
- end;
- if FManageProjects.GetRelaFileList(iProjID, slstFiles, True) > 0 then
- for I := 0 to slstFiles.Count - 1 do
- begin
- strFile := slstFiles[I];
- strNewFile := strPath + ExtractFileName(strFile);
- if FileExists(strNewFile) then
- begin
- if MessageQuest(0, Format('目标文件夹已有文件[]存在,是否覆盖此文件?',
- [ExtractFileName(strFile)])) = ID_OK then
- CopyFile(PChar(strFile), PChar(strNewFile), False);
- end
- else
- CopyFile(PChar(strFile), PChar(strNewFile), False);
- end;
- finally
- Tenders.Free;
- slstFiles.Free;
- end;
- end;
- end;
- end;
- procedure TScfrmBigProjManage.actnEditBPNameExecute(Sender: TObject);
- var
- vTender: TScProjManagerTreeNode;
- begin
- if zgBuildProjects.Editing then Exit;
- vTender := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if not Assigned(vTender) then Exit;
- if IsFileHadExportedStaticBills(vTender.Rec.FileName.AsString) then
- begin
- if not MessageYesOrNo('修改标段名称,先前导出的固化清单将作废!' + #13#10 + '您是否要继续?') then
- Exit;
- end;
- //staBuildProjects.Column('Name').ReadOnly := False;
- if zgBuildProjects.CurCol <> 1 then
- zgBuildProjects.CurCol := 1;
- zgBuildProjects.ForceEdit; //Editing := True;
- end;
- procedure TScfrmBigProjManage.actnNewExecute(Sender: TObject);
- var
- vNode: TScProjManagerTreeNode;
- begin
- if staBuildProjects.IDTree.Count = 0 then
- begin
- MessageHint('请先新建一个文件夹。');
- actnNewFolder.Execute;
- Exit;
- end;
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if vNode.IsBuildProj then
- begin
- // {$IF DEFINED(_ScOnline) AND NOT DEFINED(_ScOnlinePro)}
- // if ProjectManager.BuildProjectCount > MaxBuildProjectCountOnline then
- // begin
- // MessageHint(Format('您创建的建设项目已超%d个,请联系我们客服人员,服务热线:0756-3850888。', [MaxBuildProjectCountOnline]));
- // Exit;
- // end;
- // {$IFEND}
- TScMainForm(Application.MainForm).OpenFile('', staBuildProjects.IDTree.Selected.ID, oftNew);
- end
- else if vNode.IsTender then
- TScMainForm(Application.MainForm).OpenFile('', staBuildProjects.IDTree.Selected.ParentID, oftNew)
- else
- TScMainForm(Application.MainForm).OpenFile('', -1, oftNew);
- RefreshInfoView;
- end;
- procedure TScfrmBigProjManage.actnInsertExecute(Sender: TObject);
- var
- I: Integer;
- tmpFiles: TStringList;
- begin
- odOpenFiles.InitialDir := ConfigInfo.DefaultProjectFilePath;
- odOpenFiles.Filter := GetDialogExtString(dtAll);
- if odOpenFiles.Execute then
- begin
- tmpFiles := TStringList.Create;
- try
- for I := 0 to odOpenFiles.Files.Count - 1 do
- begin
- if SameText(ExtractFileExt(odOpenFiles.Files[I]), SBillsFileExt)
- or SameText(ExtractFileExt(odOpenFiles.Files[I]), SBudgetFileExt) then
- tmpFiles.Add(odOpenFiles.Files[I]);
- end;
- FManageProjects.AddExistProjects(tmpFiles, CurBuildProjID);
- finally
- tmpFiles.Free;
- end;
- RefreshInfoView;
- end;
- end;
- procedure TScfrmBigProjManage.actnOpenExecute(Sender: TObject);
- var
- vTender: TScProjManagerTreeNode;
- strFile: string;
- begin
- vTender := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if Assigned(vTender) and vTender.IsTender then
- begin
- strFile := ScExpandFileName(vTender.Rec.FileName.AsString);
- TScMainForm(Application.MainForm).OpenFile(strFile);
- end;
- end;
- procedure TScfrmBigProjManage.zgRelaFilesCellCanEdit(Sender: TObject;
- const ACoord: TPoint; var Allow: Boolean);
- var
- Node: TZjTreeNode;
- begin
- if ACoord.X <> 2 then
- begin
- Allow := False;;
- Exit;
- end;
- Node := ztRelaFiles.Items[zgRelaFiles.CurRow - zgRelaFiles.FixedRowCount];
- if (Node = nil) then
- begin
- Allow := False;;
- Exit;
- end;
- if Node.Parent = nil then
- begin
- Allow := False;
- Exit;
- end;
- Allow := (Node.Parent = FFeeParent) or (Node.Parent = FPriceParent);
- end;
- procedure TScfrmBigProjManage.zgRelaFilesCellGetColor(Sender: TObject;
- ACoord: TPoint; var AColor: TColor);
- begin
- if (ACoord.X = 1) or ((ACoord.Y <= ztRelaFiles.Count) and
- (ztRelaFiles.Items[ACoord.Y - zgRelaFiles.FixedRowCount].Level = 0)) then
- AColor := clBtnFace;
- end;
- procedure TScfrmBigProjManage.zgPropertiesCellCanEdit(Sender: TObject;
- const ACoord: TPoint; var Allow: Boolean);
- var
- vNode: TScProjManagerTreeNode;
- begin
- // 固化清单 注意 这句一定要在最前面
- // 5-16 项目属性暂时不变灰
- // Allow := IsPropertyCanEdit(ACoord);
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if (ACoord.X = 0) or (not Assigned(vNode)) or (not vNode.IsTender) or
- (ProjectManager.PropertiesRec(vNode.ID) = nil)
- or (ACoord.Y in [1, 2, 3, 4, 5]) then
- Allow := False;
- end;
- procedure TScfrmBigProjManage.zgPropertiesCellGetColor(Sender: TObject;
- ACoord: TPoint; var AColor: TColor);
- begin
- if ACoord.X = 0 then
- AColor := clBtnFace;
- // 固化清单 属性不可以编辑的颜色变灰
- // 5-16 颜色不变灰了
- //if (ACoord.X = 1) and (not IsPropertyCanEdit(ACoord))then
- // AColor := clBtnFace;
-
- end;
- procedure TScfrmBigProjManage.actnImportProjectExecute(Sender: TObject);
- begin
- odImport.Filter := GetDialogExtString(dtProjectAll);
- // 专业版exe
- {$IF (not Defined(_ScBills)) and (not Defined(_ScBudget)) and (not Defined(_ScGuangDong_Bills)) and (not Defined(_ScGuangDong_Budget))}
- if DogIsBillsOnly then
- odImport.Filter := GetDialogExtString(dtBillsAndX)
- else if DogIsBudgetOnly then
- odImport.Filter := GetDialogExtString(dtBudgetAndX);
- {$IFEND}
- {$IF DEFINED(_ScBudget) OR DEFINED(_ScGuangDong_Budget)}
- odImport.Filter := GetDialogExtString(dtBudgetAndX);
- {$IFEND}
- {$IF DEFINED(_ScBills) OR DEFINED(_ScGuangDong_Bills)}
- odImport.Filter := GetDialogExtString(dtBillsAndX);
- {$IFEND}
- if odImport.Execute then
- ImportBudgetProject(odImport.FileName);
- end;
- procedure TScfrmBigProjManage.actnImportProjectUpdate(Sender: TObject);
- var
- vNode: TScProjManagerTreeNode;
- begin
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- TAction(Sender).Enabled := TScMainForm(Application.MainForm).IsManageView and
- Assigned(vNode) and not vNode.IsFolder;
- end;
- procedure TScfrmBigProjManage.actnExportSingleProjectExecute(
- Sender: TObject);
- begin
- ExportCurrentProjectFile(True);
- end;
- procedure TScfrmBigProjManage.actnCopyProjectExecute(Sender: TObject);
- procedure CheckProperties(AOldID, ANewBPID: Integer; ANewName: string);
- var
- Rec: TsdDataRecord;
- iNewID: Integer;
- begin
- Rec := ProjectManager.TendersRec(ANewBPID, ANewName);
- if Rec = nil then Exit;
- iNewID := Rec.ValueByName('ID').AsInteger;
- ProjectManager.CopyProperties(AOldID, iNewID);
- end;
- var
- iBPID, iProjectID: Integer;
- vTender, Node: TScProjManagerTreeNode;
- strBPName: string;
- strAlias, strFeeAlias, strPriceAlias,
- strFile, strFeeFile, strPriceFile,
- strNewFile, strNewFeeFile, strNewPriceFile: string;
- slstFiles: TStringList;
- begin
- vTender := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if not Assigned(vTender) or not vTender.IsTender then Exit;
- if not SelectBuildProject(iBPID) then Exit;
- slstFiles := TStringList.Create;
- try
- // 项目文件
- strAlias := vTender.Rec.Name.AsString;
- strFile := vTender.Rec.FileName.AsString;
- iProjectID := vTender.ID;
- Node := TScProjManagerTreeNode(ProjectManager.ManagerTree.FindNode(iBPID));
- if Node = nil then Exit;
- strBPName := Node.Rec.ValueByName('Name').AsString;
- if ProjectManager.TendersRec(iBPID, strAlias) <> nil then
- begin
- MessageHint(0, Format('建设项目[%s]中已存在分段[%s],请修改名称后再复制。', [strBPName, strAlias]));
- Exit;
- end;
- strNewFile := ConfigInfo.NewGUIDFileName;
- CopyFile(PChar(strFile), PChar(strNewFile), False);
- slstFiles.Add(strNewFile);
- // 费率文件
- strFeeAlias := ProjectManager.GetProjectRelaAlias(iProjectID, FileType_FeeFile);
- strFeeFile := ProjectManager.GetProjectRelaFileName(iProjectID, FileType_FeeFile);
- // 存在同名文件则不复制
- if FileExists(strFeeFile) and (not ProjectManager.RelaFileExists(iBPID, strFeeAlias, FileType_FeeFile)) then
- begin
- strNewFeeFile := ConfigInfo.NewGUIDFileName;
- CopyFile(PChar(strFeeFile), PChar(strNewFeeFile), False);
- slstFiles.Add(strNewFeeFile);
- end;
- // 单价文件
- strPriceAlias := ProjectManager.GetProjectRelaAlias(iProjectID, FileType_PriceFile);
- strPriceFile := ProjectManager.GetProjectRelaFileName(iProjectID, FileType_PriceFile);
- // 存在同名文件则不复制
- if FileExists(strPriceFile) and (not ProjectManager.RelaFileExists(iBPID, strPriceAlias, FileType_PriceFile)) then
- begin
- strNewPriceFile := ConfigInfo.NewGUIDFileName;
- CopyFile(PChar(strPriceFile), PChar(strNewPriceFile), False);
- slstFiles.Add(strNewPriceFile);
- end;
- ProjectManager.AddExistProjects(slstFiles, iBPID);
- CheckProperties(iProjectID, iBPID, strAlias);
- finally
- slstFiles.Free;
- end;
- end;
- procedure TScfrmBigProjManage.actnNewFeeFileExecute(Sender: TObject);
- var
- strAlias, strFile: string;
- iID: Integer;
- Lib: TScFeeRateLib;
- begin
- if ScInputQuery('新建费率文件', '请输入费率文件名称', strAlias, False, True) then
- begin
- strAlias := Trim(strAlias);
- if strAlias = '' then
- begin
- MessageHint(0, '文件名不能为空。');
- Exit;
- end;
- if ProjectManager.GetRelaFileName(CurBuildProjID, strAlias, FileType_FeeFile) <> '' then
- begin
- MessageHint(0, Format('费率文件[%s]已存在。', [strAlias]));
- Exit;
- end;
- strFile := ConfigInfo.NewGUIDFileName;
- iID := FeeRateLibs.New(strFile, ptBudget);
- Lib := FeeRateLibs.Libs[iID];
- FileArchiverManager.Alias[strFile] := strAlias;
- ProjectManager.AddRelaFile(strFile, CurBuildProjID);
- RefreshInfoView;
- end;
- end;
- procedure TScfrmBigProjManage.actnNewPriceFileExecute(Sender: TObject);
- var
- strAlias, strFile: string;
- iID: Integer;
- Lib: TScUnitPriceLib;
- begin
- if ScInputQuery('新建单价文件', '请输入单价文件名称', strAlias, False, True) then
- begin
- strAlias := Trim(strAlias);
- if strAlias = '' then
- begin
- MessageHint(0, '文件名不能为空。');
- Exit;
- end;
- if ProjectManager.GetRelaFileName(CurBuildProjID, strAlias, FileType_PriceFile) <> '' then
- begin
- MessageHint(0, Format('单价文件[%s]已存在。', [strAlias]));
- Exit;
- end;
- strFile := ConfigInfo.NewGUIDFileName;
- iID := UnitPriceLibs.New(strFile);
- Lib := UnitPriceLibs.Libs[iID];
- FileArchiverManager.Alias[strFile] := strAlias;
- ProjectManager.AddRelaFile(strFile, CurBuildProjID);
- RefreshInfoView;
- end;
- end;
- procedure TScfrmBigProjManage.actnNewFeeFileUpdate(Sender: TObject);
- var
- vNode: TScProjManagerTreeNode;
- begin
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- TAction(Sender).Enabled := Assigned(vNode) and (vNode.Rec.ValueByName('Type').AsInteger = 0);
- end;
- procedure TScfrmBigProjManage.actnExportRelaFileUpdate(Sender: TObject);
- var
- Node: TZjGridTreeNode;
- bEnabled: Boolean;
- vNode: TScProjManagerTreeNode;
- begin
- bEnabled := False;
- Node := ztRelaFiles.RowItems[zgRelaFiles.CurRow];
- if Node <> nil then
- bEnabled := (Node.Parent = FFeeParent) or (Node.Parent = FPriceParent);
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- TAction(Sender).Enabled := Assigned(vNode) and (vNode.Rec.ValueByName('Type').AsInteger = 0) and bEnabled;
- end;
- procedure TScfrmBigProjManage.actnExportRelaFileExecute(Sender: TObject);
- begin
- ExportCurrentRelaFile(True);
- end;
- procedure TScfrmBigProjManage.zgBuildProjectsDrawCellText(ACanvas: TCanvas;
- const ARect: TRect; const ACoord: TPoint; AGrid: TZJGrid;
- const Text: String; var ADefaultDraw: Boolean);
- const
- rIconWidth = 18;
- rIconHeight = 16;
- var
- Img: TBitmap;
- Cell: TZjCell;
- rImg: TRect;
- vNode: TScProjManagerTreeNode;
- begin
- if (ACoord.X = staBuildProjects.ColumnIndex('Name') + zgBuildProjects.FixedColCount) and (ACoord.Y > zgBuildProjects.FixedRowCount - 1) then
- begin
- Cell := zgBuildProjects.Cells[ACoord.X, ACoord.Y];
- Img := TBitmap.Create;
- try
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Items[ACoord.Y-zgBuildProjects.FixedRowCount]);
- if Assigned(vNode) then
- begin
- if vNode.IsFolder then
- ilstProject.GetBitmap(22, Img)
- else if vNode.IsTender then
- ilstProject.GetBitmap(24, Img)
- else if vNode.IsBuildProj then
- ilstProject.GetBitmap(23, Img);
- end;
- case Cell.Align of
- gaTopLeft, gaTopCenter, gaTopRight:
- rImg := Rect(ARect.Left + 2, ARect.Top, ARect.Left + rIconWidth, ARect.Top + rIconHeight);
- gaCenterLeft, gaCenterCenter, gaCenterRight:
- rImg := Rect(ARect.Left + 2, ARect.Top + (ARect.Bottom - ARect.Top - rIconHeight) div 2, ARect.Left + rIconWidth, ARect.Bottom - (ARect.Bottom - ARect.Top - rIconHeight) div 2);
- gaBottomLeft, gaBottomCenter, gaBottomRight:
- rImg := Rect(ARect.Left + 2, ARect.Bottom - rIconHeight, ARect.Left + rIconWidth, ARect.Bottom);
- end;
- ACanvas.StretchDraw(rImg, Img);
- WriteText(ACanvas, Rect(ARect.Left + rIconWidth, ARect.Top, ARect.Right, ARect.Bottom)
- , 2, 2, Text, Cell.Align, goWarpText in zgBuildProjects.Options);
- ADefaultDraw := False;
- finally
- Img.Free;
- end;
- end;
- end;
- procedure TScfrmBigProjManage.BatchExportBuildProject;
- function GetBuildProjectName(const AName: string): string;
- var
- sgs: TStrings;
- begin
- if Pos(sPathSpr, AName) > 0 then
- begin
- sgs := TStringList.Create;
- try
- DelimitedTextTo(sPathSpr, AName, sgs);
- Result := sgs.Strings[sgs.Count - 1];
- finally
- sgs.Free;
- end;
- end
- else
- Result := AName;
- end;
- var
- Form: TExportBuildProjectsForm;
- I, j: Integer;
- strPath, strFile, sBP, strName: string;
- begin
- // 网络版超过20个建设项目则禁止导入导出建设项目
- // {$IF DEFINED(_ScOnline) AND NOT DEFINED(_ScOnlinePro)}
- // if ProjectManager.BuildProjectCount > MaxBuildProjectCountOnline then
- // begin
- // MessageHint(Format('您创建的建设项目已超%d个,请联系我们客服人员,服务热线:0756-3850888。', [MaxBuildProjectCountOnline]));
- // Exit;
- // end;
- // {$IFEND}
- Form := TExportBuildProjectsForm.Create(nil);
- try
- Form.clbBuildProject.Clear;
- FManageProjects.FullBuildProjtsName(Form.clbBuildProject.Items);
- if Form.clbBuildProject.Count = 0 then
- begin
- MessageHint(0, '没有可导出的建设项目。');
- Exit;
- end;
- if Form.ShowModal = mrOK then
- begin
- strPath := ConfigInfo.OutputPath;
- if BrowseFolder(strPath) then
- begin
- Screen.Cursor := crHourGlass;
- try
- if strPath[Length(strPath)] <> '\' then
- strPath := strPath + '\';
- for I := 0 to Form.clbBuildProject.Count - 1 do
- begin
- if Form.clbBuildProject.Checked[I] then
- begin
- sBP := Form.clbBuildProject.Items[I];
- // Chenshilong, 2010-8-3 22:21:33 成批导出PB前先保存。用BuildProjectName识别
- for j := 0 to ProjList.Count - 1 do
- begin
- if SameText(ProjList.ProjData[j].BuildProjectName, sBP) then
- ProjList.ProjData[j].Save;
- end;
- strName := GetBuildProjectName(Form.clbBuildProject.Items[I]) + SBuildProjectFileExt;
- strFile := strPath + strName;
- if not FileExists(strFile) or MessageQuest(Format('%s 已存在' + #13#10 + '要替换它吗?', [strName])) then
- ExportBuildProject(Integer(Form.clbBuildProject.Items.Objects[I]), Form.clbBuildProject.Items[I], strFile);
- end;
- end;
- finally
- Screen.Cursor := crDefault;
- end;
- end;
- end;
- finally
- Form.Free;
- end;
- end;
- procedure TScfrmBigProjManage.ExportBuildProject(
- ABuildProjectID: Integer; ABuildProjectName, AFileName: string);
- var
- Exporter: TScBuildProjectSaver;
- Tenders: TList;
- i: Integer;
- Rec: TsdDataRecord;
- strFeeTaxFile: string;
- iProjectCount: Integer;
- arrSelection: array [0..255] of Boolean;
- procedure ExportProperties;
- var
- vNode: TScProjManagerTreeNode;
- begin
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.FindNode(ABuildProjectID));
- Exporter.Author := vNode.Rec.Author.AsString;
- Exporter.Auditor := vNode.Rec.Auditor.AsString;
- Exporter.Principal := vNode.Rec.Principal.AsString;
- Exporter.ProgressiveType := Ord(FManageProjects.GetProgressiveType(ABuildProjectID));
- Exporter.ProgressiveFile := FManageProjects.GetProgressiveFileName(ABuildProjectID);
- Exporter.ProgressiveCoe := FManageProjects.GetProgressiveCoe(ABuildProjectID);
- Exporter.SiteConstructType := Ord(FManageProjects.GetSiteConstructType(ABuildProjectID));
- Exporter.SetSelectedProjects(iProjectCount, arrSelection);
- ExportBPProperties(ABuildProjectID, Exporter.Properties);
- end;
- begin
- ZeroMemory(@arrSelection[0], SizeOf(arrSelection));
- Exporter := TScBuildProjectSaver.Create;
- Tenders := TList.Create;
- try
- FManageProjects.LoadBuildProjectTenders(ABuildProjectID, Tenders);
- iProjectCount := Tenders.Count;
- for i := 0 to Tenders.Count - 1 do
- begin
- Rec := TsdDataRecord(Tenders.Items[i]);
- Exporter.AddExportFile(Rec.ValueByName('FileName').AsString);
- arrSelection[I] := Rec.ValueByName(SSelected).AsBoolean;
- strFeeTaxFile := FindFeeTaxFile(Rec.ValueByName('ID').AsInteger);
- if FileExists(strFeeTaxFile) then
- Exporter.AddExportFile(strFeeTaxFile, FileType_FeeTaxFile);
- end;
- with FManageProjects do
- begin
- cdsRelaFiles.Filtered := False;
- cdsRelaFiles.Filter := 'BuildProjectID=' + IntToStr(ABuildProjectID);
- cdsRelaFiles.Filtered := True;
- cdsRelaFiles.First;
- while not cdsRelaFiles.Eof do
- begin
- Exporter.AddExportFile(cdsRelaFilesFileName.Value);
- cdsRelaFiles.Next;
- end;
- cdsRelaFiles.Filtered := False;
- end;
- // 导出我的工料机
- Exporter.AddExportFile(DefaultGLJLibFile);
- //Exporter.AddExportFile(DefaultMachineCalcDataFile);
- ExportProperties;
- Exporter.ExportProject(ABuildProjectID, ABuildProjectName, AFileName);
- finally
- Exporter.Free;
- Tenders.Free;
- end;
- end;
- procedure TScfrmBigProjManage.actnImportRelaFileExecute(Sender: TObject);
- var
- strAlias, strFile, strNewFile, strVer: string;
- bQuery: Boolean;
- iFileType: Integer;
- begin
- odImport.Filter := GetDialogExtString({$IFDEF _ScNoFeeRate}dtPrice{$ELSE}dtFeeAndPrice{$ENDIF});
- if odImport.Execute then
- begin
- strFile := odImport.FileName;
- // 检查是否不能兼容的旧文件
- if IsTooOldFile(strFile, strVer) then
- begin
- MessageWarning(Format('此文件由版本号为[%s]的SmartCost程序创建,本版本不再兼容,请使用原版本程序打开该文件。', [strVer]));
- Exit;
- end;
- strAlias := FileArchiverManager.Alias[strFile];
- // 检查文件类型
- iFileType := -1;
- if IsSmartCostFeeRateFile(strFile) then
- iFileType := FileType_FeeFile
- else if IsSmartCostUnitPriceFile(strFile) then
- iFileType := FileType_PriceFile;
- if iFileType = -1 then Exit;
- // 检查文件是否已存在
- bQuery := False;
- while ProjectManager.RelaFileExists(CurBuildProjID, strAlias, iFileType) do
- begin
- bQuery := ScInputQuery('重命名', '存在同名文件。'#13#10'如确实需要导入该文件,请重命名。', strAlias, False, True);
- if not bQuery then Exit;
- end;
- strNewFile := ConfigInfo.NewGUIDFileName;
- if not CopyFile(PChar(strFile), PChar(strNewFile), True) then
- begin
- MessageWarning('Can not copy file');
- Exit;
- end;
- if bQuery then
- FileArchiverManager.Alias[strNewFile] := strAlias
- else
- CheckAlias(strNewFile, strAlias);
- // 导入
- ProjectManager.AddRelaFile(strNewFile, CurBuildProjID, False);
- RefreshInfoView;
- end;
- end;
- procedure TScfrmBigProjManage.zgPropertiesCellTextChanged(Sender: TObject;
- Col, Row: Integer);
- var
- I: Integer;
- strText, strFileName: string;
- V: TsdValue;
- Proj: TScProjBaseData;
- AName: string;
- iRoadLong: Double;
- vTender: TScProjManagerTreeNode;
- PropRec: TsdDataRecord;
- begin
- if FIsPropLoading then
- Exit;
- vTender := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if not Assigned(vTender) then
- Exit;
- PropRec := ProjectManager.PropertiesRec(vTender.ID);
- if (Col = 1) and (Row > 0) and vTender.IsTender and
- Assigned(PropRec) then
- begin
- strFileName := vTender.Rec.FileName.AsString;
- strText := zgProperties.Cells[Col, Row].Text;
- I := Row - zgProperties.FixedRowCount;
- {$IFDEF _ScNoFeeRate}
- if (I >= 2) and (I < 18) then
- strValue := PropRec.ValueByName(SValue + IntToStr(I + 2)).AsString
- {else if I >= 18 then
- Field := PropRec.ValueByName(SValue + IntToStr(I + 4)) }
- else
- {$ENDIF}
- if I < 2 then
- V := PropRec.ValueByName(SValue + IntToStr(I + 1))
- else if I = 2 then
- V := PropRec.ValueByName(SValue + IntToStr(25))
- else if I < 5 then
- V := PropRec.ValueByName(SValue + IntToStr(I))
- else if I = 5 then
- V := PropRec.ValueByName(SValue + IntToStr(26))
- else if I > 5 then
- V := PropRec.ValueByName(SValue + IntToStr(I - 1));
- {if I = 2 then
- begin
- // 调价金额
- Field := ProjectManager.atProjectProperties.FieldByName(SValue + IntToStr(25));
- end
- else
- begin
- if I < 2 then
- Field := ProjectManager.atProjectProperties.FieldByName(SValue + IntToStr(I + 1))
- else
- Field := ProjectManager.atProjectProperties.FieldByName(SValue + IntToStr(I));
- end;}
- //Field := ProjectManager.atProjectProperties.FieldByName(SValue + IntToStr(I + 1));
- if not SameText(strText, V.AsString) then
- begin
- PropRec.ValueByName('Changed').AsBoolean := True;
- V.AsString := strText;
- Proj := ProjList.IndexByName(strFileName);
- Screen.Cursor := crHourGlass;
- try
- if (Proj <> nil) and Proj.IsOpened then
- begin
- //Proj.Project.CheckPropertie(I, strText, False);
- if I < 2 then
- Proj.Project.CheckPropertie(I + 1, strText, False)
- else if I = 2 then
- Proj.Project.CheckPropertie(25, strText, False)
- else if I < 5 then
- Proj.Project.CheckPropertie(I, strText, False)
- else if I = 5 then
- Proj.Project.CheckPropertie(26, strText, False)
- else if I > 5 then
- Proj.Project.CheckPropertie(I-1, strText, False);
- {if I = 2 then
- begin
- Proj.Project.CheckPropertie(24, strText, False);
- end
- else
- begin
- if I < 2 then
- Proj.Project.CheckPropertie(I, strText, False)
- else
- Proj.Project.CheckPropertie(I-1, strText, False);
- end;}
- Proj.Project.RefreshProjInfo(False);
- end;
- finally
- Screen.Cursor := crDefault;
- end;
- end;
- end;
- end;
- procedure TScfrmBigProjManage.zgPropertiesCellButtonClick(Sender: TObject;
- Col, Row: Integer);
- procedure OpenNewRelaFile(ATender: TScProjManagerTreeNode; AAlias, AFileName: string; AFileType: Integer);
- var
- ProjData: TScProjBaseData;
- strProjFile: string;
- begin
- strProjFile := ATender.Rec.FileName.AsString;
- ProjData := ProjList.IndexByName(strProjFile);
- if (ProjData <> nil) and ProjData.IsOpened and (ProjData.Project <> nil)
- and (ProjData.Project.IsOpened) then
- begin
- if (AFileType = FileType_PriceFile) and
- not ProjData.Project.ProjectUnitPriceLib.IsFile(AAlias, AFileName) then
- ProjData.Project.ProjectUnitPriceLib.Open(AFileName)
- else if (AFileType = FileType_FeeFile) and
- not ProjData.Project.ProjectFeeRateLib.IsFile(AAlias, AFileName) then
- ProjData.Project.ProjectFeeRateLib.Open(AFileName);
- ProjData.RefreshRelaFilesView;
- end;
- end;
- var
- vTender, vBuildProj: TScProjManagerTreeNode;
- strBPName, strText, strFile: string;
- begin
- strText := zgProperties.Cells[1, Row].Text;
- vTender := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if Assigned(vTender) and vTender.IsTender then
- vBuildProj := TScProjManagerTreeNode(vTender.Parent)
- else
- vBuildProj := nil;
- if not Assigned(vBuildProj) then Exit;
- strBPName := ProjectManager.CompleteBuildProjName(vBuildProj.ID);
- strFile := strText;
- case Row of
- {$IFNDEF _ScNoFeeRate}
- 4:
- if BrowseRelaFile(strBPName, FileType_FeeFile, strFile) then
- begin
- strText := FileArchiverManager.Alias[strFile];
- zgProperties.Cells[1, Row].Text := strText;
- zgBuildProjects.InvalidateRow(zgBuildProjects.CurRow);
- OpenNewRelaFile(vTender, strText, strFile, FileType_FeeFile);
- end;
- {$ENDIF}
- {$IFDEF _ScNoFeeRate}4{$ELSE}5{$ENDIF}:
- if BrowseRelaFile(strBPName, FileType_PriceFile, strFile) then
- begin
- strText := FileArchiverManager.Alias[strFile];
- zgProperties.Cells[1, Row].Text := strText;
- zgBuildProjects.InvalidateRow(zgBuildProjects.CurRow);
- OpenNewRelaFile(vTender, strText, strFile, FileType_PriceFile);
- end;
- end;
- end;
- procedure TScfrmBigProjManage.actnDelRelaFileUpdate(Sender: TObject);
- var
- Node: TZjGridTreeNode;
- bEnabled: Boolean;
- iType: Integer;
- strAlias: string;
- begin
- bEnabled := False;
- Node := ztRelaFiles.RowItems[zgRelaFiles.CurRow];
- if Node <> nil then
- begin
- iType := -1;
- if Node.Parent = FFeeParent then
- iType := FileType_FeeFile
- else if Node.Parent = FPriceParent then
- iType := FileType_PriceFile;
- strAlias := GetRelaFileName(zgRelaFiles.Cells[2, zgRelaFiles.CurRow].Text);
- if (iType > 0) and (strAlias <> '') then
- begin
- // 只要有ProjectID 不等于 -1 的记录,就不能删除该文件
- with FManageProjects do
- begin
- cdsRelaFiles.Filter := Format('(BuildProjectID=%d)AND(ProjectID<>-1)AND(FileType=%d)',
- [CurBuildProjID, {zdProjects.DataSet.FieldByName(SID).AsInteger,} iType]);
- cdsRelaFiles.Filtered := True;
- cdsRelaFiles.First;
- bEnabled := True;
- while not cdsRelaFiles.Eof do
- begin
- if SameText(cdsRelaFilesName.AsString, strAlias) then
- begin
- bEnabled := False;
- Break;
- end;
- cdsRelaFiles.Next;
- end;
- end;
- end;
- end;
- TAction(Sender).Enabled := (SelectedBuildProject) and bEnabled;
- end;
- procedure TScfrmBigProjManage.actnDelRelaFileExecute(Sender: TObject);
- var
- Node: TZjGridTreeNode;
- iType: Integer;
- strAlias, strHint: string;
- begin
- Node := ztRelaFiles.RowItems[zgRelaFiles.CurRow];
- if Node <> nil then
- begin
- iType := -1;
- if Node.Parent = FFeeParent then
- iType := FileType_FeeFile
- else if Node.Parent = FPriceParent then
- iType := FileType_PriceFile;
- strAlias := GetRelaFileName(zgRelaFiles.Cells[2, zgRelaFiles.CurRow].Text);
- case iType of
- FileType_FeeFile: strHint := Format('确实要删除费率文件[%s]吗?', [strAlias]);
- FileType_PriceFile: strHint := Format('确实要删除单价文件[%s]吗?', [strAlias]);
- end;
- if not MessageQuest(strHint) then Exit;
- if (iType > 0) and (strAlias <> '') then
- begin
- // 只删除ProjectID等于 -1 的记录
- with FManageProjects do
- begin
- cdsRelaFiles.Filter := Format('(BuildProjectID=%d)AND(ProjectID=-1)AND(FileType=%d)',
- [CurBuildProjID, iType]);
- cdsRelaFiles.Filtered := True;
- cdsRelaFiles.First;
- while not cdsRelaFiles.Eof do
- begin
- if SameText(cdsRelaFilesName.AsString, strAlias) then
- begin
- DeleteFileToRecycleBin(cdsRelaFilesFileName.AsString, False);
- cdsRelaFiles.Delete;
- RefreshInfoView;
- Break;
- end;
- cdsRelaFiles.Next;
- end;
- end;
- end;
- end;
- end;
- procedure TScfrmBigProjManage.actnRenameRelaFileUpdate(Sender: TObject);
- var
- Node: TZjTreeNode;
- begin
- if zgRelaFiles.CurCol <> 2 then
- begin
- TAction(Sender).Enabled := False;;
- Exit;
- end;
- Node := ztRelaFiles.Items[zgRelaFiles.CurRow - zgRelaFiles.FixedRowCount];
- if Node = nil then
- begin
- TAction(Sender).Enabled := False;;
- Exit;
- end;
- if Node.Parent = nil then
- begin
- TAction(Sender).Enabled := False;
- Exit;
- end;
- TAction(Sender).Enabled := (Node.Parent = FFeeParent) or (Node.Parent = FPriceParent);
- end;
- procedure TScfrmBigProjManage.actnRenameRelaFileExecute(Sender: TObject);
- begin
- zgRelaFiles.Editing := True;
- end;
- var
- _OldAlias: string;
- procedure TScfrmBigProjManage.zgRelaFilesCellTextChanged(Sender: TObject;
- Col, Row: Integer);
- var
- Node: TZjTreeNode;
- iFileType: Integer;
- begin
- Node := ztRelaFiles.Items[zgRelaFiles.CurRow - zgRelaFiles.FixedRowCount];
- if Node = nil then
- Exit;
- if Node.Parent = nil then
- Exit;
- if FIsLoading then Exit;
- if (Node.Parent = FFeeParent) or (Node.Parent = FPriceParent) then
- begin
- if Node.Parent = FFeeParent then
- iFileType := FileType_FeeFile
- else if Node.Parent = FPriceParent then
- iFileType := FileType_PriceFile;
- ProjectManager.RenameRelaFile(staBuildProjects.IDTree.Selected.ID,
- GetRelaFileName(zgRelaFiles.Cells[Col, Row].Text), _OldAlias, iFileType);
- zgBuildProjects.InvalidateRow(staBuildProjects.IDTree.Selected.MajorIndex + zgBuildProjects.FixedRowCount + 1,
- staBuildProjects.IDTree.Selected.ChildCount);
- end;
- end;
- procedure TScfrmBigProjManage.zgRelaFilesCellTextChanging(Sender: TObject;
- const ACoord: TPoint; var NewValue: String; var Accept: Boolean);
- const
- C_FileTypes: array [FileType_FeeFile.. FileType_PriceFile] of string = ('费率', '单价');
- var
- Node: TZjTreeNode;
- iID, iFileType: Integer;
- I: Integer;
- Ch: Char;
- begin
- if ACoord.Y <= zgRelaFiles.FixedRowCount - 1 then Exit;
- if FIsLoading then Exit;
- NewValue := Trim(NewValue);
- for I := 1 to Length(NewValue) do
- begin
- Ch := NewValue[I];
- if not ValidFileName(Ch) then
- begin
- //MessageHint('文件名称不能包含特殊字符。');
- HintInvalidFileName;
- Accept := False;
- Exit;
- end;
- end;
- if SameText(NewValue, GetRelaFileName(zgRelaFiles.Cells[ACoord.X, ACoord.Y].Text)) then
- begin
- Accept := False;
- Exit;
- end;
- iID := staBuildProjects.IDTree.Selected.ID;
- Node := ztRelaFiles.Items[zgRelaFiles.CurRow - zgRelaFiles.FixedRowCount];
- if Node = nil then
- Exit;
- if Node.Parent = nil then
- Exit;
- if (Node.Parent = FFeeParent) or (Node.Parent = FPriceParent) then
- begin
- NewValue := GetRelaFileName(NewValue);
- if Node.Parent = FFeeParent then
- iFileType := FileType_FeeFile
- else if Node.Parent = FPriceParent then
- iFileType := FileType_PriceFile;
- if ProjectManager.RelaFileExists(iID, NewValue, iFileType) then
- begin
- MessageHint(0, Format('%s文件[%s]已存在,请重新命名。', [c_FileTypes[iFileType], NewValue]));
- Accept := False;
- end;
- end;
- if Accept then
- begin
- _OldAlias := GetRelaFileName(zgRelaFiles.Cells[ACoord.X, ACoord.Y].Text);
- NewValue := NewRelaFileDisplayName(NewValue);
- end;
- end;
- procedure TScfrmBigProjManage.zgPropertiesGetCellEditor(Sender: TObject;
- ACoord: TPoint; var AControl: TWinControl);
- begin
- if ACoord.X <> 1 then Exit;
- case ACoord.Y of
- {$IFDEF _ScNoFeeRate}8{$ELSE}10{$ENDIF}:
- AControl := dtpEditDate;
- {$IFDEF _ScNoFeeRate}15{$ELSE}17{$ENDIF}:
- begin
- cbbProperties.Clear;
- cbbProperties.Items.Add('高速公路');
- cbbProperties.Items.Add('一级公路');
- cbbProperties.Items.Add('二级公路');
- cbbProperties.Items.Add('三级公路');
- cbbProperties.Items.Add('四级公路');
- AControl := cbbProperties;
- end;
- {$IFNDEF _ScNoFeeRate}
- 22:
- begin
- begin
- cbbProfit.Clear;
- cbbProfit.Items.Add('7.42');
- if not _IsGuangDong then
- begin
- cbbProfit.Items.Add('6.68');
- cbbProfit.Items.Add('5.94');
- end;
- AControl := cbbProfit;
- end;
- end;
- 23:
- begin
- begin
- cbbProperties.Clear;
- cbbProperties.Items.Add('9');
- // if not _IsGuangDong then
- // cbbProperties.Items.Add('11.07');
- // cbbProperties.Items.Add('市区3.41');
- // cbbProperties.Items.Add('城乡3.35');
- // cbbProperties.Items.Add('其他3.22');
- // cbbProperties.Items.Add('市区3.48');
- // cbbProperties.Items.Add('城乡3.41');
- // cbbProperties.Items.Add('其他3.28');
- AControl := cbbProperties;
- end;
- end;
- {$ENDIF}
- end;
- end;
- procedure TScfrmBigProjManage.zgPropertiesEditorLoadCell(Sender: TObject;
- ACoord: TPoint; AControl: TWinControl);
- begin
- if (ACoord.X = 1) then
- case ACoord.Y of
- {$IFDEF _ScNoFeeRate}8{$ELSE}10{$ENDIF}:
- begin
- if zgProperties.Cells[ACoord.X, ACoord.Y].Text = '' then
- dtpEditDate.Date := Date
- else
- dtpEditDate.Date := ScStrToDate(zgProperties.Cells[ACoord.X, ACoord.Y].Text);
- end;
- //15, 21:
- // cbbProperties.Text := zgProperties.Cells[ACoord.X, ACoord.Y].Text;
- end;
- end;
- procedure TScfrmBigProjManage.zgPropertiesEditorSaveCell(Sender: TObject;
- ACoord: TPoint; AControl: TWinControl);
- begin
- if ACoord.X = 1 then
- case ACoord.Y of
- {$IFDEF _ScNoFeeRate}7{$ELSE}10{$ENDIF}:
- zgProperties.Cells[ACoord.X, ACoord.Y].Text := FormatDateTime('yyyy-mm-dd', dtpEditDate.Date);
- //15, 21:
- // zgBuildProjects.Cells[ACoord.X, ACoord.Y].Text := cbbProperties.Text;
- end;
- zgBuildProjects.InvalidateRow(zgBuildProjects.CurRow);
- end;
- procedure TScfrmBigProjManage.actnSaveAsExecute(Sender: TObject);
- var
- strAlias, strFile, strNewFile, strTip: string;
- bFirst, bCanSaveAsRelaFile, bSaveAsRelaFile: Boolean;
- vTender, vNewTender, vBuildProj: TScProjManagerTreeNode;
- begin
- vTender := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if Assigned(vTender) then
- vBuildProj := TScProjManagerTreeNode(vTender.Parent)
- else
- vBuildProj := nil;
- if not vTender.IsTender then
- raise Exception.Create('该功能仅适用于标段。');
- if not Assigned(vTender) or not Assigned(vBuildProj) then
- raise Exception.Create('另存为:数据错误。');
- strAlias := vTender.Rec.Name.AsString;
- strFile := ScExpandFileName(vTender.Rec.FileName.AsString);
- bFirst := True;
- bCanSaveAsRelaFile := CanSaveAsRelaFilesByProject(vTender);
- bSaveAsRelaFile := bCanSaveAsRelaFile;
- repeat
- if bFirst then
- begin
- strTip := '请输入文件名:';
- bFirst := False;
- end
- else
- strTip := Format('文件[%s]已存在。'#13#10'请重新输入文件名:', [strAlias]);
- if not ScSaveAsFile(strTip, strAlias, bCanSaveAsRelaFile, bSaveAsRelaFile) then Exit;
- until ProjectManager.TendersRec(vBuildProj.ID, strAlias) = nil;
- strNewFile := ConfigInfo.NewGUIDFileName;
- if not CopyFile(PChar(strFile), PChar(strNewFile), True) then
- begin
- MessageWarning('Can not copy file');
- Exit;
- end;
- FileArchiverManager.Alias[strNewFile] := strAlias;
- vNewTender := ProjectManager.AddProject(strNewFile, vBuildProj.ID);
- if bSaveAsRelaFile then
- begin
- SaveAsRelaFilesByProject(vBuildProj.ID, vTender, vNewTender);
- RefreshPropertyView;
- end;
- end;
- procedure TScfrmBigProjManage.actnSaveAsRelaFileExecute(Sender: TObject);
- var
- iID, iBPID, iType: Integer;
- Node: TZjGridTreeNode;
- strFile, strNewFile, strAlias, strNewAlias, strTip: string;
- bFirst: Boolean;
- begin
- Node := ztRelaFiles.RowItems[zgRelaFiles.CurRow];
- if (Node = nil) then
- Exit;
- iID := Integer(Node.Data);
- with ProjectManager do
- begin
- cdsRelaFiles.Filtered := False;
- if cdsRelaFiles.Locate('ID', iID, []) then
- begin
- strFile := ScExpandFileName(cdsRelaFilesFileName.AsString);
- strAlias := cdsRelaFilesName.AsString;
- iType := cdsRelaFilesFileType.AsInteger;
- end;
- end;
- iBPID := staBuildProjects.IDTree.Selected.ID;
- bFirst := True;
- strNewAlias := strAlias;
- repeat
- if bFirst then
- begin
- strTip := '请输入文件名:';
- bFirst := False;
- end
- else
- strTip := Format('文件[%s]已存在。'#13#10'请重新输入文件名:', [strNewAlias]);
- if not ScInputQuery('另存文件', strTip, strNewAlias, False, True) then Exit;
- until not ProjectManager.RelaFileExists(iBPID, strNewAlias, iType);
- (* strNewFile := ConfigInfo.NewGUIDFileName;
- if not CopyFile(PChar(strFile), PChar(strNewFile), True) then
- begin
- MessageWarning('Can not copy file');
- Exit;
- end;
- FileArchiverManager.Alias[strNewFile] := strAlias;
- ProjectManager.AddRelaFile(strNewFile, iBPID, False);*)
- SaveAsRelaFile(iBPID, strFile, strNewAlias, strAlias, iType, False);
- RefreshInfoView;
- end;
- function TScfrmBigProjManage.FindFeeTaxFile(AProjectID: Integer): string;
- var
- PropRec: TsdDataRecord;
- begin
- Result := '';
- PropRec := ProjectManager.PropertiesRec(AProjectID);
- if PropRec <> nil then
- Result := PropRec.ValueByName('Value3').AsString;
- end;
- function TScfrmBigProjManage.GetRelaFileName(ADisplayName: string): string;
- var
- I: Integer;
- begin
- Result := ADisplayName;
- if Length(ADisplayName) < Length(C_Indent) then Exit;
- for I := 1 to Length(C_Indent) do
- if ADisplayName[I] <> ' ' then Exit;
- Delete(Result, 1, Length(C_Indent));
- end;
- function TScfrmBigProjManage.NewRelaFileDisplayName(AName: string): string;
- begin
- Result := C_Indent + AName;
- end;
- procedure TScfrmBigProjManage.zgRelaFilesGetCellText(Sender: TObject;
- const ACoord: TPoint; var Value: String; DisplayText: Boolean);
- begin
- if not DisplayText then Value := GetRelaFileName(Value);
- end;
- function TScfrmBigProjManage.ImportBudgetProject(
- const ABudgetProjFile: string): Boolean;
- var
- Importer: TScBuildProjectSaver;
- I: Integer;
- iFileType, iFlag: Integer;
- strFile, strOldFile, strNewFile, strBPName, strBPFullName, strAlias, strName, strPath: string;
- slstProj, slstImportProj: TStringList;
- bRenamed: Boolean;
- strOldVer, strNewVer: string;
- vSelect, vBuildProj: TScProjManagerTreeNode;
- begin
- Result := True;
- // 先验证是不是固化清单文件包, 固化清单包不可以在这里导入的
- if IsStaticBillsPackage(ABudgetProjFile) then
- begin
- Result := False;
- MessageWarning(Application.Handle, '导入失败!.stb文件为固化清单格式,请使用固化清单按钮接收文件。');
- Exit;
- end;
- vSelect := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if Assigned(vSelect) and vSelect.IsTender then
- vBuildProj := TScProjManagerTreeNode(vSelect.Parent)
- else
- vBuildProj := vSelect;
- if not Assigned(vBuildProj) then Exit;
- //strFile := ABudgetProjFile;
- strFile := GetTempFileName;
- try
- CopyFile(PChar(ABudgetProjFile), PChar(strFile), False);
- // 固化清单 导入标段兼容
- if IsSmartCostProjectFile(strFile) or IsStaticBillsFile(strFile) then
- begin
- CheckAlias(strFile, ExtractFileNameWithoutExt(ABudgetProjFile));
- strAlias := FileArchiverManager.Alias[strFile];
- bRenamed := False;
- while ProjectManager.TendersRec(vBuildProj.ID, strAlias) <> nil do
- begin
- if not ScInputQuery('重命名',
- Format('[%s]已存在,如确实需要导入该文件,请重命名', [strAlias]), strAlias, False, True)
- then
- begin
- Result := False;
- Exit;
- end;
- bRenamed := True;
- end;
- strNewFile := ConfigInfo.NewGUIDFileName;
- CopyFile(PChar(strFile), PChar(strNewFile), True);
- if bRenamed then
- FileArchiverManager.Alias[strNewFile] := strAlias
- else
- CheckAlias(strNewFile, strAlias);
- ProjectManager.AddProject(strNewFile, vBuildProj.ID);
- RefreshInfoView;
- end
- else
- begin
- Importer := TScBuildProjectSaver.Create;
- try
- // smbx、smpx文件
- if not Importer.CanImport(ABudgetProjFile, strOldVer, strNewVer) then
- begin
- MessageWarning(0, Format('导入失败:您要导入的文件是由%s版本导出,当前软件是%s版本,请选择正确的版本再进行操作!',
- [strOldVer, strNewVer]), '系统提醒');
- Exit;
- end;
- if Importer.OpenProject(ABudgetProjFile) then
- begin
- strName := ExtractFileNameWithoutExt(ABudgetProjFile);
- Screen.Cursor := crHourGlass;
- try
- Importer.ImportProject(strName);
- finally
- Screen.Cursor := crDefault;
- end;
- end;
- strBPName := staBuildProjects.IDTree.Selected.Rec.ValueByName('Name').AsString;
- strBPFullName := ProjectManager.CompleteBuildProjName(vBuildProj.ID);
- slstProj := TStringList.Create;
- slstImportProj := TStringList.Create;
- try
- slstProj.Assign(Importer.FileList);
- if SelectProjectPackageFiles(slstProj, vBuildProj.ID) then
- begin
- for I := 0 to slstProj.Count - 1 do
- begin
- strOldFile := slstProj[I];
- iFileType := GetFileType(strOldFile);
- CheckAlias(strOldFile);
- strAlias := FileArchiverManager.Alias[strOldFile];
- // flag:1表示不存在此文件,可以直接解压到指定位置;其他(2)表示存在同名文件,导入时覆盖此文件
- iFlag := Integer(slstProj.Objects[I]);
- case iFileType of
- // 固化清单 ,文件类型
- FileType_Project, FileType_StaticBills:
- begin
- if iFlag = 1 then
- strNewFile := ConfigInfo.NewGUIDFileName
- else
- strNewFile := ProjectManager.TenderFileName(strBPFullName, strAlias);
- // 项目文件无论是否已存在,都要再添加一次,以便读取项目属性。
- // 如果已经存在,不会重复添加
- slstImportProj.Add(strNewFile);
- CopyFile(PChar(strOldFile), PChar(strNewFile), False);
- end;
- FileType_FeeFile, FileType_PriceFile:
- begin
- if iFlag = 1 then
- begin
- strNewFile := ConfigInfo.NewGUIDFileName;
- slstImportProj.Add(strNewFile);
- end
- else
- strNewFile := ProjectManager.GetRelaFileName(vBuildProj.ID, strAlias, iFileType);
- CopyFile(PChar(strOldFile), PChar(strNewFile), False);
- end;
- FileType_RationLib:
- begin
- case iFlag of
- 1:
- begin
- strPath := ConfigInfo.RationLibPath;
- strNewFile := strPath + ExtractFileName(strOldFile);
- if FileExists(strNewFile) then
- begin
- if SameFileSize(strNewFile, strOldFile) then
- Continue
- else
- begin
- strPath := ConfigInfo.ImportRationLibPath + strBPName + '\';
- strNewFile := strPath + ExtractFileName(strOldFile);
- end;
- end;
- if not FileExists(strNewFile) then
- begin
- if not DirectoryExists(strPath) then
- CreateFullDir(strPath);
- CopyFile(PChar(strOldFile), PChar(strNewFile), True);
- slstImportProj.Add(strNewFile);
- end;
- end;
- 2:
- begin
- strNewFile := ProjectManager.GetRelaFileName(vBuildProj.ID, strAlias, iFileType);
- CopyFile(PChar(strOldFile), PChar(strNewFile), False);
- end;
- 5:
- begin
- //ProjectManager.AddRelaFile();
- end;
- end;
- end;
- end;
- end;
- FManageProjects.AddExistProjects(slstImportProj, vBuildProj.ID);
- end;
- finally
- slstImportProj.Free;
- slstProj.Free;
- end;
- RefreshInfoView;
- finally
- Importer.Free;
- end;
- end;
- finally
- DeleteFile(strFile);
- end;
- end;
- function TScfrmBigProjManage.ExportBudgetProject(AID: Integer;
- const ABuildProject, AProjectName, ASourceFile, ABudgetProjFile: string): Boolean;
- var
- I: Integer;
- strFeeTaxFile, strFile: string;
- Exporter: TScBuildProjectSaver;
- vTender, vBuildProj: TScProjManagerTreeNode;
- begin
- // Chenshilong, 2010-8-3 22:04:01 导出前保存
- for I := 0 to ProjList.Count - 1 do
- begin
- if SameText(ProjList.ProjData[i].FileName, ASourceFile) then
- begin
- ProjList.ProjData[i].Save;
- Break;
- end;
- end;
- vTender := TScProjManagerTreeNode(staBuildProjects.IDTree.FindNode(AID));
- if vTender.IsTender then
- vBuildProj := TScProjManagerTreeNode(vTender.Parent)
- else
- vBuildProj := nil;
- if (not Assigned(vBuildProj)) or (not vBuildProj.IsBuildProj) then
- raise Exception.Create('导出分段文件:数据错误。');
- strFile := ABudgetProjFile;
- Exporter := TScBuildProjectSaver.Create;
- try
- Exporter.AddExportFile(ASourceFile);
- strFeeTaxFile := FindFeeTaxFile(AID);
- if FileExists(strFeeTaxFile) then
- Exporter.AddExportFile(strFeeTaxFile, FileType_FeeTaxFile);
- with FManageProjects do
- begin
- cdsRelaFiles.Filtered := False;
- cdsRelaFiles.Filter := Format('(BuildProjectID=%d) AND (ProjectID=%d)', [vBuildProj.ID, AID]);
- cdsRelaFiles.Filtered := True;
- cdsRelaFiles.First;
- while not cdsRelaFiles.Eof do
- begin
- Exporter.AddExportFile(cdsRelaFilesFileName.Value);
- cdsRelaFiles.Next;
- end;
- cdsRelaFiles.Filtered := False;
- end;
- // 导出我的工料机
- Exporter.AddExportFile(DefaultGLJLibFile);
- Exporter.ExportProject(vBuildProj.ID, ABuildProject, strFile);
- finally
- Exporter.Free;
- end;
- end;
- procedure TScfrmBigProjManage.ImportAndOpenBudgetProject(ABuildProjName,
- ABudgetProjFile: string);
- begin
- if ImportBuildProjectIfNotExists(ABuildProjName) then
- begin
- if ImportBudgetProject(ABudgetProjFile) then
- actnOpen.Execute
- else
- {$IFDEF _CostService}csParams.HasDownLoad := False{$ENDIF};
- end;
- end;
- function TScfrmBigProjManage.ImportBuildProjectIfNotExists(
- ABuildProjName: string): Boolean;
- var
- ProjItem: TScProjManagerTreeNode;
- begin
- ProjItem := FManageProjects.FindBuildProjectWithFull(ABuildProjName);
- if not Assigned(ProjItem) then
- ProjItem := FManageProjects.AddBuildProjectWithFull(ABuildProjName);
- FManageProjects.LocateBuildProject(ProjItem.ID);
- Result := True;
- end;
- procedure TScfrmBigProjManage.ClearRelaFilesView;
- begin
- if FRationParent <> nil then
- FRationParent.DeleteChildren;
- if FFeeParent <> nil then
- FFeeParent.DeleteChildren;
- if FPriceParent <> nil then
- FPriceParent.DeleteChildren;
- end;
- procedure TScfrmBigProjManage.ExportCurBuildProject(const AFileName: string);
- var
- vNode: TScProjManagerTreeNode;
- iID: Integer;
- sName: string;
- begin
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if vNode.IsBuildProj then
- ExportBuildProject(vNode.ID, vNode.Rec.Name.AsString, AFileName);
- end;
- function TScfrmBigProjManage.CurSelNodeIsBP: Boolean;
- var
- vNode: TScProjManagerTreeNode;
- begin
- Result := False;
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if vNode.IsBuildProj then Result := True;
- end;
- procedure TScfrmBigProjManage.ExpXML_QG;
- var
- vNode: TScProjManagerTreeNode;
- iID, i: Integer;
- sFileName, sExt: string;
- vPort: TQGXMLPort;
- svDlg: TSaveDialog;
- vTenderList: TList;
- vType: TScProjType;
- tenderRec: TsdDataRecord;
- pbData: TScProjBaseData;
- vProject: TScProject;
- isNewOpen: Boolean;
- begin
- svDlg := TSaveDialog.Create(nil);
- vTenderList := TList.Create;
- vPort := TQGXMLPort.Create;
- try
- svDlg.InitialDir := ExtractFilePath(Application.ExeName) + 'UserData\接口';
- svDlg.Title := '导出文件' ;
- svDlg.Filter := '造价数据文件新全国(*.jygs;*.gkgs;*.sjgs;*.sgys;*.qdys;*.gcjs;*.sjys)|*.jygs;*.gkgs;*.sjgs;*.sgys;*.qdys;*.gcjs;*.sjys';
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- svDlg.FileName := vNode.Rec.Name.AsString;
- if not svDlg.Execute then Exit;
- FManageProjects.LoadBuildProjectTenders(CurBuildProjID, vTenderList);
- if vTenderList.Count = 0 then Exit;
- try
- CreateProgressForm(100, '导出XML文件>>>');
- AddProgressForm(20, '正在后台打开第 1 个项目...');
- // 单机版中,建设项目没有项目类型,且建设项目下可以有不同的项目类型。这里取第一标段的项目类型。
- vProject := GetProjectByTenderRec(TsdDataRecord(vTenderList[0]), isNewOpen);
- vType := vProject.ProjType;
- finally
- CloseProgressForm(True);
- end;
- sExt := LowerCase(ExtractFileExt(svDlg.FileName));
- if (vType = ptProposalEstimate) and (sExt <> '.jygs') then
- svDlg.FileName := svDlg.FileName + '.jygs';
- if (vType = ptFeasibilityEstimate) and (sExt <> '.gkgs') then
- svDlg.FileName := svDlg.FileName + '.gkgs';
- if (vType = ptBudgetEstimate) and (sExt <> '.sjgs') then
- svDlg.FileName := svDlg.FileName + '.sjgs';
- if (vType = ptBudget) and (sExt <> '.sgys') then
- svDlg.FileName := svDlg.FileName + '.sgys';
- if (vType = ptBills) and (sExt <> '.qdys') then
- svDlg.FileName := svDlg.FileName + '.qdys';
- if (vType = ptFinal) and (sExt <> '.gcjs') then
- svDlg.FileName := svDlg.FileName + '.gcjs';
- if (vType = ptBillsBudget) and (sExt <> '.sjys') then
- svDlg.FileName := svDlg.FileName + '.sjys';
- for i := 0 to vTenderList.Count - 1 do
- vPort.TenderRecList.Add(vTenderList[i]);
- vPort.BuildProjRec := ProjectManager.PropertiesRec(CurBuildProjID);
- vPort.FileType := xftTB;
- vPort.Progressive := ProjectManager.GetSiteConstructType(CurBuildProjID) = gmCalculate;
- vPort.Progressive2 := ProjectManager.GetProgressiveType(CurBuildProjID) = gmCalculate;
- vPort.ProgressiveFile := CommonFeeLib.GetProgressiveFeeFile(ProjectManager.GetProgressiveFileID(CurBuildProjID));
- vPort.XMLFile := svDlg.FileName;
- vPort.FirtProjIsNewOpen := isNewOpen; // 这个很重要!后台打开的项目用完一定要关,否则会有车船税同步错误等。
- vPort.SaveToXML;
- finally
- vTenderList.Free;
- vPort.Free;
- svDlg.Free;
- end;
- end;
- // 浙江:项目管理-建设项目-导出多标段
- procedure TScfrmBigProjManage.ExpXML_ZJ;
- var
- vNode: TScProjManagerTreeNode;
- iID, i, iZTBType: Integer;
- sName, sTimeName, spath, sExt, sXMLFile, sPDFFile, sZipFile: string;
- vPort: TZTBXMLPort;
- svDlg: TSaveDialog;
- vTenderList: TList;
- vType: TScProjType;
- tenderRec: TsdDataRecord;
- pbData: TScProjBaseData;
- vProject: TScProject;
- isNewOpen: Boolean;
- strEncryptExe: string;
- vFileList: TStringList;
- bIsTender: Boolean;
- begin
- iZTBType := OpenTenderKindSelectForm(bIsTender);
- case TXmlfileType(iZTBType) of
- xftZB: sExt := '.zbjtgcl';
- xftTB: sExt := '.tbjtgcl';
- xftKZJ: sExt := '.xxx'; // 暂时用不上
- end;
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- sName := vNode.Rec.Name.AsString;
- sTimeName := Format('jt-%d', [DateTimeToUnix(Now)]); // 10位时间戳(压缩包内用这个命名,压缩包外用项目名称命名)
- svDlg := TSaveDialog.Create(nil);
- svDlg.Options := svDlg.Options + [ofOverwritePrompt];
- vTenderList := TList.Create;
- vPort := TZTBXMLPort.Create;
- vFileList := TStringList.Create;
- PrepareExportPDF_ZheJiang(CurBuildProjID, iZTBType, bIsTender);
- try
- svDlg.InitialDir := ExtractFilePath(Application.ExeName) + 'UserData\接口';
- svDlg.Title := '导出文件' ;
- svDlg.Filter := '浙江电子标文件(.zbjtgcl;.tbjtgcl)|*.zbjtgcl;*.tbjtgcl';
- svDlg.FileName := sName + sExt;
- if not svDlg.Execute then Exit;
- sPath := ExtractFilePath(svDlg.FileName);
- sName := ExtractFileNameWithoutExt(svDlg.FileName);
- FManageProjects.LoadBuildProjectTenders(CurBuildProjID, vTenderList);
- if vTenderList.Count = 0 then Exit;
- sXMLFile := sPath + sTimeName + '.xml';
- sPDFFile := sPath + sTimeName + '.pdf';
- sZipFile := sPath + sName + sExt;
- try
- CreateProgressForm(100, '导出XML文件>>>');
- AddProgressForm(20, '正在后台打开第 1 个项目...');
- // 单机版中,建设项目没有项目类型,且建设项目下可以有不同的项目类型。这里取第一标段的项目类型。
- vProject := GetProjectByTenderRec(TsdDataRecord(vTenderList[0]), isNewOpen);
- vType := vProject.ProjType;
- finally
- CloseProgressForm(True);
- end;
- // 添加项目数据事件
- vPort.OnOpenProject := DoOnExportProjectXML;
- // 添加多标段
- for i := 0 to vTenderList.Count - 1 do
- vPort.TenderRecList.Add(vTenderList[i]);
- vPort.BuildProjRec := ProjectManager.PropertiesRec(CurBuildProjID);
- vPort.XMLFile := sXMLFile;
- vPort.FileType := TxmlFileType(iZTBType);
- vPort.Area := areaZheJiang;
- vPort.RootName := '浙江交通建设工程';
- vPort.Progressive := ProjectManager.GetSiteConstructType(CurBuildProjID) = gmCalculate;
- vPort.Progressive2 := ProjectManager.GetProgressiveType(CurBuildProjID) = gmCalculate;
- vPort.ProgressiveFile := CommonFeeLib.GetProgressiveFeeFile(ProjectManager.GetProgressiveFileID(CurBuildProjID));
- vPort.FirtProjIsNewOpen := isNewOpen; // 这个很重要!后台打开的项目用完一定要关,否则会有车船税同步错误等。
- vPort.SaveToXML(False);
- vFileList.Add(sXMLFile);
- // 添加项目数据在DoOnExportProjectXML事件中
- // 导出PDF
- ExportPDF_ZheJiang(sPDFFile);
- vFileList.Add(sPDFFile);
- // 如果zip文件已存在,则并不会覆盖,而是把两次的文件一起压缩。所以这里要先删除。
- if FileExists(sZipFile) then
- SysUtils.DeleteFile(sZipFile);
- vPort.ZipFiles(vFileList, sZipFile);
- // 验证打包
- strEncryptExe := AppPath + 'ZJEncrypt\ZJ_Encrypt.exe';
- if FileExists(strEncryptExe) and FileExists(sZipFile) then
- ShellExecute(0, 'open', PChar(strEncryptExe), PChar(sZipFile), PChar(AppPath), SW_HIDE);
- finally
- EndExportPDF_ZheJiang;
- vTenderList.Free;
- vPort.Free;
- svDlg.Free;
- vFileList.Free;
- end;
- end;
- function TScfrmBigProjManage.GetCurrentBPName: string;
- var
- Node: TScProjManagerTreeNode;
- begin
- Node := TScProjManagerTreeNode(FManageProjects.ManagerTree.FindNode(CurBuildProjID));
- if Assigned(Node) then
- Result := Node.Rec.ValueByName('Name').AsString
- else
- Result := '';
- end;
- function TScfrmBigProjManage.OpenAllBudgetProjectOfCurrentBP: TScProjType;
- var
- Tenders: TList;
- i: Integer;
- Rec: TsdDataRecord;
- projData: TScProjBaseData;
- begin
- Result := ptBillsBudget;
- Tenders := TList.Create;
- try
- FManageProjects.LoadBuildProjectTenders(CurBuildProjID, Tenders);
- for i := 0 to Tenders.Count - 1 do
- begin
- Rec := TsdDataRecord(Tenders.Items[i]);
- if ProjList.IndexByName(Rec.ValueByName('FileName').AsString) = nil then
- begin
- projData := ProjList.AddProj(Rec.ValueByName('FileName').AsString);
- projData.CreateProject;
- projData.Project.OpenConnection;
- ProjData.Project.DoAfterOpenConnection;
- projData.Project.Open(oftOpen);
- end
- else
- projData := ProjList.IndexByName(Rec.ValueByName('FileName').AsString);
- result := ProjData.ProjType;
- end;
- finally
- Tenders.Free;
- end;
- end;
- procedure TScfrmBigProjManage.ImportBP(const AFileName: string);
- var
- Importer: TScBuildProjectSaver;
- strName, strOldFile, strNewFile, strPath, strOldVer, strNewVer: string;
- slstProj: TStringList;
- I: Integer;
- iNewID, iFileType, iFileID: Integer;
- vProjBuild: TScProjManagerTreeNode;
- fCoe: Double;
- begin
- Importer := TScBuildProjectSaver.Create;
- try
- if not Importer.CanImport(AFileName, strOldVer, strNewVer) then
- begin
- MessageWarning(0, Format('导入失败:您要导入的文件是由%s版本导出,当前软件是%s版本,请选择正确的版本再进行操作!',
- [strOldVer, strNewVer]), '系统提醒');
- Exit;
- end;
- if Importer.OpenProject(AFileName) then
- begin
- strName := ExtractFileNameWithoutExt(AFileName);
- while FManageProjects.FindBuildProjectWithSelect(strName) <> nil do
- begin
- if not ScInputQuery('重命名', Format('建设项目[%s]已存在,请重新命名', [strName]), strName, False, True) then
- Exit
- else if strName = '' then
- begin
- MessageWarning('建设项目名不可为空。');
- Exit;
- end;
- end;
- Screen.Cursor := crHourGlass;
- try
- Importer.ImportProject(strName);
- finally
- Screen.Cursor := crDefault;
- end;
- end;
- Screen.Cursor := crHourGlass;
- // zhangyin:下面这一大段为什么会放在上面那个if的外面?显然不合理,但是为了保险起见,暂不做修改
- try
- vProjBuild := FManageProjects.AddBuildProjectWithSelect(strName, True);
- iNewID := vProjBuild.ID;
- vProjBuild.Rec.Author.AsString := Importer.Author;
- vProjBuild.Rec.Auditor.AsString := Importer.Auditor;
- vProjBuild.Rec.Principal.AsString := Importer.Principal;
- if Importer.HasProperties then
- ImportBPProperties(iNewID, Importer.Properties);
- FManageProjects.SetProgressiveType(iNewID, TGatherMode(Importer.ProgressiveType));
- FManageProjects.SetSiteConstructType(iNewID, TGatherMode(Importer.SiteConstructType));
- iFileID := CommonFeeLib.FileIDByName(Importer.ProgressiveFile);
- //if iFileID = -1 then
- // iFileID := CommonFeeLib.DefaultFileID;
- FManageProjects.SetProgressiveFileID(iNewID, iFileID);
- fCoe := Importer.ProgressiveCoe;
- if fCoe = 0 then fCoe := 1;
- FManageProjects.SetProgressiveCoe(iNewID, fCoe);
- slstProj := TStringList.Create;
- try
- for I := 0 to Importer.FileList.Count - 1 do
- begin
- strOldFile := Importer.FileList[I];
- if not IsSmartCostFile(strOldFile) > 0 then Continue;
- iFileType := GetFileType(strOldFile);
- CheckAlias(strOldFile);
- case iFileType of
- FileType_Project, FileType_FeeFile, FileType_PriceFile, FileType_StaticBills:
- begin
- strNewFile := ConfigInfo.NewGUIDFileName;
- CopyFile(PChar(strOldFile), PChar(strNewFile), True);
- if (iFileType = FileType_Project) or (iFileType = FileType_StaticBills) then
- begin
- if Importer.HasSelection then
- slstProj.AddObject(strNewFile, Pointer(Importer.ReadProjectSelection))
- else
- slstProj.AddObject(strNewFile, Pointer(True));
- end
- else
- slstProj.Add(strNewFile);
- end;
- FileType_RationLib:
- begin
- strPath := ConfigInfo.RationLibPath;
- strNewFile := strPath + ExtractFileName(strOldFile);
- if FileExists(strNewFile) then
- begin
- if SameFileSize(strNewFile, strOldFile) then
- begin
- slstProj.Add(strNewFile);
- Continue
- end
- else
- begin
- strPath := ConfigInfo.ImportRationLibPath + strName + '\';
- strNewFile := strPath + ExtractFileName(strOldFile);
- end;
- end;
- if not DirectoryExists(strPath) then
- CreateFullDir(strPath);
- CopyFile(PChar(strOldFile), PChar(strNewFile), False);
- slstProj.Add(strNewFile);
- end;
- end;
- end;
- FManageProjects.AddExistProjects(slstProj, iNewID);
- FManageProjects.AddRelaFiles(Importer.FileList, iNewID);
- FManageProjects.CheckBMFeeFileAfterImportBP(iNewID);
- finally
- slstProj.Free;
- end;
- FManageProjects.LocateBuildProject(iNewID);
- finally
- Screen.Cursor := crDefault;
- end;
- finally
- Importer.Free;
- end;
- end;
- procedure TScfrmBigProjManage.ExtractBudgetProjectNames(AStrings: TStrings);
- begin
- FManageProjects.LoadBuildProjectTendersName(CurBuildProjID, AStrings);
- end;
- function TScfrmBigProjManage.IsPropertyCanEdit(
- const ACoord: TPoint): Boolean;
- const
- // 要添加不允许编辑的行,在这里添加名字
- CannotEditRowName: array[1..2] of string =
- ( '利润率(%)',
- '增值税税率(%)'
- );
- var
- I: Integer;
- AName, AFileName: string;
- begin
- AFileName := staBuildProjects.DataView.Current.ValueByName(SFileName).AsString;
- Result := True;
- if not IsStaticBillsFile(AFileName) then
- begin
- Result := True;
- Exit;
- end;
- AName := Trim(zgProperties.Cells[0, ACoord.Y].Text);
- for I := 1 to Length(CannotEditRowName) do
- begin
- if SameText(AName, CannotEditRowName[I]) then
- begin
- Result := False;
- Exit;
- end;
- end;
- end;
- procedure TScfrmBigProjManage.actnOwnerExportExecute(Sender: TObject);
- begin
- ExportStaticBills('', True);
- end;
- procedure TScfrmBigProjManage.ExportStaticBills(ANewAlias: string; AIsOwner: Boolean);
- var
- vTender, vBuildProj: TScProjManagerTreeNode;
- strFile, strAlias, strSourceAlias, strBPName,
- strSourceFile, sStaticTmpFile, sRelaTempFile, tmpAlias: string;
- I, iBPID, iProjID: Integer;
- stbFileHead: TScFileHead;
- tmpFile, aRelaFile, stbFile: TFileStream;
- rFileHead, rRelaHead: TScFileHeadRec;
- stbHead: TStaticBillsHead;
- aRelaFileName, aRelaAlias, sPath: string;
- bIsStaticBillsFile: Boolean;
- begin
- vTender := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if Assigned(vTender) then
- vBuildProj := TScProjManagerTreeNode(vTender.Parent)
- else
- vBuildProj := nil;
- if not Assigned(vTender) or not vTender.IsTender then
- raise Exception.Create('请选择固化清单标段导出。');
- if not Assigned(vBuildProj) or not vBuildProj.IsBuildProj then
- raise Exception.Create('数据错误');
- ScProgress(0, '正在导出固化清单...');
- sdExport.Filter := GetDialogExtString(dtStaticBills);
- if ANewAlias = '' then
- strAlias := vTender.Rec.Name.AsString
- else
- strAlias := ANewAlias;
- strFile := strAlias;
- strBPName := vBuildProj.Rec.Name.AsString;
- iBPID := vBuildProj.ID;
- iProjID := vTender.ID;
- strSourceAlias := vTender.Rec.Name.AsString;
- strSourceFile := vTender.Rec.FileName.AsString;
- // 业主每次导出都重新生成GUID
- if AIsOwner then
- begin
- if IsFileHadExportedStaticBills(strSourceFile) then
- begin
- if MessageYesOrNo('重新生成固化清单后,之前生成的固化清单文件将作废。您是否要继续?') then
- NewGUIDToNewSmpFile(strSourceFile)
- else
- Exit;
- end
- else
- begin
- NewGUIDToNewSmpFile(strSourceFile);
- end;
- end;
- FixFileExt(strFile, SStaticBillsFileExt);
- if Pos(':\', ConfigInfo.OutputPath) > 0 then
- sPath := ConfigInfo.OutputPath
- else
- sPath := ExtractFilePath(Application.ExeName) + ConfigInfo.OutputPath;
- sPath := sPath + strBPName + '\';
- strFile := sPath + strFile;
- if not DirectoryExists(sPath) then
- ForceDirectories(sPath);
- sdExport.FileName := strFile;
- sStaticTmpFile := GetTempFileName; // 临时固化清单分段路径
- if sdExport.Execute then
- begin
- for I := 0 to ProjList.Count - 1 do
- begin
- if SameText(ProjList.ProjData[i].Alias, strAlias) then
- begin
- // 如果项目是打开的,从源文件重新赋值新的GUID 6-26
- ProjList.ProjData[i].ResetFileHeadSourceGUID(GetFileGUID(strSourceFile));
- ProjList.ProjData[i].Save;
- Break;
- end;
- end;
- CreateProgressForm(100, '正在导出固化清单>>>');
- AddProgressForm(10, '正在导出分段文件...');
- strFile := sdExport.FileName;
- // 如果存在同名文件,要先删除
- if FileExists(strFile) then
- DeleteFile(strFile);
- FixFileExt(strFile, SStaticBillsFileExt);
- // 先把分段复制到临时文件下
- if not CopyFile(PChar(strSourceFile), PChar(sStaticTmpFile), False) then
- begin
- MessageWarning('Copy file failed');
- Exit;
- end;
- // 下面对固化清单文件头写新的信息
- // 先把临时清单文件固化
- strAlias := ExtractFileNameWithoutExt(strFile);
- FileArchiverManager.Alias[strFile] := strAlias;
- FileArchiverManager.Alias[sStaticTmpFile] := strAlias;
- // 先验证是不是固化清单文件,不是固化清单才修改文件头
- // 也就是说,一旦导出成固化清单后,属于源就不可以改了
- bIsStaticBillsFile := IsStaticBillsFile(sStaticTmpFile);
- if not bIsStaticBillsFile then
- begin
- // 如果不是固化清单(是源文件)先清除定额数据
- if not ClearRationsOfSourceBills(sStaticTmpFile) then
- begin
- MessageWarning('清除源文件定额数据出错!');
- Exit;
- end;
- stbFileHead := ReadScFileHead(sStaticTmpFile);
- // 6-15 固化清单新版
- // 固化清单文件类型改为8,7只用在十天高速项目
- // stbFileHead.FileType := 7; // 固化清单的文件类型=7
- stbFileHead.FileType := 8; // 固化清单的文件类型=7
- stbFileHead.SourceBPName := Trim(strBPName);
- stbFileHead.SourceName := Trim(strSourceAlias);
- // 源文件名GUID 经过MD5加密存在文件夹
- stbFileHead.SourceFileName := GetFileGUID(strSourceFile);
- tmpFile := TFileStream.Create(sStaticTmpFile, fmOpenWrite);
- try
- tmpFile.Position := 0;
- tmpFile.Write(stbFileHead, SizeOf(stbFileHead));
- finally
- tmpFile.Free;
- end;
- // 设置源文件导出标志
- // zhangyin 2012-09-28业主发布文件才设置标志
- SetExportedStaticBillsFlag(strSourceFile, 1);
- SetExportedStaticBillsFlag(sStaticTmpFile, 0);
- end
- else
- begin
- // 固化清单导出,项目文件也要清除处理
- if not ClearRationsOfStaticBills(sStaticTmpFile) then
- begin
- DeleteFile(sStaticTmpFile);
- CloseFloatProgress;
- ScProgress(100);
- Exit;
- end;
- // 重设固化清单导出标志 6-28
- // zhangyin 2012-09-28业主发布文件才设置标志
- SetExportedStaticBillsFlag(strSourceFile, 0);
- SetExportedStaticBillsFlag(sStaticTmpFile, 0);
- end;
- // 然后导出临时分段和单价费率文件
- try
- // 固化清单导出文件
- stbFile := TFileStream.Create(strFile, fmCreate);
- // 先写固化清单文件头
- ZeroMemory(@stbHead, SizeOf(stbHead));
- // 6-15 固化清单新版 stb文件包类型改为2(类型=1的只用在十天高速项目)
- // stbHead.IsStaticBillsFile := 1;
- stbHead.IsStaticBillsFile := 2;
- stbFile.Write(stbHead, SizeOf(stbHead));
- // 临时分段
- ZeroMemory(@rFileHead, SizeOf(rFileHead));
- rFileHead.FileName := tmpAlias;
- rFileHead.FileType := GetFileType(sStaticTmpFile);
- tmpFile := TFileStream.Create(sStaticTmpFile, fmOpenRead);
- rFileHead.Size := tmpFile.Size;
- stbFile.Write(rFileHead, SizeOf(rFileHead));
- tmpFile.Position := 0;
- stbFile.CopyFrom(tmpFile, tmpFile.Size);
- AddProgressForm(40, '正在导出费率文件...');
- // 然后写入关联文件
- with FManageProjects do
- begin
- cdsRelaFiles.Filtered := False;
- cdsRelaFiles.Filter := Format('(BuildProjectID=%d) AND (ProjectID=%d)', [iBPID, iProjID]);
- cdsRelaFiles.Filtered := True;
- cdsRelaFiles.First;
- while not cdsRelaFiles.Eof do
- begin
- // 关联文件
- aRelaFileName := cdsRelaFilesFileName.AsString;
- // 如果关联文件不存在就下一个 且不导出定额库
- if (FileExists(aRelaFileName)) and (cdsRelaFilesFileType.AsInteger <> 1) then
- begin
- sRelaTempFile := GetTempFileName; // 临时路径
- // 费率单价不这样复制源文件了,直接到目录下复制模版文件
- if not CopyFile(PChar(aRelaFileName), PChar(sRelaTempFile), False) then
- begin
- MessageWarning('Copy file failed');
- Exit;
- end;
- // 如果是业主导出,先清楚单价费率修改
- if not bIsStaticBillsFile then
- begin
- if cdsRelaFilesFileType.AsInteger = 2 then
- ClearFeeFile(sRelaTempFile)
- else if cdsRelaFilesFileType.AsInteger = 3 then
- ClearPriceFile(sRelaTempFile);
- end;
- aRelaAlias := cdsRelaFilesName.AsString;
- FileArchiverManager.Alias[sRelaTempFile] := aRelaAlias;
- try
- // 单价费率就导出
- ZeroMemory(@rRelaHead, SizeOf(rRelaHead));
- rRelaHead.FileName := aRelaAlias;
- rRelaHead.FileType := GetFileType(sRelaTempFile);
- aRelaFile := TFileStream.Create(sRelaTempFile, fmOpenRead);
- rRelaHead.Size := aRelaFile.Size;
- stbFile.Write(rRelaHead, SizeOf(rRelaHead));
- aRelaFile.Position := 0;
- stbFile.CopyFrom(aRelaFile, aRelaFile.Size);
- finally
- DeleteFile(sRelaTempFile);
- aRelaFile.Free;
- end;
- end;
- AddProgressForm(20, '正在导出单价文件...');
- cdsRelaFiles.Next;
- end;
- cdsRelaFiles.Filtered := False;
- end;
- finally
- tmpFile.Free;
- DeleteFile(sStaticTmpFile);
- stbFile.Free;
- end;
- end;
- CloseFloatProgress;
- ScProgress(100);
- end;
- procedure TScfrmBigProjManage.actnOwnerImportExecute(Sender: TObject);
- begin
- odImport.Filter := GetDialogExtString(dtStaticBills);
- if odImport.Execute then
- ImportStaticBills(odImport.FileName, True);
- end;
- procedure TScfrmBigProjManage.ImportStaticBills(const AFileName: string; AIsOwner: Boolean);
- var
- stbFilePackege, strFile, strNewFile, strAlias, sBidderName: string;
- sSourceBPName, sSourceName, sSourceFileName, sSourceFileMD5: string;
- stbFileHead: TScFileHead;
- bRenamed: Boolean;
- iPosition, iProjID: Integer;
- aBillFile, aRelaFile, stbPackegeFile: TFileStream;
- stbHead: TStaticBillsHead;
- rBillhead, rRelaHead: TScFileHeadRec;
- vBPNode: TScProjManagerTreeNode;
- begin
- stbFilePackege := GetTempFileName;
- try
- CopyFile(PChar(AFileName), PChar(stbFilePackege), False);
- // 先验证是不是固化清单文件包
- if not IsStaticBillsPackage(stbFilePackege) then
- begin
- MessageWarning(0, '您导入的文件不属于固化清单文件!');
- Exit;
- end;
- // 先从分段导入 \ 固化分段先暂时存到临时文件
- strFile := GetTempFileName;
- try
- stbPackegeFile := TFileStream.Create(stbFilePackege, fmOpenRead);
- stbPackegeFile.Read(stbHead, SizeOf(stbHead));
- stbPackegeFile.Read(rBillhead, SizeOf(rBillhead));
- // 先是从包中复制出固化分段
- try
- aBillFile := TFileStream.Create(strFile, fmCreate);
- aBillFile.CopyFrom(stbPackegeFile, rBillhead.Size);
- finally
- aBillFile.Free;
- end;
- if IsStaticBillsFile(strFile) then
- begin
- // 下面校验是否是源文件导出的固化清单
- // 校验开始
- if AIsOwner then
- begin
- if not IsOwnerStaticBills(strFile) then
- begin
- MessageHint(0, '找不到源文件,请业主在源文件所在建设项目下接收数据。'+ #13#10 + '或此文件不是业主最后导出的固化清单!');
- DeleteFile(strFile);
- Exit;
- end;
- end;
- // 校验结束
- CheckAlias(strFile);
- strAlias := FileArchiverManager.Alias[strFile];
- bRenamed := False;
- // 如果不是业主要输入投标单位的名称
- if not AIsOwner then
- begin
- sBidderName := '';
- while sBidderName = '' do
- begin
- if not ScInputQuery('投标单位', '请输入投标单位的名称:', sBidderName, False, True)
- then
- begin
- DeleteFile(strFile);
- Exit;
- end;
- end;
- strAlias := Trim(strAlias) + '【' + Trim(sBidderName) + '】';
- bRenamed := True;
- end;
- vBPNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if (vBPNode.IsTender) then
- vBPNode := TScProjManagerTreeNode(vBPNode.Parent);
- while ProjectManager.TendersRec(vBPNode.ID, strAlias) <> nil do
- begin
- if not ScInputQuery('重命名',
- Format('[%s]已存在,如确实需要导入该文件,请重命名', [strAlias]), strAlias, False, True)
- then
- begin
- DeleteFile(strFile);
- Exit;
- end;
- bRenamed := True;
- end;
- strNewFile := ConfigInfo.NewGUIDFileName;
- CopyFile(PChar(strFile), PChar(strNewFile), True);
- if bRenamed then
- FileArchiverManager.Alias[strNewFile] := strAlias
- else
- CheckAlias(strNewFile, strAlias);
- ProjectManager.AddProject(strNewFile, vBPNode.ID);
- // 获取分段ID
- iProjID := ProjectManager.GetProjectID(strNewFile);
- RefreshInfoView;
- // 删除分段临时文件
- DeleteFile(strFile);
- end
- else
- begin
- DeleteFile(strFile);
- MessageHint(0 , '导入失败!该文件不属于固化清单文件!');
- Exit;
- end;
- // 下面导入关联文件 ,关联文件不再建立临时文件,直接创建新文件
- // 先设置当前固化包的文件指针
- stbPackegeFile.Position := rBillhead.Size + SizeOf(stbHead) + SizeOf(rBillhead);
- while stbPackegeFile.Position < stbPackegeFile.Size do
- begin
- stbPackegeFile.Read(rRelaHead, SizeOf(rRelaHead));
- strNewFile := ConfigInfo.NewGUIDFileName;
- try
- aRelaFile := TFileStream.Create(strNewFile, fmCreate);
- aRelaFile.CopyFrom(stbPackegeFile, rRelaHead.Size);
- finally
- aRelaFile.Free;
- end;
- // zhangyin 2012-07-27投标单位接收相关文件要保持原文件名,且修改后要同步项目属性
- if (not AIsOwner) and (rRelaHead.FileType in [FileType_FeeFile, FileType_PriceFile]) then
- begin
- strAlias := FileArchiverManager.Alias[strNewFile];
- strAlias := Trim(strAlias) + '【' + Trim(sBidderName) + '】';
- FileArchiverManager.Alias[strNewFile] := strAlias;
- if rRelaHead.FileType = FileType_PriceFile then
- FManageProjects.ChangeProperties(iProjID, 'Value4', strAlias)
- else if rRelaHead.FileType = FileType_FeeFile then
- FManageProjects.ChangeProperties(iProjID, 'Value3', strAlias);
- end;
- FManageProjects.AddRelaFile(strNewFile, CurBuildProjID, iProjID);
- end;
- RefreshInfoView;
- finally
- stbPackegeFile.Free;
- end;
- finally
- DeleteFile(stbFilePackege);
- end;
- end;
- procedure TScfrmBigProjManage.actnBidderExportExecute(Sender: TObject);
- begin
- ExportStaticBills('', False);
- end;
- procedure TScfrmBigProjManage.actnBidderImportExecute(Sender: TObject);
- begin
- odImport.Filter := GetDialogExtString(dtStaticBills);
- if odImport.Execute then
- ImportStaticBills(odImport.FileName, False);
- end;
- function TScfrmBigProjManage.IsOwnerStaticBills(AFileName: string): Boolean;
- var
- stbFileHead: TScFileHead;
- bBeyondOwner: Boolean;
- sSourceBPName, sSourceName, sSourceFileName, sSbtFileMD5, sSourceFileMD5: string;
- vBPNode: TScProjManagerTreeNode;
- begin
- if (Trim(AFileName) = '') or (not FileExists(Trim(AFileName))) then
- Exit;
- bBeyondOwner := False;
- stbFileHead := ReadScFileHead(AFileName);
- sSourceBPName := Trim(stbFileHead.SourceBPName);
- vBPNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if (vBPNode.IsTender) then
- vBPNode := TScProjManagerTreeNode(vBPNode.Parent);
- //验证当前建设项目是否为源项目 不是源文件的当前建设项目 就返回False
- if not SameText(Trim(sSourceBPName), Trim(vBPNode.Rec.Name.AsString)) then
- begin
- Result := False;
- Exit;
- end;
- sSourceName := Trim(stbFileHead.SourceName);
- sSbtFileMD5 := Trim(stbFileHead.SourceFileName);
- sSourceFileName := ProjectManager.TenderFileName(vBPNode.ID, sSourceName);
- if SameText(Trim(sSourceFileName), '') then
- begin
- Result := False;
- Exit;
- end;
- sSourceFileMD5 := GetFileGUID(sSourceFileName);
- bBeyondOwner := SameText(sSbtFileMD5, sSourceFileMD5);
- Result := bBeyondOwner;
- end;
- procedure TScfrmBigProjManage.NewGUIDToNewSmpFile(
- AFileName: string);
- var
- sFile: string;
- smbFileHead: TScFileHead;
- smbFile: TFileStream;
- begin
- sFile := Trim(AFileName);
- if sFile = '' then
- Exit;
- if not FileExists(sFile) then
- Exit;
- // 只处理文件类型为1的文件
- if IsSmartCostProjectFile(sFile) then
- begin
- smbFileHead := ReadScFileHead(sFile);
- smbFileHead.SourceFileName := EncryptStringByMD5(CreateClassID);
- try
- smbFile := TFileStream.Create(sFile, fmOpenWrite);
- smbFile.Position := 0;
- smbFile.Write(smbFileHead, SizeOf(smbFileHead));
- finally
- smbFile.Free;
- end;
- end;
- end;
- function TScfrmBigProjManage.GetFileGUID(AFileName: string): string;
- var
- sFile: string;
- smbFileHead: TScFileHead;
- begin
- Result := '';
- sFile := Trim(AFileName);
- smbFileHead := ReadScFileHead(sFile);
- if Trim(smbFileHead.SourceFileName) <> '' then
- Result := smbFileHead.SourceFileName
- else
- MessageWarning('文件标识符异常!请联系客服。');
- end;
- procedure TScfrmBigProjManage.SetExportedStaticBillsFlag(
- AFileName: string; AIsExported: Integer);
- var
- sFile: string;
- smbFileHead: TScFileHead;
- smbFile: TFileStream;
- begin
- sFile := Trim(AFileName);
- if sFile = '' then
- Exit;
- if not FileExists(sFile) then
- Exit;
- smbFileHead := ReadScFileHead(sFile);
- smbFileHead.ExportedStaticBills := 1;
- try
- smbFile := TFileStream.Create(sFile, fmOpenWrite);
- smbFile.Position := 0;
- smbFile.Write(smbFileHead, SizeOf(smbFileHead));
- finally
- smbFile.Free;
- end;
- end;
- function TScfrmBigProjManage.IsFileHadExportedStaticBills(
- AFileName: string): Boolean;
- var
- sFile: string;
- smbFileHead: TScFileHead;
- begin
- Result := False;
- sFile := Trim(AFileName);
- if sFile = '' then
- Exit;
- if not FileExists(sFile) then
- Exit;
- smbFileHead := ReadScFileHead(sFile);
- Result := smbFileHead.ExportedStaticBills = 1;
- end;
- procedure TScfrmBigProjManage.zgPropertiesMouseDown(Sender: TObject;
- Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
- var
- iRoadLong: Double;
- begin
- // 固化清单
- // 根据起止桩号自动计算路长, 单击到路长单元格的时候才会自动计算
- with zgProperties do
- begin
- if CurCol <> 1 then
- Exit;
- if SameText(Cells[CurCol-1, CurRow].Text, '路线或桥梁长度(km)') then
- begin
- iRoadLong := GetDistanceByRoadSign(zgProperties.Cells[CurCol, CurRow-2].Text, zgProperties.Cells[CurCol, CurRow-1].Text, 'k', '+');
- if iRoadLong = 0 then
- Exit;
- zgProperties.Cells[CurCol, CurRow].Text := FloatToStr(iRoadLong);
- end;
- end;
- end;
- procedure TScfrmBigProjManage.zgPropertiesKeyDown(Sender: TObject;
- var Key: Word; Shift: TShiftState);
- var
- iRoadLong: Double;
- begin
- if Key = VK_RETURN then
- begin
- // 固化清单
- // 根据起止桩号自动计算路长, 单击到路长单元格的时候才会自动计算
- with zgProperties do
- begin
- if CurCol <> 1 then
- Exit;
- if SameText(Cells[CurCol-1, CurRow].Text, '终点桩号') then
- begin
- iRoadLong := GetDistanceByRoadSign(zgProperties.Cells[CurCol, CurRow-1].Text, zgProperties.Cells[CurCol, CurRow].Text, 'k', '+');
- if iRoadLong = 0 then
- Exit;
- zgProperties.Cells[CurCol, CurRow+1].Text := FloatToStr(iRoadLong);
- end;
- end;
- end;
- end;
- procedure TScfrmBigProjManage.zgBuildProjectsCellTextChanging(
- Sender: TObject; const ACoord: TPoint; var NewValue: String;
- var Accept: Boolean);
- var
- I: Integer;
- Ch: Char;
- begin
- if _IsFixedBills then
- begin
- if not MessageQuest('修改建设项目名称,先前导出的固化清单将作废!' + #13#10 + '您是否要继续?') then
- begin
- Accept := False;
- Exit;
- end;
- end;
- NewValue := Trim(NewValue);
- for I := 1 to Length(NewValue) do
- begin
- Ch := NewValue[I];
- if not ValidFileName(Ch) then
- begin
- HintInvalidFileName;
- Accept := False;
- Break;
- end;
- end;
- end;
- procedure TScfrmBigProjManage.ImportXML_KM;
- var vXMLDoc: IXMLDocument;
- vRoot, vNode: IXMLNode;
- ODlg: TOpenDialog;
- sFile, sProjName, sBName: string;
- vProjItem: TScProjManagerTreeNode;
- vPort: TkmXMLPort;
- Rec: TsdDataRecord;
- begin
- ODlg := TOpenDialog.Create(nil);
- vXMLDoc := TXMLDocument.Create(nil);
- vXMLDoc.Active := True;
- try
- ODlg.InitialDir := ExtractFilePath(Application.ExeName) + 'UserData\';
- // ODlg.Filter := '数据交换规范文件(*.YGLT、*.YGLZ)|*.YGLT;*.YGLZ';
- ODlg.Filter := '数据交换规范文件(*.YGLZ)|*.YGLZ';
- if ODlg.Execute then
- sFile := ODlg.FileName
- else
- Exit;
- vXMLDoc.Options := vXMLDoc.Options + [doNodeAutoIndent];
- vXMLDoc.Version := '1.0';
- vXMLDoc.Encoding := 'UTF-8';
- vXMLDoc.LoadFromFile(sFile);
- vRoot := vXMLDoc.DocumentElement;
- sProjName := vRoot.Attributes['Name'];
- vNode := vRoot.ChildNodes.FindNode('SingleProject');
- vNode := vNode.ChildNodes.FindNode('UnitProject');
- sBName := vNode.Attributes['Name'];
- // 建设项目
- vProjItem := FManageProjects.FindBuildProjectWithFull(sProjName);
- if not Assigned(vProjItem) then
- vProjItem := FManageProjects.AddBuildProjectWithFull(sProjName);
- FManageProjects.LocateBuildProject(vProjItem.ID);
- // 标段
- Rec := ProjectManager.TendersRec(vProjItem.ID, sBName);
- if Assigned(Rec) then
- begin
- MessageHint(0, '已存在同名的项目!');
- Exit;
- end;
- TScMainForm(Application.MainForm).OpenFileByXML(sBName,
- vProjItem.ID, oftNew);
- RefreshInfoView;
- vPort := TkmXMLPort.Create;
- vPort.Project := TScProjForm(ScMainForm.ActiveMDIChild).Project;
- vPort.XMLFile := sFile;
- vPort.LoadFromXML;
- finally
- vXMLDoc.ChildNodes.Clear;
- vXMLDoc.Active := False;
- ODlg.Free;
- vPort.Free;
- end;
- end;
- procedure TScfrmBigProjManage.ImportXML_QG;
- var
- ODlg: TOpenDialog;
- strFile: string;
- begin
- ODlg := TOpenDialog.Create(nil);
- try
- // ODlg.InitialDir := ExtractFilePath(Application.ExeName) + 'UserData\';
- // ODlg.Filter := '数据交换规范文件(*.YGLT、*.YGLZ)|*.YGLT;*.YGLZ';
- ODlg.Filter := '全国造价数据标准文件(*.XML)|*.XML';
- if ODlg.Execute then
- strFile := ODlg.FileName
- else
- Exit;
- finally
- ODlg.Free;
- end;
- if strFile <> '' then
- ScXMLToBuildProject.ImportXML_QuanGuo(strFile, '');
- end;
- procedure TScfrmBigProjManage.zgBuildProjectsPaste(Sender: TObject;
- const ABounds: TRect; var Allow: Boolean);
- begin
- Allow := False;
- end;
- procedure TScfrmBigProjManage.zgRelaFilesPaste(Sender: TObject;
- const ABounds: TRect; var Allow: Boolean);
- begin
- Allow := False;
- end;
- procedure TScfrmBigProjManage.zgPropertiesCellTextChanging(Sender: TObject;
- const ACoord: TPoint; var NewValue: String; var Accept: Boolean);
- begin
- if ACoord.X = 1 then
- case ACoord.Y of
- {$IFDEF _ScNoFeeRate}8{$ELSE}10{$ENDIF}:
- begin
- if Trim(NewValue) = '' then
- Accept := False;
- end;
- end;
- end;
- procedure TScfrmBigProjManage.edtFindBPChange(Sender: TObject);
- begin
- SearchBuildProject(Trim(edtFindBP.Text));
- end;
- procedure TScfrmBigProjManage.SearchBuildProject(AProjectName: string; AFromHead: Boolean);
- function SearchFrom(ANode: TsdIDTreeNode): TsdIDTreeNode;
- var
- vCur: TsdIDTreeNode;
- begin
- Result := nil;
- vCur := ANode;
- while Assigned(vCur) and not Assigned(Result) do
- begin
- if (Pos(UpperCase(AProjectName), UpperCase(vCur.Rec.ValueByName('Name').AsString)) > 0) then
- begin
- Result := vCur;
- Break;
- end;
- vCur := vCur.NextNode;
- end;
- end;
- var
- vNode: TsdIDTreeNode;
- begin
- if AProjectName = '' then Exit;
- if AFromHead then
- vNode := SearchFrom(staBuildProjects.IDTree.FirstNode)
- else
- vNode := SearchFrom(staBuildProjects.IDTree.Selected.NextNode);
- if Assigned(vNode) then
- begin
- staBuildProjects.DataView.LocateInControl(vNode.Rec);
- if not vNode.Expanded then
- vNode.Expand;
- end;
- end;
- procedure TScfrmBigProjManage.btnFindNextClick(Sender: TObject);
- begin
- SearchBuildProject(Trim(edtFindBP.Text), False);
- end;
- function TScfrmBigProjManage.VerifySBP(ABuildProject, AFileName: string): Boolean;
- var
- Importer: TScBuildProjectSaver;
- strFile, strOldVer, strNewVer: string;
- I: Integer;
- iFileType: Integer;
- bpNode: TScProjManagerTreeNode;
- TenderRec: TsdDataRecord;
- slstProj: TStringList;
- begin
- Result := False;
- Importer := TScBuildProjectSaver.Create;
- try
- // 版本信息异常,退出
- if not Importer.CanImport(AFileName, strOldVer, strNewVer) then
- Exit;
- if Importer.OpenProject(AFileName) then
- begin
- bpNode := FManageProjects.FindBuildProjectWithFull(ABuildProject);
- // 未找到对应建设项目,退出
- if bpNode = nil then
- Exit;
- Screen.Cursor := crHourGlass;
- try
- Importer.ImportProject(ExtractFileNameWithoutExt(AFileName));
- finally
- Screen.Cursor := crDefault;
- end;
- end;
- slstProj := TStringList.Create;
- try
- for I := 0 to Importer.FileList.Count - 1 do
- begin
- strFile := Importer.FileList[I];
- if not IsSmartCostFile(strFile) > 0 then Continue;
- iFileType := GetFileType(strFile);
- // 暂时只校验项目文件
- case iFileType of
- FileType_Project, FileType_StaticBills:
- begin
- TenderRec := ProjectManager.TendersRec(bpNode.ID, ExtractFileNameWithoutExt(strFile));
- if not SameFile(strFile, TenderRec.ValueByName('FileName').AsString) then
- Exit;
- end;
- else
- Continue;
- end;
- end;
- finally
- slstProj.Free;
- end;
- Result := True;
- finally
- Importer.Free;
- end;
- end;
- function TScfrmBigProjManage.SelectedBuildProject: Boolean;
- var
- vNode: TScProjManagerTreeNode;
- begin
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- Result := Assigned(vNode) and vNode.IsBuildProj;
- end;
- procedure TScfrmBigProjManage.zgBuildProjectsEditorLoadCell(
- Sender: TObject; ACoord: TPoint; AControl: TWinControl);
- begin
- if (ACoord.X = staBuildProjects.ColumnIndex('EditDate') + zgBuildProjects.FixedColCount)
- and (staBuildProjects.IDTree.Selected.Rec.ValueByName('Type').AsInteger = iPM_BuildProj) then
- begin
- dtpEditDate.Date := ScStrToDate(zgBuildProjects.Cells[ACoord.X, ACoord.Y].Text);
- end;
- end;
- procedure TScfrmBigProjManage.zgBuildProjectsEditorSaveCell(
- Sender: TObject; ACoord: TPoint; AControl: TWinControl);
- begin
- if (ACoord.X = staBuildProjects.ColumnIndex('EditDate') + zgBuildProjects.FixedColCount)
- and (staBuildProjects.IDTree.Selected.Rec.ValueByName('Type').AsInteger = iPM_BuildProj) then
- zgBuildProjects.Cells[ACoord.X, ACoord.Y].Text := FormatDateTime('yyyy-mm-dd', dtpEditDate.Date);
- end;
- procedure TScfrmBigProjManage.zgBuildProjectsGetCellEditor(Sender: TObject;
- ACoord: TPoint; var AControl: TWinControl);
- begin
- if (ACoord.X = staBuildProjects.ColumnIndex('EditDate') + zgBuildProjects.FixedColCount)
- and (not TScProjManagerTreeNode(staBuildProjects.IDTree.Selected).IsFolder) then
- AControl := dtpEditDate;
- end;
- function TScfrmBigProjManage.CurBuildProjID: Integer;
- var
- vNode: TScProjManagerTreeNode;
- begin
- Result := -1;
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if Assigned(vNode) then
- begin
- if vNode.IsTender then
- Result := vNode.ParentID
- else if (vNode.IsBuildProj) then
- Result := vNode.ID;
- end;
- end;
- procedure TScfrmBigProjManage.actnNewFolderExecute(Sender: TObject);
- var
- strName: string;
- vParent, vFolder: TScProjManagerTreeNode;
- begin
- if ScInputQuery('新建文件夹', '请输入文件夹名称', strName, False, True) then
- begin
- strName := Trim(strName);
- if strName = '' then
- begin
- MessageHint('文件夹名称不可为空。');
- Exit;
- end;
- vParent := nil;
- if Assigned(staBuildProjects.IDTree.Selected) then
- vParent := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected.Parent);
- if not Assigned(vParent) or vParent.IsFolder then
- begin
- vFolder := FManageProjects.FindManagerNode(vParent, strName);
- if vFolder <> nil then
- MessageHint(0, Format('存在同名建设项目或者文件夹[%s]。', [strName]))
- else
- vFolder := FManageProjects.AddBuildProjectFolder(vParent, strName);
- end;
- end;
- end;
- procedure TScfrmBigProjManage.actnDelBPUpdate(Sender: TObject);
- begin
- TAction(Sender).Enabled := TScMainForm(Application.MainForm).IsManageView
- end;
- procedure TScfrmBigProjManage.actnOpenHistoryDirExecute(Sender: TObject);
- var
- vTender: TScProjManagerTreeNode;
- sDir: string;
- begin
- vTender := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if not Assigned(vTender) then
- raise Exception.Create('请选中需要查看备份文件的标段。');
- if not vTender.IsTender then
- raise Exception.Create('仅标段可查看备份文件。');
- sDir := FixPathByAppPath('Pro_BackUp\BackUpFiles\' + ExtractFileName(vTender.Rec.FileName.AsString));
- if DirectoryExists(sDir) then
- ShellExecute(Handle, 'open', 'Explorer.exe', PChar(sDir), nil, 1)
- else
- MessageWarning('当前项目无备份数据。');
- end;
- procedure TScfrmBigProjManage.RefreshProjectView(ABuildProjectID: Integer);
- var
- ViewNode, ChildNode: TZjTreeNode;
- I, iRow, iID: Integer;
- strFile: string;
- bNeedContinue: Boolean;
- strFilter: string;
- iProgressiveType, iSiteConstructType: TGatherMode;
- begin
- if ABuildProjectID = -1 then
- ABuildProjectID := CurBuildProjID;
- //InitViews;
- if FManageProjects = nil then
- Exit;
- FManageProjects.SyncCurRelaFiles(ABuildProjectID);
- with FManageProjects do
- begin
- // 费率文件 // 单价文件 // 定额库
- FIsLoading := True;
- ClearRelaFilesView;
- cdsRelaFiles.Open;
- cdsRelaFiles.Filtered := False;
- cdsRelaFiles.Filter := 'BuildProjectID = ' + IntToStr(ABuildProjectID);
- cdsRelaFiles.Filtered := True;
- try
- cdsRelaFiles.First;
- while not cdsRelaFiles.Eof do
- begin
- bNeedContinue := False;
- case cdsRelaFilesFileType.Value of
- FileType_RationLib:
- begin
- for I := 0 to FRationParent.ChildCount - 1 do
- begin
- ChildNode := FRationParent.ChildNodes[I];
- strFile := VarToStr(FManageProjects.cdsRelaFiles.Lookup('ID', Integer(ChildNode.Data), 'FileName'));
- if (strFile = '') or SameText(strFile, cdsRelaFilesFileName.Value) then
- begin
- bNeedContinue := True;
- Break;
- end;
- end;
- if bNeedContinue then
- begin
- cdsRelaFiles.Next;
- Continue;
- end;
- ViewNode := FRationParent.AddChild;
- ViewNode.Caption[1] := NewRelaFileDisplayName(cdsRelaFilesName.AsString); //ExtractFileNameWithoutExt(cdsRelaFilesFileName.Value);
- ViewNode.Data := Pointer(cdsRelaFilesID.Value);
- end;
- FileType_FeeFile:
- begin
- {$IFNDEF _ScNoFeeRate}
- for I := 0 to FFeeParent.ChildCount - 1 do
- begin
- ChildNode := FFeeParent.ChildNodes[I];
- strFile := VarToStr(FManageProjects.cdsRelaFiles.Lookup('ID', Integer(ChildNode.Data), 'FileName'));
- if (strFile = '') or SameText(strFile, cdsRelaFilesFileName.Value) then
- begin
- bNeedContinue := True;
- Break;
- end;
- end;
- if bNeedContinue then
- begin
- cdsRelaFiles.Next;
- Continue;
- end;
- ViewNode := FFeeParent.AddChild;
- ViewNode.Caption[1] := NewRelaFileDisplayName(cdsRelaFilesName.AsString); //ExtractFileNameWithoutExt(cdsRelaFilesFileName.Value);
- ViewNode.Data := Pointer(cdsRelaFilesID.Value);
- {$ENDIF}
- end;
- FileType_PriceFile:
- begin
- for I := 0 to FPriceParent.ChildCount - 1 do
- begin
- ChildNode := FPriceParent.ChildNodes[I];
- strFile := VarToStr(FManageProjects.cdsRelaFiles.Lookup('ID', Integer(ChildNode.Data), 'FileName'));
- if (strFile = '') or SameText(strFile, cdsRelaFilesFileName.Value) then
- begin
- bNeedContinue := True;
- Break;
- end;
- end;
- if bNeedContinue then
- begin
- cdsRelaFiles.Next;
- Continue;
- end;
- ViewNode := FPriceParent.AddChild;
- ViewNode.Caption[1] := NewRelaFileDisplayName(cdsRelaFilesName.AsString); //ExtractFileNameWithoutExt(cdsRelaFilesFileName.Value);
- ViewNode.Data := Pointer(cdsRelaFilesID.Value);
- end;
- end;
- cdsRelaFiles.Next;
- end;
- finally
- cdsRelaFiles.Filtered := False;
- FIsLoading := False;
- end;
- end;
- if FFeeParent.ChildCount > 0 then
- zgRelaFiles.Selection.Bounds := Rect(2, 2, 2, 2)
- else
- zgRelaFiles.Selection.Bounds := Rect(2, 1, 2, 1);
- zgRelaFiles.TopLeftCoord := Point(1, 1);
- if staBuildProjects.IDTree.Selected <> nil then
- begin
- if TScProjManagerTreeNode(staBuildProjects.IDTree.Selected).IsBuildProj then
- begin
- jpcPropties.ActivePage := jpcProptiesBuildProject;
- jpcBuildProjectProperties.ActivePage := jpcBuildProjectPropertiesRelaFiles;
- pnlFiles.Visible := True;
- RefreshBuildProjectPropertyView(ABuildProjectID);
- end
- else if TScProjManagerTreeNode(staBuildProjects.IDTree.Selected).IsTender then
- begin
- jpcPropties.ActivePage := jpcProptiesTender;
- pnlFiles.Visible := True;
- end
- else
- pnlFiles.Visible := False;
- end
- else
- pnlFiles.Visible := False;
- iProgressiveType := ProjectManager.GetProgressiveType(ABuildProjectID);
- case iProgressiveType of
- gmAdd: cbbGatherOtherFee.ItemIndex := 1;
- gmCalculate: cbbGatherOtherFee.ItemIndex := 0;
- else
- cbbGatherOtherFee.ItemIndex := -1;
- end;
- cbbProgressiveFile.ItemIndex := -1;
- iSiteConstructType := ProjectManager.GetSiteConstructType(ABuildProjectID);
- case iSiteConstructType of
- gmAdd: cbbSiteConstructType.ItemIndex := 1;
- gmCalculate: cbbSiteConstructType.ItemIndex := 0;
- else
- cbbSiteConstructType.ItemIndex := -1;
- end;
- cbbProgressiveFile.ItemIndex := -1;
- iID := ProjectManager.GetProgressiveFileID(ABuildProjectID);
- for I := 0 to cbbProgressiveFile.Items.Count - 1 do
- begin
- if iID = Integer(cbbProgressiveFile.Items.Objects[I]) then
- begin
- cbbProgressiveFile.ItemIndex := I;
- Break;
- end;
- end;
- edtGatherCoe.OnChange := nil;
- try
- edtGatherCoe.Text := FloatToStr(ProjectManager.GetProgressiveCoe(ABuildProjectID));
- finally
- edtGatherCoe.OnChange := edtGatherCoeChange;
- end;
- end;
- function TScfrmBigProjManage.GetCurrentFullBuildProjectName: string;
- begin
- Result := ProjectManager.CompleteBuildProjName(CurBuildProjID);
- end;
- procedure TScfrmBigProjManage.zgBuildProjectsCellCanEdit(Sender: TObject;
- const ACoord: TPoint; var Allow: Boolean);
- var
- vNode: TScProjManagerTreeNode;
- X: Integer;
- begin
- X := ACoord.X - zgBuildProjects.FixedColCount;
- if (X = staBuildProjects.ColumnIndex('Author')) or
- (X = staBuildProjects.ColumnIndex('Auditor')) or
- (X = staBuildProjects.ColumnIndex('Principal')) or
- (X = staBuildProjects.ColumnIndex('EditDate')) then
- begin
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Items[ACoord.Y - zgBuildProjects.FixedRowCount]);
- Allow := vNode.IsBuildProj;
- end;
- end;
- procedure TScfrmBigProjManage.zgBuildProjectsShowHint(var HintStr: String;
- var CanShow: Boolean; var HintInfo: THintInfo; const ACoord: TPoint);
- var
- vCell: TZjCell;
- vNode: TsdIDTreeNode;
- iLevelWidth: Integer;
- rText: TRect;
- procedure CalcTextRect(var R: TRect);
- var
- DC: HDC;
- iTextHeight: Integer;
- begin
- DC := CreateCompatibleDC(0);
- try
- SelectObject(DC, vCell.Font.Handle);
- iTextHeight := DrawText(DC, PChar(vCell.Text), Length(vCell.Text), R, DT_SINGLELINE or DT_VCenter
- or DT_NOCLIP or DT_CALCRECT);
- finally
- DeleteDC(DC);
- end;
- end;
- begin
- if (ACoord.Y < 1) and (ACoord.X <> 1) then Exit;
-
- vCell := zgBuildProjects.Cells[ACoord.X, ACoord.Y];
- with HintInfo do
- begin
- vNode := staBuildProjects.IDTree.Items[ACoord.Y - 1];
- if not Assigned(vNode) then Exit;
- iLevelWidth := (vNode.Level + 1) * 20 + 16;
- rText := CursorRect;
- CalcTextRect(rText);
- if (rText.Right - rText.Left + iLevelWidth > CursorRect.Right - CursorRect.Left) or
- (rText.Right > ClientWidth) then
- begin
- CanShow := True;
- HintStr := vCell.Text;
- GetCursorPos(HintPos);
- end;
- end;
- end;
- procedure TScfrmBigProjManage.actnNewSubFolderExecute(Sender: TObject);
- var
- strName: string;
- vParent, vFolder: TScProjManagerTreeNode;
- begin
- if ScInputQuery('新建文件夹', '请输入文件夹名称', strName, False, True) then
- begin
- strName := Trim(strName);
- if strName = '' then
- begin
- MessageHint('文件夹名称不可为空。');
- Exit;
- end;
- vParent := nil;
- if Assigned(staBuildProjects.IDTree.Selected) then
- vParent := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- vFolder := FManageProjects.FindManagerNode(vParent, strName);
- if vFolder <> nil then
- MessageHint(0, Format('存在同名建设项目或者文件夹[%s]。', [strName]))
- else
- vFolder := FManageProjects.AddBuildProjectFolder(vParent, strName);
- end;
- end;
- procedure TScfrmBigProjManage.actnNewSubFolderUpdate(Sender: TObject);
- var
- vNode: TScProjManagerTreeNode;
- begin
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- TAction(Sender).Enabled := TScMainForm(Application.MainForm).IsManageView
- and Assigned(vNode) and vNode.IsFolder;
- end;
- procedure TScfrmBigProjManage.SetShowFiles(const Value: Boolean);
- begin
- pnlFiles.Visible := Value;
- Splitter1.Visible := Value;
- end;
- function TScfrmBigProjManage.GetShowFiles: Boolean;
- begin
- Result := pnlFiles.Visible;
- end;
- procedure TScfrmBigProjManage.zgBuildProjectsMouseDown(Sender: TObject;
- Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
- var
- vNode: TScProjManagerTreeNode;
- begin
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if (zgBuildProjects.CurCol = 1) and (ssDouble in Shift) and (Button = mbLeft) and Assigned(vNode) and vNode.IsTender then
- begin
- {$IFDEF _ScExportOnly}
- MessageHint('请使用软件锁版本,该版本无法打开项目。');
- {$ELSE}
- TScMainForm(Application.MainForm).OpenFile(vNode.Rec.FileName.AsString);
- {$ENDIF}
- end;
- if (zgBuildProjects.CurCol = 1) and
- (Button = mbRight) and (ssCtrl in Shift) and (ssAlt in Shift) and (ssShift in Shift)
- and Assigned(vNode) and vNode.IsTender then
- ExportCurrentProjectFile(False);
- end;
- procedure TScfrmBigProjManage.actnNewFolderUpdate(Sender: TObject);
- var
- vNode: TScProjManagerTreeNode;
- begin
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- TAction(Sender).Enabled := TScMainForm(Application.MainForm).IsManageView
- and (not(Assigned(vNode) and vNode.IsTender));
- end;
- procedure TScfrmBigProjManage.zgBuildProjectsCellGetColor(Sender: TObject;
- ACoord: TPoint; var AColor: TColor);
- begin
- if (ACoord.Y = zgBuildProjects.CurRow) and Assigned(staBuildProjects.DataView.Current) and
- IsStaticBillsFile(staBuildProjects.DataView.Current.ValueByName(SFileName).AsString) then
- AColor := $66CC99;
- end;
- procedure TScfrmBigProjManage.actnExportUpdate(Sender: TObject);
- var
- vNode: TScProjManagerTreeNode;
- begin
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- TAction(Sender).Enabled := TScMainForm(Application.MainForm).IsManageView
- and Assigned(vNode) and (not vNode.IsFolder);
- end;
- procedure TScfrmBigProjManage.actnExportExecute(Sender: TObject);
- procedure ExportBuildProject;
- var
- strFile, sPath, sFullFile, sN: string;
- begin
- sdExport.Filter := GetDialogExtString(dtBuildProject);
- strFile := GetCurrentBPName;
- sFullFile := '';
- FixFileExt(strFile, SBuildProjectFileExt);
- // 配置文件中的OutputPath有时是绝对路径有时是相对路径, 悲剧啊
- // OutputPath=D:\Program Files\纵横软件\广东公路造价编审系统(标准化2011)网络版\导出文件\
- // OutputPath=导出文件\
- // if Pos(':\', ConfigInfo.OutputPath) > 0 then
- // sPath := ConfigInfo.OutputPath
- // else
- // sPath := ExtractFilePath(Application.ExeName) + ConfigInfo.OutputPath;
- sPath := GetCurrentDir + '\';
- // 是程序目录则定位到导出文件目录
- if SameText(sPath, AppPath) then
- begin
- if Pos(':\', ConfigInfo.OutputPath) > 0 then
- sPath := ConfigInfo.OutputPath
- else
- sPath := AppPath + ConfigInfo.OutputPath;
- end;
- sFullFile := sPath + strFile;
- // 检查长度,超过255字符处理为“导出文件”路径
- if Length(sFullFile) > 255 then
- begin
- if Pos(':\', ConfigInfo.OutputPath) > 0 then
- sPath := ConfigInfo.OutputPath
- else
- sPath := AppPath + ConfigInfo.OutputPath;
- sFullFile := sPath + strFile;
- end;
- if not DirectoryExists(sPath) then
- ForceDirectories(sPath);
- sdExport.FileName := sFullFile;
- if sdExport.Execute then
- begin
- sN := ExtractFileName(sdExport.FileName);
- strFile := sdExport.FileName;
- if HasSpecChars(sN) then
- begin
- Application.MessageBox('保存失败:文件名中包含特殊字符,请重试!', '系统提醒', MB_OK + MB_ICONWARNING);
- Exit;
- end;
- FixFileExt(strFile, SBuildProjectFileExt);
- // 检查长度,超过255字符提示
- if Length(strFile) > 255 then
- begin
- SetCurrentDir(sPath);
- MessageHint('导出文件路径太长,超过系统限制。请重新选择完整路径较短的文件夹。');
- Exit;
- end;
- ExportCurBuildProject(strFile);
- if not VerifySBP(GetCurrentFullBuildProjectName, strFile) then
- begin
- ExportCurBuildProject(strFile);
- if not VerifySBP(GetCurrentFullBuildProjectName, strFile) then
- raise EManageProjects.Create('导出文件出现错误,请更换导出位置再次尝试。如仍然失败请联系纵横客服。');
- end;
- end;
- end;
- procedure ExportTender;
- var
- vTender, vBuildProj: TScProjManagerTreeNode;
- bIsBills, bIsFixed: Boolean;
- strFile, strAlias, strBPName, strBPFullName, strSourceFile, sPath, strExt, sFullFile: string;
- begin
- vTender := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if Assigned(vTender) then
- vBuildProj := TScProjManagerTreeNode(vTender.Parent)
- else
- vBuildProj := nil;
- if not Assigned(vTender) or not vTender.IsTender then Exit;
- if not Assigned(vBuildProj) or not vBuildProj.IsBuildProj then Exit;
- strAlias := vTender.Rec.Name.AsString;
- strSourceFile := vTender.Rec.FileName.AsString;
- strFile := strAlias;
- strBPName := vBuildProj.Rec.Name.AsString;
- strBPFullName := ProjectManager.CompleteBuildProjName(vBuildProj.ID);
- bIsBills := IsSmartCostBillsFile(strSourceFile);
- bIsFixed := IsStaticBillsFile(strSourceFile);
- // 固化清单因以前概念不清和设计缺陷(固化清单本应从属于招投标,但现在无论是标段类型还是文件头,固化清单都和招投标、概预算同级),
- // 文件头分不开招投标和概预算,现全部当作招投标导出。
- if bIsBills or bIsFixed then
- begin
- sdExport.Filter := GetDialogExtString(dtBillsX);
- strExt := SBillsFileXExt;
- end
- else
- begin
- sdExport.Filter := GetDialogExtString(dtBudgetX);
- strExt := SBudgetFileXExt;
- end;
- FixFileExt(strFile, strExt);
- // if Pos(':\', ConfigInfo.OutputPath) > 0 then
- // sPath := ConfigInfo.OutputPath
- // else
- // sPath := ExtractFilePath(Application.ExeName) + ConfigInfo.OutputPath;
- //
- // sPath := sPath + strBPName + '\';
- sPath := GetCurrentDir + '\';
- // 是程序目录则定位到导出文件\建设项目目录
- if SameText(sPath, AppPath) then
- begin
- if Pos(':\', ConfigInfo.OutputPath) > 0 then
- sPath := ConfigInfo.OutputPath
- else
- sPath := AppPath + ConfigInfo.OutputPath;
- sPath := sPath + strBPName + '\';
- end;
- sFullFile := sPath + strFile;
- // 检查长度,超过255字符处理为“导出文件”路径
- if Length(sFullFile) > 255 then
- begin
- if Pos(':\', ConfigInfo.OutputPath) > 0 then
- sPath := ConfigInfo.OutputPath
- else
- sPath := AppPath + ConfigInfo.OutputPath;
- sFullFile := sPath + strFile;
- end;
- if not DirectoryExists(sPath) then
- ForceDirectories(sPath);
- sdExport.FileName := sFullFile;
- if sdExport.Execute then
- begin
- strFile := sdExport.FileName;
- FixFileExt(strFile, strExt);
- // 检查长度,超过255字符提示
- if Length(sdExport.FileName) > 255 then
- begin
- // 恢复原当前路径
- SetCurrentDir(sPath);
- MessageHint('导出文件路径太长,超过系统限制。请重新选择完整路径较短的文件夹。');
- Exit;
- end;
-
- ExportBudgetProject(vTender.ID, strBPName, strAlias, strSourceFile, strFile);
- if not VerifySBP(strBPFullName, strFile) then
- begin
- ExportBudgetProject(vTender.ID, strBPName, strAlias, strSourceFile, strFile);
- if not VerifySBP(strBPFullName, strFile) then
- raise EManageProjects.Create('导出文件出现错误,请更换导出位置再次尝试。如仍然失败请联系纵横客服。');
- end;
- end;
- end;
- var
- vNode: TScProjManagerTreeNode;
- begin
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if vNode.IsBuildProj then
- begin
- // 网络版超过20个建设项目则禁止导入导出建设项目
- // {$IF DEFINED(_ScOnline) AND NOT DEFINED(_ScOnlinePro)}
- // if ProjectManager.BuildProjectCount > MaxBuildProjectCountOnline then
- // begin
- // MessageHint(Format('您创建的建设项目已超%d个,请联系我们客服人员,服务热线:0756-3850888。', [MaxBuildProjectCountOnline]));
- // Exit;
- // end;
- // {$IFEND}
- ExportBuildProject;
- end
- else if vNode.IsTender then
- ExportTender
- else
- raise Exception.Create('当前选中节点,非建设项目或标段,不支持导出。');
- end;
- procedure TScfrmBigProjManage.RefreshInfoView;
- var
- vNode: TScProjManagerTreeNode;
- begin
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- pnlFiles.Visible := Assigned(vNode) and not vNode.IsFolder;
- Splitter1.Visible := pnlFiles.Visible;
- if Assigned(vNode) and vNode.IsTender then
- jpcPropties.ActivePage := jpcProptiesTender
- else if Assigned(vNode) and vNode.IsBuildProj then
- begin
- jpcPropties.ActivePage := jpcProptiesBuildProject;
- jpcBuildProjectProperties.ActivePage := jpcBuildProjectPropertiesRelaFiles;
- end;
- if Assigned(vNode) and vNode.IsTender then
- tbExport.DropdownMenu := ppmExportProject
- else
- tbExport.DropdownMenu := nil;
- {if Assigned(vNode) and not vNode.IsFolder then
- tbImport.DropdownMenu := pmImport
- else
- tbImport.DropdownMenu := nil;}
- if Assigned(vNode) then
- begin
- if vNode.IsBuildProj then
- RefreshProjectView(vNode.ID)
- else if vNode.IsTender then
- RefreshPropertyView;
- end;
- end;
- procedure TScfrmBigProjManage.actnImportExecute(Sender: TObject);
- var
- I: Integer;
- vNode, ProjItem: TScProjManagerTreeNode;
- sFilter, sExt, sName: string;
- begin
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if not Assigned(vNode) then Exit;
- // 设置文件过滤
- odImport.Filter := 'SmartCost文件(*' + SBuildProjectFileExt +
- ';*' + SBillsFileXExt +
- ';*' + SBillsFileExt +
- ';*' + SBudgetFileXExt +
- ';*' + SBudgetFileExt +
- ';*' + SBackupFileExt +
- ')|*' + SBuildProjectFileExt +
- ';*' + SBillsFileXExt +
- ';*' + SBillsFileExt +
- ';*' + SBudgetFileXExt +
- ';*' + SBudgetFileExt +
- ';*' + SBackupFileExt;
- // 专业版exe
- // 广东招投标版要可以导入三级清单(smb)
- {$IF (not Defined(_ScBills)) and (not Defined(_ScBudget)) and (not Defined(_ScGuangDong_Bills)) and (not Defined(_ScGuangDong_Budget))}
- if DogIsBillsOnly then
- begin
- if not _IsGuangDong then
- odImport.Filter := 'SmartCost文件(*' + SBuildProjectFileExt +
- ';*' + SBillsFileXExt +
- ';*' + SBillsFileExt +
- ';*' + SBackupFileExt +
- ')|*' + SBuildProjectFileExt +
- ';*' + SBillsFileXExt +
- ';*' + SBillsFileExt +
- ';*' + SBackupFileExt
- end
- else if DogIsBudgetOnly then
- odImport.Filter := 'SmartCost文件(*' + SBuildProjectFileExt +
- ';*' + SBudgetFileXExt +
- ';*' + SBudgetFileExt +
- ';*' + SBackupFileExt +
- ')|*' + SBuildProjectFileExt +
- ';*' + SBudgetFileXExt +
- ';*' + SBudgetFileExt +
- ';*' + SBackupFileExt;
- {$IFEND}
- {$IF DEFINED(_ScBudget) OR DEFINED(_ScGuangDong_Budget)}
- odImport.Filter := 'SmartCost文件(*' + SBuildProjectFileExt +
- ';*' + SBudgetFileXExt +
- ';*' + SBudgetFileExt +
- ';*' + SBackupFileExt +
- ')|*' + SBuildProjectFileExt +
- ';*' + SBudgetFileXExt +
- ';*' + SBudgetFileExt +
- ';*' + SBackupFileExt;
- {$IFEND}
- {$IF DEFINED(_ScBills)}
- odImport.Filter := 'SmartCost文件(*' + SBuildProjectFileExt +
- ';*' + SBillsFileXExt +
- ';*' + SBillsFileExt +
- ';*' + SBackupFileExt +
- ')|*' + SBuildProjectFileExt +
- ';*' + SBillsFileXExt +
- ';*' + SBillsFileExt +
- ';*' + SBackupFileExt;
- {$IFEND}
- // 广东招投标版要可以导入三级清单(smb)
- {$IF DEFINED(_ScGuangDong_Bills)}
- odImport.Filter := 'SmartCost文件(*' + SBuildProjectFileExt +
- ';*' + SBillsFileXExt +
- ';*' + SBillsFileExt +
- ';*' + SBudgetFileXExt +
- ';*' + SBudgetFileExt +
- ';*' + SBackupFileExt +
- ')|*' + SBuildProjectFileExt +
- ';*' + SBillsFileXExt +
- ';*' + SBillsFileExt +
- ';*' + SBudgetFileXExt +
- ';*' + SBudgetFileExt +
- ';*' + SBackupFileExt;
- {$IFEND}
- if odImport.Execute then
- begin
- sExt := ExtractFileExt(odImport.FileName);
- if SameText(sExt, SBuildProjectFileExt) then
- begin
- // 网络版超过20个建设项目则禁止导入导出建设项目
- // {$IF DEFINED(_ScOnline) AND NOT DEFINED(_ScOnlinePro)}
- // if ProjectManager.BuildProjectCount > MaxBuildProjectCountOnline then
- // begin
- // MessageHint(Format('您创建的建设项目已超%d个,请联系我们客服人员,服务热线:0756-3850888。', [MaxBuildProjectCountOnline]));
- // Exit;
- // end;
- // {$IFEND}
- while vNode.IsTender do
- begin
- vNode := TScProjManagerTreeNode(vNode.Parent);
- staBuildProjects.DataView.LocateInControl(vNode.Rec);
- end;
- for I := 0 to odImport.Files.Count - 1 do
- ImportBP(odImport.Files[I]);
- end
- else
- begin
- sName := ExtractFileNameWithoutExt(odImport.FileName);
- if vNode.IsFolder then
- begin
- // 网络版超过20个建设项目则禁止导入导出建设项目
- // {$IF DEFINED(_ScOnline) AND NOT DEFINED(_ScOnlinePro)}
- // if ProjectManager.BuildProjectCount > MaxBuildProjectCountOnline then
- // begin
- // MessageHint(Format('您创建的建设项目已超%d个,请联系我们客服人员,服务热线:0756-3850888。', [MaxBuildProjectCountOnline]));
- // Exit;
- // end;
- // {$IFEND}
- ProjItem := FManageProjects.FindBuildProjectWithSelect(sName);
- if Assigned(ProjItem) then
- begin
- MessageWarning(Format('存在同名建设项目[%s],无法新建建设项目导入该分段。', [sName]));
- Exit;
- end
- else
- ProjItem := FManageProjects.AddBuildProjectWithSelect(sName, False);
- staBuildProjects.DataView.LocateInControl(ProjItem.Rec);
- end;
- for I := 0 to odImport.Files.Count - 1 do
- ImportBudgetProject(odImport.Files[I]);
- end;
- FManageProjects.Save;
- end;
- end;
- procedure TScfrmBigProjManage.actnImportBPExecute(Sender: TObject);
- var
- i: Integer;
- begin
- // 网络版超过20个建设项目则禁止导入导出建设项目
- // {$IF DEFINED(_ScOnline) AND NOT DEFINED(_ScOnlinePro)}
- // if ProjectManager.BuildProjectCount > MaxBuildProjectCountOnline then
- // begin
- // MessageHint(Format('您创建的建设项目已超%d个,请联系我们客服人员,服务热线:0756-3850888。', [MaxBuildProjectCountOnline]));
- // Exit;
- // end;
- // {$IFEND}
- odImport.Filter := GetDialogExtString(dtBuildProject);
- odImport.Options := odImport.Options + [ofAllowMultiSelect];
- if odImport.Execute then
- begin
- for i := 0 to odImport.Files.Count - 1 do
- begin
- ImportBP(odImport.Files[i]);
- end;
- end;
- end;
- procedure TScfrmBigProjManage.actnNewTenderUpdate(Sender: TObject);
- var
- vNode: TScProjManagerTreeNode;
- begin
- {$IFDEF _ScExportOnly}
- TAction(Sender).Enabled := False;
- Exit;
- {$ENDIF}
- {$IFDEF _ScCrack}
- if _IsFixedBills then
- TAction(Sender).Enabled := False
- else
- begin
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- TAction(Sender).Enabled := TScMainForm(Application.MainForm).IsManageView
- and Assigned(vNode) and (not vNode.IsFolder);
- end;
- {$ELSE}
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- TAction(Sender).Enabled := TScMainForm(Application.MainForm).IsManageView
- and Assigned(vNode) and (not vNode.IsFolder);
- {$ENDIF}
- end;
- procedure TScfrmBigProjManage.actnExportBPExecute(Sender: TObject);
- procedure ExportBuildProject;
- var
- strFile, sPath, sN: string;
- begin
- sdExport.Filter := GetDialogExtString(dtBuildProject);
- strFile := GetCurrentBPName;
- FixFileExt(strFile, SBuildProjectFileExt);
- // 配置文件中的OutputPath有时是绝对路径有时是相对路径, 悲剧啊
- // OutputPath=D:\Program Files\纵横软件\广东公路造价编审系统(标准化2011)网络版\导出文件\
- // OutputPath=导出文件\
- if Pos(':\', ConfigInfo.OutputPath) > 0 then
- sPath := ConfigInfo.OutputPath
- else
- sPath := ExtractFilePath(Application.ExeName) + ConfigInfo.OutputPath;
- strFile := sPath + strFile;
- if not DirectoryExists(sPath) then
- ForceDirectories(sPath);
- sdExport.FileName := strFile;
- if sdExport.Execute then
- begin
- sN := ExtractFileName(sdExport.FileName);
- if HasSpecChars(sN) then
- begin
- Application.MessageBox('保存失败:文件名中包含特殊字符,请重试!', '系统提醒', MB_OK + MB_ICONWARNING);
- Exit;
- end;
- ExportCurBuildProject(sdExport.FileName);
- if not VerifySBP(GetCurrentFullBuildProjectName, sdExport.FileName) then
- begin
- ExportCurBuildProject(sdExport.FileName);
- if not VerifySBP(GetCurrentFullBuildProjectName, sdExport.FileName) then
- raise EManageProjects.Create('导出文件出现错误,请更换导出位置再次尝试。如仍然失败请联系纵横客服。');
- end;
- end;
- end;
- var
- vNode: TScProjManagerTreeNode;
- begin
- // {$IF DEFINED(_ScOnline) AND NOT DEFINED(_ScOnlinePro)}
- // if ProjectManager.BuildProjectCount > 20 then
- // begin
- // MessageHint('您创建的建设项目已超20个,请联系我们客服人员,服务热线:0756-3850888。');
- // Exit;
- // end;
- // {$IFEND}
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if vNode.IsBuildProj then
- ExportBuildProject
- else
- raise Exception.Create('当前选中节点,非建设项目。');
- end;
- procedure TScfrmBigProjManage.actnExportBPUpdate(Sender: TObject);
- var
- vNode: TScProjManagerTreeNode;
- begin
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- TAction(Sender).Enabled := TScMainForm(Application.MainForm).IsManageView
- and Assigned(vNode) and vNode.IsBuildProj;
- end;
- procedure TScfrmBigProjManage.ExpandTo(AType: TBuildProjExpandType);
- function CheckChildHasFolder(ANode: TScProjManagerTreeNode): Boolean;
- var
- i: Integer;
- begin
- Result := False;
- if ANode.IsFolder then
- begin
- for i := 0 to ANode.ChildCount - 1 do
- begin
- if TScProjManagerTreeNode(ANode.ChildNodes[i]).IsFolder then
- begin
- Result := True;
- Break;
- end;
- end;
- end;
- end;
- function CheckChildHasBuildProj(ANode: TScProjManagerTreeNode): Boolean;
- var
- i: Integer;
- begin
- Result := False;
- if ANode.IsFolder then
- begin
- for i := 0 to ANode.ChildCount - 1 do
- begin
- if TScProjManagerTreeNode(ANode.ChildNodes[i]).IsBuildProj then
- begin
- Result := True;
- Break;
- end;
- end;
- end;
- end;
- procedure ExpandToFolder;
- var
- i: Integer;
- vNode: TScProjManagerTreeNode;
- begin
- for i := 0 to staBuildProjects.IDTree.Count - 1 do
- begin
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Items[i]);
- if vNode.IsFolder and CheckChildHasFolder(vNode) then
- vNode.Expanded := True
- else if vNode.HasChildren then
- vNode.Expanded := False;
- end;
- end;
- procedure ExpandToBuildProj;
- var
- i: Integer;
- vNode: TScProjManagerTreeNode;
- begin
- for i := 0 to staBuildProjects.IDTree.Count - 1 do
- begin
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Items[i]);
- if vNode.IsFolder and CheckChildHasBuildProj(vNode) then
- vNode.Expanded := True
- else if vNode.HasChildren then
- vNode.Expanded := False;
- end;
- end;
- procedure ExpandAll;
- begin
- staBuildProjects.IDTree.ExpandLevel := 20;
- end;
- begin
- case AType of
- //bpet1, bpet2, bpet3: staBuildProjects.IDTree.ExpandLevel := Integer(AType);
- bpetFolder: ExpandToFolder;
- bpetBuildProj: ExpandToBuildProj;
- bpetTender: ExpandAll;
- end;
- end;
- procedure TScfrmBigProjManage.cbExpandToChange(Sender: TObject);
- begin
- ExpandTo(TBuildProjExpandType(cbExpandTo.ItemIndex));
- ConfigInfo.BuildProjExpandLevel := cbExpandTo.ItemIndex;
- end;
- procedure TScfrmBigProjManage.actnEditBPNameUpdate(Sender: TObject);
- begin
- TAction(Sender).Enabled := TScMainForm(Application.MainForm).IsManageView and (zgBuildProjects.CurCol = 1);
- end;
- procedure TScfrmBigProjManage.zgPropertiesCanEditAcceptKey(var AKey: Char;
- var Accept: Boolean);
- const
- PegCharSet: TSysCharSet = ['.', '+', '-', '0'..'9', 'A'..'Z', 'a'..'z'];
- FloatCharSet: TSysCharSet = ['.', '+', '-', '0'..'9', 'E', 'e'];
- begin
- if zgProperties.CurCol = 1 then
- begin
- if zgProperties.CurRow in [18, 19] then
- begin
- if not (AKey in PegCharSet) then
- Accept := False;
- end
- else if zgProperties.CurRow in [20, 21] then
- begin
- if not (AKey in PegCharSet) then
- Accept := False;
- end;
- end;
- end;
- procedure TScfrmBigProjManage.actnOwnerImportUpdate(Sender: TObject);
- var
- vNode: TScProjManagerTreeNode;
- begin
- {$IFDEF _ScCrack}
- if _IsFixedBills then
- TAction(Sender).Enabled := False
- else
- begin
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- TAction(Sender).Enabled := TScMainForm(Application.MainForm).IsManageView
- and Assigned(vNode) and (not vNode.IsFolder);
- end;
- {$ELSE}
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- TAction(Sender).Enabled := TScMainForm(Application.MainForm).IsManageView
- and Assigned(vNode) and (not vNode.IsFolder);
- {$ENDIF}
- end;
- procedure TScfrmBigProjManage.ExportCurrentRelaFile(ASave: Boolean);
- var
- iID, i: Integer;
- Node: TZjGridTreeNode;
- strFile, strNewFile, strAlias, strBPName, sAliasTemp, sPath: string;
- begin
- Node := ztRelaFiles.RowItems[zgRelaFiles.CurRow];
- if (Node = nil) then
- Exit;
- iID := Integer(Node.Data);
- with ProjectManager do
- begin
- cdsRelaFiles.Filtered := False;
- if cdsRelaFiles.Locate('ID', iID, []) then
- begin
- strFile := ScExpandFileName(cdsRelaFilesFileName.AsString);
- strAlias := cdsRelaFilesName.AsString;
- sAliasTemp := strAlias;
- end;
- end;
- strBPName := staBuildProjects.IDTree.Selected.Rec.ValueByName('Name').AsString;
- if Pos(':\', ConfigInfo.OutputPath) > 0 then
- sPath := ConfigInfo.OutputPath
- else
- sPath := ExtractFilePath(Application.ExeName) + ConfigInfo.OutputPath;
- sPath := sPath + strBPName + '\';
- if not DirectoryExists(sPath) then
- ForceDirectories(sPath);
- if Node.Parent = FFeeParent then
- begin
- sdExport.Filter := GetDialogExtString(dtFee);
- FixFileExt(strAlias, SFeeRateFileExt);
- sdExport.FileName := sPath + strAlias;
- end
- else if Node.Parent = FPriceParent then
- begin
- sdExport.Filter := GetDialogExtString(dtPrice);
- FixFileExt(strAlias, SUnitPriceFileExt);
- sdExport.FileName := sPath + strAlias;
- end;
- if sdExport.Execute then
- begin
- // chenshilong, 2011-02-22 17:35:46 导出前先强制保存
- if ASave then
- for i := 0 to ProjList.Count - 1 do
- begin
- if SameText(ProjList.ProjData[i].Alias, sAliasTemp) then
- begin
- ProjList.ProjData[i].Save;
- Break;
- end;
- end;
- strNewFile := sdExport.FileName;
- if Node.Parent = FFeeParent then
- FixFileExt(strNewFile, SFeeRateFileExt)
- else if Node.Parent = FPriceParent then
- FixFileExt(strNewFile, SUnitPriceFileExt);
- CopyFile(PChar(strFile), PChar(strNewFile), False);
- strAlias := ExtractFileNameWithoutExt(strNewFile);
- FileArchiverManager.Alias[strNewFile] := strAlias;
- end;
- end;
- procedure TScfrmBigProjManage.zgRelaFilesMouseDown(Sender: TObject;
- Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
- begin
- if (Button = mbRight) and (ssCtrl in Shift) and (ssAlt in Shift) and (ssShift in Shift) then
- ExportCurrentRelaFile(False);
- end;
- procedure TScfrmBigProjManage.ExportCurrentProjectFile(ASave: Boolean);
- var
- vTender, vBuildProj: TScProjManagerTreeNode;
- bIsBills, bIsFixed: Boolean;
- strFile, strAlias, strBPName, strSourceFile, sPath, strExt: string;
- I: Integer;
- begin
- vTender := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if Assigned(vTender) then
- vBuildProj := TScProjManagerTreeNode(vTender.Parent)
- else
- vBuildProj := nil;
- if not Assigned(vTender) or not vTender.IsTender then Exit;
- if not Assigned(vBuildProj) or not vBuildProj.IsBuildProj then Exit;
- strAlias := vTender.Rec.Name.AsString;
- strSourceFile := vTender.Rec.FileName.AsString;
- strFile := strAlias;
- strBPName := vBuildProj.Rec.Name.AsString;
- bIsBills := IsSmartCostBillsFile(strSourceFile);
- bIsFixed := IsStaticBillsFile(strSourceFile);
- // 固化清单因以前概念不清和设计缺陷(固化清单本应从属于招投标,但现在无论是标段类型还是文件头,固化清单都和招投标、概预算同级),
- // 文件头分不开招投标和概预算,现全部当作招投标导出。
- if bIsBills or bIsFixed then
- begin
- sdExport.Filter := GetDialogExtString(dtBills);
- strExt := SBillsFileExt;
- end
- else
- begin
- sdExport.Filter := GetDialogExtString(dtBudget);
- strExt := SBudgetFileExt;
- end;
- FixFileExt(strFile, strExt);
- // if Pos(':\', ConfigInfo.OutputPath) > 0 then
- // sPath := ConfigInfo.OutputPath
- // else
- // sPath := ExtractFilePath(Application.ExeName) + ConfigInfo.OutputPath;
- // sPath := sPath + strBPName + '\';
- sPath := GetCurrentDir + '\';
- strFile := sPath + strFile;
- if not DirectoryExists(sPath) then
- ForceDirectories(sPath);
- sdExport.FileName := strFile;
- if sdExport.Execute then
- begin
- // Chenshilong, 2010-8-4 8:54:35 导出前保存先,单个保存,用Alias识别
- if ASave then
- for I := 0 to ProjList.Count - 1 do
- begin
- if SameText(ProjList.ProjData[i].FileName, strSourceFile) then
- begin
- ProjList.ProjData[i].Save;
- Break;
- end;
- end;
- strFile := sdExport.FileName;
- FixFileExt(strFile, strExt);
- if not CopyFile(PChar(strSourceFile), PChar(strFile), False) then
- begin
- MessageWarning('Copy file failed');
- Exit;
- end;
- strAlias := ExtractFileNameWithoutExt(strFile);
- FileArchiverManager.Alias[strFile] := strAlias;
- end;
- end;
- procedure TScfrmBigProjManage.SaveAsRelaFile(ABPID: Integer; AFileName, ANewName,
- AOldName: string; AType: Integer; ACheckExist: Boolean);
- var
- strFileType, strNewFile: string;
- begin
- if ACheckExist then
- begin
- if ProjectManager.RelaFileExists(ABPID, ANewName, AType) then
- begin
- strFileType := '';
- if AType = FileType_FeeFile then
- strFileType := '费率文件'
- else if AType = FileType_PriceFile then
- strFileType := '单价文件';
- MessageHint(Format('%s[%s]已存在,请手工检查数据是否正确。', [strFileType, ANewName]));
- Exit;
- end;
- end;
- strNewFile := ConfigInfo.NewGUIDFileName;
- if not CopyFile(PChar(AFileName), PChar(strNewFile), True) then
- begin
- MessageWarning('Can not copy file');
- Exit;
- end;
- FileArchiverManager.Alias[strNewFile] := ANewName;
- ProjectManager.AddRelaFile(strNewFile, ABPID, False);
- end;
- procedure TScfrmBigProjManage.SaveAsRelaFilesByProject(ABPID: Integer;
- AOldTenderNode, ANewTenderNode: TScProjManagerTreeNode);
- var
- iOldID, iNewID: Integer;
- strFile, strOldName, strNewName: string;
- OldPropRec, NewPropRec: TsdDataRecord;
- begin
- if (AOldTenderNode = nil) or (ANewTenderNode = nil) then
- Exit;
- iOldID := AOldTenderNode.ID;
- iNewID := ANewTenderNode.ID;
- OldPropRec := ProjectManager.PropertiesRec(iOldID);
- NewPropRec := ProjectManager.PropertiesRec(iNewID);
- strNewName := ANewTenderNode.Rec.Name.AsString;
- // 费率
- strOldName := OldPropRec.ValueByName('Value3').AsString;
- strFile := ProjectManager.GetProjectRelaFileName(iOldID, FileType_FeeFile);
- SaveAsRelaFile(ABPID, strFile, strNewName, strOldName, FileType_FeeFile, True);
- NewPropRec.ValueByName('Value3').AsString := strNewName;
- // 单价
- strOldName := OldPropRec.ValueByName('Value4').AsString;
- strFile := ProjectManager.GetProjectRelaFileName(iOldID, FileType_PriceFile);
- SaveAsRelaFile(ABPID, strFile, strNewName, strOldName, FileType_PriceFile, True);
- NewPropRec.ValueByName('Value4').AsString := strNewName;
- end;
- function TScfrmBigProjManage.CanSaveAsRelaFilesByProject(
- ATenderNode: TScProjManagerTreeNode): Boolean;
- var
- iID: Integer;
- strFile: string;
- PropRec: TsdDataRecord;
- begin
- Result := False;
- if ATenderNode = nil then
- Exit;
- iID := ATenderNode.ID;
- PropRec := ProjectManager.PropertiesRec(iID);
- // 费率
- strFile := ProjectManager.GetProjectRelaFileName(iID, FileType_FeeFile);
- if not FileExists(strFile) then Exit;
- // 单价
- strFile := ProjectManager.GetProjectRelaFileName(iID, FileType_PriceFile);
- if not FileExists(strFile) then Exit;
- Result := True;
- end;
- function TScfrmBigProjManage.GetSmartProjType: Integer;
- var vNode: TScProjManagerTreeNode;
- begin
- Result := -1;
- if staBuildProjects.IDTree.Count = 0 then Exit;
- vNode := FManageProjects.ManagerTree.Selected;
- if vNode.IsFolder then
- begin
- Exit;
- end
- else if vNode.IsBuildProj then
- begin
- if not vNode.HasChildren then Exit;
- vNode := TScProjManagerTreeNode(vNode.LastChild);
- Result := vNode.Rec.ProjectType.AsInteger;
- end
- else if vNode.IsTender then
- begin
- vNode := TScProjManagerTreeNode(vNode.Parent.LastChild);
- Result := vNode.Rec.ProjectType.AsInteger;
- end;
- end;
- procedure TScfrmBigProjManage.actnOwnerExportUpdate(Sender: TObject);
- begin
- {$IFDEF _ScCrack}
- if _IsFixedBills then
- TAction(Sender).Enabled := False
- else
- TAction(Sender).Enabled := True;
- {$ELSE}
- TAction(Sender).Enabled := True;
- {$ENDIF}
- end;
- procedure TScfrmBigProjManage.actnNewUpdate(Sender: TObject);
- begin
- {$IFDEF _ScExportOnly}
- TAction(Sender).Enabled := False;
- Exit;
- {$ENDIF}
- {$IFDEF _ScCrack}
- if _IsFixedBills then
- TAction(Sender).Enabled := False
- else
- TAction(Sender).Enabled := True;
- {$ELSE}
- TAction(Sender).Enabled := True;
- {$ENDIF}
- end;
- procedure TScfrmBigProjManage.actnImportUpdate(Sender: TObject);
- begin
- {$IFDEF _ScCrack}
- if _IsFixedBills then
- TAction(Sender).Enabled := False
- else
- TAction(Sender).Enabled := True;
- {$ELSE}
- TAction(Sender).Enabled := True;
- {$ENDIF}
- end;
- procedure TScfrmBigProjManage.tbtnTestClick(Sender: TObject);
- var
- vTender: TScProjManagerTreeNode;
- strFile: string;
- begin
- vTender := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if Assigned(vTender) and vTender.IsTender then
- begin
- strFile := ScExpandFileName(vTender.Rec.FileName.AsString);
- //TScMainForm(Application.MainForm).OpenSilent(strFile);
- end;
- end;
- procedure TScfrmBigProjManage.CalculateCurrentBP;
- var
- vNode: TScProjManagerTreeNode;
- begin
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if vNode.IsTender then
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.FindNode(vNode.ParentID));
- if Assigned(vNode) and vNode.IsBuildProj then
- begin
- Screen.Cursor := crHourGlass;
- try
- ProjectManager.CalculateBP(vNode);
- finally
- Screen.Cursor := crDefault;
- staBuildProjects.IDTree.SelectedIndex := vNode.MajorIndex;
- zgBuildProjects.Invalidate;
- end;
- end;
- end;
- function TScfrmBigProjManage.CanCalculateCurrentBP: Boolean;
- var
- vNode: TScProjManagerTreeNode;
- begin
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- Result := TScMainForm(Application.MainForm).IsManageView
- and Assigned(vNode) and vNode.IsBuildProj;
- end;
- procedure TScfrmBigProjManage.zgBuildProjectsGetCellText(Sender: TObject;
- const ACoord: TPoint; var Value: String; DisplayText: Boolean);
- var
- Col: Integer;
- begin
- Col := ACoord.X - zgBuildProjects.FixedColCount;
- if Col = staBuildProjects.VisibleCol('ProjectType') then
- begin
- if SameText(Value, '0') then
- Value := '';
- end;
- end;
- procedure TScfrmBigProjManage.zgProjectsByBPCellCanEdit(Sender: TObject;
- const ACoord: TPoint; var Allow: Boolean);
- begin
- Allow := ACoord.X = 1;
- end;
- procedure TScfrmBigProjManage.edtGatherCoeKeyPress(Sender: TObject;
- var Key: Char);
- begin
- if not ValidFloat(Key) then MessageBeep(ID_OK);
- end;
- procedure TScfrmBigProjManage.edtGatherCoeChange(Sender: TObject);
- var
- vNode: TScProjManagerTreeNode;
- fValue: Double;
- begin
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if vNode = nil then Exit;
- if not TryStrToFloat(edtGatherCoe.Text, fValue) then
- Exit;
- ProjectManager.ChangeNewProgressiveFee(vNode.ID);
- ProjectManager.SetProgressiveCoe(vNode.ID, fValue);
- end;
- procedure TScfrmBigProjManage.cbbGatherOtherFeeSelect(Sender: TObject);
- var
- vNode: TScProjManagerTreeNode;
- begin
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if vNode = nil then Exit;
- ProjectManager.ChangeNewProgressiveFee(vNode.ID);
- if cbbGatherOtherFee.ItemIndex = 0 then
- ProjectManager.SetProgressiveType(vNode.ID, gmCalculate)
- else if cbbGatherOtherFee.ItemIndex = 1 then
- ProjectManager.SetProgressiveType(vNode.ID, gmAdd);
- end;
- procedure TScfrmBigProjManage.cbbProgressiveFileSelect(Sender: TObject);
- var
- iFileID: Integer;
- vNode: TScProjManagerTreeNode;
- begin
- if cbbProgressiveFile.ItemIndex < 0 then
- Exit;
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if vNode = nil then Exit;
- iFileID := Integer(cbbProgressiveFile.Items.Objects[cbbProgressiveFile.ItemIndex]);
- ProjectManager.ChangeNewProgressiveFee(vNode.ID);
- ProjectManager.SetProgressiveFileID(vNode.ID, iFileID);
- ProjectManager.ClearExprsInGanSu34(vNode.ID);
- end;
- procedure TScfrmBigProjManage.actnCalculateBuildProjectUpdate(
- Sender: TObject);
- begin
- actnCalculateBuildProject.Enabled := CanCalculateCurrentBP;
- end;
- procedure TScfrmBigProjManage.actnCalculateBuildProjectExecute(
- Sender: TObject);
- begin
- CalculateCurrentBP;
- end;
- procedure TScfrmBigProjManage.cbbSiteConstructTypeSelect(Sender: TObject);
- var
- vNode: TScProjManagerTreeNode;
- begin
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if vNode = nil then Exit;
- ProjectManager.ChangeNewSiteConstruct(vNode.ID);
- if cbbSiteConstructType.ItemIndex = 0 then
- ProjectManager.SetSiteConstructType(vNode.ID, gmCalculate)
- else if cbbSiteConstructType.ItemIndex = 1 then
- ProjectManager.SetSiteConstructType(vNode.ID, gmAdd);
- end;
- function TScfrmBigProjManage.NeedBatchCalc: Boolean;
- var isGmCalc, hasMoreChildren: Boolean;
- iBuildID, iCount: Integer;
- vNode: TScProjManagerTreeNode;
- begin
- iBuildID := CurBuildProjID;
- vNode := TScProjManagerTreeNode(staBuildProjects.IDTree.FindNode(iBuildID));
- hasMoreChildren := (vNode.ChildCount > 1);
- isGmCalc := (ProjectManager.GetProgressiveType(iBuildID) = gmCalculate) or
- (ProjectManager.GetSiteConstructType(iBuildID) = gmCalculate);
- Result := hasMoreChildren and isGmCalc;
- end;
- procedure TScfrmBigProjManage.OpenAllProjectsOfCurBP(var AList: TList);
- var
- Tenders: TList;
- i: Integer;
- Rec: TsdDataRecord;
- projData: TScProjBaseData;
- begin
- CreateProgressForm(100, '后台打开项目>>>');
- AList.Clear;
- Tenders := TList.Create;
- try
- FManageProjects.LoadBuildProjectTenders(CurBuildProjID, Tenders);
- for i := 0 to Tenders.Count - 1 do
- begin
- AddProgressForm(10, Format('正在后台打开第 %d 个项目...', [i + 1]));
- Rec := TsdDataRecord(Tenders.Items[i]);
- if ProjList.IndexByName(Rec.ValueByName('FileName').AsString) = nil then
- begin
- projData := ProjList.AddProj(Rec.ValueByName('FileName').AsString);
- projData.CreateProject;
- projData.Project.OpenConnection;
- ProjData.Project.DoAfterOpenConnection;
- projData.Project.Open(oftOpen);
- end
- else
- projData := ProjList.IndexByName(Rec.ValueByName('FileName').AsString);
- AList.Add(projData.Project);
- end;
- finally
- Tenders.Free;
- end;
- end;
- procedure TScfrmBigProjManage.RefreshBuildProjectPropertyView(
- ABuildProjectID: Integer);
- var
- I, iIdx, iOffset, iRow: Integer;
- PPropNameMap: PScPropertyFieldNameMap;
- PropRec: TsdDataRecord;
- begin
- FIsPropLoading := True;
- try
- zgBPBasic.Clear;
- zgBPZhaoBiao.Clear;
- zgBPTouBiao.Clear;
- PropRec := ProjectManager.PropertiesRec(ABuildProjectID);
- if PropRec = nil then
- Exit;
- // 基本信息
- zgBPBasic.RowCount := zgBPBasic.FixedRowCount + 10;
- iOffset := 0;
- for I := 0 to 9 do
- begin
- iIdx := I + iOffset;
- PPropNameMap := @(BuildProjectFieldNameMaps[iIdx]);
- iRow := zgBPBasic.FixedRowCount + I;
- zgBPBasic.Cells[1, iRow].Text := PPropNameMap^.Caption;
- zgBPBasic.Cells[2, iRow].Text := ProjectManager.GetBuildProjectProperty(PropRec, PPropNameMap^.Name);
- zgBPBasic.Cells[2, iRow].Data := PPropNameMap;
- // 编制日期
- if SameText(PPropNameMap^.Name, SEditDate) then
- zgBPBasic.CellClass.Item[2, iRow] := TZjComboCell
- // 公路等级
- else if SameText(PPropNameMap^.Name, SRoadLevel) then
- zgBPBasic.CellClass.Item[2, iRow] := TZjComboCell;
- end;
- // 招标信息
- zgBPZhaoBiao.RowCount := zgBPZhaoBiao.FixedRowCount + 7;
- iOffset := 10;
- for I := 0 to 6 do
- begin
- iIdx := I + iOffset;
- PPropNameMap := @(BuildProjectFieldNameMaps[iIdx]);
- iRow := zgBPZhaoBiao.FixedRowCount + I;
- zgBPZhaoBiao.Cells[1, iRow].Text := PPropNameMap^.Caption;
- zgBPZhaoBiao.Cells[2, iRow].Text := ProjectManager.GetBuildProjectProperty(PropRec, PPropNameMap^.Name);
- zgBPZhaoBiao.Cells[2, iRow].Data := PPropNameMap;
- end;
- // 招标信息
- zgBPTouBiao.RowCount := zgBPTouBiao.FixedRowCount + 10;
- iOffset := 17;
- for I := 0 to 9 do
- begin
- iIdx := I + iOffset;
- PPropNameMap := @(BuildProjectFieldNameMaps[iIdx]);
- iRow := zgBPTouBiao.FixedRowCount + I;
- zgBPTouBiao.Cells[1, iRow].Text := PPropNameMap^.Caption;
- zgBPTouBiao.Cells[2, iRow].Text := ProjectManager.GetBuildProjectProperty(PropRec, PPropNameMap^.Name);
- zgBPTouBiao.Cells[2, iRow].Data := PPropNameMap;
- end;
- finally
- FIsPropLoading := False;
- end;
- end;
- procedure TScfrmBigProjManage.zgBPBasicCellCanEdit(Sender: TObject;
- const ACoord: TPoint; var Allow: Boolean);
- begin
- Allow := ACoord.X = 2;
- end;
- procedure TScfrmBigProjManage.zgBPZhaoBiaoCellCanEdit(Sender: TObject;
- const ACoord: TPoint; var Allow: Boolean);
- begin
- Allow := ACoord.X = 2;
- end;
- procedure TScfrmBigProjManage.zgBPTouBiaoCellCanEdit(Sender: TObject;
- const ACoord: TPoint; var Allow: Boolean);
- begin
- Allow := ACoord.X = 2;
- end;
- procedure TScfrmBigProjManage.zgBPBasicCellTextChanged(Sender: TObject;
- Col, Row: Integer);
- var
- vTender: TScProjManagerTreeNode;
- PPropNameMap: PScPropertyFieldNameMap;
- PropRec: TsdDataRecord;
- begin
- if FIsPropLoading then
- Exit;
- vTender := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if not Assigned(vTender) then
- Exit;
- PropRec := ProjectManager.PropertiesRec(vTender.ID);
- PPropNameMap := PScPropertyFieldNameMap(zgBPBasic.Cells[2, Row].Data);
- if PPropNameMap <> nil then
- PropRec.ValueByName(PPropNameMap^.Field).AsString := zgBPBasic.Cells[2, Row].Text;
- end;
- procedure TScfrmBigProjManage.zgBPBasicCellGetColor(Sender: TObject;
- ACoord: TPoint; var AColor: TColor);
- begin
- if ACoord.X = 1 then
- AColor := clBtnFace;
- end;
- procedure TScfrmBigProjManage.zgBPZhaoBiaoCellGetColor(Sender: TObject;
- ACoord: TPoint; var AColor: TColor);
- begin
- if ACoord.X = 1 then
- AColor := clBtnFace;
- end;
- procedure TScfrmBigProjManage.zgBPTouBiaoCellGetColor(Sender: TObject;
- ACoord: TPoint; var AColor: TColor);
- begin
- if ACoord.X = 1 then
- AColor := clBtnFace;
- end;
- procedure TScfrmBigProjManage.zgBPBasicGetCellEditor(Sender: TObject;
- ACoord: TPoint; var AControl: TWinControl);
- var
- PPropNameMap: PScPropertyFieldNameMap;
- begin
- if ACoord.X <> 2 then Exit;
- PPropNameMap := PScPropertyFieldNameMap(zgBPBasic.Cells[2, ACoord.Y].Data);
- if SameText(PPropNameMap^.Name, SEditDate) then
- AControl := dtpEditDate
- else if SameText(PPropNameMap^.Name, SRoadLevel) then
- begin
- cbbProperties.Clear;
- cbbProperties.Items.Add('高速公路');
- cbbProperties.Items.Add('一级公路');
- cbbProperties.Items.Add('二级公路');
- cbbProperties.Items.Add('三级公路');
- cbbProperties.Items.Add('四级公路');
- AControl := cbbProperties;
- end;
- end;
- procedure TScfrmBigProjManage.ImportXML_ZheJiang;
- var
- strFile: string;
- begin
- strFile := BrowseZheJiangXMLFile;
- if strFile <> '' then
- ScXMLToBuildProject.ImportXML_ZheJiang(strFile, '');
- end;
- procedure TScfrmBigProjManage.zgBPBasicEditorLoadCell(Sender: TObject;
- ACoord: TPoint; AControl: TWinControl);
- var
- vTender: TScProjManagerTreeNode;
- PPropNameMap: PScPropertyFieldNameMap;
- PropRec: TsdDataRecord;
- strValue: string;
- begin
- if ACoord.X <> 2 then Exit;
- vTender := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if not Assigned(vTender) then
- Exit;
- PropRec := ProjectManager.PropertiesRec(vTender.ID);
- PPropNameMap := PScPropertyFieldNameMap(zgBPBasic.Cells[2, ACoord.Y].Data);
- if not Assigned(PPropNameMap) then
- Exit;
- strValue := PropRec.ValueByName(PPropNameMap^.Field).AsString;
- if SameText(PPropNameMap^.Name, SEditDate) then
- begin
- if strValue = '' then
- dtpEditDate.Date := Date
- else
- dtpEditDate.Date := ScStrToDate(strValue);
- end
- else if SameText(PPropNameMap^.Name, SRoadLevel) then
- cbbProperties.Text := strValue;
- end;
- procedure TScfrmBigProjManage.zgBPBasicEditorSaveCell(Sender: TObject;
- ACoord: TPoint; AControl: TWinControl);
- var
- PPropNameMap: PScPropertyFieldNameMap;
- begin
- if ACoord.X <> 2 then Exit;
- PPropNameMap := PScPropertyFieldNameMap(zgBPBasic.Cells[2, ACoord.Y].Data);
- if not Assigned(PPropNameMap) then
- Exit;
- if SameText(PPropNameMap^.Name, SEditDate) then
- zgBPBasic.Cells[ACoord.X, ACoord.Y].Text := FormatDateTime('yyyy-mm-dd', dtpEditDate.Date)
- else if SameText(PPropNameMap^.Name, SRoadLevel) then
- zgBPBasic.Cells[ACoord.X, ACoord.Y].Text := cbbProperties.Text;
- end;
- procedure TScfrmBigProjManage.zgBPZhaoBiaoCellTextChanged(Sender: TObject;
- Col, Row: Integer);
- var
- vTender: TScProjManagerTreeNode;
- PPropNameMap: PScPropertyFieldNameMap;
- PropRec: TsdDataRecord;
- begin
- if FIsPropLoading then
- Exit;
- vTender := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if not Assigned(vTender) then
- Exit;
- PropRec := ProjectManager.PropertiesRec(vTender.ID);
- PPropNameMap := PScPropertyFieldNameMap(zgBPZhaoBiao.Cells[2, Row].Data);
- if PPropNameMap <> nil then
- PropRec.ValueByName(PPropNameMap^.Field).AsString := zgBPZhaoBiao.Cells[2, Row].Text;
- end;
- procedure TScfrmBigProjManage.zgBPTouBiaoCellTextChanged(Sender: TObject;
- Col, Row: Integer);
- var
- vTender: TScProjManagerTreeNode;
- PPropNameMap: PScPropertyFieldNameMap;
- PropRec: TsdDataRecord;
- begin
- if FIsPropLoading then
- Exit;
- vTender := TScProjManagerTreeNode(staBuildProjects.IDTree.Selected);
- if not Assigned(vTender) then
- Exit;
- PropRec := ProjectManager.PropertiesRec(vTender.ID);
- PPropNameMap := PScPropertyFieldNameMap(zgBPTouBiao.Cells[2, Row].Data);
- if PPropNameMap <> nil then
- PropRec.ValueByName(PPropNameMap^.Field).AsString := zgBPTouBiao.Cells[2, Row].Text;
- end;
- procedure TScfrmBigProjManage.DoOnExportProjectXML(Sender: TObject);
- begin
- AddConnectionToPDF(TScProject(Sender).ADOConnection);
- end;
- procedure TScfrmBigProjManage.ExportBPProperties(ABuildProjectID: Integer;
- AProperties: TStrings);
- var
- I: Integer;
- PropRec: TsdDataRecord;
- PPropNameMap: PScPropertyFieldNameMap;
- begin
- PropRec := FManageProjects.PropertiesRec(ABuildProjectID);
- for I := Low(BuildProjectFieldNameMaps) to High(BuildProjectFieldNameMaps) do
- begin
- PPropNameMap := @(BuildProjectFieldNameMaps[I]);
- AProperties.Add(PropRec.ValueByName(PPropNameMap^.Field).AsString);
- end;
- end;
- procedure TScfrmBigProjManage.ImportBPProperties(ABuildProjectID: Integer;
- AProperties: TStrings);
- var
- I: Integer;
- PropRec: TsdDataRecord;
- PPropNameMap: PScPropertyFieldNameMap;
- begin
- PropRec := FManageProjects.PropertiesRec(ABuildProjectID);
- for I := Low(BuildProjectFieldNameMaps) to High(BuildProjectFieldNameMaps) do
- begin
- PPropNameMap := @(BuildProjectFieldNameMaps[I]);
- PropRec.ValueByName(PPropNameMap^.Field).AsString := AProperties[I];
- end;
- end;
- end.
|