#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の現在の最大行数
char COMMANDNAME[256];	//実行するCGI自身の名前
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_kokyaku(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];
		int	johoID;
		char	kokyakuCD[5 + 1];	//TEXT
		int		outaikubunID;		//NUMERIC
		char	shimei[128 + 1];	//TEXT
		char	furigana[156 + 1];	//TEXT
		char	shokugyou[12 + 1];	//TEXT
		char	kaisyamei[64 + 1];	//TEXT
		char	yakushoku[12 + 1];	//TEXT
		char	yubin[7 + 1];	//TEXT
		char	todoufuken[24 + 1];	//TEXT
		char	jusho1[64 + 1];	//TEXT
		char	jusho2[64 + 1];	//TEXT
		char	mail[50 + 1];	//TEXT
		char	kaisyaTEL[13 + 1];	//TEXT
		char	naisenTEL[13 + 1];	//TEXT
		char	FAX[13 + 1];	//TEXT
		char	keitaiTEL[13 + 1];	//TEXT
		char	jitakuTEL[13 + 1];	//TEXT
		unsigned char		insatu;		//BOOL
		unsigned char		henjinashi;		//BOOL
		unsigned char		fumei;		//BOOL
		unsigned char		mocyu;		//BOOL
		char	bikou[1024 + 1];	//TEXT
		char	YahooID[32 + 1];	//TEXT
	EXEC SQL END DECLARE SECTION;

	sqlcode = 0;
	DBcount[no] = 0;

	rec_count = 0;

	// DBの行数を取得
	EXEC SQL 
	SELECT 
	COUNT(*)
	INTO :rec_count
	FROM	kokyaku
	WHERE (((kokyaku.furigana) Like 'ｻ%') OR ((kokyaku.furigana) Like 'ｼ%') OR ((kokyaku.furigana) Like 'ｽ%') OR ((kokyaku.furigana) Like 'ｾ%') OR ((kokyaku.furigana) Like 'ｿ%'));

	// 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 kokyaku_CURSOR CURSOR FOR 
	SELECT 
		johoID,
		coalesce(kokyakuCD,' ','0'),
		outaikubunID,
		coalesce(shimei,' ','0'),
		coalesce(furigana,' ','0'),
		coalesce(shokugyou,' ','0'),
		coalesce(kaisyamei,' ','0'),
		coalesce(yakushoku,' ','0'),
		coalesce(yubin,' ','0'),
		coalesce(todoufuken,' ','0'),
		coalesce(jusho1,' ','0'),
		coalesce(jusho2,' ','0'),
		coalesce(mail,' ','0'),
		coalesce(kaisyaTEL,' ','0'),
		coalesce(naisenTEL,' ','0'),
		coalesce(FAX,' ','0'),
		coalesce(keitaiTEL,' ','0'),
		coalesce(jitakuTEL,' ','0'),
		insatu,
		henjinashi,
		fumei,
		mocyu,
		coalesce(bikou,' ','0'),
		coalesce(YahooID,' ','0')
	FROM	kokyaku
	WHERE (((kokyaku.furigana) Like 'ｻ%') OR ((kokyaku.furigana) Like 'ｼ%') OR ((kokyaku.furigana) Like 'ｽ%') OR ((kokyaku.furigana) Like 'ｾ%') OR ((kokyaku.furigana) Like 'ｿ%'))
	ORDER BY furigana;

	// カーソルオープン
	EXEC SQL OPEN kokyaku_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; charset=utf-8\n\n");
	printf("<html lang=\"ja\">\n");
	printf("<head>\n");
	printf("<meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\">\n"); 
	printf("<link rel=\"stylesheet\" href=\"/kokyaku.css\" type=\"text/css\">\n");
	printf("<title>Wsubform-HTML-DBgrid</title>\n");
	printf("</head>\n");
	printf("<body bgcolor=\"#ffffff\">\n");
	printf("<table class=\"kokyaku\" border=1>\n");
	printf("<tr>\n");
	for(i=0;i<DBcount[no];i++)
	{
		EXEC SQL FETCH kokyaku_CURSOR INTO
			:johoID,
			:kokyakuCD,
			:outaikubunID,
			:shimei,
			:furigana,
			:shokugyou,
			:kaisyamei,
			:yakushoku,
			:yubin,
			:todoufuken,
			:jusho1,
			:jusho2,
			:mail,
			:kaisyaTEL,
			:naisenTEL,
			:FAX,
			:keitaiTEL,
			:jitakuTEL,
			:insatu,
			:henjinashi,
			:fumei,
			:mocyu,
			:bikou,
			:YahooID;

			//送信はGETを使用します。
		//	printf("<form method=\"get\" action=\"/cgi-bin/kokyaku_Menu.fcgi\">\n");	//メニュー用
			printf("<form method=\"get\" action=\"/cgi-bin/kokyaku_Fetch.fcgi\">\n");
			printf("<td class=\"kokyaku\">%d</td>", johoID);
		//	printf("<td class=\"kokyaku\">%s</td>", kokyakuCD);
			printf("<td><input type=\"submit\" name=\"field\" value=\"%s\"></td>", kokyakuCD);
			printf("<td class=\"kokyaku\">%d</td>", outaikubunID);
			printf("<td class=\"kokyaku\">%s</td>", shimei);
			printf("<td class=\"kokyaku\">%s</td>", furigana);
			printf("<td class=\"kokyaku\">%s</td>", shokugyou);
			printf("<td class=\"kokyaku\">%s</td>", kaisyamei);
			printf("<td class=\"kokyaku\">%s</td>", yakushoku);
			printf("<td class=\"kokyaku\">%s</td>", yubin);
			printf("<td class=\"kokyaku\">%s</td>", todoufuken);
			printf("<td class=\"kokyaku\">%s</td>", jusho1);
			printf("<td class=\"kokyaku\">%s</td>", jusho2);
			printf("<td class=\"kokyaku\">%s</td>", mail);
			printf("<td class=\"kokyaku\">%s</td>", kaisyaTEL);
			printf("<td class=\"kokyaku\">%s</td>", naisenTEL);
			printf("<td class=\"kokyaku\">%s</td>", FAX);
			printf("<td class=\"kokyaku\">%s</td>", keitaiTEL);
			printf("<td class=\"kokyaku\">%s</td>", jitakuTEL);
			if(insatu == 'f')
				printf("<td><input type=\"checkbox\" value=\"t\"></td>");
			else
				printf("<td><input type=\"checkbox\" value=\"t\" checked></td>");
			if(henjinashi == 'f')
				printf("<td><input type=\"checkbox\" value=\"t\"></td>");
			else
				printf("<td><input type=\"checkbox\" value=\"t\" checked></td>");
			if(fumei == 'f')
				printf("<td><input type=\"checkbox\" value=\"t\"></td>");
			else
				printf("<td><input type=\"checkbox\" value=\"t\" checked></td>");
			if(mocyu == 'f')
				printf("<td><input type=\"checkbox\" value=\"t\"></td>");
			else
				printf("<td><input type=\"checkbox\" value=\"t\" checked></td>");
		//	printf("<td class=\"kokyaku\">%s</td>", bikou);
		//	printf("<td class=\"kokyaku\">%s</td>", YahooID);
			printf("</tr>\n");

		if (memcmp (sqlca.sqlstate, "00000", 5) != 0)
		{
			EXEC SQL CLOSE kokyaku_CURSOR;
			sprintf(tmp,"%s->FETCH完了:%d - %s",COMMANDNAME,sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);
		//	logmsg(tmp);
		}
	}
	printf("</table>\n");
	printf("</body>\n");
	printf("</html>\n\n");
	// カーソルクローズ 
	EXEC SQL CLOSE kokyaku_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_kokyaku(0);	//*標準出力する。

}

int main(void)
{
	subformHTML();
}

