f_tools.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  1. using Newtonsoft.Json;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.IO;
  8. using System.Linq;
  9. using System.Net;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using System.Windows.Forms;
  13. using System.Xml.Serialization;
  14. namespace Fuel01
  15. {
  16. public partial class f_tools : Form
  17. {
  18. int err = 0;
  19. bool ok = false;
  20. DataSet1.tb_venteDataTable tb_vente = new DataSet1.tb_venteDataTable();
  21. DataSet1.tb_prestaDataTable tb_presta = new DataSet1.tb_prestaDataTable();
  22. List<string> files2move = new List<string>();
  23. bool hasChanged = false;
  24. public f_tools()
  25. {
  26. InitializeComponent();
  27. Program.subfolder = Program.folder + @"\" + Program.key_ope;
  28. if (!Directory.Exists(Program.subfolder))
  29. Directory.CreateDirectory(Program.subfolder);
  30. if (File.Exists(Program.subfolder + @"\presta.json"))
  31. tb_presta = DbUtil.LoadFromJson<DataSet1.tb_prestaDataTable>(Program.subfolder + @"\presta.json", tb_presta);
  32. }
  33. private void bt_getdatas_Click(object sender, EventArgs e)
  34. {
  35. textResult.Text = "";
  36. line_res("Connexion au serveur");
  37. string url = Properties.Settings.Default.server_adress_datas ;
  38. List<string> lines = readHttp_Dir(url);
  39. copyHttp(lines);
  40. line_res("F I N");
  41. }
  42. private void bt_trait_Click(object sender, EventArgs e)
  43. {
  44. this.Cursor = Cursors.WaitCursor;
  45. files2move.Clear();
  46. err = 0;
  47. textResult.Text = "";
  48. line_res("Début");
  49. string[] files = Directory.GetFiles(Program.folder + @"\in", "*.json ");
  50. foreach (string file in files)
  51. {
  52. StreamReader readStream = new StreamReader(file, Encoding.UTF8);
  53. if (file.ToUpper().Contains(".GLOBAL."))
  54. streamtolist_glob(readStream, file);
  55. else
  56. streamtolist_uniq(readStream, file);
  57. readStream.Close();
  58. }
  59. line_res("F I N");
  60. if (err == 0 && ok == false)
  61. {
  62. if (MessageBox.Show("Voulez-vous enregister les achats", "Aucune erreur", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
  63. {
  64. ok = true;
  65. init_vente();
  66. bt_trait_Click(sender, e);
  67. tb_vente.WriteXml(Program.subfolder + @"\vente.xml", XmlWriteMode.WriteSchema);
  68. hasChanged = false;
  69. foreach (string file in files2move)
  70. File.Move(file, file.Replace(Program.folder + @"\in", Program.folder + @"\in\done"));
  71. }
  72. }
  73. else
  74. ok = false;
  75. this.Cursor = Cursors.Default;
  76. }
  77. private void init_vente()
  78. {
  79. tb_vente.Clear();
  80. if (File.Exists(Program.subfolder + @"\vente.json"))
  81. tb_vente = DbUtil.LoadFromJson<DataSet1.tb_venteDataTable>(Program.subfolder + @"\vente.json", tb_vente);
  82. tb_vente.AcceptChanges();
  83. tbventeBindingSource.DataSource = tb_vente;
  84. }
  85. /// <summary>
  86. /// Récupère les nom de fichiers à partir d'un repertoire listé en HTML
  87. /// </summary>
  88. /// <param name="url_txt">URL à lister</param>
  89. /// <returns>liste Urls des fichiers distants</returns>
  90. private List<string> readHttp_Dir(string url_txt)
  91. {
  92. Uri url = new Uri(url_txt);
  93. List<string> lines = new List<string>();
  94. try
  95. {
  96. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  97. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  98. Stream receiveStream = response.GetResponseStream();
  99. StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);
  100. var block = readStream.ReadToEnd();
  101. response.Close();
  102. readStream.Close();
  103. var files = JsonConvert.DeserializeObject<List<string>>(block);
  104. foreach(var file in files)
  105. {
  106. var fileUrl = Path.Combine(url_txt, file);
  107. request = (HttpWebRequest)WebRequest.Create(fileUrl);
  108. response = (HttpWebResponse)request.GetResponse();
  109. receiveStream = response.GetResponseStream();
  110. readStream = new StreamReader(receiveStream, Encoding.UTF8);
  111. block = readStream.ReadToEnd();
  112. response.Close();
  113. readStream.Close();
  114. Console.WriteLine(block);
  115. var json = JsonConvert.DeserializeObject<string>(block);
  116. var achats = JsonConvert.DeserializeObject<List<Achats3>>(json);
  117. }
  118. //int posd = 0;
  119. //int posf = 0;
  120. //while ((posd = block.IndexOf(dep, posd)) > 0)
  121. //{
  122. // Console.WriteLine(posd);
  123. // posd += dep.Length;
  124. // posf = block.IndexOf(fin, posd);
  125. // if (posf < 0) break;
  126. // string line = block.Substring(posd, posf - posd);
  127. // if (line.Contains("/Station_") && line.ToUpper().EndsWith(".XML"))
  128. // lines.Add("http://" + response.ResponseUri.Host + line);
  129. //}
  130. }
  131. catch (System.Net.WebException ex)
  132. {
  133. MessageBox.Show(ex.Message, "Err. Net");
  134. }
  135. catch (Exception ex)
  136. {
  137. MessageBox.Show(ex.Message, "Err. Autre");
  138. }
  139. line_res(lines.Count.ToString() + " Fichiers trouvés");
  140. return lines;
  141. }
  142. /// <summary>
  143. /// Copy localement (sous programmData/xxxx/xxxx) une liste de fichiers issue d"un répertoire HTML
  144. /// </summary>
  145. /// <param name="lines">liste des URL des fichiers distants</param>
  146. private void copyHttp(List<string> lines)
  147. {
  148. foreach (string line in lines)
  149. {
  150. Uri url = new Uri(line);
  151. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  152. // Set some reasonable limits on resources used by this request
  153. request.MaximumAutomaticRedirections = 4;
  154. request.MaximumResponseHeadersLength = 4;
  155. // Set credentials to use for this request.
  156. request.Credentials = CredentialCache.DefaultCredentials;
  157. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  158. 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]))
  159. {
  160. text_res("Copie de " + response.ResponseUri.Segments[response.ResponseUri.Segments.Length - 1]);
  161. Stream receiveStream = response.GetResponseStream();
  162. StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);
  163. StreamWriter writeStream = new StreamWriter(Program.folder + @"\in\" + response.ResponseUri.Segments[response.ResponseUri.Segments.Length - 1], false, Encoding.UTF8);
  164. writeStream.Write(readStream.ReadToEnd());
  165. writeStream.Close();
  166. readStream.Close();
  167. line_res(" . OK");
  168. }
  169. response.Close();
  170. }
  171. }
  172. private void streamtolist_glob(StreamReader readStream, string file)
  173. {
  174. XmlSerializer xs = new XmlSerializer(typeof(List<Achats>));
  175. List<Achats> ListAchats = new List<Achats>();
  176. try
  177. {
  178. using (readStream)
  179. ListAchats = xs.Deserialize(readStream) as List<Achats>;
  180. }
  181. catch (Exception ex)
  182. {
  183. err++;
  184. line_res("ERREUR Fichier : " + file);
  185. MessageBox.Show(file + "\r\n" + ex.Message, "streamtolist_glob");
  186. }
  187. foreach (Achats ac in ListAchats)
  188. {
  189. line_res(string.Format("GLOBAL Date {0} Produit {1} PTTC {2}", ac.Date, ac.KindCarbu, ac.MontantCarbu));
  190. if (ok)
  191. {
  192. traite(ac);
  193. }
  194. }
  195. if (ok && err == 0) files2move.Add(file); // Normalement err toujours à zero pour autoriser le traitement cad ok=true;
  196. }
  197. private void streamtolist_uniq(StreamReader readStream, string file)
  198. {
  199. XmlSerializer xs = new XmlSerializer(typeof(Achats));
  200. Achats ac = null;
  201. try
  202. {
  203. using (readStream)
  204. ac = xs.Deserialize(readStream) as Achats;
  205. line_res(string.Format("UNIQ Date {0} Produit {1} PTTC {2}", ac.Date, ac.KindCarbu, ac.MontantCarbu));
  206. if (ok)
  207. {
  208. traite(ac);
  209. files2move.Add(file);
  210. }
  211. }
  212. catch (Exception ex)
  213. {
  214. err++;
  215. line_res("ERREUR Fichier : " + file);
  216. MessageBox.Show(file + "\r\n" + ex.Message, "streamtolist_uniq");
  217. }
  218. }
  219. private void traite(Achats ac)
  220. {
  221. if (ac.Volume > 0)
  222. {
  223. tsLbl1.Text = string.Format("Date {0} Bandeau {1} Type {2} Volume {3} Total {4}", ac.Date, ac.Bandeau, ac.KindCarbu, ac.Volume, ac.MontantTotal);
  224. Application.DoEvents();
  225. if (tb_vente.FindByepreuve_vtstation_vtvehi_vtprod_vtdate_vt(Program.key_ope, ac.StationId.ToString(), ac.Bandeau, ac.KindCarbu, ac.Date) == null)
  226. {
  227. DataSet1.tb_venteRow myrow = tb_vente.NewRow() as DataSet1.tb_venteRow;
  228. DataSet1.tb_prestaRow mydata = null;
  229. mydata = tb_presta.FindBysta_prprod_pr(ac.StationId.ToString(), ac.KindCarbu);
  230. if (mydata != null)
  231. ac.TxTva = (float)mydata.tva_pr;
  232. else
  233. ac.TxTva = 0;
  234. myrow["epreuve_vt"] = Program.key_ope;
  235. myrow["station_vt"] = ac.StationId.ToString();
  236. myrow["vehi_vt"] = ac.Bandeau;
  237. myrow["prod_vt"] = ac.KindCarbu;
  238. myrow["date_vt"] = ac.Date;
  239. myrow["qtt_vt"] = Math.Round(ac.Volume,2);
  240. myrow["pu_vt"] = Math.Round(ac.PrixCarbu,3);
  241. myrow["tva_vt"] = ac.TxTva ;
  242. myrow["ttc_vt"] = Math.Round(ac.MontantCarbu,2);
  243. myrow["ht_vt"] = Math.Round( ac.MontantCarbu / ( 1+ ( ac.TxTva/100 ) ) ,2);
  244. tb_vente.Addtb_venteRow(myrow);
  245. hasChanged = true;
  246. }
  247. }
  248. foreach (PrestasFournies pf in ac.Prestas)
  249. {
  250. if (pf.Name != null)
  251. {
  252. pf.TxTva = 0;
  253. string newName= pf.Name.ToUpper().Contains("FREE") ? (pf.Libel == null ? "Produit inconnu" : pf.Libel) : pf.Name;
  254. if (tb_vente.FindByepreuve_vtstation_vtvehi_vtprod_vtdate_vt(Program.key_ope, ac.StationId.ToString(), ac.Bandeau, newName, ac.Date) == null)
  255. {
  256. DataSet1.tb_venteRow myrow = tb_vente.NewRow() as DataSet1.tb_venteRow;
  257. myrow["epreuve_vt"] = Program.key_ope;
  258. myrow["station_vt"] = ac.StationId.ToString();
  259. myrow["vehi_vt"] = ac.Bandeau;
  260. myrow["prod_vt"] = newName;
  261. myrow["date_vt"] = ac.Date;
  262. myrow["qtt_vt"] = Math.Round(pf.Quantity,2);
  263. myrow["pu_vt"] = Math.Round(pf.PrixUnitaire,2);
  264. myrow["tva_vt"] = pf.TxTva ; // pf.TxTva == 0 ? 20 : pf.TxTva; ;
  265. myrow["ttc_vt"] = Math.Round(pf.Total,2);
  266. myrow["ht_vt"] = Math.Round(pf.Total,2); // Math.Round(pf.Total / (1 + ( pf.TxTva / 100)), 2);
  267. tb_vente.Addtb_venteRow(myrow);
  268. hasChanged = true;
  269. }
  270. }
  271. }
  272. tsLbl1.Text = "";
  273. }
  274. private void text_res(string text)
  275. {
  276. textResult.Text += text;
  277. textResult.ScrollToCaret();
  278. Application.DoEvents();
  279. }
  280. private void line_res(string text)
  281. {
  282. textResult.Text += (text + "\r\n");
  283. textResult.SelectionStart = textResult.TextLength;
  284. textResult.ScrollToCaret();
  285. Application.DoEvents();
  286. }
  287. private void bt_loadVT_Click(object sender, EventArgs e)
  288. {
  289. init_vente();
  290. }
  291. private void check_modif_CheckedChanged(object sender, EventArgs e)
  292. {
  293. dg_vente.AllowUserToDeleteRows = check_modif.Checked;
  294. dg_vente.ReadOnly = !check_modif.Checked;
  295. }
  296. private void dg_vente_CellEndEdit(object sender, DataGridViewCellEventArgs e)
  297. {
  298. hasChanged = true;
  299. }
  300. private void f_tools_FormClosing(object sender, FormClosingEventArgs e)
  301. {
  302. if ( hasChanged)
  303. if ( MessageBox.Show("Voulez-vous sauvegarder les modifications ?","Modifications non sauvegardées",MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)== System.Windows.Forms.DialogResult.Yes)
  304. DbUtil.SaveToJson<DataSet1.tb_venteDataTable>(Program.subfolder + @"\vente.json", tb_vente);
  305. e.Cancel = false;
  306. }
  307. private void f_tools_Load(object sender, EventArgs e)
  308. {
  309. }
  310. private void f_tools_MouseDoubleClick(object sender, MouseEventArgs e)
  311. {
  312. string input = "";
  313. if (Program.ShowInputDialog("Contrôle", "Entrez le mot de passe", ref input, true) == DialogResult.OK)
  314. splitContainer1.Enabled = (input == "fuel2016");
  315. }
  316. }
  317. }