//Находим или созлаём новыую Характеристику "Цвет" private int ReturnDirCharColourID(string DirCharColourName) { if (DirCharColourName.Length == 0) return 0; //Есть "DirCharColourName" var query = ( from x in db.DirCharColours where x.DirCharColourName.ToLower() == DirCharColourName.ToLower() select x ).ToList(); if (query.Count() > 0) return Convert.ToInt32(query[0].DirCharColourID); //Нет, тогда создаём новый //Нет записи в БД - создаём новую группу и получаем Sub Models.Sklad.Dir.DirCharColour dirCharColour = new Models.Sklad.Dir.DirCharColour(); dirCharColour.DirCharColourID = null; dirCharColour.DirCharColourName = DirCharColourName; db.Entry(dirCharColour).State = EntityState.Added; db.SaveChanges(); return Convert.ToInt32(dirCharColour.DirCharColourID); }
//Сохраням в БД internal void mPutPostSysJourDisps( DbConnectionSklad _db, Models.Sklad.Sys.SysJourDisp sysJourDisp, EntityState entityState ) { sysJourDisp.SysJourDispDateTime = DateTime.Now; _db.Entry(sysJourDisp).State = entityState; _db.SaveChanges(); }
//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 } }
//Сохранение private void mPutPostDirEmployee( DirEmployee dirEmployee, EntityState entityState, //EntityState.Added, Modified Models.Sklad.Dir.DirEmployeeWarehouses[] dirEmployeeWarehousesCollection, Classes.Account.Login.Field field //Для "ExistPay" ) { using (System.Data.Entity.DbContextTransaction ts = db.Database.BeginTransaction()) { #region 1. DirEmployee db.Entry(dirEmployee).State = entityState; db.SaveChanges(); #endregion #region 2. dirEmployeeWarehouses *** *** *** *** *** *** *** *** *** *** //3.2. Удаляем все кроме существующих //3.2.1. Формируем запрос var query2 = ( from dirEmployeeWarehouse in db.DirEmployeeWarehouse where dirEmployeeWarehouse.DirEmployeeID == dirEmployee.DirEmployeeID // == id select dirEmployeeWarehouse ).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 < dirEmployeeWarehousesCollection.Length; i++) { for (int j = i + 1; j < dirEmployeeWarehousesCollection.Length; j++) { //Суммы равны if (dirEmployeeWarehousesCollection[i].DirWarehouseID == dirEmployeeWarehousesCollection[j].DirWarehouseID) { ts.Rollback(); db.Database.Connection.Close(); throw new System.InvalidOperationException(Classes.Language.Sklad.Language.msg121); } } } //3.4 Сохраняем for (int i = 0; i < dirEmployeeWarehousesCollection.Count(); i++) { dirEmployeeWarehousesCollection[i].DirEmployeeID = Convert.ToInt32(dirEmployee.DirEmployeeID); db.Entry(dirEmployeeWarehousesCollection[i]).State = EntityState.Added; db.SaveChanges(); } //db.SaveChanges(); #endregion #region 2. DirEmployeeHistory //Получаем историю DirEmployeeHistory dirEmployeeHistory = new DirEmployeeHistory(); dirEmployeeHistory.DirEmployeeID = Convert.ToInt32(dirEmployee.DirEmployeeID); dirEmployeeHistory.HistoryDate = DateTime.Now; dirEmployeeHistory.DirCurrencyID = dirEmployee.DirCurrencyID; dirEmployeeHistory.Salary = dirEmployee.Salary; dirEmployeeHistory.SalaryDayMonthly = dirEmployee.SalaryDayMonthly; dirEmployeeHistory.DirBonusID = dirEmployee.DirBonusID; //Алгоритм: // - Если не найдена, то создаём сразу запись, с датой = "1800-01-01", т.к. это первая запис в истории //1. Ищим дату самую блискую снизу вверх (Максимум) к дате "dirEmployeeHistory.DirEmployeeHistoryDate" // Возмоно 2-а варианта: "есть дата" и "нет даты" var queryMax = db.DirEmployeeHistories. Where(x => x.DirEmployeeID == dirEmployee.DirEmployeeID). GroupBy(g => new { g.HistoryDate, g.DirEmployeeHistoryID, g.DirCurrencyID, g.Salary, g.DirBonusID, g.SalaryDayMonthly }). Where(grp => grp.Max(m => m.HistoryDate) <= dirEmployeeHistory.HistoryDate). Select(x => x.Key).OrderByDescending(o => o.HistoryDate).FirstOrDefault(); //var queryMax = queryMax1.ToList(); //if (queryMax.Count() == 0) if (queryMax == null) { //2. Нет данных: "INSERT", создаем новую запись в Истории dirEmployeeHistory.HistoryDate = Convert.ToDateTime("1800-01-01"); db.Entry(dirEmployeeHistory).State = EntityState.Added; } else { //3.1. Если реквизиты совпадают, то ничего не делаем // - Если нет, то: // - Даты совпадают - UPDATE // - Даты не совпадают - INSERT //Если не совпадают реквизиты if ( queryMax.DirCurrencyID != dirEmployeeHistory.DirCurrencyID || queryMax.Salary != dirEmployeeHistory.Salary || queryMax.DirBonusID != dirEmployeeHistory.DirBonusID || queryMax.SalaryDayMonthly != dirEmployeeHistory.SalaryDayMonthly ) { if (Convert.ToDateTime(queryMax.HistoryDate).ToString("yyyy-MM-dd") == Convert.ToDateTime(dirEmployeeHistory.HistoryDate).ToString("yyyy-MM-dd")) { //"HistoryID" который надо обновить, т.к. обновляет по PK dirEmployeeHistory.DirEmployeeHistoryID = queryMax.DirEmployeeHistoryID; // - Даты совпадают - UPDATE db.Entry(dirEmployeeHistory).State = EntityState.Modified; } else { // - Даты не совпадают - INSERT db.Entry(dirEmployeeHistory).State = EntityState.Added; //3.2. Если следуящая запись (вверх, до этого нижнюю смотрели) равна (Rate, Multy) вставляемой, то удалить её! var queryMin = db.DirEmployeeHistories. Where(x => x.DirEmployeeID == dirEmployee.DirEmployeeID). GroupBy(g => new { g.HistoryDate, g.DirEmployeeHistoryID, g.DirCurrencyID, g.Salary, g.DirBonusID, g.SalaryDayMonthly }). Where(grp => grp.Min(m => m.HistoryDate) >= dirEmployeeHistory.HistoryDate). Select(x => x.Key). ToList(); if ( queryMin.Count() > 0 && queryMin[0].DirCurrencyID == dirEmployeeHistory.DirCurrencyID && queryMin[0].Salary == dirEmployeeHistory.Salary && queryMin[0].DirBonusID == dirEmployeeHistory.DirBonusID && queryMin[0].SalaryDayMonthly == dirEmployeeHistory.SalaryDayMonthly ) { DirEmployeeHistory dirEmployeeHistoryMin = db.DirEmployeeHistories.Find(queryMin[0].DirEmployeeHistoryID); db.Entry(dirEmployeeHistoryMin).State = EntityState.Deleted; } } } } db.SaveChanges(); #endregion #region 3. Подтверждение транзакции ts.Commit(); //.Complete(); #endregion } }
private void Copy_Folder_DBFile(int DirCustomersID) { //Class.Settings.Variables _var = new Class.Settings.Variables(); Classes.Function.Variables.ConnectionString connectionString = new Function.Variables.ConnectionString(); //1.Создание папок в Users\ // user_XXX // user_XXX\Base // user_XXX\File if (!Directory.Exists(connectionString.SQLitePathUser() + @"\user_" + DirCustomersID)) { Directory.CreateDirectory(connectionString.SQLitePathUser() + @"\user_" + DirCustomersID); } if (!Directory.Exists(connectionString.SQLitePathUser() + @"\user_" + DirCustomersID + @"\Base")) { Directory.CreateDirectory(connectionString.SQLitePathUser() + @"\user_" + DirCustomersID + @"\Base"); } if (!Directory.Exists(connectionString.SQLitePathUser() + @"\user_" + DirCustomersID + @"\File")) { Directory.CreateDirectory(connectionString.SQLitePathUser() + @"\user_" + DirCustomersID + @"\File"); } if (!Directory.Exists(connectionString.SQLitePathUser() + @"\user_" + DirCustomersID + @"\File\Logo")) { Directory.CreateDirectory(connectionString.SQLitePathUser() + @"\user_" + DirCustomersID + @"\File\Logo"); } if (!Directory.Exists(connectionString.SQLitePathUser() + @"\user_" + DirCustomersID + @"\File\Photo")) { Directory.CreateDirectory(connectionString.SQLitePathUser() + @"\user_" + DirCustomersID + @"\File\Photo"); } if (!Directory.Exists(connectionString.SQLitePathUser() + @"\user_" + DirCustomersID + @"\File\Export")) { Directory.CreateDirectory(connectionString.SQLitePathUser() + @"\user_" + DirCustomersID + @"\File\Export"); } //2.Копирование БД из 'Users\Etalon\Base\basic.db' в 'Users\user_XXX\Base\basic.db' if (!File.Exists(connectionString.SQLitePathUser() + @"\user_" + DirCustomersID + @"\Base\basic.db")) { File.Copy(connectionString.SQLitePathEtalon(), connectionString.SQLitePathUser() + @"\user_" + DirCustomersID + @"\Base\basic.db"); } /* * using (SQLiteConnection con = new SQLiteConnection(connectionString.GetSQLiteBasicConnStr_DirCustomersID(DirCustomersID))) * { * using (SQLiteCommand cmd = new SQLiteCommand("UPDATE DirEmployees SET DirEmployeePswd=@DirEmployeePswd", con)) * { * SQLiteParameter parDirEmployeePswd = new SQLiteParameter("@DirEmployeePswd", System.Data.DbType.String) { Value = pPswd }; cmd.Parameters.Add(parDirEmployeePswd); * con.Open(); cmd.ExecuteNonQuery(); con.Close(); con.Dispose(); * } * } */ //2.1.Меняем пароль Администратору using (DbConnectionSklad db = new DbConnectionSklad(connectionString.Return(DirCustomersID, null, true))) { Models.Sklad.Dir.DirEmployee dirEmployee = db.DirEmployees.Where(x => x.DirEmployeeID == 1).ToList()[0]; dirEmployee.DirEmployeePswd = pPswd; db.Entry(dirEmployee).State = EntityState.Modified; db.SaveChanges(); } //3.Для файлов Users/user_x (например изображения) if (!Directory.Exists(connectionString.FilePathUser() + @"\user_" + DirCustomersID)) { Directory.CreateDirectory(connectionString.FilePathUser() + @"\user_" + DirCustomersID); } }
//Сохранение private void mPutPostDirCurrency( DirCurrency dirCurrency, EntityState entityState, //EntityState.Added, Modified Classes.Account.Login.Field field //Для "ExistPay" ) { using (System.Data.Entity.DbContextTransaction ts = db.Database.BeginTransaction()) { #region 1. DirCurrency db.Entry(dirCurrency).State = entityState; db.SaveChanges(); #endregion #region 2. DirCurrencyHistory //Получаем историю DirCurrencyHistory dirCurrencyHistory = new DirCurrencyHistory(); dirCurrencyHistory.DirCurrencyID = Convert.ToInt32(dirCurrency.DirCurrencyID); dirCurrencyHistory.HistoryDate = DateTime.Now; dirCurrencyHistory.DirCurrencyID = dirCurrency.DirCurrencyID; dirCurrencyHistory.DirCurrencyRate = dirCurrency.DirCurrencyRate; dirCurrencyHistory.DirCurrencyMultiplicity = dirCurrency.DirCurrencyMultiplicity; //Алгоритм: // - Если не найдена, то создаём сразу запись, с датой = "1800-01-01", т.к. это первая запис в истории //1. Ищим дату самую блискую снизу вверх (Максимум) к дате "dirCurrencyHistory.DirCurrencyHistoryDate" // Возмоно 2-а варианта: "есть дата" и "нет даты" var queryMax = db.DirCurrencyHistories. Where(x => x.DirCurrencyID == dirCurrency.DirCurrencyID). GroupBy(g => new { g.HistoryDate, g.DirCurrencyHistoryID, g.DirCurrencyID, g.DirCurrencyRate, g.DirCurrencyMultiplicity }). Where(grp => grp.Max(m => m.HistoryDate) <= dirCurrencyHistory.HistoryDate). Select(x => x.Key).OrderByDescending(o => o.HistoryDate).FirstOrDefault(); //var queryMax = queryMax1.ToList(); //if (queryMax.Count() == 0) if (queryMax == null) { //2. Нет данных: "INSERT", создаем новую запись в Истории dirCurrencyHistory.HistoryDate = Convert.ToDateTime("1800-01-01"); db.Entry(dirCurrencyHistory).State = EntityState.Added; } else { //3.1. Если реквизиты совпадают, то ничего не делаем // - Если нет, то: // - Даты совпадают - UPDATE // - Даты не совпадают - INSERT //Если не совпадают реквизиты if ( queryMax.DirCurrencyID != dirCurrencyHistory.DirCurrencyID || queryMax.DirCurrencyRate != dirCurrencyHistory.DirCurrencyRate || queryMax.DirCurrencyMultiplicity != dirCurrencyHistory.DirCurrencyMultiplicity ) { if (Convert.ToDateTime(queryMax.HistoryDate).ToString("yyyy-MM-dd") == Convert.ToDateTime(dirCurrencyHistory.HistoryDate).ToString("yyyy-MM-dd")) { //"HistoryID" который надо обновить, т.к. обновляет по PK dirCurrencyHistory.DirCurrencyHistoryID = queryMax.DirCurrencyHistoryID; // - Даты совпадают - UPDATE db.Entry(dirCurrencyHistory).State = EntityState.Modified; } else { // - Даты не совпадают - INSERT db.Entry(dirCurrencyHistory).State = EntityState.Added; //3.2. Если следуящая запись (вверх, до этого нижнюю смотрели) равна (Rate, Multy) вставляемой, то удалить её! var queryMin = db.DirCurrencyHistories. Where(x => x.DirCurrencyID == dirCurrency.DirCurrencyID). GroupBy(g => new { g.HistoryDate, g.DirCurrencyHistoryID, g.DirCurrencyID, g.DirCurrencyRate, g.DirCurrencyMultiplicity }). Where(grp => grp.Min(m => m.HistoryDate) >= dirCurrencyHistory.HistoryDate). Select(x => x.Key). ToList(); if ( queryMin.Count() > 0 && queryMin[0].DirCurrencyID == dirCurrencyHistory.DirCurrencyID && queryMin[0].DirCurrencyRate == dirCurrencyHistory.DirCurrencyRate && queryMin[0].DirCurrencyMultiplicity == dirCurrencyHistory.DirCurrencyMultiplicity ) { DirCurrencyHistory dirCurrencyHistoryMin = db.DirCurrencyHistories.Find(queryMin[0].DirCurrencyHistoryID); db.Entry(dirCurrencyHistoryMin).State = EntityState.Deleted; } } } } db.SaveChanges(); #endregion #region 3. Подтверждение транзакции ts.Commit(); //.Complete(); #endregion } }