public async Task <IHttpActionResult> DeleteDirBonus(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, "RightDirBonuses")); 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 { DirBonus dirBonus = await db.DirBonuses.FindAsync(id); if (dirBonus == null) { return(Ok(returnServer.Return(false, Classes.Language.Sklad.Language.msg99))); } //if (dirBonus.SysRecord) return Ok(returnServer.Return(false, Classes.Language.Language.msg98)); #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 = id; sysJourDisp.Description = ""; try { sysJourDispsController.mPutPostSysJourDisps(db, sysJourDisp, EntityState.Added); } catch (Exception ex) { } #endregion if (!dirBonus.Del) { // === Удаляем === === === === === //2. Для каскадного удаления "Договора" (достаточно сделать выборку с ToList() в одном подключении) var queryDirBonusTabs = await db.DirBonusTabs.Where(x => x.DirBonusID == id).ToListAsync(); //3. Удаляем try { db.DirBonuses.Remove(dirBonus); await db.SaveChangesAsync(); dynamic collectionWrapper = new { ID = dirBonus.DirBonusID, 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. Исключение - пометка на удаление dirBonus.Del = true; db.Entry(dirBonus).State = EntityState.Modified; await db.SaveChangesAsync(); dynamic collectionWrapper = new { ID = dirBonus.DirBonusID, 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 { // === Снимаем пометку на удаление === === === === === dirBonus.Del = false; db.Entry(dirBonus).State = EntityState.Modified; await db.SaveChangesAsync(); dynamic collectionWrapper = new { ID = dirBonus.DirBonusID, 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 }
//UpdateDirBonusBar //SaveAccountBasic private void mPutPostDirBonus( Models.Sklad.Sys.SysSetting sysSettings, DirBonus dirBonus, //bool InsertUpdate, //true - Insert, false - Update EntityState entityState, //EntityState.Added, Modified Models.Sklad.Dir.DirBonusTab[] dirBonusTabCollection ) { //using (TransactionScope ts = new TransactionScope()) using (System.Data.Entity.DbContextTransaction ts = db.Database.BeginTransaction()) { #region 1. DirBonus *** *** *** *** *** *** *** *** *** *** db.Entry(dirBonus).State = entityState; db.SaveChanges(); #endregion #region 2. DirBonusTab *** *** *** *** *** *** *** *** *** *** //3.2. Удаляем все кроме существующих //3.2.1. Формируем запрос var query2 = ( from dirBonusTabs in db.DirBonusTabs where dirBonusTabs.DirBonusID == dirBonus.DirBonusID // == id select dirBonusTabs ).ToList(); //3.2.2. Удаляем каждую запись отдельно foreach (var dirBonusTab in query2) { try { db.Entry(dirBonusTab).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 < dirBonusTabCollection.Length; i++) { for (int j = i + 1; j < dirBonusTabCollection.Length; j++) { //Суммы равны if (dirBonusTabCollection[i].SumBegin == dirBonusTabCollection[j].SumBegin) { ts.Rollback(); db.Database.Connection.Close(); throw new System.InvalidOperationException(Classes.Language.Sklad.Language.msg58); } //Сумма больше, а скидка меньше if ( (dirBonusTabCollection[i].SumBegin > dirBonusTabCollection[j].SumBegin && dirBonusTabCollection[i].Bonus < dirBonusTabCollection[j].Bonus) || (dirBonusTabCollection[i].SumBegin <dirBonusTabCollection[j].SumBegin && dirBonusTabCollection[i].Bonus> dirBonusTabCollection[j].Bonus) ) { ts.Rollback(); db.Database.Connection.Close(); throw new System.InvalidOperationException(Classes.Language.Sklad.Language.msg58_1 + " (" + dirBonusTabCollection[i].SumBegin + "; " + dirBonusTabCollection[i].Bonus + "), (" + dirBonusTabCollection[j].SumBegin + "; " + dirBonusTabCollection[j].Bonus + ")"); } } } //3.34 Сохраняем for (int i = 0; i < dirBonusTabCollection.Count(); i++) { dirBonusTabCollection[i].DirBonusID = Convert.ToInt32(dirBonus.DirBonusID); db.Entry(dirBonusTabCollection[i]).State = EntityState.Added; db.SaveChanges(); } //db.SaveChanges(); #endregion #region 4. Подтверждение транзакции *** *** *** *** *** *** *** *** *** *** ts.Commit(); //.Complete(); #endregion } }
public async Task <IHttpActionResult> PostDirBonus(DirBonus dirBonus) { #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, "RightDirBonuses")); 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.DirBonusTab[] dirBonusTabCollection = null; if (!String.IsNullOrEmpty(dirBonus.recordsDirBonusTabsGrid)) { JavaScriptSerializer serializer = new JavaScriptSerializer(); dirBonusTabCollection = serializer.Deserialize <Models.Sklad.Dir.DirBonusTab[]>(dirBonus.recordsDirBonusTabsGrid); } #endregion #region Проверки if (!ModelState.IsValid) { return(Ok(returnServer.Return(false, Classes.Language.Sklad.Language.msg91))); //return BadRequest(ModelState); } #endregion #region Сохранение try { //Используем метод, что бы было всё в одном потоке await Task.Run(() => mPutPostDirBonus(sysSetting, dirBonus, EntityState.Added, dirBonusTabCollection)); #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 = dirBonus.DirBonusID; sysJourDisp.Description = ""; try { sysJourDispsController.mPutPostSysJourDisps(db, sysJourDisp, EntityState.Added); } catch (Exception ex) { } #endregion dynamic collectionWrapper = new { ID = dirBonus.DirBonusID }; return(Ok(returnServer.Return(true, collectionWrapper))); //return Ok(returnServer.Return(true, "")); } catch (Exception ex) { return(Ok(returnServer.Return(false, exceptionEntry.Return(ex)))); } #endregion }