public override void Calculate(ObjectProperties Item, string FieldName, ObjectCalulatorCalculateType CalculateType)
        {
            base.Calculate(Item, FieldName, CalculateType);

            if (CalculateType == ObjectCalulatorCalculateType.Initialize)
            {
                Item.SF("STATE", "ID <> 1");
                TYPE(Item);
                RATE(Item);
            }

            if (CalculateType == ObjectCalulatorCalculateType.Calculate)
            {
                switch (FieldName)
                {
                    case "PRICEFROMAGENT":
                    case "PRICEFORCLIENT":
                        Item.SVC("PROFIT", Item.AsDbl("PRICEFORCLIENT") - Item.AsDbl("PRICEFROMAGENT"));
                        break;
                    case "TYPE":
                        TYPE(Item);
                        break;
                    case "AGENTCURRENCY":
                        RATE(Item);
                        break;
                    case "PROFIT":
                        Item.SS("PROFIT", CalulatorFieldState.Manual);
                        break;
                }
            }
        }
 private void TAG(ObjectProperties Item)
 {
     if (Item.AsInt("TYPE") != 3)
     {
         Item.SM("TAG", "r:phone");
     }
     else
     {
         Item.SM("TAG", null);
     }
 }
 private void RATE(ObjectProperties Item)
 {
     if (Item.AsInt("AGENTCURRENCY") != 0)
     {
         Item.SR("RATE", false);
     }
     else
     {
         Item.SV("RATE", 1);
         Item.SR("RATE", true);
     }
 }
        private void TYPE(ObjectProperties Item)
        {
            if (DbContext.GetScalarInt("SELECT TYPE FROM DEAL_TYPE WHERE ID = {0}", Item.GV("TYPE")) == 1)
            {
                Item.SR("VISA_COUNTRY", false);
                Item.SR("VISA_DURATION", false);
            }
            else
            {
                Item.SV("VISA_COUNTRY", System.DBNull.Value);
                Item.SV("VISA_DURATION", System.DBNull.Value);

                Item.SR("VISA_COUNTRY", true);
                Item.SR("VISA_DURATION", true);
            }
        }
        public void Load(ObjectProperties ObjectProperties)
        {
            if (_dataTable != null)
            {
                _dataTable.Fill(string.Format("TABLE_NAME = '{0}' AND OBJID = {1}", ObjectProperties.tableContext.XOTable.Source, ObjectProperties.GetValue(ObjectProperties.tableContext.PkFieldName)));

                foreach (var r in _dataTable.Rows.Cast<System.Data.DataRow>()
                    .Select(p => new { state = p.Field<string>("STATE"), fields = p.Field<string>("COLS").Split(',') }))
                {
                    foreach (string field in r.fields)
                    {
                        ObjectProperties.SetState(field, r.state);
                    }
                }

                _dataTable.Clear();
            }
        }
        public override void Calculate(ObjectProperties Item, string FieldName, ObjectCalulatorCalculateType CalculateType)
        {
            base.Calculate(Item, FieldName, CalculateType);

            if (CalculateType == ObjectCalulatorCalculateType.Initialize)
            {
                TAG(Item);
            }

            if (CalculateType == ObjectCalulatorCalculateType.Calculate)
            {
                switch (FieldName)
                {
                    case "TYPE":
                        TAG(Item);
                        break;
                }
            }
        }
        public void Save(ObjectProperties ObjectProperties)
        {
            if (ObjectProperties[ObjectProperties.STATE_PROP_NAME] != null)
            {
                _dataTable.Fill(string.Format("TABLE_NAME = '{0}' AND OBJID = {1}", ObjectProperties.tableContext.Source, ObjectProperties.GetValue(ObjectProperties.tableContext.PkFieldName)));
                
                foreach (System.Data.DataRow dataRow in _dataTable.Rows.Cast<System.Data.DataRow>())
                {
                    dataRow.Delete();
                }

                foreach (var r in ObjectProperties[ObjectProperties.STATE_PROP_NAME].value.GroupBy(p => p.value).
                    Select(p => new { state = p.Key, fields = p.Select(s=>s.key).ToString(",") }))
                {
                    _dataTable.Rows.Add(ObjectProperties.tableContext.Source, r.state, ObjectProperties.GetValue(ObjectProperties.tableContext.PkFieldName), r.fields);
                }

                _dataTable.Update();

                _dataTable.Clear();
            }
        }
 public void Merge(ObjectProperties ObjectProperties)
 {
     foreach (var r in ObjectProperties)
     {
         foreach (var i in r.value.value)
         {
             if (i.value != null)
                 this[r.key, i.key] = i.value;
         }
     }
 }