| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344 |
- 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<string> files2move = new List<string>();
- 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<DataSet1.tb_prestaDataTable>(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<string> 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<DataSet1.tb_venteDataTable>(Program.subfolder + @"\vente.json", tb_vente);
- tb_vente.AcceptChanges();
- tbventeBindingSource.DataSource = tb_vente;
- }
- /// <summary>
- /// Récupère les nom de fichiers à partir d'un repertoire listé en HTML
- /// </summary>
- /// <param name="url_txt">URL à lister</param>
- /// <returns>liste Urls des fichiers distants</returns>
- private List<string> readHttp_Dir(string url_txt)
- {
- string dep = "<A HREF=\"";
- string fin = "\">";
- string block = "";
- Uri url = new Uri(url_txt);
- List<string> lines = new List<string>();
- 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;
- }
- /// <summary>
- /// Copy localement (sous programmData/xxxx/xxxx) une liste de fichiers issue d"un répertoire HTML
- /// </summary>
- /// <param name="lines">liste des URL des fichiers distants</param>
- private void copyHttp(List<string> 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<Achats>));
- List<Achats> ListAchats = new List<Achats>();
- try
- {
- using (readStream)
- ListAchats = xs.Deserialize(readStream) as List<Achats>;
- }
- 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<DataSet1.tb_venteDataTable>(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");
- }
- }
- }
|