diff --git a/unimarc/unimarc/Helper/Database.cs b/unimarc/unimarc/Helper/Database.cs index 5454195..91062a3 100644 --- a/unimarc/unimarc/Helper/Database.cs +++ b/unimarc/unimarc/Helper/Database.cs @@ -295,7 +295,7 @@ namespace UniMarc } - public static (bool result, int newidx, string message) UpdateMarc(int midx, string FullMarc, int v_grade, + public static (bool result, int newidx, string message,string date) UpdateMarc(int midx, string FullMarc, int v_grade, string etc1, string etc2, string url, string v_orgmarc) { var isUpdate = midx > 0; @@ -307,7 +307,7 @@ namespace UniMarc //상황에 맞게 업데이트 명령을 처리한다. var basicinfo = GetBasicMarcInfo(FullMarc); - if (basicinfo.Success == false) return (false, 0, basicinfo.Message); + if (basicinfo.Success == false) return (false, 0, basicinfo.Message,v_date); @@ -392,10 +392,10 @@ namespace UniMarc var ret = Helper_DB.ExcuteNonQuery(U_cmd); if (ret.applyCount != 1) { - return (false, midx, $"업데이트된 행의 수가 1이 아닙니다. 적용된 행 수: {ret.applyCount}, 오류 메시지: {ret.errorMessage}"); + return (false, midx, $"업데이트된 행의 수가 1이 아닙니다. 적용된 행 수: {ret.applyCount}, 오류 메시지: {ret.errorMessage}", v_date); } } - return (true, midx, string.Empty); + return (true, midx, string.Empty, v_date); } } diff --git a/unimarc/unimarc/PUB.cs b/unimarc/unimarc/PUB.cs index 55bd889..29af98e 100644 --- a/unimarc/unimarc/PUB.cs +++ b/unimarc/unimarc/PUB.cs @@ -55,7 +55,7 @@ namespace UniMarc string Empty_text = string.Format( "020\t \t▼a{1}▼c\\{5}▲\n" + "056\t \t▼a▼25▲\n" + - "100\t \t▼a{2}▲\n" + + "100\t \t▼a{3}▲\n" + "245\t \t▼a{2}▼d{3}▲\n" + "260\t \t▼b{4}▲\n" + "300\t \t▼a▼c▲\n" + diff --git a/unimarc/unimarc/Properties/AssemblyInfo.cs b/unimarc/unimarc/Properties/AssemblyInfo.cs index 3d55692..f7f6479 100644 --- a/unimarc/unimarc/Properties/AssemblyInfo.cs +++ b/unimarc/unimarc/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를 // 기본값으로 할 수 있습니다. // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2026.03.02.1630")] -[assembly: AssemblyFileVersion("2026.03.02.1630")] +[assembly: AssemblyVersion("2026.03.08.1700")] +[assembly: AssemblyFileVersion("2026.03.08.1700")] diff --git a/unimarc/unimarc/마크/Marc2.cs b/unimarc/unimarc/마크/Marc2.cs index 7f4ee8c..9884204 100644 --- a/unimarc/unimarc/마크/Marc2.cs +++ b/unimarc/unimarc/마크/Marc2.cs @@ -948,7 +948,6 @@ namespace UniMarc string date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); string orimarc = marcEditorControl1.MakeMarcString(); - //아래는 실제 폼에서의 저장코드 // [신규 방식: 데이터 객체(Item) 중심 로직] var item = this.dataList.Where(t => t.ListIdx == this.Param.ListIdx).FirstOrDefault(); @@ -959,18 +958,12 @@ namespace UniMarc // cb_grade.SelectedIndex.ToString(); // 등급은 0~3의 숫자로 저장된다고 가정 var v_grade = uC_SelectGrade1.Grade == -1 ? "" : uC_SelectGrade1.Grade.ToString(); - //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"; - var v_etc1 = this.etc1.Text.Trim(); var v_etc2 = this.etc2.Text.Trim(); // 1. DB 작업 (공용 메서드로 통합 관리) int targetMarcIdx = (item.Status == MarcRecordStatus.MyCompany) ? item.MarcIdx : 0; var saveResult = Helper_DB.UpdateMarc(targetMarcIdx, orimarc, uC_SelectGrade1.Grade, v_etc1, v_etc2, this.Param.URL, this.Param.OriginalMarc); - if (saveResult.result == false) { UTIL.MsgE(saveResult.message); @@ -978,20 +971,38 @@ namespace UniMarc } // 새로 생성된 인덱스 반영 - item.MarcIdx = saveResult.newidx; - - + if(saveResult.newidx != item.MarcIdx) + { + Console.WriteLine($"new marc index set : {item.MarcIdx} to {saveResult.newidx}"); + item.MarcIdx = saveResult.newidx; + } + // 2. 객체 데이터 업데이트 및 시각적 상태 계산 item.Status = MarcRecordStatus.MyCompany; item.BackColor = GetSaveDateColor(date); item.Grade = v_grade; //등급업데이트추가 + item.DbMarc = orimarc; + + SetMarcItemInfo(item, + saveResult.newidx, + PUB.user.CompanyIdx, + orimarc, + v_grade, + PUB.user.UserName, + saveResult.date, + string.Empty); + + // 3. 목록 인덱스 연동 업데이트 (Obj_List_Book) string UpdateListIndex = string.Format("UPDATE `Obj_List_Book` SET `m_idx` = {0} WHERE `idx` = {1} AND `compidx` = \"{2}\";", item.MarcIdx, item.ListIdx, mCompidx); Helper_DB.ExcuteNonQuery(UpdateListIndex); + //업데이트되도록 원래데이터를 초기화한다 260308 + mOldMarc = string.Empty; + mOldMarIdx = -1; + // 4. BindingSource 갱신으로 UI 자동 업데이트 - bs1.ResetCurrentItem(); bs1_CurrentChanged(null, null); UTIL.MsgI("저장되었습니다!"); } @@ -1080,7 +1091,13 @@ namespace UniMarc { if (!mLoadCompleted) return; var dr = bs1.Current as MarcBookItem; - if (dr == null) return; + if (dr == null) + { + mOldMarIdx = -1; + return; + } + + if (mOldMarc == null) mOldMarc = string.Empty; //if (List_Book.CurrentCell == null) return; //int row_idx = List_Book.CurrentCell.RowIndex; @@ -1152,26 +1169,27 @@ namespace UniMarc OriginalMarc = dbMarc, }; var defMarc = PUB.MakeEmptyMarc(isbn13, bookName, author, publisher, price); - marcEditorControl1.LoadBookData(dbMarc, isbn13, defMarc); + var load_ret = marcEditorControl1.LoadBookData(dbMarc, isbn13, defMarc); //등급선택 (dbMarc 데이터를 확인하여. 등급을 결정한다) int gradeNo; - bool check_Marc = dbMarc.Length >= 3; - if (!check_Marc) + if (load_ret ==false) { //richTextBox1.Text = Make_Empty(); gradeNo = 3; //마크가 없는것은 D등급으로 한다 + remark.remark1 = string.Empty; + remark.remark2 = string.Empty; } else { - etc1.Text = remark.remark1; - etc2.Text = remark.remark2; - //자료의 등급 다시 선택 if (int.TryParse(grade, out gradeNo) == false) gradeNo = 2; } + etc1.Text = remark.remark1; + etc2.Text = remark.remark2; + uC_SelectGrade1.Grade = gradeNo; lbl_SaveData.Multiline = true; diff --git a/unimarc/unimarc/마크/MarcEditorControl.cs b/unimarc/unimarc/마크/MarcEditorControl.cs index 0c830b1..0735f03 100644 --- a/unimarc/unimarc/마크/MarcEditorControl.cs +++ b/unimarc/unimarc/마크/MarcEditorControl.cs @@ -122,7 +122,7 @@ namespace UniMarc /// /// /// - public void LoadBookData(string dbMarc, string isbn = "", string defaultMarc = "") + public bool LoadBookData(string dbMarc, string isbn = "", string defaultMarc = "") { mLoadCompleted = false; richTextBox1.Text = ""; @@ -182,6 +182,8 @@ namespace UniMarc UpdateTextColor(); mLoadCompleted = true; + + return check_Marc; } diff --git a/unimarc/unimarc/마크/Marc_Plan.cs b/unimarc/unimarc/마크/Marc_Plan.cs index 09fd749..1654bd5 100644 --- a/unimarc/unimarc/마크/Marc_Plan.cs +++ b/unimarc/unimarc/마크/Marc_Plan.cs @@ -173,7 +173,19 @@ namespace UniMarc item.SBookNum2 = dr["s_book_num2"].ToString(); item.Author = dr["author"].ToString(); item.BookComp = dr["book_comp"].ToString(); - item.Price = dr["price"] != DBNull.Value ? Convert.ToInt32(dr["price"]) : 0; + if(dr["price"] ==DBNull.Value) + { + item.Price = 0; + } + else + { + var str_price = dr["price"].ToString(); + if (int.TryParse(str_price, out int v_price)) + item.Price = v_price; + else + item.Price = 0; + } + item.Midx = dr["midx"] != DBNull.Value ? Convert.ToInt32(dr["midx"]) : 0; item.etc1 = dr["etc1"]?.ToString() ?? string.Empty; item.etc2 = dr["etc2"]?.ToString() ?? string.Empty; diff --git a/unimarc/unimarc/마크/Marc_Plan_Sub_SelectList.cs b/unimarc/unimarc/마크/Marc_Plan_Sub_SelectList.cs index 6e3df83..9f7bbe3 100644 --- a/unimarc/unimarc/마크/Marc_Plan_Sub_SelectList.cs +++ b/unimarc/unimarc/마크/Marc_Plan_Sub_SelectList.cs @@ -307,7 +307,8 @@ namespace UniMarc else if (v_110a.isEmpty() == false) v_author = v_110a; else if (v_100a.isEmpty() == false) v_author = v_100a; - + var str_price = fullparser.GetTag("950b").FirstOrDefault() ?? string.Empty; + int.TryParse(str_price, out int v_price); var item = new MarcPlanItem { RegNum = fullparser.GetTag("049l").FirstOrDefault(),// Search_Res[0], 등록번호 @@ -324,7 +325,7 @@ namespace UniMarc SBookNum2 = fullparser.GetTag("490v").FirstOrDefault(),//Search_Res[11],총서번호2 Author = v_author, BookComp = fullparser.GetTag("260b").FirstOrDefault(),//Search_Res[12],출판사 - Price = Convert.ToInt32(fullparser.GetTag("950b").FirstOrDefault()),//Search_Res[13],정가 + Price = v_price,//Convert.ToInt32(fullparser.GetTag("950b").FirstOrDefault()),//Search_Res[13],정가 Marc = fullmarc, ColCheck = "T" };