#!/usr/bin/perl
# ************ データ入力 ************
sub di_input{
($datafile,$rcrdkey) = @_;
if($rcrdkey ne "confirm" && ($entrynmbr != $datanmbr * $f1_colnmbr || ($g_upfileno != 0 && $g_upfileno != $datanmbr * $dd_upcol))){
$errref1 = "プログラムエラー:".$prjcode." - ".$work." - ".$prgname." - "."di_input";
$errmsg = "レコード数 ".$datanmbr." x 項目数".$f1_colnmbr." != 入力データ総数 ".$entrynmbr."\n x 単位数 ".$dd_upcol." != アップロード総数 ".$g_upfileno."\n";
&io_errexit($errmsg,$errref1,$g_manager);
}
#print "DEBUG 10di30 - sub di_input 11 - $rcrdkey - $datafile
\n";
# &io_lockup($g_lockfile,"err");
if($rcrdkey eq "new"){
@f1_data = @entrylist;
if($f1_order eq "inc" || $f1_order eq "dec"){
$f1_data[0] = &st_strform($f1_keylen,"_","tail",$f1_data[0]);
}
if($operator eq "manager"){
$f1_data[6] = $date_min;
$f1_data[7] = $date_day;
}
else{
$f1_data[6] = $date_min."未確認";
$f1_data[7] = "0000-00-00";
}
$f1_data[8] = $date_day;
$f1_data[9] = "0000-00-00";
if($dd_upcol>0){&di0_upfilelist(0);}
&fl_rcrdinsert($datafile,"err");
}
elsif($rcrdkey eq "one"){
@f1_data = @entrylist;
$f1_data[8] = $date_day;
if($f1_data[2] eq "" && $operator eq "manager"){
$f1_keynmbr = 1;
$f1_keylist[0] = "0_strict_".$f1_data[0];
&di_delrcrd($dd_datafile,@f1_keylist);
$dspmsg = $f1_data[0].":レコード削除完了。\n";
&io_dspexit($dspmsg);
exit;
}
if($f1_data[2] =~ m/取消/){
$f1_data[9] = $date_day;
}
if($dd_upcol>0){&di0_upfilelist(0);}
&fl_rcrdrewrite($datafile,"err");
}
elsif($rcrdkey eq "confirm"){
$f1_keynmbr = 1;
$f1_keylist[0] = $keycode;
if($f1_keylist[0] == ""){$f1_keylist[0] = $entrylist[0];}
&fl_rcrdsearch($datafile);
@f1_data = split("_SP_",$f2_rcrdlist[0]);
if($operator eq "outside"){
$f1_data[6] =~ s/未確認//;
}
else{
$f1_data[7] = $date_day;
}
&fl_rcrdrewrite($datafile,"err");
}
elsif($rcrdkey eq "all"){
#print "DEBUG 10di30 - sub di_input 41 - $rcrdkey - $datafile
\n";
my $n1=0;
for($i=0;$i<$datanmbr;$i++){
for($j=0;$j<$f1_colnmbr;$j++){
$f1_data[$j] = $entrylist[$i*$f1_colnmbr+$j];
}
#print "DEBUG 10di30 - sub di_input 42 - $rcrdkey - $dd_upcol - $f1_data[0]
\n";
if($f1_data[2] eq ""){next;}
else{
if($f1_order eq "lst" || $f1_order eq "fst"){
if($f1_data[0] eq ""){
$f1_data[0] = &st_strform($f1_keylen,"0","head",$n1+1);
}
}
else{
$f1_data[0] = &st_strform($f1_keylen,"_","tail",$f1_data[0]);
}
if($f1_data[6] eq ""){$f1_data[6] = $date_day;}
if($f1_data[7] eq ""){$f1_data[7] = $date_day;}
$f1_data[8] = $date_day;
if($f1_data[9] eq ""){$f1_data[9] = "0000-00-00";}
if($f1_data[2] =~ m/取消/){
$f1_data[9] = $date_day;
}
if($dd_upcol>0){&di0_upfilelist($i);}
$f1_record = &fl_rcrdform; #00fx10
#print "DEBUG 10di30 - sub di_input 49 - $rcrdkey - $f1_record
@f1_upfilelist
\n";
$f1_LINES[$n1+2] = $f1_record;
$n1++;
}
}
#print "DEBUG 10di30 - sub di_input 51 - $rcrdkey - $f1_record
\n";
@f1_LINES = sort @f1_LINES;
&io_fileread("2",$datafile,"err");
$f1_SIZE = $n1 + 2;
$f1_LINES[0] = $f2_LINES[0];
$f1_LINES[1] = $f2_LINES[1];
$datanmbr = $n1;
$f1_SIZE = $datanmbr+2;
&io_fileoverwr("",$datafile,"err");
}
# &io_unlock($io_lockfile,"");
#print "DEBUG 10di30 - sub di_input 53 - $i - $rcrdkey -
\n";
if($dd_upcol>0){&io_upfile(@f1_upfilelist);}
#print "DEBUG 10di30 - sub di_input 63 - $i - $rcrdkey - $datafile
\n";
}
sub di0_upfilelist{
my ($i) = @_;
my @upname = split("_SPU_",$f1_data[26]);
my @oldupfile = split("_SPU_",$f1_data[27]);
if($f1_data[0] ne ""){$subcode = $f1_data[0];}
else{$subcode=&st_rndmform(6);} # 「 lst 」「 fst 」 新規の場合、キーコード確定前のため
for($j=0;$j<$dd_upcol;$j++){
$n = $i * $dd_upcol + $j;
if($upname[$j] eq ""){
$upfile = "";
}
elsif($g_upfilename[$n] ne "" && $g_upfilename[$n] ne "----"){
$upfile = $dd_upfiledir.$prjcode.$filecode.$subcode."_".$g_upfilename[$n];
$f1_upfilelist[$n] = $upfile;
unlink $oldupfile[$j];
}
else{
$upfile = $oldupfile[$j];
}
if($j==0){
$f1_data[27] = $upfile;
}
else{
$f1_data[27] = $f1_data[27]."_SPU_".$upfile;
}
}
}
# ********** 保存用 HTML ファイル作成 **********
sub di_holdhtml{
my ($prjcode,$filecode,) = @_;
$work = "display";
$operator ="outside";
$f1_filenmbr = 1;
$f1_filelist[0] = $datafile;
$f1_keynmbr = 0;
# &dd_rcrdselect("and",$rcrdorder,$prjcode,$grpcode,$filecode);
#print "DEBUG 10di30 - sub di_holdhtml 11 - $dd_datafile
\n";
&dd_rcrdset($dd_datafile,"all",0);
my $htmladd = $dd_htmldir.$prjcode.$filecode.".html";
#print "DEBUG 10di30 - sub di_holdhtml 12 - $dd_brd00html
\n";
&dd_display($dd_brd00html,$work,"all",$htmladd);
#print "DEBUG 10di30 - sub di_holdhtml 13 - $dsphtml
\n";
}
sub di_linkhtml{
($prjcode) = @_;
splice @f2_LINES;
$link00html = "../".$adjdir."cntrl/cg_10aalink00.html";
$linkhtml = $dd_htmldir.$prjcode."link.html";
$f1_filenmbr = &io_fileread("",$link00html,"err");
@f1_LINES = @f2_LINES;
$f2_filenmbr = &io_dirsfilelist($dd_htmldir);
my $str = $f2_filelist[$f2_filenmbr-1];
if($str =~ /link.html/){$str = $f2_filelist[$f2_filenmbr-2];}
$f1_LINES[3] =~ s/cg_10aadsp00.html/$str/;
#print "DEBUG 10di30 - sub di_linkhtml 12 - $link00html - $linkhtml
\n";
&io_filewrite("",$linkhtml,"err");
#print "DEBUG 10di30 - sub di_linkhtml 13 - $link00html - $linkhtml
\n";
}
# ********** メール発信 **********
sub di_mailconfirm{
($g_manager,$email,$dspmsg)= @_;
$dspmsg="以下のとおり受信いたしました。\n\n";
$f1_title[0]="受信番号";
for($i=0;$i<$f1_colnmbr-1;$i++){
$title1 = $f1_title[$i];
# &jcode'convert(*title1, 'euc');
if($title1 !~ m/\*\*\*/){
# $f1_title[$i] =~ s/申\込日/申込日/;
$f1_title[$i] =~ s/_SPU_//g;
$f1_data[$i] =~ s/_SPU_/、/g;
$dspmsg=$dspmsg.$f1_title[$i].":".$f1_data[$i]."\n";
}
}
$dspmsg = $dspmsg."\nありがとうございました。\n";
$mailsbjct = "ManagerMail(送信受付):".$prgname."\n";
$mailmsg = $mailsbjct."\n".$dspmsg;
&io_mailtext($g_manager,$g_manager,$mailsbjct,$mailmsg);
$mailsbjct = "ありがとうございます\n";
&io_mailtext($g_manager,$email,$mailsbjct,$dspmsg);
}
# ********** バックアップ **********
sub di_backup{
($datafile,$filecode,$backupdate) = @_;
$backupdate = $filecode."_".$backupdate;
$size = &io_fileread("",$datafile,"err");
@f1_LINES = @f2_LINES;
for($i=0;$i<$size;$i++){
$f1_LINES[$i] =~ s/upfile/backup/g;
$f1_LINES[$i] =~ s/$filecode/$backupdate/g;
}
$backupfile = $datafile;
$backupfile =~ s/$dd_datadir/$dd_backupdir/;
$backupfile =~ s/$filecode/$backupdate/;
&io_filenewcr("",$backupfile,"err");
# upfile 作成
$f2_filenmbr = &io_dirsfilelist($dd_upfiledir);
for($f=0;$f<$f2_filenmbr;$f++){
if($f2_filelist[$f] =~ m/$filecode/){
$oldfile = $f2_filelist[$f];
$newfile = $oldfile;
$newfile =~ s/upfile/backup/;
$newfile =~ s/$filecode/$backupdate/;
$errmsg=&io_fileread("0",$oldfile,"");
if($errmsg !~ m/Error/){
$size = -s $oldfile;
$size = read(f1_FILE,$filevalue,$size);
close(f1_FILE);
}
$errmsg=&io_filewrite("0",$newfile,"");
if($errmsg !~ m/Error/){
print f1_FILE "$filevalue";
close(f1_FILE);
}
# $size = &io_fileread("",$oldfile,"err");
# @f1_LINES = @f2_LINES;
# &io_filenewcr("",$newfile,"err");
}
}
return($backupfile);
}
# ********** 削除(ファイル)**********
sub di_delfile{
($filecode,$backupdate) = @_;
$errref2 = "操作エラー:".$prjcode." - ".$work." - ".$prgname." - "."di_input";
if($backupdate ne ""){
$filecode = $filecode."_".$backupdate;
$dir = $dd_backupdir;
}
else{
$dir = $dd_datadir;
}
$f2_filenmbr = &io_dirsfilelist($dir);
#print "DEBUG sub di_delfile 01 - $dir - $f2_filenmbr - $filecode
\n";
if($f2_filenmbr <= 0){
$errmsg = $dir.":ディレクトリにはファイルが存在しません。\n";
&io_errexit($errmsg,$errref2,$g_manager);
exit;
}
$delnmbr=0;
$delnmbr1=0;
$delnmbr2=0;
for($f=0;$f<$f2_filenmbr;$f++){
if($f2_filelist[$f] =~ /$filecode/){
unlink $f2_filelist[$f];
$delnmbr++;
}
}
if($delnmbr == 0){
$errmsg = $dir." - ".$filecode.":該当のファイルは存在しません。\n";
&io_errexit($errmsg,$errref2,$g_manager);
exit;
}
if($backupdate eq ""){
$f2_filenmbr=&io_dirsfilelist($dd_upfiledir);
for($f=0;$f<$f2_filenmbr;$f++){
if($f2_filelist[$f] =~ /$filecode/){
unlink $f2_filelist[$f];
$delnmbr1++;
}
}
$f2_filenmbr=&io_dirsfilelist($dd_htmldir);
for($f=0;$f<$f2_filenmbr;$f++){
if($f2_filelist[$f] =~ /$filecode/){
unlink $f2_filelist[$f];
$delnmbr2++;
}
}
}
$dspmsg = $filecode.":のファイル(".$dir." - ".$delnmbr.")、および関連のファイル(".$dd_upfiledir." - ".$delnmbr1."、".$dd_htmldir." - ".$delnmbr2.")は削除されました。";
return $dspmsg;
}
# ********** 削除(レコード)**********
sub di_delrcrd{
($datafile) = @_;
#print "DEBUG 10di30 sub di_delrcrd 01 - $datafile - $f1_keynmbr
@f1_keylist
\n";
@f8_keylist = @f1_keylist;
$size = &io_fileread("",$datafile,"err");
$f2_rcrdnmbr = 0;
$f1_SIZE=2;
$f1_LINES[0] =$f2_LINES[0];
$f1_LINES[1] =$f2_LINES[1];
for($i=2;$i<$size;$i++){
$check = 0;
$line = $f2_LINES[$i];
# $line = st_hankaku_form($f2_LINES[$i]);
# &jcode'convert(*line, 'euc');
@fld = split("_SP_",$line);
#print "DEBUG sub di_delrcrd 01 - $datafile - $f1_keynmbr
@f1_keylist
\n";
for(my $k=0;$k<$f1_keynmbr;$k++){
# $keylist = st_hankaku_form($f1_keylist[$k]);
# &jcode'convert(*keylist, 'euc');
# my @keyand = split("_",$keylist);
my @keyand = split("_",$f1_keylist[$k]);
my $andnmbr = @keyand;
if($f1_keylist[$k] eq "" || $keyand[2] eq ""){next;}
elsif($keyand[0] ge "0" && $keyand[0] le "".$f1_colnmbr){$chkfld = $fld[$keyand[0]+0];}
else{$chkfld = $line;}
# &jcode'convert(*chkfld, 'euc');
#print "DEBUG 10di30 sub di_delrcrd 7 - $i - $k - $check - $chkfld
\n";
if($keyand[1] eq "range"){
if($chkfld ge $keyand[2] && $chkfld le $keyand[3]){
$f8_keylist[$k] = "==".$f8_keylist[$k];
$check = 1;last;
}
}
else{
$check = 1;
for(my $k1=2;$k1<$andnmbr;$k1++){
if($keyand[1] eq "strict"){
#print "DEBUG 10di30 sub di_delrcrd 8 - $i - $andnmbr - $k1 - $check - $chkfld - $keyand[$k1]
\n";
if($chkfld ne $keyand[$k1]){$check = 0;last;}
}
else{
#print "DEBUG sub di_delrcrd 8 - $i - $k - $check - $chkfld - $keyand[$k1] - $f2_rcrdnmbr - $f1_SIZE
\n";
$len=length($keyand[$k1]);
if(substr($chkfld,0,$len) ne $keyand[$k1]){$check = 0;last;}
}
}
if($check == 1){
$f8_keylist[$k] = "==".$f8_keylist[$k];
last;
}
}
#print "DEBUG sub di_delrcrd 9 - $i - $k - $check - $chkfld - $keyand[2] - $f2_rcrdnmbr - $f1_SIZE
\n";
}
#print "DEBUG sub di_delrcrd 10 - $i - $k - $check - $chkfld - $keyand[2] - $f2_rcrdnmbr - $f1_SIZE
@8_keylist
\n";
if($check == 1){
$f2_rcrdlist[$f2_rcrdnmbr] = $f2_LINES[$i];
$f2_rcrdnmbr++;
}
else{
$f1_LINES[$f1_SIZE] = $f2_LINES[$i];
$f1_SIZE++;
}
}
&io_fileoverwr("",$datafile,"err");
&di0_delupfile;
$dspmsg = "削除レコード数:".$f2_rcrdnmbr."\n";
for($i=0;$i<$f2_rcrdnmbr;$i++){
$dspmsg=$dspmsg.substr($f2_rcrdlist[$i],0,$f1_keylen)."、";
}
$dspmsg = $dspmsg."
該当レコードなし:\n";
$f8_keynmbr = 0;
for(my $k=0;$k<$f1_keynmbr;$k++){
#print "DEBUG di_delrcrd 07 - $k - $f8_keylist[$k]
\n";
if($f8_keylist[$k] ne "" && $f8_keylist[$k] !~ m/==/){
$f8_keynmbr++;
@f8key = split("_",$f8_keylist[$k]);
shift @f8key; shift @f8key;
$f8key1 = join("_",@f8key);
$dspmsg = $dspmsg.$f8key1."、";
}
}
$dspmsg = $dspmsg."(キー数:".$f8_keynmbr."、空欄含む)";
return $dspmsg;
}
sub di0_delupfile{
for($i=0;$i<$f2_rcrdnmbr;$i++){
@fld = split("_SP_",$f2_rcrdlist[$i]);
@upfile = split("_SPU_",$fld[27]);
for($j=0;$j<$dd_upcol;$j++){
if(-e $upfile[$j]){
unlink $upfile[$j];
}
}
}
}
# ********* 入力内容チェック ********
sub di_inputcheck{ # 入力条件チェック(受信・登録リスト)
(my $checkfld) = @_;
#print "DEBUG cg_10di30 sub di_inputcheck 21 - $checkfld - $dd_datafile
\n";
if($checkfld eq ""){return;}
my @fld = split("_",$checkfld);
my $nmbr = @fld;
if($rcrdkey eq "new" || $rcrdkey eq "one"){
$size = &io_fileread("",$dd_datafile,"err");
#print "DEBUG cg_10di30 sub di_inputcheck 30 - $i - $entrylist[$e*$f1_colnmbr] - $f2_data[0] - $entrylist[$e*$col+1] - $f2_data[1]- $entrylist[$e*$col+5] - $f2_data[5]
\n";
for(my $i=2;$i<$size;$i++){
@f2_data = split("_SP_",$f2_LINES[$i]);
if($rcrdkey eq "one" && $entrylist[$e*$f1_colnmbr] eq $f2_data[0]){next;}
#print "DEBUG sub dd_inputcheck 31 - $i - $entrylist[$e*$f1_colnmbr] - $f2_data[0] - $entrylist[$e*$col+1] - $f2_data[1]- $entrylist[$e*$col+5] - $f2_data[5]
\n";
for(my $j=0;$j<$nmbr;$j++){
$k = $fld[$j];
$chkfld1 = $entrylist[$e*$f1_colnmbr+$k];
$chkfld2 = $f2_data[$k];
# &jcode'convert(*chkfld1, 'euc');
# &jcode'convert(*chkfld2, 'euc');
#print "DEBUG sub dd_inputcheck 32 - $i - $j - $chkfld1 - $chkfld2
\n";
if($chkfld1 ne "" && ($chkfld1 =~ m/$chkfld2/i || $chkfld2 =~ m/$chkfld1/i)){
#print "DEBUG sub dd_inputcheck 33 - $i - $j - $chkfld1 - $chkfld2
\n";
$note1 = "".$entrylist[$e*$f1_colnmbr+$k].":この".$f1_title[$k]."は登録済でご使用になれません。";
&di0_errinputdsp; # 下記、入力フォーム再表示(入力エラーの場合)
exit;
}
}
#print "DEBUG sub dd_inputcheck 34 - $i - $entrylist[$e*$f1_colnmbr] - $f2_data[0] - $entrylist[$e*$col+1] - $f2_data[1]- $entrylist[$e*$col+5] - $f2_data[5]
\n";
}
}
elsif($rcrdkey eq "all"){
for(my $e=1;$e<$datanmbr;$e++){
if($entrylist[$e*$f1_colnmbr+2] eq ""){next;}
for(my $i=0;$i<$e;$i++){
if($entrylist[$i*$f1_colnmbr+2] eq ""){next;}
for(my $j=0;$j<$nmbr;$j++){
$k = $fld[$j];
$chkfld1 = $entrylist[$e*$f1_colnmbr+$k];
$chkfld2 = $entrylist[$i*$f1_colnmbr+$k];
#print "DEBUG sub dd_inputcheck 41 - $e - $i - $j - $chkfld1 - $chkfld2
\n";
# &jcode'convert(*chkfld1, 'euc');
# &jcode'convert(*chkfld2, 'euc');
if($chkfld1 ne "" && ($chkfld1 =~ m/$chkfld2/i || $chkfld2 =~ m/$chkfld1/i)){
$note1 = "".$entrylist[$e*$f1_colnmbr+$k].":この".$f1_title[$k]."は重複しています。修正ください。";
&di0_errinputdsp; # 下記、入力フォーム再表示(入力エラーの場合)
exit;
}
}
}
}
}
#print "DEBUG cg_10d130 sub dd_inputcheck 90
\n";
}
sub di0_errinputdsp{ # 入力フォーム再表示(入力エラーの場合)
$f2_rcrdnmbr = $datanmbr;
#print "DEBUG cg_10d130 sub dd_errinputdsp 10 - $dd_ipt00html
\n";
for($i=0;$i<$datanmbr;$i++){
for($j=0;$j<$f1_colnmbr;$j++){
$fld[$j] = $entrylist[$i*$f1_colnmbr+$j];
$f2_rcrdlist[$i] = join("_SP_",@fld);
$f2_rcrdlist[$i] = "_SPS__SPS__SPS_".$f2_rcrdlist[$i];
}
}
&dd_display($dd_ipt00html,"inputform",$rcrdkey,"display");
# $dsphtml = "../".$adjdir."cntrl/".$prjcode."temp.html";
# &dd_display($dd_ipt00file,$rcrdkey,$dspno,$dsphtml); # cg_10di20.pl 画面表示(入力フォーム)
# print "location: $dsphtml\n\n";
exit;
}
1