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