DatabaseHelper.cs 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657
  1. using System;
  2. using System.Data;
  3. using System.Security.Cryptography;
  4. using System.Text;
  5. using Npgsql;
  6. using System.Configuration;
  7. using System.Windows.Forms;
  8. namespace WindowsFormsApp4
  9. {
  10. public static class DatabaseHelper
  11. {
  12. private static string connectionString = ConfigurationManager.ConnectionStrings["PostgreSQL"].ConnectionString;
  13. public static NpgsqlConnection GetConnection()
  14. {
  15. return new NpgsqlConnection(connectionString);
  16. }
  17. public static bool TestConnection()
  18. {
  19. try
  20. {
  21. using (var conn = GetConnection())
  22. {
  23. conn.Open();
  24. return true;
  25. }
  26. }
  27. catch (Exception ex)
  28. {
  29. System.Diagnostics.Debug.WriteLine($"Ошибка подключения: {ex.Message}");
  30. return false;
  31. }
  32. }
  33. public static string HashPassword(string password)
  34. {
  35. using (SHA256 sha256 = SHA256.Create())
  36. {
  37. byte[] bytes = sha256.ComputeHash(Encoding.UTF8.GetBytes(password));
  38. StringBuilder builder = new StringBuilder();
  39. foreach (byte b in bytes)
  40. builder.Append(b.ToString("x2"));
  41. return builder.ToString();
  42. }
  43. }
  44. public class User
  45. {
  46. public int UserId { get; set; }
  47. public string LastName { get; set; }
  48. public string FirstName { get; set; }
  49. public string MiddleName { get; set; }
  50. public string Phone { get; set; }
  51. public string Role { get; set; }
  52. public bool IsActive { get; set; }
  53. public int? ClientId { get; set; }
  54. public int? ManagerId { get; set; }
  55. }
  56. public static User Authenticate(string login, string password)
  57. {
  58. string passwordHash = HashPassword(password);
  59. using (var conn = GetConnection())
  60. {
  61. conn.Open();
  62. string sql = @"
  63. SELECT u.user_id, u.last_name, u.first_name, u.middle_name,
  64. u.phone, u.role_name, u.is_active, u.client_id, u.manager_id
  65. FROM users u
  66. JOIN user_auth a ON u.user_id = a.user_id
  67. WHERE a.login = @login AND a.password_hash = @password_hash AND u.is_active = true";
  68. using (var cmd = new NpgsqlCommand(sql, conn))
  69. {
  70. cmd.Parameters.AddWithValue("@login", login);
  71. cmd.Parameters.AddWithValue("@password_hash", passwordHash);
  72. using (var reader = cmd.ExecuteReader())
  73. {
  74. if (reader.Read())
  75. {
  76. return new User
  77. {
  78. UserId = reader.GetInt32(0),
  79. LastName = reader.GetString(1),
  80. FirstName = reader.GetString(2),
  81. MiddleName = reader.IsDBNull(3) ? null : reader.GetString(3),
  82. Phone = reader.GetString(4),
  83. Role = reader.GetString(5),
  84. IsActive = reader.GetBoolean(6),
  85. ClientId = reader.IsDBNull(7) ? null : (int?)reader.GetInt32(7),
  86. ManagerId = reader.IsDBNull(8) ? null : (int?)reader.GetInt32(8)
  87. };
  88. }
  89. }
  90. }
  91. }
  92. return null;
  93. }
  94. public static DataTable GetRequests(int userId, string role, int? clientId = null, int? managerId = null)
  95. {
  96. DataTable dt = new DataTable();
  97. string sql;
  98. if (role == "admin")
  99. {
  100. sql = @"
  101. SELECT r.id, c.last_name || ' ' || c.first_name AS client_name,
  102. COALESCE(m.last_name || ' ' || m.first_name, 'Не назначен') AS manager_name,
  103. r.request_date, r.measurement_datetime, r.status
  104. FROM request r
  105. LEFT JOIN client c ON r.client_id = c.client_id
  106. LEFT JOIN manager m ON r.manager_id = m.id
  107. ORDER BY r.request_date DESC";
  108. }
  109. else if (role == "manager" && managerId.HasValue)
  110. {
  111. sql = @"
  112. SELECT r.id, c.last_name || ' ' || c.first_name AS client_name,
  113. r.request_date, r.measurement_datetime, r.status
  114. FROM request r
  115. JOIN client c ON r.client_id = c.client_id
  116. WHERE r.status = 'new' OR r.manager_id = @managerId
  117. ORDER BY r.request_date DESC";
  118. }
  119. else if (role == "client" && clientId.HasValue)
  120. {
  121. sql = @"
  122. SELECT r.id, r.request_date, r.measurement_datetime, r.status
  123. FROM request r
  124. WHERE r.client_id = @clientId
  125. ORDER BY r.request_date DESC";
  126. }
  127. else
  128. {
  129. return dt;
  130. }
  131. using (var conn = GetConnection())
  132. {
  133. conn.Open();
  134. using (var cmd = new NpgsqlCommand(sql, conn))
  135. {
  136. if (role == "manager" && managerId.HasValue)
  137. cmd.Parameters.AddWithValue("@managerId", managerId.Value);
  138. if (role == "client" && clientId.HasValue)
  139. cmd.Parameters.AddWithValue("@clientId", clientId.Value);
  140. using (var adapter = new NpgsqlDataAdapter(cmd))
  141. {
  142. adapter.Fill(dt);
  143. }
  144. }
  145. }
  146. return dt;
  147. }
  148. public static bool UpdateRequestStatus(int requestId, string newStatus)
  149. {
  150. using (var conn = GetConnection())
  151. {
  152. conn.Open();
  153. string sql = "UPDATE request SET status = @status WHERE id = @id";
  154. using (var cmd = new NpgsqlCommand(sql, conn))
  155. {
  156. cmd.Parameters.AddWithValue("@status", newStatus);
  157. cmd.Parameters.AddWithValue("@id", requestId);
  158. return cmd.ExecuteNonQuery() > 0;
  159. }
  160. }
  161. }
  162. public static DataTable GetClients()
  163. {
  164. DataTable dt = new DataTable();
  165. string sql = "SELECT client_id, last_name, first_name, middle_name, phone FROM client ORDER BY last_name";
  166. using (var conn = GetConnection())
  167. {
  168. conn.Open();
  169. using (var adapter = new NpgsqlDataAdapter(sql, conn))
  170. {
  171. adapter.Fill(dt);
  172. }
  173. }
  174. return dt;
  175. }
  176. public static DataTable GetManagers()
  177. {
  178. DataTable dt = new DataTable();
  179. string sql = "SELECT id AS manager_id, last_name, first_name, phone FROM manager ORDER BY last_name";
  180. using (var conn = GetConnection())
  181. {
  182. conn.Open();
  183. using (var adapter = new NpgsqlDataAdapter(sql, conn))
  184. {
  185. adapter.Fill(dt);
  186. }
  187. }
  188. return dt;
  189. }
  190. public static DataTable GetManagerStatistics()
  191. {
  192. DataTable dt = new DataTable();
  193. string sql = @"SELECT * FROM zimogorov_aa.manager_statistics ORDER BY completed_requests DESC";
  194. using (var conn = GetConnection())
  195. {
  196. conn.Open();
  197. using (var adapter = new NpgsqlDataAdapter(sql, conn))
  198. {
  199. adapter.Fill(dt);
  200. }
  201. }
  202. return dt;
  203. }
  204. public static DataTable GetManagerPerformance(DateTime startDate, DateTime endDate)
  205. {
  206. DataTable dt = new DataTable();
  207. string sql = @"SELECT * FROM zimogorov_aa.get_manager_performance(@start_date::date, @end_date::date)";
  208. using (var conn = GetConnection())
  209. {
  210. conn.Open();
  211. using (var cmd = new NpgsqlCommand(sql, conn))
  212. {
  213. cmd.Parameters.AddWithValue("@start_date", startDate);
  214. cmd.Parameters.AddWithValue("@end_date", endDate);
  215. using (var adapter = new NpgsqlDataAdapter(cmd))
  216. {
  217. adapter.Fill(dt);
  218. }
  219. }
  220. }
  221. return dt;
  222. }
  223. public static int AddClient(string lastName, string firstName, string middleName, string phone)
  224. {
  225. using (var conn = GetConnection())
  226. {
  227. conn.Open();
  228. string sql = @"
  229. INSERT INTO client (last_name, first_name, middle_name, phone)
  230. VALUES (@last_name, @first_name, @middle_name, @phone)
  231. RETURNING client_id";
  232. using (var cmd = new NpgsqlCommand(sql, conn))
  233. {
  234. cmd.Parameters.AddWithValue("@last_name", lastName);
  235. cmd.Parameters.AddWithValue("@first_name", firstName);
  236. cmd.Parameters.AddWithValue("@middle_name", string.IsNullOrEmpty(middleName) ? (object)DBNull.Value : middleName);
  237. cmd.Parameters.AddWithValue("@phone", phone);
  238. return (int)cmd.ExecuteScalar();
  239. }
  240. }
  241. }
  242. public static int AddManager(string lastName, string firstName, string middleName, string phone)
  243. {
  244. using (var conn = GetConnection())
  245. {
  246. conn.Open();
  247. string sql = @"
  248. INSERT INTO manager (last_name, first_name, middle_name, phone)
  249. VALUES (@last_name, @first_name, @middle_name, @phone)
  250. RETURNING id";
  251. using (var cmd = new NpgsqlCommand(sql, conn))
  252. {
  253. cmd.Parameters.AddWithValue("@last_name", lastName);
  254. cmd.Parameters.AddWithValue("@first_name", firstName);
  255. cmd.Parameters.AddWithValue("@middle_name", string.IsNullOrEmpty(middleName) ? (object)DBNull.Value : middleName);
  256. cmd.Parameters.AddWithValue("@phone", phone);
  257. return (int)cmd.ExecuteScalar();
  258. }
  259. }
  260. }
  261. public static bool DeleteClient(int clientId)
  262. {
  263. using (var conn = GetConnection())
  264. {
  265. conn.Open();
  266. string sql = "DELETE FROM client WHERE client_id = @client_id";
  267. using (var cmd = new NpgsqlCommand(sql, conn))
  268. {
  269. cmd.Parameters.AddWithValue("@client_id", clientId);
  270. return cmd.ExecuteNonQuery() > 0;
  271. }
  272. }
  273. }
  274. public static bool DeleteManager(int managerId)
  275. {
  276. using (var conn = GetConnection())
  277. {
  278. conn.Open();
  279. string sql = "DELETE FROM manager WHERE id = @id";
  280. using (var cmd = new NpgsqlCommand(sql, conn))
  281. {
  282. cmd.Parameters.AddWithValue("@id", managerId);
  283. return cmd.ExecuteNonQuery() > 0;
  284. }
  285. }
  286. }
  287. public static bool LoginExists(string login)
  288. {
  289. using (var conn = GetConnection())
  290. {
  291. conn.Open();
  292. string sql = "SELECT COUNT(*) FROM user_auth WHERE login = @login";
  293. using (var cmd = new NpgsqlCommand(sql, conn))
  294. {
  295. cmd.Parameters.AddWithValue("@login", login);
  296. long count = (long)cmd.ExecuteScalar();
  297. return count > 0;
  298. }
  299. }
  300. }
  301. public static bool PhoneExists(string phone)
  302. {
  303. using (var conn = GetConnection())
  304. {
  305. conn.Open();
  306. string sql = "SELECT COUNT(*) FROM client WHERE phone = @phone";
  307. using (var cmd = new NpgsqlCommand(sql, conn))
  308. {
  309. cmd.Parameters.AddWithValue("@phone", phone);
  310. long count = (long)cmd.ExecuteScalar();
  311. return count > 0;
  312. }
  313. }
  314. }
  315. public static int RegisterClient(string lastName, string firstName, string middleName, string phone)
  316. {
  317. using (var conn = GetConnection())
  318. {
  319. conn.Open();
  320. string sql = @"
  321. INSERT INTO client (last_name, first_name, middle_name, phone)
  322. VALUES (@last_name, @first_name, @middle_name, @phone)
  323. RETURNING client_id";
  324. using (var cmd = new NpgsqlCommand(sql, conn))
  325. {
  326. cmd.Parameters.AddWithValue("@last_name", lastName);
  327. cmd.Parameters.AddWithValue("@first_name", firstName);
  328. cmd.Parameters.AddWithValue("@middle_name", string.IsNullOrEmpty(middleName) ? (object)DBNull.Value : middleName);
  329. cmd.Parameters.AddWithValue("@phone", phone);
  330. return (int)cmd.ExecuteScalar();
  331. }
  332. }
  333. }
  334. public static int CreateUser(string lastName, string firstName, string middleName, string phone, string role, int? clientId, int? managerId)
  335. {
  336. using (var conn = GetConnection())
  337. {
  338. conn.Open();
  339. string sql = @"
  340. INSERT INTO users (last_name, first_name, middle_name, phone, role_name, client_id, manager_id, created_at, is_active)
  341. VALUES (@last_name, @first_name, @middle_name, @phone, @role::user_role, @client_id, @manager_id, CURRENT_DATE, true)
  342. RETURNING user_id";
  343. using (var cmd = new NpgsqlCommand(sql, conn))
  344. {
  345. cmd.Parameters.AddWithValue("@last_name", lastName);
  346. cmd.Parameters.AddWithValue("@first_name", firstName);
  347. cmd.Parameters.AddWithValue("@middle_name", string.IsNullOrEmpty(middleName) ? (object)DBNull.Value : middleName);
  348. cmd.Parameters.AddWithValue("@phone", phone);
  349. cmd.Parameters.AddWithValue("@role", role);
  350. cmd.Parameters.AddWithValue("@client_id", clientId.HasValue ? (object)clientId.Value : DBNull.Value);
  351. cmd.Parameters.AddWithValue("@manager_id", managerId.HasValue ? (object)managerId.Value : DBNull.Value);
  352. return (int)cmd.ExecuteScalar();
  353. }
  354. }
  355. }
  356. public static bool CreateUserAuth(int userId, string login, string password)
  357. {
  358. string passwordHash = HashPassword(password);
  359. using (var conn = GetConnection())
  360. {
  361. conn.Open();
  362. string sql = @"
  363. INSERT INTO user_auth (user_id, login, password_hash, created_at, is_current)
  364. VALUES (@user_id, @login, @password_hash, CURRENT_TIMESTAMP, true)";
  365. using (var cmd = new NpgsqlCommand(sql, conn))
  366. {
  367. cmd.Parameters.AddWithValue("@user_id", userId);
  368. cmd.Parameters.AddWithValue("@login", login);
  369. cmd.Parameters.AddWithValue("@password_hash", passwordHash);
  370. return cmd.ExecuteNonQuery() > 0;
  371. }
  372. }
  373. }
  374. public static bool UpdateClient(int clientId, string lastName, string firstName, string middleName, string phone)
  375. {
  376. using (var conn = GetConnection())
  377. {
  378. conn.Open();
  379. string sql = @"
  380. UPDATE client
  381. SET last_name = @last_name,
  382. first_name = @first_name,
  383. middle_name = @middle_name,
  384. phone = @phone
  385. WHERE client_id = @client_id";
  386. using (var cmd = new NpgsqlCommand(sql, conn))
  387. {
  388. cmd.Parameters.AddWithValue("@client_id", clientId);
  389. cmd.Parameters.AddWithValue("@last_name", lastName);
  390. cmd.Parameters.AddWithValue("@first_name", firstName);
  391. cmd.Parameters.AddWithValue("@middle_name", string.IsNullOrEmpty(middleName) ? (object)DBNull.Value : middleName);
  392. cmd.Parameters.AddWithValue("@phone", phone);
  393. return cmd.ExecuteNonQuery() > 0;
  394. }
  395. }
  396. }
  397. public static bool UpdateManager(int managerId, string lastName, string firstName, string middleName, string phone)
  398. {
  399. using (var conn = GetConnection())
  400. {
  401. conn.Open();
  402. string sql = @"
  403. UPDATE manager
  404. SET last_name = @last_name,
  405. first_name = @first_name,
  406. middle_name = @middle_name,
  407. phone = @phone
  408. WHERE id = @id";
  409. using (var cmd = new NpgsqlCommand(sql, conn))
  410. {
  411. cmd.Parameters.AddWithValue("@id", managerId);
  412. cmd.Parameters.AddWithValue("@last_name", lastName);
  413. cmd.Parameters.AddWithValue("@first_name", firstName);
  414. cmd.Parameters.AddWithValue("@middle_name", string.IsNullOrEmpty(middleName) ? (object)DBNull.Value : middleName);
  415. cmd.Parameters.AddWithValue("@phone", phone);
  416. return cmd.ExecuteNonQuery() > 0;
  417. }
  418. }
  419. }
  420. public static int GetManagerActiveRequests(int managerId)
  421. {
  422. using (var conn = GetConnection())
  423. {
  424. conn.Open();
  425. string sql = "SELECT COUNT(*) FROM request WHERE manager_id = @manager_id AND status IN ('new', 'in_progress')";
  426. using (var cmd = new NpgsqlCommand(sql, conn))
  427. {
  428. cmd.Parameters.AddWithValue("@manager_id", managerId);
  429. return Convert.ToInt32(cmd.ExecuteScalar());
  430. }
  431. }
  432. }
  433. public static DataTable GetClientAddresses(int clientId)
  434. {
  435. DataTable dt = new DataTable();
  436. string sql = @"
  437. SELECT a.id AS address_id,
  438. a.city || ', ' || a.street || ', ' || a.house ||
  439. CASE WHEN a.apartment IS NOT NULL AND a.apartment != ''
  440. THEN ', кв. ' || a.apartment
  441. ELSE '' END AS address_text
  442. FROM client_address ca
  443. JOIN address a ON ca.address_id = a.id
  444. WHERE ca.client_id = @client_id
  445. ORDER BY ca.priority ASC";
  446. using (var conn = GetConnection())
  447. {
  448. conn.Open();
  449. using (var cmd = new NpgsqlCommand(sql, conn))
  450. {
  451. cmd.Parameters.AddWithValue("@client_id", clientId);
  452. using (var adapter = new NpgsqlDataAdapter(cmd))
  453. {
  454. adapter.Fill(dt);
  455. }
  456. }
  457. }
  458. return dt;
  459. }
  460. public static int CreateRequest(int clientId, DateTime measurementDateTime)
  461. {
  462. using (var conn = GetConnection())
  463. {
  464. conn.Open();
  465. string sql = @"
  466. INSERT INTO request (client_id, request_date, measurement_datetime, status)
  467. VALUES (@client_id, CURRENT_DATE, @measurement_datetime, 'new')
  468. RETURNING id";
  469. using (var cmd = new NpgsqlCommand(sql, conn))
  470. {
  471. cmd.Parameters.AddWithValue("@client_id", clientId);
  472. cmd.Parameters.AddWithValue("@measurement_datetime", measurementDateTime);
  473. return (int)cmd.ExecuteScalar();
  474. }
  475. }
  476. }
  477. public static DataTable GetClientAddressesWithDetails(int clientId)
  478. {
  479. DataTable dt = new DataTable();
  480. string sql = @"
  481. SELECT a.id AS address_id, a.city, a.street, a.house, a.building, a.apartment,
  482. ca.address_type, ca.priority
  483. FROM client_address ca
  484. JOIN address a ON ca.address_id = a.id
  485. WHERE ca.client_id = @client_id
  486. ORDER BY ca.priority ASC";
  487. using (var conn = GetConnection())
  488. {
  489. conn.Open();
  490. using (var cmd = new NpgsqlCommand(sql, conn))
  491. {
  492. cmd.Parameters.AddWithValue("@client_id", clientId);
  493. using (var adapter = new NpgsqlDataAdapter(cmd))
  494. {
  495. adapter.Fill(dt);
  496. }
  497. }
  498. }
  499. return dt;
  500. }
  501. public static int AddAddress(string city, string street, string house, string building, string apartment)
  502. {
  503. using (var conn = GetConnection())
  504. {
  505. conn.Open();
  506. string sql = @"
  507. INSERT INTO address (city, street, house, building, apartment)
  508. VALUES (@city, @street, @house, @building, @apartment)
  509. RETURNING id";
  510. using (var cmd = new NpgsqlCommand(sql, conn))
  511. {
  512. cmd.Parameters.AddWithValue("@city", city);
  513. cmd.Parameters.AddWithValue("@street", street);
  514. cmd.Parameters.AddWithValue("@house", house);
  515. cmd.Parameters.AddWithValue("@building", string.IsNullOrEmpty(building) ? (object)DBNull.Value : building);
  516. cmd.Parameters.AddWithValue("@apartment", string.IsNullOrEmpty(apartment) ? (object)DBNull.Value : apartment);
  517. return (int)cmd.ExecuteScalar();
  518. }
  519. }
  520. }
  521. public static bool UpdateAddress(int addressId, string city, string street, string house, string building, string apartment)
  522. {
  523. using (var conn = GetConnection())
  524. {
  525. conn.Open();
  526. string sql = @"
  527. UPDATE address
  528. SET city = @city, street = @street, house = @house,
  529. building = @building, apartment = @apartment
  530. WHERE id = @id";
  531. using (var cmd = new NpgsqlCommand(sql, conn))
  532. {
  533. cmd.Parameters.AddWithValue("@id", addressId);
  534. cmd.Parameters.AddWithValue("@city", city);
  535. cmd.Parameters.AddWithValue("@street", street);
  536. cmd.Parameters.AddWithValue("@house", house);
  537. cmd.Parameters.AddWithValue("@building", string.IsNullOrEmpty(building) ? (object)DBNull.Value : building);
  538. cmd.Parameters.AddWithValue("@apartment", string.IsNullOrEmpty(apartment) ? (object)DBNull.Value : apartment);
  539. return cmd.ExecuteNonQuery() > 0;
  540. }
  541. }
  542. }
  543. public static bool AddClientAddress(int clientId, int addressId, string addressType, int priority)
  544. {
  545. using (var conn = GetConnection())
  546. {
  547. conn.Open();
  548. string sql = @"
  549. INSERT INTO client_address (client_id, address_id, address_type, priority)
  550. VALUES (@client_id, @address_id, @address_type, @priority)";
  551. using (var cmd = new NpgsqlCommand(sql, conn))
  552. {
  553. cmd.Parameters.AddWithValue("@client_id", clientId);
  554. cmd.Parameters.AddWithValue("@address_id", addressId);
  555. cmd.Parameters.AddWithValue("@address_type", addressType);
  556. cmd.Parameters.AddWithValue("@priority", priority);
  557. return cmd.ExecuteNonQuery() > 0;
  558. }
  559. }
  560. }
  561. public static bool DeleteClientAddress(int clientId, int addressId)
  562. {
  563. using (var conn = GetConnection())
  564. {
  565. conn.Open();
  566. string sql = "DELETE FROM client_address WHERE client_id = @client_id AND address_id = @address_id";
  567. using (var cmd = new NpgsqlCommand(sql, conn))
  568. {
  569. cmd.Parameters.AddWithValue("@client_id", clientId);
  570. cmd.Parameters.AddWithValue("@address_id", addressId);
  571. return cmd.ExecuteNonQuery() > 0;
  572. }
  573. }
  574. }
  575. public static bool SetMainAddress(int clientId, int addressId)
  576. {
  577. using (var conn = GetConnection())
  578. {
  579. conn.Open();
  580. using (var trans = conn.BeginTransaction())
  581. {
  582. string sqlReset = "UPDATE client_address SET priority = 10 WHERE client_id = @client_id";
  583. using (var cmdReset = new NpgsqlCommand(sqlReset, conn, trans))
  584. {
  585. cmdReset.Parameters.AddWithValue("@client_id", clientId);
  586. cmdReset.ExecuteNonQuery();
  587. }
  588. string sqlSet = "UPDATE client_address SET priority = 1 WHERE client_id = @client_id AND address_id = @address_id";
  589. using (var cmdSet = new NpgsqlCommand(sqlSet, conn, trans))
  590. {
  591. cmdSet.Parameters.AddWithValue("@client_id", clientId);
  592. cmdSet.Parameters.AddWithValue("@address_id", addressId);
  593. cmdSet.ExecuteNonQuery();
  594. }
  595. trans.Commit();
  596. return true;
  597. }
  598. }
  599. }
  600. public static bool AssignManagerToRequest(int requestId, int managerId)
  601. {
  602. using (var conn = GetConnection())
  603. {
  604. conn.Open();
  605. string sql = "UPDATE request SET manager_id = @manager_id WHERE id = @request_id";
  606. using (var cmd = new NpgsqlCommand(sql, conn))
  607. {
  608. cmd.Parameters.AddWithValue("@request_id", requestId);
  609. cmd.Parameters.AddWithValue("@manager_id", managerId);
  610. return cmd.ExecuteNonQuery() > 0;
  611. }
  612. }
  613. }
  614. }
  615. }