using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Xml.Serialization; namespace Fuel01 { public partial class f_tools : Form { int err = 0; bool ok = false; DataSet1.tb_venteDataTable tb_vente = new DataSet1.tb_venteDataTable(); DataSet1.tb_prestaDataTable tb_presta = new DataSet1.tb_prestaDataTable(); List files2move = new List(); bool hasChanged = false; public f_tools() { InitializeComponent(); Program.subfolder = Program.folder + @"\" + Program.key_ope; if (!Directory.Exists(Program.subfolder)) Directory.CreateDirectory(Program.subfolder); if (File.Exists(Program.subfolder + @"\presta_base.json")) tb_presta = DbUtil.LoadFromJson(Program.subfolder + @"\presta_base.json", tb_presta); } private void bt_getdatas_Click(object sender, EventArgs e) { textResult.Text = ""; line_res("Connexion au serveur"); string url = Properties.Settings.Default.server_adress_datas ; List lines = readHttp_Dir(url); copyHttp(lines); line_res("F I N"); } private void bt_trait_Click(object sender, EventArgs e) { this.Cursor = Cursors.WaitCursor; files2move.Clear(); err = 0; textResult.Text = ""; line_res("Début"); string[] files = Directory.GetFiles(Program.folder + @"\in", "*.json "); foreach (string file in files) { StreamReader readStream = new StreamReader(file, Encoding.UTF8); if (file.ToUpper().Contains(".GLOBAL.")) streamtolist_glob(readStream, file); else streamtolist_uniq(readStream, file); readStream.Close(); } line_res("F I N"); if (err == 0 && ok == false) { if (MessageBox.Show("Voulez-vous enregister les achats", "Aucune erreur", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes) { ok = true; init_vente(); bt_trait_Click(sender, e); tb_vente.WriteXml(Program.subfolder + @"\vente.xml", XmlWriteMode.WriteSchema); hasChanged = false; foreach (string file in files2move) File.Move(file, file.Replace(Program.folder + @"\in", Program.folder + @"\in\done")); } } else ok = false; this.Cursor = Cursors.Default; } private void init_vente() { tb_vente.Clear(); if (File.Exists(Program.subfolder + @"\vente.json")) tb_vente = DbUtil.LoadFromJson(Program.subfolder + @"\vente.json", tb_vente); tb_vente.AcceptChanges(); tbventeBindingSource.DataSource = tb_vente; } /// /// Récupère les nom de fichiers à partir d'un repertoire listé en HTML /// /// URL à lister /// liste Urls des fichiers distants private List readHttp_Dir(string url_txt) { string dep = ""; string block = ""; Uri url = new Uri(url_txt); List lines = new List(); try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); //// Set some reasonable limits on resources used by this request //request.MaximumAutomaticRedirections = 4; //request.MaximumResponseHeadersLength = 4; //// Set credentials to use for this request. //request.Credentials = CredentialCache.DefaultCredentials; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream receiveStream = response.GetResponseStream(); StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8); block = readStream.ReadToEnd(); response.Close(); readStream.Close(); int posd = 0; int posf = 0; while ((posd = block.IndexOf(dep, posd)) > 0) { Console.WriteLine(posd); posd += dep.Length; posf = block.IndexOf(fin, posd); if (posf < 0) break; string line = block.Substring(posd, posf - posd); if (line.Contains("/Station_") && line.ToUpper().EndsWith(".XML")) lines.Add("http://" + response.ResponseUri.Host + line); } } catch (System.Net.WebException ex) { MessageBox.Show(ex.Message, "Err. Net"); } catch (Exception ex) { MessageBox.Show(ex.Message, "Err. Autre"); } line_res(lines.Count.ToString() + " Fichiers trouvés"); return lines; } /// /// Copy localement (sous programmData/xxxx/xxxx) une liste de fichiers issue d"un répertoire HTML /// /// liste des URL des fichiers distants private void copyHttp(List lines) { foreach (string line in lines) { Uri url = new Uri(line); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); // Set some reasonable limits on resources used by this request request.MaximumAutomaticRedirections = 4; request.MaximumResponseHeadersLength = 4; // Set credentials to use for this request. request.Credentials = CredentialCache.DefaultCredentials; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); if (!File.Exists(Program.folder + @"\in\" + response.ResponseUri.Segments[response.ResponseUri.Segments.Length - 1]) && !File.Exists(Program.folder + @"\in\done\" + response.ResponseUri.Segments[response.ResponseUri.Segments.Length - 1])) { text_res("Copie de " + response.ResponseUri.Segments[response.ResponseUri.Segments.Length - 1]); Stream receiveStream = response.GetResponseStream(); StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8); StreamWriter writeStream = new StreamWriter(Program.folder + @"\in\" + response.ResponseUri.Segments[response.ResponseUri.Segments.Length - 1], false, Encoding.UTF8); writeStream.Write(readStream.ReadToEnd()); writeStream.Close(); readStream.Close(); line_res(" . OK"); } response.Close(); } } private void streamtolist_glob(StreamReader readStream, string file) { XmlSerializer xs = new XmlSerializer(typeof(List)); List ListAchats = new List(); try { using (readStream) ListAchats = xs.Deserialize(readStream) as List; } catch (Exception ex) { err++; line_res("ERREUR Fichier : " + file); MessageBox.Show(file + "\r\n" + ex.Message, "streamtolist_glob"); } foreach (Achats ac in ListAchats) { line_res(string.Format("GLOBAL Date {0} Produit {1} PTTC {2}", ac.Date, ac.KindCarbu, ac.MontantCarbu)); if (ok) { traite(ac); } } if (ok && err == 0) files2move.Add(file); // Normalement err toujours à zero pour autoriser le traitement cad ok=true; } private void streamtolist_uniq(StreamReader readStream, string file) { XmlSerializer xs = new XmlSerializer(typeof(Achats)); Achats ac = null; try { using (readStream) ac = xs.Deserialize(readStream) as Achats; line_res(string.Format("UNIQ Date {0} Produit {1} PTTC {2}", ac.Date, ac.KindCarbu, ac.MontantCarbu)); if (ok) { traite(ac); files2move.Add(file); } } catch (Exception ex) { err++; line_res("ERREUR Fichier : " + file); MessageBox.Show(file + "\r\n" + ex.Message, "streamtolist_uniq"); } } private void traite(Achats ac) { if (ac.Volume > 0) { tsLbl1.Text = string.Format("Date {0} Bandeau {1} Type {2} Volume {3} Total {4}", ac.Date, ac.Bandeau, ac.KindCarbu, ac.Volume, ac.MontantTotal); Application.DoEvents(); if (tb_vente.FindByepreuve_vtstation_vtvehi_vtprod_vtdate_vt(Program.key_ope, ac.StationId.ToString(), ac.Bandeau, ac.KindCarbu, ac.Date) == null) { DataSet1.tb_venteRow myrow = tb_vente.NewRow() as DataSet1.tb_venteRow; DataSet1.tb_prestaRow mydata = null; mydata = tb_presta.FindBysta_prprod_pr(ac.StationId.ToString(), ac.KindCarbu); if (mydata != null) ac.TxTva = (float)mydata.tva_pr; else ac.TxTva = 0; myrow["epreuve_vt"] = Program.key_ope; myrow["station_vt"] = ac.StationId.ToString(); myrow["vehi_vt"] = ac.Bandeau; myrow["prod_vt"] = ac.KindCarbu; myrow["date_vt"] = ac.Date; myrow["qtt_vt"] = Math.Round(ac.Volume,2); myrow["pu_vt"] = Math.Round(ac.PrixCarbu,3); myrow["tva_vt"] = ac.TxTva ; myrow["ttc_vt"] = Math.Round(ac.MontantCarbu,2); myrow["ht_vt"] = Math.Round( ac.MontantCarbu / ( 1+ ( ac.TxTva/100 ) ) ,2); tb_vente.Addtb_venteRow(myrow); hasChanged = true; } } foreach (PrestasFournies pf in ac.Prestas) { if (pf.Name != null) { pf.TxTva = 0; string newName= pf.Name.ToUpper().Contains("FREE") ? (pf.Libel == null ? "Produit inconnu" : pf.Libel) : pf.Name; if (tb_vente.FindByepreuve_vtstation_vtvehi_vtprod_vtdate_vt(Program.key_ope, ac.StationId.ToString(), ac.Bandeau, newName, ac.Date) == null) { DataSet1.tb_venteRow myrow = tb_vente.NewRow() as DataSet1.tb_venteRow; myrow["epreuve_vt"] = Program.key_ope; myrow["station_vt"] = ac.StationId.ToString(); myrow["vehi_vt"] = ac.Bandeau; myrow["prod_vt"] = newName; myrow["date_vt"] = ac.Date; myrow["qtt_vt"] = Math.Round(pf.Quantity,2); myrow["pu_vt"] = Math.Round(pf.PrixUnitaire,2); myrow["tva_vt"] = pf.TxTva ; // pf.TxTva == 0 ? 20 : pf.TxTva; ; myrow["ttc_vt"] = Math.Round(pf.Total,2); myrow["ht_vt"] = Math.Round(pf.Total,2); // Math.Round(pf.Total / (1 + ( pf.TxTva / 100)), 2); tb_vente.Addtb_venteRow(myrow); hasChanged = true; } } } tsLbl1.Text = ""; } private void text_res(string text) { textResult.Text += text; textResult.ScrollToCaret(); Application.DoEvents(); } private void line_res(string text) { textResult.Text += (text + "\r\n"); textResult.SelectionStart = textResult.TextLength; textResult.ScrollToCaret(); Application.DoEvents(); } private void bt_loadVT_Click(object sender, EventArgs e) { init_vente(); } private void check_modif_CheckedChanged(object sender, EventArgs e) { dg_vente.AllowUserToDeleteRows = check_modif.Checked; dg_vente.ReadOnly = !check_modif.Checked; } private void dg_vente_CellEndEdit(object sender, DataGridViewCellEventArgs e) { hasChanged = true; } private void f_tools_FormClosing(object sender, FormClosingEventArgs e) { if ( hasChanged) if ( MessageBox.Show("Voulez-vous sauvegarder les modifications ?","Modifications non sauvegardées",MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)== System.Windows.Forms.DialogResult.Yes) DbUtil.SaveToJson(Program.subfolder + @"\vente.json", tb_vente); e.Cancel = false; } private void f_tools_Load(object sender, EventArgs e) { } private void f_tools_MouseDoubleClick(object sender, MouseEventArgs e) { string input = ""; if (Program.ShowInputDialog("Contrôle", "Entrez le mot de passe", ref input, true) == DialogResult.OK) splitContainer1.Enabled = (input == "fuel2016"); } } }