409 lines
14 KiB
C#
409 lines
14 KiB
C#
using AR;
|
|
using SHDocVw;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Text.RegularExpressions;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
|
|
namespace UniMarc
|
|
{
|
|
public partial class AddMarc2 : Form
|
|
{
|
|
Helper_DB db = new Helper_DB();
|
|
String_Text st = new String_Text();
|
|
Help008Tag tag008 = new Help008Tag();
|
|
private string mOldMarc = string.Empty;
|
|
Main m;
|
|
public AddMarc2(Main _m)
|
|
{
|
|
InitializeComponent();
|
|
db.DBcon();
|
|
marcEditorControl1.db = this.db;
|
|
m = _m;
|
|
}
|
|
|
|
private void AddMarc_Load(object sender, EventArgs e)
|
|
{
|
|
cb_SearchCol.SelectedIndex = 0;
|
|
|
|
|
|
TextReset();
|
|
|
|
|
|
this.KeyPreview = true;
|
|
this.radD.Checked = true; //등급기본
|
|
|
|
}
|
|
|
|
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
|
|
{
|
|
if (keyData == Keys.F9)
|
|
{
|
|
btn_Save_Click(this, EventArgs.Empty);
|
|
return true;
|
|
}
|
|
return base.ProcessCmdKey(ref msg, keyData);
|
|
}
|
|
public void SetKolisValueApply(string marc)
|
|
{
|
|
this.marcEditorControl1.SetMarcString(marc);
|
|
}
|
|
|
|
private void tb_ISBN_KeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
if (e.KeyCode != Keys.Enter)
|
|
return;
|
|
searchMarc();
|
|
|
|
|
|
}
|
|
void searchMarc()
|
|
{
|
|
TextReset();
|
|
|
|
string SearchText = tb_Search.Text;
|
|
string SearchCol = cb_SearchCol.SelectedItem.ToString();
|
|
using (var mcs = new MarcCopySelect2(SearchCol, SearchText))
|
|
if (mcs.ShowDialog() == DialogResult.OK)
|
|
{
|
|
/// 0:idx <br></br>
|
|
/// 1:compidx <br></br>
|
|
/// 2:user <br></br>
|
|
/// 3:date <br></br>
|
|
/// 4:grade <br></br>
|
|
/// 5:tag008 <br></br>
|
|
/// 6:LineMarc</param>
|
|
var selected = mcs.SelectedItem;
|
|
var defMarc = PUB.MakeEmptyMarc(selected.ISBN, "BookName", "Author", "Publisher", "Price");
|
|
this.marcEditorControl1.LoadBookData(selected.marc_db, selected.ISBN, defMarc);
|
|
mOldMarc = selected.marc_db;
|
|
|
|
if (selected.compidx != PUB.user.CompanyIdx)
|
|
{
|
|
UTIL.MsgI($"다른 기관의 데이터 입니다\n신규 등록모드로 실행됩니다.\n\n필요한 경우 입력일자를 업데이트하세요");
|
|
this.lbl_Midx.Text = "신규등록";// ".idx;
|
|
this.lbl_Midx.Tag = null;
|
|
this.lbl_Midx.BackColor = Color.Tomato;
|
|
}
|
|
else
|
|
{
|
|
this.lbl_Midx.Text = selected.idx;
|
|
this.lbl_Midx.Tag = selected.idx;
|
|
this.lbl_Midx.BackColor = Color.Lime;
|
|
|
|
}
|
|
|
|
|
|
//가져온 등급으로 변경해준다.
|
|
if (selected.Grade == "0") radA.Checked = true;
|
|
else if (selected.Grade == "1") radB.Checked = true;
|
|
else if (selected.Grade == "2") radC.Checked = true;
|
|
else if (selected.Grade == "3") radD.Checked = true;
|
|
|
|
rtEtc1.Text = selected.remark1;
|
|
rtEtc2.Text = selected.remark2;
|
|
}
|
|
}
|
|
|
|
|
|
private void btn_Empty_Click(object sender, EventArgs e)
|
|
{
|
|
TextReset();
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 전체 초기화
|
|
/// </summary>
|
|
/// <param name="isDelete">탭 컨트롤에서 사용할 경우 false</param>
|
|
public void TextReset(bool isDelete = true)
|
|
{
|
|
if (isDelete)
|
|
{
|
|
var isbn = $"※{DateTime.Now.ToString("yyMMddhhmmss")}";
|
|
var emptryMarc = PUB.MakeEmptyMarc(isbn, "title", "author", "publisher", "price");
|
|
var emptymarc = TextResetSub();
|
|
marcEditorControl1.LoadBookData(string.Empty, isbn, defaultMarc: emptryMarc);
|
|
|
|
this.rtEtc1.Text = string.Empty;
|
|
this.rtEtc2.Text = string.Empty;
|
|
|
|
lbl_Midx.Tag = null;
|
|
lbl_Midx.Text = "신규작성";
|
|
lbl_Midx.BackColor = Color.Tomato;
|
|
}
|
|
}
|
|
|
|
string TextResetSub()
|
|
{
|
|
// 입력일자 (00-05)
|
|
// 발행년유형 (6)
|
|
// 발행년1 (07-10)
|
|
// 발행년2 (11-14)
|
|
// 발행국 (15-17)
|
|
|
|
// 삽화표시 (18-21)
|
|
// 이용대상자수준 (22) v
|
|
// 개별자료형태 (23) v
|
|
// 내용형식1 (24) v
|
|
// 내용형식2 (25) v
|
|
|
|
// 한국대학부호 (26-27)
|
|
// 수정레코드 (28)
|
|
// 회의간행물 (29) c
|
|
// 기념논문집 (30) c
|
|
// 색인 (31)
|
|
|
|
// 목록전거 (32)
|
|
// 문학형식 (33) v
|
|
// 전기 (34) v
|
|
// 언어 (35-37) v
|
|
// 한국정부기관부호 (38-39)
|
|
string yyMMdd = DateTime.Now.ToString("yyMMdd");
|
|
string yyyy = DateTime.Now.ToString("yyyy");
|
|
string Empty_008 = yyMMdd + "s" + yyyy + " 000 kor ▲";
|
|
string Empty_text = string.Format(
|
|
$"008\t {Empty_008.Replace("▲", "")}" +
|
|
"020\t \t▼a▼c▲\n" +
|
|
"056\t \t▼a▼2▲\n" +
|
|
"100\t \t▼a▲\n" +
|
|
"245\t \t▼a▼d▲\n" +
|
|
"260\t \t▼b▲\n" +
|
|
"300\t \t▼a▼c▲\n" +
|
|
"653\t \t▼a▲\n" +
|
|
"700\t \t▼a▲\n" +
|
|
"950\t \t▼b▲\n");
|
|
|
|
|
|
return Empty_text;
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 마크DB에 UPDATE해주는 함수
|
|
/// </summary>
|
|
/// <param name="Table">테이블 이름</param>
|
|
/// <param name="MarcIndex">마크 인덱스 번호</param>
|
|
/// <param name="FullMarc">한줄짜리 마크</param>
|
|
/// <param name="grade">마크 등급</param>
|
|
/// <param name="tag056">분류기호</param>
|
|
/// <param name="v_date">저장시각 yyyy-MM-dd HH:mm:ss</param>
|
|
void UpdateMarc(string MarcIndex, string FullMarc, string grade)
|
|
{
|
|
//도서정보추출
|
|
var v_isbn = "";
|
|
var v_price = "";
|
|
var v_author = "";
|
|
var v_title = "";
|
|
var v_publisher = "";
|
|
var v_date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
|
//파서를 사용해서 변경한다
|
|
var parser = new UniMarc.MarcParser();
|
|
parser.ParseFullMarc(FullMarc);
|
|
|
|
//ISBN와 가격 (처음나오는 020태그의 값을 적용)
|
|
var tag_020 = parser.GetTag<MarcField>("020").FirstOrDefault();
|
|
if (tag_020 != null)
|
|
{
|
|
v_isbn = tag_020.GetSubfieldValue('a');
|
|
v_price = tag_020.GetSubfieldValue('c');
|
|
}
|
|
|
|
//저자(100 -> 110 -> 111 순으로 적용)
|
|
var tag_100 = parser.GetTag<MarcField>("100").FirstOrDefault();
|
|
var tag_110 = parser.GetTag<MarcField>("110").FirstOrDefault();
|
|
var tag_111 = parser.GetTag<MarcField>("111").FirstOrDefault();
|
|
if (tag_111 != null)
|
|
v_author = tag_111.GetSubfieldValue('a');
|
|
else if (tag_110 != null)
|
|
v_author = tag_110.GetSubfieldValue('a');
|
|
else if (tag_100 != null)
|
|
v_author = tag_100.GetSubfieldValue('a');
|
|
|
|
//서명
|
|
var tag_245 = parser.GetTag<MarcSubfield>("245a").FirstOrDefault();
|
|
v_title = tag_245?.Value ?? string.Empty;
|
|
|
|
//출판사
|
|
var tag_300b = parser.GetTag<MarcSubfield>("300b").FirstOrDefault();
|
|
v_publisher = tag_300b?.Value ?? string.Empty;
|
|
|
|
//056a
|
|
var v_056 = parser.GetTag("056a").FirstOrDefault() ?? string.Empty;
|
|
var v_008 = parser.GetTag("008").FirstOrDefault() ?? string.Empty;
|
|
|
|
if (v_056.isEmpty() || v_008.isEmpty())
|
|
{
|
|
UTIL.MsgE("056a | 008 태그의 값을 확인할 수 없습니다\n1.마크데이터를 확인 해주세요\n2.개발자에 해당 내용을 문의하세요");
|
|
return;
|
|
}
|
|
|
|
if (v_isbn.isEmpty() || v_title.isEmpty())
|
|
{
|
|
UTIL.MsgE("ISBN과 서명을 추출하지 못했습니다\n1.마크데이터를 확인 해주세요\n2.개발자에 해당 내용을 문의하세요");
|
|
return;
|
|
}
|
|
|
|
var etc1 = rtEtc1.Text.Trim();
|
|
var etc2 = rtEtc2.Text.Trim();
|
|
|
|
if (grade.isEmpty()) grade = "2";
|
|
|
|
|
|
if (MarcIndex.isEmpty())
|
|
{
|
|
//insert
|
|
string[] InsertTable =
|
|
{
|
|
"ISBN", "서명", "저자", "출판사", "가격",
|
|
"marc", "비고1", "비고2", "grade", "marc_chk",
|
|
"user", "division", "008tag", "date", "compidx"
|
|
};
|
|
|
|
//데이터중복검사필요
|
|
//동일 isbnd있다면 그래도 저장할건지 한번 더 물어봐야 함
|
|
if (DB_Utils.ExistISBN(v_isbn))
|
|
{
|
|
if (UTIL.MsgQ("동일한 ISBN이 이미 존재합니다. 그래도 저장하시겠습니까?") == DialogResult.No)
|
|
return;
|
|
}
|
|
|
|
string[] InsertColumn =
|
|
{
|
|
v_isbn, v_title, v_author, v_publisher, v_price,
|
|
FullMarc, etc1, etc2, grade.ToString(), "1",
|
|
PUB.user.UserName, v_056, v_008, v_date, PUB.user.CompanyIdx
|
|
};
|
|
|
|
string InCMD = db.DB_INSERT("Marc", InsertTable, InsertColumn);
|
|
PUB.log.Add("ADDMarcINSERT", string.Format("{0}({1}) : {2}", PUB.user.UserName, PUB.user.CompanyIdx, InCMD.Replace("\r", " ").Replace("\n", " ")));
|
|
var rlt = Helper_DB.ExcuteInsertGetIndex(InCMD);
|
|
if (rlt.errorMessage.isEmpty() == false)
|
|
UTIL.MsgE(rlt.errorMessage);
|
|
else
|
|
{
|
|
lbl_Midx.Tag = rlt.value.ToString();
|
|
lbl_Midx.Text = rlt.value.ToString();
|
|
UTIL.MsgI($"저장 완료\n\nIDX:{rlt.value}");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//update
|
|
|
|
string[] EditTable =
|
|
{
|
|
"compidx", "marc", "marc_chk","marc1", "marc_chk1", "비고1",
|
|
"비고2", "division", "008tag", "date", "user",
|
|
"grade"
|
|
};
|
|
string[] EditColumn =
|
|
{
|
|
PUB.user.CompanyIdx, FullMarc, "1",mOldMarc, "0", etc1,
|
|
etc2, v_056, v_008, v_date, PUB.user.UserName,
|
|
grade.ToString()
|
|
};
|
|
|
|
string[] SearchTable = { "idx", "compidx" };
|
|
string[] SearchColumn = { MarcIndex, PUB.user.CompanyIdx };
|
|
|
|
string UpCMD = db.More_Update("Marc", EditTable, EditColumn, SearchTable, SearchColumn);
|
|
PUB.log.Add("ADDMarcUPDATE", string.Format("{0}({1}) : {2}", PUB.user.UserName, PUB.user.CompanyIdx, UpCMD.Replace("\r", " ").Replace("\n", " ")));
|
|
var rlt = Helper_DB.ExcuteNonQuery(UpCMD);
|
|
if (rlt.applyCount != 1)
|
|
UTIL.MsgE(rlt.errorMessage);
|
|
else
|
|
UTIL.MsgI("변경 완료");
|
|
}
|
|
|
|
}
|
|
|
|
private void Btn_SearchKolis_Click(object sender, EventArgs e)
|
|
{
|
|
AddMarc_FillBlank af = new AddMarc_FillBlank(this);
|
|
af.Show();
|
|
}
|
|
|
|
private void button1_Click(object sender, EventArgs e)
|
|
{
|
|
this.Close();
|
|
}
|
|
|
|
private void button2_Click(object sender, EventArgs e)
|
|
{
|
|
searchMarc();
|
|
}
|
|
|
|
private void btSave_Click(object sender, EventArgs e)
|
|
{
|
|
var midx = lbl_Midx.Tag?.ToString() ?? string.Empty;
|
|
if (midx.isEmpty())
|
|
{
|
|
UTIL.MsgE("저장할 마크를 불러오세요\n신규마크작성상태에서는 추가 버튼을 사용하세요");
|
|
return;
|
|
}
|
|
SaveData(true);
|
|
}
|
|
private void btn_Save_Click(object sender, EventArgs e)
|
|
{
|
|
SaveData(false);
|
|
}
|
|
|
|
void SaveData(bool isUpdate)
|
|
{
|
|
string tag008 = marcEditorControl1.text008.Text;
|
|
|
|
//입력일자를 업데이트할지 확인한다.
|
|
if (isUpdate == false)
|
|
{
|
|
var inputdate = tag008.Substring(0, 6);
|
|
if (inputdate == "000000")
|
|
inputdate = DateTime.Now.ToString("yyMMdd");
|
|
else if (inputdate != DateTime.Now.ToString("yyMMdd"))
|
|
{
|
|
if (UTIL.MsgQ($"입력일자({inputdate})를 오늘로 변경할까요?") == DialogResult.Yes)
|
|
{
|
|
tag008 = DateTime.Now.ToString("yyMMdd") + tag008.Substring(6);
|
|
marcEditorControl1.text008.Text = tag008;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (marcEditorControl1.CheckValidation() == false) return;
|
|
|
|
string tag056 = marcEditorControl1.Tag056(out string with008TagOutput);// Tag056(dbMarc, _param);
|
|
|
|
//tag056을 호출해야 008이추가된다.그런후에 데이터를 처리해야함
|
|
string fullMarc = marcEditorControl1.MakeMarcString();
|
|
var marcString = marcEditorControl1.richTextBox1.Text;
|
|
|
|
|
|
var parserF = new UniMarc.MarcParser();
|
|
parserF.ParseFullMarc(fullMarc);
|
|
|
|
string midx = this.lbl_Midx.Tag?.ToString() ?? string.Empty;
|
|
if (isUpdate == false) midx = string.Empty;
|
|
|
|
var v_grade = "";
|
|
if (radA.Checked) v_grade = "0";
|
|
else if (radB.Checked) v_grade = "1";
|
|
else if (radC.Checked) v_grade = "2";
|
|
else if (radD.Checked) v_grade = "3";
|
|
|
|
//midx 값이 emptry 라면 insert , 아니라면 update
|
|
UpdateMarc(midx, fullMarc, v_grade);
|
|
|
|
|
|
}
|
|
|
|
}
|
|
}
|