Пример #1
0
        //db, dbRead, sysSetting, docSecondHandRazbor2Tab, EntityState.Added, field
        internal async Task <DocSecondHandRazbor2Tab> mPutPostDocSecondHandRazbor2Tab(
            DbConnectionSklad db,
            DbConnectionSklad dbRead,
            Models.Sklad.Sys.SysSetting sysSetting,
            DocSecondHandRazbor2Tab docSecondHandRazbor2Tab,
            EntityState entityState,          //EntityState.Added, Modified

            Classes.Account.Login.Field field //Дополнительные данные о сотруднике
            )
        {
            //Алгоритм
            //1. DirNomens (ищим: находим (ничего), не находим (новый)) и заполняем DocSecondHandRazbor2Tabs.DirNomenID
            //2. DocSecondHandRazbor2Tabs (сохраняем)
            //3. RemParties (создаём партию)


            #region 1. DirNomens
            //Иищим: находим (ничего), не находим (новый)
            //и заполняем DocSecondHandRazbor2Tabs.DirNomenID

            #region  Категория товара

            if (docSecondHandRazbor2Tab.DirNomenCategoryID == null)
            {
                var queryDirNomenCategoryID = await
                                              (
                    from x in db.DirNomenCategories
                    where x.DirNomenCategoryName == docSecondHandRazbor2Tab.DirNomenCategoryName
                    select x
                                              ).ToListAsync();
                if (queryDirNomenCategoryID.Count() > 0)
                {
                    docSecondHandRazbor2Tab.DirNomenCategoryID   = queryDirNomenCategoryID[0].DirNomenCategoryID;
                    docSecondHandRazbor2Tab.DirNomenCategoryName = queryDirNomenCategoryID[0].DirNomenCategoryName;
                }
                else
                {
                    Models.Sklad.Dir.DirNomenCategory dirNomenCategory = new Models.Sklad.Dir.DirNomenCategory();
                    dirNomenCategory.DirNomenCategoryName = docSecondHandRazbor2Tab.DirNomenCategoryName;

                    db.Entry(dirNomenCategory).State = EntityState.Added;
                    await db.SaveChangesAsync();

                    docSecondHandRazbor2Tab.DirNomenCategoryID   = dirNomenCategory.DirNomenCategoryID;
                    docSecondHandRazbor2Tab.DirNomenCategoryName = dirNomenCategory.DirNomenCategoryName;
                }
            }
            else
            {
                Models.Sklad.Dir.DirNomenCategory dirNomenCategory = await db.DirNomenCategories.FindAsync(docSecondHandRazbor2Tab.DirNomenCategoryID);

                docSecondHandRazbor2Tab.DirNomenCategoryName = dirNomenCategory.DirNomenCategoryName;
            }

            #endregion


            var query = await
                        (
                from x in db.DirNomens
                where x.Sub == docSecondHandRazbor2Tab.DirNomen2ID && x.DirNomenCategoryID == docSecondHandRazbor2Tab.DirNomenCategoryID
                select x
                        ).ToListAsync();
            if (query.Count() > 0)
            {
                docSecondHandRazbor2Tab.DirNomenID = query[0].DirNomenID;
            }
            else
            {
                Models.Sklad.Dir.DirNomen dirNomen = new Models.Sklad.Dir.DirNomen();
                dirNomen.Sub                = docSecondHandRazbor2Tab.DirNomen2ID;
                dirNomen.DirNomenTypeID     = 1;
                dirNomen.DirNomenName       = docSecondHandRazbor2Tab.DirNomenCategoryName;
                dirNomen.DirNomenCategoryID = docSecondHandRazbor2Tab.DirNomenCategoryID;
                dirNomen.DirNomenNameFull   = docSecondHandRazbor2Tab.DirNomenCategoryName;

                db.Entry(dirNomen).State = EntityState.Added;
                await db.SaveChangesAsync();

                docSecondHandRazbor2Tab.DirNomenID = dirNomen.DirNomenID;
            }

            #endregion


            #region 2. DocSecondHandRazbor2Tabs

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

            #endregion


            #region 3. RemParties

            Models.Sklad.Doc.DocSecondHandPurch docSecondHandPurch = await db.DocSecondHandPurches.FindAsync(docSecondHandRazbor2Tab.DocSecondHandPurchID);


            Models.Sklad.Rem.RemParty remParty = new Models.Sklad.Rem.RemParty();
            remParty.RemPartyID    = null;
            remParty.DirNomenID    = Convert.ToInt32(docSecondHandRazbor2Tab.DirNomenID);
            remParty.Quantity      = docSecondHandRazbor2Tab.Quantity;
            remParty.Remnant       = docSecondHandRazbor2Tab.Quantity;
            remParty.DirCurrencyID = docSecondHandRazbor2Tab.DirCurrencyID;
            //remParty.DirCurrencyMultiplicity = docSecondHandRazbor2Tab.DirCurrencyMultiplicity;
            //remParty.DirCurrencyRate = docSecondHandRazbor2Tab.DirCurrencyRate;
            remParty.DirVatValue         = 0;                                                         // docPurch.DirVatValue;
            remParty.DirWarehouseID      = docSecondHandPurch.DirWarehouseID;                         // docPurch.DirWarehouseID;
            remParty.DirWarehouseIDDebit = docSecondHandPurch.DirWarehouseID;                         // docPurch.DirWarehouseID;
            remParty.DirWarehouseIDPurch = Convert.ToInt32(docSecondHandPurch.DirWarehouseIDPurches); // docPurch.DirWarehouseID;
            remParty.DirContractorIDOrg  = docSecondHandPurch.doc.DirContractorIDOrg;

            //!!! Важно !!!
            //if (docSecondHandRazbor2Tab.DirContractorID != null) remParty.DirContractorID = Convert.ToInt32(docSecondHandRazbor2Tab.DirContractorID);
            //else remParty.DirContractorID = docSecondHandPurch.DirContractorID;
            remParty.DirContractorID = docSecondHandPurch.doc.DirContractorIDOrg;
            //!!! Важно !!!

            //Дата Приёмки товара
            remParty.DocDatePurches = docSecondHandPurch.doc.DocDate;

            remParty.DirCharColourID   = docSecondHandRazbor2Tab.DirCharColourID;
            remParty.DirCharMaterialID = docSecondHandRazbor2Tab.DirCharMaterialID;
            remParty.DirCharNameID     = docSecondHandRazbor2Tab.DirCharNameID;
            remParty.DirCharSeasonID   = docSecondHandRazbor2Tab.DirCharSeasonID;
            remParty.DirCharSexID      = docSecondHandRazbor2Tab.DirCharSexID;
            remParty.DirCharSizeID     = docSecondHandRazbor2Tab.DirCharSizeID;
            remParty.DirCharStyleID    = docSecondHandRazbor2Tab.DirCharStyleID;
            remParty.DirCharTextureID  = docSecondHandRazbor2Tab.DirCharTextureID;

            remParty.SerialNumber = docSecondHandRazbor2Tab.SerialNumber;
            remParty.Barcode      = docSecondHandRazbor2Tab.Barcode;

            remParty.DocID         = Convert.ToInt32(docSecondHandPurch.DocID);
            remParty.PriceCurrency = docSecondHandRazbor2Tab.PriceCurrency;
            remParty.PriceVAT      = docSecondHandRazbor2Tab.PriceVAT;
            remParty.FieldID       = Convert.ToInt32(docSecondHandRazbor2Tab.DocSecondHandRazbor2TabID);

            remParty.PriceRetailVAT         = docSecondHandRazbor2Tab.PriceRetailVAT;
            remParty.PriceRetailCurrency    = docSecondHandRazbor2Tab.PriceRetailCurrency;
            remParty.PriceWholesaleVAT      = docSecondHandRazbor2Tab.PriceWholesaleVAT;
            remParty.PriceWholesaleCurrency = docSecondHandRazbor2Tab.PriceWholesaleCurrency;
            remParty.PriceIMVAT             = docSecondHandRazbor2Tab.PriceIMVAT;
            remParty.PriceIMCurrency        = docSecondHandRazbor2Tab.PriceIMCurrency;

            //DirNomenMinimumBalance
            remParty.DirNomenMinimumBalance = sysSetting.DirNomenMinimumBalance;

            remParty.DirEmployeeID = docSecondHandPurch.doc.DirEmployeeID;
            remParty.DocDate       = docSecondHandPurch.doc.DocDate;


            db.Entry(remParty).State = EntityState.Added;
            await db.SaveChangesAsync();


            #endregion


            #region 3. Лог: Пишем в Лог о смене статуса и мастера, если такое было

            logService.DocSecondHandPurchID   = docSecondHandRazbor2Tab.DocSecondHandPurchID;
            logService.DirSecondHandLogTypeID = 6; //Смена статуса
            logService.DirEmployeeID          = field.DirEmployeeID;
            //logService.DirSecondHandStatusID = DirSecondHandStatusID;
            logService.Msg = "Разборка: добавили запчасть: " + docSecondHandRazbor2Tab.dirNomen.DirNomenName;

            await logServicesController.mPutPostLogSecondHands(db, logService, EntityState.Added);

            #endregion


            return(docSecondHandRazbor2Tab);
        }
