#include "wsubformHTML.h"	//サブフォーム専用ヘッダファイルをインクルードする。

extern char gridtitles[MAX_POS][MAX_LEN];	//wsubformHTMLが利用するgridのタイトル。

extern TextBox	 *begin;	//textboxで使用する連鎖ポインタの開始位置
extern TextBox	 *tp;	//textboxで使用する連鎖ポインタ

typedef struct stat Dir;	//ファイル操作用
static Dir dirptr;
static Dir  *fptr = &dirptr;

char tmp[MAX_STR];
static int sqlcode = 0;	//PostgreSQLの返すコード

int DBcount[MAX_FORM];	//wsubformHTMLで利用するDBの現在の最大行数
extern char KEY[256][MAX_STR];	//INSERTとUPDATEが使用する更新項目

int DBConnect(void)
{
	// DB接続用変数宣言です。DB名、ユーザ名、パスワードを設定してください。
	EXEC SQL BEGIN DECLARE SECTION;
		char dbname[12];
		char user[12];
		char passwd[12];
	EXEC SQL END DECLARE SECTION;

	strcpy(dbname,"apsch");
	strcpy(user,"cms");
	strcpy(passwd,"cms");

#ifdef DEBUG
	// ECPGデバッグ文出力
	ECPGdebug (0, stderr);
#endif

	// 接続
	memset (sqlca.sqlstate, '0', 5);
	EXEC SQL CONNECT TO :dbname AS dbConnection user :user USING :passwd;
	if (memcmp (sqlca.sqlstate, "00000", 5) != 0)
	{
		sprintf(tmp,"CONNECT エラー。終了します。:%d - %s",sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);
	//	logmsg(tmp);
		exit (EXIT_FAILURE);
	}
}

