Exemple #1
0
        //Находим или созлаём новыую Характеристику "Цвет"
        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();
        }
Exemple #3
0
        //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
            }
        }
Exemple #5
0
        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);
            }
        }
Exemple #6
0
        //Сохранение
        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
            }
        }