DIR : /home/kozerus/public_html/ko_center/ko_center.pl

/home/kozerus/public_html/ko_center

#!/usr/bin/perl
#!/usr/bin/perl -w

#	20121202_2300 jk ko_center_win.pl for ole 
#	20121127_1130 jk ungrep 
#	20121127_1130 jk plan2plans koplan insert,update 
#	20121126_0900 jk plan2plans items
#	20121126_0900 jk plan2plans sumplans sumcabs
#	20121126_0900 jk plan2plans 
#	20121122_2000 jk sqlq
#	20121122_2000 jk n2l
#	20121122_1900 jk xlsx2csv
#	20121122_1900 jk xls2csv
#	20121120_2200 jk dtmdta
#	20121120_2200 jk db2saic
#	20121120_2200 jk ol2csv
#	20121120_2200 jk csv2db3
#	20121120_2200 jk xls2pdf
#	20121120_2200 jk db2saic
#	20121119_0230 jk db2kxls email & inv
#	20121118_1915 jk db2kxls qbegdt, pbegdt, substt( mycd, 0,1 ); csvout
#	20121116_0600 jk db2kxls range errors
#	20121115_2400 jk dtmdta
#	20121115_2400 jk db2kxls
#	20121111_1200 jk dt2kxls
#	20121107_1830 jk ole_ol_list
#	20121106_1030 jk ole_xls
#	20121106_1030 jk xls2pdf
#	20121106_1030 jk ole_word
#	20121106_1030 jk ol2csv
#	20121106_1030 jk sql_query

use lib "/usr/lib64/perl5";
use File::Basename;
use File::Copy;
use Cwd;
use DBI;

# use Win32::OLE qw(in with);
# use Win32::OLE::Const 'Microsoft Excel';
# use Win32::OLE::Variant;

	$dbfile="ko_center.db3";

	main();

sub main() {
	&startup();
	if  ( $#ARGV == -1 ) {
		print "$progid $version $dttm";
		print "\n";
##		print "$progid <jobid>\n";
		print "$porgid mkwl|catwl|viwl|wimwl|runwl|go|runjob <jobid>\n";
		print "\n";
		print "$progid mkwl|catwl|viwl|wimwl|runwl|go|runjob <jobid> <sitecode>\n";
		print "\n";

		print "help_ole \n";
		print "\n";
		print "pdf2info <pdffil>	\n";
		print "xls2pdf <xlsfil>	\n";
		print "ts2csv mkwl|catwl|vimwl|runwl	# readonly\n";
		print "ts2csv runjob <xlsfil>	# readonly\n";
#		print "db2kxls \"yyyy-mm-dd|hhhh|hhhh|hr|cd|desc\"	#  select from tds readonly\n";
#		print "db2kxls \"yyyy-mm-dd|hhhh|hhhh|hr|cd|desc\"	#  select from tds readonly\n";
		print "dtmdta  <fy> <p> <q>	#  select from tds readonly\n";
		print "db2kxls <fy> <p> <q>	#  select from tds readonly\n";
		print "\n";
		print "csv2ts <xlsfil>	# update\n";
		print "\n";
		print "db2doc <docfil>	# update\n";
		print "\n";
		print "xl2csv <xlsfil>	# excel to csv\n";
		print "ol2csv <csvfil>	# outlook to csv\n";
		print "ol2db3 <db3fil>	# outlook to db3\n";
		print "csv2db3 <csvfil>	# csv to db3\n";
		print "\n";
		print "test		# xls\n";
		print "test1 <xlsfil>	# xls\n";
		print "test2 <xlsfil>	# xls\n";
		print "\n";
		print "ole_xls\n";
		print "ole_xls_saveas\n";
		print "ole_ts\n";
		print "ole_word\n";
		print "ole_ol\n";
		print "ole_ol_folders\n";
		print "ole_ol_list\n";
		print "xls2pdf\n";
		print "pdf2info\n";
		print "\n";
		print "cr_periods		# xls\n";
		print "cr_hrs			# xls\n";
		print "cr_ts			# xls\n";
		print "test		# xls\n";
		print "save		# xls\n";
		print "\n";
		print "n2l\n";
		print "sqlq\n";
		print "plan2plans\n";
		print "plan2plans sumplans\n";
		print "plan2plans sumcabs <planid>\n";
		print "plan2plans items <planid>\n";
		print "\n";
		print "ungrep\n";
		return;
		}

	$option = $ARGV[0];
	$option1 = $ARGV[1];
	$option2 = $ARGV[2];
	$option3 = $ARGV[3];
	$option4 = $ARGV[4];
	$option5 = $ARGV[5];
	$option6 = $ARGV[6];
	$option7 = $ARGV[7];

	if( "$option" eq "save" ) {
		$plfil="ko_center.pl";
		$phpfil="ko_center.php";
		$db3fil="ko_center.db3";

		$plfil_dttm="ko_center_$dttm.pl";
		$phpfil_dttm="ko_center_$dttm.php";
		$db3fil_dttm="ko_center_$dttm.db3";

		$cmd_cp_plfil="cp -p $plfil $plfil_dttm";
		$cmd_cp_phpfil="cp -p $phpfil $phpfil_dttm";
		$cmd_cp_db3fil="cp -p $db3fil $db3fil_dttm";

		printf( "$progid $dttm MSG: save $cmd_cp_plfil \n" );
		printf( "$progid $dttm MSG: save $cmd_cp_phpfil \n" );
		printf( "$progid $dttm MSG: save $cmd_cp_db3fil \n" );

		system( "cp -p $plfil $plfil_dttm" );
		system( "cp -p $phpfil $phpfil_dttm" );
		system( "cp -p $db3fil $db3fil_dttm" );
		exit;
		}
 
	if( "$option" eq "ol2db3" ) {
		&ol2db3( $option1, $option2, $option3, $option4);
		exit;
		}
 
	if( "$option" eq "csv2db3" ) {
		&csv2db3( $option1, $option2, $option3, $option4);
		exit;
		}
 
	if( "$option" eq "xl2csv" ) {&xl2csv( $option1, $option2, $option3); exit;}
	if( "$option" eq "ol2csv" ) {&ol2csv( $option1, $option2, $option3); exit;}


	if( "$option" eq "ole_ol" ) { ole_ol($option1, $option2, $option3); exit;}
	if( "$option" eq "ole_ol_list" ) { ole_ol_list($option1, $option2, $option3); exit;}
	if( "$option" eq "ole_ol_folders" ) { ole_ol_folders($option1, $option2, $option3); exit;}
	if( "$option" eq "ole_xls" ) { ole_xls($option1, $option2, $option3); exit;}
	if( "$option" eq "ole_ts" ) { ole_xls_ts($option1, $option2, $option3); exit;}
	if( "$option" eq "ole_xls_saveas" ) { ole_xls_saveas($option1, $option2, $option3); exit;}
	if( "$option" eq "ole_word" ) { ole_word($option1, $option2, $option3); exit;}
	if( "$option" eq "xls2pdf" ) { xls2pdf($option1, $option2, $option3); exit;}
	if( "$option" eq "pdf2info" ) { pdf2info($option1, $option2, $option3); exit;}

	if( "$option" eq "test" ) { test($option1, $option2, $option3); exit;}
	if( "$option" eq "test1" ) { test1($option1, $option2, $option3); exit;}
	if( "$option" eq "test2" ) { test2($option1, $option2, $option3); exit;}
	if( "$option" eq "test3" ) { test3($option1, $option2, $option3); exit;}
	if( "$option" eq "go" ) { go($option1, $option2, $option3); exit;}
	if( "$option" eq "ungrep" ) { ungrep($option1, $option2, $option3); exit;}

	if( "$option" eq "cr_periods" ) { sql_cr_periods( $sqlbin, $sqldb, "periods" ); exit;}
	if( "$option" eq "cr_hrs" ) { sql_cr_hrs($sqlbin, $sqldb, "hrs"); exit;}
	if( "$option" eq "cr_ts" ) { sql_cr_ts($sqlbin, $sqldb, "ts"); exit;}

	if( "$option" eq "help_ole" ) { help_ole(); exit; }
	if( "$option" eq "db2doc" ) {
		$docfil=$option1;
		db2doc( $option1, $option2, $option3 );
		exit;
		}


# xls read only
#	if( "$option" eq "ts2csv" ) {
#		$xlsfil=$option1;
#		ts2csv( $option1, $option2, $option3 );
#		exit;
#		}

# xls update
	if( "$option" eq "csv2ts" ) {
		$xlsfil=$option1;
		csv2ts( $option1, $option2, $option3 );
		exit;
		}

	if( "$option" eq "dt2saic" ) {
##		printf( "$progid $dttm MSG_135:  [$option1][$option2]\n" );
		dt2saic( $option1, $option2, $option3 );
		exit;
		}

	if( "$option" eq "dtmdta" ) {
##		printf( "$progid $dttm MSG_135:  [$option1][$option2]\n" );
##		sub dtmdta( $fy, $p, $q, $begdt, $enddt, $dtm_data, $options );
##		dtmdta( $option1, $option2, $option3 );
##		dtmdta( $fy, $p, $q, $begdt, $enddt, $dtm_data, $options );
		dtmdta( $option1, $option2, $option3, $option4, $option5, $option6, $option7 );
		exit;
		}
	if( "$option" eq "db2saic" ) {
		printf( "$progid $dttm MSG_135:  [$option1][$option2][$option3][$option4][$option5]\n" );
##		db2saic( $option1, $option2, $option3 );
		db2saic( $option1, $option2, $option3, $option4, $option5, $option6, $option7 );
		exit;
		}

	if( "$option" eq "db2ts" ) {
##		printf( "$progid $dttm MSG_145:  [$option1][$option2]\n" );
		db2ts( $option1, $option2, $option3 );
		exit;
		}

        if( "$option" eq "n2l" ) {
                $n=$option1;
                $l=n2l( $n );
                printf( "$progid $dttm  n2l MSG_205: n=[$n] [$l]\n" );
                exit;
                }

        if( "$option" eq "sqlq" ) {
		$sqlcmd=q{ select * from kohw_hrc_defrag; };
		if(  "$option1" eq "1" ) {
			$sqlcmd=q{ select myid,mydt,planid,cab,cab0,cab1,amps from kohw_hrc_defrag; };
			}
                $rows=sqlq( $sqldb, $sqlcmd, $sqltbl );
                printf( "$progid $dttm  sqlq MSG_225: sqlcmd=[$sqlcmdn] [$rows]\n" );
                exit;
                }

        if( "$option" eq "plan2plans" ) {
                $status=plan2plans( $option1, $option2, $option3 );
                printf( "$progid $dttm  plan2plans MSG_210: n=[$n] [$l]\n" );
                exit;
                }

        if( "$option" eq "xls2csv" ) {
                $xlsfil=$option1;
                printf( "$progid $dttm  xls2csv MSG_211:  [$option1][$option2]\n" );
                xlsx2csv( $xlsfil );
#               xls2csv_runjob( $xlsfil );
                exit;
                }

        if( "$option" eq "xlsx2csv" ) {
                $xlsxfil=$option1;
                printf( "$progid $dttm  xlsx2csv MSG_200:  [$option1][$option2]\n" );
                xlsx2csv( $xlsxfil );
                exit;
                }

	if( "$option" eq "ts2csv" ) {
		$ts2csv_wlfile="ko_ole_ts2csv.wl";
		$ts2csv_wlfile="$progid.wl";
#		printf( "ts2csv $dttm $uname MSG_100:  BEG wlfile=[$ts2csv_wlfile] ==============================\n" );
#		printf( "xls2csv $dttm $uname MSG: BEG xls2csv_logfile=[$xls2csv_logfile] ==============================\n" );


		if( "$option1" eq "mkwl" ) {
# wlfile format=e:/perms/ftp/pris/ihv12/a2i/todo_a2i_A00002.csv
#			$cmd="ls j:/kxls/weekly/*.xls > $ts2csv_wlfile";
			$cmd="ls j:/kxls/oy3/*.xls > $ts2csv_wlfile";
			print( "ipc ts2csv $uname MSG:  cmd=[$cmd]\n" );
			print( "ipc ts2csv mkwl $dttm $uname MSG: cmd=[$cmd]\n");
			print( "ipc ts2csv MKWL BUGS $dttm $uname MSG: cmd=[$cmd]\n");
			system( $cmd );
#			&ts2csv_mkwl();

#			save_wlfile( $ts2csv_wlfile );
			exit;
			}
		if( "$option1" eq "vimwl" ) {
			$vi="vim";
			$cmd="$vi $ts2csv_wlfile";
			print( "$progid ts2csv vimwl $dttm MSG_BEG: cmd=[$cmd]\n");
			system( $cmd );
			print( "$progid ts2csv vimwl $dttm MSG_END: cmd=[\n$cmd\n]\n");
			exit;
			}

		if( "$option1" eq "catwl" ) {
			$cmd="cat $ts2csv_wlfile";
			print( "$progid ts2csv catwl $dttm MSG_BEG: cmd=[$cmd]\n");
			system( $cmd );
			print( "$progid ts2csv catwl $dttm MSG_END: cmd=[$cmd]\n");
			exit;
			}

		if( "$option1" eq "runwl" ) {
#			$ts2csv_wlfile="$option2";
#			print( "$progid ts2csv runwl $dttm MSG_145: ts2csv_wlfile=[$ts2csv_wlfile]\n" );
			&ts2csv_runwl($ts2csv_wlfile);
			exit;
			}
		if( "$option1" eq "runjob" ) {
			$xlsfil=$option2;
			&ts2csv_runjob($xlsfil);
			exit;
			}
		if( "$option1" eq "go" ) {
			print( "ipc xls2csv go ERR: command pending\n" );
#			&xls2csv_runjob();
			exit;
			}
		}

	if( "$option" eq "pipe" ) { while(<STDIN>) { &pipe($_); } exit;}
	if( "$option" eq "pipe_age" ) { while(<STDIN>) { &pipe_age($_); } exit;}
	if( "$option" eq "datefmt" ) {
		while(<STDIN>) { 
			&pipe_datefmt($_); 
			} 
		exit;
		}

	print( "$progid main go ERR: unsupported command [$option] [$option1][$option2]\n" );
	}


sub startup() {
	$progid="ko_center";
	$version="1.0";
	$dttm=&dttm;
	$xls_templet="J:/ko/bin/ts.xls";
	$xls_templet="J:/kxls/oy3/ko_center_templet.xls";
	$cwd = getcwd();

	$period_range="J3:J3";
	$title_range="J3:J3";
	$title_range2="J6:J6";


	$sat_range="B8:E8";
	$sun_range="F8:I8";
	$mon_range="J8:M8";
	$tue_range="N8:Q8";
	$wed_range="R8:U8";
	$thr_range="V8:Y8";
	$fri_range="Z8:AB8";

	$satdt_range="B8:E8";
	$sundt_range="F8:I8";
	$mondt_range="J8:M8";
	$tuedt_range="N8:Q8";
	$weddt_range="R8:U8";
	$thrdt_range="V8:Y8";
	$fridt_range="Z8:AB8";

# 	$t1[$daynum][$slot];
# 	$t2[$daynum][$slot];
# 	$t12[$daynum][$slot];
# 	$code[$daynum][$slot];

	@week_cols_h1 = qw!B F J N R V Z!;
	@week_cols_h2 = qw!C G K O S W AA!;
	@week_cols_tm = qw!D H L P T X AB!;
	@week_cols_cd = qw!E I M Q U Y AC!;
	$day_row=8;
	$dt_row=9;
	@time_rows = qw!12 13 14 15 16 17 18 19 20 21!;

	$Win32::OLE::Warn = 3;                                # die on errors...
	$sqlbin="j:/ko/bin/sqlite3";
##	$sqldb="s:/xampp/htdocs/ko_center/ko_center.db3";
	$sqldb="/var/www/html/ko_center/ko_center.db3";
	}


sub test( $option1, $option2, $option3 ) {
	$option1=shift; $option2=shift; $option3=shift;
	printf( "$progid test $dttm MSG:  o1=[$option1] o2=[$option2] o3=[$option3]\n");
	}

sub test1( $option1, $option2, $option3 ) {
	$option1=shift; $option2=shift; $option3=shift;
	printf( "$progid test $dttm MSG:  o1=[$option1] o2=[$option2] o3=[$option3]\n");
	}

sub test2( $option1, $option2, $option3 ) {
	$option1=shift; $option2=shift; $option3=shift;
	printf( "$progid test $dttm MSG:  o1=[$option1] o2=[$option2] o3=[$option3]\n");
	}


sub plan2plans( $option1, $option2, $option3 ) {
	$option1=shift; $option2=shift; $option3=shift;

	if( $option1 eq "" ) { 
		$planid="";
		plan2plans_plans(); 
		return; 
		}

	if( $option1 eq "plans" ) { 
		$planid=$option2;
		plan2plans_plans( $planid ); 
		return; 
		}

	if( $option1 eq "cabs" ) { 
		$planid=$option2;
		plan2plans_cabs($planid);  
		return; 
		}

	if( $option1 eq "items" ) { 
		$planid=$option2;
		plan2plans_items($planid);  
		return; 
		}

	if( $option1 eq "cabamps" ) { 
		$planid=$option2;
		plan2plans_cabamps($planid);  
		return; 
		}

	if( $option1 eq "update" ) { 
		$planid=$option2;
		plan2plans_update($sqldb, $sqlcmd, $sqltbl );  
		return; 
		}

	if( $option1 eq "insert" ) { 
		$planid=$option2;
		$myid=""; $mydt=""; $loadmode="a"; $cabnum=0; $cablim=0; $cab="cab"; $cab1="cab1"; $cab2="cab2";
		plan2plans_insert($sqldb, $sqltbl, $myid, $mydt, $planid, $loadmode, $cabnum, $cablim, $cab, $cab1, $cab2, $amps );
		return; 
		}


#		plan2plans_update( $sqldb, $sqlcmd, $sqltbl );

	if( $option1 eq "go" ) { 
		$planid=$option2;
#		printf( "$progid $dttm MSG_440:  planid=[$planid] option1=[$option1]\n" );
		plan2plans_go( $planid );
		return;
		}

	printf( "$progid $dttm plan2plans ERR_440:  option1=[$option1] option2=[$option2]\n" );
	return;
	}

sub plan2plans_go( $planid) {
	$planid=shift;

	$itemsnum=0; $itemslim=""; 
	$cabsnum=0; $cabslim="";
	$sampsnum=0; $sampslim="";
	$samps_limit="300";
	
	printf( "$progid $dttm plan2plans_go MSG_450: planid=[$planid]\n" );

# get list of items
	$sqlcmd_select_items	= "select myid,mydt,planid,loadmode,cabnum,cablim,cab,cab1,cab2,item,amps,sn,hostname,hrctag,os,ip ";
	$sqlcmd_from_items	= "from koplans ";
	if( $planid eq "" ) {
		$sqlcmd_where_items	= sprintf( "where loadmode == '' " );
		}
	else {
		$sqlcmd_where_items	= sprintf( "where planid == \"%s\" and loadmode == '' ", $planid );
		}
	$sqlcmd_order_items	= "order by cast( amps as real ) desc, item, cab, cab1, cab2 ";

	if( $itemslim eq "" ) {
		$sqlcmd_limit 	= "";
		}
	else {
		$sqlcmd_limit 	= "limit $itemslim ";
		}
	$sqlcmd_group_items="";
	$sqlcmd_items = $sqlcmd_select_items;
	$sqlcmd_items .= $sqlcmd_from_items;
	$sqlcmd_items .= $sqlcmd_where_items;
	$sqlcmd_items .= $sqlcmd_order_items;
	$sqlcmd_items .= $sqlcmd_group_items;
	$rows_items= sqlq( $sqldb, $sqlcmd_items, $sqltbl );
	$items_limit=0;
	$items_num=0;
	foreach my $row_items (@$rows_items ) { 
		$items_limit++;
		$items_num++;
		( $myid,$mydt,$planid,$loadmode,$cabnum,$cablim,$cab,$cab1,$cab2,$item,$amps,$sn,$hostname,$hrctag,$os,$ip ) = @$row_items;
##		printf( "$myid,$mydt,$planid,$loadmode,$cabnum,$cablim,$cab,$cab1,$cab2,$item,$amps,$sn,$hostname,$hrctag,$os,$ip\n" );
#		printf( "$progid ITEMS:  $planid|$items_num|$loadmode|$cabnum|$cablim|$cab|$cab1|$cab2|$item|$amps\n" );
		}
	printf( "$progid $dttm plan2plans_go MSMG_490:  items_limit=[$items_limit] sqlcmd_items=[$sqlcmd_items]\n" );

# get list of cabs
	$sqlcmd_select_cabs	= "select myid,mydt,planid,loadmode,cabnum,cablim,cab,cab1,cab2,sum(amps) samps ";
	$sqlcmd_from_cabs	= "from koplans ";
	if( $planid eq "" ) {
		$sqlcmd_where	= sprintf( "where loadmode == '' " );
		}
	else {
		$sqlcmd_where	= sprintf( "where planid == \"%s\" and loadmode == ''  ", $planid );
		}
	$sqlcmd_group_cabs	= "group by myid, mydt, planid, loadmode, cabnum, cablim, cab, cab1, cab2 ";
	$sqlcmd_order_cabs	= "order by myid, mydt, planid, loadmode, cabnum, cablim, samps desc, cab, cab1, cab2 ";

	if( $cabslim eq "" ) { 
		$sqlcmd_limit_cabs="";
		}
	else {
		$sqlcmd_limit_cabs	= "limit $cabslim "; 
		}
	$sqlcmd_where_cabs = "where planid == \"$planid\" and loadmode == '' ";
	$sqlcmd_cabs = $sqlcmd_select_cabs . $sqlcmd_from_cabs . $sqlcmd_where_cabs . $sqlcmd_group_cabs . $sqlcmd_order_cabs . $sqlcmd_limit_cabs;

	$rows_cabs=sqlq( $sqldb, $sqlcmd_cabs, $sqltbl );
	$cabs_limit=0; $cabs_num=0;
	foreach my $row_cabs (@$rows_cabs) { 
		$cabs_limit++; $cabs_num++;
		( $myid,$mydt,$planid,$loadmode,$cabnum,$cablim,$cab,$cab1,$cab2,$samps )  = @$row_cabs; 
		if( $samps >= $samps_limit ) {
#			printf(  "$progid cabs_FULL: $cabs_num|$myid|$mydt|$planid|$loadmode|$cabnum|$cablim|$cab|$cab1|$cab2|$samps\n" );
			}
		else {
#			printf(  "$progid cabs_open: $cabs_num|$myid|$mydt|$planid|$loadmode|$cabnum|$cablim|$cab|$cab1|$cab2|$samps\n" );
			}
		}
	

	printf( "$progid $dttm MSG_510:  items_limit=[$items_limit]\n" );
	printf( "$progid $dttm MSG_510:  cabs_limit=[$cabs_limit]\n" );
	printf( "$progid $dttm MSG_510:  samps_limit=[$samps_limit]\n" );
	

# create plan templets foreach loadmode a,b cabnum<cablim
##	$cabs_limit=4;
##	$loadmode="b";
	$createplans="false";


# delete preexisting plan templets with loadmode not blanke
	$sqlcmd_delete_koplans_loadmode = "delete from koplans where planid=='$planid' and loadmode != ''";
	if( $createplans eq "true" ) {
		$status=sqldo( $sqldb, $sqlcmd_delete_koplans_loadmode, $sqltbl );
		printf( "$progid $dttm MSG_552:  [$status] sqlcmd_delete_koplans_loadmode=[$sqlcmd_delete_koplans_loadmode]\n" );
		}

##	$sqlcmd_cr_koplan = "create table if not exists koplan select * from koplans where planid=='$planid' and loadmode==''";

	for( $plan_cabslim=1; $plan_cabslim<=($cabs_limit); $plan_cabslim++ ) {

		if( $createplans eq "true" ) {
			$sqlcmd_cr_koplan = "create table if not exists koplan as select * from koplans where planid=='$planid' and loadmode=='' ";
			$sqlcmd_insert_koplan = "insert into koplan select * from koplans where planid=='$planid' and loadmode=='' ";
			$sqlcmd_drop_koplan = "drop table if exists koplan";
		
			$sqlcmd_delete_koplans_loadmode = "delete from koplans where planid=='$planid' and loadmode != '' ";
			$sqlcmd_update_koplan_cabsnum = "update koplan set cabnum='$plan_cabslim' where planid=='$planid' and loadmode=='' ";
			$sqlcmd_update_koplan_cabslim = "update koplan set cablim='$cabs_limit' where planid=='$planid' and loadmode=='' ";
			$sqlcmd_update_koplan_cabs2 = "update koplan set cab2='$cabs2' where planid=='$planid' ";
			$sqlcmd_update_koplan_loadmode = "update koplan set loadmode='$loadmode' where planid=='$planid' and loadmode=='' ";
			$sqlcmd_update_koplan_loadmode_a = "update koplan set loadmode='a' where planid=='$planid' and loadmode=='' ";
			$sqlcmd_update_koplan_loadmode_b = "update koplan set loadmode='b' where planid=='$planid' and loadmode=='a' ";
			$sqlcmd_insert_koplans = "insert into koplans select * from koplan where planid=='$planid' and loadmode!='' ";

#			printf( "$progid $dttm MSG_550:  [$planid] [$loadmode][$plan_cabslim][$cabs_limit] [$cab][$cab1][$cab2]=[$sqlcmd_insert_koplans]\n" );
			$status=sqldo( $sqldb, $sqlcmd_cr_koplan, $sqltbl );
			printf( "$progid $dttm MSG_550:  [$status] sqlcmd_cr_koplan=[$sqlcmd_cr_koplan]\n" );

			$status=sqldo( $sqldb, $sqlcmd_insert_koplan, $sqltbl );
			printf( "$progid $dttm MSG_550:  [$status] sqlcmd_insert_koplan=[$sqlcmd_insert_koplan]\n" );

			$status=sqldo( $sqldb, $sqlcmd_update_koplan_cabsnum, $sqltbl );
			printf( "$progid $dttm MSG_550:  [$status] sqlcmd_update_koplan_cabsnum=[$sqlcmd_update_koplan_cabsnum]\n" );

			$status=sqldo( $sqldb, $sqlcmd_update_koplan_cabslim, $sqltbl );
			printf( "$progid $dttm MSG_550:  [$status] sqlcmd_update_koplan_cabslim=[$sqlcmd_update_koplan_cabslim]\n" );

			$status=sqldo( $sqldb, $sqlcmd_update_koplan_loadmode_a, $sqltbl );
			printf( "$progid $dttm MSG_550:  [$status] sqlcmd_update_koplan_loadmode_a=[$sqlcmd_update_koplan_loadmode_a]\n" );

			$status=sqldo( $sqldb, $sqlcmd_insert_koplans, $sqltbl );
			printf( "$progid $dttm MSG_550:  [$status] sqlcmd_insert_koplans=[$sqlcmd_insert_koplans]\n" );

			$status=sqldo( $sqldb, $sqlcmd_update_koplan_loadmode_b, $sqltbl );
			printf( "$progid $dttm MSG_550:  [$status] sqlcmd_update_koplan_loadmode_b=[$sqlcmd_update_koplan_loadmode_b]\n" );
			$status=sqldo( $sqldb, $sqlcmd_insert_koplans, $sqltbl );
			printf( "$progid $dttm MSG_550:  [$status] sqlcmd_insert_koplans=[$sqlcmd_insert_koplans]\n" );

			$status=sqldo( $sqldb, $sqlcmd_drop_koplan, $sqltbl );
			printf( "$progid $dttm MSG_550:  [$status] sqlcmd_cr_koplan=[$sqlcmd_cr_koplan]\n" );


			printf( "$progid $dttm MSG_550:  sqlcmd_insert_koplans=[$sqlcmd_insert_koplans]\n" );
			printf( "$progid $dttm MSG_550:  sqlcmd_insert_koplan=[$sqlcmd_insert_koplan]\n" );
			printf( "$progid $dttm MSG_550:  sqlcmd_cr_koplan=[$sqlcmd_cr_koplan]\n" );
			printf( "$progid $dttm MSG_550:  sqlcmd_drop_koplan=[$sqlcmd_drop_koplan]\n" );
			printf( "$progid $dttm MSG_550:  sqlcmd_update_koplan_cabsnum=[$sqlcmd_update_koplan_cabsnum]\n" );
			printf( "$progid $dttm MSG_550:  sqlcmd_update_koplan_cabs2=[$sqlcmd_update_koplan_cabs2]\n" );
			printf( "$progid $dttm MSG_550:  sqlcmd_update_koplan_loadmode=[$sqlcmd_update_koplan_loadmode]\n" );
			printf( "$progid $dttm MSG_550:  sqlcmd_insert_koplans=[$sqlcmd_insert_koplans]\n" );
			printf( "$progid $dttm MSG_550:  sqlcmd_insert_koplans=[$sqlcmd_insert_koplans]\n" );
			printf( "$progid $dttm MSG_550:  sqlcmd_insert_koplans=[$sqlcmd_insert_koplans]\n" );
			printf( "$progid $dttm MSG_550:  sqlcmd_insert_koplans=[$sqlcmd_insert_koplans]\n" );
			}
		}





# process plans
	for( $plan_cabslim=1; $plan_cabslim<=$cabs_limit; $plan_cabslim++ ) {
		$cablim=$cabs_limit;
		$cabnum=$plan_cabslim;

		if( $cabnum == '05' ) { last; }

		printf( "$progid $dttm plan2plans_go MSG_620:  cabnum=[$cabnum] cablim=[$cablim]\n" );

		$cabnum02 = sprintf( "%02d", $cabnum );
		$sqlcmd_items  = "select myid,mydt,planid,loadmode,cabnum,cablim,cab,cab1,cab2,item,amps,sn,hostname,hrctag,os,ip ";
		$sqlcmd_items .= "from koplans where planid =='$planid' and cabnum =='$cabnum02' and loadmode == 'b' ";
		$sqlcmd_items .= "order by planid, loadmode, cabnum,cablim, cast( amps as real ) desc, cab,cab1,cab2 ";
		$rows_items = sqlq( $sqldb, $sqlcmd_items, $sqltbl );
		$items_num=0; $items_limit=0;

		printf( "$progid $dttm plan2plans_go MSG_680:  cabnum=[$cabnum] cablim=[$cablim] sqlcmd_items=[$sqlcmd_items]\n" );
		$rows_items = sqlq( $sqldb, $sqlcmd_items, $sqltbl );
		foreach my $row_items (@$rows_items ) { 
			$items_num++;
			$items_limit++;

			( $myid,$mydt,$items_planid,$items_loadmode,$items_cabnum,$items_cablim,$items_cab,$items_cab1,$items_cab2,$items_item,$items_amps,$items_sn,$items_hostname,$items_hrctag,$items_os,$items_ip ) = @$row_items;
##			printf( "$myid,$mydt,$planid,$loadmode,$cabnum,$cablim,$cab,$cab1,$cab2,$item,$amps,$sn,$hostname,$hrctag,$os,$ip\n" );
##			printf( "$progid $dttm ITEMS_630:  $items_planid|$items_loadmode|$items_cabnum|$items_cablim|$items_cab|$items_cab1|$items_cab2|$items_item|$items_amps \n" );

			$sqlcmd_select_cabs	= "select myid,mydt,planid,loadmode,cabnum,cablim,cab,cab1,cab2,sum(amps) samps ";
			$sqlcmd_from_cabs	= "from koplans ";
			if( $planid eq "" ) {
				$sqlcmd_where	= sprintf( "where loadmode == 'b' " );
				}
			else {
				$sqlcmd_where	= sprintf( "where planid == '$planid' and loadmode == 'b'  and cabnum=='$cabnum' and cablim=='$cablim' " );
				}
			$sqlcmd_group_cabs	= "group by myid, mydt, planid, loadmode, cabnum, cablim, cab, cab1, cab2 ";
			$sqlcmd_order_cabs	= "order by myid, mydt, planid, loadmode, cabnum, cablim, cab, cab1, cab2 ";

			if( $cabslim eq "" ) { 
				$sqlcmd_limit_cabs="";
				}
			else {
				$sqlcmd_limit_cabs	= "limit $cabslim "; 
				}

			$cabnum2 = sprintf( "%02d", $cabnum );
			$sqlcmd_where_cabs = "where planid == '$planid' and loadmode == 'b' and cabnum=='$cabnum2' ";
			$sqlcmd_cabs = $sqlcmd_select_cabs . $sqlcmd_from_cabs . $sqlcmd_where_cabs . $sqlcmd_group_cabs . $sqlcmd_order_cabs . $sqlcmd_limit_cabs;
			$rows_cabs=sqlq( $sqldb, $sqlcmd_cabs, $sqltbl );
			$cabs_limit=0; $cabs_num=0;

##			printf( "$progid $dttm ITEMS_656:  $items_planid|$items_loadmode|$items_cabnum|$items_cablim|$items_cab|$items_cab1|$items_cab2|$items_item|$items_amps \n" );
##			printf( "$progid $dttm ITEMS_659:  sqlcmd_cabs=[$sqlcmd_cabs]\n" );
			foreach my $row_cabs (@$rows_cabs) { 
				if( $cabnum > $cablim ) { last; }
				printf( "$progid $dttm ITEMS_660:  $items_planid|$items_loadmode|$items_cabnum|$items_cablim|$items_cab|$items_cab1|$items_cab2|$items_item|$items_amps \n" );
				$cabs_limit++; $cabs_num++;
				( $cabs_myid,$cabs_mydt,$cabs_planid,$cabs_loadmode,$cabs_cabnum,$cabs_cablim,$cabs_cab,$cabs_cab1,$cabs_cab2,$cabs_samps )  = @$row_cabs; 

				printf( "$progid $dttm MSG_668_CABS: [$cabs_planid][$cabs_loadmode][$cabs_cabnum][$cabs_cablim] [$cabs_cab][$cabs_cab1][$cabs_cab2]\n" );
				$new_cabs_samps = $cabs_samps + $items_amps;
				printf( "$progid $dttm MSG_669_CABS:  new_cabs_samps=[$new_cabs_samps] cabs_samps=[$cabs_samps] items_amps=[$items_amps]\n" );
				if( $new_cabs_samps >= $samps_limit ) {
					printf(  "$progid cabs_FULL_670: $cabs_num|$cabs_myid|$cabs_mydt|$cabs_planid|$cabs_loadmode|$cabs_cabnum|$cabs_cablim|$cabs_cab|$cabs_cab1|$cabs_cab2|$cabs_samps\n" );
					}
				else {
					printf(  "$progid cabs_open_671: $cabs_num|$cabs_myid|$cabs_mydt|$cabs_planid|$cabs_loadmode|$cabs_cabnum|$cabs_cablim|$cabs_cab|$cabs_cab1|$cabs_cab2|$cabs_samps\n" );
					$cabnum2=sprintf( "%02d", $cabnum );
					$sqlcmd_update_koplans_cab2="update koplans set cab2='$cabs_cab' where planid=='$planid' and loadmode == 'b' and cabnum == '$cabnum2' and cablim == '$cablim' and item == '$items_item' ";
					$status = sqldo( $sqldb, $sqlcmd_update_koplans_cab2, $sqltbl );
					printf(  "$progid cabs_open_681: [$status] sqlcmd_update_koplans_cab2=[$sqlcmd_update_koplans_cab2]\n" );
					$sqlcmd_update_koplans_cab="update koplans set cab='$cabs_cab' where planid=='$planid' and loadmode == 'b' and cabnum == '$cabnum2' and cablim == '$cablim' and item == '$items_item' ";
					$status = sqldo( $sqldb, $sqlcmd_update_koplans_cab, $sqltbl );
					printf(  "$progid cabs_open_682: [$status] sqlcmd_update_koplans_cab=[$sqlcmd_update_koplans_cab]\n" );
					last;
					}
				}
			}	
		}
	return;
	}

sub plan2plans_items1( $planid) {
	$planid=shift;
	printf( "$progid $dttm  plan2plans_items1 MSG_730: planid=[$planid] RETURN\n" );
	exit;
_
# get list of items
	$sqlcmd_select	= "select myid, mydt, planid, loadmode, cabnum,cablim,cab,cab1,cab2,item,amps,sn,hostname,hrctag,os,ip ";
	$sqlcmd_from	= "from koplans ";
##	$sqlcmd_where	= sprintf( "where planid like \"%c%s%c\" ", '%', $planid, '%' );
	if( $planid eq "" ) {
		$sqlcmd_where	= sprintf( "" );
		}
	else {
		$sqlcmd_where	= sprintf( "where planid like \"\%%s\%\" ", $planid );
		}

	$sqlcmd_order	= "order by amps desc, item";


	$sqlcmd_items = $sqlcmd_select . $sqlcmd_from . $sqlcmd_where . $sqlcmd_order;

	printf( "$progid $dttm  plan2plans_items MSG_460:  planid=[$planid] sqlcmd_items=[$sqlcmd_items] sqldb=[$sqldb]\n");
	return;

	$rows_items=sqlq( $sqldb, $sqlcmd_items, $sqltbl );

	printf( "$progid $dttm plan2plans MSG_470:  sqlcmd_items=[$sqlcmd_items]\n" );
##	$j=0;
##	foreach $myrow (@myrows) { printf( "$j++ myrow=[$myrow]\n" ); }
##	exit;

	my $j=0;
        foreach my $row_items (@$rows_items) {
                my ( $myid, $mydt, $planid,$loadmode,$cabnum,$cablim, $cab,$cab1,$cab2,$item,$amps,$sn,$hostname,$hrctag,$os,$ip )  = @$row_items;
##                printf( "$progid sqlq MSG_405:  myid=[$myid][$mydt] planid=[$planid][$loadmode][$cabnum][$cablim] cab=[$cab][$item][$amps]  cab1=[$cab1][$cab2] hostname=[$hostname] sn=[$sn] hrctag=[$hrctag] os=[$os] ip=[$ip]\n" );
##                printf( "$progid sqlq MSG_406:  planid=[$planid][$loadmode][$cabnum][$cablim] cab=[$cab][$item][$amps]  cab1=[$cab1][$cab2] hostname=[$hostname] sn=[$sn] hrctag=[$hrctag] os=[$os] ip=[$ip]\n" );
##                printf( "$progid sqlq MSG_407:  planid=[$planid][$loadmode][$cabnum][$cablim] cab=[$cab][$cab1]->[$cab2] [$item][$amps]\n" );
		}
	}