int Fetch_otodoke(int no)
{
	static char DBbuff[MAX_STR];
	int i = 0;

	DBConnect();

	memset (sqlca.sqlstate, '0', 5);

	EXEC SQL BEGIN DECLARE SECTION;
		int rec_count;
		char key[256][MAX_STR];
		char	No[3 + 1];	//TEXT
		char	yubinNo[7 + 1];	//TEXT
		char	todofuken[24 + 1];	//TEXT
		char	jusho1[96 + 1];	//TEXT
		char	jusho2[96 + 1];	//TEXT
		char	shimei1[96 + 1];	//TEXT
		char	shimei_f1[192 + 1];	//TEXT
		char	shimei2[96 + 1];	//TEXT
		char	shimei_f2[200 + 1];	//TEXT
		char	TEL[13 + 1];	//TEXT
		char	hinmei[90 + 1];	//TEXT
		char	yoryo[5 + 1];	//TEXT
		char	grade[144 + 1];	//TEXT
		char	size[10 + 1];	//TEXT
		int		kingaku;		//NUMERIC
		unsigned char		jikankibou;		//BOOL
		int		takuhai_s;		//NUMERIC
		unsigned char		tuchi;		//BOOL
		char	denNo[13 + 1];	//TEXT
		unsigned char		tokui;		//BOOL
		char	uketukeDATE[10 + 1];	//TEXT
		char	expDATE[10 + 1];	//TEXT
		char	hopeDATE[10 + 1];	//TEXT
		char	bikou[256 + 1];	//TEXT
		char	hassoCD[5 + 1];	//TEXT
		char	hatutenCD[7 + 1];	//TEXT
		unsigned char		hatuEND;		//BOOL
		unsigned char		prEND;		//BOOL
		int		denNUM;		//NUMERIC
		int		hakoNUM;		//NUMERIC
		char	memo[1024 + 1];	//TEXT
		unsigned char		reserve;		//BOOL
		char	resDATE[10 + 1];	//TEXT
		unsigned char		print;		//BOOL
		int		prNUM;		//NUMERIC
		char	daitaiCD[5 + 1];	//TEXT
		unsigned char		daitai;		//BOOL
		char	FAX[13 + 1];	//TEXT
		char	hm_kubun[2 + 1];	//TEXT
		int		hinsyu;		//NUMERIC
		char	keitaiTEL[13 + 1];	//TEXT
		int		hopeTIME;		//NUMERIC
		int		hopeTIME2;		//NUMERIC
		int		hopeTIME3;		//NUMERIC
		unsigned char		umu;		//BOOL
		int		soryo;		//NUMERIC
		int		hatu_kosuu;		//NUMERIC
		int		hakodai;		//NUMERIC
		char	chitai[60 + 1];	//TEXT
		char	mail[50 + 1];	//TEXT
		int		tesuu;		//NUMERIC
		int		tac;		//NUMERIC
		unsigned char		reitou;		//BOOL
		char	YahooID[32 + 1];	//TEXT
		char	shiwakeCD[13 + 1];	//TEXT
		unsigned char		kariseikyu;		//BOOL
		int		cc_kingaku;		//NUMERIC
		int		st_kingaku;		//NUMERIC
		int		base_soryo;		//NUMERIC
		unsigned char		seikyuEND;		//BOOL
		int		den_hakoNUM;		//NUMERIC
		int		soukin_tesuuryo;		//NUMERIC
	EXEC SQL END DECLARE SECTION;

	sqlcode = 0;
	DBcount[no] = 0;

	rec_count = 0;

	// DBの行数を取得
	EXEC SQL 
	SELECT 
	COUNT(*)
	INTO :rec_count
	FROM	otodoke;

	// SELECTエラー 
	if(memcmp (sqlca.sqlstate, "00000", 5) != 0)
	{
		sprintf(tmp,"SELECT COUNTエラー:%d - %s",sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);
	//	logmsg(tmp);
		return(-1) ;
	}

	DBcount[no] = rec_count;

	EXEC SQL DECLARE otodoke_CURSOR CURSOR FOR 
	SELECT 
		coalesce(No,' ','0'),
		coalesce(yubinNo,' ','0'),
		coalesce(todofuken,' ','0'),
		coalesce(jusho1,' ','0'),
		coalesce(jusho2,' ','0'),
		coalesce(shimei1,' ','0'),
		coalesce(shimei_f1,' ','0'),
		coalesce(shimei2,' ','0'),
		coalesce(shimei_f2,' ','0'),
		coalesce(TEL,' ','0'),
		coalesce(hinmei,' ','0'),
		coalesce(yoryo,' ','0'),
		coalesce(grade,' ','0'),
		coalesce(size,' ','0'),
		kingaku,
		jikankibou,
		takuhai_s,
		tuchi,
		coalesce(denNo,' ','0'),
		tokui,
		coalesce(uketukeDATE,' ','0'),
		coalesce(expDATE,' ','0'),
		coalesce(hopeDATE,' ','0'),
		coalesce(bikou,' ','0'),
		coalesce(hassoCD,' ','0'),
		coalesce(hatutenCD,' ','0'),
		hatuEND,
		prEND,
		denNUM,
		hakoNUM,
		coalesce(memo,' ','0'),
		reserve,
		coalesce(resDATE,' ','0'),
		print,
		prNUM,
		coalesce(daitaiCD,' ','0'),
		daitai,
		coalesce(FAX,' ','0'),
		coalesce(hm_kubun,' ','0'),
		hinsyu,
		coalesce(keitaiTEL,' ','0'),
		hopeTIME,
		hopeTIME2,
		hopeTIME3,
		umu,
		soryo,
		hatu_kosuu,
		hakodai,
		coalesce(chitai,' ','0'),
		coalesce(mail,' ','0'),
		tesuu,
		tac,
		reitou,
		coalesce(YahooID,' ','0'),
		coalesce(shiwakeCD,' ','0'),
		kariseikyu,
		cc_kingaku,
		st_kingaku,
		base_soryo,
		seikyuEND,
		den_hakoNUM,
		soukin_tesuuryo
	FROM	otodoke
	ORDER BY hassoCD;

	// カーソルオープン
	EXEC SQL OPEN otodoke_CURSOR;

	// CURSOR OPENエラー 
	if (memcmp (sqlca.sqlstate, "00000", 5) != 0)
	{
		sprintf(tmp,"CURSOR OPENエラー:%d - %s",sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);
		fprintf(stderr,"%s\n",tmp);
		return(-1);
	}

	printf("Content-type: text/html\n\n");
	printf("<html>\n");
	printf("<head>\n");
	printf("<meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\">\n"); 
	printf("<title>Wsubform-HTML-DBgrid</title>\n");
	printf("</head>\n");
	printf("<body>\n");
	printf("<table border=1>\n");
	printf("<tr bgcolor=#ffffff>\n");
	for(i=0;i<DBcount[no];i++)
	{
		EXEC SQL FETCH otodoke_CURSOR INTO
			:No,
			:yubinNo,
			:todofuken,
			:jusho1,
			:jusho2,
			:shimei1,
			:shimei_f1,
			:shimei2,
			:shimei_f2,
			:TEL,
			:hinmei,
			:yoryo,
			:grade,
			:size,
			:kingaku,
			:jikankibou,
			:takuhai_s,
			:tuchi,
			:denNo,
			:tokui,
			:uketukeDATE,
			:expDATE,
			:hopeDATE,
			:bikou,
			:hassoCD,
			:hatutenCD,
			:hatuEND,
			:prEND,
			:denNUM,
			:hakoNUM,
			:memo,
			:reserve,
			:resDATE,
			:print,
			:prNUM,
			:daitaiCD,
			:daitai,
			:FAX,
			:hm_kubun,
			:hinsyu,
			:keitaiTEL,
			:hopeTIME,
			:hopeTIME2,
			:hopeTIME3,
			:umu,
			:soryo,
			:hatu_kosuu,
			:hakodai,
			:chitai,
			:mail,
			:tesuu,
			:tac,
			:reitou,
			:YahooID,
			:shiwakeCD,
			:kariseikyu,
			:cc_kingaku,
			:st_kingaku,
			:base_soryo,
			:seikyuEND,
			:den_hakoNUM,
			:soukin_tesuuryo;

			//送信はGETを使用します。
		//	printf("<th><form method=\"get\" action=\"/cgi-bin/otodoke_Menu.cgi\">\n");	//メニュー用
			printf("<th><form method=\"get\" action=\"/cgi-bin/otodoke_Fetch2.cgi\">\n");
			printf("%s</th>", No);
			printf("<td>%s</td>", yubinNo);
			printf("<td>%s</td>", todofuken);
			printf("<td>%s</td>", jusho1);
			printf("<td>%s</td>", jusho2);
			printf("<td>%s</td>", shimei1);
//				printf("<td>%s</td>", shimei_f1);
//				printf("<td>%s</td>", shimei2);
//				printf("<td>%s</td>", shimei_f2);
//				printf("<td>%s</td>", TEL);
			printf("<td>%s</td>", hinmei);
			printf("<td>%s</td>", yoryo);
			printf("<td>%s</td>", grade);
			printf("<td>%s</td>", size);
			printf("<td>%d</td>", kingaku);
//				if(jikankibou == 'f')
//					printf("<td><input type=\"checkbox\" value=\"t\"></td>");
//				else
//					printf("<td><input type=\"checkbox\" value=\"t\" checked></td>");
			printf("<td>%d</td>", takuhai_s);
//				if(tuchi == 'f')
//					printf("<td><input type=\"checkbox\" value=\"t\"></td>");
//				else
//					printf("<td><input type=\"checkbox\" value=\"t\" checked></td>");
//				printf("<td>%s</td>", denNo);
//				if(tokui == 'f')
//					printf("<td><input type=\"checkbox\" value=\"t\"></td>");
//				else
//					printf("<td><input type=\"checkbox\" value=\"t\" checked></td>");
//				printf("<td>%s</td>", uketukeDATE);
			printf("<td>%s</td>", expDATE);
			printf("<td>%s</td>", hopeDATE);
//				printf("<td>%s</td>", bikou);
			printf("<td>%s</td>", hassoCD);
//				printf("<td>%s</td>", hatutenCD);
//				if(hatuEND == 'f')
//					printf("<td><input type=\"checkbox\" value=\"t\"></td>");
//				else
//					printf("<td><input type=\"checkbox\" value=\"t\" checked></td>");
//				if(prEND == 'f')
//					printf("<td><input type=\"checkbox\" value=\"t\"></td>");
//				else
//					printf("<td><input type=\"checkbox\" value=\"t\" checked></td>");
			printf("<td>%d</td>", denNUM);
			printf("<td>%d</td>", hakoNUM);
//				printf("<td>%s</td>", memo);
			if(reserve == 'f')
				printf("<td><input type=\"checkbox\" value=\"t\"></td>");
			else
				printf("<td><input type=\"checkbox\" value=\"t\" checked></td>");
			printf("<td>%s</td>", resDATE);
			if(print == 'f')
				printf("<td><input type=\"checkbox\" value=\"t\"></td>");
			else
				printf("<td><input type=\"checkbox\" value=\"t\" checked></td>");
			printf("<td>%d</td>", prNUM);
			printf("<td>%s</td>", daitaiCD);
			if(daitai == 'f')
				printf("<td><input type=\"checkbox\" value=\"t\"></td>");
			else
				printf("<td><input type=\"checkbox\" value=\"t\" checked></td>");
//				printf("<td>%s</td>", FAX);
			printf("<td>%s</td>", hm_kubun);
			printf("<td>%d</td>", hinsyu);
//				printf("<td>%s</td>", keitaiTEL);
//				printf("<td>%d</td>", hopeTIME);
			printf("<td>%d</td>", hopeTIME2);
//				printf("<td>%d</td>", hopeTIME3);
//				if(umu == 'f')
//					printf("<td><input type=\"checkbox\" value=\"t\"></td>");
//				else
//					printf("<td><input type=\"checkbox\" value=\"t\" checked></td>");
//				printf("<td>%d</td>", soryo);
//				printf("<td>%d</td>", hatu_kosuu);
//				printf("<td>%d</td>", hakodai);
//				printf("<td>%s</td>", chitai);
//				printf("<td>%s</td>", mail);
//				printf("<td>%d</td>", tesuu);
//				printf("<td>%d</td>", tac);
			if(reitou == 'f')
				printf("<td><input type=\"checkbox\" value=\"t\"></td>");
			else
				printf("<td><input type=\"checkbox\" value=\"t\" checked></td>");
//				printf("<td>%s</td>", YahooID);
//				printf("<td>%s</td>", shiwakeCD);
//				if(kariseikyu == 'f')
//					printf("<td><input type=\"checkbox\" value=\"t\"></td>");
//				else
//					printf("<td><input type=\"checkbox\" value=\"t\" checked></td>");
//				printf("<td>%d</td>", cc_kingaku);
//				printf("<td>%d</td>", st_kingaku);
//				printf("<td>%d</td>", base_soryo);
//				if(seikyuEND == 'f')
//					printf("<td><input type=\"checkbox\" value=\"t\"></td>");
//				else
//					printf("<td><input type=\"checkbox\" value=\"t\" checked></td>");
			printf("<td>%d</td>", den_hakoNUM);
//				printf("<td>%d</td>", soukin_tesuuryo);
			printf("<td><input type=\"submit\" name=\"field\" value=\"%s\"></td>", hassoCD);
			printf("</tr>\n");

		if (memcmp (sqlca.sqlstate, "00000", 5) != 0)
		{
			EXEC SQL CLOSE otodoke_CURSOR;
			sprintf(tmp,"FETCH完了:%d - %s",sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);
		//	logmsg(tmp);
		}
	}
	printf("</table>\n");
	printf("</body>\n");
	printf("</html>\n\n");
	// カーソルクローズ 
	EXEC SQL CLOSE otodoke_CURSOR;

	DBcount[no] = rec_count;

	// 結果チェック
	if (sqlca.sqlcode == 0)
	{
		sprintf(tmp,"FETCH結果チェック:%d - %s",sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);
	//	logmsg(tmp);
	}
	// 切断
	sqlca.sqlcode = 0;
	EXEC SQL DISCONNECT dbConnection;
	return(0);
}


int subformHTML(void)
{
	int i;
	char s[MAX_STR];

	int startline;

	int line;
	setlocale(LC_ALL,"");

//------------------------------------------------------------------------
//下ののハイフンのラインまでの以下の関数はDBと画面の設計を実際のフォームに適用します。
//これらの関数が無い場合は設計情報はDB設計以外は反映されません。

//------------------------------------------------------------------------

	for(i=0;i<MAX_POS;i++)
	{
		memset(gridtitles[i],'\0',MAX_LEN);
	}

	sf_startcell(0);

	startline = 0;	//画面初期行

	Fetch_otodoke(0);	//*標準出力する。

}

int main(void)
{
	subformHTML();
}

