| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423 |
- 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, sdDB, sdIDTree;
- 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;
- pmDebug: TPopupMenu;
- pmiOutputProjectFile: TMenuItem;
- pmiOutputZJXML: TMenuItem;
- 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);
- procedure pmiOutputProjectFileClick(Sender: TObject);
- procedure pmiOutputZJXMLClick(Sender: TObject);
- procedure zgBuildProjectsMouseUp(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- private
- { Private declarations }
- FProjectParent, FFeeParent, FPriceParent, FRationParent: TZjTreeNode;
- FActive: Boolean;
- FManageProjects: TManageProjects;
- FIsLoading: Boolean;
- FIsPropLoading: Boolean;
- FCurProjIsStaticBills: Boolean; //当前分段是否是固化清单
- FIsOutputTB: Boolean;
- FIsDebugContextPopup: 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; var ABool: Boolean);
- procedure ImportBPProperties(ABuildProjectID: Integer; AProperties: TStrings);
- procedure ExportBPProperties(ABuildProjectID: Integer; AProperties: TStrings);
- function CheckZJPropties(APropertiesRec: TsdDataRecord; AZTBType: Integer): Boolean;
- function ValidateXML_ZJ(AXMLFile: string): Boolean;
- public
- { Public declarations }
- 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(ANeedXMLFile: Boolean);
- 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;
- // 判断是否是从业主的源文件导出的 固化清单
- function IsOwnerStaticBills(AFileName: string): Boolean;
- property Active: Boolean read FActive write SetActive;
- property ShowFiles: Boolean read GetShowFiles write SetShowFiles;
- property IsDebugContextPopup: Boolean read FIsDebugContextPopup;
- 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,
- ShellAPI, ScSaveAsFileFrm, ScEncryptEditions, ScCommonFeeDM, ScProject, ScTenderKindSelectFrm,
- ScXMLToBuildProject, ScImportZheJiangXMLFrm, DateUtils, MSXML2_TLB,
- ScZeroBillsFrm;
- {$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;
- FIsDebugContextPopup := False;
- 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;
- // 浙江:导出前检查项目属性
- function TScfrmBigProjManage.CheckZJPropties(APropertiesRec: TsdDataRecord; AZTBType: Integer): Boolean;
- const
- ZBProptiesNameMaps: array [0..6] of TScPropertyFieldNameMap = (
- // 基本属性
- (Field: 'Value41'; Name: SProjectNo; Caption: '项目编号'),
- (Field: 'Value42'; Name: SBuildUnit; Caption: '建设单位'),
- (Field: 'Value8'; Name: SEditDate; Caption: '编制日期'),
- (Field: 'Value43'; Name: SRoadLevel; Caption: '公路技术等级'),
- // 招标信息
- (Field: 'Value50'; Name: SZhaoBiaoRen; Caption: '招标人'),
- (Field: 'Value53'; Name: SZhaoBiaoAgent; Caption: '招标代理机构'),
- (Field: 'Value55'; Name: SZhaoBiaoCalendarDay; Caption: '总工期日历天')
- );
- TBProptiesNameMaps: array [0..3] of TScPropertyFieldNameMap = (
- // 基本属性
- (Field: 'Value41'; Name: SProjectNo; Caption: '项目编号'),
- (Field: 'Value42'; Name: SBuildUnit; Caption: '建设单位'),
- (Field: 'Value43'; Name: SRoadLevel; Caption: '公路技术等级'),
- // 投标信息
- (Field: 'Value56'; Name: STouBiaoRen; Caption: '投标人')
- );
- var
- I: Integer;
- strValue, strMsg: string;
- MapRec: PScPropertyFieldNameMap;
- lstMap: TList;
- begin
- Result := False;
- lstMap := TList.Create;
- try
- case TXmlfileType(AZTBType) of
- xftZB:
- begin
- for I := 0 to High(ZBProptiesNameMaps) do
- begin
- MapRec := PScPropertyFieldNameMap(@ZBProptiesNameMaps[I]);
- if APropertiesRec.ValueByName(MapRec^.Field).AsString = '' then
- lstMap.Add(MapRec);
- end;
- end;
- xftTB:
- begin
- for I := 0 to High(TBProptiesNameMaps) do
- begin
- MapRec := PScPropertyFieldNameMap(@TBProptiesNameMaps[I]);
- if APropertiesRec.ValueByName(MapRec^.Field).AsString = '' then
- lstMap.Add(MapRec);
- end;
- end;
- xftKZJ: ; // 暂时用不上
- end;
- if lstMap.Count = 0 then
- Result := True
- else
- begin
- for I := 0 to lstMap.Count - 1 do
- begin
- MapRec := PScPropertyFieldNameMap(lstMap[I]);
- strValue := strValue + MapRec^.Caption;
- if I < lstMap.Count - 1 then
- strValue := strValue + '、';
- end;
- MessageHint(Format('检测到建设项目属性(%s)未填写,请填写完再导出电子标。', [strValue]));
- end;
- finally
- lstMap.Free;
- end;
- end;
- function TScfrmBigProjManage.ValidateXML_ZJ(AXMLFile: string): Boolean;
- var
- SchemaDoc, XmlDoc: IXMLDOMDocument2;
- SchemaCache: IXMLDOMSchemaCollection;
- Error: IXMLDOMParseError;
- begin
- //---------------加载数据------------------------
- XmlDoc := CoDOMDocument60.Create;
- XmlDoc.async := False;
- XmlDoc.load(AXMLFile);
-
- //---------------加载schema架构文档------------------------
- SchemaDoc := CoDOMDocument60.Create;
- SchemaDoc.async := False;
- SchemaDoc.load(ConfigInfo.DataFilePath + '浙江公路工程计价成果文件数据标准.xsd');
-
- //---------------注册架构缓存------------------------
- SchemaCache := CoXMLSchemaCache60.Create;
- SchemaCache.add('', schemadoc);
-
- //---------------分配架构缓存到XML文档------------------------
- XmlDoc.schemas := schemacache;
-
- //---------------验证和报告------------------------
- Error := xmldoc.validate;
- Result := Error.errorCode = S_OK;
- if not Result then
- MessageHint('自检校验不通过,请联系纵横客服,服务热线0756-3850888,企业QQ:800003850。' + #13#10 + '错误信息如下:' + #13#10 + Error.reason);
- end;
- // 浙江:项目管理-建设项目-导出多标段
- procedure TScfrmBigProjManage.ExpXML_ZJ(ANeedXMLFile: Boolean);
- 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;
- PropertiesRec: 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;
- FIsOutputTB := TXmlfileType(iZTBType) = xftTB;
- PropertiesRec := ProjectManager.PropertiesRec(CurBuildProjID);
- if not CheckZJPropties(PropertiesRec, iZTBType) then
- Exit;
- 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 := PropertiesRec;
- vPort.XMLFile := sXMLFile;
- vPort.FileType := TxmlFileType(iZTBType);
- vPort.Area := areaZheJiang;
- vPort.IsTender := bIsTender;
- vPort.Root.Name := AnsiToUtf8('浙江交通建设工程');
- 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);
- if ANeedXMLFile then
- CopyFile(PChar(sXMLFile), PChar(ExtractFileNameWithoutExt(sXMLFile) + '-copy.xml'), False);
- if (not vPort.ProjectResult) or (not ValidateXML_ZJ(sXMLFile)) then
- begin
- SysUtils.DeleteFile(sXMLFile);
- Exit;
- end;
- 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.Filter := '全国造价数据标准文件(*.XML)|*.XML';
- if ODlg.Execute then
- strFile := ODlg.FileName
- else
- Exit;
- finally
- ODlg.Free;
- end; }
- try
- ODlg.Filter := '全国造价数据标准文件(*.jygs;*.gkgs;*.sjgs;*.sgys;*.qdys;*.gcjs;*.sjys)|*.jygs;*.gkgs;*.sjgs;*.sgys;*.qdys;*.gcjs;*.sjys';
- if ODlg.Execute then
- strFile := ODlg.FileName
- else
- Exit;
- finally
- ODlg.Free;
- end;
- if strFile <> '' then
- begin
- // 解压
- strFile := UnZip(strFile);
- if strFile <> '' then
- begin
- try
- ScXMLToBuildProject.ImportXML_QuanGuo(strFile, '');
- finally
- DeleteFile(strFile);
- end;
- end;
- end;
- 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;
- P: TPoint;
- 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 (ssShift in Shift)
- and Assigned(vNode) then
- begin
- if vNode.IsTender then
- begin
- pmiOutputProjectFile.Enabled := True;
- pmiOutputZJXML.Enabled := False;
- end
- else if vNode.IsBuildProj then
- begin
- pmiOutputProjectFile.Enabled := False;
- pmiOutputZJXML.Enabled := True;
- end
- else
- begin
- pmiOutputProjectFile.Enabled := False;
- pmiOutputZJXML.Enabled := False;
- end;
- FIsDebugContextPopup := True;
- //P := ClientToScreen(Point(X, Y));
- GetCursorPos(P);
- pmDebug.Popup(P.X, P.Y);
- end;
- end;
- procedure TScfrmBigProjManage.zgBuildProjectsMouseUp(Sender: TObject;
- Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
- begin
- FIsDebugContextPopup := 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; var ABool: Boolean);
- begin
- AddConnectionToPDF(TScProject(Sender).ADOConnection);
- ABool := FIsOutputTB or (not ShowCheckZeroBills(TScProject(Sender), False, True));
- 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;
- procedure TScfrmBigProjManage.pmiOutputProjectFileClick(Sender: TObject);
- begin
- ExportCurrentProjectFile(False);
- end;
- procedure TScfrmBigProjManage.pmiOutputZJXMLClick(Sender: TObject);
- begin
- ExpXML_ZJ(True);
- end;
- end.
|