FormAddZakaz.cs 13 KB

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