public async Task <IHttpActionResult> DeleteDirDiscount(int id) { #region Проверяем Логин и Пароль + Изменяем строку соединения + Права + Разные Функции //Получаем Куку System.Web.HttpCookie authCookie = System.Web.HttpContext.Current.Request.Cookies["CookieIPOL"]; // Проверяем Логин и Пароль Classes.Account.Login.Field field = await Task.Run(() => login.Return(authCookie, true)); if (!field.Access) { return(Ok(returnServer.Return(false, Classes.Language.Sklad.Language.msg10))); } //Изменяем строку соединения db = new DbConnectionSklad(connectionString.Return(field.DirCustomersID, null, true)); //Права (1 - Write, 2 - Read, 3 - No Access) int iRight = await Task.Run(() => accessRight.Access(connectionString.Return(field.DirCustomersID, null, true), field.DirEmployeeID, "RightDirDiscounts")); if (iRight != 1) { return(Ok(returnServer.Return(false, Classes.Language.Sklad.Language.msg57(0)))); } //Разные Функции function.NumberDecimalSeparator(); //Получам настройки Models.Sklad.Sys.SysSetting sysSetting = await db.SysSettings.FindAsync(1); #endregion #region Удаление try { DirDiscount dirDiscount = await db.DirDiscounts.FindAsync(id); if (dirDiscount == null) { return(Ok(returnServer.Return(false, Classes.Language.Sklad.Language.msg99))); } //if (dirDiscount.SysRecord) return Ok(returnServer.Return(false, Classes.Language.Language.msg98)); if (!dirDiscount.Del) { // === Удаляем === === === === === #region 6. JourDisp *** *** *** *** *** *** *** *** *** * Models.Sklad.Sys.SysJourDisp sysJourDisp = new Models.Sklad.Sys.SysJourDisp(); sysJourDisp.DirDispOperationID = 5; //Удаление записи sysJourDisp.DirEmployeeID = field.DirEmployeeID; sysJourDisp.ListObjectID = ListObjectID; sysJourDisp.TableFieldID = dirDiscount.DirDiscountID; sysJourDisp.Description = ""; try { sysJourDispsController.mPutPostSysJourDisps(db, sysJourDisp, EntityState.Added); } catch (Exception ex) { } #endregion //2. Для каскадного удаления "Договора" (достаточно сделать выборку с ToList() в одном подключении) var queryDirDiscountTabs = await db.DirDiscountTabs.Where(x => x.DirDiscountID == id).ToListAsync(); //3. Удаляем try { db.DirDiscounts.Remove(dirDiscount); await db.SaveChangesAsync(); dynamic collectionWrapper = new { ID = dirDiscount.DirDiscountID, Msg = Classes.Language.Sklad.Language.msg19 }; return(Ok(returnServer.Return(true, collectionWrapper))); //return Ok(returnServer.Return(true, "")); } catch (Exception ex) { if (function.ExceptionFkExist(ex)) { //2. Исключение - пометка на удаление dirDiscount.Del = true; db.Entry(dirDiscount).State = EntityState.Modified; await db.SaveChangesAsync(); dynamic collectionWrapper = new { ID = dirDiscount.DirDiscountID, Msg = Classes.Language.Sklad.Language.msg96 //"Помечено на удаление, так как запись задействована в других объектах сервиса (напр. в документах)." }; return(Ok(returnServer.Return(true, collectionWrapper))); //return Ok(returnServer.Return(true, "")); } else { return(Ok(returnServer.Return(false, exceptionEntry.Return(ex)))); } } } else { // === Снимаем пометку на удаление === === === === === dirDiscount.Del = false; db.Entry(dirDiscount).State = EntityState.Modified; await db.SaveChangesAsync(); dynamic collectionWrapper = new { ID = dirDiscount.DirDiscountID, Msg = Classes.Language.Sklad.Language.msg97 //"Пометка на удаление снята." }; return(Ok(returnServer.Return(true, collectionWrapper))); //return Ok(returnServer.Return(true, "")); } } catch (Exception ex) { return(Ok(returnServer.Return(false, exceptionEntry.Return(ex)))); } #endregion }
//UpdateDirDiscountBar //SaveAccountBasic private void mPutPostDirDiscount( Models.Sklad.Sys.SysSetting sysSettings, DirDiscount dirDiscount, //bool InsertUpdate, //true - Insert, false - Update EntityState entityState, //EntityState.Added, Modified Models.Sklad.Dir.DirDiscountTab[] dirDiscountTabCollection ) { //using (TransactionScope ts = new TransactionScope()) using (System.Data.Entity.DbContextTransaction ts = db.Database.BeginTransaction()) { #region 1. DirDiscount *** *** *** *** *** *** *** *** *** *** db.Entry(dirDiscount).State = entityState; db.SaveChanges(); #endregion #region 2. DirDiscountTab *** *** *** *** *** *** *** *** *** *** //3.2. Удаляем все кроме существующих //3.2.1. Формируем запрос var query2 = ( from dirDiscountTabs in db.DirDiscountTabs where dirDiscountTabs.DirDiscountID == dirDiscount.DirDiscountID // == id select dirDiscountTabs ).ToList(); //3.2.2. Удаляем каждую запись отдельно foreach (var dirDiscountTab in query2) { try { db.Entry(dirDiscountTab).State = EntityState.Deleted; db.SaveChanges(); } catch (Exception ex) { ts.Rollback(); db.Database.Connection.Close(); throw new System.InvalidOperationException(Classes.Language.Sklad.Language.msg93 + ex.Message); } } //3.3. Проверяем, что бы была строгая градация: // Меньшая сумма - меньшая скидка, при росте суммы - ростёт и скидка for (int i = 0; i < dirDiscountTabCollection.Length; i++) { for (int j = i + 1; j < dirDiscountTabCollection.Length; j++) { //Суммы равны if (dirDiscountTabCollection[i].SumBegin == dirDiscountTabCollection[j].SumBegin) { ts.Rollback(); db.Database.Connection.Close(); throw new System.InvalidOperationException(Classes.Language.Sklad.Language.msg58); } //Сумма больше, а скидка меньше if ( (dirDiscountTabCollection[i].SumBegin > dirDiscountTabCollection[j].SumBegin && dirDiscountTabCollection[i].Discount < dirDiscountTabCollection[j].Discount) || (dirDiscountTabCollection[i].SumBegin <dirDiscountTabCollection[j].SumBegin && dirDiscountTabCollection[i].Discount> dirDiscountTabCollection[j].Discount) ) { ts.Rollback(); db.Database.Connection.Close(); throw new System.InvalidOperationException(Classes.Language.Sklad.Language.msg58_1 + " (" + dirDiscountTabCollection[i].SumBegin + "; " + dirDiscountTabCollection[i].Discount + "), (" + dirDiscountTabCollection[j].SumBegin + "; " + dirDiscountTabCollection[j].Discount + ")"); } } } //3.34 Сохраняем for (int i = 0; i < dirDiscountTabCollection.Count(); i++) { dirDiscountTabCollection[i].DirDiscountID = Convert.ToInt32(dirDiscount.DirDiscountID); db.Entry(dirDiscountTabCollection[i]).State = EntityState.Added; db.SaveChanges(); } //db.SaveChanges(); #endregion #region 4. Подтверждение транзакции *** *** *** *** *** *** *** *** *** *** ts.Commit(); //.Complete(); #endregion } }
public async Task <IHttpActionResult> PostDirDiscount(DirDiscount dirDiscount) { #region Проверяем Логин и Пароль + Изменяем строку соединения + Права + Разные Функции //Получаем Куку System.Web.HttpCookie authCookie = System.Web.HttpContext.Current.Request.Cookies["CookieIPOL"]; // Проверяем Логин и Пароль Classes.Account.Login.Field field = await Task.Run(() => login.Return(authCookie, true)); if (!field.Access) { return(Ok(returnServer.Return(false, Classes.Language.Sklad.Language.msg10))); } //Изменяем строку соединения db = new DbConnectionSklad(connectionString.Return(field.DirCustomersID, null, true)); //Права (1 - Write, 2 - Read, 3 - No Access) int iRight = await Task.Run(() => accessRight.Access(connectionString.Return(field.DirCustomersID, null, true), field.DirEmployeeID, "RightDirDiscounts")); if (iRight != 1) { return(Ok(returnServer.Return(false, Classes.Language.Sklad.Language.msg57(0)))); } //Разные Функции function.NumberDecimalSeparator(); //Получам настройки Models.Sklad.Sys.SysSetting sysSetting = await db.SysSettings.FindAsync(1); #endregion #region Параметры //Получаем колекцию "Табличную часть" Models.Sklad.Dir.DirDiscountTab[] dirDiscountTabCollection = null; if (!String.IsNullOrEmpty(dirDiscount.recordsDirDiscountTabsGrid)) { JavaScriptSerializer serializer = new JavaScriptSerializer(); dirDiscountTabCollection = serializer.Deserialize <Models.Sklad.Dir.DirDiscountTab[]>(dirDiscount.recordsDirDiscountTabsGrid); } #endregion #region Проверки if (!ModelState.IsValid) { return(Ok(returnServer.Return(false, Classes.Language.Sklad.Language.msg91))); //return BadRequest(ModelState); } #endregion #region Сохранение try { //Используем метод, что бы было всё в одном потоке await Task.Run(() => mPutPostDirDiscount(sysSetting, dirDiscount, EntityState.Added, dirDiscountTabCollection)); #region 6. JourDisp *** *** *** *** *** *** *** *** *** * Models.Sklad.Sys.SysJourDisp sysJourDisp = new Models.Sklad.Sys.SysJourDisp(); sysJourDisp.DirDispOperationID = 3; //Добавление записи sysJourDisp.DirEmployeeID = field.DirEmployeeID; sysJourDisp.ListObjectID = ListObjectID; sysJourDisp.TableFieldID = dirDiscount.DirDiscountID; sysJourDisp.Description = ""; try { sysJourDispsController.mPutPostSysJourDisps(db, sysJourDisp, EntityState.Added); } catch (Exception ex) { } #endregion dynamic collectionWrapper = new { ID = dirDiscount.DirDiscountID }; return(Ok(returnServer.Return(true, collectionWrapper))); //return Ok(returnServer.Return(true, "")); } catch (Exception ex) { return(Ok(returnServer.Return(false, exceptionEntry.Return(ex)))); } #endregion }