FAddZakaz.cs 14 KB

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