Пример #2
0
        private async Task<bool> GroupCreate(int DirNomenID, string GroupList, string DirNomenName)
        {
            //Ищим товар в БД
            // Если есть - пропускаем
            // Если нет, то:
            //  вносим все группы "GroupList"
            //  вносим товар в последнюю

            //Controllers.Sklad.Dir.DirNomens.DirNomensController dirNomensController = new Controllers.Sklad.Dir.DirNomens.DirNomensController();


            SQLiteParameter parDirNomenID = null, parSub = null, parDel = null, parDirNomenName = null, parDirNomenNameFull = null, parDirNomenTypeID = null, parDirNomenCategoryID = null;


            #region Ищим товар в БД

            var iCount = await
                (
                    from x in db.DirNomens
                    where x.DirNomenID == DirNomenID
                    select x
                ).CountAsync();

            //Есть такой Товар - выходим.
            if (iCount > 0) return false;

            #endregion


            #region Группа товара

            //Нет товара - вносим группы, если их нет
            //Парсим группу: "APPLE/ iPhone 4S/  Распродажа/  Распродажа Swarovski /"
            int? Sub = null; //Последняя подчинённая
            string[] GroupArray = GroupList.Split('/');
            for (int i = 0; i < GroupArray.Length; i++)
            {
                i777 = i;
                //Удаляем спереди пробелы
                string GroupName = GroupArray[i];

                if (GroupName.Length == 0) break;

                if (GroupName[0].ToString() == " ") GroupName = GroupName.Remove(0, 1);
                if (GroupName[0].ToString() == " ") GroupName = GroupName.Remove(0, 1);
                if (GroupName[0].ToString() == " ") GroupName = GroupName.Remove(0, 1);
                if (GroupName[0].ToString() == " ") GroupName = GroupName.Remove(0, 1);

                if (GroupName.Length == 0) break;

                //1. Первая записть - Корневая группа (Sub == 0)
                var query = await
                    (
                        from x in db.DirNomens
                        where x.DirNomenName.ToLower() == GroupName.ToLower() && x.Sub == Sub
                        select x
                    ).ToListAsync();

                if (query.Count() != 0)
                {
                    //Есть запись в БД - получаем "Sub" для следующих групп
                    Sub = Convert.ToInt32(query[0].DirNomenID);
                }
                else
                {
                    //Нет записи в БД - создаём новую группу и получаем Sub
                    Models.Sklad.Dir.DirNomen dirNomenGroup = new Models.Sklad.Dir.DirNomen();
                    /*
                    dirNomenGroup.DirNomenID = iMaxGroupID; iMaxGroupID++; // null;
                    if (Sub > 0) dirNomenGroup.Sub = Sub;
                    dirNomenGroup.Del = false;
                    dirNomenGroup.DirNomenName = GroupName;
                    dirNomenGroup.DirNomenNameFull = GroupName;
                    dirNomenGroup.DirNomenTypeID = 1;

                    dirNomenGroup = await Task.Run(() => dirNomensController.mPutPostDirNomen(db, dirNomenGroup, EntityState.Added));
                    */

                    parDirNomenID = new SQLiteParameter("@DirNomenID", System.Data.DbType.Int32) { Value = iMaxGroupID }; 
                    if (Sub > 0) parSub = new SQLiteParameter("@Sub", System.Data.DbType.Int32) { Value = Sub };
                    else parSub = new SQLiteParameter("@Sub", System.Data.DbType.Int32) { Value = null };
                    parDel = new SQLiteParameter("@Del", System.Data.DbType.Boolean) { Value = false };
                    parDirNomenName = new SQLiteParameter("@DirNomenName", System.Data.DbType.String) { Value = GroupName };
                    parDirNomenNameFull = new SQLiteParameter("@DirNomenNameFull", System.Data.DbType.String) { Value = GroupName };
                    parDirNomenTypeID = new SQLiteParameter("@DirNomenTypeID", System.Data.DbType.Int32) { Value = 1 };
                    db.Database.ExecuteSqlCommand("INSERT INTO DirNomens (DirNomenID, Sub, Del, DirNomenName, DirNomenNameFull, DirNomenTypeID)values(@DirNomenID, @Sub, @Del, @DirNomenName, @DirNomenNameFull, @DirNomenTypeID);", parDirNomenID, parSub, parDel, parDirNomenName, parDirNomenNameFull, parDirNomenTypeID);

                    Sub = Convert.ToInt32(iMaxGroupID); //Sub = Convert.ToInt32(dirNomenGroup.DirNomenID);
                    iMaxGroupID++;
                }
            }

            #endregion


            #region  Создаём категорию товара

            //Create Categories in database
            Models.Sklad.Dir.DirNomenCategory dirNomenCategory = await Task.Run(() => CategoriesCreate(DirNomenName));

            #endregion


            #region Создаём Товар
            
            /*
            Models.Sklad.Dir.DirNomen dirNomen = new Models.Sklad.Dir.DirNomen();
            //dirNomen.DirNomenID = null;
            dirNomen.DirNomenID = DirNomenID;
            //dirNomen.DirNomenArticle = DirNomenID.ToString();
            if (Sub > 0) dirNomen.Sub = Sub;
            dirNomen.Del = false;
            dirNomen.DirNomenName = DirNomenName;
            dirNomen.DirNomenNameFull = DirNomenName;
            dirNomen.DirNomenTypeID = 1;
            dirNomen.DirNomenCategoryID = dirNomenCategory.DirNomenCategoryID;
            //dirNomen.IsGoods = true;

            dirNomen = await Task.Run(() => dirNomensController.mPutPostDirNomen(db, dirNomen, EntityState.Added));
            */
            
            //Запись в БД
            parDirNomenID = new SQLiteParameter("@DirNomenID", System.Data.DbType.Int32) { Value = DirNomenID };
            parSub = new SQLiteParameter("@Sub", System.Data.DbType.Int32) { Value = Sub };
            parDel = new SQLiteParameter("@Del", System.Data.DbType.Boolean) { Value = false };
            parDirNomenName = new SQLiteParameter("@DirNomenName", System.Data.DbType.String) { Value = DirNomenName };
            parDirNomenNameFull = new SQLiteParameter("@DirNomenNameFull", System.Data.DbType.String) { Value = DirNomenName };
            parDirNomenTypeID = new SQLiteParameter("@DirNomenTypeID", System.Data.DbType.Int32) { Value = 1 };
            parDirNomenCategoryID = new SQLiteParameter("@DirNomenCategoryID", System.Data.DbType.String) { Value = dirNomenCategory.DirNomenCategoryID };
            db.Database.ExecuteSqlCommand("INSERT INTO DirNomens (DirNomenID, Sub, Del, DirNomenName, DirNomenNameFull, DirNomenTypeID, DirNomenCategoryID)values(@DirNomenID, @Sub, @Del, @DirNomenName, @DirNomenNameFull, @DirNomenTypeID, @DirNomenCategoryID);", parDirNomenID, parSub, parDel, parDirNomenName, parDirNomenNameFull, parDirNomenTypeID, parDirNomenCategoryID);

            #endregion

            //Это не нужно!
            //Sub = Convert.ToInt32(dirNomen.DirNomenID);

            return true;
        }
