public static string GetSubjectDocType(this ArtrnDbf artrn, DbfDataSet dataset) { var isrun = dataset.Isrun.Where(i => i.prefix == artrn.docnum.Substring(0, 2)).FirstOrDefault(); if (isrun != null) { switch (isrun.doctyp) { case "IV": return(DoctypSubject.INV.ToString()); case "HS": return(DoctypSubject.INV.ToString()); case "CN": return(DoctypSubject.CRN.ToString()); case "DR": return(DoctypSubject.DBN.ToString()); default: return(string.Empty); } } else { return(string.Empty); } }
public static string GetDocType(this ArtrnDbf artrn, DbfDataSet dataset) { var isrun = dataset.Isrun.Where(i => i.prefix == artrn.docnum.Substring(0, 2)).FirstOrDefault(); if (isrun != null) { switch (isrun.doctyp) { case "IV": return(Doctyp.Tax_Invoice.ToString()); case "HS": return(Doctyp.Tax_Invoice.ToString()); case "CN": return(Doctyp.Credit_Note.ToString()); case "DR": return(Doctyp.Debit_Note.ToString()); default: return(string.Empty); } } else { return(string.Empty); } }
public static StdDocumentName GetDocName(this ArtrnDbf artrn, DbfDataSet dataset) { //try //{ IsrunDbf isrun = dataset.Isrun.Where(i => i.prefix == artrn.docnum.Substring(0, 2)).FirstOrDefault(); //var x = dataset.Isrun.OrderBy(d => d.doctyp).Select(d => d.doctyp).ToArray<string>(); StdDocumentName docName = null; if (isrun != null) { switch (isrun.doctyp) { case "IV": if (artrn.srv_vattyp == ((int)VAT_TYPE.ACQUISITION).ToString() && artrn.vatamt > 0) { docName = new StdDocumentName(StdDocumentName.TYPE._T02); } else { docName = new StdDocumentName(StdDocumentName.TYPE._380); } break; case "HS": docName = new StdDocumentName(StdDocumentName.TYPE._T03); break; case "CN": docName = new StdDocumentName(StdDocumentName.TYPE._81); break; case "DR": docName = new StdDocumentName(StdDocumentName.TYPE._80); break; default: docName = new StdDocumentName(StdDocumentName.TYPE._388); break; } } return(docName); //} //catch (Exception ex) //{ // return null; //} }
static void Main(string[] args) { /** TEST **/ //try //{ // JsonModel J = new JsonModel(@"d:\express\expressi\test", "SR0000001"); // Console.WriteLine(J.ToString()); //} //catch (Exception EX) //{ // throw; //} //Create City.json file //string[] lines = File.ReadAllLines(@"Res/TAMBON.csv", Encoding.UTF8); //List<CitySubDivision> city_list = new List<CitySubDivision>(); //for (int i = 1; i < lines.Count(); i++) //{ // string str = lines[i]; // string[] s = str.Split(','); // string tambon_id = s[1].Trim(); // string tambon_name = s[2].Replace("ต.", "").Replace("แขวง", "").Trim(); // string tambon_name_en = s[3].Trim(); // string amphur_id = s[4].Trim(); // string amphur_name = s[5].Replace("อ.", "").Replace("เขต", "").Trim(); // string amphur_name_en = s[6].Trim(); // string ch_id = s[7].Trim(); // string ch_name = s[8].Replace("จ.", "").Trim(); // string ch_name_en = s[9].Trim(); // string latitude = s[10].Trim(); // string longitude = s[11].Trim(); // CitySubDivision c = new CitySubDivision // { // provinceId = ch_id, // provinceName = ch_name, // provinceNameEng = ch_name_en, // CityId = amphur_id, // CityName = amphur_name, // CityNameEng = amphur_name_en, // SubDivisionId = tambon_id, // SubDivisionName = tambon_name, // SubDivisionNameEng = tambon_name_en, // Latitude = Convert.ToDecimal(latitude), // Longitude = Convert.ToDecimal(longitude) // }; // city_list.Add(c); //} //city_list = city_list.OrderBy(c => c.provinceId).ThenBy(c => c.CityId).ThenBy(c => c.SubDivisionId).ToList(); //File.WriteAllText(@"Res\Cities.json", JsonConvert.SerializeObject(city_list, Formatting.Indented), new UTF8Encoding(false)); //Console.WriteLine("completed."); /* args.Length = 3 for XML/EXTRACT_TO_XML, 4 for JSON, 8 for PDF */ if (!(args != null && (args.Length == 3 || args.Length == 4 || args.Length == 8))) { Console.WriteLine("Error : Arguments not specified completely!"); return; } else { if (!(args[0].ToUpper().Trim() == PROCESS_TYPE.JSON.ToString() || args[0].ToUpper().Trim() == PROCESS_TYPE.XML.ToString() || args[0].ToUpper().Trim() == PROCESS_TYPE.PDF.ToString() || args[0].ToUpper().Trim() == PROCESS_TYPE.EXTRACT.ToString())) { Console.WriteLine("Error : Process type is incorrect!"); return; } try { // Create JSON file if (args[0].ToUpper().Trim() == PROCESS_TYPE.JSON.ToString()) { if (args.Length < 4) { Console.WriteLine("Error : Arguments not specified completely!"); return; } string data_path = args[1]; string docnum = args[2]; string dest_path = args[3]; DbfDataSet dbf = new DbfDataSet(data_path); var artrn = dbf.Artrn.Where(a => a.docnum == docnum).FirstOrDefault(); if (artrn != null) { JsonModel json = new JsonModel(data_path, docnum); var result = json.WriteToFile(/*@"json\" + docnum + ".json"*/ dest_path); if (result.createSuccess) { Console.WriteLine("Success"); } else { Console.WriteLine("Error : " + result.message); } } else { Console.WriteLine("Error : document # " + docnum + " not found"); } return; } // Create XML file if (args[0].ToUpper().Trim() == PROCESS_TYPE.XML.ToString()) { if (args.Length < 3) { Console.WriteLine("Error : Arguments not specified completely!"); return; } string json_path = args[1]; string dest_path = args[2]; XmlDoc xml = new XmlDoc(json_path, dest_path); var result = xml.CreateXml(); if (result.createSuccess) { Console.WriteLine("Success"); } else { Console.WriteLine("Error : " + result.message); } return; } // Create PDF file if (args[0].ToUpper().Trim() == PROCESS_TYPE.PDF.ToString()) { if (args.Length < 8) { Console.WriteLine("Error : Arguments not specified completely!"); return; } string pdf_original_file_path = args[1]; string xml_embeded_file_path = args[2]; // full path of args[6] string color_profile_file_path = args[3]; string destination_pdf_file_path = args[4]; string document_type = args[5]; string document_file_name = args[6]; // only file name of args[2] string document_version = args[7]; PdfDoc pdf = new PdfDoc(pdf_original_file_path, xml_embeded_file_path, color_profile_file_path, destination_pdf_file_path, document_type, document_file_name, document_version); var result = pdf.CreatePdf(); if (result.createSuccess) { Console.WriteLine("Success"); } else { Console.WriteLine("Error : " + result.message); } return; } // Extract to XML file if (args[0].ToUpper().Trim() == PROCESS_TYPE.EXTRACT.ToString()) { if (args.Length < 3) { Console.WriteLine("Error : Arguments not specified completely!"); return; } string pdfa3_file_path = args[1]; string destination_xml_path = args[2]; //string docnum = args[3]; string command = "java"; string arguments = "-jar " + AppDomain.CurrentDomain.BaseDirectory + "Extract.jar " + pdfa3_file_path + " " + destination_xml_path; Process process = new Process(); process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; process.StartInfo.FileName = command; process.StartInfo.Arguments = arguments; process.Start(); string output = process.StandardOutput.ReadToEnd(); process.WaitForExit(); if (output.ToLower().Contains("success")) { Console.WriteLine("Success"); } else { Console.WriteLine("Error : " + output); } } } catch (Exception ex) { Console.WriteLine("Error : " + ex.Message); } } }
public JsonModel(string data_path, string docnum) { using (StreamReader rdr = File.OpenText(@"Res\Countries.json")) { countries = (List <Country>) new JsonSerializer().Deserialize(rdr, typeof(List <Country>)); } using (StreamReader rdr = File.OpenText(@"Res\Cities.json")) { cities = (List <CitySubDivision>) new JsonSerializer().Deserialize(rdr, typeof(List <CitySubDivision>)); //List<CitySubDivision> cities_json = (List<CitySubDivision>)new JsonSerializer().Deserialize(rdr, typeof(List<CitySubDivision>)); //province = new List<Province>(); //foreach (var p in cities_json.GroupBy(c => c.provinceId)) //{ // province.Add(new Province // { // id = p.First().provinceId, // name = p.First().provinceName, // cities = cities_json.Where(c => c.provinceId == p.First().provinceId).GroupBy(c => c.CityId).Select(g => new City // { // id = g.First().CityId, // name = g.First().CityName, // subDivisions = cities_json.Where(c => c.CityId == g.First().CityId).Select(sd => new SubDivision { id = sd.SubDivisionId, name = sd.SubDivisionName, latitude = sd.Latitude, longitude = sd.Longitude }).ToList() // }).ToList() // }); //} } DbfDataSet dataset = new DbfDataSet(data_path); IsinfoDbf isinfo = dataset.Isinfo; ArtrnDbf artrn = dataset.Artrn.Where(a => a.docnum == docnum).FirstOrDefault(); StdDocumentName docName = artrn.GetDocName(dataset); ArmasDbf armas = dataset.Armas.Where(a => a.cuscod == artrn.cuscod).FirstOrDefault(); CitySubDivision sellerCity = this.cities.Where(c => (isinfo.addr01 + " " + isinfo.addr02).Contains(c.provinceName) && (isinfo.addr01 + " " + isinfo.addr02).Contains(c.CityName) && (isinfo.addr01 + " " + isinfo.addr02).Contains(c.SubDivisionName)).FirstOrDefault(); CitySubDivision buyerCity = this.cities.Where(c => (armas.addr01 + " " + armas.addr02 + " " + armas.addr03).Contains(c.provinceName) && (armas.addr01 + " " + armas.addr02 + " " + armas.addr03).Contains(c.CityName) && (armas.addr01 + " " + armas.addr02 + " " + armas.addr03).Contains(c.SubDivisionName)).FirstOrDefault(); ArtrnDbf refDoc = null; if (docName.type == StdDocumentName.TYPE._80 || docName.type == StdDocumentName.TYPE._81) { refDoc = dataset.Artrn.Where(a => a.docnum == artrn.sonum).FirstOrDefault(); } else { refDoc = dataset.Artrn.Where(a => a.docnum == artrn.youref).FirstOrDefault(); } StdDocumentName refDocName = refDoc != null?refDoc.GetDocName(dataset) : null; List <StcrdDbf> stcrd = dataset.Stcrd.Where(s => s.docnum == docnum).ToList(); List <IstabDbf> qucod = dataset.Istab.Where(i => i.tabtyp == "20" && stcrd.Select(s => s.tqucod).ToList <string>().Contains(i.typcod)).ToList(); // Create DocumentDetail for export to JSON this.DocumentDetail = new DocumentDetail { ID = artrn.docnum, CreationDateTime = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.fff", CultureInfo.GetCultureInfo("en-US")), IssueDateTime = artrn.docdat.Value.ToString("yyyy-MM-ddTHH:mm:ss.fff", CultureInfo.GetCultureInfo("en-US")), SpecifiedCIDocument = "ETDA", Name = docName != null ? docName.Name : string.Empty, TypeCode = docName != null ? docName.typeCode : string.Empty, Purpose = docName.type == StdDocumentName.TYPE._80 || docName.type == StdDocumentName.TYPE._81 ? artrn.youref : string.Empty, Note = new Note { Subject = docName.type == StdDocumentName.TYPE._80 || docName.type == StdDocumentName.TYPE._81 ? string.Empty : "หมายเหตุ", Content = docName.type == StdDocumentName.TYPE._80 || docName.type == StdDocumentName.TYPE._81 ? string.Empty : artrn.youref } }; this.SellerTradeParty = new SellerTradeParty { PostalCITradeAddress = new PostalTradeAddress { LineOne = isinfo.addr01, LineTwo = isinfo.addr02, CountryID = countries.Where(c => c.Name.ToLower() == "thailand").First().Code, PostcodeCode = isinfo.GetZipcod(), CountrySubDivisionID = string.Empty, CityID = sellerCity != null ? sellerCity.CityId : string.Empty, //string.Empty, CitySubDivisionID = sellerCity != null ? sellerCity.SubDivisionId : string.Empty, //string.Empty, Address = string.Empty, }, Name = string.Empty, TaxID = isinfo.taxid, BranchCode = isinfo.GetOrgnumString(), CompleteNumber = isinfo.GetTelFax().telNum, //"*****@*****.**", URIID = string.Empty, //"www.esg.co.th", Telephone = isinfo.GetTelFax().telNum, Fax = isinfo.GetTelFax().faxNum, }; this.BuyerTradeParty = new BuyerTradeParty { PersonName = armas.contact, Name = armas.prenam + " " + armas.cusnam, TaxID = armas.taxid, BranchCode = armas.GetOrgnumString(), CompleteNumber = armas.GetTelFax().telNum, //"*****@*****.**", URIID = string.Empty, //"www.esg.co.th", Telephone = armas.GetTelFax().telNum, Fax = armas.GetTelFax().faxNum, PostalTradeAddress = new PostalTradeAddress { CountryID = countries.Where(c => c.Name.ToLower() == "thailand").First().Code, LineOne = armas.addr01, LineTwo = armas.addr02 + " " + armas.addr03 + " " + armas.zipcod, PostcodeCode = armas.zipcod, CountrySubDivisionID = string.Empty, CityID = buyerCity != null ? buyerCity.CityId : string.Empty, //string.Empty, CitySubDivisionID = buyerCity != null ? buyerCity.SubDivisionId : string.Empty, //string.Empty, Address = string.Empty } }; this.IncludedSupplyChainTradeLineItem = new List <LineItem>(); int item_count = 0; foreach (StcrdDbf st in stcrd) { this.IncludedSupplyChainTradeLineItem.Add(new LineItem { LineID = (++item_count).ToString(), Name = st.stkdes, ChargeAmount = st.unitpr.ToString(), BilledQuantity = st.trnqty.ToString(), UnitCode = "", UnitName = qucod.Where(q => q.typcod == st.tqucod).First().typdes, ChargeIndicator = st.discamt > 0 ? "true" : "false", ActualAmount = st.discamt > 0 ? st.discamt.ToString() : "0", NetLineTotalAmount = st.trnval.ToString(), GlobalID = "", ProductID = st.stkcod }); } this.ReferencedDocument = new List <RefDocs>(); if (refDoc != null) { this.ReferencedDocument.Add(new RefDocs { IssuerAssignedID = refDoc.docnum, IssueDateTime = refDoc.docdat.Value.ToString("yyyy-MM-ddTHH:mm:ss.fff", CultureInfo.GetCultureInfo("en-US")), ReferenceTypeCode = refDocName != null ? refDocName.typeCode : string.Empty }); } this.ApplicableHeaderTradeSettlement = new ApplicableHeaderTradeSettlement { SpecifiedTradeAllowanceCharge = new SpecifiedTradeAllowanceCharge { ChargeIndicator = artrn.discamt > 0 ? "true" : "false", ActualAmount = artrn.discamt > 0 ? artrn.discamt.ToString() : "0" }, InvoiceCurrencyCode = "THB", ApplicableTradeTax = new ApplicableTradeTax { CalculatedRate = artrn.vatrat.ToString(), //"7.00", BasisAmount = artrn.total.ToString(), VatAmount = artrn.vatamt.ToString(), TypeCode = "VAT" }, SpecifiedTradeSettlementHeaderMonetarySummation = new SpecifiedTradeSettlementHeaderMonetarySummation { LineTotalAmount = artrn.amount.ToString(), //string.Empty, GrandTotalAmountCharactor = string.Empty, TaxTotalAmount = artrn.vatamt.ToString(), //string.Empty, GrandTotalAmount = (artrn.total + artrn.vatamt).ToString() //string.Empty } }; }
private void Timer_Tick(object sender, EventArgs e) { if (this.in_process) { //new Log { Time = DateTime.Now, DataPath = string.Empty, Description = "Skip new job because previous job is in process" }.SaveLog(); return; } List <DateTimeDoJob> date_do_job = this.GetDateDoJob(); TimeSpan this_time = TimeSpan.Parse(DateTime.Now.ToString("HH:mm:ss", CultureInfo.GetCultureInfo("th-TH"))); // Check if current time is in working time configured. if (date_do_job.Where(d => (int)d.dayOfWeek == (int)DateTime.Now.DayOfWeek && d.startTime.CompareTo(this_time) <= 0 && d.endTime.CompareTo(this_time) >= 0).FirstOrDefault() == null) { // Just skip this job return; } this.in_process = true; this.job_list = new List <PdfJob>(); var company_list = Helper.Sccomp(); if (company_list == null) { Console.WriteLine("Cannot find sccomp.dbf, please make sure \"Express program path\" is configure correctly"); return; } foreach (var comp in company_list) { if (File.Exists(comp.abs_path + this.scanned_file_name)) { List <Inv> jobs = DbfDataSet.Inv(comp.abs_path + this.scanned_file_name).Where(j => j.status == ((int)JOB_STATE.NEW).ToString()).ToList(); foreach (var job in jobs) { this.job_list.Add(new PdfJob { DataPath = comp.abs_path, Docnum = job.docnum, Email = job.email, SendTime = null, //Success = false }); } } } using (BackgroundWorker wrk = new BackgroundWorker()) { wrk.DoWork += delegate { for (int i = 0; i < this.job_list.Count; i++) { var send_result = this.CreateFileAndSendMail(this.job_list[i].DataPath, this.job_list[i].Docnum, this.job_list[i].Email); if (send_result.Success) { this.job_list[i].SendTime = DateTime.Now; if (this.UpdateJobState(this.job_list[i], JOB_STATE.SENDED) == true) { Log log = new Log { Time = this.job_list[i].SendTime.Value, DataPath = this.job_list[i].DataPath, Description = "Sending document # " + this.job_list[i].Docnum + " to email " + this.job_list[i].Email + " success." }; log.SaveLog(); this.dgvLog.Invoke(new Action(() => { ((BindingList <Log>) this.dgvLog.DataSource).Add(log); this.dgvLog.FirstDisplayedScrollingRowIndex = this.dgvLog.Rows.Count - 1; })); Console.WriteLine(" -> Send " + this.job_list[i].DataPath + ":" + this.job_list[i].Docnum + " success at " + DateTime.Now.ToString()); continue; } } else { throw new Exception(send_result.Message); } } }; wrk.RunWorkerCompleted += delegate { this.in_process = false; Console.WriteLine(" ==> Send all documents success at " + DateTime.Now.ToString()); Console.WriteLine(""); }; wrk.RunWorkerAsync(); } }
private CreateFileResult CreateFileAndSendMail(string data_path, string docnum, string customer_email) { try { DbfDataSet dbf = new DbfDataSet(data_path); var artrn = dbf.Artrn.Where(a => a.docnum == docnum).FirstOrDefault(); if (artrn == null) { throw new Exception("Error : Document number " + docnum + " not found in data path " + data_path); } string subject = string.Empty; subject += artrn.docdat.Value.ToString("[ddMMyyyy]", CultureInfo.GetCultureInfo("th-TH")); subject += "[" + artrn.GetSubjectDocType(dbf) + "]"; subject += "[" + artrn.docnum + "]"; //Console.WriteLine(" ==> Start at " + DateTime.Now.ToString()); var json_result = this.CreateJson(data_path, docnum, data_path + @"\eTaxInvoice\json\" + docnum + ".json"); if (json_result.Success) { var xml_result = this.CreateXml(data_path + @"\eTaxInvoice\json\" + docnum + ".json", data_path + @"\eTaxInvoice\xml\" + docnum + ".xml"); if (xml_result.Success) { File.Delete(data_path + @"\eTaxInvoice\json\" + docnum + ".json"); var pdfa3_result = this.CreatePdfA3(data_path + @"\eTaxInvoice\pdf\" + docnum + ".pdf", data_path + @"\eTaxInvoice\xml\" + docnum + ".xml", data_path + @"\eTaxInvoice\pdfa3\" + docnum + ".pdf", artrn.GetDocType(dbf)); if (pdfa3_result.Success) { File.Delete(data_path + @"\eTaxInvoice\xml\" + docnum + ".xml"); Mailing m = new Mailing(customer_email, subject, "", new string[] { data_path + @"\eTaxInvoice\pdfa3\" + docnum + ".pdf" }); var mail_result = m.Send(); if (mail_result.Success) { //Console.WriteLine(" ==> Send mail success"); //Console.WriteLine(" ==> Completed at " + DateTime.Now.ToString()); m = null; return(new CreateFileResult { Success = true, Message = mail_result.Message }); } else { //Console.WriteLine(" ==> Send mail failed"); //Console.WriteLine(" ==> Corupted at " + DateTime.Now.ToString()); return(new CreateFileResult { Success = false, Message = mail_result.Message }); } } else { return(pdfa3_result); } } else { return(xml_result); } } else { return(json_result); } } catch (Exception) { throw; } }