sub plan2plans_cabamps( $sqldb, $sqlcmd, $sqltbl ) {
	$sqldb=shift; $sqlcmd=shift; $sqltbl=shift;

	$mycab="cz42";
	$sqlcmd_select	= "select myid, mydt, planid, loadmode, cabnum,cablim, cab, cab1, cab2, sum(amps samps ";
	$sqlcmd_from	= "from koplans ";
##	$sqlcmd_where	= sprintf( "where planid == \"%c%s%c\" and cab2 = \"%s\" ", '%', $planid, '%', $mycab );
	$sqlcmd_where	= sprintf( "where planid like \"%s\" and cab2 = \"%s\" ",$planid, $mycab );
	$sqlcmd_groupby = "group by myid, mydt, planid, loadmode, cabnum, cablim, cab1, cab2 ";
	$sqlcmd_order	= "order by myid, mydt, planid, loadmode, cabnum, cablim, cab1, cab2, samps desc ";
	$sqlcmd_cab  = $sqlcmd_select;
	$sqlcmd_cab .= $sqlcmd_from;
	$sqlcmd_cab .= $sqlcmd_where . $sqlcmd_groupby . $sqlcmd_order;

	$rows_cab = sqlq( $sqldb, $sqlcmd_cabs, $sqltbl );
	my $j=0;
        foreach my $row_cab (@$rows_cab) {
                my ( $myid, $mydt, $planid, $loadmode, $cabnum, $cablim, $cab, $cab1, $cab2, $samps ) = @$row_cabs;
##                printf( "$progid sqlq MSG_420:  myid=[$miid][$mydt] planid=[$planid][$loadmode][$cabnum][$cablim] cab=[$cab] [$cab1][$cab2]  cab1=[$cab1][$cab2] hostname=[$hostname] sn=[$sn] hrctag=[$hrctag] os=[$os] ip=[$ip]\n" );
                printf( "$progid sqlq MSG_420:  planid=[$planid][$loadmode][$cabnum][$cablim]  [$cab][$cab1][$cab2] samps=[$samps]\n" );
		}
	}


sub plan2plans_update( $sqldb, $sqlcmd, $sqltbl ) {
	$sqldb=shift; $sqlcmd=shift; $sqltbl=shift;

	printf( "$progid $dttm plan2plans_update MSG_123:  disabled sqlcmd=[$sqlcmd]\n" );
	return;

	$sqlcmd="update koplans set cab1=cab";

	printf( "$progid sqlq MSG_440: status==[$status] sqlcmd=[$sqlcmd] sqldb=[$sqldb]\n" );

	$status=sqldo( $sqldb, $sqlcmd, $sqltbl );

	printf( "$progid sqlq MSG_450: status==[$status] sqlcmd=[$sqlcmd] sqldb=[$sqldb]\n" );
	

##	$db->do("insert into `datas` (id, name,date) values (1,'something','1986-06-07')");
	$sqlcmd_insert = " insert into koplans ";
	$sqlcmd_insert_flds = "( myid, mydt, planid, loadmoad, cabnum, cablim, cab, cab1, cab2, item )  ";
	$sqlcmd_insert_values = "( '$myid', '$mydt', '$planid', '$loadmode', '$cabnum','$cablim', '$cab', '$cab1', '$cab2', '$item' ); ";
	
	$sqlcmd_insert = "insert into koplans ";	
	$sqlcmd_insert .= $sqlcmd_insert_flds;
	$sqlcmd_insert .= $sqlcmd_insert_values;
	
	$status = sqldo( $sqlcmd_insert );

        printf( "$progid $dttm plan2plans MSG_460: sqlcmd_insert=[$sqlcmd_insert]\n" );
#        $sqlcmd=qq{ select id,dttm, user, host, info, homedir, spwchg, spwchg_dt, spwchg_age from us };
	}

sub plan2plans_insert(	$sqldb, $sqltbl, $myid, $mydt, $planid, $loadmode, $cabnum, $cablim, $cab, $cab1, $cab2, $amps ) {
	$sqldb=shift; $sqltbl=shift; 
	$myid-shift; $mydt=shift; $planid=shift; $loadmode=shift; $cabnum=shift; $cablim=shift; $cab=shift; $cab1=shift; $cab2=shift; $amps=shift;

	printf( "$progid $dttm plan2plans_update MSG_123:  disabled sqlcmd=[$sqlcmd]\n" );
	return;

	$sqlcmd="update koplans set cab1=cab";
	$sqlcmd_insert = "insert or replace into $sqltbl ";
	$sqlcmd_insert_fields = "( myid, mydt, planid, loadmode, cabnum, cablim, cab, cab1, cab2, amps ) ";
	$sqlcmd_insert_values = "( $myid, $mydt, $planid, $loadmode, $cabnum, $cablim, $cab, $cab1, $cab2, $amps ) ";

	printf( "$progid sqlq MSG_440: status==[$status] sqlcmd=[$sqlcmd] sqldb=[$sqldb]\n" );

	$status=sqldo( $sqldb, $sqlcmd, $sqltbl );

	printf( "$progid sqlq MSG_450: status==[$status] sqlcmd=[$sqlcmd] sqldb=[$sqldb]\n" );
	

##	$db->do("insert into `datas` (id, name,date) values (1,'something','1986-06-07')");
	$sqlcmd_insert = " insert into koplans ";
	$sqlcmd_insert_flds = "( myid, mydt, planid, loadmoad, cabnum, cablim, cab, cab1, cab2, item )  ";
	$sqlcmd_insert_values = "( '$myid', '$mydt', '$planid', '$loadmode', '$cabnum','$cablim', '$cab', '$cab1', '$cab2', '$item' ); ";
	
	$sqlcmd_insert = "insert into koplans ";	

	foreach my $row_cabs (@$rows_cabs) { 
		if( $cabnum >= $cablim ) { last; }
		( $cabs_myid,$cabs_mydt,$cabs_planid,$cabs_loadmode,$cabs_cabnum,$cabs_cablim,$cabs_cab,$cabs_cab1,$cabs_cab2,$cabs_samps )  = @$row_cabs; 
		if( $cabs_samps > $samps_limit ) {
			printf(  "$progid cabs_FULL_701: $cabs_num|$cabs_myid|$cabs_mydt|$cabs_planid|$cabs_loadmode|$cabs_cabnum|$cabs_cablim|$cabs_cab|$cabs_cab1|$cabs_cab2|$cabs_samps\n" );
			}
		else {
			printf(  "$progid cabs_open_702: $cabs_num|$cabs_myid|$cabs_mydt|$cabs_planid|$cabs_loadmode|$cabs_cabnum|$cabs_cablim|$cabs_cab|$cabs_cab1|$cabs_cab2|$cabs_samps\n" );
			$sqlcmd_update_koplans_cab2="update koplans set cab2=cab where planid=='$planid' and loadmode=='b' and cabnum=='$cabnum' and cablim=='$cablim' ";
			}
		}
	return;
	}

sub plan2plans_items1( $planid) {
	$planid=shift;

	printf( "BUGS_450 plan2plans_items planid=[$planid] RETURN\n" );
	exit;
	return;
_
# get list of items
	$sqlcmd_select	= "select myid, mydt, planid, loadmode, cabnum,cablim,cab,cab1,cab2,item,amps,sn,hostname,hrctag,os,ip ";
	$sqlcmd_from	= "from koplans ";
##	$sqlcmd_where	= sprintf( "where planid like \"%c%s%c\" ", '%', $planid, '%' );
	if( $planid eq "" ) {
		$sqlcmd_where	= sprintf( "" );
		}
	else {
		$sqlcmd_where	= sprintf( "where planid like \"\%%s\%\" ", $planid );
		}

	$sqlcmd_order	= "order by amps desc, item";


	$sqlcmd_items = $sqlcmd_select . $sqlcmd_from . $sqlcmd_where . $sqlcmd_order;

	printf( "$progid $dttm  plan2plans_items MSG_460:  planid=[$planid] sqlcmd_items=[$sqlcmd_items] sqldb=[$sqldb]\n");
	return;

	$rows_items=sqlq( $sqldb, $sqlcmd_items, $sqltbl );

	printf( "$progid $dttm plan2plans MSG_470:  sqlcmd_items=[$sqlcmd_items]\n" );
##	$j=0;
##	foreach $myrow (@myrows) { printf( "$j++ myrow=[$myrow]\n" ); }
##	exit;

	my $j=0;
        foreach my $row_items (@$rows_items) {
                my ( $myid, $mydt, $planid,$loadmode,$cabnum,$cablim, $cab,$cab1,$cab2,$item,$amps,$sn,$hostname,$hrctag,$os,$ip )  = @$row_items;
##                printf( "$progid sqlq MSG_405:  myid=[$myid][$mydt] planid=[$planid][$loadmode][$cabnum][$cablim] cab=[$cab][$item][$amps]  cab1=[$cab1][$cab2] hostname=[$hostname] sn=[$sn] hrctag=[$hrctag] os=[$os] ip=[$ip]\n" );
##                printf( "$progid sqlq MSG_406:  planid=[$planid][$loadmode][$cabnum][$cablim] cab=[$cab][$item][$amps]  cab1=[$cab1][$cab2] hostname=[$hostname] sn=[$sn] hrctag=[$hrctag] os=[$os] ip=[$ip]\n" );
##                printf( "$progid sqlq MSG_407:  planid=[$planid][$loadmode][$cabnum][$cablim] cab=[$cab][$cab1]->[$cab2] [$item][$amps]\n" );
		}
	}


sub plan2plans_cabamps( $sqldb, $sqlcmd, $sqltbl ) {
	$sqldb=shift; $sqlcmd=shift; $sqltbl=shift;

	$mycab="cz42";
	$sqlcmd_select	= "select myid, mydt, planid, loadmode, cabnum,cablim, cab, cab1, cab2, sum(amps samps ";
	$sqlcmd_from	= "from koplans ";
##	$sqlcmd_where	= sprintf( "where planid == \"%c%s%c\" and cab2 = \"%s\" ", '%', $planid, '%', $mycab );
	$sqlcmd_where	= sprintf( "where planid like \"%s\" and cab2 = \"%s\" ",$planid, $mycab );
	$sqlcmd_groupby = "group by myid, mydt, planid, loadmode, cabnum, cablim, cab1, cab2 ";
	$sqlcmd_order	= "order by myid, mydt, planid, loadmode, cabnum, cablim, cab1, cab2, samps desc ";
	$sqlcmd_cab  = $sqlcmd_select;
	$sqlcmd_cab .= $sqlcmd_from;
	$sqlcmd_cab .= $sqlcmd_where . $sqlcmd_groupby . $sqlcmd_order;

	$rows_cab = sqlq( $sqldb, $sqlcmd_cabs, $sqltbl );
	my $j=0;
        foreach my $row_cab (@$rows_cab) {
                my ( $myid, $mydt, $planid, $loadmode, $cabnum, $cablim, $cab, $cab1, $cab2, $samps ) = @$row_cabs;
##                printf( "$progid sqlq MSG_420:  myid=[$miid][$mydt] planid=[$planid][$loadmode][$cabnum][$cablim] cab=[$cab] [$cab1][$cab2]  cab1=[$cab1][$cab2] hostname=[$hostname] sn=[$sn] hrctag=[$hrctag] os=[$os] ip=[$ip]\n" );
                printf( "$progid sqlq MSG_420:  planid=[$planid][$loadmode][$cabnum][$cablim]  [$cab][$cab1][$cab2] samps=[$samps]\n" );
		}
	}


sub plan2plans_update( $sqldb, $sqlcmd, $sqltbl ) {
	$sqldb=shift; $sqlcmd=shift; $sqltbl=shift;

	printf( "$progid $dttm plan2plans_update MSG_123:  disabled sqlcmd=[$sqlcmd]\n" );
	return;

	$sqlcmd="update koplans set cab1=cab";

	printf( "$progid sqlq MSG_440: status==[$status] sqlcmd=[$sqlcmd] sqldb=[$sqldb]\n" );

	$status=sqldo( $sqldb, $sqlcmd, $sqltbl );

	printf( "$progid sqlq MSG_450: status==[$status] sqlcmd=[$sqlcmd] sqldb=[$sqldb]\n" );
	

##	$db->do("insert into `datas` (id, name,date) values (1,'something','1986-06-07')");
	$sqlcmd_insert = " insert into koplans ";
	$sqlcmd_insert_flds = "( myid, mydt, planid, loadmoad, cabnum, cablim, cab, cab1, cab2, item )  ";
	$sqlcmd_insert_values = "( '$myid', '$mydt', '$planid', '$loadmode', '$cabnum','$cablim', '$cab', '$cab1', '$cab2', '$item' ); ";
	
	$sqlcmd_insert = "insert into koplans ";	
	$sqlcmd_insert .= $sqlcmd_insert_flds;
	$sqlcmd_insert .= $sqlcmd_insert_values;
	
	$status = sqldo( $sqlcmd_insert );

        printf( "$progid $dttm plan2plans MSG_460: sqlcmd_insert=[$sqlcmd_insert]\n" );
#        $sqlcmd=qq{ select id,dttm, user, host, info, homedir, spwchg, spwchg_dt, spwchg_age from us };
	}

sub plan2plans_insert(	$sqldb, $sqltbl, $myid, $mydt, $planid, $loadmode, $cabnum, $cablim, $cab, $cab1, $cab2, $amps ) {
	$sqldb=shift; $sqltbl=shift; 
	$myid-shift; $mydt=shift; $planid=shift; $loadmode=shift; $cabnum=shift; $cablim=shift; $cab=shift; $cab1=shift; $cab2=shift; $amps=shift;

	printf( "$progid $dttm plan2plans_update MSG_123:  disabled sqlcmd=[$sqlcmd]\n" );
	return;

	$sqlcmd="update koplans set cab1=cab";
	$sqlcmd_insert = "insert or replace into $sqltbl ";
	$sqlcmd_insert_fields = "( myid, mydt, planid, loadmode, cabnum, cablim, cab, cab1, cab2, amps ) ";
	$sqlcmd_insert_values = "( $myid, $mydt, $planid, $loadmode, $cabnum, $cablim, $cab, $cab1, $cab2, $amps ) ";

	printf( "$progid sqlq MSG_440: status==[$status] sqlcmd=[$sqlcmd] sqldb=[$sqldb]\n" );

	$status=sqldo( $sqldb, $sqlcmd, $sqltbl );

	printf( "$progid sqlq MSG_450: status==[$status] sqlcmd=[$sqlcmd] sqldb=[$sqldb]\n" );
	

##	$db->do("insert into `datas` (id, name,date) values (1,'something','1986-06-07')");
	$sqlcmd_insert = " insert into koplans ";
	$sqlcmd_insert_flds = "( myid, mydt, planid, loadmoad, cabnum, cablim, cab, cab1, cab2, item )  ";
	$sqlcmd_insert_values = "( '$myid', '$mydt', '$planid', '$loadmode', '$cabnum','$cablim', '$cab', '$cab1', '$cab2', '$item' ); ";
	
	$sqlcmd_insert = "insert into koplans ";	
	$sqlcmd_insert .= $sqlcmd_insert_flds;
	$sqlcmd_insert .= $sqlcmd_insert_values;
	
	$status = sqldo( $sqlcmd_insert );

        printf( "$progid $dttm plan2plans MSG_460: sqlcmd_insert=[$sqlcmd_insert]\n" );
#        $sqlcmd=qq{ select id,dttm, user, host, info, homedir, spwchg, spwchg_dt, spwchg_age from us };
	}


sub plan2plans_plans($planid) {
	$planid=shift;

# get plan summary beg 
	if( $planid eq "" ) {
		$sqlcmd_plans_cab1 = "select planid, sum(amps) samps from koplans where cab==cab1 group by planid order by planid";
		}
	else {
		$sqlcmd_plans_cab1 = "select planid, sum(amps) samps from koplans where cab==cab1 and planid like \"\%$planid\%\" group by planid order by planid";
		}
	$rows_plans_cab1 = sqlq( $sqldb, $sqlcmd_plans_cab1, $sqltbl );
        foreach my $row_plans_cab1 (@$rows_plans_cab1) {
                my ( $planid, $samps ) = @$row_plans_cab1;
                printf( "$progid sqlq MSG_501: cab1  planid=[$planid] samps=[$samps]\n" );
		}


	if( $planid eq "" ) {
		$sqlcmd_plans_cab2 = "select planid, sum(amps) samps from koplans where cab==cab2 group by planid order by planid";
		}
	else {
		$sqlcmd_plans_cab2 = "select planid, sum(amps) samps from koplans where cab==cab2 and planid like \"\%$planid\%\" group by planid order by planid";
		}

	$rows_plans_cab2 = sqlq( $sqldb, $sqlcmd_plans_cab2, $sqltbl );
        foreach my $row_plans_cab2 (@$rows_plans_cab2) {
                my ( $planid, $samps ) = @$row_plans_cab2;
                printf( "$progid sqlq MSG_502: cab2  planid=[$planid] samps=[$samps]\n" );
		}
	}

sub plan2plans_cabs( $planid ) {
	$planid=shift;

##	printf( "$progid $dttm plan2plans_cabs MSG: planid=[$planid] sqldb=[$sqldb]\n" );

# get sum of cab1 
	$sqlcmd_select	= "select myid, mydt, planid, loadmode, cabnum,cablim, cab,cab1,cab2, sum(amps) samps ";
	$sqlcmd_from	= "from koplans ";
	if( $planid eq "" ) {
		$sqlcmd_where	= sprintf( "where cab == cab1 " );
		}
	else {
		$sqlcmd_where	= sprintf( "where planid like \"\%%s\%\" and cab == cab1 ", $planid  );
		}

##	$sqlcmd_where	= sprintf( "where planid == \"%s\" and cab == cab1 ", $planid  );
	$sqlcmd_groupby = "group by myid, mydt, planid, loadmode, cabnum, cablim, cab,cab1,cab2 ";
##	$sqlcmd_order	= "order by myid, mydt, planid, loadmode, cabnum, cablim, cab1, cast(samps as number) desc ";
	$sqlcmd_order	= "order by myid, mydt, planid, loadmode, cabnum, cablim, samps desc, cab, cab1, cab2 ";
	$sqlcmd_cab1  = $sqlcmd_select;
	$sqlcmd_cab1 .= $sqlcmd_from;
	$sqlcmd_cab1 .= $sqlcmd_where . $sqlcmd_groupby . $sqlcmd_order;

	
	printf( "$progid $dttm plan2plans MSG_470:  sqlcmd_cab1=[$sqlcmd_cab1]\n" );
	$rows_cab1 = sqlq( $sqldb, $sqlcmd_cab1, $sqltbl );
	my $j=0;
        foreach my $row_cab1 (@$rows_cab1) {
                my ( $myid, $mydt, $planid, $loadmode, $cabnum, $cablim, $cab, $cab1, $cab2, $samps ) = @$row_cab1;
##                printf( "$progid sqlq MSG_610:  myid=[$myid][$mydt] planid=[$planid][$loadmode][$cabnum][$cablim] [$cablim] cab1=[$cab1] samps=[$samps]\n" );
                printf( "$progid sqlq MSG_615: planid=[$planid][$loadmode][$cabnum][$cablim] cab1=[$cab][$cab1][$cab2] samps=[$samps]\n" );
		}


# get sum of cab2
	$sqlcmd_select	= "select myid, mydt, planid, loadmode, cabnum,cablim, cab, cab1,cab2, sum(amps) samps ";
	$sqlcmd_from	= "from koplans ";
##	$sqlcmd_where	= sprintf( "where planid == \"%s\" and cab == cab2 ", $planid  );
	if( $planid eq "" ) {
		$sqlcmd_where	= sprintf( "where cab == cab2 " );
		}
	else {
		$sqlcmd_where	= sprintf( "where planid like \"\%%s\%\" and cab == cab2 ", $planid  );
		}
	$sqlcmd_groupby = "group by myid, mydt, planid, loadmode, cabnum, cablim, cab, cab1, cab2 ";
	$sqlcmd_order	= "order by myid, mydt, planid, loadmode, cabnum, cablim, samps desc, cab, cab1, cab2 ";
	$sqlcmd_cab2  = $sqlcmd_select;
	$sqlcmd_cab2 .= $sqlcmd_from;
	$sqlcmd_cab2 .= $sqlcmd_where . $sqlcmd_groupby . $sqlcmd_order;

	
	printf( "$progid $dttm plan2plans MSG_630:  sqlcmd_cabs=[$sqlcmd_cab2]\n" );
	$rows_cab2 = sqlq( $sqldb, $sqlcmd_cab2, $sqltbl );
	my $j=0;
        foreach my $row_cab2 (@$rows_cab2) {
                my ( $myid, $mydt, $planid, $loadmode, $cabnum, $cablim, $cab,$cab2,$cab2, $samps ) = @$row_cab2;
##                printf( "$progid sqlq MSG_640:  myid=[$myid][$mydt] planid=[$planid][$loadmode][$cabnum][$cablim] cab2=[$cab2]  samps=[$samps]\n" );
                printf( "$progid sqlq MSG_640:  planid=[$planid][$loadmode][$cabnum][$cablim] cab2=[$cab][$cab1][$cab2]  samps=[$samps]\n" );
		}
	}

sub plan2plans_items( $planid ) {
	$planid=shift;


# get list of items cab1
	$sqlcmd_select	= "select myid, mydt, planid, loadmode, cabnum,cablim,cab,cab1,cab2,item,amps,sn,hostname,hrctag,os,ip ";
	$sqlcmd_from	= "from koplans ";
	if( $planid eq "" ) {
		$sqlcmd_where	= sprintf( "where cab == cab1 " );	
		}
	else {
		$sqlcmd_where	= sprintf( "where cab == cab1 and planid == \"%s\" ", $planid );
		}

	$sqlcmd_order	= "order by planid, amps desc, item";

	$sqlcmd_items_cab1 = $sqlcmd_select . $sqlcmd_from . $sqlcmd_where . $sqlcmd_order;

	printf( "$progid $dttm  plan2plans_items MSG_680:  planid=[$planid] sqlcmd_items_cab1=[$sqlcmd_items_cab1] sqldb=[$sqldb]\n");

	$rows_items_cab1=sqlq( $sqldb, $sqlcmd_items_cab1, $sqltbl );

	printf( "$progid $dttm plan2plans_items MSG_690:  sqlcmd_items=[$sqlcmd_items_cab1]\n" );
	my $j=0;
        foreach my $row_items_cab1 (@$rows_items_cab1) {
                my ( $myid, $mydt, $planid,$loadmode,$cabnum,$cablim, $cab,$cab1,$cab2,$item,$amps,$sn,$hostname,$hrctag,$os,$ip )  = @$row_items_cab1;
                printf( "$progid sqlq MSG_694: planid=[$planid][$loadmode][$cabnum][$cablim] cab1=[$cab][$cab1][$cab2] [$item][$amps]\n" );
		}

# get list of items from cab2
	$sqlcmd_select	= "select myid, mydt, planid, loadmode, cabnum,cablim,cab,cab1,cab2,item,amps,sn,hostname,hrctag,os,ip ";
	$sqlcmd_from	= "from koplans ";
	if( $planid eq "" ) {
		$sqlcmd_where	= sprintf( "where cab == cab2  ", $planid );
		}
	else {
		$sqlcmd_where	= sprintf( "where cab == cab2 and planid == \"%s\" ", $planid );
		}
	$sqlcmd_order	= "order by amps desc, item";


	$sqlcmd_items_cab2 = $sqlcmd_select . $sqlcmd_from . $sqlcmd_where . $sqlcmd_order;

	printf( "$progid $dttm  plan2plans MSG_700:  planid=[$planid] sqlcmd_items_cab2=[$sqlcmd_items_cab2] sqldb=[$sqldb]\n");

	$rows_items_cab2=sqlq( $sqldb, $sqlcmd_items_cab2, $sqltbl );

	printf( "$progid $dttm plan2plans MSG_710:  sqlcmd_items_cab2=[$sqlcmd_items_cab2]\n" );
	my $j=0;
        foreach my $row_items_cab2 (@$rows_items_cab2) {
                my ( $myid, $mydt, $planid,$loadmode,$cabnum,$cablim, $cab,$cab1,$cab2,$item,$amps,$sn,$hostname,$hrctag,$os,$ip )  = @$row_items_cab2;
                printf( "$progid sqlq MSG_710:  planid=[$planid][$loadmode][$cabnum][$cablim] cab2=[$cab][$cab1][$cab2] [$item][$amps]\n" );
		}
	}



sub ole_ol_list() {
my $obj = shift;
my $target = shift;

	$dttm=&dttm;

##	for (my $i = 1; $i <= $obj->Folders->Count; $i++) {
##		if ( $obj->Folders->Item($i)->Name eq $target ) {
##			return $obj->Folders->Item($i);
##			}
##		}

## use strict; 
# use Win32::OLE; 
# use Win32::OLE::Variant; 
# use Win32::OLE::Const 'Microsoft Outlook'; 

	$psvfil="ol_list.psv";
	open( PSVFIL, ">$psvfil" ) || die "$progid psvfil ERR:  OPEN psvfil=[$psvfil]\n";
	$psvhdr="mnum|dttm|mbox|mto|sendername|receivedtime|subject|body|\n";
	print( PSVFIL $psvhdr );	

	$mbox="inbox";
	$mnum=0;

	my $Outlook = Win32::OLE->new('Outlook.Application', 'Quit'); 
	my $ol = Win32::OLE::Const->Load($Outlook); 
	my $namespace = $Outlook->GetNamespace("MAPI"); 
	my $Folder = $namespace->GetDefaultFolder(olFolderInbox); 
	my $items = $Folder->Items; 
	print $items->Count; 

	for my $itemIndex (1..$items->Count) { 
		my $message = $items->Item($itemIndex); 
		next if not defined $message; 

		next if not defined $message->{SenderName};
		next if not defined $message->{ReceivedTime};
		next if not defined $message->{To};
		next if not defined $message->{Subject};
		next if not defined $message->{Body};

##		print "Sender: ",	$message->{SenderName}, "\n"; 
##		print "Received:",	$message->{ReceivedTime}, "\n"; 
##		print "To:",		$message->{To}, "\n"; 
##		print "Subject:",	$message->{Subject}, "\n"; 
##		print "Body:\n",	$message->{Body}, "\n"; 
##		print "================================================\n"; 

		$mnum++;
		$mto="mto";
		if ( not defined $message->{To} ) { $mto="mto"; } else { $mto=$message->{To}; }

		if ( not defined $message->{SenderName} ) { $sendername="sendername"; } 
		else { $sendername=$message->{SenderName}; }

		if ( not defined $message->{ReceivedTime} ) { $receivedtime="receivedtime"; } 
		else { $receivedtime=$message->{ReceivedTime}; }

		if ( not defined $message->{Subject} ) { $subject="subject"; } 
		else { $subject=$message->{Subject}; }

		if ( not defined $message->{Body} ) { $body="body"; } 
		else { $body=$message->{Body}; }

##		$mto=$message->{To};
		$sendername=$message->{SenderName};
		$receivedtime=$message->{receivedtime};
		$subject=$message->{subject};
		$body=$message->{body};
		$psvrec="$mnum|$dttm|$mbox|$mto|$sendername|$receivedtime|$subject|$body|\n";
		print( $psvrec );
		print( PSVFIL $psvrec );
		} 
	close( PSVFIL );
	}

sub ole_ol_folders( $option1, $option2, $option3 ) {

use strict;
# use Win32::OLE qw( in valof with );
# use Win32::OLE::Variant;
# use Win32::OLE::Const 'Microsoft Outlook';
 
#
#  Defines
#
	my $Outlook;            # An instance of Outlook
	my $oFolder;            # Folder object
	my $folder;             # Folder name
	my %Folders;            # Hash table of folder names -> EntryID
	$| = 1;                 # Autoflush STDOUT
#  Use existing instance if Outlook is already running
	eval { $Outlook = Win32::OLE->GetActiveObject('Outlook.Application') };
	die "Outlook is not installed" if $@;
	unless (defined $Outlook) {
		$Outlook = Win32::OLE->new('Outlook.Application', sub {$_[0]->Quit;})
		or die "Oops, cannot start Outlook";
		}
 
# disabled	my $ol = Win32::OLE::Const->Load($Outlook);
# disabled	my $namespace = $Outlook->GetNamespace("MAPI");
# disabled	my $parent_mbox = $namespace->GetDefaultFolder(olFolderInbox)->Parent->Name();
 
#  List all of our folders
#  Note that although Perl arrays generaly start with index 0,
#  these collections are indexed starting at 1.

# disable	foreach my $i (1..$namespace->Folders->Count) {
# disable		$folder = $namespace->Folders($i)->Name;
# disable		$oFolder = $namespace->Folders($i);
# disable		print "Folder:  $folder\n";
    
#  If this is our parent folder (eg. "Personal Folders"), then
#  recursively display all of the sub-folders.
#  Store the EntryID for every folder in this tree.

#  Save the folder<->EntryID pair
# disable		if ($folder =~ /^\Q${parent_mbox}\E$/) {
# disable			$Folders{$folder} = $namespace->Folders->Item($i)->EntryID;
##			Print_Subs($oFolder, 1);
# disable		ole_ol_folders($oFolder, 1);
# disable		}
# disable		}

# disabled	$oFolder = $namespace->GetDefaultFolder(olFolderInbox);
# disabled	my $oItems = $oFolder->Items;
# disabled	if ($oItems->Count == 0) {
# disabled		print "No messages found\n";
# disabled		} 
# disabled	else {
# disabled		print "There are " . $oItems->Count . " messages in your Inbox:\n";
# disabled		print "(You may be prompted by Outlook to allow this program to access\n";
# disabled		print "your Inbox.  Go to Tools->Macro->Security to adjust your settings.)\n\n";
# disabled    
# disabled		my $j=0;
# disabled		foreach my $oItem (in $oItems) {
### requires explicit package name			$j++;
### requires explicit package name			$EmailAddr = $oItem->SenderEmailAddress;
### requires explicit package name			$Sender    = $oItem->SenderName;
### requires explicit package name			$Subject   = $oItem->Subject;
### requires explicit package name			$Received  = $oItem->ReceivedTime;

# disabled		my $psvfil="ko_center_ol_folders.psv";
# disabled			open( PSVFIL, "$psvfil>>" );
###			printf( "$j|$Received|$Sender|$EmailAddr|$Subject|\n" );
###E			printf( PSVFIL "$j|$Received|$Sender|$EmailAddr|$Subject|\n" );
# disabled			close( PSVFIL );

##			printf "From: %-25.25s   Subject: %-25.25s   Received:  %-22.22s\n",
##				$Sender, $Subject, $Received;
## Should be equivalent to printf, but something is odd with write
## write;            # Use formatted output template
# disabled			}
# disabled		}
	}
 

sub ole_ol_folders1( $option1, $option2, $option3 ) {
	$option1=shift; $option2=shift; $option3=shift;
	printf( "$progid ole_ol_folders $dttm MSG:  o1=[$option1] o2=[$option2] o3=[$option3]\n");

# ======================================================================
#
# Title:        Win32_Outlook_Folders.pl
# Author:       Shawn A. Clifford <shawn.a.clifford@lmco.com>
# Date:         9-July-2004
# Purpose:      Locate our "Personal Folders" and list all sub-folders
#
# Modification History:
#
# 03-Aug-2004   SAC     Modified to find the default folder and its
#                       parent.  This way there is no longer an
#                       assumption of what the names of these folders
#                       are, as users may rename them or redirect
#                       incoming email to a different folder than Inbox.
#
# ======================================================================
# use strict;
# use Win32::OLE qw( in valof with );
# use Win32::OLE::Variant;
# use Win32::OLE::Const 'Microsoft Outlook';
 
#  Defines
	my $Outlook;            # An instance of Outlook
	my $oFolder;            # Folder object
	my $folder;             # Folder name
	my %Folders;            # Hash table of folder names -> EntryID
	$| = 1;                 # Autoflush STDOUT
 
#  Use existing instance if Outlook is already running
	eval { $Outlook = Win32::OLE->GetActiveObject('Outlook.Application') };
		die "Outlook is not installed" if $@;
	unless (defined $Outlook) {
		$Outlook = Win32::OLE->new('Outlook.Application', sub {$_[0]->Quit;})
		or die "Oops, cannot start Outlook";
		}
 
	my $ol = Win32::OLE::Const->Load($Outlook);
 

	my $namespace = $Outlook->GetNamespace("MAPI");
	my $parent_mbox = $namespace->GetDefaultFolder(olFolderInbox)->Parent->Name();
	printf( "ole_ol_folders $dttm MSG_400:  parent_mbox=[$parent_mbox]=[Personal Folders]\n" );
 
#  List all of our folders
#  Note that although Perl arrays generaly start with index 0,
#  these collections are indexed starting at 1.

	my $output = "";
	foreach my $i (1..$namespace->Folders->Count) {
		$folder = $namespace->Folders($i)->Name;
		$oFolder = $namespace->Folders($i);
		print "Folder:  $folder\n";
    
#  If this is our parent folder (eg. "Personal Folders"), then
#  recursively display all of the sub-folders.
#  Store the EntryID for every folder in this tree.
#
#  Save the folder<->EntryID pair
		if ($folder =~ /^\Q${parent_mbox}\E$/) {
			$Folders{$folder} = $namespace->Folders->Item($i)->EntryID;
			ole_ol_subfolders($oFolder, 1);
			}
		}

#  At this point we have all of our folders<->EntryIDs stored
#  in a hash table %Folders so that we can manipulate a given
#  folder directly.


#  As a demonstration, we will work with our inbox
	$psvfil="ko_center_ol_folders.psv";
	$psvhdr="sender|received|emailaddr|subject|\n";
	open( PSVFIL, ">$psvfil" ) || die "$progid $dttm ol_folders ERR:  open psvfil=[$psvfil]\n";
	printf( PSVFIL $psvhdr );
	$mnum=0;

	print( "$progid $dttm MSG_430:  mbox=[$mbox] psvfil=[$psvfil] pqpqpqpqpqpqpqpqpqpqpq\n");
	my ($EmailAddr, $Sender, $Subject, $Received);
	my ($mnum, $mbox, $mdttm, $mfrom, $mfromaddr );
 
#  Get an Outlook folder oject for our Inbox
#	$oFolder = $namespace->GetFolderFromID($Folders{'Inbox'});
 
#  Get an Outlook folder object for our default folder
#  This is the proper way to locate the "Inbox".  However, the
#  hash table is still useful for working with any other
#  Outlook folder by name.

	$mbox='Inbox';
	$mbox='jk@konet.org';
	$mbox='admini@konet.org';
#	$oFolder = $namespace->GetFolderFromID($Folders{'sk@ko1.us'});
#	$oFolder = $namespace->GetFolderFromID($Folders{'Inbox'});
	$oFolder = $namespace->GetDefaultFolder(olFolderInbox);
 
	my $oItems = $oFolder->Items;
	if ($oItems->Count == 0) {
		$mcnt=$oItems->Count;
		print "$progid $dttm MSG_440: mcnt=[$mcnt] mbox=[$mbox] mcnt=[$mcnt] psvfil=[$psvfil] pqpqpqpqpqpqpqpqpqpqpq\n";
		print "$progid $dttm MSG_440: No messages found\n";
		} 
	else {
		print "There are " . $mcnt . " messages in your Inbox:\n";
		print "(You may be prompted by Outlook to allow this program to access\n";
		print "your Inbox.  Go to Tools->Macro->Security to adjust your settings.)\n\n";


#
# From: Jerry Kassil Subject: Happy Birthday Received: 1/12/2007 8:24:03 PM
# From: Senator Mel Martinez and    Subject: We Start Today Received: 1/22/2007 8:52:16 PM
# Win32::OLE(0.1709) error 0x8002000e: "Invalid number of parameters"
#	in METHOD/PROPERTYGET "" at ko_center.pl line 462

		$j=0;
		foreach my $oItem (in $oItems) {
			$EmailAddr = $oItem->SenderEmailAddress;
			$Sender    = $oItem->SenderName;
			$Subject   = $oItem->Subject;
			$Received  = $oItem->ReceivedTime;
			printf "From: %-25.25s   Subject: %-25.25s   Received:  %-22.22s\n",
			$Sender, $Subject, $Received;
## Should be equivalent to printf, but something is odd with write
## write;            # Use formatted output template
			}


###		foreach my $oItem (in $oItems) {
###			$j++;	
###			$EmailAddr	= $oItem->SenderEmailAddress;
###			$Sender		= $oItem->SenderName;
###			$Subject	= $oItem->Subject;
###			$Received	= $oItem->ReceivedTime;
###
## Should be equivalent to printf, but something is odd with write
###			printf( PSVFIL "%d|%s|%s|%s|%s|\n", $j,$Received,Sender,$EmailAddr,$Subject );
###			}
		}
	}
 
sub ole_ol_subfolders {
 
my $Top = shift;
my $depth = shift;
	die "insufficient args: ole_ol_subfolders()\n" if (! $depth);

#  Collection indexes start at 1, not 0
	foreach my $j (1..$Top->Folders->Count) {
		$folder = $Top->Folders->Item($j)->Name;
		$folders{$folder} = $Top->Folders->Item($j)->EntryID;
		$output = "$j|$folder|$folders{$folder}|";
       
# Comment this out if you only want to build the hash table
		my $psvfil = "ole_ol_subfolders.psv";
		open( PSVFIL, "$psvfil>>" );
#		print "ole_ol_subfolders MSG_480: j=$j depth=[x${depth}] folder=[$folder]\n";
		printf( PSVFIL "$j|x${depth}|$folder|\n" );
		close( PSVFIL );
 
		if ($Top->Folders->Item($j)->Folders->Count > 1) {
			ole_ol_subfolders($Top->Folders->Item($j), $depth+1);
			}  
		}
#
#  Format records
#
## format STDOUT_TOP =
## Sender                     Subject                    Received Date
## -------------------------  -------------------------  ----------------------
## .
##  
## format STDOUT =
## ^<<<<<<<<<<<<<<<<<<<<<<<<  ^<<<<<<<<<<<<<<<<<<<<<<<<  ^<<<<<<<<<<<<<<<<<<<<<
## ${Sender}, ${Subject}, ${Received}
	return($output);
	}


sub pdf2info( $option1, $option2, $option3 ) {

use Win32::OLE;
##	$file = "Z:/xampp/htdocs/ko_saic/work_20121206/konet_ts_13-03-4_20120407-20120413.pdf";
	$file = $option1;
	printf( "$progid $dttm MSG_1460:  file=[$file]\n" );
	if( ! -f $file ) {
		printf( "$progid $dttm ERR_1460:  file=[$file]\n" );
		exit;
		}

	$PDFDoc = Win32::OLE->new("AcroExch.PDDoc");
	$PDFDoc->Open($file);
	$numPages = $PDFDoc->GetNumPages();
	$PDFDoc->Close();
	print $numPages;
	}

