public override string LimitFunction2SQLWhere(ICSSoft.STORMNET.FunctionalLanguage.Function LimitFunction, StorageStructForView[] StorageStruct, string[] asnameprop, bool MustNewGenerate)
 {
     translateFunction(LimitFunction);
     ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.OptimizeINOperator = false;
     return
         (ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.ToSQLString(LimitFunction,
                                                                                       new ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.delegateConvertValueToQueryValueString(ConvertValueToQueryValueString),
                                                                                       new ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.delegatePutIdentifierToBrackets(PutIdentifierIntoBrackets)));
 }
 public override string LimitFunction2SQLWhere(STORMFunction LimitFunction)
 {
     translateFunction(LimitFunction);
     ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.OptimizeINOperator = false;
     return
         (ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.ToSQLString(LimitFunction,
                                                                                       new ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.delegateConvertValueToQueryValueString(ConvertValueToQueryValueString),
                                                                                       new ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.delegatePutIdentifierToBrackets(PutIdentifierIntoBrackets)));
 }
 private void translateFunction(STORMFunction LimitFunction)
 {
     if (LimitFunction.FunctionDef.StringedView == "=")
     {
         LimitFunction.FunctionDef.StringedView = "IN";
     }
     for (int i = 0; i < LimitFunction.Parameters.Count; i++)
     {
         if (LimitFunction.Parameters[i] is STORMFunction)
         {
             translateFunction((STORMFunction)LimitFunction.Parameters[i]);
         }
     }
 }
예제 #4
0
        // *** Start programmer edit section *** (Period CustomMembers)
        /// <summary>
        /// Загрузить вложенные периоды.
        /// </summary>
        /// <param name="pВложенныеПериоды"></param>
        public void LoadВложенныеПериоды(System.Collections.ArrayList pВложенныеПериоды)
        {
            IDataService ds = DataServiceProvider.DataService;

            LoadingCustomizationStruct lcs = new LoadingCustomizationStruct(null);

            lcs.View         = Information.GetView("PeriodL", typeof(Period));
            lcs.LoadingTypes = new Type[] { typeof(Period) };
            SQLWhereLanguageDef langdef = SQLWhereLanguageDef.LanguageDef;

            ICSSoft.STORMNET.FunctionalLanguage.Function lf = langdef.GetFunction(langdef.funcEQ,
                                                                                  new VariableDef(langdef.NumericType, "Ierarhiia"), this.__PrimaryKey);

            lcs.LimitFunction = lf;

            ICSSoft.STORMNET.DataObject[] tmpПериоды = ds.LoadObjects(lcs);
            foreach (Period dobject in tmpПериоды)
            {
                pВложенныеПериоды.Add(dobject);
                ((Period)dobject).LoadВложенныеПериоды(pВложенныеПериоды);
            }
        }
