Ejemplo n.º 1
0
        internal async Task <ListObjectPF> mPutPostListObjectPF(
            DbConnectionSklad db,
            string UO_Action,
            ListObjectPF listObjectPF,
            EntityState entityState, //EntityState.Added, Modified
            Models.Sklad.List.ListObjectPFTab[] listObjectPFTabCollection,

            Classes.Account.Login.Field field, //Дополнительные данные о сотруднике
            HttpRequestMessage request         //Информация о хосте
            )
        {
            //Алгоритм
            //1. Если писали с ЛокалХоста, то не проверяем на 1 000 000 записей
            //   Если писали НЕ ЛокалХоста, то проверяем (см ДокументМенеджент)
            //2. Сохраняем Шапку
            //3. Сохраняем Таблицу, если не пустая


            //1. Если меньше Миллиона записей и не Я редактирую, то это первая запись ПФ созданная пользователем, присваеваем её = 1 000 000
            if (!await Task.Run(() => MoreMillion(db)) && request.RequestUri.DnsSafeHost != "localhost" && entityState == EntityState.Added)
            {
                //listObjectPF.ListObjectPFID = 1000000;

                db.Entry(listObjectPF).State = entityState;
                await db.SaveChangesAsync();

                SQLiteParameter parDocPurchID1 = new SQLiteParameter("@ListObjectPFID1", System.Data.DbType.Int32)
                {
                    Value = 1000000
                };
                SQLiteParameter parDocPurchID2 = new SQLiteParameter("@ListObjectPFID2", System.Data.DbType.Int32)
                {
                    Value = listObjectPF.ListObjectPFID
                };
                db.Database.ExecuteSqlCommand("UPDATE ListObjectPFs SET ListObjectPFID=@ListObjectPFID1 WHERE ListObjectPFID=@ListObjectPFID2;", parDocPurchID1, parDocPurchID2);

                listObjectPF.ListObjectPFID = 1000000;
            }
            else
            {
                //2. ListObjectPF
                db.Entry(listObjectPF).State = entityState;
                await db.SaveChangesAsync();
            }

            //3. listObjectPFTabCollection
            //3.1. Удаляем записи в БД, если UPDATE
            if (entityState == EntityState.Modified)
            {
                SQLiteParameter parDocPurchID = new SQLiteParameter("@ListObjectPFID", System.Data.DbType.Int32)
                {
                    Value = listObjectPF.ListObjectPFID
                };
                db.Database.ExecuteSqlCommand("DELETE FROM ListObjectPFTabs WHERE ListObjectPFID=@ListObjectPFID;", parDocPurchID);
            }
            //3.2. Проставляем ID-шник "ListObjectPFID" для всех позиций спецификации
            for (int i = 0; i < listObjectPFTabCollection.Count(); i++)
            {
                listObjectPFTabCollection[i].ListObjectPFTabID = null;
                listObjectPFTabCollection[i].ListObjectPFID    = Convert.ToInt32(listObjectPF.ListObjectPFID);
                db.Entry(listObjectPFTabCollection[i]).State   = EntityState.Added;
            }
            await db.SaveChangesAsync();

            return(listObjectPF);
        }
Ejemplo n.º 2
0
        public async Task <IHttpActionResult> PostListObjectPF(ListObjectPF listObjectPF, HttpRequestMessage request)
        {
            try
            {
                #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, "RightDevelop"));

                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 Параметры

                //save, save_close, held, held_cancel
                var    paramList = request.GetQueryNameValuePairs();
                string UO_Action = paramList.FirstOrDefault(kv => string.Compare(kv.Key, "UO_Action", true) == 0).Value;
                if (UO_Action == null)
                {
                    return(Ok(returnServer.Return(false, Classes.Language.Sklad.Language.msg101)));
                }
                UO_Action = UO_Action.ToLower();

                //Получаем колекцию "Спецификации"
                Models.Sklad.List.ListObjectPFTab[] listObjectPFTabCollection = null;
                if (!String.IsNullOrEmpty(listObjectPF.recordsListObjectPFTab))
                {
                    JavaScriptSerializer serializer = new JavaScriptSerializer();
                    listObjectPFTabCollection = serializer.Deserialize <Models.Sklad.List.ListObjectPFTab[]>(listObjectPF.recordsListObjectPFTab);
                }

                #endregion

                #region Проверки

                //Подстановки - некоторые поля надо заполнить, если они не заполены (Юридические реквизиты)
                listObjectPF.Substitute();

                #endregion


                #region Сохранение

                //using (TransactionScope ts = new TransactionScope())
                using (System.Data.Entity.DbContextTransaction ts = db.Database.BeginTransaction())
                {
                    db.Configuration.AutoDetectChangesEnabled = false;

                    //Используем метод, что бы было всё в одном потоке
                    listObjectPF = await Task.Run(() => mPutPostListObjectPF(db, UO_Action, listObjectPF, EntityState.Added, listObjectPFTabCollection, field, request)); //sysSetting

                    ts.Commit();                                                                                                                                          //.Complete();
                }


                #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       = listObjectPF.ListObjectPFID;
                sysJourDisp.Description        = "";
                try { sysJourDispsController.mPutPostSysJourDisps(db, sysJourDisp, EntityState.Added); } catch (Exception ex) { }

                #endregion


                dynamic collectionWrapper = new
                {
                    ListObjectPFID = listObjectPF.ListObjectPFID
                };
                return(Ok(returnServer.Return(true, collectionWrapper))); //return Ok(returnServer.Return(true, ""));

                #endregion
            }
            catch (Exception ex)
            {
                return(Ok(returnServer.Return(false, exceptionEntry.Return(ex))));
            }
        }