Пример #3
0
        public async Task <IHttpActionResult> PostAPI10X(DocOrderInt docOrderInt)
        {
            try
            {
                #region Проверяем Логин и Пароль + Изменяем строку соединения + Права + Разные Функции

                if (String.IsNullOrEmpty(docOrderInt.pID) || docOrderInt.pID.Length < 14)
                {
                    throw new System.InvalidOperationException(Classes.Language.Sklad.Language.msg127);
                }

                //1. Проверка "Key"
                if (String.IsNullOrEmpty(docOrderInt.Key) || docOrderInt.Key.Length < 39)
                {
                    throw new System.InvalidOperationException(Classes.Language.Sklad.Language.msg127_2);
                }

                Controllers.Sklad.Service.API.API10Controller api = new Controllers.Sklad.Service.API.API10Controller();
                if (!(await api.KeyGen_Verify(docOrderInt.Key)))
                {
                    throw new System.InvalidOperationException(Classes.Language.Sklad.Language.msg127_2);
                }
                int iDirCustomersID = api.iDirCustomersID;


                //Изменяем строку соединения
                db = new DbConnectionSklad(connectionString.Return(iDirCustomersID, null, true));

                //Разные Функции
                function.NumberDecimalSeparator();

                //Получам настройки
                Models.Sklad.Sys.SysSetting sysSetting = await db.SysSettings.FindAsync(1);

                //Получам API (что можно и нужно выгружать)
                Models.Sklad.Service.API.API10 aPI10 = await db.API10s.FindAsync(1);

                #endregion


                #region Параметры

                //Получаем колекцию "Спецификации"
                Models.Sklad.Doc.DocOrderInt[] docOrderIntCollection = null;
                if (!String.IsNullOrEmpty(docOrderInt.recordsDocOrderInt))
                {
                    JavaScriptSerializer serializer = new JavaScriptSerializer();
                    docOrderIntCollection = serializer.Deserialize <Models.Sklad.Doc.DocOrderInt[]>(docOrderInt.recordsDocOrderInt);
                }

                //Проставляем все необходимые значения
                for (int i = 0; i < docOrderIntCollection.Count(); i++)
                {
                    Models.Sklad.Doc.DocOrderInt _docOrderInt = (Models.Sklad.Doc.DocOrderInt)docOrderIntCollection[i];
                    _docOrderInt.DirOrderIntTypeID   = 4; //Из И-М
                    _docOrderInt.DirOrderIntStatusID = 1; //Новый


                    //Находим полное "DirNomenName" по "DirNomenID"

                    Models.Sklad.Dir.DirNomen dirNomen = await db.DirNomens.FindAsync(_docOrderInt.DirNomenID);

                    Controllers.Sklad.Dir.DirNomens.DirNomensController dirNomensController = new Dir.DirNomens.DirNomensController();
                    string[] ret = await Task.Run(() => dirNomensController.DirNomenSubFind2(db, _docOrderInt.DirNomenID));

                    _docOrderInt.DirNomenName = ret[0] + " / " + dirNomen.DirNomenName;


                    //Группы: DirNomen1ID, DirNomen2ID

                    string[] separators = { "," };
                    string[] words      = ret[2].Split(separators, StringSplitOptions.RemoveEmptyEntries);
                    try
                    {
                        _docOrderInt.DirNomen1ID = Convert.ToInt32(words[0]);
                        _docOrderInt.DirNomen2ID = Convert.ToInt32(words[1]);
                    }
                    catch (Exception ex) { }


                    //Категория: DirNomenCategoryID
                    _docOrderInt.DirNomenCategoryID = Convert.ToInt32(dirNomen.DirNomenCategoryID);


                    //Цены
                    _docOrderInt.PriceVAT      = _docOrderInt.PriceCurrency;
                    _docOrderInt.DirCurrencyID = sysSetting.DirCurrencyID;
                }

                #endregion


                #region switch + отправка JSON

                switch (docOrderInt.pID)
                {
                //Import

                case "ImportDirNomens":
                {
                    return(Ok(returnServer.Return(false, Classes.Language.Sklad.Language.msg127)));
                }
                break;

                case "ImportDirContractors":
                {
                    return(Ok(returnServer.Return(false, Classes.Language.Sklad.Language.msg127)));
                }
                break;

                case "ImportDocOrderInts":
                {
                    return(Ok(returnServer.Return(false, Classes.Language.Sklad.Language.msg127)));
                }
                break;


                //Default

                default:
                {
                    return(Ok(returnServer.Return(false, Classes.Language.Sklad.Language.msg127)));
                }
                break;
                }

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