sub xls2pdf( $option1, $option2, $option3 ) {
	$option1=shift; $option2=shift; $option3=shift;
	$xlsfil=$option1;


	$pdffil=$xlsfil; $pdffil=~ s/xls/pdf/;

	printf( "$progid xls2pdf $dttm MSG:  o1=[$option1] o2=[$option2] o3=[$option3]\n");
	if( ! -f $xlsfil ) {
		printf( "$progid test1 $dttm ERR_630: NOTFOUND xlsfil=[$xlsfil] pdffil=[$pdffil] \n");
		}
	else {
		printf( "$progid test1 $dttm MSG_630: FOUND xlsfil=[$xlsfil] pdffil=[$pdffil] \n");
		}

# open new excel instanc
#	if (! defined $excel) {
	if (("$excel" eq "1" ) || ( "$excel" eq "" )) {
		$excel = Win32::OLE->new('Excel.Application', 'Quit')
		|| die printf( "$progid ts2csv $dttm ERR:  OLE->new excel=[$excel]\n" );
		printf( "$progid dta2xls_tx $dttm MSG_270:  OLE->new excel=[$excel]\n" );
		}
	else {
		printf( "$progid dta2xls_tx $dttm MSG_271:  GetActiveObject DEFINED excel=[$excel]\n" );
		}

	$book = $excel->Workbooks->Open("$xlsfil") 
	|| die printf( "$progid ts2csv $dttm ERR_280:  open xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n");

	$sheet = $book->Worksheets(1) ||
	die printf( "$progid xls2pdf $dttm ERR_820:  xlsfil=[$xlsfil] sheet=[$sheet] excel=[$excel]\n");
	printf( "$progid xls2pdf $dttm MSG_820:  xlsfil=[$xlsfil] sheet=[$sheet] excel=[$excel]\n" );


# 	color:             ActivePrinter => "ACROBAT:",
	$excel->ActivePrinter->{Value} = "Adobe PDF";
#	$excel->ActivePrinter = "Adobe PDF";
##	$active_printer = $excel->ActivePrinter;
##	if ($active_printer) { 
##		print("$progid ts2csv $dttm MSG:  active_printer=[$active_printer]\n"); 
##		}

# Save as PDF
#               ActivePrinter => 'Acrobat PDFWriter'})
#               ActivePrinter => 'Acrobat PDF on Ne07:'}) lockup
#               ActivePrinter => 'Acrobat PDF'})
#               Copy => 1,

	$excel->ActiveWindow->SelectedSheets->PrintOut({ActivePrinter => 'Acrobat PDF',
		PrintToFile => 1, PrToFileName => "$xlspdf", copies => 1 })
	|| printf( "$progid $dttm xls2pdf ERR_836\n" );
	printf( "$progid $dttm xls2pdf MSG_836\n" );
	my @msgtext = $excel->ActiveWindow->SelectedSheets->PrintOut(
		{ActivePrinter => 'Adobe PDF', PrintToFile => 1, PrToFileName => "$xlspdf", copies => 1 });


##	print_r(@msgtxt);
##	|| printf( "$progid xls2pdf $dttm ERR_835: printout excel=[$excel]\n" );
	printf( "$progid xls2pdf $dttm MSG_835:  printout excel=[$excel]\n" );

##	my @msgtext = $excel->ActiveSheet->PrintOut({
##		PrintToFile => 1,
##		PrToFileName => "$xlspdf",
##		Copies      => 1
##		}) 
##	|| printf( "$progid xls2pdf $dttm ERR:  PRINT xlspdf=[$xlsxpdf] active_printer=[$active_printer]\n" );;
##	printf( "$progid xls2pdf $dttm MSG:  PRINT xlspdf=[$xlspdf] active_printer=[$active_printer]\n" );;

	
#	$excel->Workbooks->quit() || printf( "ERR_845:  excel->Workbooks->quit()\n" ); 
	$excel->quit || printf( "ERR_846:  excel->quit excel=[$excel]\n" ); 

      	$book->Close() 
	|| printf( "$progid ts2csv $dttm ERR_850:  book->Close()  book=[$book] excel=[$excel]\n");
	printf( "$progid ts2csv $dttm MSG_850:  book->Close()  book=[$book] excel=[$excel]\n");

	$excel->Quit() 
	|| printf( "$progid ts2csv $dttm ERR_855:  excel->Quit()  book=[$book] excel=[$excel]\n");
	printf( "$progid ts2csv $dttm MSG_855:  excel->Quit()  book=[$book] excel=[$excel]\n");

	}


sub ole_xls( $option1, $option2, $option3 ) {
	$option1=shift; $option2=shift; $option3=shift;


## use strict;
## use warnings;

## use Win32::OLE;
## use Win32::OLE::Variant;
## use Win32::OLE qw(in with);
## use Win32::OLE::Const 'Microsoft Excel';
## $Win32::OLE::Warn=3;

##	$xlsfil="konet_ts_14_03_3_20130330_20130405.xls";
##	$xlsfil="j:\\ko_center\\oy3\\test1.xls";

##	$xlsfil="test1.xls";
##	$xlsfil=".\\test1.xls";
##	$xlsnew=".\\new_test1.xls";
##	$xlsfil="J:\\ko_center\\oy3\\test1.xls";
##	$xlsnew="J:\\ko_center\\oy3\\new_test1.xls";

	if( $option1 ne "" ) { $xlsfil="$option1"; }
	if( $option2 ne "" ) { $xlsnew="$option2"; }
	printf( "$progid ole_xls $dttm MSG_650:  xlsfil=[$xlsfil] xlsnew=[$xlsnew] o3=[$option3]\n");

	$excel="";

##	if( $option1 ne "" ) { $xlsnew=$option1; }
	printf( "$progid test1 $dttm BEG_250: xlsfil=[$xlsfil] xlsnew=[$xlsnew] \n");
	if( -f $xlsfil ) {
		printf( "$progid test1 $dttm BEG_260: FOUND xlsfil=[$xlsfil] xlsnew=[$xlsnew] \n");
		}

# open new excel instance
#	if (! defined $excel) {
	if (("$excel" eq "1" ) || ( "$excel" eq "" )) {
		$excel = Win32::OLE->new('Excel.Application', 'Quit')
		|| die printf( "$progid ts2csv $dttm ERR:  OLE->new excel=[$excel]\n" );
		printf( "$progid dta2xls_tx $dttm MSG_270:  OLE->new excel=[$excel]\n" );
		}
	else {
		printf( "$progid dta2xls_tx $dttm MSG_271:  GetActiveObject DEFINED excel=[$excel]\n" );
		}

##	printf( "$progid ts2csv $dttm BEG:  open xls_templet=[$xls_templet] excel=[$excel]\n" );
##	$book = $excel->Workbooks->Open("$xlstmp") 
##	|| die printf( "$progid ts2csv $dttm ERR:  open xlsfil=[$xls_templet] book=[$book] excel=[$excel]\n");


	$book = $excel->Workbooks->Open("$xlsfil") 
	|| die printf( "$progid ts2csv $dttm ERR_280:  open xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n");
	printf( "$progid test1 $dttm MSG_280:  open xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n" );


	$sheet = $book->Worksheets(1) 
	|| die printf( "$progid ts2csv $dttm ERR_285:  sheet  xlsfil=[$xlsfil] sheet=[$sheet] book=[$book] excel=[$excel]\n");
	printf( "$progid ts2csv $dttm MSG_285:  sheet  xlsfil=[$xlsfil] sheet=[$sheet] book=[$book] excel=[$excel]\n");

	$sheetname = $book->Worksheets(1) -> { Name };
##	die printf( "$progid db2ts $dttm ERR_290:  sheet  xlsnew=[$xlsnew] book=[$book] excel=[$excel]\n");
	printf( "$progid db2ts $dttm MSG_290:  sheetname=[$sheetname]  xlsnew=[$xlsnew] sheet=[$sheet] book=[$book] excel=[$excel]\n");

	$sheet -> Activate ||
	die printf( "$progid test1 $dttm ERR_299:  Activate sheet  xlsnew=[$xlsnew] book=[$book] excel=[$excel]\n");
	printf( "$progid test1 $dttm MSG_200:  Activate sheet=[$sheet]  xlsnew=[$xlsnew] book=[$book] excel=[$excel]\n");

	printf( "$progid test1 $dttm MSG_300: sheet=[$sheet] book=[$book] excel=[$excel] [$xlsfil][$xlsnew]\n" );

	$excel->{'Visible'} = 0;				# 0 is hidden, 1 is visible
	$excel->{DisplayAlerts} = 0;				# 0 is hide alerts

	printf( "$progid test1 $dttm MSG_305: sheet=[$sheet] book=[$book] excel=[$excel] [$xlsfil][$xlsnew]\n" );

	$new_title="new_title_$dttm";
	$cur_title=$sheet->Range("$title_range")->{Value};
	$sheet->Range("$title_range")->{value} = $new_title;

	$sheet->Range("j12")->{value} = "1200";
	$sheet->Range("k12")->{value} = "1400";
	$sheet->Range("m12")->{value} = "c";
	$sheet->Range("j13")->{value} = "1300";
	$sheet->Range("k13")->{value} = "1400";
	$sheet->Range("m13")->{value} = "g";

	$sheet->Range("r18")->{value} = "0";
	$sheet->Range("s18")->{value} = "450";
	$sheet->Range("u18")->{value} = "c";

	$sheet->Range("z14")->{value} = "1200";
	$sheet->Range("aa14")->{value} = "1400";
	$sheet->Range("ac14")->{value} = "g";
	$sheet->Range("z16")->{value} = "1300";
	$sheet->Range("aa16")->{value} = "1400";
	$sheet->Range("ac16")->{value} = "c";


	$sheet->Range("b9:d9")->{value} = "2012-01-8";
	$sheet->Range("f9")->{value} = "2012-01-09";
	$sheet->Range("j9")->{value} = "2012-01-10";
	$sheet->Range("n9")->{value} = "2012-01-11";
	$sheet->Range("r9")->{value} = "2012-01-12";
	$sheet->Range("v9")->{value} = "2012-01-13";
	printf( "$progid $dttm test1 MSG_319:  cur_title=[$cur_title] new_title=[$new_title]\n" );

# Pie Chart
	my $range = $sheet->Range('j40:j43');
	printf( "BUGS_345:  range=[$range]\n" );
	my $chart = $book->charts->add;
	$chart->chartwizard($range,xl3DPie,7,xlRows,1,0,2,"test Percentages");

# Bar Graph and Rotate
	my $range = $sheet->range('j40:j43');
	my $chart = $excel->charts->add;
	$chart->{type} = xl3DColumn;
	for (my $i = 30; $i <=180; $i+=10) {$chart->{rotation} = $i; sleep(1);}

# Line Chart and Save
	my $range = $sheet->range('j40:j43');
	my $chart = $excel->charts->add;
	$chart->{charttype} = xlLine;
	$chart->SetSourceData({source => $range, PlotBy => xlColumns});
	$chart->{HasTitle} = 1;
	$chart->charttitle->{text} = "tes1_title";

	my $chartobj = $sheet->chartObjects;

##	$giffil="j:\\ko_center\\oy3\\new_excel.gif
##	$Chart->Export({FileName   => $giffil, FilterName => 'GIF', Interactive  => 0});

# Save as PDF
##	$excel->activewindow->SelectedSheets->PrintOut({Copy => 1, ActivePrinter => 'Acrobat PDFWriter'});


	$book->saveAs($xlsnew)
	|| die "$progid $dttm test1 ERR_320:  book->saveas($xlsnew) sheet=[$sheet] book=[$book] excel=[$exel]\n";
	printf( "$progid $dttm test1 MSG_320:  book->saveas($xlsnew) sheet=[$sheet] book=[$book] excel=[$excel]\n");

	$book->save
	|| die "$progid $dttm test1 ERR_321: book->save sheet=[$sheet] book=[$book] excel=[$excel]\n";
	printf( "$progid $dttm test1 MSG_321: book->save sheet=[$sheet] book=[$book] excel=[$excel]\n");

	$book->close
	|| die "$progid $dttm test1 ERR_325: book->close sheet=[$sheet] book=[$book] excel=[$excel]\n";
	printf( "$progid $dttm test1 MSG_325:  book->close sheet=[$sheet] book=[$book] excel=[$excel]\n" );

	$excel->quit()
	|| die "$progid $dttm test1 ERR_330: excel->quit sheet=[$sheet] book=[$book]  excel=[$excel]\n";
	printf( "$progid $dttm test1 MSG_330: excel->quit sheet=[$sheet] book=[$book] excel=[$excel]\n" );

	undef $book 
	|| printf( "$progid ts2csv $dttm ERR_331:  UNDEF_BOOK:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n");
	printf( "$progid ts2csv $dttm MSG_331:  UNDEF_BOOK:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n" );

	undef $excel 
	|| printf( "$progid ts2csv $dttm ERR_332:  UNDEF_EXEL:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n");
	printf( "$progid ts2csv $dttm MSG_332:  UNDEF_EXEL:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n" );

	printf( "$progid test1 $dttm END_345: sheet=[$sheet] book=[$book] excel=[$excel] \n");
	printf( "$progid test1 $dttm END_345: xlsfil=[$xlsfil] xlsnew=[$xlsnew] \n");
	}

sub ole_xls_saveas( $option1, $option2, $option3 ) {
	}