예제 #5
0
        // *** Start programmer edit section *** (ПроверкаНаличияТоваров CustomMembers)

        // *** End programmer edit section *** (ПроверкаНаличияТоваров CustomMembers)


        // *** Start programmer edit section *** (OnUpdateЗаказ CustomAttributes)

        // *** End programmer edit section *** (OnUpdateЗаказ CustomAttributes)
        public virtual ICSSoft.STORMNET.DataObject[] OnUpdateЗаказ(АСУ_Склад.Заказ UpdatedObject)
        {
            // *** Start programmer edit section *** (OnUpdateЗаказ)

            // Определим массив, который будем возвращать для обновления.
            DataObject[] ret = new DataObject[0];

            // Проверим  на  то,  что  пришедший  объект  -  это	именно то, что нам нужно (создан или изменён и статус установлен в Оплачено).
            if ((UpdatedObject.GetStatus() == ICSSoft.STORMNET.ObjectStatus.Created || UpdatedObject.GetStatus() == ICSSoft.STORMNET.ObjectStatus.Altered) && Array.IndexOf(UpdatedObject.GetAlteredPropertyNames(), "Статус") >= 0 && UpdatedObject.Статус == Состояние_Заказа.Оплаченный)
            {
                // Построим ограничение и вычитаем все объекты ТоварНаСкладе, которые нам подходят.
                Заказ заказ = UpdatedObject;
                SQLWhereLanguageDef langdef = SQLWhereLanguageDef.LanguageDef;
                ICSSoft.STORMNET.FunctionalLanguage.Function lf = null;

                for (int i = 0; i < заказ.Строка_Заказа.Count; i++)
                {
                    if (lf != null)
                    {
                        if (заказ.Строка_Заказа[i].Товар != null)
                        {
                            lf = langdef.GetFunction(langdef.funcOR, lf, langdef.GetFunction(langdef.funcEQ,
                                                                                             new VariableDef(langdef.GuidType, "Товар"),
                                                                                             заказ.Строка_Заказа[i].Товар.__PrimaryKey));
                        }
                    }

                    else
                    {
                        if (заказ.Строка_Заказа[i].Товар != null)
                        {
                            lf = langdef.GetFunction(langdef.funcEQ,
                                                     new VariableDef(langdef.GuidType, "Товар"),
                                                     заказ.Строка_Заказа[i].Товар.__PrimaryKey);
                        }
                    }
                }

                ICSSoft.STORMNET.Business.LoadingCustomizationStruct lcs = ICSSoft.STORMNET.Business.LoadingCustomizationStruct.GetSimpleStruct(typeof(Товар_на_Складе), "ТоварНаСкладеE");
                lcs.LimitFunction = lf;
                ICSSoft.STORMNET.DataObject[] objs = ICSSoft.STORMNET.Business.DataServiceProvider.DataService.LoadObjects(lcs);

                // Разместим вычитанные объекты в отсортированном списке для удобного доступа в дальнейшем.
                System.Collections.SortedList sl = new System.Collections.SortedList();

                //for (int i = 0; i < objs.Length; i++)
                //{
                //    if (sl.ContainsKey(((Товар_на_Складе)objs[i]).Товар.__PrimaryKey))
                //    {
                //        ((System.Collections.ArrayList)sl[objs[i].__PrimaryKey]).Add(objs[i]);
                //    }
                //    else
                //    {
                //        System.Collections.ArrayList списокТоваров = new System.Collections.ArrayList();
                //        списокТоваров.Add(objs[i]);
                //        sl.Add(((Товар_на_Складе)objs[i]).Товар.__PrimaryKey, списокТоваров);
                //    }
                //}

                // Определим строчку для сообщения об ошибке.
                string    errStr  = string.Empty;
                ArrayList retObjs = new ArrayList();

                // Проверим наличие товара на складах, если не хватает, то выдадим сообщение об ошибке, если хватает, то вычитаем количество.
                for (int i = 0; i < заказ.Строка_Заказа.Count; i++)
                {
                    if (sl.ContainsKey(заказ.Строка_Заказа[i].Товар.__PrimaryKey))
                    {
                        ArrayList arl = ((System.Collections.ArrayList)sl[заказ.Строка_Заказа[i].Товар.__PrimaryKey]);

                        int количествоНаСкладах = 0; for (int j = 0; j < arl.Count; j++)
                        {
                            количествоНаСкладах +=
                                ((Товар_на_Складе)arl[j]).Количество;
                        }

                        if (количествоНаСкладах <
                            заказ.Строка_Заказа[i].Количество)
                        {
                            errStr += " Не хватает товара \"" + заказ.Строка_Заказа[i].Товар.Название + "\" в наличии: " + количествоНаСкладах + ", требуется " + заказ.Строка_Заказа[i].Количество + Environment.NewLine;
                        }
                        else
                        {
                            int колич = заказ.Строка_Заказа[i].Количество;
                            for (int j = 0; j < arl.Count; j++)
                            {
                                if (колич > 0 &&
                                    ((Товар_на_Складе)arl[j]).Количество > колич)
                                {
                                    ((Товар_на_Складе)arl[j]).Количество -= колич;
                                    колич = 0; retObjs.Add(arl[j]);
                                }
                                else
                                {
                                    if (колич > 0)
                                    {
                                        колич -= ((Товар_на_Складе)arl[j]).Количество;
                                        ((Товар_на_Складе)arl[j]).Количество = 0;
                                        retObjs.Add(arl[j]);
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        errStr += "Товар	\""+
                                  заказ.Строка_Заказа[i].Товар.Название + "\" в наличии отсутствует." + Environment.NewLine;
                    }
                }

                // В случае, если чего-то не хватило, сообщаем об этом пользователю.
                if (errStr != string.Empty)
                {
                    throw new Exception(errStr);
                }

                // Если всё нормально, то возвращаем массив объектов, которые надо обновить.
                ret = new DataObject[retObjs.Count]; retObjs.CopyTo(ret, 0);
            }
            return(ret);

            // *** End programmer edit section *** (OnUpdateЗаказ)
        }