Example #1
0
        public SimpleResponse<int> SaveHierarchy(ConfigRequest req)
        {
            try
            {
                int result;
                object value = req.AppParameter;
                req.AppParameter = null;

                var resp = GetHierarchy(req);
                ErrorHandler.Check(resp);

                // Example:
                // array of existing Configuration objects:
                //
                //	L1 L2 L3 L4 L5
                // 0  -  -  -  -  -
                // 1  x1 -  -  -  -
                // 2  x1 x2 -  -  -	 existingLevel=2
                //
                // request new
                //
                //	[0] [1] [2] [3]
                //	x1  x2  n3  n4	depth=4
                //
                // create:
                //
                //	 L1 L2 L3 L4 L5
                // i=3 x1 x2 n3 -  -
                // i=4 x1 x2 n3 n4 -
                //

                var list = resp.List;
                int existingLevel = list.Count - 1;
                int depth = req.Depth;

                if (existingLevel == depth)
                {
                    if (value == null)
                    {
                        var resp1 = GetChildrenCount(req);
                        ErrorHandler.Check(resp1);
                        if (resp1.Value == 0)
                        {
                            // no child nodes: can delete
                            var resp3 = DeleteConfigurationByUID(new IDRequest(list[existingLevel].UID));
                            ErrorHandler.Check(resp3);
                            result = -1;
                        }
                        else
                        {
                            // has child nodes, can not delete: do nothing
                            result = 0;
                        }
                    }
                    else
                    {
                        Configuration c = list[existingLevel];
                        c.VersionValue = ConfigItemVersion.Create(req.ValueType, value, false, Guid.Empty).ToString();
                        var resp1 = SaveConfigurationByUID(new SaveRequest<Configuration>(c));
                        ErrorHandler.Check(resp1);
                        result = 1;
                    }
                }
                else // exisitingLevel < depth
                {
                    if (value == null)
                    {
                        result = 0;
                    }
                    else
                    {
                        Guid[] levels = new Guid[5];
                        Array.Copy(req.GetLevels(), levels, depth);
                        string sValue = ConfigItemVersion.Create(req.ValueType, value, false, Guid.Empty).ToString();
                        result = 0;
                        for (int i = existingLevel + 1; i <= depth; i++)
                        {
                            bool combine = i != 0 && req.Combine;
                            var c = new Configuration
                            {
                                ID = req.ID,
                                Combine = combine,
                                ValueType = req.ValueType,
                                Notes = req.Notes,
                                VersionValue = combine ? string.Empty : sValue,
                                Level1 = i >= 1 ? levels[0] : Guid.Empty,
                                Level2 = i >= 2 ? levels[1] : Guid.Empty,
                                Level3 = i >= 3 ? levels[2] : Guid.Empty,
                                Level4 = i >= 4 ? levels[3] : Guid.Empty,
                                Level5 = i >= 5 ? levels[4] : Guid.Empty,
                                UID = SequentialGuid.NewDbGuid(),
                            };
                            var resp2 = SaveConfigurationByUID(new SaveRequest<Configuration>(c));
                            ErrorHandler.Check(resp2);
                            result++;
                        }
                    }
                }
                return new SimpleResponse<int>(result);
            }
            catch (Exception ex)
            {
                return ErrorHandler.Handle<SimpleResponse<int>>(ex);
            }
        }
        public BusinessMessageResponse SetCompanyValue(ConfigRequest req)
        {
            //
            // L0 L1 | null			| not null
            // ------+-----------------+-----------------
            // 1  0  | do nothing  [a] | create L1 [c]
            // 1  1  | update L1   [b]*| update L1 [d]
            //
            // *assign L0 value to L1, coz combine=false

            BusinessMessageResponse resp = null;
            try
            {
                Guid id = req.ID;

                // first get root level (L0)
                var req0 = new ConfigRequest(id, null) { IgnoreCache = true };
                var resp0 = GetConfigValue(req0);
                Guid uid0 = resp0.Item.UID; // we need this to compare to uid1

                string newValue = (string)req.AppParameter;
                Guid companyID = req.GetLevels()[0]; // Database column LEVEL1

                // now get L1 (company level)
                var req1 = new ConfigRequest(id, null, companyID) { IgnoreCache = true };
                GetItemResponse<ConfigValue> resp1 = GetConfigValue(req1);
                ErrorHandler.CheckItem(resp1);
                if (resp1.Item.UID.Equals(uid0))
                {
                    // Csae [a] or [c]
                    if (newValue == null)
                    {
                        // Case [a]
                        resp = new BusinessMessageResponse();
                    }
                    else
                    {
                        // Case [c]
                        Configuration cfg = new Configuration
                        {
                            UID = SequentialGuid.NewDbGuid(),
                            ID = id,
                            Combine = false,
                            ValueType = 1,
                            VersionValue = newValue,
                            Notes = req.Notes,
                            Level1 = companyID
                        };
                        resp = SaveConfigurationByUID(new SaveRequest<Configuration>(cfg));
                    }
                }
                else
                {
                    // case [b] or [d]
                    if (newValue == null)
                    {
                        // case [b]
                        resp1.Item.Value = resp0.Item.Value;
                    }
                    else
                    {
                        // case [d]
                        resp1.Item.Value = newValue;
                    }
                    resp = UpdateConfigValue(new SaveRequest<ConfigValue>(resp1.Item));
                }
                ErrorHandler.Check(resp);
                return resp;
            }
            catch (Exception ex)
            {
                return ErrorHandler.Handle(ex);
            }
        }
 private BusinessMessageResponse CreateLocaleConfig(string locale, Guid companyID, Guid personID)
 {
     var cfg = new Configuration
     {
         UID = SequentialGuid.NewDbGuid(),
         ID = new Guid(CultureConfigGroup.LocaleItemID),
         ValueType = 1,
         VersionValue = locale,
         Notes = personID == Guid.Empty ? "Company Locale" : "User Locale",
         CompanyID = companyID,
         Level1 = companyID,
         Level2 = personID
     };
     return SaveConfigurationByUID(new SaveRequest<Configuration>(cfg));
 }
        public BusinessMessageResponse SetCompanyCustomUnits(ConfigRequest req)
        {
            //
            // L0 L1 | null			| not null
            // ------+-----------------+-----------------
            // 1  0  | do nothing  [a] | create L1 [c]
            // 1  1  | update L1   [b]*| update L1 [d]
            //
            // *assign L0 value to L1, coz combine=false

            BusinessMessageResponse resp = null;
            try
            {
                // first get root level
                var req0 = new ConfigRequest(CultureHelper.PreferredMeasurementUnitsID, null) { IgnoreCache = true };
                var resp0 = GetConfigValue(req0);
                ErrorHandler.CheckItem(resp0);
                Guid uid0 = resp0.Item.UID; // we need this to compare to level 1

                string newValue = (string)req.AppParameter;
                Guid companyID = req.GetLevels()[0]; // Database column LEVEL1

                // now get level 1, may not exist
                var req1 = new ConfigRequest(CultureHelper.PreferredMeasurementUnitsID, null, companyID) { IgnoreCache = true };
                GetItemResponse<ConfigValue> resp1 = GetConfigValue(req1);
                ErrorHandler.CheckItem(resp1);
                if (resp1.Item.UID.Equals(uid0))
                {
                    // Case [a] or [c]
                    if (string.IsNullOrEmpty(newValue))
                    {
                        // Case [a]
                        resp = new BusinessMessageResponse();
                    }
                    else
                    {
                        // Case [c]
                        // L1 record not in database, create one
                        Configuration cfg = new Configuration
                        {
                            UID = SequentialGuid.NewDbGuid(),
                            ID = CultureHelper.PreferredMeasurementUnitsID,
                            Combine = true,
                            ValueType = 11,
                            VersionValue = newValue,
                            Notes = req.Notes,
                            Level1 = companyID,
                        };
                        resp = SaveConfigurationByUID(new SaveRequest<Configuration>(cfg));
                    }
                }
                else
                {
                    // Case [b] or [d]
                    string val = newValue ?? string.Empty;
                    resp = UpdateConfigValue(new SaveRequest<ConfigValue>(resp1.Item));
                    // case [b] or [d]
                    if (string.IsNullOrEmpty(newValue))
                    {
                        // case [b]
                        val = (string)resp0.Item.Value;
                    }
                    else
                    {
                        // case [d]
                        val = newValue;
                    }
                    resp1.Item.Value = val;
                    resp = UpdateConfigValue(new SaveRequest<ConfigValue>(resp1.Item));
                }
                ErrorHandler.Check(resp);
                return resp;
            }
            catch (Exception ex)
            {
                return ErrorHandler.Handle(ex);
            }
        }