sub ole_templet2ts( $yyyy, $fy, $p, $q, $begtdt, $enddt, $dtm_data, $dayofweek_info ) {
	$yyyy=shift; $fy=shift; $p=shift, $q=shift, $begdt=shift, $enddt=shift, $dtm_data=shift; $dayofweek_info=shift;
	$xlsfil=$ts_path_xlsfil_win;

	$tstemplet_xlsfil="konet_ts_templet.xls";
	$pathwork="s:/xampp/htdocs/kxls/work/";
	$pathwork_win="s:\\xampp\\htdocs\\ko_center\\work\\";

	$begdttm=$begdt; $begdttm =~ s/-//g;
	$enddttm=$enddt; $enddttm =~ s/-//g;

	$ts_title=sprintf( "period_%02d-%02d-%1d_%s-%s", $fy, $p, $q, $begdttm, $enddttm  );	
	$ts_txtfil=sprintf( "konet_ts_%02d-%02d-%1d_%s-%s.txt", $fy, $p, $q, $begdttm, $enddttm  );	
	$ts_xlsfil=sprintf( "konet_ts_%02d-%02d-%1d_%s-%s.xls", $fy, $p, $q, $begdttm, $enddttm  );	
	$ts_xlspdf=sprintf( "konet_ts_%02d-%02d-%1d_%s-%s.pdf", $fy, $p, $q, $begdttm, $enddttm  );	

	$tstemplet_path_xlsfil_win="$pathwork_win$tstemplet_xlsfil";
	$invtemplet_path_xlsfil_win="$pathwork_win$invtemplet_xlsfil";
	$pathwork_win="s:\\xampp\\htdocs\\ko_center\\work\\";

	$tstemplet_path_xlsfil_win="$pathwork_win$tstemplet_xlsfil";
	$invtemplet_path_xlsfil_win="$pathwork_win$invtemplet_xlsfil";

	( $mydt, $myt1, $myt2, $myhr, $mycd, $mydesc ) = split( /\|/, $dtm_data );
	if( $myhr == "" ) { $myhr = $myt2 - $myt1; }

	$sql_dayofweek=sprintf( "select strftime('\%w', '%s' );", $mydt );
	$dayofweek_num = &sqlval( $dbfile, $sql_dayofweek );

	$mynow = &sqlval( $dbfile, "select strftime( '\%Y-\%m-\%d', date('now'))" );

##	$begdt = &sqlval( $dbfile, date('$begdt') );
##	$begdt0 = &sqlval( $dbfile, date('begdt','weekdat 0') );
##	printf( "$progid $dttm MSG_222: now=[$now] begdt=[$begdt] \n" );
##	printf( "$progid $dttm MSG_222: begdt0=[$begdt0] begdt6=[$begdt6] enddt=[$enddt]\n";

	$dayofweek_order = "1 2 3 4 5 6 0";
	$dayofweek_info[0] = "1 E:20 Sun";
	$dayofweek_info[1] = "2 I:20 Mon";
	$dayofweek_info[2] = "3 M:20 Tue";
	$dayofweek_info[3] = "4 Q:20 Wed";
	$dayofweek_info[4] = "5 U:20 Thr";
	$dayofweek_info[5] = "6 X:20 Fri";
	$dayofweek_info[6] = "0 AC:20 Sat";
	( $dayofweek_order, $rowcol, $dayofweek_name ) = split( / /, $dayofweek_info[$dayofweek_num] );

	printf( "$prodid $dttm MSG_950:  $mydt, $myhr, $mycd, $mydesc\n" );

	$daynames_text= "Sat Sun Mon Tue Wed Thr Fri";
	@daynames = split( / /, $daynames_text );
	printf( "ole__xls_templet2ts BUGS_928 $daynames_text $dayname[0] $dayname[6] $mynow kkkkkkkkkkkkkkkkkkkkk\n" );
	for( $daynum=0; $daynum<7; $daynum++ ) {
##		$sql_daydate=sprintf( "select strftime('\%Y-\%m-\\\%d', \'%s\', \'weekday %d\' );", $begdt, $daynum );
##		$sql_daydate=sprintf( "select strftime('\%Y-\%m-\\\%d', \'%s\', \'weekday %d\' );", $begdt, $daynum );
		$sql_daydate = "select strftime('\%Y-\%m-\%d', ";
		$sql_daydate .= "\'".$begdt."\', ";
		$sql_daydate .= "\'weekday ". $daynum ."\'";
##		$myday = &sqlval( $dbfile, "select strftime( '\%Y-\%m-\%d', date('now', 'weekday $daynum' )" );


		$daydates[$daynum] = &sqlval( $dbfile, "select date('$begdt', '$daynum day' )" );

##		$daydates[$daynum] = &sqlval( $dbfile, $sql_daydate );
##		$daydat = &sqlval( $dbfile, $sql_daydate );
##		$daydate = &sqlval( $dbfile, "select strftime( '\%Y-\%m-\%d', date('now','+$daynum')" );
		$dayname = $daynames[$daynum];
		$daydate = $daydates[$daynum];


##		printf( "$progid $dttm MSG_960: daynum=[$daynum] daydate=[$daydate] dayname=[$dayname] \n" );
##		next;
		}

##		for( $daynum=0; $daynum<7; $daynum++ ) {
##			printf( "$progid $dttm MSG_966: dnum=[%d] daydates=[%s] dayname=[%s] info=[$info]\n",
##				$daynum, $daydates[$daynum], $daynames[$daynum], $dayofweek_info[$daynum]);
##			}

##	printf( "$progid $dttm MSG_990:  dayofweek_order=[$dayofweek_order] dayofweek_name=[$dayofweek_name] $rowcol\n" );
##	printf( "$progid $dttm MSG_831:  dayofweek_info=[$dayofweek_info]\n" );
##	printf( "$progid $dttm MSG_835:  ts_templet_xlsfil=[$ts_templet_xlsfil]\n" );
##	printf( "$progid $dttm MSG_835:  ts_xlsfil=[$ts_xlsfil]\n" );
##	printf( "$progid $dttm MSG_840:  ts_title=[$ts_title]\n" );

        $period_range="J3:J3";
        $title_range="J3:J3";
        $title_range2="J6:J6";

        $sat_range="B8:E8";
        $sun_range="F8:I8";
        $mon_range="J8:M8";
        $tue_range="N8:Q8";
        $wed_range="R8:U8";
        $thr_range="V8:Y8";
        $fri_range="Z8:AB8";

        $satdt_range="B8:E8";
        $sundt_range="F8:I8";
        $mondt_range="J8:M8";
        $tuedt_range="N8:Q8";
        $weddt_range="R8:U8";
        $thrdt_range="V8:Y8";
        $fridt_range="Z8:AB8";
	$dayname_ranges[0]="B8:E8";
        $dayname_ranges[1]="F8:I8";
        $dayname_ranges[2]="J8:M8";
        $dayname_ranges[3]="N8:Q8";
        $dayname_ranges[4]="R8:U8";
        $dayname_ranges[5]="V8:Y8";
        $dayname_ranges[6]="Z8:AB8";

	$daydate_ranges[0]="B9:E9";
        $daydate_ranges[1]="F9:I9";
        $daydate_ranges[2]="J9:M9";
        $daydate_ranges[3]="N9:Q9";
        $daydate_ranges[4]="R9:U9";
        $daydate_ranges[5]="V9:Y9";
        $daydate_ranges[6]="Z9:AB9";


#       $t1[$daynum][$slot];
#       $t2[$daynum][$slot];
#       $t12[$daynum][$slot];
#       $code[$daynum][$slot];

        @week_cols_h1 = qw!B F J N R V Z!;
        @week_cols_h2 = qw!C G K O S W AA!;
        @week_cols_tm = qw!D H L P T X AB!;
        @week_cols_cd = qw!E I M Q U Y AC!;
        $day_row=8;
        $dt_row=9;
        @time_rows = qw!12 13 14 15 16 17 18 19 20 21!;

	$tmpfil=$tstemplet_path_xlsfil_win;
	$xlsfil=$ts_path_xlsfil_win;
	$xlspdf=$ts_path_xlxfil_win; $xlspdf =~ s/xls/pdf/;

	$tstemplet_path_xlsfil_win="$pathwork_win$tstemplet_xlsfil";
	$invtemplet_path_xlsfil_win="$pathwork_win$tstemplet_xlsfil";
	$pathwork_win="s:\\xampp\\htdocs\\ko_center\\work\\";
	
	$tstemplet_path_xlsfil_win="$pathwork_win$tstemplet_xlsfil";
	$tsv_path_xlsfil_win="$pathwork_win$ts_xlsfil";

	$tmpfil=$tstemplet_path_xlsfil_win;
        $xlsfil=$ts_path_xlsfil_win;
		


	if( -f $ts_path_xlsfil_win ) { 
		printf( "$progid $dttm MSG_1060:  FOUND ts_path_xlsfil_win=[$ts_path_xlsfil_win]\n" );
		}
	else {
		printf( "$progid $dttm ERR_1065:  NOTFOUND  ts_path_xlsfil_win=[$ts_path_xlsfil_win]\n" );
		if( -f $tstemplet_path_xlsfil_win ) { 
			printf( "$progid $dttm MSG_1930:  FOUND  tsnew_path_xlsfil_win=[$tsnew_path_xlsfil_win]\n" );

			$ts_path_xlsfil_win="$pathwork_win$ts_xlsfil";
			$xlsfil=$ts_path_xlsfil_win;
			printf( "$progid $dttm MSG_870:  ts_path_xlsfil_win=[$ts_path_xlsfil_win]\n" );
			printf( "$progid $dttm MSG_871:  dtm_data=[$dtm_data] dayofweek_info=[$dayofweek_info]\n" );

#			$cmd_cp="copy $tstemplet_path_xlsfil_win $xlsfil";
			$cmd_cp="copy $tmpfil $xlsfil";
			if( ! -f $xlsfil ) {
				printf( "$progid $dttm dt2kxls MSG_2030: cmd_cp=[$cmd_cp]\n" );
				system( $cmd_cp );
				}
			}
		else {
			printf( "$progid $dttm ERR_885:  NOTFOUND  tsnew_path_xlsfil_win=[$tsnew_path_xlsfil_win]\n" );
#			exit;
			}
		}

	printf( "$progid $dttm MSG_900:  ole_templet2ts  ts_path_xlsfil_win=[$tsw_path_xlsfil_win]\n" );
	printf( "$progid $dttm MSG_900: ts_xlsfil=[$ts_xlsfil] [$yyyy][$fy][$p][$q][$wk][$begdt][$enddt]\n");
	printf( "$progid $dttm MSG_900: ts_title=[$ts_title] [$yyyy][$fy][$p][$q][$wk][$begdt][$enddt]\n");

# open new excel instance
#	if (! defined $excel) {
	if (("$excel" eq "1" ) || ( "$excel" eq "" )) {
		$excel = Win32::OLE->new('Excel.Application', 'Quit')
		|| die printf( "$progid ole_ts_new $dttm ERR_815:  OLE->new excel=[$excel]\n" );
		printf( "$progid ole_ts_new $dttm MSG_815:  OLE->new excel=[$excel]\n" );
		}
	else {
		printf( "$progid ole_ts_new $dttm MSG_816:  GetActiveObject DEFINED excel=[$excel]\n" );
		}

##	$book = $excel->Workbooks->Open("$xlstmp") 
##	$book = $excel->Workbooks->Open("$from_xls") 
##	 || die printf( "$progid ts2csv $dttm ERR:  open from_xls=[$from_xls] book=[$book] excel=[$excel]\n");


##	$book = $excel->Workbooks->Open("$xlsfil") 
##	$book = $excel->Worksbooks->Open("$to_xls") 

	$book = $excel->Workbooks->Open($xlsfil) 
	|| die printf( "$progid ts2csv $dttm ERR_1094:  open xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n");
	printf( "$progid $dttm MSG_1094:  open xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n" );


	$sheet = $book->Worksheets(1) 
	|| die printf( "$progid ole_ts $dttm ERR_1100:  sheet  xlsfil=[$xlsfil] sheet=[$sheet] book=[$book] excel=[$excel]\n");
##	printf( "$progid $dttm MSG_1101:  sheet  xlsfil=[$xlsfil] sheet=[$sheet] book=[$book] excel=[$excel]\n");

	$sheetname = $book->Worksheets(1) -> { Name };
##	die printf( "$progid db2ts $dttm ERR_835:  sheet  xlsnew=[$xlsnew] book=[$book] excel=[$excel]\n");
	printf( "$progid ole_xls_new $dttm MSG_840:  sheetname=[$sheetname]  xlsnew=[$xlsnew] sheet=[$sheet] book=[$book] excel=[$excel]\n");

	$sheet -> Activate ||
	die printf( "$progid test1 $dttm ERR_841:  Activate sheet  xlsnew=[$xlsnew] book=[$book] excel=[$excel]\n");
	printf( "$progid test1 $dttm MSG_841:  Activate sheet=[$sheet]  xlsnew=[$xlsnew] book=[$book] excel=[$excel]\n");

	printf( "$progid ole_xls_new $dttm MSG_842: sheet=[$sheet] book=[$book] excel=[$excel] [$xlsfil][$xlsnew]\n" );

	$excel->{'Visible'} = 0;				# 0 is hidden, 1 is visible
	$excel->{DisplayAlerts} = 0;				# 0 is hide alerts

	printf( "$progid $dttm MSG_840: sheet=[$sheet] book=[$book] excel=[$excel] [$from_xls][$to_xls]\n" );
	printf( "$progid $dttm MSG_850: from_xls=[$xlsvil]\n" );

	$new_title=$ts_title;
	$cur_title=$sheet->Range("$title_range")->{Value};
	$sheet->Range("$title_range")->{value} = $new_title;


	$daynums_text="0 1 2 3 4 5 6";
	@daynums = split( / /, $daynums_text );
	foreach $daynum (@daynums) {
		$dayname=$daynames[$daynum];
		$daydate=$daydates[$daynum];
		$dayname_range=$dayname_ranges[$daynum];
		$daydate_range=$daydate_ranges[$daynum];
##		printf( "$progid $dttm MSG_1140:  $daynum=[$daynum] dayname=[$dayname] daydate=[$daydate]\n" );
##		printf( "$progid $dttm MSG_1140:  $daynum=[$daynum] dayname_range=[$dayname_range] daydate=[$daydate_range]\n" );

		$sheet->Range("$dayname_range")->{value} = $dayname;
		$sheet->Range("$daydate_range")->{value} = $daydate;
		}

        $cols_t1_text = qw!B F J N R V Z!;
        $cols_t2_text = qw!C G K O S W AA!;
        $cols_hr_text = qw!D H L P T X AB!;
        $cols_cd_text = qw!E I M Q U Y AC!;
        $day_row=8;
        $dt_row=9;
        @tm_rows_text = qw!12 13 14 15 16 17 18 19 20 21!;


##	printf( "BUGS_1200 mydt=[$mydt] myt1=[$myt1] myt2=[$myt2] mycd=[$mycd]\n" );
	$j=100; $daynum=0;
	foreach  $cols ( split( / +/, "b|c|e  f|g|i j|k|m n|o|q r|s|u v|w|y z|aa|ac" )) {
##		printf( "$progid $dttm MSG_1154:  cols=[$cols]\n" );
		( $col_t1, $col_t2, $col_cd ) = split( /\|/, $cols );
		$dayname=$daynames[$daynum];
		$daydate=$daydates[$daynum];
		printf( "BUGS_1171 cols=[$cols][row] daynum=[$daynum] daydate=[$daydate] dayname=[$dayname]\n" );
		printf( "BUGS_1172 col_t1=[$col_t1] col_t2=[$col_t2] col_cd=[$col_cd]\n" );
##		next;

##		printf( "BUGS_1240  mydt=[$mydt]  daydate=[$daydate] daynum=[$daynum] dayname=[$dayname]\n" );
		foreach $row ( split( / /, "12 13 14 15 16 17 18 19 20 21" )) {
			$range_t1=sprintf( "%s%d", $col_t1, $row );
			$range_t2=sprintf( "%s%d", $col_t2, $row );
			$range_cd=sprintf( "%s%d", $col_cd, $row );
			if( $mydt eq $daydate ) {
				$sheet_t1 = $sheet->Range($range_t1)->{Value};
				$sheet_t2 = $sheet->Range($range_t2)->{Value};
				$sheet_cd = $sheet->Range($range_cd)->{Value};

				if( $sheet_t1 ne "" ) { next; }
				if( $sheet_t2 ne "" ) { next; }
				if( $sheet_cd ne "" ) { next; }

##				printf( "$progid $dttm MSG_1250:  mydt=[$mydt][$myt1][$myt2][$mycd]\n" );
##				printf( "$progid $dttm MSG_1250:  daynum=[$daynum] daydate=[$daydate] dayname=[$dayname]\n" );
##				printf( "$progid $dttm MSG_1250:  range_t1=[$range_t1][$range_t2] range_cd=[$range_cd]\n" );

				$sheet->Range($range_t1)->{Value} = $myt1;
				$sheet->Range($range_t2)->{Value} = $myt2;
				$sheet->Range($range_cd)->{Value} = $mycd;
				last;
				printf( "$progid $dttm MSG_1251:   FOUND $mydt $daynum $daydate $dayname\n" );
				}
			else {
##				printf( "$progid $dttm MSG_1252:   SKIP $mydt $daynum $daydate $dayname\n" );
##				$j=$j+100;
##				printf( "BUGS_1240 col=[$col][$row] range=[$range]\n" );
##				$sheet->Range($range_t1)->{Value} = "1200";
##				$sheet->Range($range_t2)->{Value} = "1300";
##				$sheet->Range($range_cd)->{Value} = "z";
				}
			}
		$daynum++;
		}

##	foreach  $col ( split( / /, "B F J N R V Z" )) {
##		foreach $row ( split( / /, "12 13 14 15 16 17 18 19 20 21" )) {
##			printf( "BUGS_1155a range=[$row:$col]\n" );
##			$colrow=sprintf( "%s%d", $col,$row );
##			$val=$sheet->Range($colrow)->{Value};
##			$sheet->Range("$col:$row")->{Value} = "100";
##			printf( "BUGS_1155b  val=[$val] range=[$colrow]\n" );
##			}
##		}
##
###		@rows_t1 = split( / /, "12 13 14 15 16 17 18 19 20 21" ) {
###		foreach $t1_row  ( split( / /, "12 13 14 15 16 17 18 19 20 21" )) {
###			printf( "BUGS_1160:  col=$t1_col row=[$t1_row]\n" );
###			$t1_val=$sheet->Range($t1_col:$t1_row)->{Value};
###			if( $t1_val == "" ) {
###				$sheet->Range("$t1_col:$t1_row")->{value} = $myt1;
####				last;
###				}
###			else {
###				$sheet->Range("$t1_col:$t1_row")->{value} = "1000";
###				}
###			}
###		}
###


	$slot=12;

##	if ( $cur_range_j12=$sheet->Range("$j$slot")->{Value} != "" )
##	|| ( $cur_range_k12=$sheet->Range("$k$slot")->{Value} != "" )
##	|| ( $cur_range_m12=$sheet->Range("$m$slot")->{Value} != "" ) 
##



	$sql_dayofweek=sprintf( "select strftime('\%w', '%s' );", $mydt );
	$dayofweek_num = &sqlval( $dbfile, $sql_dayofweek );


	printf( "$progid ole_templet2ts $dttm MSG_1225:  colrow=[$colrow] value=[$value]  sheet=[$sheet] excel=[$excel]\n" );

# This turns off the "This file already exists" message.
	$excel-> {DisplayAlerts} = 0;
##	die printf( "$progid ole_ts_new $dttm ERR_1230:  excel->DisplayAlerts = 0 xlsnew=[$xlsnew] excel=[$excel]\n" );

	$book->SaveAs ("$xlsfil") || 
	die printf( "$progid ole_ts_new $dttm ERR_1231:  book->saveas xlsfil=[$xlsfil] excel=[$excel]\n" );
	printf( "$progid ole_ts_new $dttm MSG_1232:  book->saveas to_xls=[$xlsfil] excel=[$excel]\n" );

##	$book->Save() || 
##	die printf( "$progid ole_ts_new $dttm ERR_1234:  book->save xlsnew=[$xlsfil] excel=[$excel]\n" );
##	printf( "$progid ole_ts_new $dttm MSG_1234:  book->save xlsfil=[$xlsfil] excel=[$excel]\n" );

     	$book->Close() 
	|| die printf( "$progid ts2csv $dttm ERR_1240:  book->close xlsfil=[$xlsfil] excel=[$excel]\n" );
	printf( "$progid ts2csv $dttm MSG_1240:  book->close xlsfil=[$xlsfil] excel=[$excel]\n" );

## 	$book->Quit() 
##	|| die printf( "$progid ts2csv $dttm ERR_1245:  book->quit xlsfil=[$xlsfil] excel=[$excel]\n" );
##	prrintf( "$progid ts2csv $dttm MSG_1245:  book->quit to_xls=[$to_xls] excel=[$excel]\n" );


	printf( "$progid ole_ts_new $dttm END_1250: \n" );
	return;

# pqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpq
#	printf( "$progid ts2csv $dttm BEG_1140: display xlsfil=[$xlsfil]\n" );
	

#	@hrs="";
	$hrs[0][0]="";
	$daynum=0;
	$flipflop=1;
#	$excel->{Visible} = 0;
# 	black and white:   ActivePrinter => '\\NETPRINTSRV\p21 on Ne01:',
# 	color:             ActivePrinter => "ACROBAT:",
# 	default printer:   ActivePrinter => $pobj,

##	printf( "$progid ts2csv $dttm BEG:  excel=[$excel]\n" );

	$period=$sheet->Range("$period_range")->{Value} 
	|| die printf( "$progid ts2csv $dttm ERR:  period=[$period] excel=[$excel]\n" );
##	printf( "$progid ts2csv $dttm MSG_600:  period=[$period]\n" );


#	printf( "$progid ts2csv $dttm MSG_600:  period=[$period] excel=[$excel]\n" );

# get period info from formated title
#	period_13-1_20091227-20090102
	$period =~ s/-/_/g;
#	period_13_1_20091227_20090102
	@period_flds=split(/_/,$period);
	$period_pp=$period_flds[1];
	$period_p=$period_flds[2];
	$begdt_text=$period_flds[3];
	$enddt_text=$period_flds[4];
	$fy=substr($enddt_text,0,4);
	$begdt=sprintf( "%04d-%02d-%02d",
		substr($begdt_text,0,4),
		substr($begdt_text,4,2),
		substr($begdt_text,6,2)
		);
	$enddt=sprintf( "%04d-%02d-%02d",
		substr($enddt_text,0,4),
		substr($enddt_text,4,2),
		substr($enddt_text,6,2)
		);
#	$keytext=sprintf( "%s,%s,%s,%s,%s,", $fy,$period_pp, $period_p, $begdt, $enddt );
	$keytext=sprintf( "%s,%s,%s", $fy,$period_pp, $period_p );

	$title=$sheet->Range("$period_range")->{Value};
##	printf( "pqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpq\n" );
##	printf( "$progid ts2csv $dttm MSG_630:\ntitle=[$title]\n" );
##	printf( "bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd\n" );
##	return;

	$daynum=0;
	foreach $col (@week_cols_h1 ) {
##		printf( "$progid $dttm MSG_640: daynum=[$daynum] col=[$col] xlsfil=[$xlsfil]\n" );
		$day[$daynum]=$sheet->Range("$col$day_row:$col$day_row")->{Value};
		$sheet->Range("$col$dt_row:$col$dt_row")->{NumberFormat} ="yyyy-mm-dd";
		$dt[$daynum]=$sheet->Range("$col$dt_row:$col$dt_row")->{Value};
		@dt_flds=split(/\//,$dt[$daynum] );
		$effdt[$daynum]=sprintf( "%04d-%02d-%02d",
			$dt_flds[2],$dt_flds[0], $dt_flds[1] );

##		printf( "($col$day_row) $daynum day=$day[$daynum]\n" );
##		printf( "BUGS_645:  ($col$dt_row) $daynum dt=$dt[$daynum] effdt=$effdt[$daynum]\n" );

		$tsdrec_hdr=sprintf( "$period,$filnam_id$pkey_h1,$keytext,$hrstext,$xlsfil,status," );
		$tsdrec_days = "";
		foreach $row (@time_rows) {
#		$week_cols_h1 = qw!B F J N R V Z!;
			$range_h1=sprintf( "%s%s:%s%s", $week_cols_h1[$daynum],$row,$week_cols_h1[$daynum],$row );
			$range_h2=sprintf( "%s%s:%s%s", $week_cols_h2[$daynum],$row,$week_cols_h2[$daynum],$row );
			$range_tm=sprintf( "%s%s:%s%s", $week_cols_tm[$daynum],$row,$week_cols_tm[$daynum],$row );
			$range_cd=sprintf( "%s%s:%s%s", $week_cols_cd[$daynum],$row,$week_cols_cd[$daynum],$row );
##			printf( "$progid ts2csv $dttm MSG:  r=($range) r1=($range1) r2=($range2)\n" );
			$hrs[$daynum][0]=$sheet->Range("$range_h1")->{Value};
			$hrs[$daynum][1]=$sheet->Range("$range_h2")->{Value};
			$hrs[$daynum][2]=$sheet->Range("$range_tm")->{Value};
			$hrs[$daynum][3]=$sheet->Range("$range_cd")->{Value};

			$rangetext=sprintf( "h1=(%s) h2=(%s) tm=(%s) cd=(%s)",
				$range_h1,$range_h2,$range_tm,$range_cd );
##			printf( "$progid ts2csv $dttm MSG:  rangetext=[$rangetext]\n " );

#			$hrs[$daynum][0],
			$h1=$hrs[$daynum][0];
			if( "$h1" eq "" ) { $h1=sprintf( "%04d", $pkey_h1 ); }	
			$pkey_h1=sprintf( "%04d", ($pkey_h1+250));
			if( $pkey_h1 > 2400 ) { $pkey_h1="0000"; }

##			printf( "$progid ts2csv $dttm MSG_670: daynum=$daynum  h1=[$h1] [pkey_h1=[$pkey_h1] hrs=$hrs[$daynum][0]\n" );
			$hrstext=sprintf( "%s,%s,%s,%s,%s,%s,",
				$effdt[$daynum], $day[$daynum], $h1,
				$hrs[$daynum][1],
				$hrs[$daynum][2],
				$hrs[$daynum][3]
				);

##			$tsdrec_days .= "$hrs[$daynum][0],$hrs[$daynum][1],$hrs[$daynum][2],$hrs[$daynum][3],";
##			printf( TSDCSV "$filnam_id$pkey_h1,$keytext,$hrstext,$col$row,$xlsfil,$status,desc\n" );
			$tsdrec = $tsdrec_hdr . $hrstext . "\n";
			printf( TSDCSV $tsdrec );

##			$tsdrec = $tsdrec_hdr . $tsdrec_days;
##			printf( TSDCSV "$tsdrec\n" );


##			$csvrec_hdr  = "";
##			$csvrec_hdr .= "$period,$xlscsv,,,,,,\n";
##			$csvrec_hdr .= "$period,$xlscsv,,,,,,,,\n";
##			$csvrec_hrs = "";
##			$csvrec_hdrdt="";
##			printf( "$progid $dttm MSG_698:  tsdrec=[$tsdrec]\n" );
##			printf( "$progid $dttm MSG_699:  tssrec=[$tssrec]\n" );
##
##			printf( "$progid $dttm MSG_700:  daynum=[$daynum]\n" );
##			$csvrec_hdrdt .= "$period,$hdrdt[$daynum],";
##
##			$csvrec_dtl .= "$week_cols_h1[$daynum],$week_cols_h1[$daynum],";
##			$csvrec_dtl .= "$week_cols_h2[$daynum],$row,$week_cols_h2[$daynum],";
##			$csvrec_dtl .= "$week_cols_tm[$daynum],$row,$week_cols_tm[$daynum],";
##			$csvrec_dtl .= "$week_cols_cd[$daynum],$row,$week_cols_cd[$daynum],";
##			$csvrec_dtl .= "$hrs[$daynum][0],";
##			$csvrec_dtl .= "$hrs[$daynum][1],";
##			$csvrec_dtl .= "$hrs[$daynum][2],";
##			$csvrec_dtl .= "$hrs[$daynum][3],";
##
##			$csvrec_hrs  = "";
##			for( $slots=1; $slots<10; $slots++ ) {
##				$csvrec_hrs .= "$period,";
##				$csvrec_hrs .= "$begdt[$daynum][$slot],";
##				$csvrec_hrs .= "$enddt[$daynum][$slot],";
##				$csvrec_hrs .= "$hrs[$daynum][$slot],";
##				$csvrec_hrs .= "$code[$daynum][$slot],\n";
##				}
##
##			$csvrec_hdrdt .= "\n";
##			$csvrec_dtl .= "\n";
##			$csvrec  = "";
##			$csvrec .= $csvrec_hdr . $csvrec_hdrdt . $csvrec_dtl . "," . $csvrec_hrs . "\n";
##			$csvrec .= "$filnam_id$pkey_h1,$keytext,$hrstext,$col$row,$xlsfil,$status,desc\n";



#			printf( "BUGS_730:  csvrec=[$csvrec] xlscsv=[$slxcsv]\n" );
##			printf( XLSCSV "$csvrec\n" );

#			printf( XLSCSV "$pkey,$keytext,$hrstext,,$col$row,desc,\n" );
#			printf( XLSCSV "$keytext,$hrstext,amt,amtc,amtg,$col$row,desc,\n" );

#			printf( "BUGS_680:  $filnam_id$pkey_h1,$keytext,$hrstext,$col$row,desc\n" );
#			$sheet->Range("$range_h1")->{Value}=$row*100;
#			$sheet->Range("$range_h2")->{Value}=$row*100+150;
#			if( $flipflop == 1 ) {
#				$sheet->Range("$range_cd")->{Value}="c";
#				}
#			else {
#				$sheet->Range("$range_cd")->{Value}="g";
#				}
#			$flipflop=$flipflop*(-1);
			}
		$daynum++;
		printf( "\n" );
		}

	$book->Save({Filename =>'$to_xls', FileFormat => xlWorkbookNormal})
	|| die "$progid $dttm ERR_860: book->saveas $to_xls\n";
	printf( "$progid $dttm MSG_860: book->saveas $to_xls\n" );

##	$book->SaveAs({Filename =>'$to_xls', FileFormat => xlWorkbookNormal})
##	|| die "$progid $dttm ERR_860: book->saveas $to_xls\n";
##	printf( "$progid $dttm MSG_860: book->saveas $to_xls\n" );

	$book->Close()
	|| die "$progid $dttm ERR_861: book->close $to_xls\n";
	printf( "$progid $dttm MSG_861: book->close $to_xls\n" );

	$excel->Quit()
	|| printf( "$progid ole_ts $dttm ERR_870:  excel->Quit()  book=[$book] excel=[$excel]\n");
	printf( "$progid ole_ts $dttm MSG_875:  excel->Quit()  book=[$book] excel=[$excel]\n");


#	$book->Save 
#	|| printf( "$progid xls2pdf $dttm ERR:  book->Save  book=[$book] excel=[$excel]\n");
#	printf( "$progid xls2pdf $dttm MSG:  book->Quit  book=[$book] excel=[$excel]\n");

	undef $book ||
	printf( "$progid xls2pdf $dttm ERR:  UNDEF_BOOK:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n");
	printf( "$progid xls2pdf $dttm MSG:  UNDEF_BOOK:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n" );

        undef $excel ||
	printf( "$progid xls2pdf $dttm ERR:  UNDEF_EXEL:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n");
	printf( "$progid xls2pdf $dttm MSG:  UNDEF_EXEL:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n" );
	}

sub dtmdta( $fy, $pp, $q, $begdt, $enddt, $dtm_data, $options ) {
	$fy=shift; $pp=shift; $q=shift; $begdt=shift; $enddt=shift; $dtm_data=shift; $options=shift; 
	printf( "$progid $dttm dtmdta MSG_1472:  fy=[$fy] p=[$p] q=[q] begdt=[$begdt] enddt=[$enddt] dbfile=[$dbfile]\n" );

	$mynow = &sqlval( $dbfile, "select strftime( '\%Y-\%m-\%d', date('now'))" );

	$p=sprintf( "%02d", $pp );
##      $where_clause="where date('$mydt') between date(begdt) and date(enddt)";
	if(( $fy eq "" ) & ( $p eq "" ) & ( $q eq "" )) { $where_clause=""; }
	if(( $fy ne "" ) & ( $p eq "" ) & ( $q eq "" )) { $where_clause="where fy='$fy' "; }
	if(( $fy ne "" ) & ( $p ne "" ) & ( $q eq "" )) { $where_clause="where fy='$fy' and p='$p' "; }
	if(( $ne eq "" ) & ( $p ne "" ) & ( $q ne "" )) { $where_clause="where fy='$fy' and p='$p' and q='$q' "; }
        $sql_periods="select yyyy, fy, p, q, wk, begdt, enddt, endday, desc, oy, est, inv from periods $where_clause";

##      $sql_periods="select yyyy,fy,p,q,wk,begdt,enddt,oy,endday,desc,f1 est from periods where date('2012-11-12') between date(begdt) and date(enddt);";

        printf( "$progid $dttm MSG_1470 dbfile=[$dbfile] mynow=[$mynow] sql_periods=[$sql_periods]\n" );
        @$rows = &sqlvals( $dbfile, $sql_periods );
        $rowcnt=0;

        $co="konet";
        $user="kassilj";
        $user_name="joachim kassil";
        $co_name="konet llc";

        $tstemplet_xlsfil="konet_ts_templet.xls";
        $invtemplet_xlsfil="konet_inv_templet.xls";
        $pathwork="s:/xampp/htdocs/kxls/work/";
        $pathwork_win="s:\\xampp\\htdocs\\ko_center\\work\\";
        $tstemplet_path_xlsfil_win="$pathwork_win$tstemplet_xlsfil";
        $invtemplet_path_xlsfil_win="$pathwork_win$invtemplet_xlsfil";

##        printf( "$progid $dttm MSG_1470 dbfile=[$dbfile] sql_periods=[$sql_periods]\n" );
##      &ole_templet2ts_detail_close();
        foreach my $row (@$rows) {
                $rowcnt++;
                ( $yyyy, $fy, $p, $q, $wk, $begdt, $enddt, $endday, $desc, $oy, $est, $inv ) = @$row;
                printf( "\n$progid $dttm MSG_1490: $rowcnt  $begdt - $enddt fy=[%d]-[%02d] q=[%d] wk=[%d] oy=[%d] est=[%d] $inv=[%d]\n",
                $rowcnt, $yyyy, $fy, $p, $q, $wk, $oy, $est, $inv );
#               $ts_txtfil=sprintf( "konet_ts_fy-pp-w_yyyymmdd-yyyymmdd.txt" );
                $begdttm=$begdt; $begdttm =~ s/-//g;
                $enddttm=$enddt; $enddttm =~ s/-//g;

		$daynum=0;
		$my_begdt = &sqlval( $dbfile, "select date('$begdt', '$daynum day' )" );
		$my_enddt = &sqlval( $dbfile, "select date('$enddt', '$daynum day' )" );
##		$difdt = &sqlval( $dbfile, "select julian('$begdt') - julian('$enddt') )" );
##		$my_enddt = &sqlval( $dbfile, "select date('$enddt', '$daynum day' )" );
		printf( "$progid $dttm MSG_1500:  my_begdt=[$my_begdt] my_enddt=[$my_enddt]\n" );

		$dtmdt = $my_begdt;
##        	for( $daynum=$dtmdt_begdt; $daynum<$dtmdt_enddt; $daynum++ ) {
		$daynum=0;
##		while( $dtmdt < $my_enddt ) {
		$psvdta = "";
		$psvfil = sprintf( "%s_%s_dtm.psv", $progid, $dttm );
		open( PSVFIL, ">$psvfil" ) || die "$progid psvfil ERR_1510:  OPEN psvfil=[$psvfil]\n";
##		$psvhdr="mnum|dttm|mbox|mto|sendername|receivedtime|subject|body|\n";

	
		for( $daynum=0; $daynum < 32; $daynum++ ) {
			$sql_daydate = "select strftime('\%Y-\%m-\%d', ";
			$sql_daydate .= "\'".$begdt."\', ";
			$sql_daydate .= "\'weekday ". $daynum ."\'";
			$daydates[$daynum] = &sqlval( $dbfile, "select date('$begdt', '$daynum day' )" );
			$dayname = $daynames[$daynum];
			$daydate = $daydates[$daynum];
			$dtmdt = &sqlval( $dbfile, "select date('$begdt', '$daynum day' )" );
			$dtmdt_day = &sqlval( $dbfile, "select date('$begdt', '$daynum day' )" );
			printf( "$progid $dttm MSG_1520: $daynum  daydate=[$daydate] dtmdt=[$dtmdt] my_enddt=[$my_enddt]\n" );

        		$sql_dayofweek=sprintf( "select strftime('\%w', '%s' );", $dtmdt );
		        $dayofweek_num = &sqlval( $dbfile, $sql_dayofweek );

			if( $dayofweek_num == 6 ) { 	# sat
				$psvdta .= "$dtmdt|0000|0000||c|\n";
				$psvdta .= "$dtmdt|1000|1200||c|\n";
				$psvdta .= "$dtmdt|2100|2400||c|\n";
				}
			if( $dayofweek_num == 0 ) { 	# sun
				$psvdta .= "$dtmdt|0000|0150||c|\n";
				$psvdta .= "$dtmdt|1400|1600||c|\n";
				$psvdta .= "$dtmdt|2300|2400||c|\n";
				}

			if( $dayofweek_num == 1 ) { 	# mon
				$psvdta .= "$dtmdt|1300|1600||c|\n";
				$psvdta .= "$dtmdt|2000|2400||c|\n";
				}
			if( $dayofweek_num > 2 ) { 	# tue
				$psvdta .= "$dtmdt|0000|0150||c|\n";
				$psvdta .= "$dtmdt|1000|1300||g|\n";
				$psvdta .= "$dtmdt|1500|1700||c|\n";
				$psvdta .= "$dtmdt|2230|2400||c|\n";
				}
			if( $dayofweek_num > 3 ) { 	# wed
				$psvdta .= "$dtmdt|0000|0350||c|\n";
				$psvdta .= "$dtmdt|1000|1700||g|\n";
				$psvdta .= "$dtmdt|1500|1700||c|\n";
				$psvdta .= "$dtmdt|2230|2400||c|\n";
				}

			if( $dayofweek_num > 4 ) { 	# thr
				$psvdta .= "$dtmdt|0000|0350||c|\n";
				$psvdta .= "$dtmdt|1000|1300||g|\n";
				$psvdta .= "$dtmdt|1500|1700||c|\n";
				$psvdta .= "$dtmdt|2230|2400||c|\n";
				}

			if( $dayofweek_num > 5 ) { 	# fri
				$psvdta .= "$dtmdt|0000|0300||c|\n";
				$psvdta .= "$dtmdt|1000|1200||c|\n";
				}

			$daynum++;
			if( $dtmdt ge $my_enddt ) { last; }
			if( $daynum > 35 ) { last; }
			}
		print( PSVFIL $psvdta );	
		close( PSVFIL );
		printf( "$progid $dttm MSG_1521: [$psvdta\n] daydate=[$daydate] dtmdt=[$dtmdt] my_enddt=[$my_enddt]\n" );
##              &ole_templet2ts( $yyyy, $fy, $p, $q, $begdt, $enddt, $dtm_data, $dayofweek_info );
##              &ole_templet2ts_detail( $yyyy, $fy, $p, $q, $begdt, $enddt, $dtm_data, $dayofweek_info );
                }
##      &ole_templet2ts_detail_close();


        printf( "$progid $dttm MSG_2620: yyyy=[$yyyy] fy=[$fy] p=[$p] q=[$q] wk=[$wk]\n" );
	}

## sub db2kxls( $fy, $p, $q, $begdt, $enddt, $dtm_data, $dayofweek_info ) {
## sub db2kxls( $fy, $pp, $q, $begdt, $enddt, $dtm_data, $options ) {
sub db2saic( $option1, $option2, $option3, $option4, $option5, $option6, $option7 ) {
	$option1=shift; 
	$option2=shift; 
	$option3=shift; 
	$option4=shift; 
	$option5=shift; 
	$option6=shift; 
	$option7=shift;
	$my_fy=$option1; $my_pp=$option2; $my_q=$option3; $my_begdt=$option4; $my_enddt=$option5; $my_dtm_data=$option6; $dayofweek_info=$option7; 
	$my_p=sprintf( "%02d", $my_pp );

	printf( "$progid $dttm dtmdta MSG_1615:  my_fy=[$my_fy] my_p=[$my_p] my_q=[$my_q] myh_begdt=[$my_begdt] mY_enddt=[$my_enddt] dbfile=[$dbfile]\n" );

	$mynow = &sqlval( $dbfile, "select strftime( '\%Y-\%m-\%d', date('now'))" );
##      $where_clause="where date('$mydt') between date(begdt) and date(enddt)";
	if(( $my_fy eq "" ) && ( $my_p eq "" ) & ( $my_q eq "" )) { $where_clause=""; }
	if(( $my_fy ne "" ) && ( $my_p eq "" ) & ( $my_q eq "" )) { $where_clause="where fy='$my_fy' "; }
	if(( $my_fy ne "" ) && ( $my_p ne "" ) & ( $my_q eq "" )) { $where_clause="where fy='$my_fy' and p='$my_p' "; }
	if(( $ne eq "" ) && ( $my_p ne "" ) & ( $my_q ne "" )) { $where_clause="where fy='$my_fy' and p='$my_p' and q='$my_q' "; }



# get periods ranges regardless of any quater vaues entered
        $sql_pdates="select yyyy, fy, p, oy, min(begdt) pbegdt, max(enddt) penddt, sum(est) pest, sum(inv) pinv from periods $where_clause group by yyyy, fy, p, oy ";

        printf( "$progid $dttm MSG_1625: dbfile=[$dbfile] mynow=[$mynow]\n sql_pdates=[$sql_pdates]\n" );
        @$pdates_rows = &sqlvals( $dbfile, $sql_pdates );
	foreach my $pdate_row (@$pdates_rows) {
                $rowcnt++;
                ( $yyyy, $fy, $p, $oy, $pbegdt, $penddt, $pesc, $pinv) = @$pdate_row;
                printf( "\n$progid $dttm MSG_1620: $rowcnt  $pdegdt - $penddt\n" );
		printf( "$progid $dttm MSG_1630: fy=[%d]-[%02d] pbegdt=[%s] penddt=[%s] pest=[%d] $pinv=[%d]\n",
			$fy, $p, $q, $pbegdt, $penddt, $pest, $pinv );
		}
	printf( "$progid $dttm MSG_1635: yyyy=[%04d] fy=[%d]-[%02d] pbegdt=[%s] penddt=[%s] oy=[%d] est=[%d] $inv=[%d]\n", $yyyy, $fy, $p, $pbegdt, $penddt, $oy, $pest, $pinv );




##      $sql_periods="select yyyy,fy,p,q,wk,begdt,enddt,oy,endday,desc,f1 est from periods where date('2012-11-12') between date(begdt) and date(enddt);";
        $sql_periods="select yyyy, fy, p, q, wk, begdt, enddt, endday, desc, oy, est, inv from periods $where_clause";
        printf( "$progid $dttm MSG_1645 dbfile=[$dbfile] mynow=[$mynow] sql_periods=[$sql_eriods]\n" );
        @$rows = &sqlvals( $dbfile, $sql_periods );
        $rowcnt=0;

        $co="konet";
        $user="kassilj";
        $user_name="joachim kassil";
        $co_name="konet llc";

        $tstemplet_xlsfil="konet_ts_templet.xls";
        $invtemplet_xlsfil="konet_inv_templet.xls";
        $emailtemplet_txtfil="konet_email_templet.txt";
        $psrtemplet_xlswrd="konet_psr_templet.wrd";
        $pathwork="s:/xampp/htdocs/kxls/work/";
        $pathwork_win="s:\\xampp\\htdocs\\ko_center\\work\\";
        $tstemplet_path_xlsfil_win="$pathwork_win$tstemplet_xlsfil";
        $invtemplet_path_xlsfil_win="$pathwork_win$invtemplet_xlsfil";
        $emailtemplet_path_txtfil_win="$pathwork_win$emailtemplet_txtfil";
        $psrtemplet_path_wrdfil_win="$pathwork_win$psrtemplet_wrdfil";
        $esttemplet_path_xlsfil_win="$pathwork_win$emplet_xlsfil";

##        printf( "$progid $dttm MSG_1470 dbfile=[$dbfile] sql_periods=[$sql_periods]\n" );
##      &ole_templet2ts_detail_close();
	foreach my $row (@$rows) {
                $rowcnt++;
                ( $yyyy, $fy, $p, $q, $wk, $begdt, $enddt, $endday, $desc, $oy, $est, $inv ) = @$row;
                printf( "\n$progid $dttm MSG_1620: $rowcnt  $begdt - $enddt\n" );
		printf( "$progid $dttm MSG_1620: fy=[%d]-[%02d]-[%d] %s - %s wk=[%d] oy=[%d] est=[%d] $inv=[%d]\n",
 	               $yyyy, $fy, $p, $q, $begdt, $enddt, $wk, $oy, $est, $inv );
#               $ts_txtfil=sprintf( "konet_ts_fy-pp-w_yyyymmdd-yyyymmdd.txt" );


##        	$sql_dtm="select yyyy, fy, p, q, wk, begdt, enddt, endday, desc, oy, est, inv from periods $where_clause";
        	$sql_dtm="select dt, t1, t2, hr, cd, desc from dtm where dt >= '$begdt' and dt <= '$begdt'";

## del	        printf( "$progid $dttm MSG_1640 dbfile=[$dbfile] mynow=[$mynow] sql_dtm=[$sql_periods]\n" );
## del	        @$dtm_rows = &sqlvals( $dbfile, $sql_dtm );
## del	        $dtm_rowcnt=0;
## del        	$co="konet";

## del		$dtm_rowcnt=0;
## del		foreach my $dtm_row (@$dtm_rows) {
## del
## del  	( $dtm_dt, $dtm_t1,$dtm_t2, $dtm_hr, $dtm_cd, $dtm_desc  ) = @$dtm_row;
## del         printf( "\n$progid $dttm MSG_1650: $dtm_rowcnt  dtm_dt=$dtm_dt dtm_t1-t2=$dtm_t1 - $dtm_t2 $dtm_hr $dtm_cd\n" );
## del
## del		$dtm_rowcnt++;

# jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
####		printf( "NEXT_1688:  jjjjjjjjjjjjjjjjjjjjjjjjj\n" );
####		next;

	        $tstemplet_xlsfil="konet_ts_templet.xls";
	        $pathwork="s:/xampp/htdocs/kxls/work/";
	        $pathwork_win="s:\\xampp\\htdocs\\ko_center\\work\\";
	
	        $begdttm=$begdt; $begdttm =~ s/-//g; 
	        $enddttm=$enddt; $enddttm =~ s/-//g; 

###	        $ts_title=sprintf( "period_%02d-%02d-%1d_%s-%s", $fy, $p, $q, $begdttm, $enddttm  );      
###	        $ts_txtfil=sprintf( "konet_ts_%02d-%02d-%1d_%s-%s.txt", $fy, $p, $q, $begdttm, $enddttm  );      
###	        $ts_xlsfil=sprintf( "konet_ts_%02d-%02d-%1d_%s-%s.xls", $fy, $p, $q, $begdttm, $enddttm  );      
###	        $ts_xlspdf=sprintf( "konet_ts_%02d-%02d-%1d_%s-%s.pdf", $fy, $p, $q, $begdttm, $enddttm  );      

## konet_invoice_fy-pp_yyyymmdd-yyyymmdd.png
###	        $inv_title=sprintf( "period_%02d-%02d-%1d_%s-%s", $fy, $p, $q, $begdttm, $enddttm  );      
###	        $inv_txtfil=sprintf( "konet_invoice_%02d-%02d-%1d_%s.txt", $fy, $p, $begdttm, $enddttm  );      
###	        $inv_xlsfil=sprintf( "konet_ts_%02d-%02d-%1d_%s.xls", $fy, $p,$begdttm, $enddttm  );      
###	        $inv_xlspdf=sprintf( "konet_ts_%02d-%02d-%1d_%s.pdf", $fy, $p,$begdttm, $enddttm  );      
###
###	        $invtemplet_path_xlsfil_win="$pathwork_win$invtemplet_xlsfil";
###	        $pathwork_win="s:\\xampp\\htdocs\\ko_center\\work\\";
###	
###	        $invtemplet_path_xlsfil_win="$pathwork_win$invtemplet_xlsfil";
###		$inv_path_xlsfil_win="$pathwork_win$inv_xlsfil";
###		$tmpfil=$invtemplet_path_xlsfil_win;
###	        $xlsfil=$inv_path_xlsfil_win;
###
###	        $tstemplet_path_xlsfil_win="$pathwork_win$tstemplet_xlsfil";
		
		
##	        my ( $mydt, $myt1, $myt2, $myhr, $mycd, $mydesc ) = split( /\|/, $dtm_data );
##		$mydt = $dtm_dt;
##		$myt1 = $dtm_t1;
##		$myt2 = $dtm_t2;
##		$myhr = $dtm_hr;
##		$mycd = $dtm_cd;
##		$mydesc = $dtm_desc;

##	        if( $myhr == "" ) { $myhr = $myt2 - $myt1; }

##	        $sql_dayofweek=sprintf( "select strftime('\%w', '%s' );", $mydt );
##	        $dayofweek_num = &sqlval( $dbfile, $sql_dayofweek );

	        $mynow = &sqlval( $dbfile, "select strftime( '\%Y-\%m-\%d', date('now'))" );
	        $dayofweek_order = "1 2 3 4 5 6 0";
	        $dayofweek_info[0] = "1 E:20 Sun";
	        $dayofweek_info[1] = "2 I:20 Mon";
	        $dayofweek_info[2] = "3 M:20 Tue";
	        $dayofweek_info[3] = "4 Q:20 Wed";
	        $dayofweek_info[4] = "5 U:20 Thr";
	        $dayofweek_info[5] = "6 X:20 Fri";
	        $dayofweek_info[6] = "0 AC:20 Sat";
	        ( $dayofweek_order, $rowcol, $dayofweek_name ) = split( / /, $dayofweek_info[$dayofweek_num] );
	        printf( "$prodid $dttm MSG_1720:  $mydt, $myhr, $mycd, $mydesc\n" );
	
	        $daynames_text= "Sat Sun Mon Tue Wed Thr Fri";
	        @daynames = split( / /, $daynames_text );
	        printf( "ole__xls_templet2ts BUGS_928 $daynames_text $dayname[0] $dayname[6] $mynow \n" );
	        for( $daynum=0; $daynum<7; $daynum++ ) {
	                $sql_daydate = "select strftime('\%Y-\%m-\%d', ";
	                $sql_daydate .= "\'".$begdt."\', ";
	                $sql_daydate .= "\'weekday ". $daynum ."\'";
	                $daydates[$daynum] = &sqlval( $dbfile, "select date('$begdt', '$daynum day' )" );
	                $dayname = $daynames[$daynum];
	                $daydate = $daydates[$daynum];
	                }

##		for( $daynum=0; $daynum<7; $daynum++ ) {
##			printf( "$progid $dttm MSG_966: dnum=[%d] daydates=[%s] dayname=[%s] info=[$info]\n",
##			$daynum, $daydates[$daynum], $daynames[$daynum], $dayofweek_info[$daynum]);
##			}

	        $period_range="J3:J3";
	        $title_range="J3:J3";
	        $title_range2="J6:J6";

	        $sat_range="B8:E8";
	        $sun_range="F8:I8";
	        $mon_range="J8:M8";
	        $tue_range="N8:Q8";
	        $wed_range="R8:U8";
	        $thr_range="V8:Y8";
	        $fri_range="Z8:AB8";
	
	        $satdt_range="B8:E8";
	        $sundt_range="F8:I8";
	        $mondt_range="J8:M8";
	        $tuedt_range="N8:Q8";
	        $weddt_range="R8:U8";
	        $thrdt_range="V8:Y8";
	        $fridt_range="Z8:AB8";
	        $dayname_ranges[0]="B8:E8";
	        $dayname_ranges[1]="F8:I8";
	        $dayname_ranges[2]="J8:M8";
	        $dayname_ranges[3]="N8:Q8";
	        $dayname_ranges[4]="R8:U8";
	        $dayname_ranges[5]="V8:Y8";
	        $dayname_ranges[6]="Z8:AB8";

		$daydate_ranges[0]="B9:E9";
	        $daydate_ranges[1]="F9:I9";
	        $daydate_ranges[2]="J9:M9";
	        $daydate_ranges[3]="N9:Q9";
	        $daydate_ranges[4]="R9:U9";
	        $daydate_ranges[5]="V9:Y9";
	        $daydate_ranges[6]="Z9:AB9";

#       	$t1[$daynum][$slot];
#       	$t2[$daynum][$slot];
#       	$t12[$daynum][$slot];
#       	$code[$daynum][$slot];

	        @week_cols_h1 = qw!B F J N R V Z!;
	        @week_cols_h2 = qw!C G K O S W AA!;
	        @week_cols_tm = qw!D H L P T X AB!;
	        @week_cols_cd = qw!E I M Q U Y AC!;
	        $day_row=8;
	        $dt_row=9;
	        @time_rows = qw!12 13 14 15 16 17 18 19 20 21!;



		$inv_title_range="i:6";
		$inv_submitdt_range="i:6";
		$inv_begdt_range="b:24";
		$inv_enddt_range="c:24";
		$inv_maxhr="f42";
		$inv_prevhr="g42";
		$inv_ytdhr="h42";
		$inv_rate="e42";
		$inv_prev="c:24";
		$inv_ytd="c:24";
		$inv_ftrfilnam="i59";

                $ts_title=sprintf( "period_%02d-%02d-%1d_%s-%s", $fy, $p, $q, $begdttm, $enddttm  );
                $ts_txtfil=sprintf( "konet_ts_%02d-%02d-%1d_%s-%s.txt", $fy, $p, $q, $begdttm, $enddttm  );
                $ts_xlsfil=sprintf( "konet_ts_%02d-%02d-%1d_%s-%s.xls", $fy, $p, $q, $begdttm, $enddttm  );
                $ts_xlspdf=sprintf( "konet_ts_%02d-%02d-%1d_%s-%s.pdf", $fy, $p, $q, $begdttm, $enddttm  );

## konet_invoice_fy-pp_yyyymmdd-yyyymmdd.png
                $inv_title=sprintf( "period_%02d-%02d-%1d_%s-%s", $fy, $p, $q, $begdttm, $enddttm  );
                $inv_txtfil=sprintf( "konet_invoice_%02d-%02d-%1d_%s.txt", $fy, $p, $begdttm, $enddttm  );
                $inv_xlsfil=sprintf( "konet_invoice_%02d-%02d-%1d_%s.xls", $fy, $p,$begdttm, $enddttm  );
                $inv_xlspdf=sprintf( "konet_invoice_%02d-%02d-%1d_%s.pdf", $fy, $p,$begdttm, $enddttm  );

                $invtemplet_path_xlsfil_win="$pathwork_win$invtemplet_xlsfil";
                $pathwork_win="s:\\xampp\\htdocs\\ko_center\\work\\";
                        
                $invtemplet_path_xlsfil_win="$pathwork_win$invtemplet_xlsfil";
                $inv_path_xlsfil_win="$pathwork_win$inv_xlsfil";
                $tmpfil=$invtemplet_path_xlsfil_win;
                $xlsfil=$inv_path_xlsfil_win;

##                $tstemplet_path_xlsfil_win="$pathwork_win$tstemplet_xlsfil";
                        

	        $tmpfil=$invtemplet_path_xlsfil_win;
	        $xlsfil=$inv_path_xlsfil_win;
	        $xlspdf=$inv_path_xlxfil_win; $xlspdf =~ s/xls/pdf/;

	        $invtemplet_path_xlsfil_win="$pathwork_win$invtemplet_xlsfil";
	        $pathwork_win="s:\\xampp\\htdocs\\ko_center\\work\\";
	
	        $invtemplet_path_xlsfil_win="$pathwork_win$invtemplet_xlsfil";
		$inv_path_xlsfil_win="$pathwork_win$inv_xlsfil";
		$tmpfil=$invtemplet_path_xlsfil_win;
	        $xlsfil=$inv_path_xlsfil_win;
		

	        if( -f $inv_path_xlsfil_win ) {
	                printf( "$progid $dttm MSG_1825:  FOUND inv_path_xlsfil_win=[$inv_path_xlsfil_win]\n" );
	                }
	        else {
	                printf( "$progid $dttm ERR_1830:  NOTFOUND  inv_path_xlsfil_win=[$inv_path_xlsfil_win]\n" );
			if( -f $invtemplet_path_xlsfil_win ) {
	                        printf( "$progid $dttm MSG_1880:  FOUND  tsnew_path_xlsfil_win=[$tsnew_path_xlsfil_win]\n" );

                	        $inv_path_xlsfil_win="$pathwork_win$inv_xlsfil";
	                        $xlsfil=$inv_path_xlsfil_win;
	                        printf( "$progid $dttm MSG_1835:  inv_path_xlsfil_win=[$inv_path_xlsfil_win]\n" );
	                        printf( "$progid $dttm MSG_1835:  dtm_data=[$dtm_data] dayofweek_info=[$dayofweek_info]\n" );

	                        $cmd_cp_inv="copy $tmpfil $xlsfil";
	                        if( ! -f $xlsfil ) {
	                                printf( "$progid $dttm dt2kxls MSG_1840: cmd_cp_inv=[$cmd_cp_inv]\n" );
	                                system( $cmd_cp_inv );
	                                }
	                        }
	                else {
	                        printf( "$progid $dttm ERR_1845:  NOTFOUND  invtemplet_path_xlsfil_win=[$invtemplet_path_xlsfil_win]\n" );
##	                        exit;
	                        }
	                }

	        $tstemplet_path_xlsfil_win="$pathwork_win$tstemplet_xlsfil";
	        $pathwork_win="s:\\xampp\\htdocs\\ko_center\\work\\";
	
	        $tstemplet_path_xlsfil_win="$pathwork_win$tstemplet_xlsfil";
		$ts_path_xlsfil_win="$pathwork_win$ts_xlsfil";
		$tmpfil=$tstemplet_path_xlsfil_win;
	        $xlsfil=$ts_path_xlsfil_win;
		

	        if( -f $ts_path_xlsfil_win ) {
	                printf( "$progid $dttm MSG_1830:  FOUND ts_path_xlsfil_win=[$ts_path_xlsfil_win]\n" );
	                }
	        else {
	                printf( "$progid $dttm ERR_1800:  NOTFOUND  ts_path_xlsfil_win=[$ts_path_xlsfil_win]\n" );
			if( -f $tstemplet_path_xlsfil_win ) {
	                        printf( "$progid $dttm MSG_1810:  FOUND  tsnew_path_xlsfil_win=[$tsnew_path_xlsfil_win]\n" );

                	        $ts_path_xlsfil_win="$pathwork_win$ts_xlsfil";
	                        $xlsfil=$ts_path_xlsfil_win;
	                        printf( "$progid $dttm MSG_1815:  ts_path_xlsfil_win=[$ts_path_xlsfil_win]\n" );
	                        printf( "$progid $dttm MSG_1815:  dtm_data=[$dtm_data] dayofweek_info=[$dayofweek_info]\n" );

	                        $cmd_cp_ts="copy $tmpfil $xlsfil";
	                        if( ! -f $xlsfil ) {
	                                printf( "$progid $dttm dt2kxls MSG_2030: cmd_cp_ts=[$cmd_cp_ts]\n" );
	                                system( $cmd_cp_ts );
	                                }
	                        }
	                else {
	                        printf( "$progid $dttm ERR_1826:  NOTFOUND  invtemplet_path_xlsfil_win=[$invtemplet_path_xlsfil_win]\n" );
	                        exit;
	                        }
	                }

##	printf( "BUGS_1885_EXIT\n" );
##	exit;


# open new excel instance
#       	if (! defined $excel) {
	        if (("$excel" eq "1" ) || ( "$excel" eq "" )) {
        	        $excel = Win32::OLE->new('Excel.Application', 'Quit')
        	        || die printf( "$progid ole_ts_new $dttm ERR_815:  OLE->new excel=[$excel]\n" );
        	        printf( "$progid ole_ts_new $dttm MSG_815:  OLE->new excel=[$excel]\n" );
        	        }
		else {
			printf( "$progid ole_ts_new $dttm MSG_816:  GetActiveObject DEFINED excel=[$excel]\n" );
			}


		$book = $excel->Workbooks->Open($xlsfil)
		        || die printf( "$progid ts2csv $dttm ERR_1094:  open xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n");
		        printf( "$progid $dttm MSG_1094:  open xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n" );


	        $sheet = $book->Worksheets(1)
	        || die printf( "$progid ole_ts $dttm ERR_1100:  sheet  xlsfil=[$xlsfil] sheet=[$sheet] book=[$book] excel=[$excel]\n");

	        $sheetname = $book->Worksheets(1) -> { Name };

	        $sheet -> Activate ||
	        die printf( "$progid test1 $dttm ERR_841:  Activate sheet  xlsnew=[$xlsnew] book=[$book] excel=[$excel]\n");
	        printf( "$progid test1 $dttm MSG_841:  Activate sheet=[$sheet]  xlsnew=[$xlsnew] book=[$book] excel=[$excel]\n");

	        printf( "$progid ole_xls_new $dttm MSG_842: sheet=[$sheet] book=[$book] excel=[$excel] [$xlsfil][$xlsnew]\n" );

	        $excel->{'Visible'} = 0;                                # 0 is hidden, 1 is visible
	        $excel->{DisplayAlerts} = 0;                            # 0 is hide alerts

	        printf( "$progid $dttm MSG_840: sheet=[$sheet] book=[$book] excel=[$excel] [$from_xls][$to_xls]\n" );
	        printf( "$progid $dttm MSG_850: from_xls=[$xlsvil]\n" );


##		$where_clause="where date('$mydt') between date(begdt) and date(enddt)";
##		$sql_dtm="select yyyy, fy, p, q, wk, begdt, enddt, endday, desc, oy, est from periods $where_clause";
#		$where_clause="where date($dt) between date($begdt) and date($enddt)";
#		$where_clause=sprintf( "where date(dt) between date('%s') and date('%s');", $begdt, $enddt );
		$where_clause=sprintf( "where dt between '%s' and '%s';", $begdt, $enddt );
##		$where_clause="";
		$sql_dtm="select dt, t1, t2, hr, cd, desc from dtm $where_clause";
		printf( "$progid $dttm MSG_1930 dbfile=[$dbfile] sql_dtm=[$sql_dtm]\n" );
		printf( "$progid $dttm MSG_1930 mydt_1=[$mydt_1] mydt_2=[$mydt_2]\n" );
		printf( "$progid $dttm MSG_1930 where_clause=[$where_clause] dt=[$dt] begdt=[$begdt][$enddt]\n" );

		@$dtm_rows = &sqlvals( $dbfile, $sql_dtm );
		$rowcnt=0;

		$psvfil="$progid"."_bugs.psv";
		open( PSVFIL, ">$psvfil" ) || die "$progid psvfil ERR_1880:  OPEN psvfil=[$psvfil]\n";
#			$psvhdr="mnum|dttm|mbox|mto|sendername|receivedtime|subject|body|\n";

		$hrcnt=0;
		$rowcnt=0;
	        foreach my $dtm_row (@$dtm_rows) {
			$rowcnt++;
			$hrccnt++;
			( $dtm_dt, $dtm_t1, $dtm_t2, $dtm_hr, $dtm_cd, $dtm_desc ) = @$dtm_row;
			$dtm_data = sprintf( "%s|%s|%s|%s|%s|%s|%s\n",
				  $dtm_dt,$dtm_t1,$dtm_t2,$dtm_hr,$dtm_cd,$dtm_desc );

			printf( "\n$progid $dttm MSG_1950: $rowcnt  dtm_dt=[$dtm_dt] dtm_t1=[$dtm_t1] dtm_data=[$dtm_data] jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj\n" );
##			if( $rowcnt > 15 ) { 
##				printf( "\n$progid $dttm MSG_1945: $rowcnt  $dtm_dt[$dtm_data]  LAST_LIMIT_1945 dtm_dt=$dtm_dt dtm_t1=[$dtm_t1] dtm_t2=$dtm_t2 dtm_cd=[$dtm_cd]\n" );
##				last; 
##				}
			printf( "\n$progid $dttm MSG_1950: $rowcnt  dtm_data=[$dtm_data] dtm_dt=$dtm_dt dtm_t1=[$dtm_t1] dtm_t2=$dtm_t2 dtm_cd=[$dtm_cd]\n" );
			printf( "\n$progid $dttm NEXT_1950: $rowcnt  dtm_data=[$dtm_data] dtm_dt=$dtm_dt dtm_t1=[$dtm_t1] dtm_t2=$dtm_t2 dtm_cd=[$dtm_cd]\n" );
##			next;
##			&dt2kxls( $dtm_data, $option2, $option3 );
	
			$new_title=$ts_title;
			$cur_title=$sheet->Range("$title_range")->{Value};
			$sheet->Range("$title_range")->{value} = $new_title;

		        $daynums_text="0 1 2 3 4 5 6";
		        @daynums = split( / /, $daynums_text );
		        foreach $daynum (@daynums) {
		                $dayname=$daynames[$daynum];
		                $daydate=$daydates[$daynum];
		                $dayname_range=$dayname_ranges[$daynum];
		                $daydate_range=$daydate_ranges[$daynum];
##		                printf( "$progid $dttm MSG_1875:  $daynum=[$daynum] dayname=[$dayname] daydate=[$daydate]\n" );
##		                printf( "$progid $dttm MSG_1875:  $daynum=[$daynum] dayname_range=[$dayname_range] daydate=[$daydate_range]\n" );
				$psvrec="$progid|$dttm|$dayname_range|$daydate_range|$dayname|$daydate|\n";
				print( PSVFIL $psvrec );	

		                $sheet->Range("$dayname_range")->{value} = $dayname;
		                $sheet->Range("$daydate_range")->{value} = $daydate;
		                }

		        $cols_t1_text = qw!B F J N R V Z!;
		        $cols_t2_text = qw!C G K O S W AA!;
		        $cols_hr_text = qw!D H L P T X AB!;
		        $cols_cd_text = qw!E I M Q U Y AC!;
		        $day_row=8;
		        $dt_row=9;
		        @tm_rows_text = qw!12 13 14 15 16 17 18 19 20 21!;
	
	
		        $j=100; $daynum=0;
		        foreach  $cols ( split( / +/, "b|c|e  f|g|i j|k|m n|o|q r|s|u v|w|y z|aa|ac" )) {
		                ( $col_t1, $col_t2, $col_cd ) = split( /\|/, $cols );
		                printf( "$progid $dttm MSG_1220:  cols=[$cols]\n" );

				printf( "BUGS_1989:  col_t1=$col_t1 col_t2=[$col_t2] $col_cd\n" );
		                $dayname=$daynames[$daynum];
		                $daydate=$daydates[$daynum];
	
				$bugrec=sprintf( "BUGS_1990  daydate=[%s] dtm_dt=[%s] dtm_t1=[%s] dtm_t2=[%s] dtm_cd=[%s]\n",
					$daydate, $dtm_dt,$dtm_t1,$dtm_t2,$dtm_cd );
				print( PSVFIL $bugrec );
				print(  PSVFIL "$progid $dttm MSG_2000:  dtm_dt=$dtm_dt dtm_cd=$dtm_cd\n" );
				printf( "$progid $dttm MSG_2000:  dtm_dt=$dtm_dt dtm_cd=$dtm_cd\n" );

##		                foreach $row ( split( / /, "12 13 14 15 16 17 18 19 20 21" )) {
		                foreach $row ( split( / /, "13 14 15 16 17 18 19 20" )) {
		                        $range_t1=sprintf( "%s%d", $col_t1, $row );
		                        $range_t2=sprintf( "%s%d", $col_t2, $row );
		                        $range_cd=sprintf( "%s%d", $col_cd, $row );

					$psvrec="$progid|$dttm|bugs_1949|range_cd=$range_cd range_t1=$range_t1 $col_t1|$col_t2|$col_cd|$dayname_range|$daydate_range|$dayname|$daydate|\n";
					print( PSVFIL $psvrec );	
					$psvrec = "$progid|$dttm|compare|$dtm_dt|$daydate|$range_t1|$range_t2|$range_cd|\n";

					$yyyy=substr( $dtm_dt, 0, 4);
					$mm=substr( $dtm_dt, 5, 2);
					$dd=substr( $dtm_dt, 8, 2);
					$yyyymmdd=sprintf( "%04d-%02d-%02d",  $yyyy, $mm, $dd );

##					$dtm_dt=$yyyymmdd;
##					printf( "BUGS_2011: NEXT  dtm_dt=[$dtm_dt] daydate=[$daydate] yyyy=$yyyy mm=$mm dd=$dd yyyymmdd=[$yyyymmdd\n" );
		                        if( $dtm_dt eq $daydate ) {
		                                printf( "$progid $dttm MSG_2020:  dtm_dt=[$dtm_dt][$daydate]  FOUND  ranges_cd=$range_cd dtm_dtm_dt=[$dtm_dt] $daynum daydate=[$daydate]   dtm_t12cd=$dtm_t1 $dtm_t2 $dtm_cd jjjjjjjjjjjjjjjjjjj\n" );
		                                $sheet_t1 = $sheet->Range($range_t1)->{Value};
		                                $sheet_t2 = $sheet->Range($range_t2)->{Value};
		                                $sheet_cd = $sheet->Range($range_cd)->{Value};
		
		                                if( $sheet_t1 ne "" ) { next; }
		                                if( $sheet_t2 ne "" ) { next; }
		                                if( $sheet_cd ne "" ) { next; }
		
						$psvrec="$progid|$dttm|bugs_1950_done|dtm_dt=$dtm_dt|dtm_t1=$dtm_t1|$dtm_t2|$dtm_cd|$range_t1|$range_t2|$range_cd|$dayname_range|$daydate_range|$dayname|$daydate|\n";
						print( PSVFIL $psvrec );	

						if(( $dtm_cd eq "c" ) || ( $dtm_cd eq "g" )) {
		                                	$sheet->Range($range_t1)->{Value} = $dtm_t1;
			                                $sheet->Range($range_t2)->{Value} = $dtm_t2;
			                                $sheet->Range($range_cd)->{Value} = $dtm_cd;
			                                last;
							}
		                                }
		                        else {
						if( $daydate > $dtm_dt ) { last; } 
##		                                printf( "$progid $dttm SKIP_2040:  dtm_dt=[%s][$daydate]  NOTFOUND  ranges_cd=$range_cd dtm_dtm_dt=[$dtm_dt] $daynum daydate=[$daydate]   dtm_t1 t2 cd = $dtm_t1 $dtm_t2 $dtm_cd kkkkkkkkkkkkkkkkkk\n" );
		                                printf( "$progid $dttm MSG_2040:  dtm_dt=[$dtm_dt][$daydate]  FOUND  ranges_cd=$range_cd dtm_dtm_dt=[$dtm_dt] $daynum daydate=[$daydate]  $dayname range_cd=[$range_cd] range_t1=[$range_t1] zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz\n" );

						$psvrec="$progid|$dttm|bugs_2040skip|dtm_dt=$dtm_dt|dtm_t1=$dtm_t1|$dtm_t2|$dtm_cd|$range_t1|$range_t2|$range_cd|$dayname_range|$daydate_range|$dayname|$daydate|\n";
						print( PSVFIL $psvrec );	

##						printf( "$progid $dttm MSG_2040:   SKIP dtm_dt=[$dtm_dt] mydt=[$mydt] daydate=[$daydate] $daynum  [$dayname]\n" );
	##					$j=$j+100;
	##					printf( "BUGS_1240 col=[$col][$row] range=[$range]\n" );
	##					$sheet->Range($range_t1)->{Value} = "1200";
	##					$sheet->Range($range_t2)->{Value} = "1300";
	##					$sheet->Range($range_cd)->{Value} = "z";
						}
					}
				$daynum++;
				}
	
			close( PSVFIL );
			$sql_dayofweek=sprintf( "select strftime('\%w', '%s' );", $mydt );
			$dayofweek_num = &sqlval( $dbfile, $sql_dayofweek );
	
			printf( "$progid db2kxls $dttm MSG_1922:   sheet=[$sheet] excel=[$excel]\n" );
			}
# This turns off the "This file already exists" message.
		$excel-> {DisplayAlerts} = 0;

##		$book->SaveAs ("$xlsfil") ||
##		die printf( "$progid ole_ts_new $dttm ERR_1780:  book->SaveAs xlsfil=[$xlsfil] excel=[$excel]\n" );
##		printf( "$progid db2kxls $dttm MSG_1780:  book->saveas to_xls=[$xlsfil] excel=[$excel]\n" );

		$book->Save () ||
		die printf( "$progid ole_ts_new $dttm ERR_2055:  book->Save xlsfil=[$xlsfil] excel=[$excel]\n" );
		printf( "$progid ole_ts_new $dttm MSG_2055:  book->save to_xls=[$xlsfil] excel=[$excel]\n" );

		$book->Close()
		|| die printf( "$progid ts2csv $dttm ERR_2060:  book->close xlsfil=[$xlsfil] excel=[$excel]\n" );
		printf( "$progid ts2csv $dttm MSG_2060:  book->close xlsfil=[$xlsfil] excel=[$excel]\n" );

		printf( "$progid ole_ts_new $dttm END_1785: \n" );
		$excel-> Quit;

##		undef $book ||
##		printf( "$progid db2kxls $dttm ERR_2066:  UNDEF_BOOK:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n");
##		printf( "$progid db2kxls $dttm MSG_2066:  UNDEF_BOOK:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n" );

##		undef $excel ||
##		printf( "$progid db2kxls $dttm ERR_2070:  UNDEF_EXEL:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n");
##		printf( "$progid db2kxls $dttm MSG_2070:  UNDEF_EXEL:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n" );

# err  	$excel->ActiveWorkbooks->Close 
#	|| printf( "$progid ts2csv $dttm ERR:  excel->ActiveWorkbook->Close(0)  book=[$book] excel=[$excel]\n");
#	printf( "$progid ts2csv $dttm MSG:  excel->ActiveWorkbooks->Close(0)  book=[$book] excel=[$excel]\n");

##	$book = $excel->Workbooks->Open("$xlsfil") 
#      	$excel->Workbooks->Close
#	|| printf( "$progid ts2csv $dttm ERR:  excel->Workbooks->Close  book=[$book] excel=[$excel]\n");
#	printf( "$progid ts2csv $dttm MSG:  excel->Workbooks->Close  book=[$book] excel=[$excel]\n");

#      	$book->Close() 
#	|| printf( "$progid ts2csv $dttm ERR:  book->Close()  book=[$book] excel=[$excel]\n");
#	printf( "$progid ts2csv $dttm MSG:  book->Close()  book=[$book] excel=[$excel]\n");

#	$excel->Quit 
#	|| printf( "$progid ts2csv $dttm ERR:  excel->Quit  book=[$book] excel=[$excel]\n");
#	printf( "$progid ts2csv $dttm MSG:  excel->Quit  book=[$book] excel=[$excel]\n");

#	$book->Quit 
#	|| printf( "$progid ts2csv $dttm ERR:  book->Quit  book=[$book] excel=[$excel]\n");
#	printf( "$progid ts2csv $dttm MSG:  book->Quit  book=[$book] excel=[$excel]\n");

#	$book->Save 
#	|| printf( "$progid ts2csv $dttm ERR:  book->Save  book=[$book] excel=[$excel]\n");
#	printf( "$progid ts2csv $dttm MSG:  book->Quit  book=[$book] excel=[$excel]\n");

##	undef $book ||
##	printf( "$progid ts2csv $dttm ERR:  UNDEF_BOOK:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n");
##	printf( "$progid ts2csv $dttm MSG:  UNDEF_BOOK:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n" );

##       undef $excel ||
##	printf( "$progid ts2csv $dttm ERR:  UNDEF_EXEL:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n");
##	printf( "$progid ts2csv $dttm MSG:  UNDEF_EXEL:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n" );
			}
##		}
##
	printf( "$progid $dttm db2kxls MSG:  fy=[$fy] p=[$p] q=[q] begdt=[$begdt] enddt=[$enddt] beg\n" );
	return;
# kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
	}


sub ole_ol( $option1, $option2, $option3 ) {
## use strict;
## use Win32::OLE qw/in/;

use constant INBOX => 6;

	$ol = Win32::OLE->GetActiveObject('Outlook.Application') 
			|| Win32::OLE->new('Outlook.Application', 'Quit');
	$mapi = $ol->GetNameSpace("MAPI");
	printf( "$progid $dttm MSG_452:  ol=[$ol] mapi=[$mapi]\n" );

##	$inbox = $mapi->GetDefaultFolder(olFolderInbox)
##	$inbox = $mapi->GetDefaultFolder('INBOX')
	$inbox = $mapi->GetDefaultFolder(INBOX)
	|| die  "$progid $dttm ERR_455: inbox=[$inbox]  mapi=[$mapi]\n";
	printf( "$progid $dttm MSG_455: inbox=[$inbox] ol=[$ol] mapi=[$mapi] inbox=[$inbox]\n" );

##	my $mapi = $ol->GetNameSpace("MAPI");
##	my $inbox = $mapi->GetDefaultFolder(olFolderInbox);

	my $dir = cwd . "\\";
	$dir =~ s/\//\\/g;
	my $atch1, $file1, $atch2, $file2;

	printf( "$progid MSG_002: ol=[$ol] mapi=[$mapi] inbox=[$inbox] dir=[$dir]\n");

#	Win32::OLE ->GetObject('Outlook.Application')
#	Win32::OLE ->BuiltinDocumentProperties(wdPropertyComments)
#	Win32::OLE ->Value;

	$inbox_items=ref($inbox->{Items});
	printf( "$progid MSG_057:  inbox_items=[$inbox_items] \n");


	my $itemcount = $inbox->Items->Count;
	printf( "$progid MSG_060:  itemcount=[$itemcount]\n" );


	my $dir = cwd . "\\";
	$dir =~ s/\//\\/g;
	my $atch1, $file1, $atch2, $file2;

	printf( "$progid MSG_460: inbox=[$inbox]  mapi=[$mapi] dir=[$dir]\n");

#	Win32::OLE ->GetObject('Outlook.Application')
#	Win32::OLE ->BuiltinDocumentProperties(wdPropertyComments)
#	Win32::OLE ->Value;

	$inbox_items=ref($inbox->{Items});
	printf( "$progid MSG_492:  inbox_items=[$inbox_items] \n");

	$itemcount = $inbox->Items->Count;
	printf( "$progid MSG_495:  itemcount=[$itemcount]\n" );


##	my $r;
##	eval {$r = Win32::OLE->GetActiveObject('Outlook.Application')};
##	if ($@ || !defined($r)) {
##		$r = Win32::OLE->new('Outlook.Application', sub {$_[0]->Quit;}) or die "ERR_450\n";
##		}
##
##	my $namespace = $r->GetNameSpace( 'MAPI' ) or die "can't open MAPI + namespace\n";

##	my $count = 0;
##	my $folder;

# re-reading this, I remember what this is for
# you pass the names of the sub sub &#091;...] folder
# you want to examine as arguments on the command line
# e.g. perl extract.pl archive 1999 lists vmsperl

##	if( $folder = $namespace->GetDefaultFolder( INBOX )) {
##		$foldername = $folder->{Name};
##		print "$folder->{Name}\n";
##
##		my $f = $folder;
##		foreach( @ARGV ) {
##			mkdir $_, 0666;
##			chdir $_;
##			$f = $f->Folders( $_ );	# walk down the folder path
##			print "$f->{Name}\n" or die Win32::OLE->LastError() . "\n";
##			}

		foreach $it ($inbox->Items) {
			++$count;
			printf( "BUGS_518: it=$it  count=$count inbox=[$inbox] ol=[$ol] mapi=[$mapi] \n" );
			next;
			$mto = $it->{To};
			$mcc = $it->{CC};
			$subject = $it->{Subject};
			$receivedtime = $it->{ReceivedTime};
			$sendernamefrom = $it->{SenderName};
##			$receivedtime = $it->{receivedtime};
##			print "$it->{ReceivedTime} $it->{Subject}\n";
##			$subject = $it->{Subject};
			$subject =~ tr/a-zA-Z0-9/_/c;
			$subject =~ s/_+/_/g;

			$body = $it->{body};

			printf( "$progid $dttm MSG_540:  mto=[$mto] subject=[$subject] receivedtime=[$ReceivedTime]\n" );
			$output = "";
			$output .= "$mtr, $mcc, $sendernamefrom,$sub,$subject, $receivedtime, $body \n";

##			open OUT, sprintf( ">%03s-$subj.txt", $count ) or die "Cannot open + $count for output: $!\n";
##			print OUT <<EOM;
##				To: $it->{To}
##				CC: $it->{CC}
##				From: $it->{SenderName}
##				Subject: $it->{Subject}
##				Date: $it->{ReceivedTime}
##				$it->{Body}
## EOM
##			close OUT;
			}
##		}
	}

sub ole_ol_send( $option1, $option2, $option3 ) {

# use Win32::OLE;
# use Win32::OLE qw(in with);
# use Win32::OLE::Variant;
# use Win32::OLE::Const 'Microsoft Outlook';

	my $Outlook = Win32::OLE->GetActiveObject ('Outlook.Application') ||
		Win32::OLE->new('Outlook.Application');

	my $Outlook = new Win32::OLE('Outlook.Application');

	$attach_file = "J:\\kxls\\oy3\\test.txt";

# Create Mail Item
	my $item = $Outlook->CreateItem(0); # 0 = mail item.
	unless ($item) {
		die "Outlook is not running, cannot send mail.\n";
		}

	$item->{'Subject'} = $mail_props{'subject'} || '[No Subject]';
	$item->{'To'} = join (";", split(/[ ,;]+/, $mail_props{'to'}));

	$item->{'Body'} = $mail_props{'body'} || "\r\n";
	$item->{'From'} = $mail_props{'from'}
	if (exists $mail_props{'from'});
	$item->{'Cc'} = $mail_props{'cc'}
	if (exists $mail_props{'cc'});
	$item->{'Bcc'} = $mail_props{'bcc'}

	if (exists $mail_props{'bcc'});

# 2=high, 1=normal, 0=low
	$item->{'Importance'} =(exists $mail_props{'importance'})? $mail_props{'importance'}: 1;

# Add Attachemnts
	if (exists $mail_props{'attachments'}) {
		$attach = $item->{'Attachments'};
		foreach my $attach_file (@mail_props{'attachments'}) {
			if ($attach_file and -f $attach_file) {
				$attach->add($attach_file);
				}
			}
		}
	}

sub ole_word() {
# use Win32::OLE;
# use Win32::OLE qw(in with);
# use Win32::OLE::Variant;
# use Win32::OLE::Const 'Microsoft Word';

	$Word = Win32::OLE->GetActiveObject('Word.Application') || Win32::OLE->new('Word.Application');
	$Word->{'Visible'} = 0;
	$Word->{DisplayAlerts} = 0;

# Open File
	$txtfil="j:\\kxls\\oy3\\test.txt";
	$docfil="j:\\kxls\\oy3\\test.doc";

#	my $file = $Word->Documents->Open('');
#	my $file = $Word->Documents->Open('');
	my $file = $word->documents->open('$txtfil') ||
	die "$progid $dttm ERR_502:  open txtfil=[$txtfil]\n";
	printf( "$progid $dttm MSG_502:  open txtfil=[$txtfil]\n" );

# Replace Content of Document
	$rng = $file->{content};
	$rng->{Text} = '$dttm';

# Change Page Margins 
	( my $test = $file->pagesetup, topmargin => 40, bottommargin => 40, leftmargin => 40, rightmargin => 40);

# Print File
	printf( "$progid $dttm MSG_515: txtfil=[$txtfil] docfil=[$docfil] ole_word printout\n" );
#	$File->PrintOut();
# or
#	$Word->ActiveDocument->PrintOut({
#		Background => 0,
#		Range => wdPrintAllDocument,
#		Item => wdPrintDocumentContent,
#		PageType => wdPrintAllPages})
#
# sleep to let Word print before closing
#	sleep 5; 

# Save As
	$word->ActiveDocument->saveas({FileName => $docfil, FileFormat => wdFormatDocument});

# Quit/Close
	$file->close();
	$word->quit();
	}


sub sql_cr_periods( $sqlbin, $sqldb, $sqltbl ) {
	$sqlbin=shift; $sqldb=shift; $sqltbl=shift;
	printf( "$progid sql_cr_jobs $dttm MSG:  sqldb=$sqldb sqlcmd=$sqlcmd o1=$option1 o2=$option2\n" );


#	filnam TEXT, 
	my $db = DBI->connect( "dbi:SQLite:$sqldb" );
#	$sqlcmd_cr=qq{ create table $sqltbl ( id int(11), jobfil TEXT, wc REAL, rundate DATA ); };
	$sqlcmd=qq{CREATE TABLE periods (
		fy TEXT, 
		pd TEXT, 
		p TEXT,
		wk TEXT, 
		begdt DATE, 
		begday TEXT, 
		enddt DATE, 
		endday TEXT, 
		aors INTEGER, 
		aorc INTEGER, 
		ltrs INTEGER, 
		hrs INTEGER, 
		hrc INTEGER, 
		hrg INTEGER, 
		desc TEXT 
		);
		};
##	PRIMARY KEY (id));

	printf( "$progid sql_cr $dttm DBI:  sqlcmd=[$sqlcmd]\n" );
	$db->do( "$sqlcmd" );
	if( $db->err() ) { 
		printf( "$prodid sql_cr_jobs $dttm DB_ERR: sqldb=[$sqldb] dbi_errstr=[$DBI::errstr]\n" ); 
		}
#	$sqlcmd="select * from sqlite_master";
#	$sqlcmd_drop="drop table cfg";
#	$sqlcmd_cr=qq{ create table cfg (id INTEGER PRIMARY KEY, fld TEXT, val TEXT);};
#	$sqlcmd_insert=qq{ insert into cfg  values (NULL, 'fld0','val0' );};

	$db->disconnect();
	}

sub sql_cr_hrs( $sqlbin, $sqldb, $sqltbl ) {
	$sqlbin=shift; $sqldb=shift; $sqltbl=shift;
	printf( "$progid sql_cr_jobs $dttm MSG:  sqldb=$sqldb sqlcmd=$sqlcmd o1=$option1 o2=$option2\n" );

#	$sqlbin -csv $sqldb ".import $csvfil $sqltbl"
#	filnam TEXT, 
	my $db = DBI->connect( "dbi:SQLite:$sqldb" );
#	$sqlcmd_cr=qq{ create table $sqltbl ( id int(11), jobfil TEXT, wc REAL, rundate DATA ); };
#		id INTEGER PRIMARY KEY, 
	$sqlcmd=qq{create table $sqltbl (
		id integer primary key,
		fy TEXT, 
		pp TEXT, 
		p TEXT, 
		effdt TEXT, 
		day TEXT, 
		h1 NUMBER, 
		h2 NUMBER, 
		tm TEXT, 
		cd TEXT, 
		s TEXT, 
		cr TEXT, 
		desc TEXT,
		UNIQUE (effdt,h1) on conflict ignore
		);
		};

	printf( "$progid sql_cr $dttm DBI:  sqlcmd=[$sqlcmd]\n" );
	$db->do( "$sqlcmd" );
	if( $db->err() ) { 
		printf( "$prodid sql_cr_jobs $dttm DB_ERR: sqldb=[$sqldb] dbi_errstr=[$DBI::errstr]\n" ); 
		}
#	$sqlcmd="select * from sqlite_master";
#	$sqlcmd_drop="drop table cfg";
#	$sqlcmd_cr=qq{ create table cfg (id INTEGER PRIMARY KEY, fld TEXT, val TEXT);};
#	$sqlcmd_insert=qq{ insert into cfg  values (NULL, 'fld0','val0' );};

	$db->disconnect();
	}



sub test2( $option1, $option2, $option3 ) {
	$option1=shift; $option2=shift; $option3=shift;
	printf( "$progid test2 $dttm MSG:  o1=[$option1] o2=[$option2] o3=[$option3]\n");
	}

sub test3( $option1, $option2, $option3 ) {
	$option1=shift; $option2=shift; $option3=shift;
	printf( "$progid test3 $dttm MSG:  o1=[$option1] o2=[$option2] o3=[$option3]\n");
	}

sub test4( $option1, $option2, $option3 ) {
	$option1=shift; $option2=shift; $option3=shift;
	printf( "$progid test4 $dttm MSG:  o1=[$option1] o2=[$option2] o3=[$option3]\n");
	}

sub test5( $option1, $option2, $option3 ) {
	$option1=shift; $option2=shift; $option3=shift;
	printf( "$progid test5 $dttm MSG:  o1=[$option1] o2=[$option2] o3=[$option3]\n");
	}

sub test6( $option1, $option2, $option3 ) {
	$option1=shift; $option2=shift; $option3=shift;
	printf( "$progid test6 $dttm MSG:  o1=[$option1] o2=[$option2] o3=[$option3]\n");
	}


sub sqlq( "$sqldb, $sqlcmd, $sqltbl ) {
        $sqldb=shift; $sqlcmd=shift; $sqltbl=shift;

##	$sqlcmd=qq{ select * from tss limit 5; };
##	$sqlcmd="select myid, mydt, cab, item, amps, sn, hrctag, rpdu_bank, rpdu__outnum from kohw_hrc_defrag order by amps desc";

##	$sqlcmde="select * from koplans";
#	$sqlcmd="select mycd, mydt, planid, cab, item, amps, sn,hostname,hrctag,os,ip from koplans order by planid,item, amps desc";


##	if( $sqlin ne "" ) { $sqlcmd=$sqlin; }
	if( $sqlcmd eq "" ) { return; }

##	printf( "$progid $dttm sqlq MSG_2650: sqlcmd=[$sqlcmd] jjjjjjjjjjjjjjjjjjjjjjjjjjjjj\n[$sqldb]\n" );
##	return;

        my $db = DBI->connect( "dbi:SQLite:$sqldb" ) 
	|| die printf( "$progid $dttm ERR_2610:  connect\n" );;

##	$sqlcmd =~ s/\'/"/g;
##	my $mycols = $db->selectcol_arrayref("$sqlcmd");
##	my $myrows = $db->selectrow_arrayref("$sqlcmd");

	$rows = $db->selectall_arrayref($sqlcmd);
	$db->disconnect();
##	printf( "$progid $dttm sqlq MSG_2620: sqlcmd=[$sqlcmd] [$sqldb] [$rows]\n" );
	return( $rows );
	
###	$j=0;
###      foreach $row (@$rows) {
###		$j++;
###		printf( "$j row=[$row]\n" );
###		( $mycd, $mydt, $planid, $cab, $item, $amps, $sn, $hostname, $hrctag, $os, $ip ) = @$row;
###
###                printf( "$progid plan2plans MSG_2610: j=$j myid=[$myid][$mydt] planid, cab=[$cab] item=[$item] amps=[$amps]\n" );
###		}
###
#	printf( "$progid $dttm sqlq MSG_2620: sqlcmd=[$sqlcmd] [$sqldb] [$rows]\n" );
	return( $rows );
##	return( $rows, $mycols, $myrows);
	}

sub sqldo( "$sqldb, $sqlcmd, $sqltbl ) {
        $sqldb=shift; $sqlcmd=shift; $sqltbl=shift;

	if( $sqlcmd eq "" ) { return; }

        my $db = DBI->connect( "dbi:SQLite:$sqldb" ) 
	|| die printf( "$progid $dttm ERR_2679:  connect sqldb=[$sqldb]\n" );;

##	printf( "$progid $dttm sqldo MSG_2680: status=[$status] sqlcmd=[$sqlcmd] [$sqldb] [$rows]\n" );

##	my $mycols = $db->selectcol_arrayref("$sqlcmd");
##	my $myrows = $db->selectrow_arrayref("$sqlcmd");


##	$dbh->do("insert into `datas` (id, name,date) values (1,'something','1986-06-07')");
	$status = $db->do("$sqlcmd");
	$db->disconnect();

##	printf( "$progid $dttm sqldo MSG_2690: status=[$status] sqlcmd=[$sqlcmd] [$sqldb] [$rows]\n" );
	return( $status );
	}


sub sql_query( $sqlin, $sqldb, $sqltbl ) {
        $sqlin=shift; $sqldb=shift; $sqltbl=shift;
        printf( "$progid sql_query $dttm MSG:  sqldb=$sqldb sqlcmd=$sqlcmd o1=$option1 o2=$option2\n" );

        my $db = DBI->connect( "dbi:SQLite:$sqldb" ) 
	|| die printf( "$progid $dttm ERR_350:  connect\n" );;

	$sqlcmd=qq{ select * from tss limit 5; };
##	if( $sqlin ne "" ) { $sqlcmd=$sqlin; }
##
##	printf( "$progid sql_sel_us $dttm MSG: sqlcmd=[$sqlcmd]\n" );
##	my $mycols = $db->selectcol_arrayref("$sqlcmd");
##	my $myrows = $db->selectrow_arrayref("$sqlcmd");
##

	my $rows = $db->selectall_arrayref("$sqlcmd");
	$db->disconnect();

##	$j=0;
##	foreach $mycol (@mycols) { printf( "$j++ mycol=[$mycol]\n" ); }
##	$j=0;
	foreach $myrow (@myrows) { printf( "$j++ myrow=[$myrow]\n" ); }
	exit;


	my $j=0;
        foreach my $row (@$rows) {
                my ( $user, $host, $info, $shell, $spwchg, $spwchg_dt, $spwchg_age )  = @$row;
                printf( "$progid sql_sel_us MSG:  user=[$user] host=[$host] $info $homedir spwchg=[$spwchg][$spwchg_dt][$spwchg_age]\n" );
		}
	exit;


        $sqlcmd=qq{ select id,dttm, user, host, info, homedir, spwchg, spwchg_dt, spwchg_age from us };
        printf( "$progid sql_sel_us $dttm MSG: sqlcmd=[$sqlcmd]\n" );
        my $rows = $db->selectall_arrayref("$sqlcmd");
        $db->disconnect();
        foreach my $row (@$rows) {
                my ($id, $dttm, $user, $host, $info, $homedir, $spwchg, $spwchg_dt, $spwchg_age )  = @$row;
                printf( "$progid sql_sel_us MSG:  id=$id $dttm [$user][$host] $info $homedir spwchg=[$spwchg][$spwchg_dt][$spwchg_age]\n" );
		}
	exit;


        $sqlcmd=qq{ select * from us };
        printf( "$progid sql_sel_us $dttm MSG: sqlcmd=[$sqlcmd]\n" );
        my $rows = $db->selectall_arrayref("$sqlcmd");
        $db->disconnect();


        foreach my $row (@$rows) {
                my ($id, $dttm, $user, $host, $pass, $status, $shell,
		$uid, $gid, $info, $homedir, $bootpw, $audid, $audflg, $mintm, $maxpwln, $exptm, $lftm,
		$spwchg, $upwchg, $acctexp, $llog, $expwarn, $ussrpick, $syspnpw, $rstrpw, $nullpw,
		$admnum, $syschpw, $sysltpw, $timeod, $slogint, $ulogint, $slogin, $culogin, $ulogin, $umaxlntr,
		$alock, $lockout, $spwchg_dt, $spwchg_age, $upwchg_dt, $upwchg_age,
		$slogint_dt, $slogint_age, $ulogint_dt, $ulogint_age,
		$myint, $mydttm, $myreal, $mydata, $mytext,
		$desc ) = @$row;


	
		$psvdta  ="$id|$dttm|$user|$host|$status|$shell|";
		printf( "$progid sql_query MSG:  id=$id host=$host user=$user, info=$info, spwchg=$spwchg, dt=$spwchg_dt age=$spwchg_age\n" );
		}

	
	}







sub help_ole() {
	print <<EOF;
#___ Fonts
#	$sheet -> Range("G7:H7") -> Font -> {Bold}       = "True";
#	$sheet -> Range("G7:H7") -> Font -> {Italic}     = "True";
#	$sheet -> Range("G7:H7") -> Font -> {Underline}  = xlUnderlineStyleSingle;
#	$sheet -> Range("G7:H7") -> Font -> {Size}       = 8;
#	$sheet -> Range("G7:H7") -> Font -> {Name}       = "Arial";
#	$sheet -> Range("G7:H7") -> Font -> {ColorIndex} = 4;
#___ SUM FORMULAS
#	$sheet -> Range("A3") -> {FormulaR1C1} = "=SUM(R[-2]C:R[-1]C)";                # Sum rows
#	$sheet -> Range("C1") -> {FormulaR1C1} = "=SUM(RC[-2]:RC[-1])";                # Sum columns
#___ HIDE COLUMNS

#	$sheet -> Range("G:H") -> EntireColumn -> {Hidden} = "True";
#___ MERGE CELLS
#	$sheet -> Range("H10:J10") -> Merge;
#___ INSERT PICTURE
#	$sheet -> Pictures -> Insert("picture_name");                # Insert in upper-left corner
#	$excel -> ActiveSheet -> Pictures -> Insert("picture_name"); # Insert in active cell
#___ SET COLUMN WIDTH/ROW HEIGHT
#	$sheet -> Range('A:A') -> {ColumnWidth} = 9.14;
#	$sheet -> Range("8:8") -> {RowHeight}   = 30;
#	$sheet -> Range("G:H") -> {Columns} -> Autofit;
#___ FIND LAST ROW/COLUMN WITH DATA
#	$last_row = $sheet -> UsedRange -> Find({What => "*", SearchDirection => xlPrevious, SearchOrder => xlByRows})    -> {Row};
#	$last_col = $sheet -> UsedRange -> Find({What => "*", SearchDirection => xlPrevious, SearchOrder => xlByColumns}) -> {Column};
#___ ADD BORDERS
#	$sheet -> Range("A3:I3") -> Borders(xlEdgeBottom)       -> {LineStyle}  = xlDouble;
#	$sheet -> Range("A3:I3") -> Borders(xlEdgeBottom)       -> {Weight}     = xlThick;
#	$sheet -> Range("A3:I3") -> Borders(xlEdgeBottom)       -> {ColorIndex} = 1;
#	$sheet -> Range("A3:I3") -> Borders(xlEdgeLeft)         -> {LineStyle}  = xlContinuous;
#	$sheet -> Range("A3:I3") -> Borders(xlEdgeLeft)         -> {Weight}     = xlThin;
#	$sheet -> Range("A3:I3") -> Borders(xlEdgeTop)          -> {LineStyle}  = xlContinuous;
#	$sheet -> Range("A3:I3") -> Borders(xlEdgeTop)          -> {Weight}     = xlThin;
#	$sheet -> Range("A3:I3") -> Borders(xlEdgeBottom)       -> {LineStyle}  = xlContinuous;
#	$sheet -> Range("A3:I3") -> Borders(xlEdgeBottom)       -> {Weight}     = xlThin;
#	$sheet -> Range("A3:I3") -> Borders(xlEdgeRight)        -> {LineStyle}  = xlContinuous;
#	$sheet -> Range("A3:I3") -> Borders(xlEdgeRight)        -> {Weight}     = xlThin;
#	$sheet -> Range("A3:I3") -> Borders(xlInsideVertical)   -> {LineStyle}  = xlContinuous;
#	$sheet -> Range("A3:I3") -> Borders(xlInsideVertical)   -> {Weight}     = xlThin;
#	$sheet -> Range("A3:I3") -> Borders(xlInsideHorizontal) -> {LineStyle}  = xlContinuous;
#	$sheet -> Range("A3:I3") -> Borders(xlInsideHorizontal) -> {Weight}     = xlThin;
EOF
	}


sub xls2pdf_save( $option1, $option2, $option3 ) {
	$pathfile_xlsfil=shift; $option2=shift; $option3=shift;
#	printf( "$progid xls2pdf $dttm MSG:  o1=[$option1] o2=[$option2] o3=[$option3]\n");
	$pathfile_xlsfil="s:\\xampp\\htdocs\\ko_center\\work\\ts_test.xls";
	if( $option1 ne "" ) { $xlsfil = "$option1"; }

	$xlsfil=$pathfile_xlsfil;
	@xls_suffix_list = "\.xls";	
	($basename, $dirpath, $suffix) = fileparse( $xlsfil, @xls_suffix_list);


	if( "$dirpath" eq "\.\\" ) { $xlsfil=sprintf("%s/%s", $cwd, $xlsfil ); }
#	printf( "$progid xls2pdf $dttm MSG:  xlsfil=[$xlsfil]\n" );
#	printf( "$progid xls2pdf $dttm MSG:  basename=[$basename]\n" );
#	printf( "$progid xls2pdf $dttm MSG:  dirpath=[$dirpath] suffix=[$suffix]\n" );
	printf( "$progid xls2pdf $dttm MSG:  xlsfil=[$xlsfil] pathfile_xlsfil=[$pathfile_xlsfil]\n" );

	$xlsfil="j:\\ko_center\\oy3\\test.xls";
	if( ! -f $xlsfil ) { 
		printf( "$progid xls2pdf $dttm ERR:  NOTFOUND xlsfil=[$xlsfil]\n" );
		return;
		}

	return;
	$xlsbak = $xlsfil; $xlsbak =~ s/\.xls/_$dttm.xls/;
	$xlstmp = $xlsfil; $xlstmp =~ s/\.xls/_tmp.xls/;
	$xlscsv = $xlsfil; $xlscsv =~ s/\.xls/.csv/;
	$xlspdf = $xlsfil; $xlspdf =~ s/\.xls/.pdf/;

	printf( "$progid xls2pdf $dttm MSG_800:  xlsfil=[$xlsfil] xlspdf=[$xlspdf]\n" );

# open new excel instance
	if (("$excel" eq "1" ) || ( "$excel" eq "" )) {
		$excel = Win32::OLE->new('Excel.Application', 'Quit')
		|| die printf( "$progid xls2pdf $dttm ERR:  OLE->new excel=[$excel]\n" );
		printf( "$progid xls2pdf $dttm MSG:  OLE->new excel=[$excel]\n" );
		}
	else {
		printf( "$progid xls2pdf $dttm MSG:  GetActiveObject DEFINED excel=[$excel]\n" );
		}


	$excel->{'Visible'} = 0;		# 0 is hidden, 1 is visible
	$excel->{DisplayAlerts}=0;		# 0 is hide alerts


	printf( "$progid xls2pdf $dttm MSG_810:  open xlsfil=[$xlsfil] excel=[$excel]\n" );
	$book = $excel->Workbooks->Open("$xlsfil") 
	|| die printf( "$progid xls2pdf $dttm ERR_815:  open xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n");
	printf( "$progid ts2csv $dttm MSG_815:  open xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n" );


	$sheet = $book->Worksheets(1) ||
	die printf( "$progid xls2pdf $dttm ERR_820:  xlsfil=[$xlsfil] sheet=[$sheet] excel=[$excel]\n");
	printf( "$progid xls2pdf $dttm MSG_820:  xlsfil=[$xlsfil] sheet=[$sheet] excel=[$excel]\n" );


# 	color:             ActivePrinter => "ACROBAT:",
	$excel->ActivePrinter->{Value} = "Adobe PDF";
#	$excel->ActivePrinter = "Adobe PDF";
##	$active_printer = $excel->ActivePrinter;
##	if ($active_printer) { 
##		print("$progid ts2csv $dttm MSG:  active_printer=[$active_printer]\n"); 
##		}

# Save as PDF
#               ActivePrinter => 'Acrobat PDFWriter'})
#               ActivePrinter => 'Acrobat PDF on Ne07:'}) lockup
#               ActivePrinter => 'Acrobat PDF'})
#               Copy => 1,

	$excel->ActiveWindow->SelectedSheets->PrintOut({ActivePrinter => 'Acrobat PDF',
		PrintToFile => 1, PrToFileName => "$xlspdf", copies => 1 })
	|| printf( "$progid $dttm xls2pdf ERR_836\n" );
	printf( "$progid $dttm xls2pdf MSG_836\n" );
	my @msgtext = $excel->ActiveWindow->SelectedSheets->PrintOut(
		{ActivePrinter => 'Adobe PDF', PrintToFile => 1, PrToFileName => "$xlspdf", copies => 1 });


	print_r(@msgtxt);
##	|| printf( "$progid xls2pdf $dttm ERR_835: printout excel=[$excel]\n" );
	printf( "$progid xls2pdf $dttm MSG_835:  printout excel=[$excel]\n" );

##	my @msgtext = $excel->ActiveSheet->PrintOut({
##		PrintToFile => 1,
##		PrToFileName => "$xlspdf",
##		Copies      => 1
##		}) 
##	|| printf( "$progid xls2pdf $dttm ERR:  PRINT xlspdf=[$xlsxpdf] active_printer=[$active_printer]\n" );;
##	printf( "$progid xls2pdf $dttm MSG:  PRINT xlspdf=[$xlspdf] active_printer=[$active_printer]\n" );;

	
#	$excel->Workbooks->quit() || printf( "ERR_845:  excel->Workbooks->quit()\n" ); 
	$excel->quit || printf( "ERR_846:  excel->quit excel=[$excel]\n" ); 

      	$book->Close() 
	|| printf( "$progid ts2csv $dttm ERR_850:  book->Close()  book=[$book] excel=[$excel]\n");
	printf( "$progid ts2csv $dttm MSG_850:  book->Close()  book=[$book] excel=[$excel]\n");

	$excel->Quit() 
	|| printf( "$progid ts2csv $dttm ERR_855:  excel->Quit()  book=[$book] excel=[$excel]\n");
	printf( "$progid ts2csv $dttm MSG_855:  excel->Quit()  book=[$book] excel=[$excel]\n");


#	$book->Save 
#	|| printf( "$progid xls2pdf $dttm ERR:  book->Save  book=[$book] excel=[$excel]\n");
#	printf( "$progid xls2pdf $dttm MSG:  book->Quit  book=[$book] excel=[$excel]\n");

	undef $book ||
	printf( "$progid xls2pdf $dttm ERR:  UNDEF_BOOK:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n");
	printf( "$progid xls2pdf $dttm MSG:  UNDEF_BOOK:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n" );

        undef $excel ||
	printf( "$progid xls2pdf $dttm ERR:  UNDEF_EXEL:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n");
	printf( "$progid xls2pdf $dttm MSG:  UNDEF_EXEL:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n" );
	}


sub ts2csv_runjob( $option1, $option2, $option3 ) {
	$pathfile_xlsfil=shift; $option2=shift; $option3=shift;
##	printf( "$progid $dttm MSG_480 pathfile_xlsfil=[$pathfile_xlsfil]\n" );
	$pkey_h1="0000";
	@xls_suffix_list = "\.xls";	
	($basename, $dirpath, $suffix) = fileparse( $xlsfil, @xls_suffix_list);

	$tmp_basename=$basename;
	$tmp_basename=~s/-/_/g;
	@filnam_flds=split( /_/, $tmp_basename );
	$filnam_fy=sprintf( "20%02d", $filnam_flds[2] );
	$filnam_pp=sprintf( "%02d", $filnam_flds[3] );
	$filnam_p=sprintf( "%1d", $filnam_flds[4] );
	$filnam_enddt=sprintf( "%04d-%02d-%02d", 
		substr($filnam_flds[5],0,4 ),
		substr($filnam_flds[5],4,2 ),
		substr($filnam_flds[5],6,2 ));

	$filnam_id=sprintf( "%02d%02d%1d", 
		substr($filnam_fy,2,2),
		$filnam_pp,$filnam_p);
##	printf( "$progid ts2csv $dttm MSG:  filnam_fy=[$filnam_fy]\n" );
##	printf( "$progid ts2csv $dttm MSG:  filnam_pp=[$filnam_pp]\n" );
##	printf( "$progid ts2csv $dttm MSG:  filnam_p=[$filnam_p]\n" );
##	printf( "$progid ts2csv $dttm MSG:  filnam_enddt=[$filnam_enddt]\n" );
##	printf( "$progid ts2csv $dttm MSG:  filnam_id=[$filnam_id]\n" );

	$xlsfil=$pathfile_xlsfil;
	if( "$dirpath" eq "\.\\" ) { $xlsfil=sprintf("%s/%s", $cwd, $xlsfil ); }
#	printf( "$progid ts2csv $dttm MSG:  xlsfil=[$xlsfil]\n" );
#	printf( "$progid ts2csv $dttm MSG:  basename=[$basename]\n" );
#	printf( "$progid ts2csv $dttm MSG:  dirpath=[$dirpath] suffix=[$suffix]\n" );
#	printf( "$progid ts2csv $dttm MSG_512:  xlsfil=[$xlsfil]\n" );

#	if( ! -f $xls_templet ) { 
#		printf( "$progid ts2csv $dttm ERR:  NOTFOUND xls_templet=[$xls_templet]\n" );
#		return;
#		}

	if( ! -f $xlsfil ) { 
		printf( "$progid ts2csv $dttm ERR:  NOTFOUND xlsfil=[$xlsfil]\n" );
		return;
		}
	$xlsbak = $xlsfil; $xlsbak =~ s/\.xls/_$dttm.xls/;
	$xlstmp = $xlsfil; $xlstmp =~ s/\.xls/_tmp.xls/;
	$xlscsv = $xlsfil; $xlscsv =~ s/\.xls/.csv/;
	$tsscsv = $xlsfil; $tsscsv =~ s/\.xls/_tss.csv/;
	$tsdcsv = $xlsfil; $tsdcsv =~ s/\.xls/_tsd.csv/; 
	$xlspdf = $xlsfil; $xlspdf =~ s/\.xls/.pdf/;


##	printf( "BUGS_540:\n tsscsv=[$tsscsv]\n tsdcsv=[$tsdcsv]\n xlscsv=[$xlscsv] \n xlspdf=[$xlspdf]\n" );
##	return;

##	if( -f $xlstmp ) {
##		printf( "$progid ts2csv $dttm ERR:  FOUND xlstmp=[$xlstmp]\n" );
##		return;
##		}

##	printf( "$progid ts2csv $dttm DISABLED:  copy($xlsfil,$xlstmp)\n" );
##	printf( "$progid ts2csv $dttm MSG:  copy($xlsfil,$xlstmp)\n" );
##	copy( $xlsfil, $xlstmp );

##	if( -f $xlsbak ) {
##		printf( "$progid ts2csv $dttm DISABLED:  FOUND xlsbak=[$xlsbak]\n" );
##		printf( "$progid ts2csv $dttm ERR:  FOUND xlsbak=[$xlsbak]\n" );
##		return;
##		}


##	printf( "$progid ts2csv $dttm BEG:  GetActiveObject=[$excel] \$\@=[$@]\n" );

##	open( XLSCSV, ">$xlscsv" ) || die "$progid ts2csv ERR:  OPEN tscsv=[$tscsv]\n";
	open( TSSCSV, ">$tsscsv" ) || die "$progid ts2csv ERR:  OPEN tsscsv=[$tsscsv]\n";
	open( TSDCSV, ">$tsdcsv" ) || die "$progid ts2csv ERR:  OPEN tsdcsv=[$tsdcsv]\n";

# open existing excel instance
##	$excel = Win32::OLE->GetActiveObject('Excel.Application')
##	|| printf( "$progid ts2csv $dttm ERR:  GetActiveObject [$excel]\n" );
##	printf( "$progid ts2csv $dttm MSG:  GetActiveObject excel=[$excel]\n" );


# open new excel instance
#	if (! defined $excel) {
	if (("$excel" eq "1" ) || ( "$excel" eq "" )) {
		$excel = Win32::OLE->new('Excel.Application', 'Quit')
		|| die printf( "$progid ts2csv $dttm ERR:  OLE->new excel=[$excel]\n" );
##		printf( "$progid dta2xls_tx $dttm MSG_550:  OLE->new excel=[$excel]\n" );
		}
	else {
##		printf( "$progid dta2xls_tx $dttm MSG_560:  GetActiveObject DEFINED excel=[$excel]\n" );
		}

##	printf( "$progid ts2csv $dttm BEG:  open xls_templet=[$xls_templet] excel=[$excel]\n" );
##	$book = $excel->Workbooks->Open("$xlstmp") 
##	|| die printf( "$progid ts2csv $dttm ERR:  open xlsfil=[$xls_templet] book=[$book] excel=[$excel]\n");


	$book = $excel->Workbooks->Open("$xlsfil") 
	|| die printf( "$progid ts2csv $dttm ERR:  open xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n");
##	printf( "$progid ts2csv $dttm MSG_570:  open xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n" );


	$sheet = $book->Worksheets(1) ||
	die printf( "$progid ts2csv $dttm ERR_580:  sheet  xlsfil=[$xlsfil] excel=[$excel]\n");

# pqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpq
#	printf( "$progid ts2csv $dttm BEG_590: display xlsfil=[$xlsfil]\n" );
	

#	@hrs="";
	$hrs[0][0]="";
	$daynum=0;
	$flipflop=1;
#	$excel->{Visible} = 0;
# 	black and white:   ActivePrinter => '\\NETPRINTSRV\p21 on Ne01:',
# 	color:             ActivePrinter => "ACROBAT:",
# 	default printer:   ActivePrinter => $pobj,

##	printf( "$progid ts2csv $dttm BEG:  excel=[$excel]\n" );

	$period=$sheet->Range("$period_range")->{Value} 
	|| die printf( "$progid ts2csv $dttm ERR:  period=[$period] excel=[$excel]\n" );
##	printf( "$progid ts2csv $dttm MSG_600:  period=[$period]\n" );


#	printf( "$progid ts2csv $dttm MSG_600:  period=[$period] excel=[$excel]\n" );

# get period info from formated title
#	period_13-1_20091227-20090102
	$period =~ s/-/_/g;
#	period_13_1_20091227_20090102
	@period_flds=split(/_/,$period);
	$period_pp=$period_flds[1];
	$period_p=$period_flds[2];
	$begdt_text=$period_flds[3];
	$enddt_text=$period_flds[4];
	$fy=substr($enddt_text,0,4);
	$begdt=sprintf( "%04d-%02d-%02d",
		substr($begdt_text,0,4),
		substr($begdt_text,4,2),
		substr($begdt_text,6,2)
		);
	$enddt=sprintf( "%04d-%02d-%02d",
		substr($enddt_text,0,4),
		substr($enddt_text,4,2),
		substr($enddt_text,6,2)
		);
#	$keytext=sprintf( "%s,%s,%s,%s,%s,", $fy,$period_pp, $period_p, $begdt, $enddt );
	$keytext=sprintf( "%s,%s,%s", $fy,$period_pp, $period_p );

	$title=$sheet->Range("$period_range")->{Value};
##	printf( "pqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpq\n" );
##	printf( "$progid ts2csv $dttm MSG_630:\ntitle=[$title]\n" );
##	printf( "bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd\n" );
##	return;

	$daynum=0;
	foreach $col (@week_cols_h1 ) {
##		printf( "$progid $dttm MSG_640: daynum=[$daynum] col=[$col] xlsfil=[$xlsfil]\n" );
		$day[$daynum]=$sheet->Range("$col$day_row:$col$day_row")->{Value};
		$sheet->Range("$col$dt_row:$col$dt_row")->{NumberFormat} ="yyyy-mm-dd";
		$dt[$daynum]=$sheet->Range("$col$dt_row:$col$dt_row")->{Value};
		@dt_flds=split(/\//,$dt[$daynum] );
		$effdt[$daynum]=sprintf( "%04d-%02d-%02d",
			$dt_flds[2],$dt_flds[0], $dt_flds[1] );

##		printf( "($col$day_row) $daynum day=$day[$daynum]\n" );
##		printf( "BUGS_645:  ($col$dt_row) $daynum dt=$dt[$daynum] effdt=$effdt[$daynum]\n" );

		$tsdrec_hdr=sprintf( "$period,$filnam_id$pkey_h1,$keytext,$hrstext,$xlsfil,status," );
		$tsdrec_days = "";
		foreach $row (@time_rows) {
#		$week_cols_h1 = qw!B F J N R V Z!;
			$range_h1=sprintf( "%s%s:%s%s", $week_cols_h1[$daynum],$row,$week_cols_h1[$daynum],$row );
			$range_h2=sprintf( "%s%s:%s%s", $week_cols_h2[$daynum],$row,$week_cols_h2[$daynum],$row );
			$range_tm=sprintf( "%s%s:%s%s", $week_cols_tm[$daynum],$row,$week_cols_tm[$daynum],$row );
			$range_cd=sprintf( "%s%s:%s%s", $week_cols_cd[$daynum],$row,$week_cols_cd[$daynum],$row );
##			printf( "$progid ts2csv $dttm MSG:  r=($range) r1=($range1) r2=($range2)\n" );
			$hrs[$daynum][0]=$sheet->Range("$range_h1")->{Value};
			$hrs[$daynum][1]=$sheet->Range("$range_h2")->{Value};
			$hrs[$daynum][2]=$sheet->Range("$range_tm")->{Value};
			$hrs[$daynum][3]=$sheet->Range("$range_cd")->{Value};

			$rangetext=sprintf( "h1=(%s) h2=(%s) tm=(%s) cd=(%s)",
				$range_h1,$range_h2,$range_tm,$range_cd );
##			printf( "$progid ts2csv $dttm MSG:  rangetext=[$rangetext]\n " );

#			$hrs[$daynum][0],
			$h1=$hrs[$daynum][0];
			if( "$h1" eq "" ) { $h1=sprintf( "%04d", $pkey_h1 ); }	
			$pkey_h1=sprintf( "%04d", ($pkey_h1+250));
			if( $pkey_h1 > 2400 ) { $pkey_h1="0000"; }

##			printf( "$progid ts2csv $dttm MSG_670: daynum=$daynum  h1=[$h1] [pkey_h1=[$pkey_h1] hrs=$hrs[$daynum][0]\n" );
			$hrstext=sprintf( "%s,%s,%s,%s,%s,%s,",
				$effdt[$daynum], $day[$daynum], $h1,
				$hrs[$daynum][1],
				$hrs[$daynum][2],
				$hrs[$daynum][3]
				);

##			$tsdrec_days .= "$hrs[$daynum][0],$hrs[$daynum][1],$hrs[$daynum][2],$hrs[$daynum][3],";
##			printf( TSDCSV "$filnam_id$pkey_h1,$keytext,$hrstext,$col$row,$xlsfil,$status,desc\n" );
			$tsdrec = $tsdrec_hdr . $hrstext . "\n";
			printf( TSDCSV $tsdrec );

##			$tsdrec = $tsdrec_hdr . $tsdrec_days;
##			printf( TSDCSV "$tsdrec\n" );


##			$csvrec_hdr  = "";
##			$csvrec_hdr .= "$period,$xlscsv,,,,,,\n";
##			$csvrec_hdr .= "$period,$xlscsv,,,,,,,,\n";
##			$csvrec_hrs = "";
##			$csvrec_hdrdt="";
##			printf( "$progid $dttm MSG_698:  tsdrec=[$tsdrec]\n" );
##			printf( "$progid $dttm MSG_699:  tssrec=[$tssrec]\n" );
##
##			printf( "$progid $dttm MSG_700:  daynum=[$daynum]\n" );
##			$csvrec_hdrdt .= "$period,$hdrdt[$daynum],";
##
##			$csvrec_dtl .= "$week_cols_h1[$daynum],$week_cols_h1[$daynum],";
##			$csvrec_dtl .= "$week_cols_h2[$daynum],$row,$week_cols_h2[$daynum],";
##			$csvrec_dtl .= "$week_cols_tm[$daynum],$row,$week_cols_tm[$daynum],";
##			$csvrec_dtl .= "$week_cols_cd[$daynum],$row,$week_cols_cd[$daynum],";
##			$csvrec_dtl .= "$hrs[$daynum][0],";
##			$csvrec_dtl .= "$hrs[$daynum][1],";
##			$csvrec_dtl .= "$hrs[$daynum][2],";
##			$csvrec_dtl .= "$hrs[$daynum][3],";
##
##			$csvrec_hrs  = "";
##			for( $slots=1; $slots<10; $slots++ ) {
##				$csvrec_hrs .= "$period,";
##				$csvrec_hrs .= "$begdt[$daynum][$slot],";
##				$csvrec_hrs .= "$enddt[$daynum][$slot],";
##				$csvrec_hrs .= "$hrs[$daynum][$slot],";
##				$csvrec_hrs .= "$code[$daynum][$slot],\n";
##				}
##
##			$csvrec_hdrdt .= "\n";
##			$csvrec_dtl .= "\n";
##			$csvrec  = "";
##			$csvrec .= $csvrec_hdr . $csvrec_hdrdt . $csvrec_dtl . "," . $csvrec_hrs . "\n";
##			$csvrec .= "$filnam_id$pkey_h1,$keytext,$hrstext,$col$row,$xlsfil,$status,desc\n";



#			printf( "BUGS_730:  csvrec=[$csvrec] xlscsv=[$slxcsv]\n" );
##			printf( XLSCSV "$csvrec\n" );

#			printf( XLSCSV "$pkey,$keytext,$hrstext,,$col$row,desc,\n" );
#			printf( XLSCSV "$keytext,$hrstext,amt,amtc,amtg,$col$row,desc,\n" );

#			printf( "BUGS_680:  $filnam_id$pkey_h1,$keytext,$hrstext,$col$row,desc\n" );
#			$sheet->Range("$range_h1")->{Value}=$row*100;
#			$sheet->Range("$range_h2")->{Value}=$row*100+150;
#			if( $flipflop == 1 ) {
#				$sheet->Range("$range_cd")->{Value}="c";
#				}
#			else {
#				$sheet->Range("$range_cd")->{Value}="g";
#				}
#			$flipflop=$flipflop*(-1);
			}
		$daynum++;
		printf( "\n" );
		}




	$tssrec=sprintf( "%s,%s,%s,%s,hrs,d1,d2,d3,d4,d5,d6,d7, e1,e2,e3,e4,e5,e6,e7,h1,h2,h3,h4,h5,h6,h7\n", 
		$title, $begdt, $enddt );
	printf( TSSCSV "$tssrec\n" );

#	close( XLSCSV );
	close( TSSCSV );
	close( TSDCSV );



##	my $pobj = $excel->ActivePrinter;
##	if ($pobj) { print("Name of default printer =>>$pobj<<\n"); }
##	printf( "$progid ts2csv $dttm END: display\n" );

	printf( "$progid ts2csv $dttm END_760:  quit  \nxlsfil=[$xlsfil] \nbook=[$book] \nexcel=[$excel]\n" );

	$xlstmp="ko_center_tmp.xls";
	$excel-> {DisplayAlerts} = 0;		# This turns off the "This file already exists" message.
##	$book->SaveAs ("$xlstmp") || die printf( "$progid ts2csv $dttm ERR:  book->saveas xlstmp=[$xlstmp] excel=[$excel]\n" );
      	$book->Close() || die printf( "$progid ts2csv $dttm ERR:  book->close xlstmp=[$xlstmp] excel=[$excel]\n" );

##	$book->quit  || die printf( "$progid ts2csv $dttm ERR:  book->quit  xlstmp=[$xlstmp] excel=[$excel]\n");
#	printf( "$progid ts2csv $dttm MSG:  quit:  xlstmp=[$xlstmp] excel=[$excel]\n" );
#	$excel->Workbooks->quit() || printf( "ERR:  excel->Workbooks->quit()\n" ); 
##	$excel->quit || die printf( "$progid ts2csv $dttm ERR:  excel->quit excel=[$excel]\n" ); 

###	$workbook -> SaveAs ("C:\\file_name.xls");
###	$excel    -> Quit;

# err  	$excel->ActiveWorkbooks->Close 
#	|| printf( "$progid ts2csv $dttm ERR:  excel->ActiveWorkbook->Close(0)  book=[$book] excel=[$excel]\n");
#	printf( "$progid ts2csv $dttm MSG:  excel->ActiveWorkbooks->Close(0)  book=[$book] excel=[$excel]\n");

##	$book = $excel->Workbooks->Open("$xlsfil") 
#      	$excel->Workbooks->Close
#	|| printf( "$progid ts2csv $dttm ERR:  excel->Workbooks->Close  book=[$book] excel=[$excel]\n");
#	printf( "$progid ts2csv $dttm MSG:  excel->Workbooks->Close  book=[$book] excel=[$excel]\n");

#      	$book->Close() 
#	|| printf( "$progid ts2csv $dttm ERR:  book->Close()  book=[$book] excel=[$excel]\n");
#	printf( "$progid ts2csv $dttm MSG:  book->Close()  book=[$book] excel=[$excel]\n");

#	$excel->Quit 
#	|| printf( "$progid ts2csv $dttm ERR:  excel->Quit  book=[$book] excel=[$excel]\n");
#	printf( "$progid ts2csv $dttm MSG:  excel->Quit  book=[$book] excel=[$excel]\n");

#	$book->Quit 
#	|| printf( "$progid ts2csv $dttm ERR:  book->Quit  book=[$book] excel=[$excel]\n");
#	printf( "$progid ts2csv $dttm MSG:  book->Quit  book=[$book] excel=[$excel]\n");

#	$book->Save 
#	|| printf( "$progid ts2csv $dttm ERR:  book->Save  book=[$book] excel=[$excel]\n");
#	printf( "$progid ts2csv $dttm MSG:  book->Quit  book=[$book] excel=[$excel]\n");

##	undef $book ||
##	printf( "$progid ts2csv $dttm ERR:  UNDEF_BOOK:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n");
##	printf( "$progid ts2csv $dttm MSG:  UNDEF_BOOK:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n" );

##       undef $excel ||
##	printf( "$progid ts2csv $dttm ERR:  UNDEF_EXEL:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n");
##	printf( "$progid ts2csv $dttm MSG:  UNDEF_EXEL:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n" );


##	printf( "$progid ts2csv $dttm END:  unlink=[$xlstmp]\n" );
##	unlink( $xlstmp );
##	printf( "$progid ts2csv $dttm END:  xlsfil=[$xlsfil]\n" );


##	$cmd=sprintf( "cat %s", $xlscsv );
##	system($cmd);
##	printf( "$progid ts2csv $dttm END:  cmd=[$cmd]\n" );

##	$cmd=sprintf( "%s -csv %s \".import %s hrs\"", $sqlbin, $sqldb, $xlscsv );
##	system($cmd);
##	printf( "$progid ts2csv $dttm END_765:  cmd=[$cmd]\n" );
	}

sub db2ts( $option1, $option2, $option3 ) {
	$option1=shift; $option2=shift; $option3=shift;
	$sqldb="ko_center.db3";
	printf( "$progid $dttm MSG_1700: option1=[$option1][$option2] dbfile=[$sqldb]\n" );
	}

sub sqlval2( $dbfile, $sql ) {
	$dbfile=shift; $sql=shift;
# use strict;
# use DBI;

	my $dbh = DBI->connect( "dbi:SQLite:dbname=$dbfile", "","", { RaiseError => 1 },) or die $DBI::errstr;
	my $sth = $dbh->prepare( $sql );  
	my $headers = $sth->{NAME};
	my ($id, $name, $price) = @$headers;
	printf  "%s %-10s %s\n", $id, $name, $price;
	$sth->execute();
	my $row;
	while($row = $sth->fetchrow_hashref()) {
		printf "%2d %-10s %d\n", $row->{Id}, $row->{Name}, $row->{Price};
		}
	$sth->finish();
	$dbh->disconnect();
	}

sub sqlval( $dbfile, $sql ) {
	$dbfile=shift; $sql=shift;

        my $db = DBI->connect( "dbi:SQLite:$dbfile" )
		|| die printf( "$progid $dttm sqlval ERR_1735:  dbi->connect dbfile=[$dbfile] \n" );
	my $rows = $db->selectall_arrayref("$sql")
		|| die printf( "$progid $dttm sqlval ERR_1736:  db->selectall_arrayref($sql)\n" );
	$db->disconnect();

        foreach my $row (@$rows) { 
		$j++; 
		foreach my $col (@$row ) {
			$val= $col; 
##			printf( "$dttm _1745: $j val=[$val] sql=[$sql][$dbfile]\n" );
			}
##		last; 
		}
	return( $val );
	}

sub sqlvals( $dbfile, $sql ) {
        $dbfile=shift; $sql=shift;

        my $db = DBI->connect( "dbi:SQLite:$dbfile" )
                || die printf( "$progid $dttm sqlval ERR_1755:  dbi->connect dbfile=[$dbfile] \n" );
        my $rows = $db->selectall_arrayref("$sql") 
                || die printf( "$progid $dttm sqlval ERR_1756:  db->selectall_arrayref($sql)\n" );
        $db->disconnect();
	return( @$rows );

	$data="";
        printf( "$progid $dttm MSG_1760: dbfile=[$dbfile] sql=[$sql]\n" );
        foreach my $row (@$rows) { 
                $j++;   
                foreach my $col (@$row)  { 
			$data .= "$col|";
##	                printf( "BUGS_1765: col=[$col] sql=[$sql]\n" );
			}
		$data .= "\n";
##              last;   
                }       

        return( $data ); 
        }       



sub sql_dumper() {
#	my $sth = $dbh->column_info('','',$table,$column);  # or $column='' for all
#	my $info = $sth->fetchall_arrayref({});
#	use Data::Dumper; print Dumper($info);
#	while (my $row = $result->fetchrow_hashref) {
#		my $csv = join(',', values %$row);
#		#print "$csv\n";
#		}
#
#	$result->finish;
#	$db->disconnect;
	}

sub sqldata( $dbfile, $sql ) {
	$dbfile=shift; $sql=shift;
	printf( "$progid $dttm sqldata MSG_1730:  dbfile=[$dbfile] sql=[$sql]\n" );
	return;

##	$sql="select yyyy, p, q, wk, begdt, begday, enddt, endday, desc from periods";
##	$sql="select yyyy from periods";
        $db = DBI->connect( "dbi:SQLite:$dbfile" ) 
		|| die printf( "$progid $dttm ERR_1730:  dbi->connect dbfile=[$dbfile] \n" );
	$rows = $db->selectall_arrayref($sql)
		|| die printf( "$progid $dttm ERR_1731:  db->selectall_arrayref($sql)\n".$dbh->errstr() );
###		$dbh_errstr=$db->errstr();
###	printf( "$progid $dttm MSG"_1732:  $dbh_errstr\n" );
	$db->disconnect();

	my $j=0;
        foreach my $row (@$rows) {
#                my ( $yyyy, $host, $info, $shell, $spwchg, $spwchg_dt, $spwchg_age )  = @$row;
                 ( $yyyy, $p, $q, $wk, $begdt, $begday, $enddt, $endday, $desc )  = @$row;
#                printf( "$progid sqldata MSG_1740:  user=[$user] host=[$host] $info $homedir spwchg=[$spwchg][$spwchg_dt][$spwchg_age]\n" );
		}
	printf( "$progid sqldata MSG_1742:  yyyy=[$yyyy] fy=[$fy] p=[$p] q=[$q] begdt=[$begdt][$enddt] [$endday]\n" );
	exit;

	$data="";
        foreach my $col (@$rows) { 
		$j++; 
#		( $yyyy, $fy, $p, $q, $wk, $begdt, $begday, $enddt, $endday, desc ) = @$col; 
		( $yyyy ) = @$col; 
		printf( "$progid sqldata MSG_1736: $j [$yyyy][$fy][$p][$q][$wk][$begdt][enddt][$begday][$endday][$desc]\n" );
		}

	printf( "$progid $dttm sqlvals MSG_1755:  $j data=[$data]\n" );
	return( $data );
	}



sub db2saic1( $option1, $option2, $option3 ) {
	$option1=shift; $option2=shift; $option3=shift;

	$dtm_data_1=$option1;
	$dtm_data_2=$option2;
	my ( $mydt_1, $myt1_1, $myt2_1, $myhr_1, $mycd_1, $mydesc_1 ) = split( /\|/, $dtm_data_1 );
	my ( $mydt_2, $myt1_2, $myt2_2, $myhr_2, $mycd_2, $mydesc_2 ) = split( /\|/, $dtm_data_2 );
	if( $myhr_1 == "" ) { $myhr_1 = $myt2_1 - $myt1_1; }
	if( $myhr_2 == "" ) { $myhr_2 = $myt2_2 - $myt1_2; }

##	$where_clause="where date('$mydt') between date(begdt) and date(enddt)";
##	$sql_dtm="select yyyy, fy, p, q, wk, begdt, enddt, endday, desc, oy, est from periods $where_clause";
	$where_clause="where date('mydt') between date($mydt_1) and date($mydt_2)";
	$where_clause="";
	$sql_dtm="select dt, t1, t2, hr, cd, desc from dtm $where_clause";
	printf( "$progid $dttm MSG_2560 dbfile=[$dbfile] sql_dtm=[$sql_dtm]\n" );
	printf( "$progid $dttm MSG_2560 mydt_1=[$mydt_1] mydt_2=[$mydt_2]\n" );

	@$rows = &sqlvals( $dbfile, $sql_dtm );
	$rowcnt=0;

	$hrcnt=0;
        foreach my $row (@$rows) {
		$rowcnt++;
		$hrccnt++;
		( $mydt, $myt1, $myt2, $myhr, $mycd, $mydesc ) = @$row;
		$dtm_data = "$mydt|$myt1|$myt2|$myhr|$mycd|$mydesc";
		printf( "\n$progid $dttm MSG_3005: $rowcnt  dtm_data=[$dtm_data]" );
		printf( "\n$progid $dttm MSG_3006: $rowcnt  mydt=$mydt myt1=[$myt1] myt2=$myt2 mycd=[$mycd]\n" );
		&dt2kxls( $dtm_data, $option2, $option3 );
		}
	

	return;

	}

# ERR database is locked
sub dt2saic( $option1, $option2, $option3 ) {
	$option1=shift; $option2=shift; $option3=shift;

	$dtm_data=$option1;
	my ( $mydt, $myt1, $myt2, $myhr, $mycd, $mydesc ) = split( /\|/, $dtm_data );
#	@filnam_flds=split( /_/, $tmp_basename );
	printf( "$progid $dttm MSG_2521: option1=[$option1][$option2] dbfile=[$dbfile]\n" );
	if( $myhr == "" ) { $myhr = $myt2 - $myt1; }


# ERR database is locked
#	echo ".dump" | sqlite3 ko_center.db3 | sqlite3 ko_center_dump.db3

# get dayofweek
##	$sql_daynum="select count(*) from periods";
	$sql_dayofweek=sprintf( "select strftime('\%w', '%s' );", $mydt );
	$dayofweek = &sqlval( $dbfile, $sql_dayofweek );

##	printf( "$progid $dttm MSG_1805:  dayofweek=[$dayofweek] sql_dayofweek=[$sql_dayofweek]\n" );
	printf( "$progid $dttm MSG_2600: option1=[$option1] [$mydt] [$myt1][$myt2] [$myhr][$mycd] [$mydesc]\n" );
##	printf( "$progid $dttm MSG_2600: dbfile=[$dbfile]\n" );

# get dayofweek
        $sql_dayofweek=sprintf( "select strftime('\%w', '%s' );", $mydt );
        $dayofweek_num = &sqlval( $dbfile, $sql_dayofweek );
        $dayofweek_order = "1 2 3 4 5 6 0";
        $dayofweek_info[0] = "1 E:20 Sun";
        $dayofweek_info[1] = "2 I:20 Mon";
        $dayofweek_info[2] = "3 M:20 Tue";
        $dayofweek_info[3] = "4 Q:20 Wed";
        $dayofweek_info[4] = "5 U:20 Thr";
        $dayofweek_info[5] = "6 X:20 Fri";
        $dayofweek_info[6] = "0 AC:20 Sat";
	( $dayofweek_order, $rowcol, $dayofweek_name ) = split( / /, $dayofweek_info[$dayofweek_num] );
	printf( "$progid $dttm MSG_2145:  dayofweek_order=[$dayofweek_order] dayofweek_name=[$dayofweek_name] $rowcol\n" );
	printf( "$progid $dttm MSG_2240:  dayofweek_info=[$dayofweek_info]\n" );

##	printf( "$progid $dttm MSG_1870:   dayofweek=[$dayofweek] sql_dayopweek=[$sql_dayofweek]\n");
##	$sql_dayofweek=sprintf( "select strftime('\%w', '%s' );", $mydt );
##	$seldayofweek=sprintf("strftime('\%w', '%s' )",$mydt );

	$where_clause="where date('$mydt') between date(begdt) and date(enddt)";
	$sql_periods="select yyyy, fy, p, q, wk, begdt, enddt, endday, desc, oy, est from periods $where_clause";

##	$sql_periods="select yyyy,fy,p,q,wk,begdt,enddt,oy,endday,desc,f1 est from periods where date('2012-11-12') between date(begdt) and date(enddt);";

	printf( "$progid $dttm MSG_1880 dbfile=[$dbfile] sql_periods=[$sql_periods]\n" );
	@$rows = &sqlvals( $dbfile, $sql_periods );
	$rowcnt=0;

	$co="konet";
	$user="kassilj";
	$user_name="joachim kassil";
	$co_name="konet llc";
	
	$tstemplet_xlsfil="konet_ts_templet.xls";
	$invtemplet_xlsfil="konet_inv_templet.xls";
	$pathwork="s:/xampp/htdocs/kxls/work/";
	$pathwork_win="s:\\xampp\\htdocs\\ko_center\\work\\";
	$tstemplet_path_xlsfil_win="$pathwork_win$tstemplet_xlsfil";
	$invtemplet_path_xlsfil_win="$pathwork_win$invtemplet_xlsfil";

##	&ole_templet2ts_detail_close(); 
        foreach my $row (@$rows) {
		$rowcnt++;
		( $yyyy, $fy, $p, $q, $wk, $begdt, $enddt, $endday, $desc, $oy, $est ) = @$row;
		printf( "\n$progid $dttm MSG_3085: $rowcnt  $yyyy fy=[%d] period=[%d] q=[%d] wk=[%d] oy=[%d] est=[%d]\n",
		$rowcnt, $yyyy, $fy, $p, $q, $wk, $oy, $est );
#		$ts_txtfil=sprintf( "konet_ts_fy-pp-w_yyyymmdd-yyyymmdd.txt" );	
		$begdttm=$begdt; $begdttm =~ s/-//g;
		$enddttm=$enddt; $enddttm =~ s/-//g;

		&ole_templet2ts( $yyyy, $fy, $p, $q, $begdt, $enddt, $dtm_data, $dayofweek_info ); 
##		&ole_templet2ts_detail( $yyyy, $fy, $p, $q, $begdt, $enddt, $dtm_data, $dayofweek_info ); 
                }
##	&ole_templet2ts_detail_close(); 


        printf( "$progid $dttm MSG_2620: yyyy=[$yyyy] fy=[$fy] p=[$p] q=[$q] wk=[$wk]\n" );
	printf( "$progid $dttm MGS_2620: begdt=[$begdt] enddt=[$enddt] begday=[$begday]\n" );
	printf( "$progid db2ts $dttm END_1180: \n" );
	return;

# pqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpq
#	printf( "$progid ts2csv $dttm BEG_1140: display xlsfil=[$xlsfil]\n" );
	

#	@hrs="";
	$hrs[0][0]="";
	$daynum=0;
	$flipflop=1;
#	$excel->{Visible} = 0;
# 	black and white:   ActivePrinter => '\\NETPRINTSRV\p21 on Ne01:',
# 	color:             ActivePrinter => "ACROBAT:",
# 	default printer:   ActivePrinter => $pobj,

##	printf( "$progid ts2csv $dttm BEG:  excel=[$excel]\n" );

	$period=$sheet->Range("$period_range")->{Value} 
	|| die printf( "$progid ts2csv $dttm ERR:  period=[$period] excel=[$excel]\n" );
##	printf( "$progid ts2csv $dttm MSG_600:  period=[$period]\n" );


#	printf( "$progid ts2csv $dttm MSG_600:  period=[$period] excel=[$excel]\n" );

# get period info from formated title
#	period_13-1_20091227-20090102
	$period =~ s/-/_/g;
#	period_13_1_20091227_20090102
	@period_flds=split(/_/,$period);
	$period_pp=$period_flds[1];
	$period_p=$period_flds[2];
	$begdt_text=$period_flds[3];
	$enddt_text=$period_flds[4];
	$fy=substr($enddt_text,0,4);
	$begdt=sprintf( "%04d-%02d-%02d",
		substr($begdt_text,0,4),
		substr($begdt_text,4,2),
		substr($begdt_text,6,2)
		);
	$enddt=sprintf( "%04d-%02d-%02d",
		substr($enddt_text,0,4),
		substr($enddt_text,4,2),
		substr($enddt_text,6,2)
		);
#	$keytext=sprintf( "%s,%s,%s,%s,%s,", $fy,$period_pp, $period_p, $begdt, $enddt );
	$keytext=sprintf( "%s,%s,%s", $fy,$period_pp, $period_p );

	$title=$sheet->Range("$period_range")->{Value};
##	printf( "pqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpq\n" );
##	printf( "$progid ts2csv $dttm MSG_630:\ntitle=[$title]\n" );
##	printf( "bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd\n" );
##	return;

	$daynum=0;
	foreach $col (@week_cols_h1 ) {
##		printf( "$progid $dttm MSG_640: daynum=[$daynum] col=[$col] xlsfil=[$xlsfil]\n" );
		$day[$daynum]=$sheet->Range("$col$day_row:$col$day_row")->{Value};
		$sheet->Range("$col$dt_row:$col$dt_row")->{NumberFormat} ="yyyy-mm-dd";
		$dt[$daynum]=$sheet->Range("$col$dt_row:$col$dt_row")->{Value};
		@dt_flds=split(/\//,$dt[$daynum] );
		$effdt[$daynum]=sprintf( "%04d-%02d-%02d",
			$dt_flds[2],$dt_flds[0], $dt_flds[1] );

##		printf( "($col$day_row) $daynum day=$day[$daynum]\n" );
##		printf( "BUGS_645:  ($col$dt_row) $daynum dt=$dt[$daynum] effdt=$effdt[$daynum]\n" );

		$tsdrec_hdr=sprintf( "$period,$filnam_id$pkey_h1,$keytext,$hrstext,$xlsfil,status," );
		$tsdrec_days = "";
		foreach $row (@time_rows) {
#		$week_cols_h1 = qw!B F J N R V Z!;
			$range_h1=sprintf( "%s%s:%s%s", $week_cols_h1[$daynum],$row,$week_cols_h1[$daynum],$row );
			$range_h2=sprintf( "%s%s:%s%s", $week_cols_h2[$daynum],$row,$week_cols_h2[$daynum],$row );
			$range_tm=sprintf( "%s%s:%s%s", $week_cols_tm[$daynum],$row,$week_cols_tm[$daynum],$row );
			$range_cd=sprintf( "%s%s:%s%s", $week_cols_cd[$daynum],$row,$week_cols_cd[$daynum],$row );
##			printf( "$progid ts2csv $dttm MSG:  r=($range) r1=($range1) r2=($range2)\n" );
			$hrs[$daynum][0]=$sheet->Range("$range_h1")->{Value};
			$hrs[$daynum][1]=$sheet->Range("$range_h2")->{Value};
			$hrs[$daynum][2]=$sheet->Range("$range_tm")->{Value};
			$hrs[$daynum][3]=$sheet->Range("$range_cd")->{Value};

			$rangetext=sprintf( "h1=(%s) h2=(%s) tm=(%s) cd=(%s)",
				$range_h1,$range_h2,$range_tm,$range_cd );
##			printf( "$progid ts2csv $dttm MSG:  rangetext=[$rangetext]\n " );

#			$hrs[$daynum][0],
			$h1=$hrs[$daynum][0];
			if( "$h1" eq "" ) { $h1=sprintf( "%04d", $pkey_h1 ); }	
			$pkey_h1=sprintf( "%04d", ($pkey_h1+250));
			if( $pkey_h1 > 2400 ) { $pkey_h1="0000"; }

##			printf( "$progid ts2csv $dttm MSG_670: daynum=$daynum  h1=[$h1] [pkey_h1=[$pkey_h1] hrs=$hrs[$daynum][0]\n" );
			$hrstext=sprintf( "%s,%s,%s,%s,%s,%s,",
				$effdt[$daynum], $day[$daynum], $h1,
				$hrs[$daynum][1],
				$hrs[$daynum][2],
				$hrs[$daynum][3]
				);

##			$tsdrec_days .= "$hrs[$daynum][0],$hrs[$daynum][1],$hrs[$daynum][2],$hrs[$daynum][3],";
##			printf( TSDCSV "$filnam_id$pkey_h1,$keytext,$hrstext,$col$row,$xlsfil,$status,desc\n" );
			$tsdrec = $tsdrec_hdr . $hrstext . "\n";
			printf( TSDCSV $tsdrec );

##			$tsdrec = $tsdrec_hdr . $tsdrec_days;
##			printf( TSDCSV "$tsdrec\n" );


##			$csvrec_hdr  = "";
##			$csvrec_hdr .= "$period,$xlscsv,,,,,,\n";
##			$csvrec_hdr .= "$period,$xlscsv,,,,,,,,\n";
##			$csvrec_hrs = "";
##			$csvrec_hdrdt="";
##			printf( "$progid $dttm MSG_698:  tsdrec=[$tsdrec]\n" );
##			printf( "$progid $dttm MSG_699:  tssrec=[$tssrec]\n" );
##
##			printf( "$progid $dttm MSG_700:  daynum=[$daynum]\n" );
##			$csvrec_hdrdt .= "$period,$hdrdt[$daynum],";
##
##			$csvrec_dtl .= "$week_cols_h1[$daynum],$week_cols_h1[$daynum],";
##			$csvrec_dtl .= "$week_cols_h2[$daynum],$row,$week_cols_h2[$daynum],";
##			$csvrec_dtl .= "$week_cols_tm[$daynum],$row,$week_cols_tm[$daynum],";
##			$csvrec_dtl .= "$week_cols_cd[$daynum],$row,$week_cols_cd[$daynum],";
##			$csvrec_dtl .= "$hrs[$daynum][0],";
##			$csvrec_dtl .= "$hrs[$daynum][1],";
##			$csvrec_dtl .= "$hrs[$daynum][2],";
##			$csvrec_dtl .= "$hrs[$daynum][3],";
##
##			$csvrec_hrs  = "";
##			for( $slots=1; $slots<10; $slots++ ) {
##				$csvrec_hrs .= "$period,";
##				$csvrec_hrs .= "$begdt[$daynum][$slot],";
##				$csvrec_hrs .= "$enddt[$daynum][$slot],";
##				$csvrec_hrs .= "$hrs[$daynum][$slot],";
##				$csvrec_hrs .= "$code[$daynum][$slot],\n";
##				}
##
##			$csvrec_hdrdt .= "\n";
##			$csvrec_dtl .= "\n";
##			$csvrec  = "";
##			$csvrec .= $csvrec_hdr . $csvrec_hdrdt . $csvrec_dtl . "," . $csvrec_hrs . "\n";
##			$csvrec .= "$filnam_id$pkey_h1,$keytext,$hrstext,$col$row,$xlsfil,$status,desc\n";



#			printf( "BUGS_730:  csvrec=[$csvrec] xlscsv=[$slxcsv]\n" );
##			printf( XLSCSV "$csvrec\n" );

#			printf( XLSCSV "$pkey,$keytext,$hrstext,,$col$row,desc,\n" );
#			printf( XLSCSV "$keytext,$hrstext,amt,amtc,amtg,$col$row,desc,\n" );

#			printf( "BUGS_680:  $filnam_id$pkey_h1,$keytext,$hrstext,$col$row,desc\n" );
#			$sheet->Range("$range_h1")->{Value}=$row*100;
#			$sheet->Range("$range_h2")->{Value}=$row*100+150;
#			if( $flipflop == 1 ) {
#				$sheet->Range("$range_cd")->{Value}="c";
#				}
#			else {
#				$sheet->Range("$range_cd")->{Value}="g";
#				}
#			$flipflop=$flipflop*(-1);
			}
		$daynum++;
		printf( "\n" );
		}




#	$tssrec=sprintf( "%s,%s,%s,%s,hrs,d1,d2,d3,d4,d5,d6,d7, e1,e2,e3,e4,e5,e6,e7,h1,h2,h3,h4,h5,h6,h7\n", 
#		$title, $begdt, $enddt );
#	printf( TSSCSV "$tssrec\n" );

#	close( XLSCSV );
#	close( TSSCSV );
#	close( TSDCSV );


##	my $pobj = $excel->ActivePrinter;
##	if ($pobj) { print("Name of default printer =>>$pobj<<\n"); }
##	printf( "$progid ts2csv $dttm END: display\n" );

	printf( "$progid db2ts $dttm END_1280:  quit  \nxlsfil=[$xlsfil] \nbook=[$book] \nexcel=[$excel]\n" );

	$xlstmp="ko_center_tmp.xls";
	$excel-> {DisplayAlerts} = 0;		# This turns off the "This file already exists" message.
	$book->SaveAs ("$xlsfil") || die printf( "$progid ts2csv $dttm ERR:  book->saveas xlstmp=[$xlstmp] excel=[$excel]\n" );
      	$book->Close() || die printf( "$progid ts2csv $dttm ERR:  book->close xlstmp=[$xlstmp] excel=[$excel]\n" );

##	$book->quit  || die printf( "$progid ts2csv $dttm ERR:  book->quit  xlstmp=[$xlstmp] excel=[$excel]\n");
#	printf( "$progid ts2csv $dttm MSG:  quit:  xlstmp=[$xlstmp] excel=[$excel]\n" );
#	$excel->Workbooks->quit() || printf( "ERR:  excel->Workbooks->quit()\n" ); 
##	$excel->quit || die printf( "$progid ts2csv $dttm ERR:  excel->quit excel=[$excel]\n" ); 

###	$workbook -> SaveAs ("C:\\file_name.xls");
###	$excel    -> Quit;

# err  	$excel->ActiveWorkbooks->Close 
#	|| printf( "$progid ts2csv $dttm ERR:  excel->ActiveWorkbook->Close(0)  book=[$book] excel=[$excel]\n");
#	printf( "$progid ts2csv $dttm MSG:  excel->ActiveWorkbooks->Close(0)  book=[$book] excel=[$excel]\n");

##	$book = $excel->Workbooks->Open("$xlsfil") 
#      	$excel->Workbooks->Close
#	|| printf( "$progid ts2csv $dttm ERR:  excel->Workbooks->Close  book=[$book] excel=[$excel]\n");
#	printf( "$progid ts2csv $dttm MSG:  excel->Workbooks->Close  book=[$book] excel=[$excel]\n");

#      	$book->Close() 
#	|| printf( "$progid ts2csv $dttm ERR:  book->Close()  book=[$book] excel=[$excel]\n");
#	printf( "$progid ts2csv $dttm MSG:  book->Close()  book=[$book] excel=[$excel]\n");

#	$excel->Quit 
#	|| printf( "$progid ts2csv $dttm ERR:  excel->Quit  book=[$book] excel=[$excel]\n");
#	printf( "$progid ts2csv $dttm MSG:  excel->Quit  book=[$book] excel=[$excel]\n");

#	$book->Quit 
#	|| printf( "$progid ts2csv $dttm ERR:  book->Quit  book=[$book] excel=[$excel]\n");
#	printf( "$progid ts2csv $dttm MSG:  book->Quit  book=[$book] excel=[$excel]\n");

#	$book->Save 
#	|| printf( "$progid ts2csv $dttm ERR:  book->Save  book=[$book] excel=[$excel]\n");
#	printf( "$progid ts2csv $dttm MSG:  book->Quit  book=[$book] excel=[$excel]\n");

##	undef $book ||
##	printf( "$progid ts2csv $dttm ERR:  UNDEF_BOOK:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n");
##	printf( "$progid ts2csv $dttm MSG:  UNDEF_BOOK:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n" );

##       undef $excel ||
##	printf( "$progid ts2csv $dttm ERR:  UNDEF_EXEL:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n");
##	printf( "$progid ts2csv $dttm MSG:  UNDEF_EXEL:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n" );


##	printf( "$progid ts2csv $dttm END:  unlink=[$xlstmp]\n" );
##	unlink( $xlstmp );
##	printf( "$progid ts2csv $dttm END:  xlsfil=[$xlsfil]\n" );


##	$cmd=sprintf( "cat %s", $xlscsv );
##	system($cmd);
##	printf( "$progid ts2csv $dttm END:  cmd=[$cmd]\n" );

##	$cmd=sprintf( "%s -csv %s \".import %s hrs\"", $sqlbin, $sqldb, $xlscsv );
##	system($cmd);
##	printf( "$progid ts2csv $dttm END_765:  cmd=[$cmd]\n" );
	}




# xls update from csv
sub csv2ts( $option1, $option2, $option3 ) {
	$pathfile_xlsfil=shift; $option2=shift; $option3=shift;
#	printf( "$progid ts2csv $dttm MSG:  o1=[$option1] o2=[$option2] o3=[$option3]\n");

# use Win32::OLE qw(in with);
# use Win32::OLE::Const 'Microsoft Excel';
# use Win32::OLE::Variant;

	$Win32::OLE::Warn = 3;                                # die on errors...

	@xls_suffix_list = "\.xls";	
	($basename, $dirpath, $suffix) = fileparse( $xlsfil, @xls_suffix_list);



	$xlsfil=$pathfile_xlsfil;
	if( "$dirpath" eq "\.\\" ) { $xlsfil=sprintf("%s/%s", $cwd, $xlsfil ); }
#	printf( "$progid ts2csv $dttm MSG:  xlsfil=[$xlsfil]\n" );
#	printf( "$progid ts2csv $dttm MSG:  basename=[$basename]\n" );
#	printf( "$progid ts2csv $dttm MSG:  dirpath=[$dirpath] suffix=[$suffix]\n" );
	printf( "$progid ts2csv $dttm MSG:  xlsfil=[$xlsfil]\n" );

#	if( ! -f $xls_templet ) { 
#		printf( "$progid ts2csv $dttm ERR:  NOTFOUND xls_templet=[$xls_templet]\n" );
#		return;
#		}

	$xlsbak = $xlsfil;
	if( ! -f $xlsfil ) { 
		printf( "$progid ts2csv $dttm ERR:  NOTFOUND xlsfil=[$xlsfil]\n" );
		return;
		}
	$xlsbak = $xlsfil; $xlsbak =~ s/\.xls/_$dttm.xls/;
	$xlstmp = $xlsfil; $xlstmp =~ s/\.xls/_tmp.xls/;
	$xlscsv = $xlsfil; $xlscsv =~ s/\.xls/.csv/;
	$xlspdf = $xlsfil; $xlspdf =~ s/\.xls/.pdf/;

	if( -f $xlstmp ) {
		printf( "$progid ts2csv $dttm ERR:  FOUND xlstmp=[$xlstmp]\n" );
		return;
		}
	if( -f $xlsbak ) {
		printf( "$progid ts2csv $dttm ERR:  FOUND xlsbak=[$xlsbak]\n" );
		return;
		}

	printf( "$progid ts2csv $dttm MSG:  xlsfil=[$xlsfil]\n" );
	printf( "$progid ts2csv $dttm MSG:  xlsbak=[$xlsbak]\n" );
	printf( "$progid ts2csv $dttm MSG:  xlstmp=[$xlstmp]\n" );


	printf( "$progid ts2csv $dttm BEG:  GetActiveObject=[$excel] \$\@=[$@]\n" );
	open( XLSCSV, ">$xlscsv" );

# open existing excel instance
##	$excel = Win32::OLE->GetActiveObject('Excel.Application')
##	|| printf( "$progid ts2csv $dttm ERR:  GetActiveObject [$excel]\n" );
##	printf( "$progid ts2csv $dttm MSG:  GetActiveObject excel=[$excel]\n" );


# open new excel instance
#	if (! defined $excel) {
	if (("$excel" eq "1" ) || ( "$excel" eq "" )) {
		$excel = Win32::OLE->new('Excel.Application', 'Quit')
		|| die printf( "$progid ts2csv $dttm ERR:  OLE->new excel=[$excel]\n" );
		printf( "$progid dta2xls_tx $dttm MSG:  OLE->new excel=[$excel]\n" );
		}
	else {
		printf( "$progid dta2xls_tx $dttm MSG:  GetActiveObject DEFINED excel=[$excel]\n" );
		}

	printf( "$progid ts2csv $dttm BEG:  open xls_templet=[$xls_templet] excel=[$excel]\n" );
	$book = $excel->Workbooks->Open("$xlsfil") 
	|| die printf( "$progid ts2csv $dttm ERR:  open xlsfil=[$xls_templet] book=[$book] excel=[$excel]\n");
	printf( "$progid ts2csv $dttm MSG:  open xls_templet=[$xls_templet] book=[$book] excel=[$excel]\n" );


	$sheet = $book->Worksheets(1) ||
	die printf( "$progid ts2csv $dttm ERR:  sheet  xlsfil=[$xlsfil] excel=[$excel]\n");
	printf( "$progid ts2csv $dttm MSG:  sheet:  xlsfil=[$xlsfil] excel=[$excel]\n" );

# pqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpq
	printf( "$progid ts2csv $dttm BEG: display\n" );

#	@hrs="";
	$hrs[0][0]="";
	$daynum=0;
	$flipflop=1;
#	$excel->{Visible} = 0;
# 	black and white:   ActivePrinter => '\\NETPRINTSRV\p21 on Ne01:',
# 	color:             ActivePrinter => "ACROBAT:",
# 	default printer:   ActivePrinter => $pobj,

	printf( "$progid ts2csv $dttm BEG_800:  excel=[$excel]\n" );

	$period=$sheet->Range("$period_range")->{Value} 
	|| die printf( "$progid ts2csv $dttm ERR:  period=[$period] excel=[$excel]\n" );
	printf( "$progid ts2csv $dttm MSG:  period=[$period] excel=[$excel]\n" );
#	period_13-1_20091227-20090102
	$period =~ s/-/_/g;
#	period_13_1_20091227_20090102
	@period_flds=split(/_/,$period);
	$period_pp=$period_flds[1];
	$period_p=$period_flds[2];
	$begdt_text=$period_flds[3];
	$enddt_text=$period_flds[4];
	$fy=substr($enddt_text,0,4);
	$begdt=sprintf( "%04d-%02d-%02d",
		substr($begdt_text,0,4),
		substr($begdt_text,4,2),
		substr($begdt_text,6,2)
		);
	$enddt=sprintf( "%04d-%02d-%02d",
		substr($enddt_text,0,4),
		substr($enddt_text,4,2),
		substr($enddt_text,6,2)
		);
#	$keytext=sprintf( "%s,%s,%s,%s,%s,", $fy,$period_pp, $period_p, $begdt, $enddt );
	$keytext=sprintf( "%s,%s,%s,", $fy,$period_pp, $period_p );
	printf( "$progid ts2csv $dttm MSG:  keytext=[$keytext]\n" );




	$daynum=0;
	foreach $col (@week_cols_h1 ) {
		$day[$daynum]=$sheet->Range("$col$day_row:$col$day_row")->{Value};
		$sheet->Range("$col$dt_row:$col$dt_row")->{NumberFormat} ="yyyy-mm-dd";
		$dt[$daynum]=$sheet->Range("$col$dt_row:$col$dt_row")->{Value};
		@dt_flds=split(/\//,$dt[$daynum] );
		$effdt[$daynum]=sprintf( "%04d-%02d-%02d",
			$dt_flds[2],$dt_flds[0], $dt_flds[1] );
		printf( "($col$day_row) $daynum day=$day[$daynum]\n" );
		printf( "($col$dt_row) $daynum dt=$dt[$daynum] effdt=$effdt[$daynum]\n" );

		foreach $row (@time_rows) {
#		$week_cols_h1 = qw!B F J N R V Z!;
			$range_h1=sprintf( "%s%s:%s%s", $week_cols_h1[$daynum],$row,$week_cols_h1[$daynum],$row );
			$range_h2=sprintf( "%s%s:%s%s", $week_cols_h2[$daynum],$row,$week_cols_h2[$daynum],$row );
			$range_tm=sprintf( "%s%s:%s%s", $week_cols_tm[$daynum],$row,$week_cols_tm[$daynum],$row );
			$range_cd=sprintf( "%s%s:%s%s", $week_cols_cd[$daynum],$row,$week_cols_cd[$daynum],$row );
			printf( "$progid ts2csv $dttm MSG:  r=($range) r1=($range1) r2=($range2)\n" );
			$hrs[$daynum][0]=$sheet->Range("$range_h1")->{Value};
			$hrs[$daynum][1]=$sheet->Range("$range_h2")->{Value};
			$hrs[$daynum][2]=$sheet->Range("$range_tm")->{Value};
			$hrs[$daynum][3]=$sheet->Range("$range_cd")->{Value};

			$rangetext=sprintf( "h1=(%s) h2=(%s) tm=(%s) cd=(%s)",
				$range_h1,$range_h2,$range_tm,$range_cd );
			printf( "rangetext=[$rangetext]\n " );

			$hrstext=sprintf( "%s,%s,%s,%s,%s,%s,",
				$effdt[$daynum], $day[$daynum],
				$hrs[$daynum][0],
				$hrs[$daynum][1],
				$hrs[$daynum][2],
				$hrs[$daynum][3]
				);
			printf( "$keytext,$hrstext,$col:$row,desc\n " );
			printf( XLSCSV "$keytext$hrstext,$col:$row,desc\n" );

#			$sheet->Range("$range_h1")->{Value}=$row*100;
#			$sheet->Range("$range_h2")->{Value}=$row*100+150;
#			if( $flipflop == 1 ) {
#				$sheet->Range("$range_cd")->{Value}="c";
#				}
#			else {
#				$sheet->Range("$range_cd")->{Value}="g";
#				}
#			$flipflop=$flipflop*(-1);
			}
		$daynum++;
		printf( "\n" );
		}
	close( XLSCSV );


	printf( "$progid ts2csv $dttm END: display\n" );

#	$range = $sheet->Range("A30:E30");
#	$range->{Value} = [qw|hdr_a hdr_b hdr_c hdr_d hdr_e|];
#	$range->Font->{Bold} = 1;

#	$range = $sheet->Range("A31:E31");
#	$range->{Value} = [qw|110 120 130 140 150|];
#	$range = $sheet->Range("B12:C12")->{Value} = [qw!0000 150!];
#	$range = $sheet->Range("E12:E12")->{Value} = [qw!c!];
#
#	$range = $sheet->Range("F12:G12")->{Value} = [qw!50 250!];
#	$range = $sheet->Range("I12:I12")->{Value} = [qw!c!];
#
#	$range = $sheet->Range("F21:G21")->{Value} = [qw!2250 2350!];
#	$range = $sheet->Range("I21:I21")->{Value} = [qw!g!];


##	if( -f $xlsfil ) {
##		if( -f $xlsbak ) {
##			printf( "$progid ts2csv $dttm ERR: FOUND xlsbak=[$xlsbak])\n");
##			return;
##			}
##		printf( "$progid ts2csv $dttm MSG: copy($xlsfil, $xlsbak)\n");
##		copy( $xlsfil, $xlsbak );
##		if( -f $xlsbak ) {
##			printf( "$progid ts2csv $dttm MSG: unlink($xlsfil)\n");
##			unlink( $xlsfil );
##			}
##		}
##

	printf( "$progid ts2csv $dttm BEG:  SAVEAS:  xlsfil=[$xlsfil] excel=[$excel]\n" );
       	$book->SaveAs ("$xlstmp") ||
	die printf( "$progid ts2csv $dttm ERR:  SAVEAS  xlstmp=[$xlstmp] excel=[$excel]\n");
	printf( "$progid ts2csv $dttm MSG:  SAVEAS:  xlstmp=[$xlstmp] excel=[$excel]\n" );


# xls2pdf
	$pdffil=$xlsfil;
	$pdffil=~s/\.xls$/.pdf/;
	printf( "$progid ts2csv $dttm MSG:  PDF:  pdffil=[$pdffil] excel=[$excel]\n" );
	
#	File->Print->{'Name:'}="Adobe PDF";
#	File->Print->{Save PDF File As'} = "$pdffil";

	undef $book ||
	printf( "$progid ts2csv $dttm ERR:  UNDEF_BOOK:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n");
	printf( "$progid ts2csv $dttm MSG:  UNDEF_BOOK:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n" );

        undef $excel ||
	printf( "$progid ts2csv $dttm ERR:  UNDEF_EXEL:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n");
	printf( "$progid ts2csv $dttm MSG:  UNDEF_EXEL:  xlsfil=[$xlsfil] book=[$book] excel=[$excel]\n" );


	printf( "$progid ts2csv $dttm MSG:  copy($xlsfil,$xlsbak)\n" );
	copy( $xlsfil, $xlsbak );
	if( -f $xlsbak ) {
		printf( "$progid ts2csv $dttm MSG:  unlink($xlsfil)\n" );
		unlink( $xlsfil );
		printf( "$progid ts2csv $dttm MSG:  copy($xlstmp,$xlsfil)\n" );
		copy( $xlstmp, $xlsfil );
		if( -f $xlsfil ) {
			printf( "$progid ts2csv $dttm MSG:  unlink($xlstmp)\n" );
			unlink( $xlstmp );
			}
		}

	printf( "$progid ts2csv $dttm END:  xlsfil=[$xlsfil]\n" );
#	printf( "$progid ts2csv $dttm END:  xlstmp=[$xlstmp]\n" );
#	printf( "$progid ts2csv $dttm END:  xlsbak=[$xlsbak]\n" );

return;
	
# get already active Excel application or open new
	printf( "$progid test $dttm BEG1:  o1=[$option1] o2=[$option2] o3=[$option3]\n");
	my $Excel = Win32::OLE->GetActiveObject('Excel.Application')
		|| Win32::OLE->new('Excel.Application', 'Quit');  

# open Excel file
	printf( "$progid ts2csv $dttm MSG:  xlsfil=[$xlsfil]\n" );
#	my $Book = $Excel->Workbooks->Open("j:/ko/bin/ts1.xls"); 
#	my $Book = $Excel->Workbooks->Open("$xlsfil"); 
	my $Book = $Excel->Workbooks->Open("j:/ko/bin/ts1.xls"); 
	printf( "$progid test $dttm BEG2:  o1=[$option1] o2=[$option2] o3=[$option3]\n");
	}


sub ol2csv_test( $option1, $option2, $option3, $option4 ) {
use Cwd;
# use Win32::OLE qw(in with);
# use Win32::OLE::Const 'Microsoft Excel';
# use Win32::OLE::Variant;

	$xlfil="ko_center.xls";
	if( $option1 != "" ) { $xlfil="$option1"; }
	printf( "$progid MSG_001: xlfil=[$xlfil] BEG:\n" );
	return;
	}

sub ol2csv( $option1, $option2, $option3 ) {

use Cwd;
# use Win32::OLE qw(in with);
# use Win32::OLE::Const 'Microsoft Outlook';
# use Win32::OLE::Variant;

	$csvfil="outlook.csv";
	if( $option1 != "" ) { $csvfil="$option1"; }
	printf( "$progid MSG_001: csvfil=[$csvfil] BEG:\n" );
	return;

# 01.#move all 2010 messages from inbox to personal folders "Old Inbox 2010"
# 02. 
# 03.require 'win32ole'
# 04.outlook = WIN32OLE.new('Outlook.Application')
# 05.mapi = outlook.GetNameSpace('MAPI')
# 06.#inbox
# 07.inbox = mapi.GetDefaultFolder(6)
# 08. 
# 09.#personal folders
# 10.personal_folders = mapi.Folders.Item('Personal_folder')
# 11. 
# 12.#subfolder old inbox 2010 under personal folders
# 13.old_inbox = personal_folders.Folders.Item('Old Inbox 2011')
# 14. 
# 15.#all items that are older than 1.1.2011 move to archive
# 16.inbox.Items.Count.downto(1) do |i|
# 17.message = inbox.Items(i)
				printf( "$progid $dttm dt2kxls MSG_1930: copy $tsnew_xslfil $ts_xslfil\n" );
# 18.if message.CreationTime < "2011/01/01 00:00:00"
# 19.message.Move(old_inbox)
# 20.end


	my $ol = Win32::OLE->GetActiveObject('Outlook.Application') 
			|| Win32::OLE->new('Outlook.Application', 'Quit');
	my $mapi = $ol->GetNameSpace("MAPI");
	my $inbox = $mapi->GetDefaultFolder(olFolderInbox);

	my $dir = cwd . "\\";
	$dir =~ s/\//\\/g;
	my $atch1, $file1, $atch2, $file2;

	printf( "$progid MSG_002: inbox=[$inbox] dir=[$dir]\n");

#	Win32::OLE ->GetObject('Outlook.Application')
#	Win32::OLE ->BuiltinDocumentProperties(wdPropertyComments)
#	Win32::OLE ->Value;

	$inbox_items=ref($inbox->{Items});
	printf( "$progid MSG_057:  inbox_items=[$inbox_items] \n");


	my $itemcount = $inbox->Items->Count;
	printf( "$progid MSG_060:  itemcount=[$itemcount]\n" );

	$j=0; $jlim=10;
	$k=0; $klim=10;
	$i=0; $ilim=20;


## 	printf( "$progid MSG_003:  $i $itemcount recip_count=[$recip_count] to=[$to] from=[$from] received=[$received] lines=[$lines] crtime=[$crtime]\n" );

	$hdrrec="i,crtime,to,recip_name,recip_addr,subject,from,received,sender,";
	printf( "$hdrrec\n" );
	open( CSVFIL, ">>$csvfil" ) || die "$progid ERR_30:  csvfil=[$csvfil]\n";
	printf( CSVFIL "$hdrrec\n" );


	$j=0;
	$r=1;	
#	foreach my $msg (in $Folder->{Items}){
	foreach my $msg (in $inbox->{Items}){
		$j++;
		$received=$msg->{Received};
		$from=$msg->{From};
		$sender=$msg->{sender};
		$lines=$msg->{Lines};
		$crtime=$msg->{CreationTime};
		$subject=$msg->{Subject};

                my $to = $msg->{'To'};
                my $crtime=$msg->{CreationTime};
                my $subject = $msg->{'Subject'};

                my $from = $msg->{'From'};
                my $received = $msg->{'Received'};
                my $sender=$msg->{'Sender'};

		if( defined $msg->Recipients->Count ) {
	                $recip_count= $msg->Recipients->Count;
        	        $recip_addr="recip_addr";
        	        $recip_name="recip_name";
        	        for my $r (1..$nrecip) {
        	                my $recip_addr=$msg->Recipients($r)->Address;
        	                my $recip_name=$msg->Recipients($r)->Name;
        	                }
			}

                $csvrec="$i,$crtime,$to,$recip_name,$recip_addr,$subject,$from,$received,$sender,";
                printf( "$csvrec\n" );
                printf( CSVFIL "$csvrec\n" );
#		print $msg->{CreationTime} . "\n";
#		printf( "$progid MSG_030 j=$j msg=[$msg] crtime=[$crtime] recieved=[$recieved]\n");
		printf( "$csvrec\n" );
		printf( CSVFIL "$csvrec\n" );


		$flag_atch="0";
		if( $flag_atch == "1" ) {
			foreach my $atch (in $msg->{Attachments}){
				$k++;
#				printf( "$progid MSG_040: k=$k atch=$atch\n");
				if($atch->{FileName} =~ m/.xls$/i){
					if($atch->{FileName} =~ /Name of attachment1/i){
						$atch1 = $atch;
						$file1 = $dir . "file1.xls";
	            				}
					if($atch->{FileName} =~ /Name of attachment2/i){
						$atch2 = $atch;
						$file2 = $dir . "file2.xls";
						}
					}
				if( $k > $klim ) { last; }
				}
			}
##		if( $j > $jlim ) { last; }
		}

#	if($atch1 && $atch2) {
#		printf( "$progid MSG_050:  file1=[$file1] file3=[$file2]\n" );
#		print $file1 . "\n" . $file2 . "\n";
#		$atch1->SaveAsFile($file1);
#		$atch2->SaveAsFile($file2);
#		}

	close( CSVFIL );
	}

# =========================================================================================
sub test2( $option1, $option2, $option3 ) {
	$option1=shift; $option2=shift; $option3=shift;
	printf( "$progid test2 $dttm MSG:  o1=[$option1] o2=[$option2] o3=[$option3]\n");

# use Win32::OLE qw(in with);
# use Win32::OLE::Const 'Microsoft Excel';

	$Win32::OLE::Warn = 3;                                # die on errors...

	$xlsfil="ts1.xls";
	if( "$option1" ne "" ) { $xlsfil=$option1; }
	if( -f $xlsfil ) {
		printf( "$progid test2 $dttm MSG:  FOUND xlsfil=[$xlsfil]\n" );
		}
	else {
		printf( "$progid test2 $dttm ERR:  NOTFOUND xlsfil=[$xlsfil]\n" );
		}
	
# get already active Excel application or open new
	printf( "$progid test2 $dttm BEG1:  o1=[$option1] o2=[$option2] o3=[$option3]\n");
	my $Excel = Win32::OLE->GetActiveObject('Excel.Application')
		|| Win32::OLE->new('Excel.Application', 'Quit');  

# open Excel file
	printf( "$progid test2 $dttm MSG:  xlsfil=[$xlsfil]\n" );
#	my $Book = $Excel->Workbooks->Open("j:/ko/bin/ts1.xls"); 
#	my $Book = $Excel->Workbooks->Open("$xlsfil"); 
	my $Book = $Excel->Workbooks->Open("j:/ko/bin/ts1.xls"); 
	printf( "$progid test2 $dttm BEG2:  o1=[$option1] o2=[$option2] o3=[$option3]\n");


	my $Sheet = $Book->Worksheets(1);
	printf( "$progid test2 $dttm BEG3:  o1=[$option1] o2=[$option2] o3=[$option3]\n");
	printf( "$progid test2 $dttm BEGLOOP:  xlsfil=[$xlsfil]\n" );
	foreach my $row (7..20) {
		printf( "$progid test2 $dttm BEGLOOP_ROW:  xlsfil=[$xlsfil] row=$row\n" );
		foreach my $col (1..5) {
			printf( "$progid test2 $dttm BEGLOOP_COL:  xlsfil=[$xlsfil] col=$col\n" );
			next unless defined $Sheet->Cells($row,$col)->{'Value'};

# print out the contents of a cell  
			printf "$progid test2 $dttm LOOP: ($row, $col) 
value=[%s] formula=[%s]\n",
			$Sheet->Cells($row,$col)->{'Value'},
			$Sheet->Cells($row,$col)->{'Formula'};        
#			$sheet->Cells($row, $col)->{'Value'} = 1;
			printf( "$progid test2 $dttm LOOP_MSG:  xlsfil=[$xlsfil] col=$col\n" );
			}
		}

	$row=30; $col=1;
	printf( "$progid test2 $dttm LOOP_UPDATE:  ($row,$col) v=[$value]\n" );
	foreach my $row (30..32) {
		printf( "$progid test2 $dttm LOOP_UPDROW:  ($row,$col) v=[$value]\n" );
		foreach my $col(1..2) {
			printf( "$progid test2 $dttm LOOP_UPDCOL:  ($row,$col) v=[$value]\n" );
			$val1=sprintf( "_(%02d,%02d)_", $row, $col );
			printf( "$progid test2 $dttm LOOP_UPD1:  ($row,$col) v=[$val1]\n" );
			$Sheet->Cells($row, $col)->{'Value'} = $val1;
			printf( "$progid test2 $dttm LOOP_UPD2:  ($row,$col) v=[$val1]\n" );
			}
		}
	$Book->Close;
	}


sub test3( $option1, $option2, $option3 ) {
	$option1=shift; $option2=shift; $option3=shift;
#	printf( "$progid test3 $dttm MSG:  o1=[$option1] o2=[$option2] o3=[$option3]\n" );

# use Win32::OLE;

	$xlsout="ts1.xls";
	if( $option1 ne "" ) { $xlsout=$option1; }
	$root_xlsout="J:/ko/bin";
	$pathfile_xlsout=sprintf( "%s/%s",$root_xlsout,$xlsout );
	$pathfile_xlsout_win=$pathfile_xlsout;
	$pathfile_xlsout_win =~ s!/!\\\\!g;
	printf( "$progid test3 $dttm MSG:  pathfile_xlsout=[$pathfile_xlsout]\n" );
	printf( "$progid test3 $dttm MSG:  pathfile_xlsout_win=[$pathfile_xlsout_win]\n" );

eval{ $ex = Win32::OLE->GetActiveObject('Excel.Application')
        || Win32::OLE->new('Excel.Application', 'Quit')};




# use existing instance if Excel is already running
#	eval {$ex = Win32::OLE->GetActiveObject('Excel.Application')};
#        die "$progid test3 $dttm ERR:  Excel not installed" if $@;
        unless (defined $ex) {
		$ex = Win32::OLE->new('Excel.Application', sub {$_[0]->Quit;})
		or die "$pogid test3 $dttm ERR: Excel not started";
		}
    
##	eval {$ex = Win32::OLE->GetActiveObject('Excel.Application')};
##       die "$progid test3 $dttm ERR:  Excel not installed" if $@;
##	printf( "$progid test3 $dttm EX_XLS:  \$\@=[$@]\n" );
##       if (defined $ex) {
##		$ex = Win32::OLE->new('Excel.Application', sub {$_[0]->Quit;})
##		or die "$pogid test3 $dttm ERR: Excel not started";
##		printf( "$progid test3 $dttm NEWXLS:  \$\_[0]->Quit=[$_[0]->Quit\n" );
##		}
##	else {
##		printf( "$progid test3 $dttm NEWXLS:  UNDEFINED \$\_[0]->Quit=[".$_[0]."->Quit\n" );
##		}
    

# get a new workbook
	printf( "$progid test3 $dttm MSG:  ex=[$ex]\n" );

	my $book = $ex->Workbooks->Open($xlsout); 
#	$book = $ex->Workbooks->Add();
	$sheet = $book->Worksheets(1);
#    my $sheet = $Book->Worksheets("Sheet1");
       $sheet->Activate();       

# write a 2 rows by 3 columns range
	$y = 2;
	$x = 1;
        $sheet->Range("A$x:J$y")->{Value} = [
		['Date','Total (IN)','Suc +c (IN)','Pk (IN)/Hrs','Pk (OUT)/Hrs','Peak Hour','Total (OUT)','Succ +(OUT)','MO(IN)','MO(OUT)'],
		[$date, $total_in, $succ_in,$pk_in,$pk_out,"$pk_hour - $pk_hour_dur hr",$total_out,$succ_out ]];
    
 
	$sheet->Range("K1:L2")->{Value} = [['Pk Msg/sec','Max Pk Msg/sec'], [$max_pk_msg,$pk_msg]];
    
	foreach(@parameters) {
		$sheet->Cells(2,9)->{Value} = [$parameter_in_array{$_}];
		$sheet->Cells(2,10)->{Value} = [$parameter_out_array{$_}];
		}

# print "XyzzyPerl"
        $array = $sheet->Range("A2:I1")->{Value};
	for (@$array) {
		for (@$_) {
			print defined($_) ? "$_|" : "<undef>|";
			}
		print "\n";
		}

# save and exit

#        $book->SaveAs ("J:\\ko\\bin\\$xlsout.xls") ;
	printf( "$progid test3 $dttm SAVEAS:  pathfile_xlsout_win=[$pathfile_xlsout_win]\n" );
        $book->SaveAs ("$pathfile_xlsout_win") ;

	printf( "$progid test3 $dttm UNDEF_BOOK:  pathfile_xlsout_win=[$pathfile_xlsout_win]\n" );
        undef $book;

	printf( "$progid test3 $dttm UNDEF_EX:  pathfile_xlsout_win=[$pathfile_xlsout_win]\n" );
        undef $ex;
	printf( "$progid test3 $dttm END:  pathfile_xlsout_win=[$pathfile_xlsout_win]\n" );
	}

sub go( $option1, $option2, $option3 ) {
	$option1=shift; $option2=shift; $option3=shift;
#	printf( "$progid go $dttm MSG:  o1=[$option1] o2=[$option2] o3=[$option3]\n" );
	}
#
#
sub ungrep( $option1, $option2, $option3 ) {
	$option1=shift; $option2=shift; $option3=shift;
#	printf( "$progid go $dttm MSG:  o1=[$option1] o2=[$option2] o3=[$option3]\n" );


# ifile with filenames prefix to each line
# file-1: file1_text_line-1
# file-1: file1_text_line-n
# ...
# file-n: file1_text_line-2
# file-n: file1_text_line-2
#

# file-1
#   file1_test_line-1
#   file1_text_line-n
# ...
# file-2
#   file2_test_line-1
#   file2_text_line-n


	$ifil=$option1;
	$sqlpath="sql";
	if( ! -f $ifil ) {
		printf( "$progid ungrep $dttm ERR_1320: NOTFOUND ifil=[$ifil] sqlpath=[$sqlpath]\n" );
		return;
		}
		
	$icnt=0;
	$dtag=&dttm;
##	printf( "$progid ungrep $dttm BEG_1330: $wlcnt  ts2csv_wlfile=[$ts2csv_wlfile]\n" );
	open( IFIL, "<$ifil" );
	while( <IFIL> ) {
		$icnt++;
		$lastfile="";
		$irec=$_; chomp($irec);
		( $ofil, $sqltxt ) = split( /\:/, $irec );
		$sqltxt .= "\n";
##		printf( "\n\n$progid ungrep $dttm MSG_1340: ungrep irec=[$irec] ofil=[$ofil] ===\n" );
		$pathfile = "$sqlpath/$ofil";
		$pathsave = "$sqlpath/$ofil"; $pathsave =~ s/.sql$/_$dtag.sql/;
##		printf( "\n\n$progid ungrep $dttm MSG_1340: ungrep pathfile=[$pathfile] sqltxt=[$sqltxt]\n" );
		if( -f $pathfile ) {
			if( $pathfile ne $lastpath ) {
				$cmd_mv=sprintf( "mv $pathfile $pathsave" );
				system( $cmd_mv );
				printf( "\n\n$progid ungrep $dttm OPEN_1341: ungrep $icnt cmd_mv=[$cmd_mv] [$pathfile][$lastpath]\n" );
				printf( "\n\n$progid ungrep $dttm OPEN_1341: ungrep $icnt open pathfile= [$pathfile][$lastpath]\n" );
				if( $icnt > 1 ) { close( OFIL ); }
				open( OFIL, ">$pathfile" );
				print( OFIL $sqltxt );
				}
			else {
#				printf( "\n\n$progid ungrep $dttm WRITE_1342: ungrep $icnt pathfile=[$pathfile] last=[$lastpath] sqltxt=[$sqltxt]\n" );
				print( OFIL $sqltxt );
				}
			}
		else {
			if( $pathfile ne $lastpath ) {
				printf( "\n\n$progid ungrep $dttm OPEN_1351: ungrep $icnt open pathfile=[$pathfile] lastpath=[$lastpath]\n" );
				if( $icnt > 1 ) { close( OFIL ); }
				open( OFIL, ">$pathfile" );
				}
			else {
##				printf( "\n\n$progid ungrep $dttm WRITE_1352: ungrep $icnt [$pathfile][$lastpath] sqltxt=[$sqltxt]\n" );
				print( OFIL $sqltxt );
				}

			}
		$lastpath=$pathfile;
		}
	close( IFIL );
	printf( "$progid ungrep $dttm END_1350: $ifil ungrep=[$ungrep]\n" );
	}

sub ts2csv_runwl( $ts2csv_wlfile ) {
	$ts2csv_wlfile=shift;
	$wlcnt=0;
##	printf( "$progid ts2csv_runwl $dttm BEG_1330: $wlcnt  ts2csv_wlfile=[$ts2csv_wlfile]\n" );
	open( WLFILE, "<$ts2csv_wlfile" );
	while( <WLFILE> ) {
		$wlcnt++;
		$wlrec=$_; chomp($wlrec);
		$xlsfil=$wlrec;
		printf( "\n\n$progid ts2csv_runwl $dttm MSG_1340: $wlcnt wlrec=[$wlrec] ====================\n" );
		&ts2csv_runjob( $xlsfil, $option2, $option3 );
		}
	close( WLFILE );
	printf( "$progid ts2csv_runwl $dttm END_1350: $wlcnt ts2csv_wlfile=[$ts2csv_wlfile]\n" );
	}




sub xlsx2csv( $xlsfil ) {
        $xlsfil=shift;

        printf( "$progid $dttm xlsx2csv MSG_4200:  xlsfil=[$xlsfil]\n" );

## use Text::Iconv;
## my $converter = Text::Iconv -> new ("utf-8", "windows-1251");
### Text::Iconv is not really required.
### This can be any object with the convert method. Or nothing.

# disable use Spreadsheet::XLSX;

        $dtag=&dttm;
        $jobid=$xlsxfil; $jobid =~ s/\.xlsx//;
        $jobid=$xlsfil; $jobid =~ s/\.xlsx//;
##      $xlsxfil="s:\\xampp\\htdocs\\ko_saic\\krhw.xlsx";

##      my $excel = Spreadsheet::XLSX->new('krhw.xlsx', $converter);
        my $excel = Spreadsheet::XLSX->new( $xlsfil, $converter);

        foreach my $sheet (@{$excel -> {Worksheet}}) {
                $sheet_name=$sheet->{Name};
##              printf("Sheet: %s\n", $sheet_name );
                $sheet->{MaxRow} ||= $sheet->{MinRow};

                $sheet_name =~ tr/A-Z/a-z/;
                $sheet_name =~ s/ /_/g;
                $sheet_name =~ s/\,/;/g;
                $sheet_name =~ s/\|/:/g;

                $csvfil= sprintf( "%s-%s-%s.csv", $jobid, $sheet_name, $dtag );
                printf( "$progid $dttm MSG_4230:  csvfil=[$csvfil]\n" );


		open( CSVFIL, ">$csvfil" );

                foreach my $row ($sheet->{MinRow} .. $sheet->{MaxRow}) {
                        $sheet->{MaxCol} ||= $sheet->{MinCol};
                        $coltext="";
                        foreach my $col ($sheet -> {MinCol} ..  $sheet -> {MaxCol}) {
                                my $cell = $sheet->{Cells}[$row][$col];
                                if ($cell) {
                                        $cell_value=$cell->{Val};
                                        $cell_value =~ tr/A-Z/a-z/;
##                                      $cell_value =~ s/,/;/g;
##                                      $cell_value =~ s/|/ or /g;
                                        $cell_value =~ s/ /_/g;

                                        $coltext .= "$cell_value,";
##                                      printf("(%s,%s)=>%s\n",$row,$col,$cell->{Val});
                                        }
                                }
                        $rowtext = sprintf( "%s,%s,%s,%s,%s,%s,%s\n",
                        $myid,$mydf,$jobid,$sheet_name,$row,$coltext,$xlsfil, );
                        printf( $rowtext );
                        print( CSVFIL $rowtext );
                        }
                close( CSVFIL );
                }
        }



sub xls2csv_runjob( $xlsfil ) {
	$xlsfil=shift;
# use strict;
# disabled use Spreadsheet::ParseExcel;

	@sheets;
	printf( "$progid xls2csv_runjob $dttm MSG_1350:  xlsfil=[$xlsfil]\n" );
	return;

	if( ! -f $xlsfil ) {
		printf( "$progid xls2csv_runjob $dttm ERR:  NOTFOUND xlsfil=[$xlsfil]\n" );
		return;
		}


	my $xls = new Spreadsheet::ParseExcel;

	die "You must provide a filename to $0 to be parsed as an Excel file" unless @ARGV;

	my $book = $xls->Parse($xlsfil);

	my( $sheet, $cell  );
	print "file  :", $book->{File} , "\n";
	print "count :", $book->{SheetCount} , "\n";
	print "author:", $book->{Author} , "\n" if defined $book->{Author};
	print "$progid xls2csv $dttm SHEET:", $sheet->{Name}, "\n";

	$maxsheet=$book->{SheetCount};
	$maxsheet=1;

	$s=0; $smin=0;$smax=0; $slim=1;
	$r=0; $rmin=0;$rmax=0; $rlim=0;
	$c=0; $cmin=0;$cmax=0; $clim=0;

	$slim=$book->{SheetCount};
	$smax=$book->{SheetCount};

	$sheet = $book->{Worksheet}[$s];
	print "$progid xls2csv_runjob $dttm MSG:  $csvfil", $sheet->{Name}, "\n";

	$text=sprintf( "sheets=(0,%s)\n",$book->{SheetCount} );
	print "$progid xls2csv_runjob $dttm SHEETS: $text\n";
	$text=sprintf( "rows=(%s,%s)\n",$sheet->{MinRow},$sheet->{MaxRow} );
	print "$progid xls2csv_runjob $dttm ROWS: $text\n";
	$text=sprintf( "cols=(%s,%s)\n",$sheet->{MinCol},$sheet->{MaxCol} );
	print "$progid xls2csv_runjob $dttm COLS: $text\n";


# build sheets array
	for($s=0 ; defined $book->{SheetCount} && $s <= $sheet->{SheetCount} ; $s++) {
		if( $s > $slim ) { last; }
		$rmin=$sheet->{MinRow}; $rmax=$sheet->{MaxRow};
		$cmin=$sheet->{MinCol}; $cmax=$sheet->{MaxCol};
		for($r = $sheet->{MinRow} ; defined $sheet->{MaxRow} && $r <= $sheet->{MaxRow} ; $r++) {
			if( $r>$rlim ) { $rlim=$r; }
			for(my $c = $sheet->{MinCol} ; defined $sheet->{MaxCol} && $c <= $sheet->{MaxCol} ; $c++) {
				if( $c>$clim ) { $clim=$c; }
				$cell = $sheet->{Cells}[$r][$c];
				$text="";
				if(($cell) && ( length($cell->Value) > 0 )) {
#					$celltext=sprintf( "(%2d,%2d)_%s",$r,$c,$cell->Value );
					$celltext=sprintf( "%s",$cell->Value );
					if( $celltext =~ /period/ ) {
						printf( "$progid xls2csv $dttm FOUND: ($r,$c)=[$celltext]\n" );
						$period_text=$celltext;
						$period_text =~ s/-/_/g;
						@period_flds=split( /_/, $period_text );
						$period_p=$period_flds[1];
						$period_pp=$period_flds[2];

						$period_begdt=sprintf( "%4d-%02d-%02d",
							substr($period_flds[3],0,4),
							substr($period_flds[3],4,2),
							substr($period_flds[3],6,4)
							);

						$period_enddt=sprintf( "%4d-%02d-%02d",
							substr($period_flds[4],0,4),
							substr($period_flds[4],4,2),
							substr($period_flds[4],6,4)
							);

						$period_fy=substr($period_enddt,0,4);
						printf( "%s,%02d,%s,%s,%s",
							$period_fy,
							$period_p,
							$period_pp,
							$period_begdt,
							$period_enddt );
#						return;
						}
					$sheets[$s][$r][$c]=$celltext;
#					if( '$cell->Value' eq "0.0" ) { next; }
#					if( "$cell->Value" eq "0.0" ) { next; }
#					if( $cell->Value eq "0.0" ) { next; }
					$text=sprintf( "(%d,%02d,%02d)[%s]",$s,$r,$c,$cell->Value);
					$text=sprintf( "%s",$cell->Value);
#					printf( "$text," );
					}
				}
			}
		}



# parse sheets array
	printf( "$progid test3 $dttm MSG:  slim=[$slim] rlim=[$rlim] clim=[$clim]\n" );
	for( $s=0;$s<$slim;$s++ ) {
		for( $r=0;$r<$rlim;$r++ ) {
			for( $c=0;$c<$clim;$c++ ) {
				printf( "$sheets[$s][$r][$c]|" );
				}
			printf( "\n" );
			}
		}
	printf( "BUGS_190 ================================================\n" );
#	cells_day
	$s=0;
	$r=7; $rbeg=7;$rend=7; $rdif=1; 
	$cbeg=1; $cend=25; $cdif=4; 
	for($c=$cbeg; $c<=$cend; $c=$c+$cdif ) { 
		$r=7;
		$cell_day=$sheets[$s][$r][$c];
		printf( "CELL_DAY:  ($r,$c)=$cell_day\n" );

#	cells_dt
		$r=8;
		$cell_dt=$sheets[$s][$r][$c];
		@cell_dt_flds=split(/\//,$cell_dt );
		$cell_dt=sprintf( "%4d-%02d-%02d",
			$cell_dt_flds[2],
			$cell_dt_flds[1],
			$cell_dt_flds[0]
			);
		printf( "CELL_DT:  ($r,$c) $cell_dt\n" );

#	cells_tmrec
		$rbeg=10;$rend=20; $rdif=1; 
		for($r=$rbeg; $r<=$rend; $r=$r+$rdif ) { 
			$cell_h1=$sheets[$s][$r][$c];
			$cell_h2=$sheets[$s][$r][$c+1];
			$cell_tm=$sheets[$s][$r][$c+2];
			$cell_code=$sheets[$s][$r][$c+3];
			$tmrec=sprintf( "%s,%s,%s,%s,%s,,%s,%s,%s,%s,%s,%s,", 
				$period_fy,$period_p,$period_pp,
				$period_begdt, $period_enddt,
				$cell_dt,$cell_day,
				$cell_h1,$cell_h2,$cell_tm,$cell_code );


			if( $tmrec eq ",,,,,," ) { next; }
			if( $tmrec =~ m/0.0/ ) { next; }
			printf( "DATAREC:  [$r,$c][$tmrec]\n" );
			}
		}

#	cells_day
#	$rbeg=10;$rend=20; $cbeg=1; $cend=25; $cdif=4; 
#	for($c=$cbeg; $c<=$cend; $c=$c+$cdif ) { $cell_day=$sheet[$s][$r][$c]}

	for($r=1; $r<=5; $r++ ) {
		for($c=1; $c<=5; $c++ ) {
			if( $sheet[$s][$r][$c] eq "" ) { next; }
			if( $sheet[$s][$r][$c] =~ /0.0/ ) { next; }
			if( $sheet[$s][$r][$c] =~ m/\,\,\,0\.0\,\,/ ) { next; }
			
			printf( "($r,$c) [$sheet[$s][$r][$c]]\n" );
			}
		}


## |( 7, 1)_Sat||||( 7, 5)_Sun||||( 7, 9)_Mon||||( 7,13)_Tue||||( 7,17)_Wed||||( 7,21)_Thu||||( 7,25)_Fri|||
## |( 8, 1)_12/27/2008||||( 8, 5)_12/28/2008||||( 8, 9)_12/29/2008||||( 8,13)_12/30/2008||||(8,17)_12/31/2008||||( 8,21)_1/1/2009||||( 8,25)_1/2/2009|||
## |( 9, 1)_in|( 9, 2)_out|||( 9, 5)_in|( 9, 6)_out|||( 9, 9)_in|( 9,10)_out|||( 9,13)_in|( 9,14)_out|||( 9,17)_in|( 9,18)_out|||( 9,21)_in|( 9,22)_out|||( 9,25)_in|( 9,26)_out||
## ||||||||||||||||||||||||||||



# return;




	for(my $s=0; $s < $maxsheet ; $s++) {
		$sheet = $book->{Worksheet}[$s];
		$minrow=$sheet->{MinRow};
		$maxrow=$sheet->{MaxRow};
		$mincol=$sheet->{MinCol};
		$maxcol=$sheet->{MaxCol};

		print "$progid xls2csv $dttm ROW: row=($minrow,$maxrow)\n";
		print "$progid xls2csv $dttm COL: col=($mincol,$maxcol)\n";

		for($r=$minrow; $r<=$maxrow; $r++) {
			printf( "BUGS ROW r=$r $minrow,$maxrow\n" );

			for($c=$mincol; $c<=$maxcol; $c++) {
				printf( "BUGS COL r=$r c=$c $mincol,$maxcol\n" );

				$cell = $sheet->{Cells}[$r][$c];
				$status=$celltext=$cell->Value;
				printf( "BUGS status=[$status] [$cell->Value]\n" );
		$text=sprintf( "(%d,%02d,%02d)[%s]", $s,$r,$c,$celltext);
#				if(($cell) && ( length($celltext) > 0 )) {
#					if( "$cell->Value" eq "0.0" ) { $text=""; }
#					if( "$cell->Value" eq "0.0" ) { $text=""; }
#					if( "$cell->Value" eq "0.0" ) { $text=""; }
#					}
				printf( "$celltext" );
				}
			printf( "ENDROW\n" );
			}
		}
	}

sub ShowObjs {
	my $obj = shift;
	foreach (sort keys %$obj) {
	print "Keys: $_ - $obj->{$_}\n"; }
	}


# word beg pqpqpqpq pqpqpqpq pqpqpqpq pqpqpqpq pqpqpqpq pqpqpqpq
#  perl ole word
sub db2doc( $option1, $option2, $option3 ) {
	$docfil=shift; $option2=shift; $option3=shift;
#	printf( "$progid db2doc $dttm MSG:  o1=[$option1] o2=[$option2] o3=[$option3]\n");

# use warnings;
# use strict;

# use Win32::OLE;
# use Win32::OLE::Const 'Microsoft.Word';    # wd  constants
# use Win32::OLE::Const 'Microsoft Office';  # mso constants

	$jpgfil="j:/ko/bin/ko.jpg";
	@doc_suffix_list = "\.doc";	
	($basename, $dirpath, $suffix) = fileparse( $docfil, @doc_suffix_list);

#	$docfil=$pathfile_docfil;
	if( "$dirpath" eq "\.\\" ) { 
		$docfil=sprintf("%s/%s", $cwd, $docfil ); }
	printf( "$progid docfil $dttm MSG:  docfil=[$docfil]\n" );
	printf( "$progid db2doc $dttm MSG:  basename=[$basename]\n" );
	printf( "$progid db2doc $dttm MSG:  dirpath=[$dirpath] suffix=[$suffix]\n" );
	printf( "$progid db2doc $dttm MSG:  docfil=[$docfil]\n" );

	$docbak = $docfil; $docbak =~ s/\.doc/_$dttm.doc/;
	$doctmp = $docfil; $doctmp =~ s/\.doc/_tmp.doc/;
	$doccsv = $docfil; $doccsv =~ s/\.doc/.csv/;
	$docpdf = $docfil; $docpdf =~ s/\.doc/.pdf/;

	if( -f $docfil ) { 
		printf( "$progid docfil $dttm ERR:  FOUND copy($docfil,$docbak)\n" );
		copy( $docfil, $docbak );
##		return;
		}

	$pngfil=$jpgfil; $pngfil =~ s/\.jpg/\.png/;
	$giffil=$jpgfil; $giffil =~ s/\.jpg/\.gif/;
	printf( "$progid db2doc $dttm MSG:  jpgfil=[$jpgfil] l=$left t=$top w=$width h=$height\n" );
	printf( "$progid db2doc $dttm MSG:  pngfil=[$giffil] mspFalse,msoTrue\n" );



	my $cur_style    = 'a';
	my $cur_bookmark = 'a';

	my $word = CreateObject Win32::OLE 'Word.Application' or die $!;
	$word->{'Visible'} = 1;

	my $document = $word->Documents->Add
	|| printf( "$progid db2doc $dttm ERR:  word=[$word] document=[$document]\n" );
	printf( "$progid db2doc $dttm MSG:  word=[$word] document=[$document]\n" );

	my $selection = $word->Selection;

	if( ! -f $pngfil ) {
		printf( "$progid db2doc $dttm ERR:  NOTFOUND pngfil[$pngfil]\n" );
		}
	$left=-75; $top=-400; $width=50; $height=25;
	$document->Shapes->AddPicture (
		$pngfil, 
		False, # link to file
		True,  # save with document
		$left, $top, $width, $height, 
		$document->ActiveWindow->Selection->{Range}
		);

	$selection -> TypeText("beg png\n");

	$selection -> TypeParagraph;

	$selection -> TypeText("end png\n");
	$selection -> TypeParagraph;



	$selection -> TypeText("ko_hrs.pl db2doc $dttm");
	$selection -> TypeParagraph;
	$selection -> TypeText("beg png\n");
	$selection -> TypeParagraph;

	$selection -> TypeText("Heading 1");
	$selection -> {'Style'} = "Heading 1";
	$selection -> TypeParagraph;
	my $heading_1 = $document->Styles("Heading 1");
	my $heading_1_font = $heading_1 -> Font;
	$heading_1_font -> {Name} = "Arial";
	$heading_1_font -> {Size} = 11;
	$heading_1_font -> {Bold} =  1;

	$selection -> TypeText("Heading 2");
	$selection -> {'Style'} = "Heading 2";
	$selection -> TypeParagraph;
	my $heading_2 = $document->Styles("Heading 2");
	my $heading_2_font = $heading_2 -> Font;
	$heading_2_font -> {Name} = "Arial";
	$heading_2_font -> {Size} = 8;
	$heading_2_font -> {Bold} = 0;

	$selection -> TypeText("Heading 1 test1\m");
	$selection -> {'Style'} = "Heading 1";
	$selection -> TypeParagraph;
	$selection -> TypeText("Heading 2 test2\n");
	$selection -> {'Style'} = "Heading 2";
	$selection -> TypeParagraph;
	$selection -> TypeText("Heading 1 test3\n");
	$selection -> {'Style'} = "Heading 1";
	$selection -> TypeParagraph;

#	my $picture = insert_picture($document, '$jpgfil', 100, 100, 100, 30);

# bugs #  my $picture = 
	if( ! -f $pngfil ) {
		printf( "$progid db2doc $dttm ERR:  NOTFOUND pngfil[$pngfil]\n" );
		}
	$left=10; $top=10; $width=25; $height=12;
	$document->Shapes->AddPicture (
		$pngfil, 
		False, # link to file
		True,  # save with document
		$left, $top, $width, $height, 
		$document->ActiveWindow->Selection->{Range}
		);

	$left=400; $top=400; $width=50; $height=25;
	$document->Shapes->AddPicture (
		$pngfil, 
		False, # link to file
		True,  # save with document
		$left, $top, $width, $height, 
		$document->ActiveWindow->Selection->{Range}
		);
#	my $image_2 = $document->InlineShapes->AddPicture('$giffil', False, True);


	$selection -> {'Style'} = "Heading 1";
	$selection -> TypeParagraph;
	my $style_body1 = $document->Styles("Heading 1");
	my $style_body1_font = $style_body1 -> Font;
#	$style_body1_font -> {Name} = "Arial";
	$style_body1_font -> {Name} = "Courier New";
	$style_body1_font -> {Size} = 8;
	$style_body1_font -> {Bold} =  0;
	for($line=1; $line<10; $line++ ) {
		$selection -> TypeText("--- $line $dttm style_body1 ---\n");
		}

# Change Page Margins
#	with (my $test = $File->PageSetup,
#	    TopMargin      => 40,
#	    BottomMargin => 40,
#	    LeftMargin      => 40,
#	    RightMargin    => 40);

# Print File
$File->PrintOut();
# or 
#	$Word->ActiveDocument->PrintOut({
#	  Background => 0,
#	  Range          => wdPrintAllDocument,
#	  Item             => wdPrintDocumentContent,
#	  PageType    => wdPrintAllPages})
#	sleep 5;   # sleep to let Word print before closing



#	printf( "showobjs word=[$word]\n" );
#	ShowObjs( $word );
#	printf( "showobjs document=[$document]\n" );
#	ShowObjs( $document );


# sub save_doc_as {my $document = shift; my $filename = shift; $document->SaveAs($filename);}
# sub close_doc {my $document = shift; $document -> Close;}

	printf( "$progid db2doc $dttm BEG:  document->SaveAs\ndocfil=[$docfil]\nword=[$word]\ndocument=[$document]\n" );
	$document->SaveAs( $docfil )
	|| printf( "$progid db2doc $dttm ERR:  SaveAs\n docfil=[$docfil]\n word=[$word] document=[$document]\n" );
	printf( "$progid db2doc $dttm MSG:  SaveAs\n docfil=[$docfil]\n word=[$word] document=[$document]\n" );

	$document->Close
	|| printf( "$progid db2doc $dttm ERR:  Close\n word=[$word] document=[$document]\n" );
	printf( "$progid db2doc $dttm MSG:  Close\n word=[$word] document=[$document]\n" );

#	my $document = $word->Documents->Close
#	|| printf( "$progid db2doc $dttm ERR: word->Documents->Close word=[$word] document=[$document]\n" );
#	printf( "$progid db2doc $dttm MSG: word->Documents->Close word=[$word] document=[$document]\n" );

# uncomment the following two if word should shut down
	$word->Quit
	|| printf( "$progid db2doc $dttm ERR:  word->Quit\n word=[$word] document=[$document]\n" );
	printf( "$progid db2doc $dttm MSG:  word->Quit\n word=[$word] document=[$document]\n" );


	undef $word ||
	printf( "$progid db2doc $dttm ERR:  UNDEF_BOOK:  \ndocfil=[$docfil]\ndocument=[$document]\nword=[$word]\n");
	printf( "$progid db2doc $dttm MSG:  UNDEF_BOOK:  \ndocfil=[$docfil]\ndocument=[$document]\nword=[$word]\n" );

	return;


# selection is the insertion point.
	my $selection = $word->Selection;

	my $st_bold_10_arial   = create_style($document, "Arial", 10, 1, 0);
	my $st_italic_10_arial = create_style($document, "Arial", 10, 0, 1);
	my $st_italic_20_arial = create_style($document, "Times new Roman", 20, 0, 1);

	set_style($document, $st_bold_10_arial);
	text     ($document, "This text is bold, 10 points and arial");
	enter    ($document);
	set_style($document, $st_italic_10_arial);
	text     ($document, "This text is italic, 10 points and arial");
	enter    ($document);
	set_style($document, $st_italic_20_arial);
	text     ($document, "This text is italic, 20 points and Times");

# insert something into the header
	switch_view($document, wdSeekCurrentPageHeader);
	my $st_header = create_style($document, "Verdana", 8, 0, 0);
	set_style($document, $st_header);
	text     ($document, "this is the document's header, it will be repeated on all pages");

# insert something into the footer
	switch_view($document, wdSeekCurrentPageFooter);
	my $st_footer = create_style($document, "Verdana", 8, 0, 0);
	set_style($document, $st_footer);
	text     ($document, "this is the document's footer, it will be repeated on all pages");

# Inserting current page, total page
	text     ($document, " Page ");
	$selection->Fields->Add ($selection->{Range}, wdFieldPage    );
	text     ($document, " of ");
	$selection->Fields->Add ($selection->{Range}, wdFieldNumPages);

# go back to body of document
	switch_view($document, wdSeekMainDocument);
	
#	my $picture = insert_picture($document, 'c:\some\path\to\the\file.eps', 100, 100, 100, 30);
	my $picture = insert_picture($document, '$jpgfil', 100, 100, 100, 30);
	
	my $st_12_arial = create_style($document, "Arial", 12, 0, 0);
	


#############################   Demonstrating Bookmarks #####
enter    ($document);                                       #
set_style($document, $st_12_arial);                         #
text     ($document, "Not bold");                           #
bold     ($document, 1);                                    #
text     ($document, " but this IS bold ");                 #
bold     ($document, 0);                                    #
text     ($document, "this is not bold anymore");           #
enter    ($document);                                       #
                                                            #
my $first_bookmark = insert_bookmark($document);            #
text     ($document, "here's a bookmark");                  #
enter    ($document);                                       #
text     ($document, "Writing some lines");                 #
enter    ($document);                                       #
text     ($document, "Before going to the bookmark");       #
enter    ($document);                                       #
                                                            #
my $second_bookmark = insert_bookmark($document);           #
goto_bookmark($document, $first_bookmark);                  #
text     ($document, "Went back to first bookmark");        #
goto_bookmark($document, $second_bookmark);                 #
text     ($document, "Went back to second bookmark");       #
#############################################################


############### indenting ##############

	my $st_indent = create_style($document, "Arial", 10, 0, 0);
	style_indents($document, $st_indent, 100, 200);
	enter        ($document);
	set_style    ($document, $st_indent);
	text         ($document, join " ", 1 .. 100); 
	enter        ($document);
	text         ($document, join " ", 'a' .. 'cz'); 

	items        ($document, "Fruits", $st_indent, qw(Apple Pear Peach Cherry Nectarine Orange)); 
	items        ($document, "Shapes", $st_indent, qw(Triangle Rhombus Trapezoid Pentagon Circle)); 

## inserting a box
	my $st_box  = create_style($document, "Arial", 8, 0, 1);
	style_indents($document, $st_box, 0, 0);
	my $box = insert_box($document, 350, 550, 140, 40);
	set_style($document, $st_box);
	text         ($document, "hello out of the box");

#	save_doc_as($document, 'c:\generated.doc');
#	save_doc_as($document, '$docfil');

## uncomment the following two if word should shut down
#	close_doc($document);
#	$word->Quit;
	}

sub text {
	my $document = shift; my $text      = shift;
	$document->ActiveWindow->Selection -> TypeText($text);
	}

# aka new line, newline or NL
sub enter {
	my $document = shift;
	$document->ActiveWindow->Selection -> TypeParagraph;
	}

sub set_style {
	my $document = shift;
	my $style_arg = shift;
# bugs #	$document->ActiveWindow->Selection -> {Style} = $style_arg -> {name};
	}

sub create_style {
	my $document  = shift;
	my $fontname  = shift;
	my $font_size = shift;
	my $bold      = shift;
	my $italic    = shift;

# bugs #	my $style = $document->Styles->Add($cur_style);

	my $style_font = $style->{Font};

	$style_font -> {Name  } = $fontname;
	$style_font -> {Size  } = $font_size;
	$style_font -> {Bold  } = $bold;
	$style_font -> {Italic} = $italic;

	my %style;

	$style{name} = $cur_style++;
	return \%style;
	}

# use switch_view to change to header, footer, main document and so on...
# possible constants for view are: wdSeekCurrentPageFooter 
#
#   o  wdSeekCurrentPageHeader 
#   o  wdSeekEndnotes 
#   o  wdSeekEvenPagesFooter 
#   o  wdSeekEvenPagesHeader 
#   o  wdSeekFirstPageFooter 
#   o  wdSeekFirstPageHeader 
#   o  wdSeekFootnotes 
#   o  wdSeekMainDocument 
#   o  wdSeekPrimaryFooter 
#   o  wdSeekPrimaryHeader 
#
sub switch_view {
  my $document = shift;
  my $view     = shift;
  $document -> ActiveWindow -> ActivePane -> View -> {SeekView} = $view;
}

sub insert_picture {
  my $document = shift;
  my $file     = shift;
  my $left     = shift;
  my $top      = shift;
  my $width    = shift;
  my $height   = shift;

# bugs #  my $picture = 
# bugs #    $document-> Shapes -> AddPicture (
# bugs #      $file, 
# bugs #      msoFalse, # link to file
# bugs #      msoTrue,  # save with document
# bugs #      $left, $top, $width, $height, 
# bugs #      $document->ActiveWindow->Selection->{Range}
# bugs #    );

# bugs #  return $picture;
}

sub bold {
  my $document = shift;
  my $bold     = shift;

  $document->ActiveWindow->Selection->{Font}->{Bold} = $bold ? msoTrue : msoFalse;
}

sub goto_bookmark {
  my $document = shift;
  my $bookmark = shift;

  $document->ActiveWindow->Selection -> GoTo(wdGoToBookmark, 0, 0, $bookmark->{Name});
}

sub insert_bookmark {
  my $document = shift;

  my $bookmark = $document -> Bookmarks -> Add ($cur_bookmark++, $document->ActiveWindow->Selection->Range);
  return $bookmark;
}                      

sub style_indents {
  my $document          = shift;
  my $style_arg         = shift;
  my $first_line_indent = shift;
  my $other_line_indent = shift;

  my $style = $document->Styles($style_arg->{name});

  $style->ParagraphFormat->{LeftIndent     } =  $other_line_indent;
  $style->ParagraphFormat->{FirstLineIndent} = -$other_line_indent + $first_line_indent;
}

sub items {
  my $document = shift;
  my $title    = shift;
  my $style    = shift;
  my @array    = @_;

  enter($document);
  set_style($document, $style);

  bold($document, 1);
  text($document, $title);
  bold($document, 0);
  text($document, "\x09");

  foreach my $a (@array) {
    text($document, $a);
    text($document, "\x0b");
  }
}

sub insert_box {
  my $document = shift;
  my $left     = shift;
  my $top      = shift;
  my $width    = shift;
  my $height   = shift;

  my $shape = $document->Shapes->AddTextbox(msoTextOrientationHorizontal, $left, $top, $width, $height);
  $shape -> Select;
  my $selection = $word->Selection;
  $selection -> ShapeRange -> Line -> {DashStyle} = msoLineRoundDot;

  return $shape
}

sub close_doc {
  my $document = shift;
  $document -> Close;
}

sub save_doc_as {
  my $document = shift;
  my $filename = shift;

  $document->SaveAs($filename);
}

sub style_keep_with_next {
  my $document     = shift;
  my $style_arg    = shift;

  my $style = $document->Styles($style_arg->{name});

  $style->{ParagraphFormat}->{KeepWithNext} = msoTrue;
}

sub style_keep_together {
  my $document     = shift;
  my $style_arg    = shift;

  my $style = $document->Styles($style_arg->{name});

  $style->{ParagraphFormat}->{KeepTogether} = msoTrue;
}

sub style_border {
  my $document     = shift;
  my $style_arg    = shift;
  my $border       = shift; 
  my $border_style = shift;
  my $border_width = shift;
  my $border_color = shift;

  my $style = $document->Styles($style_arg->{name});

  $style->Borders($border) -> {LineStyle} = $border_style;
  $style->Borders($border) -> {LineWidth} = $border_width;
  $style->Borders($border) -> {Color    } = $border_color;
}

sub style_tab_at_position {
  my $document     = shift;
  my $style_arg    = shift;
  my $position     = shift;
  my $left_or_right= shift;

  my $style = $document->Styles($style_arg->{name});

  $style->ParagraphFormat->{TabStops}->Add($word->InchesToPoints($position), $left_or_right);
}

sub style_space_before {
  my $document     = shift;
  my $style_arg    = shift;
  my $space        = shift; 

  my $style = $document->Styles($style_arg->{name});

  $style->ParagraphFormat->{SpaceBefore} = $space;
}

sub style_space_after {
  my $document     = shift;
  my $style_arg    = shift;
  my $space        = shift; 

  my $style = $document->Styles($style_arg->{name});

  $style->ParagraphFormat->{SpaceAfter} = $space;
}

sub style_alignment {
  my $document     = shift;
  my $style_arg    = shift;
  my $alignment    = shift;

  my $style = $document->Styles($style_arg->{name});

  $style->ParagraphFormat->{Alignment} = $alignment;
}

sub goto_end_of_document {
  my $document  = shift;

  $document->ActiveWindow->Selection->{Range} -> EndKey(wdStory);

  #my $selection = $word->Selection;

  #$selection -> EndKey (wdStory);
}

sub insert_page_break {
	my $document  = shift;
	#my $selection = $word->Selection;
	#$selection -> InsertBreak(wdPageBreak);
	$document->ActiveWindow->Selection->{Range} -> InsertBreak(wdPageBreak);
}

sub landscape {
	my $document = shift;
	$document->PageSetup->{Orientation} = wdOrientLandscape;
	}
# word end bdbdbdbd bdbdbdbd bdbdbdbd bdbdbdbd bdbdbdbd bdbdbdbd bdbdbdbd bdbdbdbd






sub sendmail1() {
        open(MAIL, '| /usr/lib/sendmail user@there.com') or die;
        print MAIL <<'EOF';
        To: user@there.com
        From: user@here.com
        Hello, World!
EOF
	}

sub sendmail2() {
use Net::SMTP;

        $smtp = Net::SMTP->new('mail.example.com'); # connect to an SMTP server
        $smtp->mail('user@here.com');       # use the sender's address here
        $smtp->to('user@there.com');        # recipient's address
        $smtp->data();                      # Start the mail

        # Send the header.
        $smtp->datasend("To: user\@there.com\n");
        $smtp->datasend("From: user\@here.com\n");
        $smtp->datasend("Subject: sendmail2 email\n");
        $smtp->datasend("\n");

        # Send the body.
        $smtp->datasend("Hello, World!\n");
        $smtp->dataend();                   # Finish sending the mail
        $smtp->quit;                        # Close the SMTP connection

#Another alternative is Mail::Sender, which can be used like so:
#
#        use Mail::Sender;
#     
#        $sender = Mail::Sender->new({smtp => 'mail.yourdomain.com', from => 'your@address.com'});
#        $sender->MailFile({
#            to => 'some@address.com', subject => 'Here is the file', 
#            msg => "I'm sending you the list you wanted.", 
#            file => 'filename.txt',
#        });
#
#	Or Mail::Sendmail, which can be used like this:
#       use Mail::Sendmail;
#
#       %mail = ( To      => 'you@there.com',
#                  From    => 'me@here.com',
#                  Message => "This is a minimalistic message"
#                 );
#
#        if (sendmail %mail) { print "Mail sent OK.\n" }
#        else { print "Error sending mail: $Mail::Sendmail::error\n"; }
	}


sub mth_loop() {
	$j=0; $jj=sprintf( "%02d", $j );
#	foreach my $mth (@$mth_names_array) {
	foreach my $mth (@mth_names_array) {
		$mthcaps=$mth;
		$mthcaps =~ tr/a-z/A-Z/;
		printf( "$progid mth_names $dttm MSG: [$j][$jj]  mth=[%s][%s]\n", $mth,$mthcaps );
		printf( "$progid mth_names $dttm MSG: [$j][$jj]  mth_names_array=[%s]\n", $mth_names_array[$j] );
		printf( "$progid mth_names $dttm MSG: [$j][$jj]  mth_names=[%s]\n", $mth_names{$mthcaps} );
		$j++; $jj=sprintf( "%02d", $j );
		}
	printf( "$progid mth_names $dttm BUGS: $j  mth=[%s]\n", $mth );
	}


# The maximum number of columns in an Excel worksheet is ...
sub n2l {
        my $max_colnum = 256;
        my ($n) = @_; my $l;

        if ($n >= 1 && $n <= 26) {
                $l = n2ll($n - 1);
                }
        elsif ($n > 26 && $n <= $max_colnum) {
                my $chr1 = n2ll( int(($n - 1)/26-1) );
                my $chr2 = n2ll( ($n-1)%26);
                $l = $chr1 . $chr2;
                }
        else {
                die "$progid $dttm ERR_5530:  n=[$n] gt (1-$max_colnum)";
                }
        return $l;
        }

sub n2ll {
        my ($n) = @_;
        if ($n > 26) { die "n=$n out of range"; }
        my $l= chr ($n+ord("A"));
        return $l;
        }


sub kosystem {
# my( $cmd ) = @_;
# my( $status ) = "";
 	print "gd MSG:  kosystem=[$cmd]\n";
 	$status = system( $cmd );
	if ( $status != 0 ) { print "MSG:  status=[$status]\n"; }
 	return( $status );
 	}

sub misc {
#	$mode = 0666;
#	mkdir($dir_name, $mode );
#	rmdir($dir_name);
#	chdir($dir_name);
#       $dir = $ENV{CDW};

#	YYYY-MM-DD
#	m/ (\d{4})-(\d\d)-(\d\d) /
#	$1=YYYY $2=MM $3=DD

	print "enter usrcmd q=quit:  ";
	$usrcmd = <STDIN>;
	}

sub dttm {
	my( $dttm ) = "yyyymmdd_hhmmss";
	$t=time(); $now=localtime($t);
	($sec, $min, $hour, $dom, $mon, $year, $wday, $yday, $isdst) = localtime($t);
	$year += 1900; $mon++; $hour++; $dd = $dom - 21;
	@month_names = (
		"January", "February", "March", "April", "May", "June", 
		"July", "August", "September", "October", "November", "December" 
		);

	@month_nam = (
		"Jan", "Feb", "Mar", "Apr", "May", "Jun", 
		"Jul", "Aug", "Sep", "Oct", "Nov", "Dec" 
		);
	@day_nam = ( "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" );

	$dttm = sprintf( "%d%2.2d%2.2d_%2.2d%2.2d%2.2d", 
		$year, $mon, $dom, $hour, $min, $sec );
	$cur_yyyymm = sprintf( "%4d%02d", $year, $mon );
	$yymmdd = substr( $dttm, 2, 6 );
	return( $dttm );
	}
//


koh5_pano



Your browser does not support the HTML5 canvas element.


Drag mouse to navigate.

Navigation





17.Aug.2010, Martin Wengenmayer