<?xml version="1.0" encoding="utf-8"?>
<Entity 
Schema="VCLib" 
Name="USER_SEARCHES" 
Description="Сохраненные фильтры пользователей" 
version="2" 
PrimaryKey="SearchID" 
DNAttributes="{SearchName}" 
DisplayName="{0}">
  <Customs>
    <Custom Name="NotDisplayedInFilter" Value="HasParent;HasChild;Filters" />
    <Custom Name="NotDisplayedColumns" Value="HasParent;HasChild;Filters" />
    <Custom Name="NotTrackedAttributes" Value="HasParent;HasChild;Filters" />
  </Customs>
  <Fields>
    <Attribute Name="SearchID" Index="40001" Type="guid" Description="Идентификатор" />
    <Attribute Name="SearchName" Index="40002" Type="string" Description="Наименование фильтра" />
    <Attribute Name="FilterValue" Index="40004" Type="text" Description="Значение фильтра" />
    <Attribute Name="HasParent" Index="40009" Type="bool" Description="Существует фильтр с пользователем более высокого уровня доступа.">
      <Parameter Name="DivisionID" Description="Подразделение" Type="object">
        <lx:ParamHolder xmlns:lx="lexem">
          <lx:StepString name="CURRENT_USER_DIVISION" />
        </lx:ParamHolder>
      </Parameter>
    </Attribute>
    <Attribute Name="HasChild" Index="40010" Type="bool" Description="Существует фильтр с пользователем более низкого уровня доступа.">
      <Parameter Name="DivisionID" Description="Подразделение" Type="object">
        <lx:ParamHolder xmlns:lx="lexem">
          <lx:StepString name="CURRENT_USER_DIVISION" />
        </lx:ParamHolder>
      </Parameter>
    </Attribute>
    <Parent Name="EntityID" Index="40005" Type="VCLib.ENTITIES" Description="Сущность данных" Save="0" />
    <Parent Name="UserID" Index="40006" Type="VCLib.BASE_USERS" Description="Пользователь" Required="1" />
    <Parent Name="RecordType" Type="VCLib.ENTITIES" Description="Тип записи" Save="0" />
    <Choice Name="ShareFilter" Index="40007" Description="Фильтр виден" Required="1">
      <Item Name="Мне (текущий пользователь)" Index="0" />
      <Item Name="Подразделению пользователя" Index="1" />
      <Item Name="Всем (подразделению пользователя и всем дочерним)" Index="2" />
    </Choice>
    <Choice Name="Filters" Index="40008" IsFlag="1" Description="Фильтр">
      <Item Name="На пользователя" Index="1" />
      <Item Name="На подразделение" Index="2" />
      <Item Name="На подраздления выше" Index="4" />
      <Item Name="На подразделения ниже" Index="8" />
      <Parameter Name="DivisionID" Description="Подразделение" Type="object">
        <lx:ParamHolder xmlns:lx="lexem">
          <lx:StepString name="CURRENT_USER_DIVISION" />
        </lx:ParamHolder>
      </Parameter>
      <Parameter Name="UserID" Description="Пользователь" Type="object">
        <lx:ParamHolder xmlns:lx="lexem">
          <lx:StepString name="CURRENT_USER" />
        </lx:ParamHolder>
      </Parameter>
    </Choice>
    <Attribute Name="FilterDescription" Type="string" Description="Описание фильтра" CharacterMaximumLength="500" />
    <Attribute Name="Added" Type="bool" Description="Добавлен на панель" Required="1" />
    <Attribute Name="Applied" Type="bool" Description="Применен" Required="1" />
    <Attribute Name="Context" Type="string" Description="Контекст" />
    <Child Name="UserSearchesRoles" Type="VCLib.USER_SEARCHES_ROLE" Description="Роль пользовательского фильтра" ChildAttribute="UserSearches" />
  </Fields>
  <DbMapping>
    <Table name="T_USER_SEARCHES">
      <Map Name="SearchID" Column="SearchID" />
      <Map Name="SearchName" Column="SearchName" />
      <Map Name="FilterValue" Column="FilterValue" />
      <Map Name="EntityID" Column="EntityID" />
      <Map Name="UserID" Column="UserID" />
      <Map Name="RecordType" Column="type_" IsStored="0" />
      <Map Name="ShareFilter" Column="ShareFilter" />
      <Map Name="FilterDescription" Column="FilterDescription" />
      <Map Name="Added" Column="Added" />
      <Map Name="Applied" Column="Applied" />
      <Map Name="Context" Column="Context" />
    </Table>
    <Lexem>
      <Map Name="HasParent">
        <lx:Case xmlns:lx="lexem">
          <When>
            <lx:TreeQuery EntityName="VCLib.DIVISIONS" QueryType="HaveChild" xmlns:lx="lexem">
              <path>
                <lx:Path OwnerQueryLevel="0">
                  <lx:StepInt index="40006" />
                  <lx:StepInt index="50017" />
                </lx:Path>
              </path>
              <condition>
                <lx:Criterion type="=">
                  <lx:Path OwnerQueryLevel="0">
                    <lx:StepInt index="330001" />
                  </lx:Path>
                  <lx:Argument>
                    <lx:ConstOperand type="Int32">0</lx:ConstOperand>
                  </lx:Argument>
                </lx:Criterion>
              </condition>
            </lx:TreeQuery>
          </When>
          <Then>
            <lx:ConstOperand type="Boolean">True</lx:ConstOperand>
          </Then>
          <Else>
            <lx:ConstOperand type="Boolean">False</lx:ConstOperand>
          </Else>
        </lx:Case>
      </Map>
      <Map Name="HasChild">
        <lx:Case xmlns:lx="lexem">
          <When>
            <lx:TreeQuery EntityName="VCLib.DIVISIONS" QueryType="HaveParent" xmlns:lx="lexem">
              <path>
                <lx:Path OwnerQueryLevel="0">
                  <lx:StepInt index="40006" />
                  <lx:StepInt index="50017" />
                </lx:Path>
              </path>
              <condition>
                <lx:Criterion type="=">
                  <lx:Path OwnerQueryLevel="0">
                    <lx:StepInt index="330001" />
                  </lx:Path>
                  <lx:Argument>
                    <lx:ConstOperand type="Int32">0</lx:ConstOperand>
                  </lx:Argument>
                </lx:Criterion>
              </condition>
            </lx:TreeQuery>
          </When>
          <Then>
            <lx:ConstOperand type="Boolean">True</lx:ConstOperand>
          </Then>
          <Else>
            <lx:ConstOperand type="Boolean">False</lx:ConstOperand>
          </Else>
        </lx:Case>
      </Map>
      <Map Name="Filters">
        <lx:Block xmlns:lx="lexem">
          <lx:LexemList>
            <lx:Variable Name="a" Level="0" />
          </lx:LexemList>
          <lx:LexemList>
            <lx:Assign>
              <lx:Variable Name="a" Level="0" />
              <lx:ConstOperand type="Decimal">0</lx:ConstOperand>
            </lx:Assign>
            <lx:Case>
              <When>
                <lx:Criterion type="=" xmlns:lx="lexem">
                  <lx:Path OwnerQueryLevel="0">
                    <lx:StepInt index="40006" />
                  </lx:Path>
                  <lx:Argument>
                    <lx:ConstOperand type="Int32">1</lx:ConstOperand>
                  </lx:Argument>
                </lx:Criterion>
              </When>
              <Then>
                <lx:Assign>
                  <lx:Variable Name="a" Level="0" />
                  <lx:MathOperator sign="|">
                    <lx:Variable Name="a" Level="0" />
                    <lx:ConstOperand type="Decimal">1</lx:ConstOperand>
                  </lx:MathOperator>
                </lx:Assign>
              </Then>
            </lx:Case>
            <lx:Case>
              <When>
                <lx:Criterion type="=" xmlns:lx="lexem">
                  <lx:Path OwnerQueryLevel="0">
                    <lx:StepInt index="40006" />
                    <lx:StepInt index="50017" />
                    <lx:StepInt index="330001" />
                  </lx:Path>
                  <lx:Argument>
                    <lx:ConstOperand type="Int32">0</lx:ConstOperand>
                  </lx:Argument>
                </lx:Criterion>
              </When>
              <Then>
                <lx:Assign>
                  <lx:Variable Name="a" Level="0" />
                  <lx:MathOperator sign="|">
                    <lx:Variable Name="a" Level="0" />
                    <lx:ConstOperand type="Decimal">2</lx:ConstOperand>
                  </lx:MathOperator>
                </lx:Assign>
              </Then>
            </lx:Case>
            <lx:Case>
              <When>
                <lx:Criterion type="=">
                  <lx:Path OwnerQueryLevel="0">
                    <lx:StepInt index="40010" />
                  </lx:Path>
                  <lx:ConstOperand type="Boolean">True</lx:ConstOperand>
                </lx:Criterion>
              </When>
              <Then>
                <lx:Assign>
                  <lx:Variable Name="a" Level="0" />
                  <lx:MathOperator sign="|">
                    <lx:Variable Name="a" Level="0" />
                    <lx:ConstOperand type="Decimal">4</lx:ConstOperand>
                  </lx:MathOperator>
                </lx:Assign>
              </Then>
            </lx:Case>
            <lx:Case>
              <When>
                <lx:Criterion type="=">
                  <lx:Path OwnerQueryLevel="0">
                    <lx:StepInt index="40009" />
                  </lx:Path>
                  <lx:ConstOperand type="Boolean">True</lx:ConstOperand>
                </lx:Criterion>
              </When>
              <Then>
                <lx:Assign>
                  <lx:Variable Name="a" Level="0" />
                  <lx:MathOperator sign="|">
                    <lx:Variable Name="a" Level="0" />
                    <lx:ConstOperand type="Decimal">8</lx:ConstOperand>
                  </lx:MathOperator>
                </lx:Assign>
              </Then>
            </lx:Case>
            <lx:Variable Name="a" Level="0" />
          </lx:LexemList>
          <lx:LexemList>
            <lx:Path OwnerQueryLevel="0">
              <lx:StepInt index="40006" />
              <lx:StepInt index="50017" />
              <lx:StepInt index="330001" />
            </lx:Path>
            <lx:Path OwnerQueryLevel="0">
              <lx:StepInt index="40010" />
            </lx:Path>
            <lx:Path OwnerQueryLevel="0">
              <lx:StepInt index="40009" />
            </lx:Path>
          </lx:LexemList>
        </lx:Block>
      </Map>
    </Lexem>
  </DbMapping>
</Entity>