fAddZakaz.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Data.SqlClient;
  6. using System.Drawing;
  7. using System.IO;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Windows.Forms;
  12. namespace garment_factory
  13. {
  14. public partial class fAddZakaz : Form
  15. {
  16. public fAddZakaz()
  17. {
  18. InitializeComponent();
  19. }
  20. public string IdZakazchik = "";
  21. string IdTkan = "", IdFur = "";
  22. public struct Tkani
  23. {
  24. public string IdTkan, NameTkan, ColorTkan, Width, Length, Description;
  25. public Image PhotoTkan;
  26. }
  27. List<Tkani> LstTkani = new List<Tkani>();
  28. void GetTkaniFromDB()
  29. {
  30. SqlConnection con = new SqlConnection(Properties.Settings.Default.Fabrika2024ConnectionString);
  31. con.Open();
  32. SqlCommand Query = new SqlCommand("select * from Tkani t join Cveta c on t.id_cvet=c.id_cvet where Dlina > 0", con);
  33. SqlDataReader Data = Query.ExecuteReader();
  34. while (Data.Read())
  35. {
  36. Tkani Tk = new Tkani();
  37. Tk.IdTkan = Data["id_Tkani"].ToString();
  38. Tk.NameTkan = Data["Nazvanie"].ToString();
  39. Tk.ColorTkan = Data["Name_cvet"].ToString();
  40. Tk.Width = Data["Shirina"].ToString();
  41. Tk.Length = Data["Dlina"].ToString();
  42. Tk.Description = Data["Primechanie"].ToString();
  43. try
  44. {
  45. // загрузить из таблицы БД байты фотографии в массив
  46. byte[] PhotoByte = (byte[])Data["Photo"];
  47. ImageConverter ImConverter = new ImageConverter();
  48. // сконвертировать массив байт в изображение
  49. Tk.PhotoTkan = (Bitmap)ImConverter.ConvertFrom(PhotoByte);
  50. }
  51. catch
  52. {
  53. // в случае ошибки загрузить пустое изображение из ресурсов
  54. Tk.PhotoTkan = Properties.Resources.picture;
  55. }
  56. LstTkani.Add(Tk); // добавить в список новую ткань
  57. }
  58. con.Close();
  59. }
  60. void FillLVTkani()
  61. {
  62. LVTkani.Items.Clear();
  63. imageListTkani.Images.Clear();
  64. foreach (Tkani Tk in LstTkani)
  65. {
  66. // новый элемент для ListView с названием ткани
  67. ListViewItem LV = new ListViewItem(Tk.NameTkan);
  68. // в ImageList добавить изображение ткани
  69. imageListTkani.Images.Add(Tk.PhotoTkan);
  70. // связать последнее добавленное изображение с новым элементом ListView
  71. LV.ImageIndex = imageListTkani.Images.Count - 1;
  72. LVTkani.Items.Add(LV); // добавить новый элемент к ListView
  73. }
  74. }
  75. public struct Furnitura
  76. {
  77. public string IdFur, NameFur, CountFur;
  78. public Image PhotoFur;
  79. }
  80. List<Furnitura> LstFurnitura = new List<Furnitura>();
  81. void GetFurnituraFromDB()
  82. {
  83. SqlConnection con = new SqlConnection(Properties.Settings.Default.Fabrika2024ConnectionString);
  84. con.Open();
  85. SqlCommand Query = new SqlCommand("select * from Furnitura where countfur > 0", con);
  86. SqlDataReader Data = Query.ExecuteReader();
  87. while (Data.Read())
  88. {
  89. Furnitura Fr = new Furnitura();
  90. Fr.IdFur = Data["idfur"].ToString();
  91. Fr.NameFur = Data["namefur"].ToString();
  92. Fr.CountFur = Data["countfur"].ToString();
  93. try
  94. {
  95. // загрузить из таблицы БД байты фотографии в массив
  96. byte[] PhotoByte = (byte[])Data["photo"];
  97. ImageConverter ImConverter = new ImageConverter();
  98. // сконвертировать массив байт в изображение
  99. Fr.PhotoFur = (Bitmap)ImConverter.ConvertFrom(PhotoByte);
  100. }
  101. catch
  102. {
  103. // в случае ошибки загрузить пустое изображение из ресурсов
  104. Fr.PhotoFur = Properties.Resources.picture;
  105. }
  106. LstFurnitura.Add(Fr); // добавить в список новую фурнитуру
  107. }
  108. con.Close();
  109. }
  110. void FillLVFurnitura()
  111. {
  112. LVFurnitura.Items.Clear();
  113. ImageListFur.Images.Clear();
  114. foreach (Furnitura Fr in LstFurnitura)
  115. {
  116. // новый элемент для ListView с названием фурнитуры
  117. ListViewItem LV = new ListViewItem(Fr.NameFur);
  118. // в ImageList добавить изображение фурнитуры
  119. ImageListFur.Images.Add(Fr.PhotoFur);
  120. // связать последнее добавленное изображение с новым элементом ListView
  121. LV.ImageIndex = ImageListFur.Images.Count - 1;
  122. LVFurnitura.Items.Add(LV); // добавить новый элемент к ListView
  123. }
  124. }
  125. int CutTkan(int WidthTkan, int WidthIzd, int LengthIzd, int CountIzd)
  126. {
  127. // ЕСЛИ УКЛАДЫВАТЬ ИЗДЕЛИЯ НА ТКАНЬ В РУЛОНЕ ПО ШИРИНЕ ИЗДЕЛИЯ
  128. // кол-во изделий, умещающихся в один ряд на рулоне ткани
  129. int IzdInRow1 = WidthTkan / WidthIzd;
  130. // кол-во рядов, в каждом из которых IzdInRow1 изделий
  131. int Row1 = CountIzd / IzdInRow1;
  132. // если кол-во изделий в 1 ряду умноженное на кол-во рядов меньше
  133. // кол-ва всех изделий, добавить кол-во рядов
  134. if (IzdInRow1 * Row1 < CountIzd)
  135. Row1++;
  136. // длина ткани, которую нужно отрезать от рулона, если укладывать изделия
  137. // по ширине
  138. int CutTkan1 = LengthIzd * Row1;
  139. // ЕСЛИ УКЛАДЫВАТЬ ИЗДЕЛИЯ НА ТКАНЬ В РУЛОНЕ ПО ДЛИНЕ ИЗДЕЛИЯ
  140. // кол-во изделий, умещающихся в один ряд на рулоне ткани
  141. int IzdInRow2 = WidthTkan / LengthIzd;
  142. // кол-во рядов, в каждом из которых IzdInRow2 изделий
  143. int Row2 = CountIzd / IzdInRow2;
  144. // если перемножить кол-во изделий в 1 ряду на кол-во рядов и полученное
  145. // значение меньше кол-ва необходимых изделий, значит нужно использовать
  146. // еще один ряд
  147. if (IzdInRow2 * Row2 < CountIzd)
  148. Row2++;
  149. // длина ткани, которую нужно отрезать от рулона, если укладывать изделия
  150. // по длине
  151. int CutTkan2 = WidthIzd * Row2;
  152. // вернуть наименьшую длину
  153. return Math.Min(CutTkan1, CutTkan2);
  154. }
  155. private void LVTkani_SelectedIndexChanged(object sender, EventArgs e)
  156. {
  157. if (LVTkani.SelectedItems.Count > 0) // есть выделенные элементы
  158. {
  159. int num = LVTkani.SelectedIndices[0]; // номер выделенного элемента
  160. NametkanTextBox.Text = LstTkani[num].NameTkan;
  161. ColorTextBox.Text = LstTkani[num].ColorTkan;
  162. WidthTextBox.Text = LstTkani[num].Width;
  163. LengthTextBox.Text = LstTkani[num].Length;
  164. DescriptionTextBox.Text = LstTkani[num].Description;
  165. IdTkan = LstTkani[num].IdTkan;
  166. }
  167. else // нет выделенных элементов
  168. {
  169. NametkanTextBox.Text = "";
  170. ColorTextBox.Text = "";
  171. WidthTextBox.Text = "";
  172. LengthTextBox.Text = "";
  173. DescriptionTextBox.Text = "";
  174. IdTkan = "";
  175. }
  176. }
  177. private void BtnOK_Click(object sender, EventArgs e)
  178. {
  179. if(TbxCountIzd.Text=="" && TbxCountFur.Text=="")
  180. {
  181. MessageBox.Show("Заполните поля для формирования заказа!", "Внимание");
  182. return;
  183. }
  184. int NewCountFur = int.Parse(TbxCountFurSklad.Text) -
  185. int.Parse(TbxCountFur.Text) * int.Parse(TbxCountIzd.Text);
  186. SqlConnection con = new SqlConnection(Properties.Settings.Default.Fabrika2024ConnectionString);
  187. con.Open();
  188. string t1 = string.Format(@"update Furnitura
  189. set countfur = {0}
  190. where idfur = {1}", NewCountFur, IdFur);
  191. SqlCommand query = new SqlCommand(t1, con);
  192. // выполнить запрос
  193. query.ExecuteNonQuery();
  194. con.Close();
  195. int WidthTkan = int.Parse(WidthTextBox.Text); // ширина ткани
  196. // ширина изделия
  197. int WidthIzd = int.Parse(DgvIzd.CurrentRow.Cells[2].Value.ToString());
  198. // длина изделия
  199. int LengthIzd = int.Parse(DgvIzd.CurrentRow.Cells[1].Value.ToString());
  200. int CountIzd = int.Parse(TbxCountIzd.Text); // кол-во изделий
  201. // отрезать от рулона ткани кусок нужной длины
  202. int NewLengthTkan = int.Parse(LengthTextBox.Text) -
  203. CutTkan(WidthTkan, WidthIzd, LengthIzd, CountIzd);
  204. int IdManager = 2;
  205. try
  206. {
  207. con.Open();
  208. // SQL-запрос для добавления нового заказа
  209. string t = String.Format("insert into Orders (id_izdelie, id_zakaz, id_manager, idtkani, id_furnitur, CountFurnit, Countizdel) " +
  210. "values ({0}, {1}, {2}, {3}, {4}, {5}, {6})",
  211. id_izdelieLabel1.Text, IdZakazchik, IdManager, IdTkan, IdFur, TbxCountFur.Text, TbxCountIzd.Text);
  212. SqlCommand query1 = new SqlCommand(t, con);
  213. // выполнить запрос
  214. query1.ExecuteNonQuery();
  215. con.Close();
  216. MessageBox.Show("Заказ сформирован.", "Внимание!",
  217. MessageBoxButtons.OK, MessageBoxIcon.Information);
  218. this.Close(); // закрыть форму
  219. }
  220. catch
  221. {
  222. MessageBox.Show("Ошибка добавления нового заказа.", "Внимание!",
  223. MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
  224. }
  225. }
  226. public struct Izd
  227. {
  228. public string idIZd, NameIzd, CountIzd, LengthIzd, WidthIzd;
  229. }
  230. List<Izd> LstIzd = new List<Izd>();
  231. void GetIzdFromDB()
  232. {
  233. SqlConnection con = new SqlConnection(Properties.Settings.Default.Fabrika2024ConnectionString);
  234. con.Open();
  235. SqlCommand Query = new SqlCommand("select * from Izdelie where length > 0 and width > 0", con);
  236. SqlDataReader Data = Query.ExecuteReader();
  237. while (Data.Read())
  238. {
  239. Izd izd1 = new Izd();
  240. izd1.idIZd = Data["id_izdelie"].ToString();
  241. izd1.NameIzd = Data["Name_izd"].ToString();
  242. izd1.WidthIzd = Data["width"].ToString();
  243. izd1.LengthIzd = Data["length"].ToString();
  244. }
  245. con.Close();
  246. }
  247. private void LVFurnitura_SelectedIndexChanged(object sender, EventArgs e)
  248. {
  249. if (LVFurnitura.SelectedItems.Count > 0) // есть выделенные элементы
  250. {
  251. int num = LVFurnitura.SelectedIndices[0]; // номер выделенного элемента
  252. TbxNameFur.Text = LstFurnitura[num].NameFur;
  253. TbxCountFurSklad.Text = LstFurnitura[num].CountFur;
  254. IdFur = LstFurnitura[num].IdFur;
  255. }
  256. else // нет выделенных элементов
  257. {
  258. TbxNameFur.Text = "";
  259. TbxCountFurSklad.Text = "";
  260. IdFur = "";
  261. }
  262. }
  263. private void fAddZakaz_Load(object sender, EventArgs e)
  264. {
  265. // TODO: данная строка кода позволяет загрузить данные в таблицу "fabrika2024DataSet.Izdelie". При необходимости она может быть перемещена или удалена.
  266. this.izdelieTableAdapter.Fill(this.fabrika2024DataSet.Izdelie);
  267. // TODO: данная строка кода позволяет загрузить данные в таблицу "fabrika2024DataSet.Orders". При необходимости она может быть перемещена или удалена.
  268. this.ordersTableAdapter.Fill(this.fabrika2024DataSet.Orders);
  269. // TODO: данная строка кода позволяет загрузить данные в таблицу "fabrika2024DataSet.Tkani". При необходимости она может быть перемещена или удалена.
  270. this.tkaniTableAdapter.Fill(this.fabrika2024DataSet.Tkani);
  271. GetIzdFromDB();
  272. GetTkaniFromDB();
  273. FillLVTkani();
  274. GetFurnituraFromDB();
  275. FillLVFurnitura();
  276. }
  277. }
  278. }