f_tools.cs 14 KB

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