00001
00002
00003
00004
00005 #include <OBUTTON.H>
00006 #include <OFONT.H>
00007 #include <OSYS.H>
00008 #include <OWORLDMT.H>
00009 #include <KEY.H>
00010 #include <OGAMESTR.H>
00011 #include <OFINANCE.H>
00012 #include <OVGA.H>
00013 #include <OIFACE.H>
00014 #include <OINFO.H>
00015 #include <OSTR.H>
00016 #include <OVBROW98.H>
00017 #include <OOPT.H>
00018
00019 #if(GAME_VERSION>=200)
00020 #include <OVGALOCK.H>
00021 #include <OMATH.H>
00022 #endif
00023
00024
00025
00026 #define FIN_REP_SHEET_COLOR Vga::active_buf->color_down
00027
00028 enum {
00029 REPORT_X1 = ZOOM_X1+2,
00030 REPORT_Y1 = ZOOM_Y1+15,
00031 REPORT_X2 = ZOOM_X2-2,
00032 REPORT_Y2 = ZOOM_Y2-50,
00033 };
00034
00035 enum { BG_PIC_ID = 12};
00036 enum { BUTTON_Y1 = REPORT_Y2+10 };
00037 enum { BUTTON_WIDTH = 105, BUTTON_HEIGHT = 21 };
00038 enum { FINANCIAL_REC_HEIGHT = 18 };
00039 enum { BS_TAB1 = 220, BS_TAB2 = 550,BS_TAB3 = 600 };
00040
00041
00042
00043 static ButtonGroup button_type(REPORT_TYPE_COUNT);
00044 static ButtonGroup button_year(REPORT_YEAR_COUNT);
00045 static ButtonGroup button_opt(REPORT_OPT_COUNT);
00046 static Button button_expand;
00047 static Button button_prev, button_next;
00048 static VBrowse98 browse_financial;
00049 static int report_year = 1;
00050 static void disp_fin_rep_row(int,int,int,int);
00051 static void fin_rep_case1(int,int,int);
00052 static void fin_rep_case2(int,int,int);
00053 static void fin_rep_case3(int,int,int);
00054 static void fin_rep_case4(int,int,int);
00055 static void fin_rep_case8(int,int,int);
00056 static void fin_rep_case9(int,int,int);
00057
00058 #if(GAME_VERSION>=200)
00059
00060
00061 const RECORD_SEPARATOR_LEN = 2;
00062 static char *RECORD_SEPARATOR = "\r\n";
00063 const FIELD_SEPARATOR_LEN = 1;
00064 static char *FIELD_SEPARATOR = "\t";
00065
00066 static char *export_num(int value) {
00067 static char num_str[20];
00068 return itoa( value, num_str, 10 );
00069 }
00070
00071 static char *export_num(double value) {
00072 static char num_str[20];
00073 return gcvt( value, 7, num_str );
00074 }
00075
00076 #define WRITE_FIELD_SEPARATOR(f) f->file_write(FIELD_SEPARATOR, FIELD_SEPARATOR_LEN)
00077 #define WRITE_STR_FIELD(f,s) { f->file_write(s, strlen(s)); }
00078 #define WRITE_NUM_FIELD(f,n) { char *s=export_num(n); f->file_write(s, strlen(s)); }
00079 #define WRITE_RECORD_SEPARATOR(f) f->file_write(RECORD_SEPARATOR, RECORD_SEPARATOR_LEN)
00080
00081
00082 static void export_fin_rep_case1(File *);
00083 static void export_fin_rep_case2(File *);
00084 static void export_fin_rep_case3(File *);
00085 static void export_fin_rep_case4(File *);
00086 static void export_fin_rep_case5(File *);
00087 static void export_fin_rep_case6(File *);
00088 static void export_fin_rep_case7(File *);
00089 static void export_fin_rep_case8(File *);
00090 static void export_fin_rep_case9(File *);
00091
00092 static Button button_export;
00093 #endif
00094
00095
00104
00105 int x=REPORT_X1, y=REPORT_Y1;
00106 vga.use_back();
00107 sys.is_institution_report=1;
00108 if (refreshFlag == INFO_REPAINT) {
00109
00110 report_deinit();
00111
00112
00113
00114
00115 user_interface.bg_img(BG_PIC_ID, &vga_back);
00116
00117 if( dispButton )
00118 report_paint_button(refreshFlag);
00119
00120 int reportY1=REPORT_Y1, reportY2=REPORT_Y2;
00121
00122 if( reportTitle ) {
00123 reportY1 += 15;
00124 font_charts.center_put( REPORT_X1, ZOOM_Y1, REPORT_X2, reportY1-1, reportTitle );
00125 }
00126
00127 if( !dispButton )
00128 reportY2 += BUTTON_HEIGHT-8;
00129
00130
00131 if(report_type==REPORT_TYPE_OPTIMIZATION) {
00132 if(finance.report_opt==REPORT_OPT_REVENUE)
00133 optimization.report_stage_1(refreshFlag);
00134 if(finance.report_opt==REPORT_OPT_FUNCTION)
00135 optimization.report_stage_2(refreshFlag);
00136 if(finance.report_opt==REPORT_OPT_FACULTY)
00137 optimization.report_stage_3(refreshFlag);
00138
00139 }
00140 else {
00141
00142
00143 user_interface.brighten( REPORT_X1, reportY1, REPORT_X2, reportY2);
00144 user_interface.rect( REPORT_X1, reportY1, REPORT_X2, reportY2);
00145
00146
00147
00148 int browseRecCount;
00149 if(report_type==REPORT_TYPE_REVENUE||report_type==REPORT_TYPE_BUDGET_VS_ACTUAL) {
00150 if(report_year!=REPORT_YEAR_THREE_YEARS) {
00151 browseRecCount=REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+9;
00152 }
00153 else {
00154 if( report_is_expanded )
00155 browseRecCount=REVENUE_ITEM_COUNT+4*EXPENSE_ITEM_COUNT+25;
00156 else
00157 browseRecCount=REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+9;
00158 }
00159 }
00160
00161 if(report_type==REPORT_TYPE_DETAIL_REN)
00162 browseRecCount=REVENUE_ITEM_COUNT+4*EXPENSE_ITEM_COUNT+25;
00163
00164 if(report_type==REPORT_TYPE_BALANCE) {
00165 if(report_year==REPORT_YEAR_THREE_YEARS)
00166 browseRecCount=ASSET_ITEM_COUNT+LIABILITY_ITEM_COUNT+8;
00167 else
00168 browseRecCount=ASSET_ITEM_COUNT+LIABILITY_ITEM_COUNT+7;
00169 }
00170
00171
00172
00173 browse_financial.init( REPORT_X1, reportY1, REPORT_X2, reportY2,
00174 0, FINANCIAL_REC_HEIGHT, browseRecCount,
00175 disp_fin_rep_row, NULL ,0);
00176
00177 browse_financial.open(report_financial_recno);
00178 }
00179
00180 }
00181 else {
00182 if(report_type==REPORT_TYPE_OPTIMIZATION) {
00183 if(finance.report_opt==REPORT_OPT_REVENUE)
00184 optimization.report_stage_1(refreshFlag);
00185 if(finance.report_opt==REPORT_OPT_FUNCTION)
00186 optimization.report_stage_2(refreshFlag);
00187 if(finance.report_opt==REPORT_OPT_FACULTY)
00188 optimization.report_stage_3(refreshFlag);
00189 }
00190 else {
00191
00192 browse_financial.update();
00193
00194 if( dispButton )
00195 report_paint_button(refreshFlag);
00196 }
00197 }
00198
00199
00200 if(report_type==REPORT_TYPE_OPTIMIZATION) {
00201 }
00202 else {
00203 report_financial_recno=browse_financial.recno();
00204 }
00205 vga.blt_buf( ZOOM_X1, ZOOM_Y1, ZOOM_X2, ZOOM_Y2 );
00206 }
00207
00208
00209
00210 void Finance::report_deinit() {
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223 optimization.deinit();
00224
00225 button_type.deinit_buttons();
00226 button_year.deinit_buttons();
00227 button_opt.deinit_buttons();
00228 button_expand.deinit();
00229 button_prev.deinit();
00230 button_next.deinit();
00231 browse_financial.deinit();
00232
00233
00234 #if(GAME_VERSION>=200)
00235 button_export.deinit();
00236 #endif
00237 }
00238
00239
00244
00245 if( detectButton ) {
00246
00247 if( button_type.detect() >= 0 ) {
00248 report_type = button_type.button_pressed;
00249 sys.redraw_all_flag = 1;
00250 report_financial_recno=1;
00251 report_is_expanded = 0;
00252 }
00253
00254 if(report_type==REPORT_TYPE_OPTIMIZATION) {
00255 if( button_opt.detect() >= 0 ) {
00256 report_opt = button_opt.button_pressed;
00257 sys.redraw_all_flag = 1;
00258 report_financial_recno=1;
00259 report_is_expanded = 0;
00260 }
00261 }
00262 else if((report_type==REPORT_TYPE_REVENUE)||(report_type==REPORT_TYPE_BALANCE)) {
00263 if( button_year.detect() >= 0 ) {
00264 report_year = button_year.button_pressed;
00265 sys.redraw_all_flag = 1;
00266 report_financial_recno=1;
00267 report_is_expanded = 0;
00268 }
00269
00270 }
00271
00272 #if(GAME_VERSION>=200)
00273
00274
00275 if((report_type==REPORT_TYPE_REVENUE)||(report_type==REPORT_TYPE_BALANCE)||(report_type==REPORT_TYPE_DETAIL_REN)) {
00276 if( button_export.detect() ) {
00277
00278
00279 MouseDispCount mouseDispCount;
00280
00281 char tempFilename[MAX_PATH];
00282
00283 tempFilename[0] = '\0';
00284
00285
00286 OPENFILENAME openFileName;
00287 memset( &openFileName, 0, sizeof(openFileName) );
00288 openFileName.lStructSize = sizeof(openFileName);
00289 openFileName.hwndOwner = sys.main_hwnd;
00290 openFileName.hInstance = sys.app_hinstance;
00291
00292 openFileName.lpstrFilter = "Text file(*.txt)\0*.txt\0All Files(*.*)\0*.*\0";
00293 openFileName.lpstrCustomFilter = NULL;
00294 openFileName.nMaxCustFilter = 0;
00295 openFileName.nFilterIndex = 0;
00296 openFileName.lpstrFile = tempFilename;
00297 openFileName.nMaxFile = sizeof(tempFilename);
00298 openFileName.lpstrFileTitle = NULL;
00299 openFileName.nMaxFileTitle = 0;
00300 openFileName.lpstrInitialDir = ".";
00301 openFileName.lpstrTitle = NULL;
00302 openFileName.Flags = OFN_OVERWRITEPROMPT | OFN_LONGNAMES | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY;
00303 openFileName.nFileOffset = 0;
00304 openFileName.nFileExtension = 0;
00305 openFileName.lpstrDefExt = "txt";
00306 openFileName.lCustData = NULL;
00307 openFileName.lpfnHook = NULL;
00308 openFileName.lpTemplateName = NULL;
00309
00310 if( GetSaveFileName(&openFileName) ) {
00311 File exportFile;
00312 exportFile.file_create( tempFilename );
00313 if( report_type==REPORT_TYPE_REVENUE) {
00314 switch(report_year) {
00315 case 1: export_fin_rep_case1( &exportFile ); break;
00316 case 2: export_fin_rep_case2( &exportFile ); break;
00317 case 3: export_fin_rep_case3( &exportFile ); break;
00318 case 0:
00319 default: export_fin_rep_case4( &exportFile );
00320 }
00321 }
00322 else if(report_type==REPORT_TYPE_BALANCE) {
00323
00324 export_fin_rep_case8( &exportFile );
00325 }
00326 else if(report_type==REPORT_TYPE_DETAIL_REN) {
00327 export_fin_rep_case9( &exportFile );
00328 }
00329
00330 exportFile.file_close();
00331 }
00332 }
00333 }
00334 #endif
00335
00336 if( button_expand.detect() ) {
00337 report_type = REPORT_TYPE_DETAIL_REN;
00338 sys.redraw_all_flag = 1;
00339 report_financial_recno=1;
00340
00341
00342
00343 }
00344 }
00345 if(report_type==REPORT_TYPE_OPTIMIZATION) {
00346 if(finance.report_opt==REPORT_OPT_REVENUE)
00347 optimization.detect_stage_1();
00348 if(finance.report_opt==REPORT_OPT_FUNCTION)
00349 optimization.detect_stage_2();
00350 if(finance.report_opt==REPORT_OPT_FACULTY)
00351 optimization.detect_stage_3();
00352 }
00353 else
00354 browse_financial.detect();
00355 }
00356
00357
00358
00359
00360
00361 void Finance::report_paint_button(int refreshFlag) {
00362 if( refreshFlag == INFO_REPAINT ) {
00363
00364
00365 int x=REPORT_X1+10, y=BUTTON_Y1-6;
00366
00367 button_type[0].create_text( x, y, x+(int)(2.7*BUTTON_WIDTH-1), y+BUTTON_HEIGHT-1, "Budget vs Actual" );
00368 x+=(int)(2.7*BUTTON_WIDTH+15);
00369
00370 button_type[1].create_text( x, y, x+(int)(1.2*BUTTON_WIDTH-1), y+BUTTON_HEIGHT-1, "Balance sheet" );
00371 x+=(int)(1.2*BUTTON_WIDTH+15);
00372
00373 button_type[2].create_text( x, y, x+(int)(1.5*BUTTON_WIDTH-1), y+BUTTON_HEIGHT-1, "Budget plan" );
00374 x+=(int)(1.5*BUTTON_WIDTH+15);
00375
00376 button_type[3].create_text( x, y, x+(int)(0.8*BUTTON_WIDTH-1), y+BUTTON_HEIGHT-1, "Detail", 0 );
00377 x=REPORT_X1+25, y=BUTTON_Y1+18;
00378
00379
00380
00381 if(report_type==REPORT_TYPE_OPTIMIZATION) {
00382 button_opt[0].create_text( x, y, x+(int)(2*BUTTON_WIDTH-1), y+BUTTON_HEIGHT-1, "Revenue and expenditure" );
00383
00384 x+=(int)(2*BUTTON_WIDTH+20);
00385 button_opt[1].create_text( x, y, x+(int)(2*BUTTON_WIDTH-1), y+BUTTON_HEIGHT-1, "Allocations");
00386
00387 x+=(int)(2*BUTTON_WIDTH+20);
00388 button_opt[2].create_text( x, y, x+(int)(2*BUTTON_WIDTH-1), y+BUTTON_HEIGHT-1, "Faculty hiring");
00389 }
00390
00391 if((report_type==REPORT_TYPE_REVENUE)
00392 ||(report_type==REPORT_TYPE_BALANCE)) {
00393 String s1;
00394
00395 int tyear=(int)(info.game_year+(info.game_month-9.0)/12);
00396
00397 s1="Standard";
00398 button_year[0].create_text( x, y, x+BUTTON_WIDTH+40-1, y+BUTTON_HEIGHT-1, s1.str_buf );
00399
00400 #if(GAME_VERSION>=200)
00401 x+=BUTTON_WIDTH+65;
00402 #else
00403 x+=BUTTON_WIDTH+105;
00404 #endif
00405 s1="Year ";
00406 s1+=(m.format(tyear-1,4));
00407 button_year[1].create_text( x, y, x+BUTTON_WIDTH-1, y+BUTTON_HEIGHT-1, s1.str_buf );
00408
00409 #if(GAME_VERSION>=200)
00410 x+=BUTTON_WIDTH+10;
00411 #else
00412 x+=BUTTON_WIDTH+70;
00413 #endif
00414 s1="Year ";
00415 s1+=(m.format(tyear,4));
00416 button_year[2].create_text( x, y, x+BUTTON_WIDTH-1, y+BUTTON_HEIGHT-1, s1.str_buf );
00417
00418 #if(GAME_VERSION>=200)
00419 x+=BUTTON_WIDTH+10;
00420 #else
00421 x+=BUTTON_WIDTH+75;
00422 #endif
00423 s1="Year ";
00424 s1+=(m.format(tyear+1,4));
00425 button_year[3].create_text( x, y, x+BUTTON_WIDTH-1, y+BUTTON_HEIGHT-1, s1.str_buf );
00426
00427 #if(GAME_VERSION>=200)
00428 x=REPORT_X2-BUTTON_WIDTH-25;
00429 button_export.create_text( x, y, x+BUTTON_WIDTH-1, y+BUTTON_HEIGHT-1, "Export" );
00430 #endif
00431 }
00432
00433 #if(GAME_VERSION>=200)
00434 if(report_type==REPORT_TYPE_DETAIL_REN) {
00435 x=REPORT_X2-BUTTON_WIDTH-25;
00436 button_export.create_text( x, y, x+BUTTON_WIDTH-1, y+BUTTON_HEIGHT-1, "Export" );
00437 }
00438 #endif
00439
00440 button_type.paint(report_type);
00441
00442 if( report_type==REPORT_TYPE_BALANCE) {
00443
00444
00445
00446 button_year.paint(report_year);
00447 #if(GAME_VERSION>=200)
00448 button_export.paint();
00449 #endif
00450 }
00451 else if(report_type==REPORT_TYPE_OPTIMIZATION) {
00452 if((report_opt<0)||(report_opt>3))
00453 report_opt=REPORT_OPT_REVENUE;
00454 button_opt.paint(report_opt);
00455 }
00456 else if(report_type==REPORT_TYPE_REVENUE) {
00457 button_year.paint(report_year);
00458 #if(GAME_VERSION>=200)
00459 button_export.paint();
00460 #endif
00461 }
00462 else if(report_type==REPORT_TYPE_DETAIL_REN) {
00463 #if(GAME_VERSION>=200)
00464 button_export.paint();
00465 #endif
00466 }
00467 }
00468 }
00469
00470
00471
00472
00473
00474
00475
00476
00477 static void fin_rep_case1(int recNo,int x, int y) {
00478 int i;
00479
00480 int xColumn1=370, xColumn2=470, xColumn3=570, xColumn4=670, xColumn5=740;
00481
00482
00483 if(recNo==1) {
00484
00485
00486 int tyear = info.financial_year();
00488 if(sys.view_mode==MODE_YEAR_END_REPORT)tyear++;
00489
00490 String str;
00491 str="Previous Year : Year ";
00492 str+=m.format(tyear-1,4);
00493
00494 font_charts.put(xColumn1-70,y+2,str.str_buf);
00495 return;
00496 }
00497 recNo--;
00498
00499 if(recNo==1) {
00500 font_chart_red_sm.disp( x, y, "Revenue", x+200 );
00501 font_chart_red_sm.right_put( xColumn2, y+2, "Direct");
00502 font_chart_red_sm.right_put( xColumn3, y+2, "Indirect");
00503 font_chart_red_sm.right_put( xColumn4, y+2, "Total");
00504 font_chart_red_sm.right_put( xColumn5, y+2, "% sources");
00505 }
00506 else if((recNo>1) && (recNo<=REVENUE_ITEM_COUNT+1)) {
00507 i=recNo-2;
00508 if(recNo==5) {
00509
00510
00511
00512
00513
00514
00515 font_chartsm.disp( x, y, game_str_res.financial_report_str(i), xColumn2);
00516 font_chartsm.right_put( xColumn2, y+2, m.format(finance.revenue_array[i].direct, 2));
00517 font_chartsm.right_put( xColumn3, y+2, m.format(finance.revenue_array[i].indirect, 2));
00518 font_chartsm.right_put( xColumn4, y+2, m.format(finance.revenue_array[i].total, 2));
00519 font_chartsm.right_put( xColumn5, y+2, m.format(finance.revenue_array[i].percent, 24));
00520 }
00521 if((recNo==2)||(recNo==3)) {
00522 font_chartsm.disp( x, y, game_str_res.financial_report_str(i), xColumn2);
00523
00524 font_chartsm.right_put( xColumn4, y+2, m.format(finance.revenue_array[i].total, 2));
00525 }
00526 else {
00527 if( recNo==4 )
00528 font_chart_blue_sm.disp( x, y, game_str_res.financial_report_str(i), xColumn2);
00529 else
00530 font_chartsm.disp( x, y, game_str_res.financial_report_str(i), xColumn2);
00531
00532 font_chartsm.right_put( xColumn4, y+2, m.format(finance.revenue_array[i].total, 2));
00533 font_chartsm.right_put( xColumn5, y+2, m.format(finance.revenue_array[i].percent, 24));
00534 }
00535 }
00536 else if(recNo==REVENUE_ITEM_COUNT+2) {
00537 font_chart_blue_sm.disp( x, y," Total sources of funds", xColumn1);
00538 font_chart_blue_sm.right_put( xColumn4, y+2, m.format(finance.total_revenue.total, 2));
00539 font_chart_blue_sm.right_put( xColumn5, y+2, m.format(finance.total_revenue.percent, 24));
00540 }
00541 else if(recNo==REVENUE_ITEM_COUNT+3) {
00542 font_chart_red_sm.right_put( xColumn1, y+2, "AY faculty");
00543 font_chart_red_sm.right_put( xColumn2, y+2, "Staff");
00544 font_chart_red_sm.right_put( xColumn3, y+2, "Other");
00545 }
00546 else if(recNo==REVENUE_ITEM_COUNT+4) {
00547 font_chart_red_sm.disp( x, y, "Expenditures", x+200 );
00548 font_chart_red_sm.right_put( xColumn1, y+2, "compensation");
00549 font_chart_red_sm.right_put( xColumn2, y+2, "compensation");
00550 font_chart_red_sm.right_put( xColumn3, y+2, "expenditures");
00551 font_chart_red_sm.right_put( xColumn4, y+2, "Total");
00552 font_chart_red_sm.right_put( xColumn5, y+2, "% uses");
00553 }
00554 else if((recNo>=REVENUE_ITEM_COUNT+5) && (recNo<REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+3)) {
00555 i=recNo-5-REVENUE_ITEM_COUNT;
00556 if((recNo>=REVENUE_ITEM_COUNT+7) && (recNo<REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+3)) {
00557 font_chartsm.disp( x, y,game_str_res.financial_report_str(i+REVENUE_ITEM_COUNT),xColumn2);
00558 font_chartsm.right_put( xColumn2, y+2, m.format(finance.expense_array[i].staff, 2));
00559 font_chartsm.right_put( xColumn3, y+2, m.format(finance.expense_array[i].other, 2));
00560 font_chartsm.right_put( xColumn4, y+2, m.format(finance.expense_array[i].total, 2));
00561 font_chartsm.right_put( xColumn5, y+2, m.format(finance.expense_array[i].percent, 24));
00562 }
00563 else {
00564 font_chartsm.disp( x, y,game_str_res.financial_report_str(i+REVENUE_ITEM_COUNT),xColumn1);
00565 font_chartsm.right_put( xColumn1, y+2, m.format(finance.expense_array[i].faculty, 2));
00566 font_chartsm.right_put( xColumn2, y+2, m.format(finance.expense_array[i].staff, 2));
00567 font_chartsm.right_put( xColumn3, y+2, m.format(finance.expense_array[i].other, 2));
00568 font_chartsm.right_put( xColumn4, y+2, m.format(finance.expense_array[i].total, 2));
00569 font_chartsm.right_put( xColumn5, y+2, m.format(finance.expense_array[i].percent, 24));
00570 }
00571 }
00572 else if(recNo==REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+3) {
00573 font_chart_blue_sm.disp( x, y," Total operating expenditures", xColumn1);
00574 font_chart_blue_sm.right_put( xColumn1, y+2, m.format(finance.total_operating_expense.faculty, 2));
00575 font_chart_blue_sm.right_put( xColumn2, y+2, m.format(finance.total_operating_expense.staff, 2));
00576 font_chart_blue_sm.right_put( xColumn3, y+2, m.format(finance.total_operating_expense.other, 2));
00577 font_chart_blue_sm.right_put( xColumn4, y+2, m.format(finance.total_operating_expense.total, 2));
00578 font_chart_blue_sm.right_put( xColumn5, y+2, m.format(finance.total_operating_expense.percent, 24));
00579 }
00580 else if((recNo>REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+3) && (recNo<=REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+5)) {
00581 i=recNo-6-REVENUE_ITEM_COUNT;
00582 font_chartsm.disp( x, y,game_str_res.financial_report_str(i+REVENUE_ITEM_COUNT),xColumn1);
00583 font_chartsm.right_put( xColumn3, y+2, m.format(finance.expense_array[i].other, 2));
00584 font_chartsm.right_put( xColumn4, y+2, m.format(finance.expense_array[i].total, 2));
00585 font_chartsm.right_put( xColumn5, y+2, m.format(finance.expense_array[i].percent, 24));
00586 }
00587 else if(recNo==REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+6) {
00588 font_chart_blue_sm.disp( x, y," Total uses of funds", xColumn1);
00589 font_chart_blue_sm.right_put( xColumn1, y+2, m.format(finance.total_expense.faculty, 2));
00590 font_chart_blue_sm.right_put( xColumn2, y+2, m.format(finance.total_expense.staff, 2));
00591 font_chart_blue_sm.right_put( xColumn3, y+2, m.format(finance.total_expense.other, 2));
00592 font_chart_blue_sm.right_put( xColumn4, y+2, m.format(finance.total_expense.total, 2));
00593 font_chart_blue_sm.right_put( xColumn5, y+2, m.format(finance.total_expense.percent, 24));
00594 }
00595 else if(recNo==REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+7) {
00596 double percent1,percent2,percent3,percent4;
00597 percent1=100*finance.total_expense.faculty/finance.total_expense.total;
00598 percent2=100*finance.total_expense.staff/finance.total_expense.total;
00599 percent3=100*finance.total_expense.other/finance.total_expense.total;
00600 percent4=100;
00601
00602 font_chartsm.disp( x, y, "\tPercent of total uses", xColumn1);
00603 font_chartsm.right_put( xColumn1, y+2, m.format(percent1, 24));
00604 font_chartsm.right_put( xColumn2, y+2, m.format(percent2, 24));
00605 font_chartsm.right_put( xColumn3, y+2, m.format(percent3, 24));
00606 font_chartsm.right_put( xColumn4, y+2, m.format(percent4, 24));
00607
00608 }
00609 else if(recNo==REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+8) {
00610 font_chartsm.disp( x, y," Surplus (deficit)", xColumn1);
00611
00612 if(finance.last_year.surplus_deficit>=0)
00613 font_chart_green_sm.right_put( xColumn4, y+2, m.format(finance.last_year.surplus_deficit, 2) );
00614 else
00615 font_chart_red_sm.right_put( xColumn4, y+2, m.format(finance.last_year.surplus_deficit, 2));
00616 }
00617
00618 }
00619
00620
00621
00622 #if(GAME_VERSION>=200)
00623
00624
00625
00626
00627 void export_fin_rep_case1( File *filePtr ) {
00628
00629 int tyear = info.financial_year();
00630 WRITE_STR_FIELD(filePtr, "Previous Year : " ); WRITE_FIELD_SEPARATOR(filePtr);
00631 WRITE_NUM_FIELD(filePtr, tyear-1); WRITE_RECORD_SEPARATOR(filePtr);
00632
00633 WRITE_STR_FIELD(filePtr, "Revenue"); WRITE_FIELD_SEPARATOR(filePtr);
00634 WRITE_FIELD_SEPARATOR(filePtr);
00635 WRITE_STR_FIELD(filePtr, "Direct"); WRITE_FIELD_SEPARATOR(filePtr);
00636 WRITE_STR_FIELD(filePtr, "Indirect"); WRITE_FIELD_SEPARATOR(filePtr);
00637 WRITE_STR_FIELD(filePtr, "Total"); WRITE_FIELD_SEPARATOR(filePtr);
00638 WRITE_STR_FIELD(filePtr, "% sources"); WRITE_RECORD_SEPARATOR(filePtr);
00639
00640
00641 for( int i = 0; i < REVENUE_ITEM_COUNT; ++i ) {
00642 WRITE_STR_FIELD(filePtr, game_str_res.financial_report_str(i)); WRITE_FIELD_SEPARATOR(filePtr);
00643 WRITE_FIELD_SEPARATOR(filePtr);
00644
00645 if( i == AC_SPONSORED_RESEARCH_REVENUE ) {
00646 WRITE_NUM_FIELD(filePtr, finance.revenue_array[i].direct); WRITE_FIELD_SEPARATOR(filePtr);
00647 WRITE_NUM_FIELD(filePtr, finance.revenue_array[i].indirect); WRITE_FIELD_SEPARATOR(filePtr);
00648 }
00649 else {
00650 WRITE_FIELD_SEPARATOR(filePtr);
00651 WRITE_FIELD_SEPARATOR(filePtr);
00652 }
00653 WRITE_NUM_FIELD(filePtr, finance.revenue_array[i].total); WRITE_FIELD_SEPARATOR(filePtr);
00654
00655 if( i==AC_GROSS_TUITION_INCOME||i==AC_FINANCIAL_AID ) {
00656
00657 }
00658 else {
00659 WRITE_NUM_FIELD(filePtr, 0.01*finance.revenue_array[i].percent);
00660 }
00661 WRITE_RECORD_SEPARATOR(filePtr);
00662 }
00663
00664 WRITE_STR_FIELD(filePtr, " Total sources of funds"); WRITE_FIELD_SEPARATOR(filePtr);
00665 WRITE_FIELD_SEPARATOR(filePtr);
00666 WRITE_FIELD_SEPARATOR(filePtr);
00667 WRITE_FIELD_SEPARATOR(filePtr);
00668 WRITE_NUM_FIELD(filePtr, finance.total_revenue.total); WRITE_FIELD_SEPARATOR(filePtr);
00669 WRITE_NUM_FIELD(filePtr, finance.total_revenue.percent); WRITE_RECORD_SEPARATOR(filePtr);
00670
00671
00672 WRITE_STR_FIELD(filePtr, "Expenditures"); WRITE_FIELD_SEPARATOR(filePtr);
00673 WRITE_STR_FIELD(filePtr, "AY faculty compensation"); WRITE_FIELD_SEPARATOR(filePtr);
00674 WRITE_STR_FIELD(filePtr, "Staff compensation"); WRITE_FIELD_SEPARATOR(filePtr);
00675 WRITE_STR_FIELD(filePtr, "Other expenditures"); WRITE_FIELD_SEPARATOR(filePtr);
00676 WRITE_STR_FIELD(filePtr, "Total"); WRITE_FIELD_SEPARATOR(filePtr);
00677 WRITE_STR_FIELD(filePtr, "% uses"); WRITE_RECORD_SEPARATOR(filePtr);
00678
00679
00680 for( i=0; i < EXPENSE_ITEM_COUNT; ++i ) {
00681 WRITE_STR_FIELD(filePtr, game_str_res.financial_report_str(i+REVENUE_ITEM_COUNT)); WRITE_FIELD_SEPARATOR(filePtr);
00682 if( i==AC_ACADEMIC_DEPARTMENTS || i==AC_SPONSORED_RESEARCH_EXPENSE ) {
00683 WRITE_NUM_FIELD(filePtr, finance.expense_array[i].faculty);
00684 }
00685 WRITE_FIELD_SEPARATOR(filePtr);
00686 if( i < OPERATING_EXPENSE_ITEM_COUNT ) {
00687 WRITE_NUM_FIELD(filePtr, finance.expense_array[i].staff);
00688 }
00689 WRITE_FIELD_SEPARATOR(filePtr);
00690 WRITE_NUM_FIELD(filePtr, finance.expense_array[i].other); WRITE_FIELD_SEPARATOR(filePtr);
00691 WRITE_NUM_FIELD(filePtr, finance.expense_array[i].total); WRITE_FIELD_SEPARATOR(filePtr);
00692 WRITE_NUM_FIELD(filePtr, 0.01*finance.expense_array[i].percent); WRITE_RECORD_SEPARATOR(filePtr);
00693
00694
00695 if( i==OPERATING_EXPENSE_ITEM_COUNT-1 ) {
00696 WRITE_STR_FIELD(filePtr, " Total operating expenditures"); WRITE_FIELD_SEPARATOR(filePtr);
00697 WRITE_NUM_FIELD(filePtr, finance.total_operating_expense.faculty); WRITE_FIELD_SEPARATOR(filePtr);
00698 WRITE_NUM_FIELD(filePtr, finance.total_operating_expense.staff); WRITE_FIELD_SEPARATOR(filePtr);
00699 WRITE_NUM_FIELD(filePtr, finance.total_operating_expense.other); WRITE_FIELD_SEPARATOR(filePtr);
00700 WRITE_NUM_FIELD(filePtr, finance.total_operating_expense.total); WRITE_FIELD_SEPARATOR(filePtr);
00701 WRITE_NUM_FIELD(filePtr, 0.01*finance.total_operating_expense.percent); WRITE_RECORD_SEPARATOR(filePtr);
00702 }
00703 }
00704
00705
00706 WRITE_STR_FIELD(filePtr, " Total uses of funds" ); WRITE_FIELD_SEPARATOR(filePtr);
00707 WRITE_NUM_FIELD(filePtr, finance.total_expense.faculty ); WRITE_FIELD_SEPARATOR(filePtr);
00708 WRITE_NUM_FIELD(filePtr, finance.total_expense.staff); WRITE_FIELD_SEPARATOR(filePtr);
00709 WRITE_NUM_FIELD(filePtr, finance.total_expense.other); WRITE_FIELD_SEPARATOR(filePtr);
00710 WRITE_NUM_FIELD(filePtr, finance.total_expense.total); WRITE_FIELD_SEPARATOR(filePtr);
00711 WRITE_NUM_FIELD(filePtr, 0.01*finance.total_expense.percent); WRITE_RECORD_SEPARATOR(filePtr);
00712
00713
00714 double percent1,percent2,percent3,percent4;
00715 percent1=finance.total_expense.faculty/finance.total_expense.total;
00716 percent2=finance.total_expense.staff/finance.total_expense.total;
00717 percent3=finance.total_expense.other/finance.total_expense.total;
00718 percent4=1.0;
00719
00720 WRITE_STR_FIELD(filePtr, " Percent of total uses" ); WRITE_FIELD_SEPARATOR(filePtr);
00721 WRITE_NUM_FIELD(filePtr, percent1); WRITE_FIELD_SEPARATOR(filePtr);
00722 WRITE_NUM_FIELD(filePtr, percent2); WRITE_FIELD_SEPARATOR(filePtr);
00723 WRITE_NUM_FIELD(filePtr, percent3); WRITE_FIELD_SEPARATOR(filePtr);
00724 WRITE_NUM_FIELD(filePtr, percent4); WRITE_FIELD_SEPARATOR(filePtr);
00725 WRITE_RECORD_SEPARATOR(filePtr);
00726
00727
00728 WRITE_STR_FIELD(filePtr, " Surplus (deficit)"); WRITE_FIELD_SEPARATOR(filePtr);
00729 WRITE_FIELD_SEPARATOR(filePtr);
00730 WRITE_FIELD_SEPARATOR(filePtr);
00731 WRITE_FIELD_SEPARATOR(filePtr);
00732 WRITE_NUM_FIELD(filePtr, finance.last_year.surplus_deficit); WRITE_FIELD_SEPARATOR(filePtr);
00733 WRITE_RECORD_SEPARATOR(filePtr);
00734 }
00735
00736
00737 #endif
00738
00739
00740
00741
00742
00743
00744 static void fin_rep_case2(int recNo,int x, int y) {
00745 int i;
00746 int xColumn1=370, xColumn2=470, xColumn3=570, xColumn4=670, xColumn5=740;
00747
00748
00749 if(recNo==1) {
00750
00751
00752 int tyear = info.financial_year();
00753
00754 String str;
00755 str="Present Year : Year ";
00756
00757 str+=m.format(tyear,4);
00758
00759
00760
00761
00762 font_charts.put(xColumn1-70,y+2,str.str_buf);
00763 return;
00764 }
00765 recNo--;
00766
00767 if(recNo==1) {
00768 font_chart_red_sm.disp( x, y, "Revenue", x+200 );
00769 font_chart_red_sm.right_put( xColumn2, y+2, "Direct");
00770 font_chart_red_sm.right_put( xColumn3, y+2, "Indirect");
00771 font_chart_red_sm.right_put( xColumn4, y+2, "Total");
00772 font_chart_red_sm.right_put( xColumn5, y+2, "% sources");
00773 }
00774 else if((recNo>1) && (recNo<=REVENUE_ITEM_COUNT+1)) {
00775 i=recNo-2;
00776 if(recNo==5) {
00777 font_chartsm.disp( x, y, game_str_res.financial_report_str(i), xColumn2);
00778 font_chartsm.right_put( xColumn2, y+2, m.format(finance.projected_revenue_array[i].this_year.direct, 2));
00779 font_chartsm.right_put( xColumn3, y+2, m.format(finance.projected_revenue_array[i].this_year.indirect, 2));
00780 font_chartsm.right_put( xColumn4, y+2, m.format(finance.projected_revenue_array[i].this_year.total, 2));
00781 font_chartsm.right_put( xColumn5, y+2, m.format(finance.projected_revenue_array[i].this_year.percent, 24));
00782 }
00783 if((recNo==2)||(recNo==3)) {
00784 font_chartsm.disp( x, y, game_str_res.financial_report_str(i), xColumn2);
00785 font_chartsm.right_put( xColumn4, y+2, m.format(finance.projected_revenue_array[i].this_year.total, 2));
00786 }
00787 else {
00788 font_chartsm.disp( x, y, game_str_res.financial_report_str(i), xColumn2);
00789 font_chartsm.right_put( xColumn4, y+2, m.format(finance.projected_revenue_array[i].this_year.total, 2));
00790 font_chartsm.right_put( xColumn5, y+2, m.format(finance.projected_revenue_array[i].this_year.percent, 24));
00791 }
00792 }
00793 else if(recNo==REVENUE_ITEM_COUNT+2) {
00794 font_chart_blue_sm.disp( x, y," Total sources of funds", xColumn1);
00795 font_chart_blue_sm.right_put( xColumn4, y+2, m.format(finance.projected_total_revenue.this_year.total, 2));
00796 font_chart_blue_sm.right_put( xColumn5, y+2, m.format(finance.projected_total_revenue.this_year.percent, 24));
00797 }
00798 else if(recNo==REVENUE_ITEM_COUNT+3) {
00799 font_chart_red_sm.right_put( xColumn1, y+2, "AY faculty");
00800 font_chart_red_sm.right_put( xColumn2, y+2, "Staff");
00801 font_chart_red_sm.right_put( xColumn3, y+2, "Other");
00802 }
00803 else if(recNo==REVENUE_ITEM_COUNT+4) {
00804 font_chart_red_sm.disp( x, y, "Expenditures", x+200 );
00805 font_chart_red_sm.right_put( xColumn1, y+2, "compensation");
00806 font_chart_red_sm.right_put( xColumn2, y+2, "compensation");
00807 font_chart_red_sm.right_put( xColumn3, y+2, "expenditures");
00808 font_chart_red_sm.right_put( xColumn4, y+2, "Total");
00809 font_chart_red_sm.right_put( xColumn5, y+2, "% uses");
00810 }
00811 else if((recNo>=REVENUE_ITEM_COUNT+5) && (recNo<REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+3)) {
00812 i=recNo-5-REVENUE_ITEM_COUNT;
00813 if((recNo>=REVENUE_ITEM_COUNT+7) && (recNo<REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+3)) {
00814 font_chartsm.disp( x, y,game_str_res.financial_report_str(i+REVENUE_ITEM_COUNT),xColumn2);
00815 font_chartsm.right_put( xColumn2, y+2, m.format(finance.projected_expense_array[i].this_year.staff, 2));
00816 font_chartsm.right_put( xColumn3, y+2, m.format(finance.projected_expense_array[i].this_year.other, 2));
00817 font_chartsm.right_put( xColumn4, y+2, m.format(finance.projected_expense_array[i].this_year.total, 2));
00818 font_chartsm.right_put( xColumn5, y+2, m.format(finance.projected_expense_array[i].this_year.percent, 24));
00819 }
00820 else {
00821 font_chartsm.disp( x, y,game_str_res.financial_report_str(i+REVENUE_ITEM_COUNT),xColumn2);
00822 font_chartsm.right_put( xColumn1, y+2, m.format(finance.projected_expense_array[i].this_year.faculty, 2));
00823 font_chartsm.right_put( xColumn2, y+2, m.format(finance.projected_expense_array[i].this_year.staff, 2));
00824 font_chartsm.right_put( xColumn3, y+2, m.format(finance.projected_expense_array[i].this_year.other, 2));
00825 font_chartsm.right_put( xColumn4, y+2, m.format(finance.projected_expense_array[i].this_year.total, 2));
00826 font_chartsm.right_put( xColumn5, y+2, m.format(finance.projected_expense_array[i].this_year.percent, 24));
00827 }
00828 }
00829 else if(recNo==REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+3) {
00830 font_chart_blue_sm.disp( x, y," Total operating expenditures", xColumn1);
00831 font_chart_blue_sm.right_put( xColumn1, y+2, m.format(finance.projected_total_operating_expense.this_year.faculty, 2));
00832 font_chart_blue_sm.right_put( xColumn2, y+2, m.format(finance.projected_total_operating_expense.this_year.staff, 2));
00833 font_chart_blue_sm.right_put( xColumn3, y+2, m.format(finance.projected_total_operating_expense.this_year.other, 2));
00834 font_chart_blue_sm.right_put( xColumn4, y+2, m.format(finance.projected_total_operating_expense.this_year.total, 2));
00835 font_chart_blue_sm.right_put( xColumn5, y+2, m.format(finance.projected_total_operating_expense.this_year.percent, 24));
00836 }
00837 else if((recNo>REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+3) && (recNo<=REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+5)) {
00838 i=recNo-6-REVENUE_ITEM_COUNT;
00839 font_chartsm.disp( x, y,game_str_res.financial_report_str(i+REVENUE_ITEM_COUNT),xColumn2);
00840 font_chartsm.right_put( xColumn3, y+2, m.format(finance.projected_expense_array[i].this_year.other, 2));
00841 font_chartsm.right_put( xColumn4, y+2, m.format(finance.projected_expense_array[i].this_year.total, 2));
00842 font_chartsm.right_put( xColumn5, y+2, m.format(finance.projected_expense_array[i].this_year.percent, 24));
00843 }
00844 else if(recNo==REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+6) {
00845 font_chart_blue_sm.disp( x, y," Total uses of funds", xColumn1);
00846 font_chart_blue_sm.right_put( xColumn1, y+2, m.format(finance.projected_total_expense.this_year.faculty, 2));
00847 font_chart_blue_sm.right_put( xColumn2, y+2, m.format(finance.projected_total_expense.this_year.staff, 2));
00848 font_chart_blue_sm.right_put( xColumn3, y+2, m.format(finance.projected_total_expense.this_year.other, 2));
00849 font_chart_blue_sm.right_put( xColumn4, y+2, m.format(finance.projected_total_expense.this_year.total, 2));
00850 font_chart_blue_sm.right_put( xColumn5, y+2, m.format(finance.projected_total_expense.this_year.percent, 24));
00851 }
00852 else if(recNo==REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+7) {
00853 double percent1,percent2,percent3,percent4;
00854
00855
00856
00857
00858 percent1=100*finance.projected_total_expense.this_year.faculty/finance.projected_total_expense.this_year.total;
00859 percent2=100*finance.projected_total_expense.this_year.staff/finance.projected_total_expense.this_year.total;
00860 percent3=100*finance.projected_total_expense.this_year.other/finance.projected_total_expense.this_year.total;
00861 percent4=100;
00862
00863 font_chartsm.disp( x, y, "\tPercent of total uses", xColumn1);
00864 font_chartsm.right_put( xColumn1, y+2, m.format(percent1, 24));
00865 font_chartsm.right_put( xColumn2, y+2, m.format(percent2, 24));
00866 font_chartsm.right_put( xColumn3, y+2, m.format(percent3, 24));
00867 font_chartsm.right_put( xColumn4, y+2, m.format(percent4, 24));
00868
00869 }
00870 else if(recNo==REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+8) {
00871 font_chartsm.disp( x, y," Surplus (deficit)", xColumn1);
00872 if(finance.this_year.surplus_deficit>0)
00873 font_chart_green_sm.right_put( xColumn4, y+2, m.format(finance.this_year.surplus_deficit, 2));
00874 else
00875 font_chart_red_sm.right_put( xColumn4, y+2, m.format(finance.this_year.surplus_deficit, 2));
00876 }
00877 }
00878
00879
00880
00881 #if(GAME_VERSION>=200)
00882
00883
00884
00885
00886 void export_fin_rep_case2( File *filePtr ) {
00887
00888 int tyear = info.financial_year();
00889 WRITE_STR_FIELD(filePtr, "Present Year : " ); WRITE_FIELD_SEPARATOR(filePtr);
00890 WRITE_NUM_FIELD(filePtr, tyear); WRITE_RECORD_SEPARATOR(filePtr);
00891
00892 WRITE_STR_FIELD(filePtr, "Revenue"); WRITE_FIELD_SEPARATOR(filePtr);
00893 WRITE_FIELD_SEPARATOR(filePtr);
00894 WRITE_STR_FIELD(filePtr, "Direct"); WRITE_FIELD_SEPARATOR(filePtr);
00895 WRITE_STR_FIELD(filePtr, "Indirect"); WRITE_FIELD_SEPARATOR(filePtr);
00896 WRITE_STR_FIELD(filePtr, "Total"); WRITE_FIELD_SEPARATOR(filePtr);
00897 WRITE_STR_FIELD(filePtr, "% sources"); WRITE_RECORD_SEPARATOR(filePtr);
00898
00899
00900 for( int i = 0; i < REVENUE_ITEM_COUNT; ++i ) {
00901 WRITE_STR_FIELD(filePtr, game_str_res.financial_report_str(i)); WRITE_FIELD_SEPARATOR(filePtr);
00902 WRITE_FIELD_SEPARATOR(filePtr);
00903
00904 if( i == AC_SPONSORED_RESEARCH_REVENUE ) {
00905 WRITE_NUM_FIELD(filePtr, finance.projected_revenue_array[i].this_year.direct); WRITE_FIELD_SEPARATOR(filePtr);
00906 WRITE_NUM_FIELD(filePtr, finance.projected_revenue_array[i].this_year.indirect); WRITE_FIELD_SEPARATOR(filePtr);
00907 }
00908 else {
00909 WRITE_FIELD_SEPARATOR(filePtr);
00910 WRITE_FIELD_SEPARATOR(filePtr);
00911 }
00912 WRITE_NUM_FIELD(filePtr, finance.projected_revenue_array[i].this_year.total); WRITE_FIELD_SEPARATOR(filePtr);
00913
00914 if( i==AC_GROSS_TUITION_INCOME||i==AC_FINANCIAL_AID ) {
00915
00916 }
00917 else {
00918 WRITE_NUM_FIELD(filePtr, 0.01*finance.projected_revenue_array[i].this_year.percent);
00919 }
00920 WRITE_RECORD_SEPARATOR(filePtr);
00921 }
00922
00923 WRITE_STR_FIELD(filePtr, " Total sources of funds"); WRITE_FIELD_SEPARATOR(filePtr);
00924 WRITE_FIELD_SEPARATOR(filePtr);
00925 WRITE_FIELD_SEPARATOR(filePtr);
00926 WRITE_FIELD_SEPARATOR(filePtr);
00927 WRITE_NUM_FIELD(filePtr, finance.projected_total_revenue.this_year.total); WRITE_FIELD_SEPARATOR(filePtr);
00928 WRITE_NUM_FIELD(filePtr, 0.01*finance.projected_total_revenue.this_year.percent); WRITE_RECORD_SEPARATOR(filePtr);
00929
00930
00931 WRITE_STR_FIELD(filePtr, "Expenditures"); WRITE_FIELD_SEPARATOR(filePtr);
00932 WRITE_STR_FIELD(filePtr, "AY faculty compensation"); WRITE_FIELD_SEPARATOR(filePtr);
00933 WRITE_STR_FIELD(filePtr, "Staff compensation"); WRITE_FIELD_SEPARATOR(filePtr);
00934 WRITE_STR_FIELD(filePtr, "Other expenditures"); WRITE_FIELD_SEPARATOR(filePtr);
00935 WRITE_STR_FIELD(filePtr, "Total"); WRITE_FIELD_SEPARATOR(filePtr);
00936 WRITE_STR_FIELD(filePtr, "% uses"); WRITE_RECORD_SEPARATOR(filePtr);
00937
00938
00939 for( i=0; i < EXPENSE_ITEM_COUNT; ++i ) {
00940 WRITE_STR_FIELD(filePtr, game_str_res.financial_report_str(i+REVENUE_ITEM_COUNT)); WRITE_FIELD_SEPARATOR(filePtr);
00941 if( i==AC_ACADEMIC_DEPARTMENTS || i==AC_SPONSORED_RESEARCH_EXPENSE ) {
00942 WRITE_NUM_FIELD(filePtr, finance.projected_expense_array[i].this_year.faculty);
00943 }
00944 WRITE_FIELD_SEPARATOR(filePtr);
00945 if( i < OPERATING_EXPENSE_ITEM_COUNT ) {
00946 WRITE_NUM_FIELD(filePtr, finance.projected_expense_array[i].this_year.staff);
00947 }
00948 WRITE_FIELD_SEPARATOR(filePtr);
00949 WRITE_NUM_FIELD(filePtr, finance.projected_expense_array[i].this_year.other); WRITE_FIELD_SEPARATOR(filePtr);
00950 WRITE_NUM_FIELD(filePtr, finance.projected_expense_array[i].this_year.total); WRITE_FIELD_SEPARATOR(filePtr);
00951 WRITE_NUM_FIELD(filePtr, 0.01*finance.projected_expense_array[i].this_year.percent); WRITE_RECORD_SEPARATOR(filePtr);
00952
00953 if( i==OPERATING_EXPENSE_ITEM_COUNT-1 ) {
00954
00955 WRITE_STR_FIELD(filePtr, " Total operating expenditures"); WRITE_FIELD_SEPARATOR(filePtr);
00956 WRITE_NUM_FIELD(filePtr, finance.projected_total_operating_expense.this_year.faculty); WRITE_FIELD_SEPARATOR(filePtr);
00957 WRITE_NUM_FIELD(filePtr, finance.projected_total_operating_expense.this_year.staff); WRITE_FIELD_SEPARATOR(filePtr);
00958 WRITE_NUM_FIELD(filePtr, finance.projected_total_operating_expense.this_year.other); WRITE_FIELD_SEPARATOR(filePtr);
00959 WRITE_NUM_FIELD(filePtr, finance.projected_total_operating_expense.this_year.total); WRITE_FIELD_SEPARATOR(filePtr);
00960 WRITE_NUM_FIELD(filePtr, 0.01*finance.projected_total_operating_expense.this_year.percent); WRITE_RECORD_SEPARATOR(filePtr);
00961 }
00962 }
00963
00964
00965 WRITE_STR_FIELD(filePtr, " Total uses of funds" ); WRITE_FIELD_SEPARATOR(filePtr);
00966 WRITE_NUM_FIELD(filePtr, finance.projected_total_expense.this_year.faculty ); WRITE_FIELD_SEPARATOR(filePtr);
00967 WRITE_NUM_FIELD(filePtr, finance.projected_total_expense.this_year.staff); WRITE_FIELD_SEPARATOR(filePtr);
00968 WRITE_NUM_FIELD(filePtr, finance.projected_total_expense.this_year.other); WRITE_FIELD_SEPARATOR(filePtr);
00969 WRITE_NUM_FIELD(filePtr, finance.projected_total_expense.this_year.total); WRITE_FIELD_SEPARATOR(filePtr);
00970 WRITE_NUM_FIELD(filePtr, 0.01*finance.projected_total_expense.this_year.percent); WRITE_RECORD_SEPARATOR(filePtr);
00971
00972
00973 double percent1,percent2,percent3,percent4;
00974 percent1=finance.projected_total_expense.this_year.faculty/finance.projected_total_expense.this_year.total;
00975 percent2=finance.projected_total_expense.this_year.staff/finance.projected_total_expense.this_year.total;
00976 percent3=finance.projected_total_expense.this_year.other/finance.projected_total_expense.this_year.total;
00977 percent4=1.0;
00978
00979 WRITE_STR_FIELD(filePtr, " Percent of total uses" ); WRITE_FIELD_SEPARATOR(filePtr);
00980 WRITE_NUM_FIELD(filePtr, percent1); WRITE_FIELD_SEPARATOR(filePtr);
00981 WRITE_NUM_FIELD(filePtr, percent2); WRITE_FIELD_SEPARATOR(filePtr);
00982 WRITE_NUM_FIELD(filePtr, percent3); WRITE_FIELD_SEPARATOR(filePtr);
00983 WRITE_NUM_FIELD(filePtr, percent4); WRITE_FIELD_SEPARATOR(filePtr);
00984 WRITE_RECORD_SEPARATOR(filePtr);
00985
00986
00987 WRITE_STR_FIELD(filePtr, " Surplus (deficit)"); WRITE_FIELD_SEPARATOR(filePtr);
00988 WRITE_FIELD_SEPARATOR(filePtr);
00989 WRITE_FIELD_SEPARATOR(filePtr);
00990 WRITE_FIELD_SEPARATOR(filePtr);
00991 WRITE_NUM_FIELD(filePtr, finance.this_year.surplus_deficit); WRITE_FIELD_SEPARATOR(filePtr);
00992 WRITE_RECORD_SEPARATOR(filePtr);
00993 }
00994
00995
00996 #endif
00997
00998
00999
01000
01001
01002
01003 static void fin_rep_case3(int recNo,int x, int y) {
01004 int i;
01005
01006 int xColumn1=370, xColumn2=470, xColumn3=570, xColumn4=670, xColumn5=740;
01007
01008
01009 if(recNo==1) {
01010
01011
01012 int tyear=info.financial_year();
01013
01014 String str;
01015 str="Next Year : Year ";
01016
01017 str+=m.format(tyear+1,4);
01018
01019
01020
01021
01022 font_charts.put(xColumn1-70,y+2,str.str_buf);
01023 return;
01024 }
01025 recNo--;
01026
01027 if(recNo==1) {
01028 font_chart_red_sm.disp( x, y, "Revenue", x+200 );
01029 font_chart_red_sm.right_put( xColumn2, y+2, "Direct");
01030 font_chart_red_sm.right_put( xColumn3, y+2, "Indirect");
01031 font_chart_red_sm.right_put( xColumn4, y+2, "Total");
01032 font_chart_red_sm.right_put( xColumn5, y+2, "% sources");
01033 }
01034 else if((recNo>1) && (recNo<=REVENUE_ITEM_COUNT+1)) {
01035 i=recNo-2;
01036 if(recNo==5) {
01037 font_chartsm.disp( x, y, game_str_res.financial_report_str(i), xColumn1);
01038 font_chartsm.right_put( xColumn2, y+2, m.format(finance.projected_revenue_array[i].next_year.direct, 2));
01039 font_chartsm.right_put( xColumn3, y+2, m.format(finance.projected_revenue_array[i].next_year.indirect, 2));
01040 font_chartsm.right_put( xColumn4, y+2, m.format(finance.projected_revenue_array[i].next_year.total, 2));
01041 font_chartsm.right_put( xColumn5, y+2, m.format(finance.projected_revenue_array[i].next_year.percent, 24));
01042 }
01043 if((recNo==2)||(recNo==3)) {
01044 font_chartsm.disp( x, y, game_str_res.financial_report_str(i), xColumn2);
01045 font_chartsm.right_put( xColumn4, y+2, m.format(finance.projected_revenue_array[i].next_year.total, 2));
01046 }
01047 else {
01048 font_chartsm.disp( x, y, game_str_res.financial_report_str(i), xColumn2);
01049 font_chartsm.right_put( xColumn4, y+2, m.format(finance.projected_revenue_array[i].next_year.total, 2));
01050 font_chartsm.right_put( xColumn5, y+2, m.format(finance.projected_revenue_array[i].next_year.percent, 24));
01051 }
01052 }
01053 else if(recNo==REVENUE_ITEM_COUNT+2) {
01054 font_chart_blue_sm.disp( x, y," Total sources of funds", xColumn1);
01055 font_chart_blue_sm.right_put( xColumn4, y+2, m.format(finance.projected_total_revenue.next_year.total, 2));
01056 font_chart_blue_sm.right_put( xColumn5, y+2, m.format(finance.projected_total_revenue.next_year.percent, 24));
01057 }
01058 else if(recNo==REVENUE_ITEM_COUNT+3) {
01059 font_chart_red_sm.right_put( xColumn1, y+2, "AY faculty");
01060 font_chart_red_sm.right_put( xColumn2, y+2, "Staff");
01061 font_chart_red_sm.right_put( xColumn3, y+2, "Other");
01062 }
01063 else if(recNo==REVENUE_ITEM_COUNT+4) {
01064 font_chart_red_sm.disp( x, y, "Expenditures", x+200 );
01065 font_chart_red_sm.right_put( xColumn1, y+2, "compensation");
01066 font_chart_red_sm.right_put( xColumn2, y+2, "compensation");
01067 font_chart_red_sm.right_put( xColumn3, y+2, "expenditures");
01068 font_chart_red_sm.right_put( xColumn4, y+2, "Total");
01069 font_chart_red_sm.right_put( xColumn5, y+2, "% uses");
01070 }
01071 else if((recNo>=REVENUE_ITEM_COUNT+5) && (recNo<REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+3)) {
01072 i=recNo-5-REVENUE_ITEM_COUNT;
01073 if((recNo>=REVENUE_ITEM_COUNT+7) && (recNo<REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+3)) {
01074 font_chartsm.disp( x, y,game_str_res.financial_report_str(i+REVENUE_ITEM_COUNT),xColumn1);
01075 font_chartsm.right_put( xColumn2, y+2, m.format(finance.projected_expense_array[i].next_year.staff, 2));
01076 font_chartsm.right_put( xColumn3, y+2, m.format(finance.projected_expense_array[i].next_year.other, 2));
01077 font_chartsm.right_put( xColumn4, y+2, m.format(finance.projected_expense_array[i].next_year.total, 2));
01078 font_chartsm.right_put( xColumn5, y+2, m.format(finance.projected_expense_array[i].next_year.percent, 24));
01079 }
01080 else {
01081 font_chartsm.disp( x, y,game_str_res.financial_report_str(i+REVENUE_ITEM_COUNT),xColumn1);
01082 font_chartsm.right_put( xColumn1, y+2, m.format(finance.projected_expense_array[i].next_year.faculty, 2));
01083 font_chartsm.right_put( xColumn2, y+2, m.format(finance.projected_expense_array[i].next_year.staff, 2));
01084 font_chartsm.right_put( xColumn3, y+2, m.format(finance.projected_expense_array[i].next_year.other, 2));
01085 font_chartsm.right_put( xColumn4, y+2, m.format(finance.projected_expense_array[i].next_year.total, 2));
01086 font_chartsm.right_put( xColumn5, y+2, m.format(finance.projected_expense_array[i].next_year.percent, 24));
01087 }
01088 }
01089 else if(recNo==REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+3) {
01090 font_chart_blue_sm.disp( x, y," Total operating expenditures", xColumn1);
01091 font_chart_blue_sm.right_put( xColumn1, y+2, m.format(finance.projected_total_operating_expense.next_year.faculty, 2));
01092 font_chart_blue_sm.right_put( xColumn2, y+2, m.format(finance.projected_total_operating_expense.next_year.staff, 2));
01093 font_chart_blue_sm.right_put( xColumn3, y+2, m.format(finance.projected_total_operating_expense.next_year.other, 2));
01094 font_chart_blue_sm.right_put( xColumn4, y+2, m.format(finance.projected_total_operating_expense.next_year.total, 2));
01095 font_chart_blue_sm.right_put( xColumn5, y+2, m.format(finance.projected_total_operating_expense.next_year.percent, 24));
01096 }
01097 else if((recNo>REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+3) && (recNo<=REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+5)) {
01098 i=recNo-6-REVENUE_ITEM_COUNT;
01099 font_chartsm.disp( x, y,game_str_res.financial_report_str(i+REVENUE_ITEM_COUNT),xColumn1);
01100 font_chartsm.right_put( xColumn3, y+2, m.format(finance.projected_expense_array[i].next_year.other, 2));
01101 font_chartsm.right_put( xColumn4, y+2, m.format(finance.projected_expense_array[i].next_year.total, 2));
01102 font_chartsm.right_put( xColumn5, y+2, m.format(finance.projected_expense_array[i].next_year.percent, 24));
01103 }
01104 else if(recNo==REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+6) {
01105 font_chart_blue_sm.disp( x, y," Total uses of funds", xColumn1);
01106 font_chart_blue_sm.right_put( xColumn1, y+2, m.format(finance.projected_total_expense.next_year.faculty, 2));
01107 font_chart_blue_sm.right_put( xColumn2, y+2, m.format(finance.projected_total_expense.next_year.staff, 2));
01108 font_chart_blue_sm.right_put( xColumn3, y+2, m.format(finance.projected_total_expense.next_year.other, 2));
01109 font_chart_blue_sm.right_put( xColumn4, y+2, m.format(finance.projected_total_expense.next_year.total, 2));
01110 font_chart_blue_sm.right_put( xColumn5, y+2, m.format(finance.projected_total_expense.next_year.percent, 24));
01111 }
01112 else if(recNo==REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+7) {
01113 double percent1,percent2,percent3,percent4;
01114
01115
01116
01117
01118 percent1=100*finance.projected_total_expense.next_year.faculty/finance.projected_total_expense.next_year.total;
01119 percent2=100*finance.projected_total_expense.next_year.staff/finance.projected_total_expense.next_year.total;
01120 percent3=100*finance.projected_total_expense.next_year.other/finance.projected_total_expense.next_year.total;
01121 percent4=100;
01122
01123 font_chartsm.disp( x, y, "\tPercent of total uses", xColumn1);
01124 font_chartsm.right_put( xColumn1, y+2, m.format(percent1, 24));
01125 font_chartsm.right_put( xColumn2, y+2, m.format(percent2, 24));
01126 font_chartsm.right_put( xColumn3, y+2, m.format(percent3, 24));
01127 font_chartsm.right_put( xColumn4, y+2, m.format(percent4, 24));
01128
01129 }
01130 else if(recNo==REVENUE_ITEM_COUNT+EXPENSE_ITEM_COUNT+8) {
01131 font_chartsm.disp( x, y," Surplus (deficit)", xColumn1);
01132 if(finance.next_year.surplus_deficit>0)
01133 font_chart_green_sm.right_put( xColumn4, y+2, m.format(finance.next_year.surplus_deficit, 2));
01134 else
01135 font_chart_red_sm.right_put( xColumn4, y+2, m.format(finance.next_year.surplus_deficit, 2) );
01136 }
01137 }
01138
01139
01140
01141 #if(GAME_VERSION>=200)
01142
01143
01144
01145
01146 void export_fin_rep_case3( File *filePtr ) {
01147
01148 int tyear = info.financial_year();
01149 WRITE_STR_FIELD(filePtr, "Next Year : " ); WRITE_FIELD_SEPARATOR(filePtr);
01150 WRITE_NUM_FIELD(filePtr, tyear+1); WRITE_RECORD_SEPARATOR(filePtr);
01151
01152 WRITE_STR_FIELD(filePtr, "Revenue"); WRITE_FIELD_SEPARATOR(filePtr);
01153 WRITE_FIELD_SEPARATOR(filePtr);
01154 WRITE_STR_FIELD(filePtr, "Direct"); WRITE_FIELD_SEPARATOR(filePtr);
01155 WRITE_STR_FIELD(filePtr, "Indirect"); WRITE_FIELD_SEPARATOR(filePtr);
01156 WRITE_STR_FIELD(filePtr, "Total"); WRITE_FIELD_SEPARATOR(filePtr);
01157 WRITE_STR_FIELD(filePtr, "% sources"); WRITE_RECORD_SEPARATOR(filePtr);
01158
01159
01160 for( int i = 0; i < REVENUE_ITEM_COUNT; ++i ) {
01161 WRITE_STR_FIELD(filePtr, game_str_res.financial_report_str(i)); WRITE_FIELD_SEPARATOR(filePtr);
01162 WRITE_FIELD_SEPARATOR(filePtr);
01163
01164 if( i == AC_SPONSORED_RESEARCH_REVENUE ) {
01165 WRITE_NUM_FIELD(filePtr, finance.projected_revenue_array[i].next_year.direct); WRITE_FIELD_SEPARATOR(filePtr);
01166 WRITE_NUM_FIELD(filePtr, finance.projected_revenue_array[i].next_year.indirect); WRITE_FIELD_SEPARATOR(filePtr);
01167 }
01168