f_presta.cs 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466
  1. using Fuel01.Models;
  2. using Newtonsoft.Json;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.ComponentModel;
  6. using System.Data;
  7. using System.Diagnostics;
  8. using System.Drawing;
  9. using System.IO;
  10. using System.Linq;
  11. using System.Security.Cryptography.X509Certificates;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. using System.Windows.Forms;
  15. using System.Xml.Linq;
  16. using Excel = Microsoft.Office.Interop.Excel;
  17. namespace Fuel01
  18. {
  19. public partial class f_presta : Form
  20. {
  21. DataSet1.tb_prestaDataTable tb_presta = new DataSet1.tb_prestaDataTable();
  22. DataSet1.tb_venteDataTable tb_vente = new DataSet1.tb_venteDataTable();
  23. DataSet1.tb_stationDataTable tb_station = new DataSet1.tb_stationDataTable();
  24. DataSet1.tb_stationRow current_sta = null;
  25. List<Produit> lproduit = new List<Produit>();
  26. DataGridViewRow myrow = null;
  27. float oldqtt = 0;
  28. static ProdEqualityComparer prodEqC = new ProdEqualityComparer();
  29. Dictionary<IdProd, VenteTot> lvente_tot = new Dictionary<IdProd, VenteTot>(prodEqC);
  30. Dictionary<decimal, VenteTva> lvente_tva = new Dictionary<decimal, VenteTva>();
  31. string id_sta = "";
  32. public f_presta(TextBox key_sta)
  33. {
  34. InitializeComponent();
  35. if (File.Exists(Program.folder + @"\param\produit.xml"))
  36. init_list_produit();
  37. if (File.Exists(Program.subfolder + @"\presta.json"))
  38. {
  39. tb_presta = DbUtil.LoadPrestaFromJson(Program.subfolder + @"\presta.json", lproduit);
  40. tb_presta.AcceptChanges();
  41. }
  42. tbprestaBindingSource.DataSource = tb_presta;
  43. if (File.Exists(Program.subfolder + @"\vente.json"))
  44. tb_vente = DbUtil.LoadFromJson<DataSet1.tb_venteDataTable>(Program.subfolder + @"\vente.json", tb_vente);
  45. tb_vente.AcceptChanges();
  46. tbventeBindingSource.DataSource = tb_vente;
  47. id_sta = key_sta.Text;
  48. tbprestaBindingSource.Filter = " sta_pr='" + id_sta + "'";
  49. tbventeBindingSource.Filter = " station_vt='" + id_sta + "'";
  50. tbprestaBindingSource.Sort = "sta_pr,kind_pr,prod_pr";
  51. key_sta.TextChanged += key_sta_TextChanged;
  52. key_sta_TextChanged(key_sta, null);
  53. t_facture.Enabled = Program.isExcel;
  54. }
  55. private void f_presta_Load(object sender, EventArgs e)
  56. {
  57. }
  58. void key_sta_TextChanged(object sender, EventArgs e)
  59. {
  60. TextBox mytxtb = sender as TextBox;
  61. id_sta = mytxtb.Text;
  62. tbprestaBindingSource.Filter = " sta_pr='" + id_sta + "'";
  63. tbventeBindingSource.Filter = " station_vt='" + id_sta + "'";
  64. current_sta = tb_station.FindBykey_sta(id_sta);
  65. }
  66. private void f_presta_FormClosing(object sender, FormClosingEventArgs e)
  67. {
  68. SavePresta();
  69. return;
  70. DbUtil.SaveToJson<DataSet1.tb_prestaDataTable>(Program.subfolder + @"\presta.json", tb_presta);
  71. DbUtil.SaveToJson<DataSet1.tb_venteDataTable>(Program.subfolder + @"\vente.json", tb_vente);
  72. tbprestaBindingSource.Filter = "";
  73. tbprestaBindingSource.Sort = "sta_pr,kind_pr,prod_pr";
  74. tbprestaBindingSource.MoveFirst();
  75. int i = 0;
  76. while (tbprestaBindingSource.Position < tbprestaBindingSource.Count - 1)
  77. {
  78. DataSet1.tb_prestaRow myNewRow = tb_presta.Rows[i++] as DataSet1.tb_prestaRow;
  79. string a = i.ToString() + "-" + myNewRow["sta_pr"].ToString() + "-" + myNewRow["kind_pr"].ToString() + "-" + myNewRow["prod_pr"].ToString();
  80. Console.WriteLine(a);
  81. tbprestaBindingSource.MoveNext();
  82. }
  83. }
  84. private void init_list_produit()
  85. {
  86. XDocument xRoot = XDocument.Load(Program.folder + @"\param\produit.xml");
  87. var data = from item in xRoot.Descendants("tb_prod")
  88. orderby item.Element("type_prod").Value, item.Element("lib_prod").Value
  89. select new Produit()
  90. {
  91. key_prod = item.Element("key_prod").Value,
  92. lib_prod = item.Element("lib_prod").Value,
  93. type_prod = item.Element("type_prod").Value
  94. };
  95. lproduit = data.ToList();
  96. dg_presta_prod.Items.Clear();
  97. dg_presta_prod.DataSource = lproduit;
  98. dg_presta_prod.DisplayMember = "lib_prod";
  99. dg_presta_prod.ValueMember = "key_prod";
  100. }
  101. private void dg_presta_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
  102. {
  103. if (e.RowIndex > 0)
  104. {
  105. if (dg_presta.Rows[e.RowIndex - 1].Cells[0].Value is System.DBNull)
  106. {
  107. dg_presta.Rows[e.RowIndex - 1].Cells[0].Value = id_sta;
  108. }
  109. if (dg_presta.Rows[e.RowIndex - 1].Cells[0].Value == null)
  110. {
  111. dg_presta.Rows[e.RowIndex - 1].Cells[0].Value = id_sta;
  112. }
  113. }
  114. }
  115. private void bt_ajCarbu_Click(object sender, EventArgs e)
  116. {
  117. foreach (Produit p in lproduit.Where(p => p.type_prod == "Carburant"))
  118. {
  119. bool ok = false;
  120. for (int i = 0; i < dg_presta.RowCount - 1 && !ok; i++)
  121. if (dg_presta.Rows[i].Cells[1].Value.ToString() == p.key_prod)
  122. ok = true;
  123. if (!ok)
  124. {
  125. DataSet1.tb_prestaRow myNewRow = tb_presta.Newtb_prestaRow();
  126. myNewRow["sta_pr"] = id_sta;
  127. myNewRow["prod_pr"] = p.key_prod;
  128. myNewRow["kind_pr"] = p.type_prod;
  129. myNewRow["unite_pr"] = "L";
  130. myNewRow["pu_pr"] = 1;
  131. myNewRow["tva_pr"] = 20;
  132. myNewRow["ttc_pr"] = 1.2;
  133. tb_presta.Addtb_prestaRow(myNewRow);
  134. }
  135. }
  136. }
  137. private void bt_ajProd_Click(object sender, EventArgs e)
  138. {
  139. foreach (Produit p in lproduit)
  140. {
  141. bool ok = false;
  142. for (int i = 0; i < dg_presta.RowCount - 1 && !ok; i++)
  143. if (dg_presta.Rows[i].Cells[1].Value.ToString() == p.key_prod)
  144. ok = true;
  145. if (!ok)
  146. {
  147. DataSet1.tb_prestaRow myNewRow = tb_presta.Newtb_prestaRow();
  148. myNewRow["sta_pr"] = id_sta;
  149. myNewRow["prod_pr"] = p.key_prod;
  150. myNewRow["kind_pr"] = p.type_prod;
  151. myNewRow["unite_pr"] = p.type_prod == "Carburant" ? "L" : "U";
  152. myNewRow["pu_pr"] = 1;
  153. myNewRow["tva_pr"] = 20;
  154. myNewRow["ttc_pr"] = 1.2;
  155. tb_presta.Addtb_prestaRow(myNewRow);
  156. }
  157. }
  158. }
  159. private void bt_calcHT_Click(object sender, EventArgs e)
  160. {
  161. foreach (DataSet1.tb_prestaRow p in tb_presta.Rows)
  162. {
  163. if (p["ttc_pr"].ToString() != "" && p["tva_pr"].ToString() != "")
  164. {
  165. Decimal ttc = (Decimal)p["ttc_pr"];
  166. Decimal tva = 1 + (Decimal)p["tva_pr"] / 100;
  167. Decimal ht = ttc / tva;
  168. ht = Math.Round(ht, 3);
  169. p["pu_pr"] = ht;
  170. }
  171. }
  172. }
  173. private void bt_calcTTC_Click(object sender, EventArgs e)
  174. {
  175. foreach (DataSet1.tb_prestaRow p in tb_presta.Rows)
  176. {
  177. Console.WriteLine(p["sta_pr"].ToString());
  178. Console.WriteLine(p["prod_pr"].ToString());
  179. Console.WriteLine(p["kind_pr"].ToString());
  180. Console.WriteLine(p["unite_pr"].ToString());
  181. Console.WriteLine(p["pu_pr"].ToString());
  182. Console.WriteLine(p["tva_pr"].ToString());
  183. Console.WriteLine(p["ttc_pr"].ToString());
  184. if (p["pu_pr"].ToString() != "" && p["tva_pr"].ToString() != "")
  185. {
  186. Decimal ht = (Decimal)p["pu_pr"];
  187. Decimal tva = 1 + (Decimal)p["tva_pr"] / 100;
  188. Decimal ttc = ht * tva;
  189. ttc = Math.Round(ttc, 3);
  190. p["ttc_pr"] = ttc;
  191. }
  192. }
  193. }
  194. private void dg_vente_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
  195. {
  196. if (e.RowIndex > 0)
  197. {
  198. if (dg_vente.Rows[e.RowIndex - 1].Cells[0].Value is System.DBNull)
  199. {
  200. dg_vente.Rows[e.RowIndex - 1].Cells[0].Value = Program.key_ope;
  201. dg_vente.Rows[e.RowIndex - 1].Cells[1].Value = id_sta;
  202. }
  203. if (dg_vente.Rows[e.RowIndex - 1].Cells[0].Value == null)
  204. {
  205. dg_vente.Rows[e.RowIndex - 1].Cells[0].Value = Program.key_ope;
  206. dg_vente.Rows[e.RowIndex - 1].Cells[1].Value = id_sta;
  207. }
  208. }
  209. }
  210. private void dg_presta_CellEndEdit(object sender, DataGridViewCellEventArgs e)
  211. {
  212. if (e.ColumnIndex != 1) return;
  213. string typeProd = "";
  214. string prod = dg_presta.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
  215. if (lproduit.Exists(xx => xx.key_prod == prod))
  216. typeProd = lproduit.Find(xx => xx.key_prod == prod).type_prod;
  217. dg_presta.Rows[e.RowIndex].Cells[2].Value = typeProd;
  218. }
  219. private void SavePresta()
  220. {
  221. List<PrestaSta> prestaStas = new List<PrestaSta>();
  222. string filter = tbprestaBindingSource.Filter;
  223. tbprestaBindingSource.Filter = "";
  224. tbprestaBindingSource.Sort = "sta_pr,kind_pr,prod_pr";
  225. var result0 = JsonConvert.SerializeObject(tb_presta);
  226. var result1 = JsonConvert.DeserializeObject<List<Presta>>(result0);
  227. var oldPr = "*";
  228. var oldKind = "*";
  229. Prod prod;
  230. PrestaSta newPresta = new PrestaSta();
  231. foreach (var presta in result1)
  232. {
  233. var l_pr = lproduit.FirstOrDefault(x => x.key_prod == presta.prod_pr);
  234. if (l_pr == null)
  235. {
  236. continue;
  237. }
  238. var idSta = presta.sta_pr;
  239. var kind = presta.kind_pr;
  240. if (idSta != oldPr)
  241. {
  242. if (newPresta != null && !string.IsNullOrEmpty(newPresta.sta_pr))
  243. {
  244. prestaStas.Add(newPresta);
  245. }
  246. newPresta = new PrestaSta();
  247. oldPr = idSta;
  248. }
  249. prod = new Prod
  250. {
  251. lib_prod = l_pr.lib_prod,
  252. prod_pr = presta.prod_pr,
  253. unite_pr = presta.unite_pr,
  254. pu_pr = presta.pu_pr.ToString("0.000"),
  255. tva_pr = presta.tva_pr.ToString("0.000"),
  256. ttc_pr = presta.ttc_pr.ToString("0.000")
  257. };
  258. newPresta.sta_pr = idSta;
  259. if (kind == "Carburant")
  260. {
  261. newPresta.carburants.Add(prod);
  262. }
  263. else
  264. {
  265. newPresta.autres.Add(prod);
  266. }
  267. }
  268. tbprestaBindingSource.Filter = filter;
  269. DbUtil.SaveToJson<DataSet1.tb_prestaDataTable>(Program.subfolder + @"\prestalocal.json", tb_presta);
  270. DbUtil.SaveToJson(prestaStas, Program.subfolder + @"\presta.json");
  271. }
  272. private void button1_Click(object sender, EventArgs e)
  273. {
  274. SavePresta();
  275. return;
  276. try
  277. {
  278. string filter = tbprestaBindingSource.Filter;
  279. tbprestaBindingSource.Filter = "";
  280. tbprestaBindingSource.Sort = "sta_pr,kind_pr,prod_pr";
  281. tbprestaBindingSource.MoveFirst();
  282. int size = tbprestaBindingSource.Count;
  283. System.Data.DataRowView[] arr = new System.Data.DataRowView[8192];
  284. tbprestaBindingSource.CopyTo(arr, 0);
  285. int id_sta = 9999;
  286. string kind_carbu = "####";
  287. XElement station = null;
  288. XElement prod = null;
  289. XElement detail = null;
  290. XElement presta = new XElement("tb_prestas", null);
  291. for (int i = 0; i < tbprestaBindingSource.Count; i++)
  292. {
  293. string a = i.ToString() + "-" + arr[i].Row["sta_pr"].ToString() + "-" + arr[i].Row["kind_pr"].ToString() + "-" + arr[i].Row["prod_pr"].ToString();
  294. Console.WriteLine(a);
  295. if (id_sta != Convert.ToInt32(arr[i].Row["sta_pr"]))
  296. {
  297. station = new XElement("tb_presta", new XElement("sta_pr", arr[i].Row["sta_pr"].ToString()));
  298. presta.Add(station);
  299. id_sta = Convert.ToInt32(arr[i].Row["sta_pr"]);
  300. kind_carbu = "####";
  301. }
  302. if (kind_carbu != arr[i].Row["kind_pr"].ToString())
  303. {
  304. prod = new XElement(arr[i].Row["kind_pr"].ToString() == "Carburant" ? "carburants" : "autres", null);
  305. station.Add(prod);
  306. kind_carbu = arr[i].Row["kind_pr"].ToString();
  307. }
  308. if (lproduit.Find(xx => xx.key_prod == arr[i].Row["prod_pr"].ToString()) != null)
  309. {
  310. detail = new XElement(arr[i].Row["kind_pr"].ToString() == "Carburant" ? "carburant" : "autre",
  311. new XElement("prod_pr", arr[i].Row["prod_pr"].ToString()),
  312. new XElement("lib_prod", lproduit.Find(xx => xx.key_prod == arr[i].Row["prod_pr"].ToString()).lib_prod),
  313. new XElement("unite_pr", arr[i].Row["unite_pr"].ToString()),
  314. new XElement("pu_pr", arr[i].Row["pu_pr"].ToString()),
  315. new XElement("tva_pr", arr[i].Row["ttc_pr"].ToString()),
  316. new XElement("ttc_pr", arr[i].Row["ttc_pr"].ToString()));
  317. prod.Add(detail);
  318. }
  319. else
  320. {
  321. MessageBox.Show(arr[i].Row["prod_pr"].ToString() + " Produit supprimé !!", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
  322. }
  323. }
  324. presta.Save(Program.subfolder + @"\presta.xml");
  325. DbUtil.SaveToJson<DataSet1.tb_prestaDataTable>(Program.subfolder + @"\prestalocal.json", tb_presta);
  326. tbprestaBindingSource.Filter = filter;
  327. MessageBox.Show("Sauvegarde effectuée, il faut maintenant envoyer les fichiers !!", "Terminé", MessageBoxButtons.OK, MessageBoxIcon.Information);
  328. }
  329. catch (Exception ex)
  330. {
  331. MessageBox.Show("Sauvegarde non effectuée!!!!" + "\r\n" + ex.Message, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
  332. }
  333. }
  334. private void t_facture_Click(object sender, EventArgs e)
  335. {
  336. f_facture ffac = new f_facture(current_sta["key_sta"].ToString());
  337. ffac.ShowDialog();
  338. }
  339. private void dg_vente_CellEndEdit(object sender, DataGridViewCellEventArgs e)
  340. {
  341. Console.WriteLine("EN EDIT ");
  342. bool ok = true;
  343. if (myrow != null)
  344. {
  345. Console.WriteLine("EN EDIT OK1");
  346. float qtt = 0;
  347. float puttc = 0;
  348. float tva = 0;
  349. float ttc = 0;
  350. float ht = 0;
  351. ok = float.TryParse(myrow.Cells[5].Value.ToString(), out qtt);
  352. if (ok) ok = float.TryParse(myrow.Cells[6].Value.ToString(), out puttc);
  353. if (ok) ok = float.TryParse(myrow.Cells[7].Value.ToString(), out tva);
  354. if (ok) ok = float.TryParse(myrow.Cells[8].Value.ToString(), out ht);
  355. if (ok) ok = float.TryParse(myrow.Cells[9].Value.ToString(), out ttc);
  356. if (!ok)
  357. {
  358. MessageBox.Show("Erreur de saisie");
  359. dg_vente.Rows[e.RowIndex].Cells[5].Value = oldqtt;
  360. return;
  361. }
  362. dg_vente.Rows[e.RowIndex].Cells[9].Value = qtt * puttc;
  363. dg_vente.Rows[e.RowIndex].Cells[8].Value = (qtt * puttc) / (1 + (tva / 100));
  364. }
  365. myrow = null;
  366. oldqtt = 0;
  367. Console.WriteLine("ENd EDIT OUt");
  368. }
  369. private void dg_vente_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
  370. {
  371. Console.WriteLine("BEGIN EDIT");
  372. myrow = dg_vente.Rows[e.RowIndex];
  373. if (!float.TryParse(myrow.Cells[5].Value.ToString(), out oldqtt))
  374. e.Cancel = true;
  375. }
  376. private void dg_vente_CellLeave(object sender, DataGridViewCellEventArgs e)
  377. {
  378. }
  379. private void dg_vente_DataError(object sender, DataGridViewDataErrorEventArgs e)
  380. {
  381. if (myrow != null)
  382. {
  383. MessageBox.Show("Appuyez sur la touche Echappe (ESC Escape) \r\n dans la grille de saisie pour Abndonner l'opération", "Erreur de saisie");
  384. dg_vente.Rows[e.RowIndex].Cells[5].Value = oldqtt;
  385. myrow = null;
  386. oldqtt = 0;
  387. }
  388. }
  389. private void chk_modif_CheckedChanged(object sender, EventArgs e)
  390. {
  391. dg_vt_qtt.ReadOnly = !chk_modif.Checked;
  392. for (int i = 0; i < dg_vente.ColumnCount; i++)
  393. {
  394. if (i == 5)
  395. dg_vente.Columns[i].DefaultCellStyle.BackColor = chk_modif.Checked ? Color.LimeGreen : Color.Empty;
  396. else
  397. dg_vente.Columns[i].DefaultCellStyle.BackColor = chk_modif.Checked ? Color.OrangeRed : Color.Empty;
  398. }
  399. }
  400. }
  401. }