//// 多筆發票號碼回傳錯誤 //public static string PluralInvoice(string meg) //{ // string rtcode = ""; // string rtmsg = ""; // foreach (var item in meg) // { // string[] array = item.ToString().Split(';'); // array = array[0].Split(','); // } // return "rtcode=" + rtcode + "&rtmsg=" + rtmsg; //} public static string ShowErrorMessage(string rtcode, string id, string meg, bool Email) { einvoiceEntities db = new einvoiceEntities(); string rtmsg = ""; string Exrtmsg = ""; try { string mmesg = ErrString(rtcode, meg); // string mmesg = "[代碼:" + rtcode + " 訊息:" + rtmsg + " " + meg + "]"; rtmsg = GetErrMeg(rtcode); Exrtmsg = "rtcode=" + rtcode + "&rtmsg=" + Convert.ToBase64String(Encoding.UTF8.GetBytes(rtmsg + " " + meg)); if (Email) { //發送通知信件給營業人&加值中心管理者 string send_to = db.EI_BAS_COMPANY.Where(o => o.tax_number == id).Select(o => o.comp_email).First(); string mail_content = "您好:剛才貴公司上傳的發票內容有誤,檢查其內容後重新上傳,謝謝!<br/>" + "<span style=" + "\"color: rgb(235, 55, 55); font-size: 18px; " + "\">" + mmesg + "</span>"; SendMail(send_to, "[上傳發票內容發生錯誤]通知", mail_content); } } catch (Exception ex) { return(Exrtmsg); throw; } return(Exrtmsg); }
// 註銷發票 public static void InvoiceCancellation(DataTable InvoiceDetails, string id, string user) { using (einvoiceEntities db = new einvoiceEntities()) { foreach (DataRow oRow in InvoiceDetails.Rows) { //針對舊資料 string date = oRow["InvoiceDate"].ToString().Substring(0, 4) + "/" + oRow["InvoiceDate"].ToString().Substring(4, 2) + "/" + oRow["InvoiceDate"].ToString().Substring(6, 2); string date2 = oRow["InvoiceDate"].ToString().Substring(0, 4) + "-" + oRow["InvoiceDate"].ToString().Substring(4, 2) + "-" + oRow["InvoiceDate"].ToString().Substring(6, 2); // 不知道為什麼直接用oRow["InvoiceNumber"]他不給過?? string InvoiceNumber = oRow["InvoiceNumber"].ToString(); var data = db.EI_INV_MASTERDATA.Where(o => o.tax_number == id && o.inv_no == InvoiceNumber && (o.inv_date == date || o.inv_date == date2)).ToList(); if (data.Count > 0) { data.FirstOrDefault().inv_type = "3"; data.FirstOrDefault().inv_status = "1"; data.FirstOrDefault().void_date = DateTime.Now.ToString("yyyy/MM/dd"); data.FirstOrDefault().void_time = DateTime.Now.ToString("HH:mm:ss"); data.FirstOrDefault().void_reason = "user void"; } //新增要給Turnkey的訊息佇列 //B2C存證:C0501、B2B存證:A0501、B2B交換:A0201 db.EI_INV_MESSAGEQUEUE.Add(new EI_INV_MESSAGEQUEUE() { msg_kind = "C0701", send_id = id, recv_id = "", inv_no = oRow["InvoiceNumber"].ToString(), add_dt = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), }); //新增處理記錄 db.EI_INV_PROCESSLOG.Add(new EI_INV_PROCESSLOG() { tax_number = id, inv_no = oRow["InvoiceNumber"].ToString(), add_dt = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), proc_remark = "註銷發票[待處理]" }); } db.SaveChanges(); } }
//發票號碼不在可開立字軌區間內 public static bool CheckRange(string id, string user, string year, string period, string header, string inv_no_t) { bool found = false; einvoiceEntities db = new einvoiceEntities(); var data_account = db.EI_INV_USABLEDATA.Where(o => o.tax_number == id && o.year == year && o.period == period && o.header == header && o.user_account == user).ToList(); var data_All = db.EI_INV_USABLEDATA.Where(o => o.tax_number == id && o.year == year && o.period == period && o.header == header && o.user_account == "ALL").ToList(); // 判斷user_account int inv_no = int.Parse(inv_no_t); if (data_account.Count() > 0) { // 可能開好幾本,依序去對應,例如YY00000000~YY00000999、YY00001000~YY99999999 foreach (var item in data_account) { int begin_no = int.Parse(item.begin_no); int end_no = int.Parse(item.end_no); if (inv_no >= begin_no && inv_no <= end_no) { found = true; break; } } } // 判斷ALL else if (data_All.Count() > 0) { foreach (var item in data_All) { int begin_no = int.Parse(item.begin_no); int end_no = int.Parse(item.end_no); if (inv_no >= begin_no && inv_no <= end_no) { found = true; break; } } } return(found); }
private static String GetErrMeg(string code) { einvoiceEntities db = new einvoiceEntities(); var data = db.EI_ERR_MESSAGE.Where(o => o.code == code).Select(o => o).ToList(); string Errmes = ""; if (data.Count > 0) { Errmes = data[0].message; } return(Errmes); }
//字軌期別與發票開立日期不符 public static bool CheckWordTrackDate(string id, string year, string period, string header) { bool found = true; einvoiceEntities db = new einvoiceEntities(); var data = db.EI_INV_USABLEDATA.Where(o => o.tax_number == id && o.year == year && o.period == period && o.header == header).ToList(); if (data.Count() == 0) { found = false; } return(found); }
// 判斷發票存在 public static bool FindInvoice(string tax_number, string invoice) { einvoiceEntities db = new einvoiceEntities(); bool result = false; var data = (from p in db.EI_INV_MASTERDATA where p.tax_number == tax_number && p.inv_no == invoice select p).ToList(); if (data.Count() > 0) { return(true); } return(result); }
// 判斷發票重覆 public static bool checkinvoice(string tax_number, string invoice) { einvoiceEntities db = new einvoiceEntities(); bool result = false; var data = (from p in db.EI_INV_MASTERDATA where p.tax_number == tax_number && p.inv_no == invoice && (int.Parse(p.inv_type) != 3 && int.Parse(p.inv_status) != 99) select p).Take(1).ToList(); if (data.Count() > 0) { result = true; } return(result); }
// 判斷當期字軌 public static bool CurrentCurrentWordTrack(string year, string period, string header) { einvoiceEntities db = new einvoiceEntities(); bool result = false; if (String.IsNullOrEmpty(period)) { var data = db.EI_INV_YEARDATA.Where(o => o.year == year && o.header == header).ToList(); if (data.Count > 0) { result = true; } } else { var data = db.EI_INV_YEARDATA.Where(o => o.year == year && o.header == header && o.period == period).ToList(); if (data.Count > 0) { result = true; } } return(result); #region //myConn.Open(); //string strSQL = "Select * From EI_INV_YEARDATA Where year = @year And period = @period And header = @header "; //SqlCommand cmd = new SqlCommand(strSQL, myConn); //cmd.Parameters.AddWithValue("@year", year); //cmd.Parameters.AddWithValue("@period", period); //cmd.Parameters.AddWithValue("@header", header); //SqlDataReader reader = cmd.ExecuteReader(); //if (reader.HasRows) // result = true; //reader.Close(); //cmd.Dispose(); //myConn.Close(); //return result; #endregion }
public static string CheckUser(string id, string user, string passwd) { einvoiceEntities db = new einvoiceEntities(); var data = (from p in db.EI_SYS_USERDATA where p.tax_number == id && p.user_id == user select p).ToList(); if (data.Count > 0) { if (data[0].user_pwd != passwd) { return(ErrMeg.ErrString("1004", "")); } } else { return(ErrMeg.ErrString("1001", "查無使用者資料")); } return(""); }
public static string Invoice_GetTrackList(string id, int year, string user, int period, int size) { int i = 0; using (einvoiceEntities db = new einvoiceEntities()) { var data = db.EI_INV_USABLEDATA.Where(o => o.tax_number == id && o.year == year.ToString() && o.period == period.ToString() && o.status == "Y" && (o.user_account == "ALL" || o.user_account == user)). OrderBy(o => o.begin_no).ToList(); int nowsize = size; string re = ""; foreach (var item in data) { re += item.header + ","; //已有開立過的資料 if (!string.IsNullOrEmpty(data[i].now_no.ToString())) { // 此筆張數 int totalecount = int.Parse(item.end_no) - int.Parse(item.now_no); re += (int.Parse(item.now_no) + 1).ToString().PadLeft(8, '0') + ","; // 所取張數大於此筆張數 if (nowsize > totalecount) { item.now_no = item.end_no; nowsize = nowsize - totalecount; } else { item.now_no = (int.Parse(item.now_no) + nowsize).ToString().PadLeft(8, '0'); nowsize = 0; } } else //未開立過的資料 { // 此筆張數 int totalecount = int.Parse(item.end_no) - int.Parse(item.begin_no) + 1; re += item.begin_no + ","; // 所取張數大於此筆張數 if (nowsize > totalecount) { item.now_no = item.end_no; nowsize = nowsize - totalecount; } else { item.now_no = (int.Parse(item.begin_no) + nowsize - 1).ToString().PadLeft(8, '0'); nowsize = 0; } } re += item.now_no + ","; item.modify_dt = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); item.modify_user = user; // 分配完跳出 if (nowsize == 0) { break; } i++; } db.SaveChanges(); re = re.TrimEnd(','); return(ErrMeg.StatusString2("0000", "取票成功", re, size)); } }
public static void InvoiceSave(DataTable Master, DataTable Details, string id, string user, string action) { using (einvoiceEntities db1 = new einvoiceEntities()) { //Master.Rows[0]["InvoiceNumber"] = "YY00000127"; string InvoiceNumber = Master.Rows[0]["InvoiceNumber"].ToString(); string year = Master.Rows[0]["InvoiceDate"].ToString(); // 判斷主檔 var data = db1.EI_INV_MASTERDATA.Where(o => o.inv_no == InvoiceNumber).ToList(); if (data.Count == 0) { // 新增主檔=================================================================== foreach (DataRow oRow in Master.Rows) { db1.EI_INV_MASTERDATA.Add(new EI_INV_MASTERDATA() { tax_number = id, inv_no = oRow["InvoiceNumber"].ToString(), inv_date = oRow["InvoiceDate"].ToString().Substring(0, 4) + "-" + oRow["InvoiceDate"].ToString().Substring(4, 2) + "-" + oRow["InvoiceDate"].ToString().Substring(6, 2), inv_time = oRow["InvoiceTime"].ToString(), inv_type = oRow["TaxType"].ToString(), inv_status = "1", is_mailed = "N", random_no = oRow["RandomNumber"].ToString(), tax_type = oRow["TaxType"].ToString(), tax_rate = decimal.Parse(oRow["TaxRate"].ToString()), tax_amt = decimal.Parse(oRow["TaxAmount"].ToString()), taxable_amt = decimal.Parse(oRow["SalesAmount"].ToString()), freetax_amt = decimal.Parse(oRow["FreeTaxSalesAmount"].ToString()), zerotax_amt = decimal.Parse(oRow["ZeroTaxSalesAmount"].ToString()), total_amt = decimal.Parse(oRow["TotalAmount"].ToString()), print_flag = oRow["PrintMark"].ToString(), pass_way = oRow["CustomsClearanceMark"].ToString(), buy_id = oRow["BuyerIdentifier"].ToString(), buy_name = oRow["BuyerName"].ToString(), buy_address = oRow["BuyerAddress"].ToString(), buy_phone = oRow["BuyerTelephoneNumber"].ToString(), buy_mail = oRow["BuyerEmailAddress"].ToString(), car_type = oRow["CarrierType"].ToString(), car_id1 = oRow["CarrierId1"].ToString(), car_id2 = oRow["CarrierId2"].ToString(), npoban = oRow["NPOBAN"].ToString(), main_remark = oRow["MainRemark"].ToString(), add_dt = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), add_user = user }); } } else { // 註銷且完成的發票,update======================================================================= if (data.FirstOrDefault().inv_type.ToString() == "3" && data[0].inv_status.ToString() == "99") { foreach (DataRow oRow in Master.Rows) { data.FirstOrDefault().tax_number = id; data.FirstOrDefault().inv_no = InvoiceNumber; data.FirstOrDefault().inv_date = oRow["InvoiceTime"].ToString().Substring(0, 4) + "/" + oRow["InvoiceTime"].ToString().Substring(4, 2) + "/" + oRow["InvoiceTime"].ToString().Substring(6, 2); data.FirstOrDefault().inv_time = oRow["InvoiceTime"].ToString(); data.FirstOrDefault().inv_type = oRow["TaxType"].ToString(); data.FirstOrDefault().inv_status = "1"; data.FirstOrDefault().is_mailed = "N"; data.FirstOrDefault().random_no = oRow["RandomNumber"].ToString(); data.FirstOrDefault().tax_type = oRow["RandomNumber"].ToString(); data.FirstOrDefault().tax_rate = decimal.Parse(oRow["TaxRate"].ToString()); data.FirstOrDefault().tax_amt = decimal.Parse(oRow["TaxAmount"].ToString()); data.FirstOrDefault().taxable_amt = decimal.Parse(oRow["SalesAmount"].ToString()); data.FirstOrDefault().freetax_amt = decimal.Parse(oRow["FreeTaxSalesAmount"].ToString()); data.FirstOrDefault().zerotax_amt = decimal.Parse(oRow["ZeroTaxSalesAmount"].ToString()); data.FirstOrDefault().total_amt = decimal.Parse(oRow["TotalAmount"].ToString()); data.FirstOrDefault().print_flag = oRow["PrintMark"].ToString(); data.FirstOrDefault().pass_way = oRow["CustomsClearanceMark"].ToString(); data.FirstOrDefault().buy_id = oRow["BuyerIdentifier"].ToString(); data.FirstOrDefault().buy_name = oRow["BuyerName"].ToString(); data.FirstOrDefault().buy_address = oRow["BuyerAddress"].ToString(); data.FirstOrDefault().buy_phone = oRow["BuyerTelephoneNumber"].ToString(); data.FirstOrDefault().buy_mail = oRow["BuyerEmailAddress"].ToString(); data.FirstOrDefault().car_type = oRow["CarrierType"].ToString(); data.FirstOrDefault().car_id1 = oRow["CarrierId1"].ToString(); data.FirstOrDefault().car_id2 = oRow["CarrierId2"].ToString(); data.FirstOrDefault().npoban = oRow["NPOBAN"].ToString(); data.FirstOrDefault().main_remark = oRow["MainRemark"].ToString(); data.FirstOrDefault().add_dt = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); data.FirstOrDefault().add_user = user; } // 刪除原本該筆發票的所有明細 var Details_Data = db1.EI_INV_DETAILDATA.Where(o => o.tax_number == id && o.inv_no == InvoiceNumber); if (Details_Data != null) { db1.EI_INV_DETAILDATA.RemoveRange(Details_Data); } } } // 根據上面規則判斷紀錄============================================================================== if (data.Count == 0 || (data.FirstOrDefault().inv_type.ToString() == "3" && data[0].inv_status.ToString() == "99")) { // 抓明細最大值============================================================================ short num = 1; foreach (DataRow oRowo in Details.Rows) { db1.EI_INV_DETAILDATA.Add(new EI_INV_DETAILDATA() { tax_number = id, inv_no = InvoiceNumber, seq_no = num, description = oRowo["Description"].ToString(), quantity = int.Parse(oRowo["Quantity"].ToString()), unit_price = decimal.Parse(oRowo["UnitPrice"].ToString()), amount = decimal.Parse(oRowo["Amount"].ToString()), }); num++; } // 新增要給Turnkey的訊息佇列 db1.EI_INV_MESSAGEQUEUE.Add(new EI_INV_MESSAGEQUEUE() { msg_kind = action.ToUpper(), send_id = id, recv_id = "", inv_no = InvoiceNumber, add_dt = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), }); #region //if (action.ToUpper() == "C0401") //{ // db1.EI_INV_MESSAGEQUEUE.Add(new EI_INV_MESSAGEQUEUE() // { // msg_kind = "C0401", // send_id = id, // recv_id = "", // inv_no = InvoiceNumber, // add_dt = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), // }); //} //else if (action.ToUpper() == "A0401") //{ // // B2B存證 // db1.EI_INV_MESSAGEQUEUE.Add(new EI_INV_MESSAGEQUEUE() // { // msg_kind = "A0401", // send_id = id, // recv_id = "", // inv_no = InvoiceNumber, // add_dt = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), // }); //} //else if (action.ToUpper() == "A0101") //{ // // B2B交換 // db1.EI_INV_MESSAGEQUEUE.Add(new EI_INV_MESSAGEQUEUE() // { // msg_kind = "A0101", // send_id = id, // recv_id = "", // inv_no = InvoiceNumber, // add_dt = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), // }); //} //else //{ // return; //} #endregion // 新增處理記錄 db1.EI_INV_PROCESSLOG.Add(new EI_INV_PROCESSLOG() { tax_number = id, inv_no = InvoiceNumber, add_dt = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), proc_remark = "開立發票[待處理]", }); // 更新已配號號碼================================================================ // 抓目前最大的發票 string max_inv_no = db1.EI_INV_MASTERDATA.Where(o => o.tax_number == id && o.inv_date.Substring(0, 4) == year.Substring(0, 4) && o.inv_no.Substring(0, 2) == InvoiceNumber.Substring(0, 2)). Select(o => o.inv_no).Max(); // 判斷當期第一筆字軌 string now_inv; if (string.IsNullOrEmpty(max_inv_no)) { now_inv = InvoiceNumber.Substring(2, 8); } if (int.Parse(max_inv_no.Substring(2, 8)) < int.Parse(InvoiceNumber.Substring(2, 8))) { now_inv = InvoiceNumber.Substring(2, 8); } else { now_inv = max_inv_no.Substring(2, 8); } var usa_data = db1.EI_INV_USABLEDATA.Where(o => o.tax_number == id && o.year == year.Substring(0, 4) && o.header == InvoiceNumber.Substring(0, 2) && (string.Compare(now_inv, o.begin_no) >= 0) && (string.Compare(now_inv, o.end_no) <= 0) //now_inv >= "Argentina" && //now_inv <= decimal.Parse(o.end_no) ).FirstOrDefault(); usa_data.now_no = now_inv.ToString(); usa_data.modify_dt = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); usa_data.modify_user = user; } db1.SaveChanges(); } }