using System; using CoreSavingLibrary; using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Xml.Linq; using Sybase.DataWindow; using DataLibrary; using CoreSavingLibrary.WcfNKeeping; using System.Web.Services.Protocols; using System.Globalization; using System.Threading.Tasks; using System.IO; using System.Threading; using System.ServiceModel.Description; using System.ServiceModel; namespace Saving.Applications.keeping { public partial class w_sheet_kp_slcls_year_shrlon : PageWebSheet, WebSheet { //ประกาศตัวแปร #region Variable private n_keepingClient KeepingService; protected String postNewClear; protected String postRefresh; protected String postProcClsYear; //mikekong new process public string outputProcess; protected String Call_process; public String logsFilePath = ""; Sta taSrc = null; Sta taSrcQuery = null; String results = "", results_sql = ""; String coopid = "", msg = ""; String sql = "", sql_where = ""; #endregion //============================================ #region Websheet Members public void InitJsPostBack() { //========================================= postNewClear = WebUtil.JsPostBack(this, "postNewClear"); postRefresh = WebUtil.JsPostBack(this, "postRefresh"); postProcClsYear = WebUtil.JsPostBack(this, "postProcClsYear"); } public void WebSheetLoadBegin() { Hd_process.Value = "false"; if (!IsPostBack) { JspostNewClear(); } else { this.RestoreContextDw(Dw_option); this.RestoreContextDw(Dw_list); } } public void CheckJsPostBack(string eventArg) { // Event ที่เกิดจาก JavaScript switch (eventArg) { case "postNewClear": JspostNewClear(); break; case "postRefresh": //Refresh(); break; case "postProcClsYear": JspostProcClsYear(); break; } } public void SaveWebSheet() { } public void WebSheetLoadEnd() { Dw_option.SaveDataCache(); Dw_list.SaveDataCache(); } #endregion //============================================= public void runProgress(WebState state, String obj, String xml1, String xml2, String xml3) { outputProcess = WebUtil.runProcessingCappExtend(state, obj, xml1, xml2, xml3); } private XmlConfigService xml; //ส่วนเรียก Processing หลัก public void runObjectProcessing(String outputProcess, XmlConfigService xmlConfig, String object_name, String criteria_xml, String criteria_xml_1, String criteria_xml_2) { this.xml = xmlConfig; initProcessing(outputProcess, object_name, criteria_xml, criteria_xml_1, criteria_xml_2); if (object_name == "runPostProcess") { WriteLine("runPostProcess"); runPostProcess(); } closeProcessing("Main"); } //function การหาปีปันผล จากตารางปีบัญชี private void JspostSetYear() { try { taSrc = new Sta(state.SsConnectionString); taSrcQuery = new Sta(state.SsConnectionString); taSrc.Transection(); int li_year = 0; String sql = @"select min(account_year) from accaccountyear where close_account_stat = 0"; Sdt dt = taSrcQuery.Query(sql); if (dt.Next()) { li_year = int.Parse(dt.GetString("min(account_year)")) + 543; years.Text = li_year.ToString(); //Dw_option.SetItemDecimal(1, "clsyr_year", Convert.ToDecimal(li_year)); } else { sqlca.Rollback(); } } catch (Exception ex) { LtServerMessage.Text = WebUtil.ErrorMessage(ex.Message); } } // function เคลียร์หน้าจอ private void JspostNewClear() { Dw_option.Reset(); Dw_option.InsertRow(0); Dw_option.SetItemString(1, "application", state.SsApplication); Dw_option.SetItemDateTime(1, "operate_date", state.SsWorkDate); Dw_option.SetItemDateTime(1, "entry_date", state.SsWorkDate); Dw_option.SetItemString(1, "coop_id", state.SsCoopId); Dw_option.SetItemString(1, "entryby_coopid", state.SsCoopId); Dw_option.SetItemString(1, "entry_id", state.SsUsername); JspostSetYear(); // JspostInitLoan(); } // function ประมาณผลปันผลเฉลี่ยคืน private void JspostProcClsYear() { try { this.connectionString = state.SsConnectionString; String slip_date = state.SsWorkDate.ToShortDateString(); // รับค่าจากหน้าจอ String coop_id = state.SsCoopId; String log_file = "trans_log_" + coop_id.Replace(",", "-") + "_" + slip_date.Replace("/", "-") + ".log"; String xml = "" + "" + coop_id + "" + "" + slip_date + "" + "1" + "1" + "" + log_file + ""; //post_flag 0:View , 1:run Import outputProcess = WebUtil.runProcessingCappExtend(state, "runPostProcess", xml, "", ""); //Task.Factory.StartNew(() => this.runProgress(state,"runPostProcess", xml, "", "")); logsFilePath = Environment.GetEnvironmentVariable("windir") + "\\Temp\\" + log_file; HdLogFile.Value = logsFilePath; Task.Factory.StartNew(() => this.runObjectProcessing(outputProcess, this.xmlconfig, "runPostProcess", xml, "", "")); //this.runObjectProcessing(outputProcess, "runPostProcess", xml, "", ""); File.WriteAllText(logsFilePath, "<<ประมวลเสร็จกดดูรายละเอียดที่ Log>>"); // Hd_process.Value = "true"; } catch (Exception ex) { LtServerMessage.Text = WebUtil.ErrorMessage(ex.ToString()); } } public void runPostProcess() { int allStep = 1;//กำหนด Step ทั้งหมด //ดึงค่าจาก XML criteria_xml = FIELD payrate_code string[] coop_id = getXMLStringValue(criteria_xml, "coop_id").Split(','); string slip_date = getXMLStringValue(criteria_xml, "slip_date"); string log_file = getXMLStringValue(criteria_xml, "log_file"); bool logssql_flag = getXMLStringValue(criteria_xml, "logssql_flag") == "1"; bool post_flag = getXMLStringValue(criteria_xml, "post_flag") == "1"; DateTime process_date = DateTime.Now; DateTime slip_date_dt = DateTime.ParseExact(slip_date, "MM/dd/yyyy", new CultureInfo("en-US")); String slip_date_str = slip_date_dt.ToString("yyyy/MM/dd"); String slip_yymm = (Convert.ToInt32(slip_date_dt.ToString("yyyy")) + 543 - 2500) + slip_date_dt.ToString("MM") + "0"; //yyMM in Thai String slip_yymm_new = "S" + (Convert.ToInt32(slip_date_dt.ToString("yyyy")) + 543 - 2500) + slip_date_dt.ToString("MM") + ""; //yyMM in Thai // String results = "", results_sql = ""; startProcessMsgLog("กำลังดำเนินการเริ่มประมวลผล ดึงข้อมูล " + slip_date + ":" + coop_id.ToString(), allStep); //Thread.Sleep(5000); //เขียนงานที่ต้องทำ ตรงนี้ bool status = false; String msg_err = ""; String system_code = "SHR", source_code = "WFS"; logResultTextFile(logsFilePath, ref results, ref results_sql, true, post_flag, true); try { taSrc = new Sta(state.SsConnectionString); taSrcQuery = new Sta(state.SsConnectionString); taSrc.Transection(); // Response.Cookies["test"].Value = state.SsConnectionString; results += (post_flag ? "ประมวลข้อมูล" : "ตรวจสอบประมวลข้อมูล") + " \r\n"; msg = "STEP:" + 1 + ":เตรียมประมวลข้อมูล "; updateProcessMsgLog(msg, 1); sql = "";//ดึงค่าคงที่ มาเพื่อทำการ Loop ประมวลตั้งยอด results += msg + " \r\n"; results_sql += sql + " ;\r\n"; logResultTextFile(logsFilePath, ref results, ref results_sql, true, post_flag, false); //1.ประมวลดึงรายการตาม Table ตั้งยอดรายเดือนของสมาชิกแต่ละคนมายิงสร้าง SLTRANSPAYIN ไว้ // ทำยอดหุ้นยกมาต้นปี decimal year = Convert.ToDecimal(years.Text); DateTime ldtm_operate = state.SsWorkDate; //set วันที่ยกมาต้นปี string sql2 = "select (accend_date +1) as accend_date from cmaccountyear where account_year = {0} and coop_id={1}"; sql2 = WebUtil.SQLFormat(sql2, year, state.SsCoopId); Sdt dtIns = taSrcQuery.Query(sql2); if (dtIns.Next()) { ldtm_operate = dtIns.GetDate("accend_date"); } of_clsyear_genbfshr(ldtm_operate); //// ทำยอดหนี้ยกมาต้นปี of_clsyear_genbfloan(ldtm_operate); // Reset ยอด ด/บ สะสม of_clsyear_genbfintacc(); // Reset เลขที่เอกสาร of_clsyear_gennewdoc(); // Update สถานะการปิดสิ้นปี of_clsyear_updatestatus(); status = true; // LtServerMessage.Text = WebUtil.CompleteMessage("ตั้งดอกเบี้ยค้าง สำเร็จ"); } catch (Exception e) { WriteLine(e.Message); //กรณีทำรายการ และ Error msg_err = e.Message; status = false; } finally { try { taSrc.Close(); taSrcQuery.Close(); wcf.Close(); } catch { } } //Thread.Sleep(3000); //กรณีทำรายการเสร็จสมบรูณ์ if (status) { finishProcessMsgLog("ทำรายการสำเร็จ", allStep); } else { cancelProcessMsgLog("ทำรายการไม่สำเร็จ" + msg_err + " "); } } private void of_clsyear_updatestatus() { string ls_appl, ls_desc, ls_applgrp="", ls_branch, ls_entryid; DateTime ldtm_today; decimal li_nextyear; ls_appl = state.SsApplication; ls_branch = state.SsCoopControl; ls_entryid = state.SsUsername; ldtm_today = state.SsWorkDate; li_nextyear = Convert.ToDecimal(years.Text) + 1; taSrc = new Sta(state.SsConnectionString); taSrcQuery = new Sta(state.SsConnectionString); taSrc.Transection(); taSrcQuery.Query(@"update mbmembmaster set dividend_flag = 0, average_flag = 0 where resign_status = 0 and member_no in ( select member_no from shsharemaster where sharestk_amt <= 0 ) "); //if sqlca.sqlcode =FAILURE then // messagebox( "ปิดงานสิ้นปี", "update สถานะการรับเงินปันผล" ) // dw_data.setitem( 1, "updcls_status", -9 ) // return -1 //end if Sdt ap = taSrcQuery.Query(@"select description, applgroup_code from amappstatus where ( application = '" + ls_appl + "' ) and ( coop_id = '" + ls_branch + "' )"); if(ap.Next()){ ls_desc = ap.GetString("description"); ls_applgrp= ap.GetString("applgroup_code"); } //if isnull( ls_applgrp ) or trim( ls_applgrp ) = "" then // messagebox( "ปิดงานสิ้นปี", "ไม่พบข้อมูลกลุ่มระบบงาน ( applgroup_code ) ของระบบ '"+trim( ls_desc )+"' กรุณาติดต่อผู้ดูแลระบบ" ) // dw_data.setitem( 1, "updcls_status", -9 ) // return -1 //end if String amappstatus = @" update amappstatus set closeyear_status = 1, closeyear_id = {0}, closeyear_date = {1}, current_accyear = {2} where ( applgroup_code = {3} )"; amappstatus = WebUtil.SQLFormat(amappstatus, ls_entryid, ldtm_today, li_nextyear, ls_applgrp); taSrcQuery.Query(amappstatus); msg = "[5/5] update สถานะการรับเงินปันผล "; taSrcQuery.Query("update cmprocessing set runtime_message='" + msg + "' where process_id='" + process_id + "'"); results += msg + " \r\n"; logResultTextFile(logsFilePath, ref results, ref results_sql, true, true, false); } private void of_clsyear_gennewdoc() { } private void of_clsyear_genbfintacc() { string ls_memno, ls_contno, ls_branch; long ll_index, ll_count; int li_stepvalue; Decimal ldc_intaccum, ldc_prinbal; ls_branch = state.SsCoopControl; taSrc = new Sta(state.SsConnectionString); taSrcQuery = new Sta(state.SsConnectionString); taSrc.Transection(); // Reset ยอดดอกเบี้ยสะสมปีที่แล้ว taSrcQuery.Query(@"update lncontmaster set intaccum_lastyear = 0, prncbalbegin_amt = 0 "); // บันทึกยอดดอกเบี้ยสะสมปีนี้เก็บไว้ taSrcQuery.Query(@"update lncontmaster set intaccum_lastyear = interest_accum, prncbalbegin_amt = principal_balance") ; // บันทึกยอดดอกเบี้ยสะสมปีนี้เก็บไว้ taSrcQuery.Query(@"update lncontmaster set interest_accum = 0 "); // บันทึกยอดดอกเบี้ยสะสมปีนี้เก็บไว้ taSrcQuery.Query(@"update mbmembmaster set accum_interest = 0") ; //if sqlca.sqlcode <> 0 then // messagebox( "ตั้งยอดดอกเบี้ยสะสม", "ไม่สามารถ Clear ยอดดอกเบี้ยสะสมสำหรับปีใหม่ได้ "+sqlca.sqlerrtext ) // dw_data.setitem( 1, "reset_intacc", -9 ) // return -1 //end if msg = "[3/5] บันทึกยอดดอกเบี้ยสะสมปีนี้เก็บไว้ " ; taSrcQuery.Query("update cmprocessing set runtime_message='" + msg + "' where process_id='" + process_id + "'"); results += msg + " \r\n"; logResultTextFile(logsFilePath, ref results, ref results_sql, true, true, false); } private void of_clsyear_genbfloan(DateTime ldtm_operate2) { string ls_memno, ls_contno, ls_branch, ls_lnbranchid, ls_entryid; int li_stepvalue, li_seqno=0, li_period, li_laststmno, li_nextyear; DateTime ldtm_operate, ldtm_today, ldtm_endyear, ldtm_entrydate; Decimal ldc_prnarrear, ldc_balance, ldc_intarrear, ldc_finearrear; taSrc = new Sta(state.SsConnectionString); taSrcQuery = new Sta(state.SsConnectionString); taSrc.Transection(); ls_branch = state.SsCoopControl; Sdt loan = taSrcQuery.Query(@"SELECT LNCONTMASTER.LOANCONTRACT_NO , LNCONTMASTER.COOP_ID , LNCONTMASTER.MEMBER_NO , LNCONTMASTER.LOANTYPE_CODE , LNCONTMASTER.LOANREQUEST_AMT , LNCONTMASTER.LOANAPPROVE_AMT , LNCONTMASTER.STARTCONT_DATE , LNCONTMASTER.PRINCIPAL_BALANCE , LNCONTMASTER.PERIOD_PAYAMT , LNCONTMASTER.PERIOD_PAYMENT , LNCONTMASTER.LASTCALINT_DATE , LNCONTMASTER.LAST_STM_NO , LNCONTMASTER.LASTPAYMENT_DATE , LNCONTMASTER.PRINCIPAL_ARREAR , LNCONTMASTER.INTEREST_ARREAR , LNCONTMASTER.FINE_ARREAR , LNCONTMASTER.FINEYEAR_ARREAR FROM LNCONTMASTER WHERE ( LNCONTMASTER.PRINCIPAL_BALANCE > 0 ) and contract_status=1"); Sdt accend_date = taSrcQuery.Query(@"select accend_date from cmaccountyear where account_year = " + Convert.ToDecimal(years.Text) + ""); if(accend_date.Next()){ ldtm_endyear = accend_date.GetDate("accend_date"); } ldtm_operate = state.SsWorkDate; // Reset หุ้นยกมาของเก่าทั้งหมด taSrcQuery.Query(@"update lncontmaster set prncbalbegin_amt = 0, intyear_arrear = 0, fineyear_arrear = 0") ; ldtm_operate = ldtm_operate.AddDays(1); while(loan.Next()){ ls_lnbranchid = loan.GetString("coop_id"); ls_memno = loan.GetString("member_no"); ls_contno = loan.GetString("loancontract_no"); ldc_balance = loan.GetDecimal("principal_balance"); ldc_prnarrear = loan.GetDecimal("principal_arrear"); ldc_intarrear = loan.GetDecimal("interest_arrear"); ldc_finearrear = loan.GetDecimal("fine_arrear"); Sdt sno = taSrcQuery.Query(@"select max(seq_no) as li_seqno from lncontstatement where loancontract_no = '"+ls_contno+"'") ; if(sno.Next()){ li_seqno = sno.GetInt32("li_seqno"); } li_seqno++; decimal year = Convert.ToDecimal(years.Text); DateTime calfine_date = state.SsWorkDate; //set วันที่ยกมาต้นปี try { string sql = "select (accend_date) as accend_date from cmaccountyear where account_year = {0} and coop_id={1}"; sql = WebUtil.SQLFormat(sql, year, state.SsCoopId); Sdt dtIns = taSrcQuery.Query(sql); if (dtIns.Next()) { calfine_date = dtIns.GetDate("accend_date"); } } catch { } try { string sqlfine = @"select lastcalfine_date,principal_arrear,expireperiod_date,lastcalfine_date from lncontperiodpaydet where loancontract_no= {0} and principal_arrear > 0 and expireperiod_date < {1} and coop_id={2} order by period asc"; sqlfine = WebUtil.SQLFormat(sqlfine, ls_contno, calfine_date, state.SsCoopId); Sdt sqlfine_td = taSrcQuery.Query(sqlfine); if (sqlfine_td.Next()) { calfine_date = state.SsWorkDate; //ถ้า มีต้นค้างแสดงว่า เคยมีที่หมด งวด ไปแล้ว ให้ calfinefrom_date และ calfineto_date เท่ากับวันปิดสิดสิ้น ปีไปเลย }else{ string sqlfine2 = @"select expireperiod_date from lncontperiodpaydet where loancontract_no ={0} and period_payment <> prinpaid_amt and expireperiod_date >={1} and rownum <=1 and coop_id={2}"; sqlfine2 = WebUtil.SQLFormat(sqlfine2, ls_contno, calfine_date,state.SsCoopId); Sdt sqlfine2_td = taSrcQuery.Query(sqlfine2); if (sqlfine2_td.Next()) { calfine_date = sqlfine2_td.GetDate("expireperiod_date"); } } } catch { } // เพิ่มรายการเคลื่อนไหว String lncontstatement = @" insert into lncontstatement ( loancontract_no, seq_no, coop_id, slip_date, operate_date, ref_docno, loanitemtype_code, period, principal_payment, interest_payment, principal_balance, calint_from, calint_to, bfintarrear_amt, bfint_preiod, interest_arrear, interest_return, entry_id, entry_date, bfprincipal_arrear, moneytype_code, item_status, bffine_preiod, fine_payment, bffine_arrear , intarr_payment , principalpay_period, finearr_payment, bffineyear_amt, bfintyeararr_amt,interest_period,fine_period,calfinefrom_date,calfineto_date) values ( {0}, {1},{2}, {3},{4}, 'ยกมา', 'B/F', 0, {5}, 0, {6}, {7}, {8},{9},{10}, {11}, 0, {12},{13},{14}, 'TRN', 1, {15}, 0, {16}, 0 , 0, 0, {17}, {18},0,0,{19},{20})"; lncontstatement = WebUtil.SQLFormat(lncontstatement, ls_contno, li_seqno, ls_lnbranchid, ldtm_operate2, ldtm_operate2, ldc_balance, ldc_balance, ldtm_operate2, ldtm_operate2, ldc_intarrear, ldc_intarrear, 0, state.SsUsername, state.SsWorkDate, ldc_prnarrear, ldc_finearrear, ldc_finearrear, ldc_finearrear, ldc_intarrear, calfine_date, calfine_date); taSrcQuery.Query(lncontstatement); // บันทึกยอดยกมาต้นปี taSrcQuery.Query(@"update lncontmaster set last_stm_no = "+li_seqno+" , prncbalbegin_amt = "+ldc_balance+","+ "intyear_arrear = "+ldc_intarrear+", fineyear_arrear = "+ldc_finearrear+" , bfprincipalyear_arrear = "+ldc_balance+","+ " bfinterestyear_arrear = "+ldc_intarrear+", bffineyear_arrear = "+ldc_finearrear+" where loancontract_no = '"+ls_contno+"'") ; msg = "[2/5] กำลังทำหนี้ ยกมา " + ls_memno + " เลขสัญญา " + ls_contno + " [" + loan.GetRowIndex() + "/" + loan.GetRowCount() + "]"; taSrcQuery.Query("update cmprocessing set runtime_message='" + msg + "' where process_id='" + process_id + "'"); results += msg + " \r\n"; logResultTextFile(logsFilePath, ref results, ref results_sql, true, true, false); } } private void of_clsyear_genbfshr(DateTime ldtm_operate2) { string ls_memno, ls_sharetype, ls_branch; long ll_index, ll_countshr, ll_row, ll_count; int li_stepvalue, li_seqno=0, li_period, li_laststmno, li_nextyear; DateTime ldtm_operate, ldtm_today, ldtm_endyear; decimal ldc_shrstkamt=0; taSrc = new Sta(state.SsConnectionString); taSrcQuery = new Sta(state.SsConnectionString); taSrc.Transection(); ls_branch = state.SsCoopControl; Sdt share = taSrcQuery.Query(@" SELECT SHSHAREMASTER.MEMBER_NO , SHSHAREMASTER.SHARETYPE_CODE , SHSHAREMASTER.SHARESTK_AMT , SHSHAREMASTER.LAST_PERIOD , SHSHAREMASTER.SHAREMASTER_STATUS , SHSHAREMASTER.PERIODSHARE_AMT , SHSHAREMASTER.PAYMENT_STATUS , SHSHAREMASTER.LAST_STM_NO FROM SHSHAREMASTER WHERE ( SHSHAREMASTER.SHARESTK_AMT > 0 )"); try { Convert.ToDecimal(years.Text); } catch { } Sdt accend_date = taSrcQuery.Query(@"select accend_date from cmaccountyear where account_year = " + Convert.ToDecimal(years.Text) + ""); if(accend_date.Next()){ ldtm_endyear = accend_date.GetDate("accend_date"); } ldtm_operate = state.SsWorkDate; // Reset หุ้นยกมาของเก่าทั้งหมด taSrcQuery.Query(@"update shsharemaster set sharebegin_amt = 0, sharearrearbf_amt = 0 "); ldtm_operate = ldtm_operate.AddDays(1); while(share.Next()){ ls_sharetype = share.GetString("sharetype_code"); ls_memno = share.GetString("member_no"); ldc_shrstkamt = share.GetDecimal("sharestk_amt"); li_period = share.GetInt32("last_period"); li_laststmno = share.GetInt32("last_stm_no"); Sdt sno = taSrcQuery.Query(@"select max(seq_no) as li_seqno from shsharestatement where member_no = '"+ls_memno+"'") ; if(sno.Next()){ li_seqno = sno.GetInt32("li_seqno"); } li_seqno++; String shsharestatement = @" insert into shsharestatement ( member_no , sharetype_code, seq_no , shritemtype_code, period, ref_docno ,operate_date, share_amount, sharestk_amt , slip_date,coop_id) values ( {0}, {1}, {2}, 'B/F', {3}, 'ยกมา',{4},{5},{6}, {7},{8}) "; shsharestatement = WebUtil.SQLFormat(shsharestatement,ls_memno, ls_sharetype, li_seqno, li_period, ldtm_operate, ldc_shrstkamt, ldc_shrstkamt, ldtm_operate2, state.SsCoopControl); taSrcQuery.Query(shsharestatement); //if sqlca.sqlcode = FAILURE then // messagebox('',sqlca.sqlerrtext) // rollback; //end if // บันทึกยอดยกมาต้นปี taSrcQuery.Query(@"update shsharemaster set sharebegin_amt = "+ldc_shrstkamt+","+ "last_stm_no= "+li_seqno+", sharearrearbf_amt = sharearrear_amt where member_no = '"+ls_memno+"' and sharetype_code = '"+ls_sharetype+"' "); msg = "[1/5] กำลังทำหุ้นยกมา " + ls_memno + " [" + share.GetRowIndex() + "/" + share.GetRowCount() + "]"; taSrcQuery.Query("update cmprocessing set runtime_message='" + msg + "' where process_id='" + process_id + "'"); results += msg + " \r\n"; logResultTextFile(logsFilePath, ref results, ref results_sql, true, true, false); } } } }